{ "version": 3, "sources": ["../../../node_modules/@rails/activestorage/app/assets/javascripts/activestorage.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/adapters.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/logger.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/connection_monitor.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/internal.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/connection.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/subscription.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/subscription_guarantor.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/subscriptions.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/consumer.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/index.js", "../../../node_modules/leaflet/src/core/Util.js", "../../../node_modules/leaflet/src/core/Class.js", "../../../node_modules/leaflet/src/core/Events.js", "../../../node_modules/leaflet/src/geometry/Point.js", "../../../node_modules/leaflet/src/geometry/Bounds.js", "../../../node_modules/leaflet/src/geo/LatLngBounds.js", "../../../node_modules/leaflet/src/geo/LatLng.js", "../../../node_modules/leaflet/src/geo/crs/CRS.js", "../../../node_modules/leaflet/src/geo/crs/CRS.Earth.js", "../../../node_modules/leaflet/src/geo/projection/Projection.SphericalMercator.js", "../../../node_modules/leaflet/src/geometry/Transformation.js", "../../../node_modules/leaflet/src/geo/crs/CRS.EPSG3857.js", "../../../node_modules/leaflet/src/layer/vector/SVG.Util.js", "../../../node_modules/leaflet/src/core/Browser.js", "../../../node_modules/leaflet/src/dom/DomEvent.Pointer.js", "../../../node_modules/leaflet/src/dom/DomEvent.DoubleTap.js", "../../../node_modules/leaflet/src/dom/DomUtil.js", "../../../node_modules/leaflet/src/dom/DomEvent.js", "../../../node_modules/leaflet/src/dom/PosAnimation.js", "../../../node_modules/leaflet/src/map/Map.js", "../../../node_modules/leaflet/src/control/Control.js", "../../../node_modules/leaflet/src/control/Control.Layers.js", "../../../node_modules/leaflet/src/control/Control.Zoom.js", "../../../node_modules/leaflet/src/control/Control.Scale.js", "../../../node_modules/leaflet/src/control/Control.Attribution.js", "../../../node_modules/leaflet/src/control/index.js", "../../../node_modules/leaflet/src/core/Handler.js", "../../../node_modules/leaflet/src/core/index.js", "../../../node_modules/leaflet/src/dom/Draggable.js", "../../../node_modules/leaflet/src/geometry/PolyUtil.js", "../../../node_modules/leaflet/src/geometry/LineUtil.js", "../../../node_modules/leaflet/src/geo/projection/Projection.LonLat.js", "../../../node_modules/leaflet/src/geo/projection/Projection.Mercator.js", "../../../node_modules/leaflet/src/geo/projection/index.js", "../../../node_modules/leaflet/src/geo/crs/CRS.EPSG3395.js", "../../../node_modules/leaflet/src/geo/crs/CRS.EPSG4326.js", "../../../node_modules/leaflet/src/geo/crs/CRS.Simple.js", "../../../node_modules/leaflet/src/geo/crs/index.js", "../../../node_modules/leaflet/src/layer/Layer.js", "../../../node_modules/leaflet/src/layer/LayerGroup.js", "../../../node_modules/leaflet/src/layer/FeatureGroup.js", "../../../node_modules/leaflet/src/layer/marker/Icon.js", "../../../node_modules/leaflet/src/layer/marker/Icon.Default.js", "../../../node_modules/leaflet/src/layer/marker/Marker.Drag.js", "../../../node_modules/leaflet/src/layer/marker/Marker.js", "../../../node_modules/leaflet/src/layer/vector/Path.js", "../../../node_modules/leaflet/src/layer/vector/CircleMarker.js", "../../../node_modules/leaflet/src/layer/vector/Circle.js", "../../../node_modules/leaflet/src/layer/vector/Polyline.js", "../../../node_modules/leaflet/src/layer/vector/Polygon.js", "../../../node_modules/leaflet/src/layer/GeoJSON.js", "../../../node_modules/leaflet/src/layer/ImageOverlay.js", "../../../node_modules/leaflet/src/layer/VideoOverlay.js", "../../../node_modules/leaflet/src/layer/SVGOverlay.js", "../../../node_modules/leaflet/src/layer/DivOverlay.js", "../../../node_modules/leaflet/src/layer/Popup.js", "../../../node_modules/leaflet/src/layer/Tooltip.js", "../../../node_modules/leaflet/src/layer/marker/DivIcon.js", "../../../node_modules/leaflet/src/layer/marker/index.js", "../../../node_modules/leaflet/src/layer/tile/GridLayer.js", "../../../node_modules/leaflet/src/layer/tile/TileLayer.js", "../../../node_modules/leaflet/src/layer/tile/TileLayer.WMS.js", "../../../node_modules/leaflet/src/layer/tile/index.js", "../../../node_modules/leaflet/src/layer/vector/Renderer.js", "../../../node_modules/leaflet/src/layer/vector/Canvas.js", "../../../node_modules/leaflet/src/layer/vector/SVG.VML.js", "../../../node_modules/leaflet/src/layer/vector/SVG.js", "../../../node_modules/leaflet/src/layer/vector/Renderer.getRenderer.js", "../../../node_modules/leaflet/src/layer/vector/Rectangle.js", "../../../node_modules/leaflet/src/layer/vector/index.js", "../../../node_modules/leaflet/src/layer/index.js", "../../../node_modules/leaflet/src/map/handler/Map.BoxZoom.js", "../../../node_modules/leaflet/src/map/handler/Map.DoubleClickZoom.js", "../../../node_modules/leaflet/src/map/handler/Map.Drag.js", "../../../node_modules/leaflet/src/map/handler/Map.Keyboard.js", "../../../node_modules/leaflet/src/map/handler/Map.ScrollWheelZoom.js", "../../../node_modules/leaflet/src/map/handler/Map.TapHold.js", "../../../node_modules/leaflet/src/map/handler/Map.TouchZoom.js", "../../../node_modules/leaflet/src/map/index.js", "../../../node_modules/leaflet-providers/leaflet-providers.js", "../../../node_modules/codemirror/lib/codemirror.js", "../../../node_modules/codemirror/addon/edit/continuelist.js", "../../../node_modules/easymde/src/js/codemirror/tablist.js", "../../../node_modules/codemirror/addon/display/fullscreen.js", "../../../node_modules/codemirror/mode/xml/xml.js", "../../../node_modules/codemirror/mode/meta.js", "../../../node_modules/codemirror/mode/markdown/markdown.js", "../../../node_modules/codemirror/addon/mode/overlay.js", "../../../node_modules/codemirror/addon/display/placeholder.js", "../../../node_modules/codemirror/addon/display/autorefresh.js", "../../../node_modules/codemirror/addon/selection/mark-selection.js", "../../../node_modules/codemirror/addon/search/searchcursor.js", "../../../node_modules/codemirror/mode/gfm/gfm.js", "../../../node_modules/typo-js/typo.js", "../../../node_modules/codemirror-spell-checker/src/js/spell-checker.js", "../../../node_modules/marked/lib/marked.cjs", "../../../node_modules/easymde/src/js/easymde.js", "../../../node_modules/wnumb/wNumb.js", "../../../node_modules/@fontsource/inter/index.css", "../../../node_modules/@fontsource/raleway/index.css", "../../../node_modules/@popperjs/core/lib/index.js", "../../../node_modules/@popperjs/core/lib/enums.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getWindow.js", "../../../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js", "../../../node_modules/@popperjs/core/lib/modifiers/applyStyles.js", "../../../node_modules/@popperjs/core/lib/utils/getBasePlacement.js", "../../../node_modules/@popperjs/core/lib/utils/math.js", "../../../node_modules/@popperjs/core/lib/utils/userAgent.js", "../../../node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/contains.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js", "../../../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js", "../../../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js", "../../../node_modules/@popperjs/core/lib/utils/within.js", "../../../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js", "../../../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js", "../../../node_modules/@popperjs/core/lib/utils/expandToHashMap.js", "../../../node_modules/@popperjs/core/lib/modifiers/arrow.js", "../../../node_modules/@popperjs/core/lib/utils/getVariation.js", "../../../node_modules/@popperjs/core/lib/modifiers/computeStyles.js", "../../../node_modules/@popperjs/core/lib/modifiers/eventListeners.js", "../../../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js", "../../../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js", "../../../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js", "../../../node_modules/@popperjs/core/lib/utils/rectToClientRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js", "../../../node_modules/@popperjs/core/lib/utils/computeOffsets.js", "../../../node_modules/@popperjs/core/lib/utils/detectOverflow.js", "../../../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js", "../../../node_modules/@popperjs/core/lib/modifiers/flip.js", "../../../node_modules/@popperjs/core/lib/modifiers/hide.js", "../../../node_modules/@popperjs/core/lib/modifiers/offset.js", "../../../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js", "../../../node_modules/@popperjs/core/lib/utils/getAltAxis.js", "../../../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js", "../../../node_modules/@popperjs/core/lib/utils/orderModifiers.js", "../../../node_modules/@popperjs/core/lib/utils/debounce.js", "../../../node_modules/@popperjs/core/lib/utils/mergeByName.js", "../../../node_modules/@popperjs/core/lib/createPopper.js", "../../../node_modules/@popperjs/core/lib/popper-lite.js", "../../../node_modules/@popperjs/core/lib/popper.js", "../../../node_modules/bootstrap/js/src/dom/data.js", "../../../node_modules/bootstrap/js/src/util/index.js", "../../../node_modules/bootstrap/js/src/dom/event-handler.js", "../../../node_modules/bootstrap/js/src/dom/manipulator.js", "../../../node_modules/bootstrap/js/src/util/config.js", "../../../node_modules/bootstrap/js/src/base-component.js", "../../../node_modules/bootstrap/js/src/dom/selector-engine.js", "../../../node_modules/bootstrap/js/src/util/component-functions.js", "../../../node_modules/bootstrap/js/src/alert.js", "../../../node_modules/bootstrap/js/src/button.js", "../../../node_modules/bootstrap/js/src/util/swipe.js", "../../../node_modules/bootstrap/js/src/carousel.js", "../../../node_modules/bootstrap/js/src/collapse.js", "../../../node_modules/bootstrap/js/src/dropdown.js", "../../../node_modules/bootstrap/js/src/util/backdrop.js", "../../../node_modules/bootstrap/js/src/util/focustrap.js", "../../../node_modules/bootstrap/js/src/util/scrollbar.js", "../../../node_modules/bootstrap/js/src/modal.js", "../../../node_modules/bootstrap/js/src/offcanvas.js", "../../../node_modules/bootstrap/js/src/util/sanitizer.js", "../../../node_modules/bootstrap/js/src/util/template-factory.js", "../../../node_modules/bootstrap/js/src/tooltip.js", "../../../node_modules/bootstrap/js/src/popover.js", "../../../node_modules/bootstrap/js/src/scrollspy.js", "../../../node_modules/bootstrap/js/src/tab.js", "../../../node_modules/bootstrap/js/src/toast.js", "../../javascript/application.js", "../../../node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/snakeize.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable_stream_source_element.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/fetch_requests.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/index.js", "../../../node_modules/@hotwired/stimulus/dist/stimulus.js", "../../javascript/controllers/application.js", "../../javascript/controllers/article_editor_controller.js", "../../javascript/controllers/flash_controller.js", "../../javascript/controllers/home_hero_controller.js", "../../javascript/controllers/map_controller.js", "../../../node_modules/leaflet-lasso/src/lasso-polygon.ts", "../../../node_modules/leaflet-lasso/node_modules/@terraformer/spatial/dist/t-spatial.esm.js", "../../../node_modules/leaflet-lasso/src/calc.ts", "../../../node_modules/leaflet-lasso/node_modules/style-inject/dist/style-inject.es.js", "../../../node_modules/leaflet-lasso/src/lasso-handler.ts", "../../../node_modules/leaflet-lasso/src/lasso-control.ts", "../../../node_modules/leaflet-lasso/src/index.ts", "../../../node_modules/kdbush/src/sort.js", "../../../node_modules/kdbush/src/range.js", "../../../node_modules/kdbush/src/within.js", "../../../node_modules/kdbush/src/index.js", "../../../node_modules/supercluster/index.js", "../../javascript/controllers/markdown_editor_controller.js", "../../javascript/controllers/remote_modal_controller.js", "../../../node_modules/nouislider/dist/nouislider.mjs", "../../javascript/controllers/slider_controller.js", "../../../node_modules/tom-select/src/contrib/microevent.ts", "../../../node_modules/tom-select/src/contrib/microplugin.ts", "../../../node_modules/@orchidjs/unicode-variants/lib/regex.ts", "../../../node_modules/@orchidjs/unicode-variants/lib/strings.ts", "../../../node_modules/@orchidjs/unicode-variants/lib/index.ts", "../../../node_modules/@orchidjs/sifter/lib/utils.ts", "../../../node_modules/@orchidjs/sifter/lib/sifter.ts", "../../../node_modules/tom-select/src/utils.ts", "../../../node_modules/tom-select/src/vanilla.ts", "../../../node_modules/tom-select/src/contrib/highlight.ts", "../../../node_modules/tom-select/src/constants.ts", "../../../node_modules/tom-select/src/defaults.ts", "../../../node_modules/tom-select/src/getSettings.ts", "../../../node_modules/tom-select/src/tom-select.ts", "../../../node_modules/tom-select/src/utils.ts", "../../../node_modules/tom-select/src/plugins/change_listener/plugin.ts", "../../../node_modules/tom-select/src/utils.ts", "../../../node_modules/tom-select/src/vanilla.ts", "../../../node_modules/tom-select/src/plugins/checkbox_options/plugin.ts", "../../../node_modules/tom-select/src/vanilla.ts", "../../../node_modules/tom-select/src/plugins/clear_button/plugin.ts", "../../../node_modules/tom-select/src/utils.ts", "../../../node_modules/tom-select/src/vanilla.ts", "../../../node_modules/tom-select/src/plugins/drag_drop/plugin.ts", "../../../node_modules/tom-select/src/utils.ts", "../../../node_modules/tom-select/src/vanilla.ts", "../../../node_modules/tom-select/src/plugins/dropdown_header/plugin.ts", "../../../node_modules/tom-select/src/utils.ts", "../../../node_modules/tom-select/src/vanilla.ts", "../../../node_modules/tom-select/src/plugins/caret_position/plugin.ts", "../../../node_modules/tom-select/src/constants.ts", "../../../node_modules/tom-select/src/utils.ts", "../../../node_modules/tom-select/src/vanilla.ts", "../../../node_modules/tom-select/src/plugins/dropdown_input/plugin.ts", "../../../node_modules/tom-select/src/utils.ts", "../../../node_modules/tom-select/src/plugins/input_autogrow/plugin.ts", "../../../node_modules/tom-select/src/plugins/no_backspace_delete/plugin.ts", "../../../node_modules/tom-select/src/plugins/no_active_items/plugin.ts", "../../../node_modules/tom-select/src/constants.ts", "../../../node_modules/tom-select/src/vanilla.ts", "../../../node_modules/tom-select/src/plugins/optgroup_columns/plugin.ts", "../../../node_modules/tom-select/src/utils.ts", "../../../node_modules/tom-select/src/vanilla.ts", "../../../node_modules/tom-select/src/plugins/remove_button/plugin.ts", "../../../node_modules/tom-select/src/plugins/restore_on_backspace/plugin.ts", "../../../node_modules/tom-select/src/utils.ts", "../../../node_modules/tom-select/src/vanilla.ts", "../../../node_modules/tom-select/src/plugins/virtual_scroll/plugin.ts", "../../../node_modules/tom-select/src/tom-select.complete.ts", "../../javascript/controllers/tom_select_controller.js", "../../javascript/controllers/tooltips_controller.js", "../../../node_modules/json-stringify-pretty-compact/index.js", "../../../node_modules/vega/build/vega.module.js", "../../../node_modules/vega-util/build/vega-util.module.js", "../../../node_modules/d3-dsv/src/dsv.js", "../../../node_modules/topojson-client/src/identity.js", "../../../node_modules/topojson-client/src/transform.js", "../../../node_modules/topojson-client/src/reverse.js", "../../../node_modules/topojson-client/src/feature.js", "../../../node_modules/topojson-client/src/stitch.js", "../../../node_modules/topojson-client/src/mesh.js", "../../../node_modules/d3-array/src/ascending.js", "../../../node_modules/d3-array/src/descending.js", "../../../node_modules/d3-array/src/bisector.js", "../../../node_modules/d3-array/src/number.js", "../../../node_modules/d3-array/src/bisect.js", "../../../node_modules/d3-array/src/variance.js", "../../../node_modules/d3-array/src/deviation.js", "../../../node_modules/d3-array/src/fsum.js", "../../../node_modules/internmap/src/index.js", "../../../node_modules/d3-array/src/permute.js", "../../../node_modules/d3-array/src/sort.js", "../../../node_modules/d3-array/src/ticks.js", "../../../node_modules/d3-array/src/max.js", "../../../node_modules/d3-array/src/min.js", "../../../node_modules/d3-array/src/quickselect.js", "../../../node_modules/d3-array/src/quantile.js", "../../../node_modules/d3-array/src/mean.js", "../../../node_modules/d3-array/src/median.js", "../../../node_modules/d3-array/src/merge.js", "../../../node_modules/d3-array/src/range.js", "../../../node_modules/d3-array/src/sum.js", "../../../node_modules/d3-array/src/intersection.js", "../../../node_modules/d3-array/src/union.js", "../../../node_modules/d3-format/src/formatDecimal.js", "../../../node_modules/d3-format/src/exponent.js", "../../../node_modules/d3-format/src/formatGroup.js", "../../../node_modules/d3-format/src/formatNumerals.js", "../../../node_modules/d3-format/src/formatSpecifier.js", "../../../node_modules/d3-format/src/formatTrim.js", "../../../node_modules/d3-format/src/formatPrefixAuto.js", "../../../node_modules/d3-format/src/formatRounded.js", "../../../node_modules/d3-format/src/formatTypes.js", "../../../node_modules/d3-format/src/identity.js", "../../../node_modules/d3-format/src/locale.js", "../../../node_modules/d3-format/src/defaultLocale.js", "../../../node_modules/d3-format/src/precisionFixed.js", "../../../node_modules/d3-format/src/precisionPrefix.js", "../../../node_modules/d3-format/src/precisionRound.js", "../../../node_modules/d3-time/src/interval.js", "../../../node_modules/d3-time/src/millisecond.js", "../../../node_modules/d3-time/src/duration.js", "../../../node_modules/d3-time/src/second.js", "../../../node_modules/d3-time/src/minute.js", "../../../node_modules/d3-time/src/hour.js", "../../../node_modules/d3-time/src/day.js", "../../../node_modules/d3-time/src/week.js", "../../../node_modules/d3-time/src/month.js", "../../../node_modules/d3-time/src/year.js", "../../../node_modules/d3-time/src/ticks.js", "../../../node_modules/vega-time/build/vega-time.module.js", "../../../node_modules/d3-time-format/src/locale.js", "../../../node_modules/d3-time-format/src/defaultLocale.js", "../../../node_modules/vega-format/build/vega-format.module.js", "../../../node_modules/vega-loader/build/vega-loader.browser.module.js", "../../../node_modules/vega-dataflow/build/vega-dataflow.module.js", "../../../node_modules/vega-transforms/build/vega-transforms.module.js", "../../../node_modules/vega-statistics/build/vega-statistics.module.js", "../../../node_modules/vega-view-transforms/build/vega-view-transforms.module.js", "../../../node_modules/d3-shape/src/constant.js", "../../../node_modules/d3-shape/src/math.js", "../../../node_modules/d3-path/src/path.js", "../../../node_modules/d3-shape/src/path.js", "../../../node_modules/d3-shape/src/arc.js", "../../../node_modules/d3-shape/src/array.js", "../../../node_modules/d3-shape/src/curve/linear.js", "../../../node_modules/d3-shape/src/point.js", "../../../node_modules/d3-shape/src/line.js", "../../../node_modules/d3-shape/src/area.js", "../../../node_modules/d3-shape/src/symbol/circle.js", "../../../node_modules/d3-shape/src/symbol.js", "../../../node_modules/d3-shape/src/noop.js", "../../../node_modules/d3-shape/src/curve/basis.js", "../../../node_modules/d3-shape/src/curve/basisClosed.js", "../../../node_modules/d3-shape/src/curve/basisOpen.js", "../../../node_modules/d3-shape/src/curve/bundle.js", "../../../node_modules/d3-shape/src/curve/cardinal.js", "../../../node_modules/d3-shape/src/curve/cardinalClosed.js", "../../../node_modules/d3-shape/src/curve/cardinalOpen.js", "../../../node_modules/d3-shape/src/curve/catmullRom.js", "../../../node_modules/d3-shape/src/curve/catmullRomClosed.js", "../../../node_modules/d3-shape/src/curve/catmullRomOpen.js", "../../../node_modules/d3-shape/src/curve/linearClosed.js", "../../../node_modules/d3-shape/src/curve/monotone.js", "../../../node_modules/d3-shape/src/curve/natural.js", "../../../node_modules/d3-shape/src/curve/step.js", "../../../node_modules/vega-canvas/build/vega-canvas.browser.module.js", "../../../node_modules/d3-scale/src/init.js", "../../../node_modules/d3-scale/src/ordinal.js", "../../../node_modules/d3-interpolate/src/index.js", "../../../node_modules/d3-color/src/define.js", "../../../node_modules/d3-color/src/color.js", "../../../node_modules/d3-color/src/math.js", "../../../node_modules/d3-color/src/lab.js", "../../../node_modules/d3-color/src/cubehelix.js", "../../../node_modules/d3-interpolate/src/basis.js", "../../../node_modules/d3-interpolate/src/basisClosed.js", "../../../node_modules/d3-interpolate/src/constant.js", "../../../node_modules/d3-interpolate/src/color.js", "../../../node_modules/d3-interpolate/src/rgb.js", "../../../node_modules/d3-interpolate/src/numberArray.js", "../../../node_modules/d3-interpolate/src/array.js", "../../../node_modules/d3-interpolate/src/date.js", "../../../node_modules/d3-interpolate/src/number.js", "../../../node_modules/d3-interpolate/src/object.js", "../../../node_modules/d3-interpolate/src/string.js", "../../../node_modules/d3-interpolate/src/value.js", "../../../node_modules/d3-interpolate/src/discrete.js", "../../../node_modules/d3-interpolate/src/hue.js", "../../../node_modules/d3-interpolate/src/round.js", "../../../node_modules/d3-interpolate/src/transform/decompose.js", "../../../node_modules/d3-interpolate/src/transform/parse.js", "../../../node_modules/d3-interpolate/src/transform/index.js", "../../../node_modules/d3-interpolate/src/zoom.js", "../../../node_modules/d3-interpolate/src/hsl.js", "../../../node_modules/d3-interpolate/src/lab.js", "../../../node_modules/d3-interpolate/src/hcl.js", "../../../node_modules/d3-interpolate/src/cubehelix.js", "../../../node_modules/d3-interpolate/src/piecewise.js", "../../../node_modules/d3-interpolate/src/quantize.js", "../../../node_modules/d3-scale/src/constant.js", "../../../node_modules/d3-scale/src/number.js", "../../../node_modules/d3-scale/src/continuous.js", "../../../node_modules/d3-scale/src/tickFormat.js", "../../../node_modules/d3-scale/src/linear.js", "../../../node_modules/d3-scale/src/identity.js", "../../../node_modules/d3-scale/src/nice.js", "../../../node_modules/d3-scale/src/log.js", "../../../node_modules/d3-scale/src/symlog.js", "../../../node_modules/d3-scale/src/pow.js", "../../../node_modules/d3-scale/src/quantile.js", "../../../node_modules/d3-scale/src/quantize.js", "../../../node_modules/d3-scale/src/threshold.js", "../../../node_modules/d3-scale/src/time.js", "../../../node_modules/d3-scale/src/utcTime.js", "../../../node_modules/d3-scale/src/sequential.js", "../../../node_modules/d3-scale/src/diverging.js", "../../../node_modules/d3-scale-chromatic/src/colors.js", "../../../node_modules/d3-scale-chromatic/src/categorical/category10.js", "../../../node_modules/d3-scale-chromatic/src/categorical/Accent.js", "../../../node_modules/d3-scale-chromatic/src/categorical/Dark2.js", "../../../node_modules/d3-scale-chromatic/src/categorical/observable10.js", "../../../node_modules/d3-scale-chromatic/src/categorical/Paired.js", "../../../node_modules/d3-scale-chromatic/src/categorical/Pastel1.js", "../../../node_modules/d3-scale-chromatic/src/categorical/Pastel2.js", "../../../node_modules/d3-scale-chromatic/src/categorical/Set1.js", "../../../node_modules/d3-scale-chromatic/src/categorical/Set2.js", "../../../node_modules/d3-scale-chromatic/src/categorical/Set3.js", "../../../node_modules/vega-scale/build/vega-scale.module.js", "../../../node_modules/vega-scenegraph/build/vega-scenegraph.module.js", "../../../node_modules/vega-encode/build/vega-encode.module.js", "../../../node_modules/vega-geo/build/vega-geo.module.js", "../../../node_modules/d3-geo/src/math.js", "../../../node_modules/d3-geo/src/noop.js", "../../../node_modules/d3-geo/src/stream.js", "../../../node_modules/d3-geo/src/area.js", "../../../node_modules/d3-geo/src/cartesian.js", "../../../node_modules/d3-geo/src/bounds.js", "../../../node_modules/d3-geo/src/centroid.js", "../../../node_modules/d3-geo/src/compose.js", "../../../node_modules/d3-geo/src/rotation.js", "../../../node_modules/d3-geo/src/circle.js", "../../../node_modules/d3-geo/src/clip/buffer.js", "../../../node_modules/d3-geo/src/pointEqual.js", "../../../node_modules/d3-geo/src/clip/rejoin.js", "../../../node_modules/d3-geo/src/polygonContains.js", "../../../node_modules/d3-geo/src/clip/index.js", "../../../node_modules/d3-geo/src/clip/antimeridian.js", "../../../node_modules/d3-geo/src/clip/circle.js", "../../../node_modules/d3-geo/src/clip/line.js", "../../../node_modules/d3-geo/src/clip/rectangle.js", "../../../node_modules/d3-geo/src/graticule.js", "../../../node_modules/d3-geo/src/identity.js", "../../../node_modules/d3-geo/src/path/area.js", "../../../node_modules/d3-geo/src/path/bounds.js", "../../../node_modules/d3-geo/src/path/centroid.js", "../../../node_modules/d3-geo/src/path/context.js", "../../../node_modules/d3-geo/src/path/measure.js", "../../../node_modules/d3-geo/src/path/string.js", "../../../node_modules/d3-geo/src/path/index.js", "../../../node_modules/d3-geo/src/transform.js", "../../../node_modules/d3-geo/src/projection/fit.js", "../../../node_modules/d3-geo/src/projection/resample.js", "../../../node_modules/d3-geo/src/projection/index.js", "../../../node_modules/d3-geo/src/projection/conic.js", "../../../node_modules/d3-geo/src/projection/cylindricalEqualArea.js", "../../../node_modules/d3-geo/src/projection/conicEqualArea.js", "../../../node_modules/d3-geo/src/projection/albers.js", "../../../node_modules/d3-geo/src/projection/albersUsa.js", "../../../node_modules/d3-geo/src/projection/azimuthal.js", "../../../node_modules/d3-geo/src/projection/azimuthalEqualArea.js", "../../../node_modules/d3-geo/src/projection/azimuthalEquidistant.js", "../../../node_modules/d3-geo/src/projection/mercator.js", "../../../node_modules/d3-geo/src/projection/conicConformal.js", "../../../node_modules/d3-geo/src/projection/equirectangular.js", "../../../node_modules/d3-geo/src/projection/conicEquidistant.js", "../../../node_modules/d3-geo/src/projection/equalEarth.js", "../../../node_modules/d3-geo/src/projection/gnomonic.js", "../../../node_modules/d3-geo/src/projection/identity.js", "../../../node_modules/d3-geo/src/projection/naturalEarth1.js", "../../../node_modules/d3-geo/src/projection/orthographic.js", "../../../node_modules/d3-geo/src/projection/stereographic.js", "../../../node_modules/d3-geo/src/projection/transverseMercator.js", "../../../node_modules/d3-geo-projection/src/math.js", "../../../node_modules/d3-geo-projection/src/mollweide.js", "../../../node_modules/vega-projection/build/vega-projection.module.js", "../../../node_modules/vega-force/build/vega-force.module.js", "../../../node_modules/d3-force/src/center.js", "../../../node_modules/d3-quadtree/src/add.js", "../../../node_modules/d3-quadtree/src/cover.js", "../../../node_modules/d3-quadtree/src/data.js", "../../../node_modules/d3-quadtree/src/extent.js", "../../../node_modules/d3-quadtree/src/quad.js", "../../../node_modules/d3-quadtree/src/find.js", "../../../node_modules/d3-quadtree/src/remove.js", "../../../node_modules/d3-quadtree/src/root.js", "../../../node_modules/d3-quadtree/src/size.js", "../../../node_modules/d3-quadtree/src/visit.js", "../../../node_modules/d3-quadtree/src/visitAfter.js", "../../../node_modules/d3-quadtree/src/x.js", "../../../node_modules/d3-quadtree/src/y.js", "../../../node_modules/d3-quadtree/src/quadtree.js", "../../../node_modules/d3-force/src/constant.js", "../../../node_modules/d3-force/src/jiggle.js", "../../../node_modules/d3-force/src/collide.js", "../../../node_modules/d3-force/src/link.js", "../../../node_modules/d3-dispatch/src/dispatch.js", "../../../node_modules/d3-timer/src/timer.js", "../../../node_modules/d3-timer/src/interval.js", "../../../node_modules/d3-force/src/lcg.js", "../../../node_modules/d3-force/src/simulation.js", "../../../node_modules/d3-force/src/manyBody.js", "../../../node_modules/d3-force/src/x.js", "../../../node_modules/d3-force/src/y.js", "../../../node_modules/vega-hierarchy/build/vega-hierarchy.module.js", "../../../node_modules/d3-hierarchy/src/cluster.js", "../../../node_modules/d3-hierarchy/src/hierarchy/count.js", "../../../node_modules/d3-hierarchy/src/hierarchy/each.js", "../../../node_modules/d3-hierarchy/src/hierarchy/eachBefore.js", "../../../node_modules/d3-hierarchy/src/hierarchy/eachAfter.js", "../../../node_modules/d3-hierarchy/src/hierarchy/find.js", "../../../node_modules/d3-hierarchy/src/hierarchy/sum.js", "../../../node_modules/d3-hierarchy/src/hierarchy/sort.js", "../../../node_modules/d3-hierarchy/src/hierarchy/path.js", "../../../node_modules/d3-hierarchy/src/hierarchy/ancestors.js", "../../../node_modules/d3-hierarchy/src/hierarchy/descendants.js", "../../../node_modules/d3-hierarchy/src/hierarchy/leaves.js", "../../../node_modules/d3-hierarchy/src/hierarchy/links.js", "../../../node_modules/d3-hierarchy/src/hierarchy/iterator.js", "../../../node_modules/d3-hierarchy/src/hierarchy/index.js", "../../../node_modules/d3-hierarchy/src/accessors.js", "../../../node_modules/d3-hierarchy/src/constant.js", "../../../node_modules/d3-hierarchy/src/lcg.js", "../../../node_modules/d3-hierarchy/src/array.js", "../../../node_modules/d3-hierarchy/src/pack/enclose.js", "../../../node_modules/d3-hierarchy/src/pack/siblings.js", "../../../node_modules/d3-hierarchy/src/pack/index.js", "../../../node_modules/d3-hierarchy/src/treemap/round.js", "../../../node_modules/d3-hierarchy/src/treemap/dice.js", "../../../node_modules/d3-hierarchy/src/partition.js", "../../../node_modules/d3-hierarchy/src/stratify.js", "../../../node_modules/d3-hierarchy/src/tree.js", "../../../node_modules/d3-hierarchy/src/treemap/slice.js", "../../../node_modules/d3-hierarchy/src/treemap/squarify.js", "../../../node_modules/d3-hierarchy/src/treemap/index.js", "../../../node_modules/d3-hierarchy/src/treemap/binary.js", "../../../node_modules/d3-hierarchy/src/treemap/sliceDice.js", "../../../node_modules/d3-hierarchy/src/treemap/resquarify.js", "../../../node_modules/vega-label/build/vega-label.module.js", "../../../node_modules/vega-regression/build/vega-regression.module.js", "../../../node_modules/vega-voronoi/build/vega-voronoi.module.js", "../../../node_modules/robust-predicates/esm/util.js", "../../../node_modules/robust-predicates/esm/orient2d.js", "../../../node_modules/robust-predicates/esm/orient3d.js", "../../../node_modules/robust-predicates/esm/incircle.js", "../../../node_modules/robust-predicates/esm/insphere.js", "../../../node_modules/delaunator/index.js", "../../../node_modules/d3-delaunay/src/path.js", "../../../node_modules/d3-delaunay/src/polygon.js", "../../../node_modules/d3-delaunay/src/voronoi.js", "../../../node_modules/d3-delaunay/src/delaunay.js", "../../../node_modules/vega-wordcloud/build/vega-wordcloud.module.js", "../../../node_modules/vega-crossfilter/build/vega-crossfilter.module.js", "../../../node_modules/vega-expression/build/vega-expression.module.js", "../../../node_modules/vega-selections/build/vega-selection.module.js", "../../../node_modules/vega-functions/build/vega-functions.module.js", "../../../node_modules/vega-runtime/build/vega-runtime.module.js", "../../../node_modules/vega-view/build/vega-view.module.js", "../../../node_modules/vega-event-selector/build/vega-event-selector.module.js", "../../../node_modules/vega-parser/build/vega-parser.module.js", "../../../node_modules/vega-interpreter/build/vega-interpreter.module.js", "../../../node_modules/vega-lite/src/index.ts", "../../../node_modules/vega-lite/build/package.json", "../../../node_modules/vega-lite/src/logical.ts", "../../../node_modules/vega-lite/src/util.ts", "../../../node_modules/vega-lite/src/channel.ts", "../../../node_modules/vega-lite/src/aggregate.ts", "../../../node_modules/vega-lite/src/bin.ts", "../../../node_modules/vega-lite/src/expr.ts", "../../../node_modules/vega-lite/src/title.ts", "../../../node_modules/vega-lite/src/vega.schema.ts", "../../../node_modules/vega-lite/src/compile/common.ts", "../../../node_modules/vega-lite/src/log/message.ts", "../../../node_modules/vega-lite/src/log/index.ts", "../../../node_modules/vega-lite/src/datetime.ts", "../../../node_modules/vega-lite/src/timeunit.ts", "../../../node_modules/vega-lite/src/predicate.ts", "../../../node_modules/vega-lite/src/type.ts", "../../../node_modules/vega-lite/src/scale.ts", "../../../node_modules/vega-lite/src/invalid.ts", "../../../node_modules/vega-lite/src/mark.ts", "../../../node_modules/vega-lite/src/compile/invalid/normalizeInvalidDataMode.ts", "../../../node_modules/vega-lite/src/compile/invalid/ScaleInvalidDataMode.ts", "../../../node_modules/vega-lite/src/compile/mark/encode/scaledZeroOrMinOrMax.ts", "../../../node_modules/vega-lite/src/compile/mark/encode/invalid.ts", "../../../node_modules/vega-lite/src/compile/mark/encode/valueref.ts", "../../../node_modules/vega-lite/src/compile/format.ts", "../../../node_modules/vega-lite/src/sort.ts", "../../../node_modules/vega-lite/src/spec/facet.ts", "../../../node_modules/vega-lite/src/channeldef.ts", "../../../node_modules/vega-lite/src/axis.ts", "../../../node_modules/vega-lite/src/spec/unit.ts", "../../../node_modules/vega-lite/src/compositemark/base.ts", "../../../node_modules/vega-lite/src/encoding.ts", "../../../node_modules/vega-lite/src/compositemark/common.ts", "../../../node_modules/vega-lite/src/compositemark/boxplot.ts", "../../../node_modules/vega-lite/src/compositemark/errorbar.ts", "../../../node_modules/vega-lite/src/compositemark/errorband.ts", "../../../node_modules/vega-lite/src/compositemark/index.ts", "../../../node_modules/vega-lite/src/guide.ts", "../../../node_modules/vega-lite/src/header.ts", "../../../node_modules/vega-lite/src/legend.ts", "../../../node_modules/vega-lite/src/selection.ts", "../../../node_modules/vega-lite/src/parameter.ts", "../../../node_modules/vega-lite/src/spec/concat.ts", "../../../node_modules/vega-lite/src/spec/base.ts", "../../../node_modules/vega-lite/src/config.ts", "../../../node_modules/vega-lite/src/spec/layer.ts", "../../../node_modules/vega-lite/src/spec/repeat.ts", "../../../node_modules/vega-lite/src/spec/map.ts", "../../../node_modules/vega-lite/src/stack.ts", "../../../node_modules/vega-lite/src/compile/mark/init.ts", "../../../node_modules/vega-lite/src/normalize/pathoverlay.ts", "../../../node_modules/vega-lite/src/normalize/repeater.ts", "../../../node_modules/vega-lite/src/normalize/ruleforrangedline.ts", "../../../node_modules/vega-lite/src/normalize/core.ts", "../../../node_modules/vega-lite/src/transform.ts", "../../../node_modules/vega-lite/src/normalize/selectioncompat.ts", "../../../node_modules/vega-lite/src/normalize/toplevelselection.ts", "../../../node_modules/vega-lite/src/normalize/index.ts", "../../../node_modules/vega-lite/src/spec/toplevel.ts", "../../../node_modules/vega-lite/src/compile/split.ts", "../../../node_modules/vega-lite/src/compile/data/index.ts", "../../../node_modules/vega-lite/src/data.ts", "../../../node_modules/vega-lite/src/compile/invalid/datasources.ts", "../../../node_modules/vega-lite/src/compile/data/dataflow.ts", "../../../node_modules/vega-lite/src/compile/data/timeunit.ts", "../../../node_modules/vega-lite/src/compile/selection/project.ts", "../../../node_modules/vega-lite/src/compile/selection/point.ts", "../../../node_modules/vega-lite/src/compile/selection/assemble.ts", "../../../node_modules/vega-lite/src/compile/selection/scales.ts", "../../../node_modules/vega-lite/src/compile/selection/interval.ts", "../../../node_modules/vega-lite/src/compile/mark/encode/conditional.ts", "../../../node_modules/vega-lite/src/compile/mark/encode/text.ts", "../../../node_modules/vega-lite/src/compile/mark/encode/tooltip.ts", "../../../node_modules/vega-lite/src/compile/mark/encode/aria.ts", "../../../node_modules/vega-lite/src/compile/mark/encode/nonposition.ts", "../../../node_modules/vega-lite/src/compile/mark/encode/color.ts", "../../../node_modules/vega-lite/src/compile/mark/encode/zindex.ts", "../../../node_modules/vega-lite/src/compile/mark/encode/offset.ts", "../../../node_modules/vega-lite/src/compile/mark/encode/position-point.ts", "../../../node_modules/vega-lite/src/compile/mark/encode/position-align.ts", "../../../node_modules/vega-lite/src/compile/mark/encode/position-range.ts", "../../../node_modules/vega-lite/src/compile/mark/encode/position-rect.ts", "../../../node_modules/vega-lite/src/compile/mark/encode/base.ts", "../../../node_modules/vega-lite/src/compile/mark/encode/defined.ts", "../../../node_modules/vega-lite/src/compile/selection/nearest.ts", "../../../node_modules/vega-lite/src/compile/selection/inputs.ts", "../../../node_modules/vega-lite/src/compile/selection/toggle.ts", "../../../node_modules/vega-lite/src/compile/selection/clear.ts", "../../../node_modules/vega-lite/src/compile/selection/legends.ts", "../../../node_modules/vega-lite/src/compile/selection/translate.ts", "../../../node_modules/vega-lite/src/compile/selection/zoom.ts", "../../../node_modules/vega-lite/src/compile/selection/index.ts", "../../../node_modules/vega-lite/src/compile/data/expressions.ts", "../../../node_modules/vega-lite/src/compile/data/filter.ts", "../../../node_modules/vega-lite/src/compile/selection/parse.ts", "../../../node_modules/vega-lite/src/compile/predicate.ts", "../../../node_modules/vega-lite/src/compile/axis/assemble.ts", "../../../node_modules/vega-lite/src/compile/axis/config.ts", "../../../node_modules/vega-lite/src/compile/axis/properties.ts", "../../../node_modules/vega-lite/src/compile/data/calculate.ts", "../../../node_modules/vega-lite/src/compile/header/common.ts", "../../../node_modules/vega-lite/src/compile/header/component.ts", "../../../node_modules/vega-lite/src/compile/header/assemble.ts", "../../../node_modules/vega-lite/src/compile/layoutsize/assemble.ts", "../../../node_modules/vega-lite/src/compile/layoutsize/component.ts", "../../../node_modules/vega-lite/src/compile/guide.ts", "../../../node_modules/vega-lite/src/compile/resolve.ts", "../../../node_modules/vega-lite/src/compile/legend/component.ts", "../../../node_modules/vega-lite/src/compile/legend/encode.ts", "../../../node_modules/vega-lite/src/compile/legend/properties.ts", "../../../node_modules/vega-lite/src/compile/legend/parse.ts", "../../../node_modules/vega-lite/src/compile/legend/assemble.ts", "../../../node_modules/vega-lite/src/compile/projection/assemble.ts", "../../../node_modules/vega-lite/src/projection.ts", "../../../node_modules/vega-lite/src/compile/projection/component.ts", "../../../node_modules/vega-lite/src/compile/projection/parse.ts", "../../../node_modules/vega-lite/src/compile/data/bin.ts", "../../../node_modules/vega-lite/src/compile/data/aggregate.ts", "../../../node_modules/vega-lite/src/compile/data/facet.ts", "../../../node_modules/vega-lite/src/compile/data/formatparse.ts", "../../../node_modules/vega-lite/src/compile/data/identifier.ts", "../../../node_modules/vega-lite/src/compile/data/graticule.ts", "../../../node_modules/vega-lite/src/compile/data/sequence.ts", "../../../node_modules/vega-lite/src/compile/data/source.ts", "../../../node_modules/vega-lite/src/compile/data/optimizer.ts", "../../../node_modules/vega-lite/src/compile/data/optimizers.ts", "../../../node_modules/vega-lite/src/compile/data/joinaggregate.ts", "../../../node_modules/vega-lite/src/compile/data/filterinvalid.ts", "../../../node_modules/vega-lite/src/compile/data/stack.ts", "../../../node_modules/vega-lite/src/compile/data/window.ts", "../../../node_modules/vega-lite/src/compile/data/subtree.ts", "../../../node_modules/vega-lite/src/compile/data/optimize.ts", "../../../node_modules/vega-lite/src/compile/signal.ts", "../../../node_modules/vega-lite/src/compile/scale/domain.ts", "../../../node_modules/vega-lite/src/compile/scale/assemble.ts", "../../../node_modules/vega-lite/src/compile/scale/component.ts", "../../../node_modules/vega-lite/src/compile/scale/range.ts", "../../../node_modules/vega-lite/src/compile/scale/properties.ts", "../../../node_modules/vega-lite/src/compile/scale/type.ts", "../../../node_modules/vega-lite/src/compile/scale/parse.ts", "../../../node_modules/vega-lite/src/compile/model.ts", "../../../node_modules/vega-lite/src/compile/data/density.ts", "../../../node_modules/vega-lite/src/compile/data/extent.ts", "../../../node_modules/vega-lite/src/compile/data/flatten.ts", "../../../node_modules/vega-lite/src/compile/data/fold.ts", "../../../node_modules/vega-lite/src/compile/data/geojson.ts", "../../../node_modules/vega-lite/src/compile/data/geopoint.ts", "../../../node_modules/vega-lite/src/compile/data/impute.ts", "../../../node_modules/vega-lite/src/compile/data/loess.ts", "../../../node_modules/vega-lite/src/compile/data/lookup.ts", "../../../node_modules/vega-lite/src/compile/data/quantile.ts", "../../../node_modules/vega-lite/src/compile/data/regression.ts", "../../../node_modules/vega-lite/src/compile/data/pivot.ts", "../../../node_modules/vega-lite/src/compile/data/sample.ts", "../../../node_modules/vega-lite/src/compile/data/assemble.ts", "../../../node_modules/vega-lite/src/compile/header/parse.ts", "../../../node_modules/vega-lite/src/compile/layoutsize/parse.ts", "../../../node_modules/vega-lite/src/compile/facet.ts", "../../../node_modules/vega-lite/src/compile/data/joinaggregatefacet.ts", "../../../node_modules/vega-lite/src/compile/data/parse.ts", "../../../node_modules/vega-lite/src/compile/concat.ts", "../../../node_modules/vega-lite/src/compile/axis/component.ts", "../../../node_modules/vega-lite/src/compile/axis/encode.ts", "../../../node_modules/vega-lite/src/compile/axis/parse.ts", "../../../node_modules/vega-lite/src/compile/layoutsize/init.ts", "../../../node_modules/vega-lite/src/compile/mark/arc.ts", "../../../node_modules/vega-lite/src/compile/mark/area.ts", "../../../node_modules/vega-lite/src/compile/mark/bar.ts", "../../../node_modules/vega-lite/src/compile/mark/geoshape.ts", "../../../node_modules/vega-lite/src/compile/mark/image.ts", "../../../node_modules/vega-lite/src/compile/mark/line.ts", "../../../node_modules/vega-lite/src/compile/mark/point.ts", "../../../node_modules/vega-lite/src/compile/mark/rect.ts", "../../../node_modules/vega-lite/src/compile/mark/rule.ts", "../../../node_modules/vega-lite/src/compile/mark/text.ts", "../../../node_modules/vega-lite/src/compile/mark/tick.ts", "../../../node_modules/vega-lite/src/compile/mark/mark.ts", "../../../node_modules/vega-lite/src/compile/unit.ts", "../../../node_modules/vega-lite/src/compile/layer.ts", "../../../node_modules/vega-lite/src/compile/buildmodel.ts", "../../../node_modules/vega-lite/src/compile/compile.ts", "../../../node_modules/vega-schema-url-parser/parser.ts", "../../../node_modules/vega-themes/build/vega-themes.module.js", "../../../node_modules/src/formatValue.ts", "../../../node_modules/src/style.ts", "../../../node_modules/src/defaults.ts", "../../../node_modules/src/position.ts", "../../../node_modules/src/Handler.ts", "../../../node_modules/src/index.ts", "../../../node_modules/vega-embed/node_modules/fast-json-patch/module/helpers.mjs", "../../../node_modules/vega-embed/node_modules/fast-json-patch/module/core.mjs", "../../../node_modules/vega-embed/node_modules/fast-json-patch/module/duplex.mjs", "../../../node_modules/vega-embed/node_modules/fast-json-patch/index.mjs", "../../../node_modules/vega-embed/node_modules/semver/internal/lrucache.js", "../../../node_modules/vega-embed/node_modules/semver/internal/parse-options.js", "../../../node_modules/vega-embed/node_modules/semver/internal/constants.js", "../../../node_modules/vega-embed/node_modules/semver/internal/debug.js", "../../../node_modules/vega-embed/node_modules/semver/internal/re.js", "../../../node_modules/vega-embed/node_modules/semver/internal/identifiers.js", "../../../node_modules/vega-embed/node_modules/semver/classes/semver.js", "../../../node_modules/vega-embed/node_modules/semver/functions/compare.js", "../../../node_modules/vega-embed/node_modules/semver/functions/eq.js", "../../../node_modules/vega-embed/node_modules/semver/functions/neq.js", "../../../node_modules/vega-embed/node_modules/semver/functions/gt.js", "../../../node_modules/vega-embed/node_modules/semver/functions/gte.js", "../../../node_modules/vega-embed/node_modules/semver/functions/lt.js", "../../../node_modules/vega-embed/node_modules/semver/functions/lte.js", "../../../node_modules/vega-embed/node_modules/semver/functions/cmp.js", "../../../node_modules/vega-embed/node_modules/semver/classes/comparator.js", "../../../node_modules/vega-embed/node_modules/semver/classes/range.js", "../../../node_modules/vega-embed/node_modules/semver/functions/satisfies.js", "../../../node_modules/src/post.ts", "../../../node_modules/src/style.ts", "../../../node_modules/src/util.ts", "../../../node_modules/src/embed.ts", "../../javascript/controllers/vega_controller.js", "../../javascript/controllers/index.js"], "sourcesContent": ["(function(global, factory) {\n typeof exports === \"object\" && typeof module !== \"undefined\" ? factory(exports) : typeof define === \"function\" && define.amd ? define([ \"exports\" ], factory) : factory(global.ActiveStorage = {});\n})(this, function(exports) {\n \"use strict\";\n function createCommonjsModule(fn, module) {\n return module = {\n exports: {}\n }, fn(module, module.exports), module.exports;\n }\n var sparkMd5 = createCommonjsModule(function(module, exports) {\n (function(factory) {\n {\n module.exports = factory();\n }\n })(function(undefined) {\n var hex_chr = [ \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\" ];\n function md5cycle(x, k) {\n var a = x[0], b = x[1], c = x[2], d = x[3];\n a += (b & c | ~b & d) + k[0] - 680876936 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[1] - 389564586 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[2] + 606105819 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[3] - 1044525330 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[4] - 176418897 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[5] + 1200080426 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[6] - 1473231341 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[7] - 45705983 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[8] + 1770035416 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[9] - 1958414417 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[10] - 42063 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[11] - 1990404162 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[12] + 1804603682 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[13] - 40341101 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[14] - 1502002290 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[15] + 1236535329 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & d | c & ~d) + k[1] - 165796510 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[6] - 1069501632 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[11] + 643717713 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[0] - 373897302 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[5] - 701558691 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[10] + 38016083 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[15] - 660478335 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[4] - 405537848 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[9] + 568446438 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[14] - 1019803690 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[3] - 187363961 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[8] + 1163531501 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[13] - 1444681467 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[2] - 51403784 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[7] + 1735328473 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[12] - 1926607734 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b ^ c ^ d) + k[5] - 378558 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[8] - 2022574463 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[11] + 1839030562 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[14] - 35309556 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[1] - 1530992060 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[4] + 1272893353 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[7] - 155497632 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[10] - 1094730640 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[13] + 681279174 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[0] - 358537222 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[3] - 722521979 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[6] + 76029189 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[9] - 640364487 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[12] - 421815835 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[15] + 530742520 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[2] - 995338651 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n x[0] = a + x[0] | 0;\n x[1] = b + x[1] | 0;\n x[2] = c + x[2] | 0;\n x[3] = d + x[3] | 0;\n }\n function md5blk(s) {\n var md5blks = [], i;\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n }\n return md5blks;\n }\n function md5blk_array(a) {\n var md5blks = [], i;\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n }\n return md5blks;\n }\n function md51(s) {\n var n = s.length, state = [ 1732584193, -271733879, -1732584194, 271733878 ], i, length, tail, tmp, lo, hi;\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk(s.substring(i - 64, i)));\n }\n s = s.substring(i - 64);\n length = s.length;\n tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);\n }\n tail[i >> 2] |= 128 << (i % 4 << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(state, tail);\n return state;\n }\n function md51_array(a) {\n var n = a.length, state = [ 1732584193, -271733879, -1732584194, 271733878 ], i, length, tail, tmp, lo, hi;\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n }\n a = i - 64 < n ? a.subarray(i - 64) : new Uint8Array(0);\n length = a.length;\n tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= a[i] << (i % 4 << 3);\n }\n tail[i >> 2] |= 128 << (i % 4 << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(state, tail);\n return state;\n }\n function rhex(n) {\n var s = \"\", j;\n for (j = 0; j < 4; j += 1) {\n s += hex_chr[n >> j * 8 + 4 & 15] + hex_chr[n >> j * 8 & 15];\n }\n return s;\n }\n function hex(x) {\n var i;\n for (i = 0; i < x.length; i += 1) {\n x[i] = rhex(x[i]);\n }\n return x.join(\"\");\n }\n if (hex(md51(\"hello\")) !== \"5d41402abc4b2a76b9719d911017c592\") ;\n if (typeof ArrayBuffer !== \"undefined\" && !ArrayBuffer.prototype.slice) {\n (function() {\n function clamp(val, length) {\n val = val | 0 || 0;\n if (val < 0) {\n return Math.max(val + length, 0);\n }\n return Math.min(val, length);\n }\n ArrayBuffer.prototype.slice = function(from, to) {\n var length = this.byteLength, begin = clamp(from, length), end = length, num, target, targetArray, sourceArray;\n if (to !== undefined) {\n end = clamp(to, length);\n }\n if (begin > end) {\n return new ArrayBuffer(0);\n }\n num = end - begin;\n target = new ArrayBuffer(num);\n targetArray = new Uint8Array(target);\n sourceArray = new Uint8Array(this, begin, num);\n targetArray.set(sourceArray);\n return target;\n };\n })();\n }\n function toUtf8(str) {\n if (/[\\u0080-\\uFFFF]/.test(str)) {\n str = unescape(encodeURIComponent(str));\n }\n return str;\n }\n function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n var length = str.length, buff = new ArrayBuffer(length), arr = new Uint8Array(buff), i;\n for (i = 0; i < length; i += 1) {\n arr[i] = str.charCodeAt(i);\n }\n return returnUInt8Array ? arr : buff;\n }\n function arrayBuffer2Utf8Str(buff) {\n return String.fromCharCode.apply(null, new Uint8Array(buff));\n }\n function concatenateArrayBuffers(first, second, returnUInt8Array) {\n var result = new Uint8Array(first.byteLength + second.byteLength);\n result.set(new Uint8Array(first));\n result.set(new Uint8Array(second), first.byteLength);\n return returnUInt8Array ? result : result.buffer;\n }\n function hexToBinaryString(hex) {\n var bytes = [], length = hex.length, x;\n for (x = 0; x < length - 1; x += 2) {\n bytes.push(parseInt(hex.substr(x, 2), 16));\n }\n return String.fromCharCode.apply(String, bytes);\n }\n function SparkMD5() {\n this.reset();\n }\n SparkMD5.prototype.append = function(str) {\n this.appendBinary(toUtf8(str));\n return this;\n };\n SparkMD5.prototype.appendBinary = function(contents) {\n this._buff += contents;\n this._length += contents.length;\n var length = this._buff.length, i;\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n }\n this._buff = this._buff.substring(i - 64);\n return this;\n };\n SparkMD5.prototype.end = function(raw) {\n var buff = this._buff, length = buff.length, i, tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], ret;\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff.charCodeAt(i) << (i % 4 << 3);\n }\n this._finish(tail, length);\n ret = hex(this._hash);\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n this.reset();\n return ret;\n };\n SparkMD5.prototype.reset = function() {\n this._buff = \"\";\n this._length = 0;\n this._hash = [ 1732584193, -271733879, -1732584194, 271733878 ];\n return this;\n };\n SparkMD5.prototype.getState = function() {\n return {\n buff: this._buff,\n length: this._length,\n hash: this._hash\n };\n };\n SparkMD5.prototype.setState = function(state) {\n this._buff = state.buff;\n this._length = state.length;\n this._hash = state.hash;\n return this;\n };\n SparkMD5.prototype.destroy = function() {\n delete this._hash;\n delete this._buff;\n delete this._length;\n };\n SparkMD5.prototype._finish = function(tail, length) {\n var i = length, tmp, lo, hi;\n tail[i >> 2] |= 128 << (i % 4 << 3);\n if (i > 55) {\n md5cycle(this._hash, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n tmp = this._length * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(this._hash, tail);\n };\n SparkMD5.hash = function(str, raw) {\n return SparkMD5.hashBinary(toUtf8(str), raw);\n };\n SparkMD5.hashBinary = function(content, raw) {\n var hash = md51(content), ret = hex(hash);\n return raw ? hexToBinaryString(ret) : ret;\n };\n SparkMD5.ArrayBuffer = function() {\n this.reset();\n };\n SparkMD5.ArrayBuffer.prototype.append = function(arr) {\n var buff = concatenateArrayBuffers(this._buff.buffer, arr, true), length = buff.length, i;\n this._length += arr.byteLength;\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n }\n this._buff = i - 64 < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n return this;\n };\n SparkMD5.ArrayBuffer.prototype.end = function(raw) {\n var buff = this._buff, length = buff.length, tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], i, ret;\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff[i] << (i % 4 << 3);\n }\n this._finish(tail, length);\n ret = hex(this._hash);\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n this.reset();\n return ret;\n };\n SparkMD5.ArrayBuffer.prototype.reset = function() {\n this._buff = new Uint8Array(0);\n this._length = 0;\n this._hash = [ 1732584193, -271733879, -1732584194, 271733878 ];\n return this;\n };\n SparkMD5.ArrayBuffer.prototype.getState = function() {\n var state = SparkMD5.prototype.getState.call(this);\n state.buff = arrayBuffer2Utf8Str(state.buff);\n return state;\n };\n SparkMD5.ArrayBuffer.prototype.setState = function(state) {\n state.buff = utf8Str2ArrayBuffer(state.buff, true);\n return SparkMD5.prototype.setState.call(this, state);\n };\n SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n SparkMD5.ArrayBuffer.hash = function(arr, raw) {\n var hash = md51_array(new Uint8Array(arr)), ret = hex(hash);\n return raw ? hexToBinaryString(ret) : ret;\n };\n return SparkMD5;\n });\n });\n var classCallCheck = function(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n };\n var createClass = function() {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function(Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n var fileSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;\n var FileChecksum = function() {\n createClass(FileChecksum, null, [ {\n key: \"create\",\n value: function create(file, callback) {\n var instance = new FileChecksum(file);\n instance.create(callback);\n }\n } ]);\n function FileChecksum(file) {\n classCallCheck(this, FileChecksum);\n this.file = file;\n this.chunkSize = 2097152;\n this.chunkCount = Math.ceil(this.file.size / this.chunkSize);\n this.chunkIndex = 0;\n }\n createClass(FileChecksum, [ {\n key: \"create\",\n value: function create(callback) {\n var _this = this;\n this.callback = callback;\n this.md5Buffer = new sparkMd5.ArrayBuffer();\n this.fileReader = new FileReader();\n this.fileReader.addEventListener(\"load\", function(event) {\n return _this.fileReaderDidLoad(event);\n });\n this.fileReader.addEventListener(\"error\", function(event) {\n return _this.fileReaderDidError(event);\n });\n this.readNextChunk();\n }\n }, {\n key: \"fileReaderDidLoad\",\n value: function fileReaderDidLoad(event) {\n this.md5Buffer.append(event.target.result);\n if (!this.readNextChunk()) {\n var binaryDigest = this.md5Buffer.end(true);\n var base64digest = btoa(binaryDigest);\n this.callback(null, base64digest);\n }\n }\n }, {\n key: \"fileReaderDidError\",\n value: function fileReaderDidError(event) {\n this.callback(\"Error reading \" + this.file.name);\n }\n }, {\n key: \"readNextChunk\",\n value: function readNextChunk() {\n if (this.chunkIndex < this.chunkCount || this.chunkIndex == 0 && this.chunkCount == 0) {\n var start = this.chunkIndex * this.chunkSize;\n var end = Math.min(start + this.chunkSize, this.file.size);\n var bytes = fileSlice.call(this.file, start, end);\n this.fileReader.readAsArrayBuffer(bytes);\n this.chunkIndex++;\n return true;\n } else {\n return false;\n }\n }\n } ]);\n return FileChecksum;\n }();\n function getMetaValue(name) {\n var element = findElement(document.head, 'meta[name=\"' + name + '\"]');\n if (element) {\n return element.getAttribute(\"content\");\n }\n }\n function findElements(root, selector) {\n if (typeof root == \"string\") {\n selector = root;\n root = document;\n }\n var elements = root.querySelectorAll(selector);\n return toArray$1(elements);\n }\n function findElement(root, selector) {\n if (typeof root == \"string\") {\n selector = root;\n root = document;\n }\n return root.querySelector(selector);\n }\n function dispatchEvent(element, type) {\n var eventInit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var disabled = element.disabled;\n var bubbles = eventInit.bubbles, cancelable = eventInit.cancelable, detail = eventInit.detail;\n var event = document.createEvent(\"Event\");\n event.initEvent(type, bubbles || true, cancelable || true);\n event.detail = detail || {};\n try {\n element.disabled = false;\n element.dispatchEvent(event);\n } finally {\n element.disabled = disabled;\n }\n return event;\n }\n function toArray$1(value) {\n if (Array.isArray(value)) {\n return value;\n } else if (Array.from) {\n return Array.from(value);\n } else {\n return [].slice.call(value);\n }\n }\n var BlobRecord = function() {\n function BlobRecord(file, checksum, url) {\n var _this = this;\n classCallCheck(this, BlobRecord);\n this.file = file;\n this.attributes = {\n filename: file.name,\n content_type: file.type || \"application/octet-stream\",\n byte_size: file.size,\n checksum: checksum\n };\n this.xhr = new XMLHttpRequest();\n this.xhr.open(\"POST\", url, true);\n this.xhr.responseType = \"json\";\n this.xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n this.xhr.setRequestHeader(\"Accept\", \"application/json\");\n this.xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n var csrfToken = getMetaValue(\"csrf-token\");\n if (csrfToken != undefined) {\n this.xhr.setRequestHeader(\"X-CSRF-Token\", csrfToken);\n }\n this.xhr.addEventListener(\"load\", function(event) {\n return _this.requestDidLoad(event);\n });\n this.xhr.addEventListener(\"error\", function(event) {\n return _this.requestDidError(event);\n });\n }\n createClass(BlobRecord, [ {\n key: \"create\",\n value: function create(callback) {\n this.callback = callback;\n this.xhr.send(JSON.stringify({\n blob: this.attributes\n }));\n }\n }, {\n key: \"requestDidLoad\",\n value: function requestDidLoad(event) {\n if (this.status >= 200 && this.status < 300) {\n var response = this.response;\n var direct_upload = response.direct_upload;\n delete response.direct_upload;\n this.attributes = response;\n this.directUploadData = direct_upload;\n this.callback(null, this.toJSON());\n } else {\n this.requestDidError(event);\n }\n }\n }, {\n key: \"requestDidError\",\n value: function requestDidError(event) {\n this.callback('Error creating Blob for \"' + this.file.name + '\". Status: ' + this.status);\n }\n }, {\n key: \"toJSON\",\n value: function toJSON() {\n var result = {};\n for (var key in this.attributes) {\n result[key] = this.attributes[key];\n }\n return result;\n }\n }, {\n key: \"status\",\n get: function get$$1() {\n return this.xhr.status;\n }\n }, {\n key: \"response\",\n get: function get$$1() {\n var _xhr = this.xhr, responseType = _xhr.responseType, response = _xhr.response;\n if (responseType == \"json\") {\n return response;\n } else {\n return JSON.parse(response);\n }\n }\n } ]);\n return BlobRecord;\n }();\n var BlobUpload = function() {\n function BlobUpload(blob) {\n var _this = this;\n classCallCheck(this, BlobUpload);\n this.blob = blob;\n this.file = blob.file;\n var _blob$directUploadDat = blob.directUploadData, url = _blob$directUploadDat.url, headers = _blob$directUploadDat.headers;\n this.xhr = new XMLHttpRequest();\n this.xhr.open(\"PUT\", url, true);\n this.xhr.responseType = \"text\";\n for (var key in headers) {\n this.xhr.setRequestHeader(key, headers[key]);\n }\n this.xhr.addEventListener(\"load\", function(event) {\n return _this.requestDidLoad(event);\n });\n this.xhr.addEventListener(\"error\", function(event) {\n return _this.requestDidError(event);\n });\n }\n createClass(BlobUpload, [ {\n key: \"create\",\n value: function create(callback) {\n this.callback = callback;\n this.xhr.send(this.file.slice());\n }\n }, {\n key: \"requestDidLoad\",\n value: function requestDidLoad(event) {\n var _xhr = this.xhr, status = _xhr.status, response = _xhr.response;\n if (status >= 200 && status < 300) {\n this.callback(null, response);\n } else {\n this.requestDidError(event);\n }\n }\n }, {\n key: \"requestDidError\",\n value: function requestDidError(event) {\n this.callback('Error storing \"' + this.file.name + '\". Status: ' + this.xhr.status);\n }\n } ]);\n return BlobUpload;\n }();\n var id = 0;\n var DirectUpload = function() {\n function DirectUpload(file, url, delegate) {\n classCallCheck(this, DirectUpload);\n this.id = ++id;\n this.file = file;\n this.url = url;\n this.delegate = delegate;\n }\n createClass(DirectUpload, [ {\n key: \"create\",\n value: function create(callback) {\n var _this = this;\n FileChecksum.create(this.file, function(error, checksum) {\n if (error) {\n callback(error);\n return;\n }\n var blob = new BlobRecord(_this.file, checksum, _this.url);\n notify(_this.delegate, \"directUploadWillCreateBlobWithXHR\", blob.xhr);\n blob.create(function(error) {\n if (error) {\n callback(error);\n } else {\n var upload = new BlobUpload(blob);\n notify(_this.delegate, \"directUploadWillStoreFileWithXHR\", upload.xhr);\n upload.create(function(error) {\n if (error) {\n callback(error);\n } else {\n callback(null, blob.toJSON());\n }\n });\n }\n });\n });\n }\n } ]);\n return DirectUpload;\n }();\n function notify(object, methodName) {\n if (object && typeof object[methodName] == \"function\") {\n for (var _len = arguments.length, messages = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n messages[_key - 2] = arguments[_key];\n }\n return object[methodName].apply(object, messages);\n }\n }\n var DirectUploadController = function() {\n function DirectUploadController(input, file) {\n classCallCheck(this, DirectUploadController);\n this.input = input;\n this.file = file;\n this.directUpload = new DirectUpload(this.file, this.url, this);\n this.dispatch(\"initialize\");\n }\n createClass(DirectUploadController, [ {\n key: \"start\",\n value: function start(callback) {\n var _this = this;\n var hiddenInput = document.createElement(\"input\");\n hiddenInput.type = \"hidden\";\n hiddenInput.name = this.input.name;\n this.input.insertAdjacentElement(\"beforebegin\", hiddenInput);\n this.dispatch(\"start\");\n this.directUpload.create(function(error, attributes) {\n if (error) {\n hiddenInput.parentNode.removeChild(hiddenInput);\n _this.dispatchError(error);\n } else {\n hiddenInput.value = attributes.signed_id;\n }\n _this.dispatch(\"end\");\n callback(error);\n });\n }\n }, {\n key: \"uploadRequestDidProgress\",\n value: function uploadRequestDidProgress(event) {\n var progress = event.loaded / event.total * 100;\n if (progress) {\n this.dispatch(\"progress\", {\n progress: progress\n });\n }\n }\n }, {\n key: \"dispatch\",\n value: function dispatch(name) {\n var detail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n detail.file = this.file;\n detail.id = this.directUpload.id;\n return dispatchEvent(this.input, \"direct-upload:\" + name, {\n detail: detail\n });\n }\n }, {\n key: \"dispatchError\",\n value: function dispatchError(error) {\n var event = this.dispatch(\"error\", {\n error: error\n });\n if (!event.defaultPrevented) {\n alert(error);\n }\n }\n }, {\n key: \"directUploadWillCreateBlobWithXHR\",\n value: function directUploadWillCreateBlobWithXHR(xhr) {\n this.dispatch(\"before-blob-request\", {\n xhr: xhr\n });\n }\n }, {\n key: \"directUploadWillStoreFileWithXHR\",\n value: function directUploadWillStoreFileWithXHR(xhr) {\n var _this2 = this;\n this.dispatch(\"before-storage-request\", {\n xhr: xhr\n });\n xhr.upload.addEventListener(\"progress\", function(event) {\n return _this2.uploadRequestDidProgress(event);\n });\n }\n }, {\n key: \"url\",\n get: function get$$1() {\n return this.input.getAttribute(\"data-direct-upload-url\");\n }\n } ]);\n return DirectUploadController;\n }();\n var inputSelector = \"input[type=file][data-direct-upload-url]:not([disabled])\";\n var DirectUploadsController = function() {\n function DirectUploadsController(form) {\n classCallCheck(this, DirectUploadsController);\n this.form = form;\n this.inputs = findElements(form, inputSelector).filter(function(input) {\n return input.files.length;\n });\n }\n createClass(DirectUploadsController, [ {\n key: \"start\",\n value: function start(callback) {\n var _this = this;\n var controllers = this.createDirectUploadControllers();\n var startNextController = function startNextController() {\n var controller = controllers.shift();\n if (controller) {\n controller.start(function(error) {\n if (error) {\n callback(error);\n _this.dispatch(\"end\");\n } else {\n startNextController();\n }\n });\n } else {\n callback();\n _this.dispatch(\"end\");\n }\n };\n this.dispatch(\"start\");\n startNextController();\n }\n }, {\n key: \"createDirectUploadControllers\",\n value: function createDirectUploadControllers() {\n var controllers = [];\n this.inputs.forEach(function(input) {\n toArray$1(input.files).forEach(function(file) {\n var controller = new DirectUploadController(input, file);\n controllers.push(controller);\n });\n });\n return controllers;\n }\n }, {\n key: \"dispatch\",\n value: function dispatch(name) {\n var detail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return dispatchEvent(this.form, \"direct-uploads:\" + name, {\n detail: detail\n });\n }\n } ]);\n return DirectUploadsController;\n }();\n var processingAttribute = \"data-direct-uploads-processing\";\n var submitButtonsByForm = new WeakMap();\n var started = false;\n function start() {\n if (!started) {\n started = true;\n document.addEventListener(\"click\", didClick, true);\n document.addEventListener(\"submit\", didSubmitForm);\n document.addEventListener(\"ajax:before\", didSubmitRemoteElement);\n }\n }\n function didClick(event) {\n var target = event.target;\n if ((target.tagName == \"INPUT\" || target.tagName == \"BUTTON\") && target.type == \"submit\" && target.form) {\n submitButtonsByForm.set(target.form, target);\n }\n }\n function didSubmitForm(event) {\n handleFormSubmissionEvent(event);\n }\n function didSubmitRemoteElement(event) {\n if (event.target.tagName == \"FORM\") {\n handleFormSubmissionEvent(event);\n }\n }\n function handleFormSubmissionEvent(event) {\n var form = event.target;\n if (form.hasAttribute(processingAttribute)) {\n event.preventDefault();\n return;\n }\n var controller = new DirectUploadsController(form);\n var inputs = controller.inputs;\n if (inputs.length) {\n event.preventDefault();\n form.setAttribute(processingAttribute, \"\");\n inputs.forEach(disable);\n controller.start(function(error) {\n form.removeAttribute(processingAttribute);\n if (error) {\n inputs.forEach(enable);\n } else {\n submitForm(form);\n }\n });\n }\n }\n function submitForm(form) {\n var button = submitButtonsByForm.get(form) || findElement(form, \"input[type=submit], button[type=submit]\");\n if (button) {\n var _button = button, disabled = _button.disabled;\n button.disabled = false;\n button.focus();\n button.click();\n button.disabled = disabled;\n } else {\n button = document.createElement(\"input\");\n button.type = \"submit\";\n button.style.display = \"none\";\n form.appendChild(button);\n button.click();\n form.removeChild(button);\n }\n submitButtonsByForm.delete(form);\n }\n function disable(input) {\n input.disabled = true;\n }\n function enable(input) {\n input.disabled = false;\n }\n function autostart() {\n if (window.ActiveStorage) {\n start();\n }\n }\n setTimeout(autostart, 1);\n exports.start = start;\n exports.DirectUpload = DirectUpload;\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n});\n", "export default {\n logger: typeof console !== \"undefined\" ? console : undefined,\n WebSocket: typeof WebSocket !== \"undefined\" ? WebSocket : undefined,\n}\n", "import adapters from \"./adapters\"\n\n// The logger is disabled by default. You can enable it with:\n//\n// ActionCable.logger.enabled = true\n//\n// Example:\n//\n// import * as ActionCable from '@rails/actioncable'\n//\n// ActionCable.logger.enabled = true\n// ActionCable.logger.log('Connection Established.')\n//\n\nexport default {\n log(...messages) {\n if (this.enabled) {\n messages.push(Date.now())\n adapters.logger.log(\"[ActionCable]\", ...messages)\n }\n },\n}\n", "import logger from \"./logger\"\n\n// Responsible for ensuring the cable connection is in good health by validating the heartbeat pings sent from the server, and attempting\n// revival reconnections if things go astray. Internal class, not intended for direct user manipulation.\n\nconst now = () => new Date().getTime()\n\nconst secondsSince = time => (now() - time) / 1000\n\nclass ConnectionMonitor {\n constructor(connection) {\n this.visibilityDidChange = this.visibilityDidChange.bind(this)\n this.connection = connection\n this.reconnectAttempts = 0\n }\n\n start() {\n if (!this.isRunning()) {\n this.startedAt = now()\n delete this.stoppedAt\n this.startPolling()\n addEventListener(\"visibilitychange\", this.visibilityDidChange)\n logger.log(`ConnectionMonitor started. stale threshold = ${this.constructor.staleThreshold} s`)\n }\n }\n\n stop() {\n if (this.isRunning()) {\n this.stoppedAt = now()\n this.stopPolling()\n removeEventListener(\"visibilitychange\", this.visibilityDidChange)\n logger.log(\"ConnectionMonitor stopped\")\n }\n }\n\n isRunning() {\n return this.startedAt && !this.stoppedAt\n }\n\n recordMessage() {\n this.pingedAt = now()\n }\n\n recordConnect() {\n this.reconnectAttempts = 0\n delete this.disconnectedAt\n logger.log(\"ConnectionMonitor recorded connect\")\n }\n\n recordDisconnect() {\n this.disconnectedAt = now()\n logger.log(\"ConnectionMonitor recorded disconnect\")\n }\n\n // Private\n\n startPolling() {\n this.stopPolling()\n this.poll()\n }\n\n stopPolling() {\n clearTimeout(this.pollTimeout)\n }\n\n poll() {\n this.pollTimeout = setTimeout(() => {\n this.reconnectIfStale()\n this.poll()\n }\n , this.getPollInterval())\n }\n\n getPollInterval() {\n const { staleThreshold, reconnectionBackoffRate } = this.constructor\n const backoff = Math.pow(1 + reconnectionBackoffRate, Math.min(this.reconnectAttempts, 10))\n const jitterMax = this.reconnectAttempts === 0 ? 1.0 : reconnectionBackoffRate\n const jitter = jitterMax * Math.random()\n return staleThreshold * 1000 * backoff * (1 + jitter)\n }\n\n reconnectIfStale() {\n if (this.connectionIsStale()) {\n logger.log(`ConnectionMonitor detected stale connection. reconnectAttempts = ${this.reconnectAttempts}, time stale = ${secondsSince(this.refreshedAt)} s, stale threshold = ${this.constructor.staleThreshold} s`)\n this.reconnectAttempts++\n if (this.disconnectedRecently()) {\n logger.log(`ConnectionMonitor skipping reopening recent disconnect. time disconnected = ${secondsSince(this.disconnectedAt)} s`)\n } else {\n logger.log(\"ConnectionMonitor reopening\")\n this.connection.reopen()\n }\n }\n }\n\n get refreshedAt() {\n return this.pingedAt ? this.pingedAt : this.startedAt\n }\n\n connectionIsStale() {\n return secondsSince(this.refreshedAt) > this.constructor.staleThreshold\n }\n\n disconnectedRecently() {\n return this.disconnectedAt && (secondsSince(this.disconnectedAt) < this.constructor.staleThreshold)\n }\n\n visibilityDidChange() {\n if (document.visibilityState === \"visible\") {\n setTimeout(() => {\n if (this.connectionIsStale() || !this.connection.isOpen()) {\n logger.log(`ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = ${document.visibilityState}`)\n this.connection.reopen()\n }\n }\n , 200)\n }\n }\n\n}\n\nConnectionMonitor.staleThreshold = 6 // Server::Connections::BEAT_INTERVAL * 2 (missed two pings)\nConnectionMonitor.reconnectionBackoffRate = 0.15\n\nexport default ConnectionMonitor\n", "export default {\n \"message_types\": {\n \"welcome\": \"welcome\",\n \"disconnect\": \"disconnect\",\n \"ping\": \"ping\",\n \"confirmation\": \"confirm_subscription\",\n \"rejection\": \"reject_subscription\"\n },\n \"disconnect_reasons\": {\n \"unauthorized\": \"unauthorized\",\n \"invalid_request\": \"invalid_request\",\n \"server_restart\": \"server_restart\",\n \"remote\": \"remote\"\n },\n \"default_mount_path\": \"/cable\",\n \"protocols\": [\n \"actioncable-v1-json\",\n \"actioncable-unsupported\"\n ]\n}\n", "import adapters from \"./adapters\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport INTERNAL from \"./internal\"\nimport logger from \"./logger\"\n\n// Encapsulate the cable connection held by the consumer. This is an internal class not intended for direct user manipulation.\n\nconst {message_types, protocols} = INTERNAL\nconst supportedProtocols = protocols.slice(0, protocols.length - 1)\n\nconst indexOf = [].indexOf\n\nclass Connection {\n constructor(consumer) {\n this.open = this.open.bind(this)\n this.consumer = consumer\n this.subscriptions = this.consumer.subscriptions\n this.monitor = new ConnectionMonitor(this)\n this.disconnected = true\n }\n\n send(data) {\n if (this.isOpen()) {\n this.webSocket.send(JSON.stringify(data))\n return true\n } else {\n return false\n }\n }\n\n open() {\n if (this.isActive()) {\n logger.log(`Attempted to open WebSocket, but existing socket is ${this.getState()}`)\n return false\n } else {\n const socketProtocols = [...protocols, ...this.consumer.subprotocols || []]\n logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${socketProtocols}`)\n if (this.webSocket) { this.uninstallEventHandlers() }\n this.webSocket = new adapters.WebSocket(this.consumer.url, socketProtocols)\n this.installEventHandlers()\n this.monitor.start()\n return true\n }\n }\n\n close({allowReconnect} = {allowReconnect: true}) {\n if (!allowReconnect) { this.monitor.stop() }\n // Avoid closing websockets in a \"connecting\" state due to Safari 15.1+ bug. See: https://github.com/rails/rails/issues/43835#issuecomment-1002288478\n if (this.isOpen()) {\n return this.webSocket.close()\n }\n }\n\n reopen() {\n logger.log(`Reopening WebSocket, current state is ${this.getState()}`)\n if (this.isActive()) {\n try {\n return this.close()\n } catch (error) {\n logger.log(\"Failed to reopen WebSocket\", error)\n }\n finally {\n logger.log(`Reopening WebSocket in ${this.constructor.reopenDelay}ms`)\n setTimeout(this.open, this.constructor.reopenDelay)\n }\n } else {\n return this.open()\n }\n }\n\n getProtocol() {\n if (this.webSocket) {\n return this.webSocket.protocol\n }\n }\n\n isOpen() {\n return this.isState(\"open\")\n }\n\n isActive() {\n return this.isState(\"open\", \"connecting\")\n }\n\n triedToReconnect() {\n return this.monitor.reconnectAttempts > 0\n }\n\n // Private\n\n isProtocolSupported() {\n return indexOf.call(supportedProtocols, this.getProtocol()) >= 0\n }\n\n isState(...states) {\n return indexOf.call(states, this.getState()) >= 0\n }\n\n getState() {\n if (this.webSocket) {\n for (let state in adapters.WebSocket) {\n if (adapters.WebSocket[state] === this.webSocket.readyState) {\n return state.toLowerCase()\n }\n }\n }\n return null\n }\n\n installEventHandlers() {\n for (let eventName in this.events) {\n const handler = this.events[eventName].bind(this)\n this.webSocket[`on${eventName}`] = handler\n }\n }\n\n uninstallEventHandlers() {\n for (let eventName in this.events) {\n this.webSocket[`on${eventName}`] = function() {}\n }\n }\n\n}\n\nConnection.reopenDelay = 500\n\nConnection.prototype.events = {\n message(event) {\n if (!this.isProtocolSupported()) { return }\n const {identifier, message, reason, reconnect, type} = JSON.parse(event.data)\n this.monitor.recordMessage()\n switch (type) {\n case message_types.welcome:\n if (this.triedToReconnect()) {\n this.reconnectAttempted = true\n }\n this.monitor.recordConnect()\n return this.subscriptions.reload()\n case message_types.disconnect:\n logger.log(`Disconnecting. Reason: ${reason}`)\n return this.close({allowReconnect: reconnect})\n case message_types.ping:\n return null\n case message_types.confirmation:\n this.subscriptions.confirmSubscription(identifier)\n if (this.reconnectAttempted) {\n this.reconnectAttempted = false\n return this.subscriptions.notify(identifier, \"connected\", {reconnected: true})\n } else {\n return this.subscriptions.notify(identifier, \"connected\", {reconnected: false})\n }\n case message_types.rejection:\n return this.subscriptions.reject(identifier)\n default:\n return this.subscriptions.notify(identifier, \"received\", message)\n }\n },\n\n open() {\n logger.log(`WebSocket onopen event, using '${this.getProtocol()}' subprotocol`)\n this.disconnected = false\n if (!this.isProtocolSupported()) {\n logger.log(\"Protocol is unsupported. Stopping monitor and disconnecting.\")\n return this.close({allowReconnect: false})\n }\n },\n\n close(event) {\n logger.log(\"WebSocket onclose event\")\n if (this.disconnected) { return }\n this.disconnected = true\n this.monitor.recordDisconnect()\n return this.subscriptions.notifyAll(\"disconnected\", {willAttemptReconnect: this.monitor.isRunning()})\n },\n\n error() {\n logger.log(\"WebSocket onerror event\")\n }\n}\n\nexport default Connection\n", "// A new subscription is created through the ActionCable.Subscriptions instance available on the consumer.\n// It provides a number of callbacks and a method for calling remote procedure calls on the corresponding\n// Channel instance on the server side.\n//\n// An example demonstrates the basic functionality:\n//\n// App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\", {\n// connected() {\n// // Called once the subscription has been successfully completed\n// },\n//\n// disconnected({ willAttemptReconnect: boolean }) {\n// // Called when the client has disconnected with the server.\n// // The object will have an `willAttemptReconnect` property which\n// // says whether the client has the intention of attempting\n// // to reconnect.\n// },\n//\n// appear() {\n// this.perform('appear', {appearing_on: this.appearingOn()})\n// },\n//\n// away() {\n// this.perform('away')\n// },\n//\n// appearingOn() {\n// $('main').data('appearing-on')\n// }\n// })\n//\n// The methods #appear and #away forward their intent to the remote AppearanceChannel instance on the server\n// by calling the `perform` method with the first parameter being the action (which maps to AppearanceChannel#appear/away).\n// The second parameter is a hash that'll get JSON encoded and made available on the server in the data parameter.\n//\n// This is how the server component would look:\n//\n// class AppearanceChannel < ApplicationActionCable::Channel\n// def subscribed\n// current_user.appear\n// end\n//\n// def unsubscribed\n// current_user.disappear\n// end\n//\n// def appear(data)\n// current_user.appear on: data['appearing_on']\n// end\n//\n// def away\n// current_user.away\n// end\n// end\n//\n// The \"AppearanceChannel\" name is automatically mapped between the client-side subscription creation and the server-side Ruby class name.\n// The AppearanceChannel#appear/away public methods are exposed automatically to client-side invocation through the perform method.\n\nconst extend = function(object, properties) {\n if (properties != null) {\n for (let key in properties) {\n const value = properties[key]\n object[key] = value\n }\n }\n return object\n}\n\nexport default class Subscription {\n constructor(consumer, params = {}, mixin) {\n this.consumer = consumer\n this.identifier = JSON.stringify(params)\n extend(this, mixin)\n }\n\n // Perform a channel action with the optional data passed as an attribute\n perform(action, data = {}) {\n data.action = action\n return this.send(data)\n }\n\n send(data) {\n return this.consumer.send({command: \"message\", identifier: this.identifier, data: JSON.stringify(data)})\n }\n\n unsubscribe() {\n return this.consumer.subscriptions.remove(this)\n }\n}\n", "import logger from \"./logger\"\n\n// Responsible for ensuring channel subscribe command is confirmed, retrying until confirmation is received.\n// Internal class, not intended for direct user manipulation.\n\nclass SubscriptionGuarantor {\n constructor(subscriptions) {\n this.subscriptions = subscriptions\n this.pendingSubscriptions = []\n }\n\n guarantee(subscription) {\n if(this.pendingSubscriptions.indexOf(subscription) == -1){ \n logger.log(`SubscriptionGuarantor guaranteeing ${subscription.identifier}`)\n this.pendingSubscriptions.push(subscription) \n }\n else {\n logger.log(`SubscriptionGuarantor already guaranteeing ${subscription.identifier}`)\n }\n this.startGuaranteeing()\n }\n\n forget(subscription) {\n logger.log(`SubscriptionGuarantor forgetting ${subscription.identifier}`)\n this.pendingSubscriptions = (this.pendingSubscriptions.filter((s) => s !== subscription))\n }\n\n startGuaranteeing() {\n this.stopGuaranteeing()\n this.retrySubscribing()\n }\n \n stopGuaranteeing() {\n clearTimeout(this.retryTimeout)\n }\n\n retrySubscribing() {\n this.retryTimeout = setTimeout(() => {\n if (this.subscriptions && typeof(this.subscriptions.subscribe) === \"function\") {\n this.pendingSubscriptions.map((subscription) => {\n logger.log(`SubscriptionGuarantor resubscribing ${subscription.identifier}`)\n this.subscriptions.subscribe(subscription)\n })\n }\n }\n , 500)\n }\n}\n\nexport default SubscriptionGuarantor", "import Subscription from \"./subscription\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport logger from \"./logger\"\n\n// Collection class for creating (and internally managing) channel subscriptions.\n// The only method intended to be triggered by the user is ActionCable.Subscriptions#create,\n// and it should be called through the consumer like so:\n//\n// App = {}\n// App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n// App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n\nexport default class Subscriptions {\n constructor(consumer) {\n this.consumer = consumer\n this.guarantor = new SubscriptionGuarantor(this)\n this.subscriptions = []\n }\n\n create(channelName, mixin) {\n const channel = channelName\n const params = typeof channel === \"object\" ? channel : {channel}\n const subscription = new Subscription(this.consumer, params, mixin)\n return this.add(subscription)\n }\n\n // Private\n\n add(subscription) {\n this.subscriptions.push(subscription)\n this.consumer.ensureActiveConnection()\n this.notify(subscription, \"initialized\")\n this.subscribe(subscription)\n return subscription\n }\n\n remove(subscription) {\n this.forget(subscription)\n if (!this.findAll(subscription.identifier).length) {\n this.sendCommand(subscription, \"unsubscribe\")\n }\n return subscription\n }\n\n reject(identifier) {\n return this.findAll(identifier).map((subscription) => {\n this.forget(subscription)\n this.notify(subscription, \"rejected\")\n return subscription\n })\n }\n\n forget(subscription) {\n this.guarantor.forget(subscription)\n this.subscriptions = (this.subscriptions.filter((s) => s !== subscription))\n return subscription\n }\n\n findAll(identifier) {\n return this.subscriptions.filter((s) => s.identifier === identifier)\n }\n\n reload() {\n return this.subscriptions.map((subscription) =>\n this.subscribe(subscription))\n }\n\n notifyAll(callbackName, ...args) {\n return this.subscriptions.map((subscription) =>\n this.notify(subscription, callbackName, ...args))\n }\n\n notify(subscription, callbackName, ...args) {\n let subscriptions\n if (typeof subscription === \"string\") {\n subscriptions = this.findAll(subscription)\n } else {\n subscriptions = [subscription]\n }\n\n return subscriptions.map((subscription) =>\n (typeof subscription[callbackName] === \"function\" ? subscription[callbackName](...args) : undefined))\n }\n\n subscribe(subscription) {\n if (this.sendCommand(subscription, \"subscribe\")) {\n this.guarantor.guarantee(subscription)\n }\n }\n\n confirmSubscription(identifier) {\n logger.log(`Subscription confirmed ${identifier}`)\n this.findAll(identifier).map((subscription) =>\n this.guarantor.forget(subscription))\n }\n\n sendCommand(subscription, command) {\n const {identifier} = subscription\n return this.consumer.send({command, identifier})\n }\n}\n", "import Connection from \"./connection\"\nimport Subscriptions from \"./subscriptions\"\n\n// The ActionCable.Consumer establishes the connection to a server-side Ruby Connection object. Once established,\n// the ActionCable.ConnectionMonitor will ensure that its properly maintained through heartbeats and checking for stale updates.\n// The Consumer instance is also the gateway to establishing subscriptions to desired channels through the #createSubscription\n// method.\n//\n// The following example shows how this can be set up:\n//\n// App = {}\n// App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n// App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n//\n// When a consumer is created, it automatically connects with the server.\n//\n// To disconnect from the server, call\n//\n// App.cable.disconnect()\n//\n// and to restart the connection:\n//\n// App.cable.connect()\n//\n// Any channel subscriptions which existed prior to disconnecting will\n// automatically resubscribe.\n\nexport default class Consumer {\n constructor(url) {\n this._url = url\n this.subscriptions = new Subscriptions(this)\n this.connection = new Connection(this)\n this.subprotocols = []\n }\n\n get url() {\n return createWebSocketURL(this._url)\n }\n\n send(data) {\n return this.connection.send(data)\n }\n\n connect() {\n return this.connection.open()\n }\n\n disconnect() {\n return this.connection.close({allowReconnect: false})\n }\n\n ensureActiveConnection() {\n if (!this.connection.isActive()) {\n return this.connection.open()\n }\n }\n\n addSubProtocol(subprotocol) {\n this.subprotocols = [...this.subprotocols, subprotocol]\n }\n}\n\nexport function createWebSocketURL(url) {\n if (typeof url === \"function\") {\n url = url()\n }\n\n if (url && !/^wss?:/i.test(url)) {\n const a = document.createElement(\"a\")\n a.href = url\n // Fix populating Location properties in IE. Otherwise, protocol will be blank.\n a.href = a.href\n a.protocol = a.protocol.replace(\"http\", \"ws\")\n return a.href\n } else {\n return url\n }\n}\n", "import Connection from \"./connection\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport Consumer, { createWebSocketURL } from \"./consumer\"\nimport INTERNAL from \"./internal\"\nimport Subscription from \"./subscription\"\nimport Subscriptions from \"./subscriptions\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport adapters from \"./adapters\"\nimport logger from \"./logger\"\n\nexport {\n Connection,\n ConnectionMonitor,\n Consumer,\n INTERNAL,\n Subscription,\n Subscriptions,\n SubscriptionGuarantor,\n adapters,\n createWebSocketURL,\n logger,\n}\n\nexport function createConsumer(url = getConfig(\"url\") || INTERNAL.default_mount_path) {\n return new Consumer(url)\n}\n\nexport function getConfig(name) {\n const element = document.head.querySelector(`meta[name='action-cable-${name}']`)\n if (element) {\n return element.getAttribute(\"content\")\n }\n}\n", "/*\r\n * @namespace Util\r\n *\r\n * Various utility functions, used by Leaflet internally.\r\n */\r\n\r\n// @function extend(dest: Object, src?: Object): Object\r\n// Merges the properties of the `src` object (or multiple objects) into `dest` object and returns the latter. Has an `L.extend` shortcut.\r\nexport function extend(dest) {\r\n\tvar i, j, len, src;\r\n\r\n\tfor (j = 1, len = arguments.length; j < len; j++) {\r\n\t\tsrc = arguments[j];\r\n\t\tfor (i in src) {\r\n\t\t\tdest[i] = src[i];\r\n\t\t}\r\n\t}\r\n\treturn dest;\r\n}\r\n\r\n// @function create(proto: Object, properties?: Object): Object\r\n// Compatibility polyfill for [Object.create](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/create)\r\nexport var create = Object.create || (function () {\r\n\tfunction F() {}\r\n\treturn function (proto) {\r\n\t\tF.prototype = proto;\r\n\t\treturn new F();\r\n\t};\r\n})();\r\n\r\n// @function bind(fn: Function, …): Function\r\n// Returns a new function bound to the arguments passed, like [Function.prototype.bind](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Function/bind).\r\n// Has a `L.bind()` shortcut.\r\nexport function bind(fn, obj) {\r\n\tvar slice = Array.prototype.slice;\r\n\r\n\tif (fn.bind) {\r\n\t\treturn fn.bind.apply(fn, slice.call(arguments, 1));\r\n\t}\r\n\r\n\tvar args = slice.call(arguments, 2);\r\n\r\n\treturn function () {\r\n\t\treturn fn.apply(obj, args.length ? args.concat(slice.call(arguments)) : arguments);\r\n\t};\r\n}\r\n\r\n// @property lastId: Number\r\n// Last unique ID used by [`stamp()`](#util-stamp)\r\nexport var lastId = 0;\r\n\r\n// @function stamp(obj: Object): Number\r\n// Returns the unique ID of an object, assigning it one if it doesn't have it.\r\nexport function stamp(obj) {\r\n\tif (!('_leaflet_id' in obj)) {\r\n\t\tobj['_leaflet_id'] = ++lastId;\r\n\t}\r\n\treturn obj._leaflet_id;\r\n}\r\n\r\n// @function throttle(fn: Function, time: Number, context: Object): Function\r\n// Returns a function which executes function `fn` with the given scope `context`\r\n// (so that the `this` keyword refers to `context` inside `fn`'s code). The function\r\n// `fn` will be called no more than one time per given amount of `time`. The arguments\r\n// received by the bound function will be any arguments passed when binding the\r\n// function, followed by any arguments passed when invoking the bound function.\r\n// Has an `L.throttle` shortcut.\r\nexport function throttle(fn, time, context) {\r\n\tvar lock, args, wrapperFn, later;\r\n\r\n\tlater = function () {\r\n\t\t// reset lock and call if queued\r\n\t\tlock = false;\r\n\t\tif (args) {\r\n\t\t\twrapperFn.apply(context, args);\r\n\t\t\targs = false;\r\n\t\t}\r\n\t};\r\n\r\n\twrapperFn = function () {\r\n\t\tif (lock) {\r\n\t\t\t// called too soon, queue to call later\r\n\t\t\targs = arguments;\r\n\r\n\t\t} else {\r\n\t\t\t// call and lock until later\r\n\t\t\tfn.apply(context, arguments);\r\n\t\t\tsetTimeout(later, time);\r\n\t\t\tlock = true;\r\n\t\t}\r\n\t};\r\n\r\n\treturn wrapperFn;\r\n}\r\n\r\n// @function wrapNum(num: Number, range: Number[], includeMax?: Boolean): Number\r\n// Returns the number `num` modulo `range` in such a way so it lies within\r\n// `range[0]` and `range[1]`. The returned value will be always smaller than\r\n// `range[1]` unless `includeMax` is set to `true`.\r\nexport function wrapNum(x, range, includeMax) {\r\n\tvar max = range[1],\r\n\t min = range[0],\r\n\t d = max - min;\r\n\treturn x === max && includeMax ? x : ((x - min) % d + d) % d + min;\r\n}\r\n\r\n// @function falseFn(): Function\r\n// Returns a function which always returns `false`.\r\nexport function falseFn() { return false; }\r\n\r\n// @function formatNum(num: Number, precision?: Number|false): Number\r\n// Returns the number `num` rounded with specified `precision`.\r\n// The default `precision` value is 6 decimal places.\r\n// `false` can be passed to skip any processing (can be useful to avoid round-off errors).\r\nexport function formatNum(num, precision) {\r\n\tif (precision === false) { return num; }\r\n\tvar pow = Math.pow(10, precision === undefined ? 6 : precision);\r\n\treturn Math.round(num * pow) / pow;\r\n}\r\n\r\n// @function trim(str: String): String\r\n// Compatibility polyfill for [String.prototype.trim](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/Trim)\r\nexport function trim(str) {\r\n\treturn str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\r\n}\r\n\r\n// @function splitWords(str: String): String[]\r\n// Trims and splits the string on whitespace and returns the array of parts.\r\nexport function splitWords(str) {\r\n\treturn trim(str).split(/\\s+/);\r\n}\r\n\r\n// @function setOptions(obj: Object, options: Object): Object\r\n// Merges the given properties to the `options` of the `obj` object, returning the resulting options. See `Class options`. Has an `L.setOptions` shortcut.\r\nexport function setOptions(obj, options) {\r\n\tif (!Object.prototype.hasOwnProperty.call(obj, 'options')) {\r\n\t\tobj.options = obj.options ? create(obj.options) : {};\r\n\t}\r\n\tfor (var i in options) {\r\n\t\tobj.options[i] = options[i];\r\n\t}\r\n\treturn obj.options;\r\n}\r\n\r\n// @function getParamString(obj: Object, existingUrl?: String, uppercase?: Boolean): String\r\n// Converts an object into a parameter URL string, e.g. `{a: \"foo\", b: \"bar\"}`\r\n// translates to `'?a=foo&b=bar'`. If `existingUrl` is set, the parameters will\r\n// be appended at the end. If `uppercase` is `true`, the parameter names will\r\n// be uppercased (e.g. `'?A=foo&B=bar'`)\r\nexport function getParamString(obj, existingUrl, uppercase) {\r\n\tvar params = [];\r\n\tfor (var i in obj) {\r\n\t\tparams.push(encodeURIComponent(uppercase ? i.toUpperCase() : i) + '=' + encodeURIComponent(obj[i]));\r\n\t}\r\n\treturn ((!existingUrl || existingUrl.indexOf('?') === -1) ? '?' : '&') + params.join('&');\r\n}\r\n\r\nvar templateRe = /\\{ *([\\w_ -]+) *\\}/g;\r\n\r\n// @function template(str: String, data: Object): String\r\n// Simple templating facility, accepts a template string of the form `'Hello {a}, {b}'`\r\n// and a data object like `{a: 'foo', b: 'bar'}`, returns evaluated string\r\n// `('Hello foo, bar')`. You can also specify functions instead of strings for\r\n// data values — they will be evaluated passing `data` as an argument.\r\nexport function template(str, data) {\r\n\treturn str.replace(templateRe, function (str, key) {\r\n\t\tvar value = data[key];\r\n\r\n\t\tif (value === undefined) {\r\n\t\t\tthrow new Error('No value provided for variable ' + str);\r\n\r\n\t\t} else if (typeof value === 'function') {\r\n\t\t\tvalue = value(data);\r\n\t\t}\r\n\t\treturn value;\r\n\t});\r\n}\r\n\r\n// @function isArray(obj): Boolean\r\n// Compatibility polyfill for [Array.isArray](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray)\r\nexport var isArray = Array.isArray || function (obj) {\r\n\treturn (Object.prototype.toString.call(obj) === '[object Array]');\r\n};\r\n\r\n// @function indexOf(array: Array, el: Object): Number\r\n// Compatibility polyfill for [Array.prototype.indexOf](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf)\r\nexport function indexOf(array, el) {\r\n\tfor (var i = 0; i < array.length; i++) {\r\n\t\tif (array[i] === el) { return i; }\r\n\t}\r\n\treturn -1;\r\n}\r\n\r\n// @property emptyImageUrl: String\r\n// Data URI string containing a base64-encoded empty GIF image.\r\n// Used as a hack to free memory from unused images on WebKit-powered\r\n// mobile devices (by setting image `src` to this string).\r\nexport var emptyImageUrl = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=';\r\n\r\n// inspired by https://paulirish.com/2011/requestanimationframe-for-smart-animating/\r\n\r\nfunction getPrefixed(name) {\r\n\treturn window['webkit' + name] || window['moz' + name] || window['ms' + name];\r\n}\r\n\r\nvar lastTime = 0;\r\n\r\n// fallback for IE 7-8\r\nfunction timeoutDefer(fn) {\r\n\tvar time = +new Date(),\r\n\t timeToCall = Math.max(0, 16 - (time - lastTime));\r\n\r\n\tlastTime = time + timeToCall;\r\n\treturn window.setTimeout(fn, timeToCall);\r\n}\r\n\r\nexport var requestFn = window.requestAnimationFrame || getPrefixed('RequestAnimationFrame') || timeoutDefer;\r\nexport var cancelFn = window.cancelAnimationFrame || getPrefixed('CancelAnimationFrame') ||\r\n\t\tgetPrefixed('CancelRequestAnimationFrame') || function (id) { window.clearTimeout(id); };\r\n\r\n// @function requestAnimFrame(fn: Function, context?: Object, immediate?: Boolean): Number\r\n// Schedules `fn` to be executed when the browser repaints. `fn` is bound to\r\n// `context` if given. When `immediate` is set, `fn` is called immediately if\r\n// the browser doesn't have native support for\r\n// [`window.requestAnimationFrame`](https://developer.mozilla.org/docs/Web/API/window/requestAnimationFrame),\r\n// otherwise it's delayed. Returns a request ID that can be used to cancel the request.\r\nexport function requestAnimFrame(fn, context, immediate) {\r\n\tif (immediate && requestFn === timeoutDefer) {\r\n\t\tfn.call(context);\r\n\t} else {\r\n\t\treturn requestFn.call(window, bind(fn, context));\r\n\t}\r\n}\r\n\r\n// @function cancelAnimFrame(id: Number): undefined\r\n// Cancels a previous `requestAnimFrame`. See also [window.cancelAnimationFrame](https://developer.mozilla.org/docs/Web/API/window/cancelAnimationFrame).\r\nexport function cancelAnimFrame(id) {\r\n\tif (id) {\r\n\t\tcancelFn.call(window, id);\r\n\t}\r\n}\r\n", "import * as Util from './Util';\r\n\r\n// @class Class\r\n// @aka L.Class\r\n\r\n// @section\r\n// @uninheritable\r\n\r\n// Thanks to John Resig and Dean Edwards for inspiration!\r\n\r\nexport function Class() {}\r\n\r\nClass.extend = function (props) {\r\n\r\n\t// @function extend(props: Object): Function\r\n\t// [Extends the current class](#class-inheritance) given the properties to be included.\r\n\t// Returns a Javascript function that is a class constructor (to be called with `new`).\r\n\tvar NewClass = function () {\r\n\r\n\t\tUtil.setOptions(this);\r\n\r\n\t\t// call the constructor\r\n\t\tif (this.initialize) {\r\n\t\t\tthis.initialize.apply(this, arguments);\r\n\t\t}\r\n\r\n\t\t// call all constructor hooks\r\n\t\tthis.callInitHooks();\r\n\t};\r\n\r\n\tvar parentProto = NewClass.__super__ = this.prototype;\r\n\r\n\tvar proto = Util.create(parentProto);\r\n\tproto.constructor = NewClass;\r\n\r\n\tNewClass.prototype = proto;\r\n\r\n\t// inherit parent's statics\r\n\tfor (var i in this) {\r\n\t\tif (Object.prototype.hasOwnProperty.call(this, i) && i !== 'prototype' && i !== '__super__') {\r\n\t\t\tNewClass[i] = this[i];\r\n\t\t}\r\n\t}\r\n\r\n\t// mix static properties into the class\r\n\tif (props.statics) {\r\n\t\tUtil.extend(NewClass, props.statics);\r\n\t}\r\n\r\n\t// mix includes into the prototype\r\n\tif (props.includes) {\r\n\t\tcheckDeprecatedMixinEvents(props.includes);\r\n\t\tUtil.extend.apply(null, [proto].concat(props.includes));\r\n\t}\r\n\r\n\t// mix given properties into the prototype\r\n\tUtil.extend(proto, props);\r\n\tdelete proto.statics;\r\n\tdelete proto.includes;\r\n\r\n\t// merge options\r\n\tif (proto.options) {\r\n\t\tproto.options = parentProto.options ? Util.create(parentProto.options) : {};\r\n\t\tUtil.extend(proto.options, props.options);\r\n\t}\r\n\r\n\tproto._initHooks = [];\r\n\r\n\t// add method for calling all hooks\r\n\tproto.callInitHooks = function () {\r\n\r\n\t\tif (this._initHooksCalled) { return; }\r\n\r\n\t\tif (parentProto.callInitHooks) {\r\n\t\t\tparentProto.callInitHooks.call(this);\r\n\t\t}\r\n\r\n\t\tthis._initHooksCalled = true;\r\n\r\n\t\tfor (var i = 0, len = proto._initHooks.length; i < len; i++) {\r\n\t\t\tproto._initHooks[i].call(this);\r\n\t\t}\r\n\t};\r\n\r\n\treturn NewClass;\r\n};\r\n\r\n\r\n// @function include(properties: Object): this\r\n// [Includes a mixin](#class-includes) into the current class.\r\nClass.include = function (props) {\r\n\tvar parentOptions = this.prototype.options;\r\n\tUtil.extend(this.prototype, props);\r\n\tif (props.options) {\r\n\t\tthis.prototype.options = parentOptions;\r\n\t\tthis.mergeOptions(props.options);\r\n\t}\r\n\treturn this;\r\n};\r\n\r\n// @function mergeOptions(options: Object): this\r\n// [Merges `options`](#class-options) into the defaults of the class.\r\nClass.mergeOptions = function (options) {\r\n\tUtil.extend(this.prototype.options, options);\r\n\treturn this;\r\n};\r\n\r\n// @function addInitHook(fn: Function): this\r\n// Adds a [constructor hook](#class-constructor-hooks) to the class.\r\nClass.addInitHook = function (fn) { // (Function) || (String, args...)\r\n\tvar args = Array.prototype.slice.call(arguments, 1);\r\n\r\n\tvar init = typeof fn === 'function' ? fn : function () {\r\n\t\tthis[fn].apply(this, args);\r\n\t};\r\n\r\n\tthis.prototype._initHooks = this.prototype._initHooks || [];\r\n\tthis.prototype._initHooks.push(init);\r\n\treturn this;\r\n};\r\n\r\nfunction checkDeprecatedMixinEvents(includes) {\r\n\t/* global L: true */\r\n\tif (typeof L === 'undefined' || !L || !L.Mixin) { return; }\r\n\r\n\tincludes = Util.isArray(includes) ? includes : [includes];\r\n\r\n\tfor (var i = 0; i < includes.length; i++) {\r\n\t\tif (includes[i] === L.Mixin.Events) {\r\n\t\t\tconsole.warn('Deprecated include of L.Mixin.Events: ' +\r\n\t\t\t\t'this property will be removed in future releases, ' +\r\n\t\t\t\t'please inherit from L.Evented instead.', new Error().stack);\r\n\t\t}\r\n\t}\r\n}\r\n", "import {Class} from './Class';\r\nimport * as Util from './Util';\r\n\r\n/*\r\n * @class Evented\r\n * @aka L.Evented\r\n * @inherits Class\r\n *\r\n * A set of methods shared between event-powered classes (like `Map` and `Marker`). Generally, events allow you to execute some function when something happens with an object (e.g. the user clicks on the map, causing the map to fire `'click'` event).\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * map.on('click', function(e) {\r\n * \talert(e.latlng);\r\n * } );\r\n * ```\r\n *\r\n * Leaflet deals with event listeners by reference, so if you want to add a listener and then remove it, define it as a function:\r\n *\r\n * ```js\r\n * function onClick(e) { ... }\r\n *\r\n * map.on('click', onClick);\r\n * map.off('click', onClick);\r\n * ```\r\n */\r\n\r\nexport var Events = {\r\n\t/* @method on(type: String, fn: Function, context?: Object): this\r\n\t * Adds a listener function (`fn`) to a particular event type of the object. You can optionally specify the context of the listener (object the this keyword will point to). You can also pass several space-separated types (e.g. `'click dblclick'`).\r\n\t *\r\n\t * @alternative\r\n\t * @method on(eventMap: Object): this\r\n\t * Adds a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`\r\n\t */\r\n\ton: function (types, fn, context) {\r\n\r\n\t\t// types can be a map of types/handlers\r\n\t\tif (typeof types === 'object') {\r\n\t\t\tfor (var type in types) {\r\n\t\t\t\t// we don't process space-separated events here for performance;\r\n\t\t\t\t// it's a hot path since Layer uses the on(obj) syntax\r\n\t\t\t\tthis._on(type, types[type], fn);\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\t\t\t// types can be a string of space-separated words\r\n\t\t\ttypes = Util.splitWords(types);\r\n\r\n\t\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\t\tthis._on(types[i], fn, context);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/* @method off(type: String, fn?: Function, context?: Object): this\r\n\t * Removes a previously added listener function. If no function is specified, it will remove all the listeners of that particular event from the object. Note that if you passed a custom context to `on`, you must pass the same context to `off` in order to remove the listener.\r\n\t *\r\n\t * @alternative\r\n\t * @method off(eventMap: Object): this\r\n\t * Removes a set of type/listener pairs.\r\n\t *\r\n\t * @alternative\r\n\t * @method off: this\r\n\t * Removes all listeners to all events on the object. This includes implicitly attached events.\r\n\t */\r\n\toff: function (types, fn, context) {\r\n\r\n\t\tif (!arguments.length) {\r\n\t\t\t// clear all listeners if called without arguments\r\n\t\t\tdelete this._events;\r\n\r\n\t\t} else if (typeof types === 'object') {\r\n\t\t\tfor (var type in types) {\r\n\t\t\t\tthis._off(type, types[type], fn);\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\t\t\ttypes = Util.splitWords(types);\r\n\r\n\t\t\tvar removeAll = arguments.length === 1;\r\n\t\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\t\tif (removeAll) {\r\n\t\t\t\t\tthis._off(types[i]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis._off(types[i], fn, context);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// attach listener (without syntactic sugar now)\r\n\t_on: function (type, fn, context, _once) {\r\n\t\tif (typeof fn !== 'function') {\r\n\t\t\tconsole.warn('wrong listener type: ' + typeof fn);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// check if fn already there\r\n\t\tif (this._listens(type, fn, context) !== false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (context === this) {\r\n\t\t\t// Less memory footprint.\r\n\t\t\tcontext = undefined;\r\n\t\t}\r\n\r\n\t\tvar newListener = {fn: fn, ctx: context};\r\n\t\tif (_once) {\r\n\t\t\tnewListener.once = true;\r\n\t\t}\r\n\r\n\t\tthis._events = this._events || {};\r\n\t\tthis._events[type] = this._events[type] || [];\r\n\t\tthis._events[type].push(newListener);\r\n\t},\r\n\r\n\t_off: function (type, fn, context) {\r\n\t\tvar listeners,\r\n\t\t i,\r\n\t\t len;\r\n\r\n\t\tif (!this._events) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlisteners = this._events[type];\r\n\t\tif (!listeners) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (arguments.length === 1) { // remove all\r\n\t\t\tif (this._firingCount) {\r\n\t\t\t\t// Set all removed listeners to noop\r\n\t\t\t\t// so they are not called if remove happens in fire\r\n\t\t\t\tfor (i = 0, len = listeners.length; i < len; i++) {\r\n\t\t\t\t\tlisteners[i].fn = Util.falseFn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// clear all listeners for a type if function isn't specified\r\n\t\t\tdelete this._events[type];\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (typeof fn !== 'function') {\r\n\t\t\tconsole.warn('wrong listener type: ' + typeof fn);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// find fn and remove it\r\n\t\tvar index = this._listens(type, fn, context);\r\n\t\tif (index !== false) {\r\n\t\t\tvar listener = listeners[index];\r\n\t\t\tif (this._firingCount) {\r\n\t\t\t\t// set the removed listener to noop so that's not called if remove happens in fire\r\n\t\t\t\tlistener.fn = Util.falseFn;\r\n\r\n\t\t\t\t/* copy array in case events are being fired */\r\n\t\t\t\tthis._events[type] = listeners = listeners.slice();\r\n\t\t\t}\r\n\t\t\tlisteners.splice(index, 1);\r\n\t\t}\r\n\t},\r\n\r\n\t// @method fire(type: String, data?: Object, propagate?: Boolean): this\r\n\t// Fires an event of the specified type. You can optionally provide a data\r\n\t// object — the first argument of the listener function will contain its\r\n\t// properties. The event can optionally be propagated to event parents.\r\n\tfire: function (type, data, propagate) {\r\n\t\tif (!this.listens(type, propagate)) { return this; }\r\n\r\n\t\tvar event = Util.extend({}, data, {\r\n\t\t\ttype: type,\r\n\t\t\ttarget: this,\r\n\t\t\tsourceTarget: data && data.sourceTarget || this\r\n\t\t});\r\n\r\n\t\tif (this._events) {\r\n\t\t\tvar listeners = this._events[type];\r\n\t\t\tif (listeners) {\r\n\t\t\t\tthis._firingCount = (this._firingCount + 1) || 1;\r\n\t\t\t\tfor (var i = 0, len = listeners.length; i < len; i++) {\r\n\t\t\t\t\tvar l = listeners[i];\r\n\t\t\t\t\t// off overwrites l.fn, so we need to copy fn to a var\r\n\t\t\t\t\tvar fn = l.fn;\r\n\t\t\t\t\tif (l.once) {\r\n\t\t\t\t\t\tthis.off(type, fn, l.ctx);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tfn.call(l.ctx || this, event);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._firingCount--;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (propagate) {\r\n\t\t\t// propagate the event to parents (set with addEventParent)\r\n\t\t\tthis._propagateEvent(event);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method listens(type: String, propagate?: Boolean): Boolean\r\n\t// @method listens(type: String, fn: Function, context?: Object, propagate?: Boolean): Boolean\r\n\t// Returns `true` if a particular event type has any listeners attached to it.\r\n\t// The verification can optionally be propagated, it will return `true` if parents have the listener attached to it.\r\n\tlistens: function (type, fn, context, propagate) {\r\n\t\tif (typeof type !== 'string') {\r\n\t\t\tconsole.warn('\"string\" type argument expected');\r\n\t\t}\r\n\r\n\t\t// we don't overwrite the input `fn` value, because we need to use it for propagation\r\n\t\tvar _fn = fn;\r\n\t\tif (typeof fn !== 'function') {\r\n\t\t\tpropagate = !!fn;\r\n\t\t\t_fn = undefined;\r\n\t\t\tcontext = undefined;\r\n\t\t}\r\n\r\n\t\tvar listeners = this._events && this._events[type];\r\n\t\tif (listeners && listeners.length) {\r\n\t\t\tif (this._listens(type, _fn, context) !== false) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (propagate) {\r\n\t\t\t// also check parents for listeners if event propagates\r\n\t\t\tfor (var id in this._eventParents) {\r\n\t\t\t\tif (this._eventParents[id].listens(type, fn, context, propagate)) { return true; }\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\t// returns the index (number) or false\r\n\t_listens: function (type, fn, context) {\r\n\t\tif (!this._events) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvar listeners = this._events[type] || [];\r\n\t\tif (!fn) {\r\n\t\t\treturn !!listeners.length;\r\n\t\t}\r\n\r\n\t\tif (context === this) {\r\n\t\t\t// Less memory footprint.\r\n\t\t\tcontext = undefined;\r\n\t\t}\r\n\r\n\t\tfor (var i = 0, len = listeners.length; i < len; i++) {\r\n\t\t\tif (listeners[i].fn === fn && listeners[i].ctx === context) {\r\n\t\t\t\treturn i;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\r\n\t},\r\n\r\n\t// @method once(…): this\r\n\t// Behaves as [`on(…)`](#evented-on), except the listener will only get fired once and then removed.\r\n\tonce: function (types, fn, context) {\r\n\r\n\t\t// types can be a map of types/handlers\r\n\t\tif (typeof types === 'object') {\r\n\t\t\tfor (var type in types) {\r\n\t\t\t\t// we don't process space-separated events here for performance;\r\n\t\t\t\t// it's a hot path since Layer uses the on(obj) syntax\r\n\t\t\t\tthis._on(type, types[type], fn, true);\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\t\t\t// types can be a string of space-separated words\r\n\t\t\ttypes = Util.splitWords(types);\r\n\r\n\t\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\t\tthis._on(types[i], fn, context, true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method addEventParent(obj: Evented): this\r\n\t// Adds an event parent - an `Evented` that will receive propagated events\r\n\taddEventParent: function (obj) {\r\n\t\tthis._eventParents = this._eventParents || {};\r\n\t\tthis._eventParents[Util.stamp(obj)] = obj;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method removeEventParent(obj: Evented): this\r\n\t// Removes an event parent, so it will stop receiving propagated events\r\n\tremoveEventParent: function (obj) {\r\n\t\tif (this._eventParents) {\r\n\t\t\tdelete this._eventParents[Util.stamp(obj)];\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_propagateEvent: function (e) {\r\n\t\tfor (var id in this._eventParents) {\r\n\t\t\tthis._eventParents[id].fire(e.type, Util.extend({\r\n\t\t\t\tlayer: e.target,\r\n\t\t\t\tpropagatedFrom: e.target\r\n\t\t\t}, e), true);\r\n\t\t}\r\n\t}\r\n};\r\n\r\n// aliases; we should ditch those eventually\r\n\r\n// @method addEventListener(…): this\r\n// Alias to [`on(…)`](#evented-on)\r\nEvents.addEventListener = Events.on;\r\n\r\n// @method removeEventListener(…): this\r\n// Alias to [`off(…)`](#evented-off)\r\n\r\n// @method clearAllEventListeners(…): this\r\n// Alias to [`off()`](#evented-off)\r\nEvents.removeEventListener = Events.clearAllEventListeners = Events.off;\r\n\r\n// @method addOneTimeEventListener(…): this\r\n// Alias to [`once(…)`](#evented-once)\r\nEvents.addOneTimeEventListener = Events.once;\r\n\r\n// @method fireEvent(…): this\r\n// Alias to [`fire(…)`](#evented-fire)\r\nEvents.fireEvent = Events.fire;\r\n\r\n// @method hasEventListeners(…): Boolean\r\n// Alias to [`listens(…)`](#evented-listens)\r\nEvents.hasEventListeners = Events.listens;\r\n\r\nexport var Evented = Class.extend(Events);\r\n", "import {isArray, formatNum} from '../core/Util';\r\n\r\n/*\r\n * @class Point\r\n * @aka L.Point\r\n *\r\n * Represents a point with `x` and `y` coordinates in pixels.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var point = L.point(200, 300);\r\n * ```\r\n *\r\n * All Leaflet methods and options that accept `Point` objects also accept them in a simple Array form (unless noted otherwise), so these lines are equivalent:\r\n *\r\n * ```js\r\n * map.panBy([200, 300]);\r\n * map.panBy(L.point(200, 300));\r\n * ```\r\n *\r\n * Note that `Point` does not inherit from Leaflet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\nexport function Point(x, y, round) {\r\n\t// @property x: Number; The `x` coordinate of the point\r\n\tthis.x = (round ? Math.round(x) : x);\r\n\t// @property y: Number; The `y` coordinate of the point\r\n\tthis.y = (round ? Math.round(y) : y);\r\n}\r\n\r\nvar trunc = Math.trunc || function (v) {\r\n\treturn v > 0 ? Math.floor(v) : Math.ceil(v);\r\n};\r\n\r\nPoint.prototype = {\r\n\r\n\t// @method clone(): Point\r\n\t// Returns a copy of the current point.\r\n\tclone: function () {\r\n\t\treturn new Point(this.x, this.y);\r\n\t},\r\n\r\n\t// @method add(otherPoint: Point): Point\r\n\t// Returns the result of addition of the current and the given points.\r\n\tadd: function (point) {\r\n\t\t// non-destructive, returns a new point\r\n\t\treturn this.clone()._add(toPoint(point));\r\n\t},\r\n\r\n\t_add: function (point) {\r\n\t\t// destructive, used directly for performance in situations where it's safe to modify existing point\r\n\t\tthis.x += point.x;\r\n\t\tthis.y += point.y;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method subtract(otherPoint: Point): Point\r\n\t// Returns the result of subtraction of the given point from the current.\r\n\tsubtract: function (point) {\r\n\t\treturn this.clone()._subtract(toPoint(point));\r\n\t},\r\n\r\n\t_subtract: function (point) {\r\n\t\tthis.x -= point.x;\r\n\t\tthis.y -= point.y;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method divideBy(num: Number): Point\r\n\t// Returns the result of division of the current point by the given number.\r\n\tdivideBy: function (num) {\r\n\t\treturn this.clone()._divideBy(num);\r\n\t},\r\n\r\n\t_divideBy: function (num) {\r\n\t\tthis.x /= num;\r\n\t\tthis.y /= num;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method multiplyBy(num: Number): Point\r\n\t// Returns the result of multiplication of the current point by the given number.\r\n\tmultiplyBy: function (num) {\r\n\t\treturn this.clone()._multiplyBy(num);\r\n\t},\r\n\r\n\t_multiplyBy: function (num) {\r\n\t\tthis.x *= num;\r\n\t\tthis.y *= num;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method scaleBy(scale: Point): Point\r\n\t// Multiply each coordinate of the current point by each coordinate of\r\n\t// `scale`. In linear algebra terms, multiply the point by the\r\n\t// [scaling matrix](https://en.wikipedia.org/wiki/Scaling_%28geometry%29#Matrix_representation)\r\n\t// defined by `scale`.\r\n\tscaleBy: function (point) {\r\n\t\treturn new Point(this.x * point.x, this.y * point.y);\r\n\t},\r\n\r\n\t// @method unscaleBy(scale: Point): Point\r\n\t// Inverse of `scaleBy`. Divide each coordinate of the current point by\r\n\t// each coordinate of `scale`.\r\n\tunscaleBy: function (point) {\r\n\t\treturn new Point(this.x / point.x, this.y / point.y);\r\n\t},\r\n\r\n\t// @method round(): Point\r\n\t// Returns a copy of the current point with rounded coordinates.\r\n\tround: function () {\r\n\t\treturn this.clone()._round();\r\n\t},\r\n\r\n\t_round: function () {\r\n\t\tthis.x = Math.round(this.x);\r\n\t\tthis.y = Math.round(this.y);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method floor(): Point\r\n\t// Returns a copy of the current point with floored coordinates (rounded down).\r\n\tfloor: function () {\r\n\t\treturn this.clone()._floor();\r\n\t},\r\n\r\n\t_floor: function () {\r\n\t\tthis.x = Math.floor(this.x);\r\n\t\tthis.y = Math.floor(this.y);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method ceil(): Point\r\n\t// Returns a copy of the current point with ceiled coordinates (rounded up).\r\n\tceil: function () {\r\n\t\treturn this.clone()._ceil();\r\n\t},\r\n\r\n\t_ceil: function () {\r\n\t\tthis.x = Math.ceil(this.x);\r\n\t\tthis.y = Math.ceil(this.y);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method trunc(): Point\r\n\t// Returns a copy of the current point with truncated coordinates (rounded towards zero).\r\n\ttrunc: function () {\r\n\t\treturn this.clone()._trunc();\r\n\t},\r\n\r\n\t_trunc: function () {\r\n\t\tthis.x = trunc(this.x);\r\n\t\tthis.y = trunc(this.y);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method distanceTo(otherPoint: Point): Number\r\n\t// Returns the cartesian distance between the current and the given points.\r\n\tdistanceTo: function (point) {\r\n\t\tpoint = toPoint(point);\r\n\r\n\t\tvar x = point.x - this.x,\r\n\t\t y = point.y - this.y;\r\n\r\n\t\treturn Math.sqrt(x * x + y * y);\r\n\t},\r\n\r\n\t// @method equals(otherPoint: Point): Boolean\r\n\t// Returns `true` if the given point has the same coordinates.\r\n\tequals: function (point) {\r\n\t\tpoint = toPoint(point);\r\n\r\n\t\treturn point.x === this.x &&\r\n\t\t point.y === this.y;\r\n\t},\r\n\r\n\t// @method contains(otherPoint: Point): Boolean\r\n\t// Returns `true` if both coordinates of the given point are less than the corresponding current point coordinates (in absolute values).\r\n\tcontains: function (point) {\r\n\t\tpoint = toPoint(point);\r\n\r\n\t\treturn Math.abs(point.x) <= Math.abs(this.x) &&\r\n\t\t Math.abs(point.y) <= Math.abs(this.y);\r\n\t},\r\n\r\n\t// @method toString(): String\r\n\t// Returns a string representation of the point for debugging purposes.\r\n\ttoString: function () {\r\n\t\treturn 'Point(' +\r\n\t\t formatNum(this.x) + ', ' +\r\n\t\t formatNum(this.y) + ')';\r\n\t}\r\n};\r\n\r\n// @factory L.point(x: Number, y: Number, round?: Boolean)\r\n// Creates a Point object with the given `x` and `y` coordinates. If optional `round` is set to true, rounds the `x` and `y` values.\r\n\r\n// @alternative\r\n// @factory L.point(coords: Number[])\r\n// Expects an array of the form `[x, y]` instead.\r\n\r\n// @alternative\r\n// @factory L.point(coords: Object)\r\n// Expects a plain object of the form `{x: Number, y: Number}` instead.\r\nexport function toPoint(x, y, round) {\r\n\tif (x instanceof Point) {\r\n\t\treturn x;\r\n\t}\r\n\tif (isArray(x)) {\r\n\t\treturn new Point(x[0], x[1]);\r\n\t}\r\n\tif (x === undefined || x === null) {\r\n\t\treturn x;\r\n\t}\r\n\tif (typeof x === 'object' && 'x' in x && 'y' in x) {\r\n\t\treturn new Point(x.x, x.y);\r\n\t}\r\n\treturn new Point(x, y, round);\r\n}\r\n", "import {Point, toPoint} from './Point';\r\n\r\n/*\r\n * @class Bounds\r\n * @aka L.Bounds\r\n *\r\n * Represents a rectangular area in pixel coordinates.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var p1 = L.point(10, 10),\r\n * p2 = L.point(40, 60),\r\n * bounds = L.bounds(p1, p2);\r\n * ```\r\n *\r\n * All Leaflet methods that accept `Bounds` objects also accept them in a simple Array form (unless noted otherwise), so the bounds example above can be passed like this:\r\n *\r\n * ```js\r\n * otherBounds.intersects([[10, 10], [40, 60]]);\r\n * ```\r\n *\r\n * Note that `Bounds` does not inherit from Leaflet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\nexport function Bounds(a, b) {\r\n\tif (!a) { return; }\r\n\r\n\tvar points = b ? [a, b] : a;\r\n\r\n\tfor (var i = 0, len = points.length; i < len; i++) {\r\n\t\tthis.extend(points[i]);\r\n\t}\r\n}\r\n\r\nBounds.prototype = {\r\n\t// @method extend(point: Point): this\r\n\t// Extends the bounds to contain the given point.\r\n\r\n\t// @alternative\r\n\t// @method extend(otherBounds: Bounds): this\r\n\t// Extend the bounds to contain the given bounds\r\n\textend: function (obj) {\r\n\t\tvar min2, max2;\r\n\t\tif (!obj) { return this; }\r\n\r\n\t\tif (obj instanceof Point || typeof obj[0] === 'number' || 'x' in obj) {\r\n\t\t\tmin2 = max2 = toPoint(obj);\r\n\t\t} else {\r\n\t\t\tobj = toBounds(obj);\r\n\t\t\tmin2 = obj.min;\r\n\t\t\tmax2 = obj.max;\r\n\r\n\t\t\tif (!min2 || !max2) { return this; }\r\n\t\t}\r\n\r\n\t\t// @property min: Point\r\n\t\t// The top left corner of the rectangle.\r\n\t\t// @property max: Point\r\n\t\t// The bottom right corner of the rectangle.\r\n\t\tif (!this.min && !this.max) {\r\n\t\t\tthis.min = min2.clone();\r\n\t\t\tthis.max = max2.clone();\r\n\t\t} else {\r\n\t\t\tthis.min.x = Math.min(min2.x, this.min.x);\r\n\t\t\tthis.max.x = Math.max(max2.x, this.max.x);\r\n\t\t\tthis.min.y = Math.min(min2.y, this.min.y);\r\n\t\t\tthis.max.y = Math.max(max2.y, this.max.y);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getCenter(round?: Boolean): Point\r\n\t// Returns the center point of the bounds.\r\n\tgetCenter: function (round) {\r\n\t\treturn toPoint(\r\n\t\t (this.min.x + this.max.x) / 2,\r\n\t\t (this.min.y + this.max.y) / 2, round);\r\n\t},\r\n\r\n\t// @method getBottomLeft(): Point\r\n\t// Returns the bottom-left point of the bounds.\r\n\tgetBottomLeft: function () {\r\n\t\treturn toPoint(this.min.x, this.max.y);\r\n\t},\r\n\r\n\t// @method getTopRight(): Point\r\n\t// Returns the top-right point of the bounds.\r\n\tgetTopRight: function () { // -> Point\r\n\t\treturn toPoint(this.max.x, this.min.y);\r\n\t},\r\n\r\n\t// @method getTopLeft(): Point\r\n\t// Returns the top-left point of the bounds (i.e. [`this.min`](#bounds-min)).\r\n\tgetTopLeft: function () {\r\n\t\treturn this.min; // left, top\r\n\t},\r\n\r\n\t// @method getBottomRight(): Point\r\n\t// Returns the bottom-right point of the bounds (i.e. [`this.max`](#bounds-max)).\r\n\tgetBottomRight: function () {\r\n\t\treturn this.max; // right, bottom\r\n\t},\r\n\r\n\t// @method getSize(): Point\r\n\t// Returns the size of the given bounds\r\n\tgetSize: function () {\r\n\t\treturn this.max.subtract(this.min);\r\n\t},\r\n\r\n\t// @method contains(otherBounds: Bounds): Boolean\r\n\t// Returns `true` if the rectangle contains the given one.\r\n\t// @alternative\r\n\t// @method contains(point: Point): Boolean\r\n\t// Returns `true` if the rectangle contains the given point.\r\n\tcontains: function (obj) {\r\n\t\tvar min, max;\r\n\r\n\t\tif (typeof obj[0] === 'number' || obj instanceof Point) {\r\n\t\t\tobj = toPoint(obj);\r\n\t\t} else {\r\n\t\t\tobj = toBounds(obj);\r\n\t\t}\r\n\r\n\t\tif (obj instanceof Bounds) {\r\n\t\t\tmin = obj.min;\r\n\t\t\tmax = obj.max;\r\n\t\t} else {\r\n\t\t\tmin = max = obj;\r\n\t\t}\r\n\r\n\t\treturn (min.x >= this.min.x) &&\r\n\t\t (max.x <= this.max.x) &&\r\n\t\t (min.y >= this.min.y) &&\r\n\t\t (max.y <= this.max.y);\r\n\t},\r\n\r\n\t// @method intersects(otherBounds: Bounds): Boolean\r\n\t// Returns `true` if the rectangle intersects the given bounds. Two bounds\r\n\t// intersect if they have at least one point in common.\r\n\tintersects: function (bounds) { // (Bounds) -> Boolean\r\n\t\tbounds = toBounds(bounds);\r\n\r\n\t\tvar min = this.min,\r\n\t\t max = this.max,\r\n\t\t min2 = bounds.min,\r\n\t\t max2 = bounds.max,\r\n\t\t xIntersects = (max2.x >= min.x) && (min2.x <= max.x),\r\n\t\t yIntersects = (max2.y >= min.y) && (min2.y <= max.y);\r\n\r\n\t\treturn xIntersects && yIntersects;\r\n\t},\r\n\r\n\t// @method overlaps(otherBounds: Bounds): Boolean\r\n\t// Returns `true` if the rectangle overlaps the given bounds. Two bounds\r\n\t// overlap if their intersection is an area.\r\n\toverlaps: function (bounds) { // (Bounds) -> Boolean\r\n\t\tbounds = toBounds(bounds);\r\n\r\n\t\tvar min = this.min,\r\n\t\t max = this.max,\r\n\t\t min2 = bounds.min,\r\n\t\t max2 = bounds.max,\r\n\t\t xOverlaps = (max2.x > min.x) && (min2.x < max.x),\r\n\t\t yOverlaps = (max2.y > min.y) && (min2.y < max.y);\r\n\r\n\t\treturn xOverlaps && yOverlaps;\r\n\t},\r\n\r\n\t// @method isValid(): Boolean\r\n\t// Returns `true` if the bounds are properly initialized.\r\n\tisValid: function () {\r\n\t\treturn !!(this.min && this.max);\r\n\t},\r\n\r\n\r\n\t// @method pad(bufferRatio: Number): Bounds\r\n\t// Returns bounds created by extending or retracting the current bounds by a given ratio in each direction.\r\n\t// For example, a ratio of 0.5 extends the bounds by 50% in each direction.\r\n\t// Negative values will retract the bounds.\r\n\tpad: function (bufferRatio) {\r\n\t\tvar min = this.min,\r\n\t\tmax = this.max,\r\n\t\theightBuffer = Math.abs(min.x - max.x) * bufferRatio,\r\n\t\twidthBuffer = Math.abs(min.y - max.y) * bufferRatio;\r\n\r\n\r\n\t\treturn toBounds(\r\n\t\t\ttoPoint(min.x - heightBuffer, min.y - widthBuffer),\r\n\t\t\ttoPoint(max.x + heightBuffer, max.y + widthBuffer));\r\n\t},\r\n\r\n\r\n\t// @method equals(otherBounds: Bounds): Boolean\r\n\t// Returns `true` if the rectangle is equivalent to the given bounds.\r\n\tequals: function (bounds) {\r\n\t\tif (!bounds) { return false; }\r\n\r\n\t\tbounds = toBounds(bounds);\r\n\r\n\t\treturn this.min.equals(bounds.getTopLeft()) &&\r\n\t\t\tthis.max.equals(bounds.getBottomRight());\r\n\t},\r\n};\r\n\r\n\r\n// @factory L.bounds(corner1: Point, corner2: Point)\r\n// Creates a Bounds object from two corners coordinate pairs.\r\n// @alternative\r\n// @factory L.bounds(points: Point[])\r\n// Creates a Bounds object from the given array of points.\r\nexport function toBounds(a, b) {\r\n\tif (!a || a instanceof Bounds) {\r\n\t\treturn a;\r\n\t}\r\n\treturn new Bounds(a, b);\r\n}\r\n", "import {LatLng, toLatLng} from './LatLng';\r\n\r\n/*\r\n * @class LatLngBounds\r\n * @aka L.LatLngBounds\r\n *\r\n * Represents a rectangular geographical area on a map.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var corner1 = L.latLng(40.712, -74.227),\r\n * corner2 = L.latLng(40.774, -74.125),\r\n * bounds = L.latLngBounds(corner1, corner2);\r\n * ```\r\n *\r\n * All Leaflet methods that accept LatLngBounds objects also accept them in a simple Array form (unless noted otherwise), so the bounds example above can be passed like this:\r\n *\r\n * ```js\r\n * map.fitBounds([\r\n * \t[40.712, -74.227],\r\n * \t[40.774, -74.125]\r\n * ]);\r\n * ```\r\n *\r\n * Caution: if the area crosses the antimeridian (often confused with the International Date Line), you must specify corners _outside_ the [-180, 180] degrees longitude range.\r\n *\r\n * Note that `LatLngBounds` does not inherit from Leaflet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\nexport function LatLngBounds(corner1, corner2) { // (LatLng, LatLng) or (LatLng[])\r\n\tif (!corner1) { return; }\r\n\r\n\tvar latlngs = corner2 ? [corner1, corner2] : corner1;\r\n\r\n\tfor (var i = 0, len = latlngs.length; i < len; i++) {\r\n\t\tthis.extend(latlngs[i]);\r\n\t}\r\n}\r\n\r\nLatLngBounds.prototype = {\r\n\r\n\t// @method extend(latlng: LatLng): this\r\n\t// Extend the bounds to contain the given point\r\n\r\n\t// @alternative\r\n\t// @method extend(otherBounds: LatLngBounds): this\r\n\t// Extend the bounds to contain the given bounds\r\n\textend: function (obj) {\r\n\t\tvar sw = this._southWest,\r\n\t\t ne = this._northEast,\r\n\t\t sw2, ne2;\r\n\r\n\t\tif (obj instanceof LatLng) {\r\n\t\t\tsw2 = obj;\r\n\t\t\tne2 = obj;\r\n\r\n\t\t} else if (obj instanceof LatLngBounds) {\r\n\t\t\tsw2 = obj._southWest;\r\n\t\t\tne2 = obj._northEast;\r\n\r\n\t\t\tif (!sw2 || !ne2) { return this; }\r\n\r\n\t\t} else {\r\n\t\t\treturn obj ? this.extend(toLatLng(obj) || toLatLngBounds(obj)) : this;\r\n\t\t}\r\n\r\n\t\tif (!sw && !ne) {\r\n\t\t\tthis._southWest = new LatLng(sw2.lat, sw2.lng);\r\n\t\t\tthis._northEast = new LatLng(ne2.lat, ne2.lng);\r\n\t\t} else {\r\n\t\t\tsw.lat = Math.min(sw2.lat, sw.lat);\r\n\t\t\tsw.lng = Math.min(sw2.lng, sw.lng);\r\n\t\t\tne.lat = Math.max(ne2.lat, ne.lat);\r\n\t\t\tne.lng = Math.max(ne2.lng, ne.lng);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method pad(bufferRatio: Number): LatLngBounds\r\n\t// Returns bounds created by extending or retracting the current bounds by a given ratio in each direction.\r\n\t// For example, a ratio of 0.5 extends the bounds by 50% in each direction.\r\n\t// Negative values will retract the bounds.\r\n\tpad: function (bufferRatio) {\r\n\t\tvar sw = this._southWest,\r\n\t\t ne = this._northEast,\r\n\t\t heightBuffer = Math.abs(sw.lat - ne.lat) * bufferRatio,\r\n\t\t widthBuffer = Math.abs(sw.lng - ne.lng) * bufferRatio;\r\n\r\n\t\treturn new LatLngBounds(\r\n\t\t new LatLng(sw.lat - heightBuffer, sw.lng - widthBuffer),\r\n\t\t new LatLng(ne.lat + heightBuffer, ne.lng + widthBuffer));\r\n\t},\r\n\r\n\t// @method getCenter(): LatLng\r\n\t// Returns the center point of the bounds.\r\n\tgetCenter: function () {\r\n\t\treturn new LatLng(\r\n\t\t (this._southWest.lat + this._northEast.lat) / 2,\r\n\t\t (this._southWest.lng + this._northEast.lng) / 2);\r\n\t},\r\n\r\n\t// @method getSouthWest(): LatLng\r\n\t// Returns the south-west point of the bounds.\r\n\tgetSouthWest: function () {\r\n\t\treturn this._southWest;\r\n\t},\r\n\r\n\t// @method getNorthEast(): LatLng\r\n\t// Returns the north-east point of the bounds.\r\n\tgetNorthEast: function () {\r\n\t\treturn this._northEast;\r\n\t},\r\n\r\n\t// @method getNorthWest(): LatLng\r\n\t// Returns the north-west point of the bounds.\r\n\tgetNorthWest: function () {\r\n\t\treturn new LatLng(this.getNorth(), this.getWest());\r\n\t},\r\n\r\n\t// @method getSouthEast(): LatLng\r\n\t// Returns the south-east point of the bounds.\r\n\tgetSouthEast: function () {\r\n\t\treturn new LatLng(this.getSouth(), this.getEast());\r\n\t},\r\n\r\n\t// @method getWest(): Number\r\n\t// Returns the west longitude of the bounds\r\n\tgetWest: function () {\r\n\t\treturn this._southWest.lng;\r\n\t},\r\n\r\n\t// @method getSouth(): Number\r\n\t// Returns the south latitude of the bounds\r\n\tgetSouth: function () {\r\n\t\treturn this._southWest.lat;\r\n\t},\r\n\r\n\t// @method getEast(): Number\r\n\t// Returns the east longitude of the bounds\r\n\tgetEast: function () {\r\n\t\treturn this._northEast.lng;\r\n\t},\r\n\r\n\t// @method getNorth(): Number\r\n\t// Returns the north latitude of the bounds\r\n\tgetNorth: function () {\r\n\t\treturn this._northEast.lat;\r\n\t},\r\n\r\n\t// @method contains(otherBounds: LatLngBounds): Boolean\r\n\t// Returns `true` if the rectangle contains the given one.\r\n\r\n\t// @alternative\r\n\t// @method contains (latlng: LatLng): Boolean\r\n\t// Returns `true` if the rectangle contains the given point.\r\n\tcontains: function (obj) { // (LatLngBounds) or (LatLng) -> Boolean\r\n\t\tif (typeof obj[0] === 'number' || obj instanceof LatLng || 'lat' in obj) {\r\n\t\t\tobj = toLatLng(obj);\r\n\t\t} else {\r\n\t\t\tobj = toLatLngBounds(obj);\r\n\t\t}\r\n\r\n\t\tvar sw = this._southWest,\r\n\t\t ne = this._northEast,\r\n\t\t sw2, ne2;\r\n\r\n\t\tif (obj instanceof LatLngBounds) {\r\n\t\t\tsw2 = obj.getSouthWest();\r\n\t\t\tne2 = obj.getNorthEast();\r\n\t\t} else {\r\n\t\t\tsw2 = ne2 = obj;\r\n\t\t}\r\n\r\n\t\treturn (sw2.lat >= sw.lat) && (ne2.lat <= ne.lat) &&\r\n\t\t (sw2.lng >= sw.lng) && (ne2.lng <= ne.lng);\r\n\t},\r\n\r\n\t// @method intersects(otherBounds: LatLngBounds): Boolean\r\n\t// Returns `true` if the rectangle intersects the given bounds. Two bounds intersect if they have at least one point in common.\r\n\tintersects: function (bounds) {\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\tvar sw = this._southWest,\r\n\t\t ne = this._northEast,\r\n\t\t sw2 = bounds.getSouthWest(),\r\n\t\t ne2 = bounds.getNorthEast(),\r\n\r\n\t\t latIntersects = (ne2.lat >= sw.lat) && (sw2.lat <= ne.lat),\r\n\t\t lngIntersects = (ne2.lng >= sw.lng) && (sw2.lng <= ne.lng);\r\n\r\n\t\treturn latIntersects && lngIntersects;\r\n\t},\r\n\r\n\t// @method overlaps(otherBounds: LatLngBounds): Boolean\r\n\t// Returns `true` if the rectangle overlaps the given bounds. Two bounds overlap if their intersection is an area.\r\n\toverlaps: function (bounds) {\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\tvar sw = this._southWest,\r\n\t\t ne = this._northEast,\r\n\t\t sw2 = bounds.getSouthWest(),\r\n\t\t ne2 = bounds.getNorthEast(),\r\n\r\n\t\t latOverlaps = (ne2.lat > sw.lat) && (sw2.lat < ne.lat),\r\n\t\t lngOverlaps = (ne2.lng > sw.lng) && (sw2.lng < ne.lng);\r\n\r\n\t\treturn latOverlaps && lngOverlaps;\r\n\t},\r\n\r\n\t// @method toBBoxString(): String\r\n\t// Returns a string with bounding box coordinates in a 'southwest_lng,southwest_lat,northeast_lng,northeast_lat' format. Useful for sending requests to web services that return geo data.\r\n\ttoBBoxString: function () {\r\n\t\treturn [this.getWest(), this.getSouth(), this.getEast(), this.getNorth()].join(',');\r\n\t},\r\n\r\n\t// @method equals(otherBounds: LatLngBounds, maxMargin?: Number): Boolean\r\n\t// Returns `true` if the rectangle is equivalent (within a small margin of error) to the given bounds. The margin of error can be overridden by setting `maxMargin` to a small number.\r\n\tequals: function (bounds, maxMargin) {\r\n\t\tif (!bounds) { return false; }\r\n\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\treturn this._southWest.equals(bounds.getSouthWest(), maxMargin) &&\r\n\t\t this._northEast.equals(bounds.getNorthEast(), maxMargin);\r\n\t},\r\n\r\n\t// @method isValid(): Boolean\r\n\t// Returns `true` if the bounds are properly initialized.\r\n\tisValid: function () {\r\n\t\treturn !!(this._southWest && this._northEast);\r\n\t}\r\n};\r\n\r\n// TODO International date line?\r\n\r\n// @factory L.latLngBounds(corner1: LatLng, corner2: LatLng)\r\n// Creates a `LatLngBounds` object by defining two diagonally opposite corners of the rectangle.\r\n\r\n// @alternative\r\n// @factory L.latLngBounds(latlngs: LatLng[])\r\n// Creates a `LatLngBounds` object defined by the geographical points it contains. Very useful for zooming the map to fit a particular set of locations with [`fitBounds`](#map-fitbounds).\r\nexport function toLatLngBounds(a, b) {\r\n\tif (a instanceof LatLngBounds) {\r\n\t\treturn a;\r\n\t}\r\n\treturn new LatLngBounds(a, b);\r\n}\r\n", "import * as Util from '../core/Util';\r\nimport {Earth} from './crs/CRS.Earth';\r\nimport {toLatLngBounds} from './LatLngBounds';\r\n\r\n/* @class LatLng\r\n * @aka L.LatLng\r\n *\r\n * Represents a geographical point with a certain latitude and longitude.\r\n *\r\n * @example\r\n *\r\n * ```\r\n * var latlng = L.latLng(50.5, 30.5);\r\n * ```\r\n *\r\n * All Leaflet methods that accept LatLng objects also accept them in a simple Array form and simple object form (unless noted otherwise), so these lines are equivalent:\r\n *\r\n * ```\r\n * map.panTo([50, 30]);\r\n * map.panTo({lon: 30, lat: 50});\r\n * map.panTo({lat: 50, lng: 30});\r\n * map.panTo(L.latLng(50, 30));\r\n * ```\r\n *\r\n * Note that `LatLng` does not inherit from Leaflet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\nexport function LatLng(lat, lng, alt) {\r\n\tif (isNaN(lat) || isNaN(lng)) {\r\n\t\tthrow new Error('Invalid LatLng object: (' + lat + ', ' + lng + ')');\r\n\t}\r\n\r\n\t// @property lat: Number\r\n\t// Latitude in degrees\r\n\tthis.lat = +lat;\r\n\r\n\t// @property lng: Number\r\n\t// Longitude in degrees\r\n\tthis.lng = +lng;\r\n\r\n\t// @property alt: Number\r\n\t// Altitude in meters (optional)\r\n\tif (alt !== undefined) {\r\n\t\tthis.alt = +alt;\r\n\t}\r\n}\r\n\r\nLatLng.prototype = {\r\n\t// @method equals(otherLatLng: LatLng, maxMargin?: Number): Boolean\r\n\t// Returns `true` if the given `LatLng` point is at the same position (within a small margin of error). The margin of error can be overridden by setting `maxMargin` to a small number.\r\n\tequals: function (obj, maxMargin) {\r\n\t\tif (!obj) { return false; }\r\n\r\n\t\tobj = toLatLng(obj);\r\n\r\n\t\tvar margin = Math.max(\r\n\t\t Math.abs(this.lat - obj.lat),\r\n\t\t Math.abs(this.lng - obj.lng));\r\n\r\n\t\treturn margin <= (maxMargin === undefined ? 1.0E-9 : maxMargin);\r\n\t},\r\n\r\n\t// @method toString(): String\r\n\t// Returns a string representation of the point (for debugging purposes).\r\n\ttoString: function (precision) {\r\n\t\treturn 'LatLng(' +\r\n\t\t Util.formatNum(this.lat, precision) + ', ' +\r\n\t\t Util.formatNum(this.lng, precision) + ')';\r\n\t},\r\n\r\n\t// @method distanceTo(otherLatLng: LatLng): Number\r\n\t// Returns the distance (in meters) to the given `LatLng` calculated using the [Spherical Law of Cosines](https://en.wikipedia.org/wiki/Spherical_law_of_cosines).\r\n\tdistanceTo: function (other) {\r\n\t\treturn Earth.distance(this, toLatLng(other));\r\n\t},\r\n\r\n\t// @method wrap(): LatLng\r\n\t// Returns a new `LatLng` object with the longitude wrapped so it's always between -180 and +180 degrees.\r\n\twrap: function () {\r\n\t\treturn Earth.wrapLatLng(this);\r\n\t},\r\n\r\n\t// @method toBounds(sizeInMeters: Number): LatLngBounds\r\n\t// Returns a new `LatLngBounds` object in which each boundary is `sizeInMeters/2` meters apart from the `LatLng`.\r\n\ttoBounds: function (sizeInMeters) {\r\n\t\tvar latAccuracy = 180 * sizeInMeters / 40075017,\r\n\t\t lngAccuracy = latAccuracy / Math.cos((Math.PI / 180) * this.lat);\r\n\r\n\t\treturn toLatLngBounds(\r\n\t\t [this.lat - latAccuracy, this.lng - lngAccuracy],\r\n\t\t [this.lat + latAccuracy, this.lng + lngAccuracy]);\r\n\t},\r\n\r\n\tclone: function () {\r\n\t\treturn new LatLng(this.lat, this.lng, this.alt);\r\n\t}\r\n};\r\n\r\n\r\n\r\n// @factory L.latLng(latitude: Number, longitude: Number, altitude?: Number): LatLng\r\n// Creates an object representing a geographical point with the given latitude and longitude (and optionally altitude).\r\n\r\n// @alternative\r\n// @factory L.latLng(coords: Array): LatLng\r\n// Expects an array of the form `[Number, Number]` or `[Number, Number, Number]` instead.\r\n\r\n// @alternative\r\n// @factory L.latLng(coords: Object): LatLng\r\n// Expects an plain object of the form `{lat: Number, lng: Number}` or `{lat: Number, lng: Number, alt: Number}` instead.\r\n\r\nexport function toLatLng(a, b, c) {\r\n\tif (a instanceof LatLng) {\r\n\t\treturn a;\r\n\t}\r\n\tif (Util.isArray(a) && typeof a[0] !== 'object') {\r\n\t\tif (a.length === 3) {\r\n\t\t\treturn new LatLng(a[0], a[1], a[2]);\r\n\t\t}\r\n\t\tif (a.length === 2) {\r\n\t\t\treturn new LatLng(a[0], a[1]);\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\tif (a === undefined || a === null) {\r\n\t\treturn a;\r\n\t}\r\n\tif (typeof a === 'object' && 'lat' in a) {\r\n\t\treturn new LatLng(a.lat, 'lng' in a ? a.lng : a.lon, a.alt);\r\n\t}\r\n\tif (b === undefined) {\r\n\t\treturn null;\r\n\t}\r\n\treturn new LatLng(a, b, c);\r\n}\r\n", "\r\nimport {Bounds} from '../../geometry/Bounds';\r\nimport {LatLng} from '../LatLng';\r\nimport {LatLngBounds} from '../LatLngBounds';\r\nimport * as Util from '../../core/Util';\r\n\r\n/*\r\n * @namespace CRS\r\n * @crs L.CRS.Base\r\n * Object that defines coordinate reference systems for projecting\r\n * geographical points into pixel (screen) coordinates and back (and to\r\n * coordinates in other units for [WMS](https://en.wikipedia.org/wiki/Web_Map_Service) services). See\r\n * [spatial reference system](https://en.wikipedia.org/wiki/Spatial_reference_system).\r\n *\r\n * Leaflet defines the most usual CRSs by default. If you want to use a\r\n * CRS not defined by default, take a look at the\r\n * [Proj4Leaflet](https://github.com/kartena/Proj4Leaflet) plugin.\r\n *\r\n * Note that the CRS instances do not inherit from Leaflet's `Class` object,\r\n * and can't be instantiated. Also, new classes can't inherit from them,\r\n * and methods can't be added to them with the `include` function.\r\n */\r\n\r\nexport var CRS = {\r\n\t// @method latLngToPoint(latlng: LatLng, zoom: Number): Point\r\n\t// Projects geographical coordinates into pixel coordinates for a given zoom.\r\n\tlatLngToPoint: function (latlng, zoom) {\r\n\t\tvar projectedPoint = this.projection.project(latlng),\r\n\t\t scale = this.scale(zoom);\r\n\r\n\t\treturn this.transformation._transform(projectedPoint, scale);\r\n\t},\r\n\r\n\t// @method pointToLatLng(point: Point, zoom: Number): LatLng\r\n\t// The inverse of `latLngToPoint`. Projects pixel coordinates on a given\r\n\t// zoom into geographical coordinates.\r\n\tpointToLatLng: function (point, zoom) {\r\n\t\tvar scale = this.scale(zoom),\r\n\t\t untransformedPoint = this.transformation.untransform(point, scale);\r\n\r\n\t\treturn this.projection.unproject(untransformedPoint);\r\n\t},\r\n\r\n\t// @method project(latlng: LatLng): Point\r\n\t// Projects geographical coordinates into coordinates in units accepted for\r\n\t// this CRS (e.g. meters for EPSG:3857, for passing it to WMS services).\r\n\tproject: function (latlng) {\r\n\t\treturn this.projection.project(latlng);\r\n\t},\r\n\r\n\t// @method unproject(point: Point): LatLng\r\n\t// Given a projected coordinate returns the corresponding LatLng.\r\n\t// The inverse of `project`.\r\n\tunproject: function (point) {\r\n\t\treturn this.projection.unproject(point);\r\n\t},\r\n\r\n\t// @method scale(zoom: Number): Number\r\n\t// Returns the scale used when transforming projected coordinates into\r\n\t// pixel coordinates for a particular zoom. For example, it returns\r\n\t// `256 * 2^zoom` for Mercator-based CRS.\r\n\tscale: function (zoom) {\r\n\t\treturn 256 * Math.pow(2, zoom);\r\n\t},\r\n\r\n\t// @method zoom(scale: Number): Number\r\n\t// Inverse of `scale()`, returns the zoom level corresponding to a scale\r\n\t// factor of `scale`.\r\n\tzoom: function (scale) {\r\n\t\treturn Math.log(scale / 256) / Math.LN2;\r\n\t},\r\n\r\n\t// @method getProjectedBounds(zoom: Number): Bounds\r\n\t// Returns the projection's bounds scaled and transformed for the provided `zoom`.\r\n\tgetProjectedBounds: function (zoom) {\r\n\t\tif (this.infinite) { return null; }\r\n\r\n\t\tvar b = this.projection.bounds,\r\n\t\t s = this.scale(zoom),\r\n\t\t min = this.transformation.transform(b.min, s),\r\n\t\t max = this.transformation.transform(b.max, s);\r\n\r\n\t\treturn new Bounds(min, max);\r\n\t},\r\n\r\n\t// @method distance(latlng1: LatLng, latlng2: LatLng): Number\r\n\t// Returns the distance between two geographical coordinates.\r\n\r\n\t// @property code: String\r\n\t// Standard code name of the CRS passed into WMS services (e.g. `'EPSG:3857'`)\r\n\t//\r\n\t// @property wrapLng: Number[]\r\n\t// An array of two numbers defining whether the longitude (horizontal) coordinate\r\n\t// axis wraps around a given range and how. Defaults to `[-180, 180]` in most\r\n\t// geographical CRSs. If `undefined`, the longitude axis does not wrap around.\r\n\t//\r\n\t// @property wrapLat: Number[]\r\n\t// Like `wrapLng`, but for the latitude (vertical) axis.\r\n\r\n\t// wrapLng: [min, max],\r\n\t// wrapLat: [min, max],\r\n\r\n\t// @property infinite: Boolean\r\n\t// If true, the coordinate space will be unbounded (infinite in both axes)\r\n\tinfinite: false,\r\n\r\n\t// @method wrapLatLng(latlng: LatLng): LatLng\r\n\t// Returns a `LatLng` where lat and lng has been wrapped according to the\r\n\t// CRS's `wrapLat` and `wrapLng` properties, if they are outside the CRS's bounds.\r\n\twrapLatLng: function (latlng) {\r\n\t\tvar lng = this.wrapLng ? Util.wrapNum(latlng.lng, this.wrapLng, true) : latlng.lng,\r\n\t\t lat = this.wrapLat ? Util.wrapNum(latlng.lat, this.wrapLat, true) : latlng.lat,\r\n\t\t alt = latlng.alt;\r\n\r\n\t\treturn new LatLng(lat, lng, alt);\r\n\t},\r\n\r\n\t// @method wrapLatLngBounds(bounds: LatLngBounds): LatLngBounds\r\n\t// Returns a `LatLngBounds` with the same size as the given one, ensuring\r\n\t// that its center is within the CRS's bounds.\r\n\t// Only accepts actual `L.LatLngBounds` instances, not arrays.\r\n\twrapLatLngBounds: function (bounds) {\r\n\t\tvar center = bounds.getCenter(),\r\n\t\t newCenter = this.wrapLatLng(center),\r\n\t\t latShift = center.lat - newCenter.lat,\r\n\t\t lngShift = center.lng - newCenter.lng;\r\n\r\n\t\tif (latShift === 0 && lngShift === 0) {\r\n\t\t\treturn bounds;\r\n\t\t}\r\n\r\n\t\tvar sw = bounds.getSouthWest(),\r\n\t\t ne = bounds.getNorthEast(),\r\n\t\t newSw = new LatLng(sw.lat - latShift, sw.lng - lngShift),\r\n\t\t newNe = new LatLng(ne.lat - latShift, ne.lng - lngShift);\r\n\r\n\t\treturn new LatLngBounds(newSw, newNe);\r\n\t}\r\n};\r\n", "import {CRS} from './CRS';\nimport * as Util from '../../core/Util';\n\n/*\n * @namespace CRS\n * @crs L.CRS.Earth\n *\n * Serves as the base for CRS that are global such that they cover the earth.\n * Can only be used as the base for other CRS and cannot be used directly,\n * since it does not have a `code`, `projection` or `transformation`. `distance()` returns\n * meters.\n */\n\nexport var Earth = Util.extend({}, CRS, {\n\twrapLng: [-180, 180],\n\n\t// Mean Earth Radius, as recommended for use by\n\t// the International Union of Geodesy and Geophysics,\n\t// see https://rosettacode.org/wiki/Haversine_formula\n\tR: 6371000,\n\n\t// distance between two geographical points using spherical law of cosines approximation\n\tdistance: function (latlng1, latlng2) {\n\t\tvar rad = Math.PI / 180,\n\t\t lat1 = latlng1.lat * rad,\n\t\t lat2 = latlng2.lat * rad,\n\t\t sinDLat = Math.sin((latlng2.lat - latlng1.lat) * rad / 2),\n\t\t sinDLon = Math.sin((latlng2.lng - latlng1.lng) * rad / 2),\n\t\t a = sinDLat * sinDLat + Math.cos(lat1) * Math.cos(lat2) * sinDLon * sinDLon,\n\t\t c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n\t\treturn this.R * c;\n\t}\n});\n", "import {LatLng} from '../LatLng';\r\nimport {Bounds} from '../../geometry/Bounds';\r\nimport {Point} from '../../geometry/Point';\r\n\r\n/*\r\n * @namespace Projection\r\n * @projection L.Projection.SphericalMercator\r\n *\r\n * Spherical Mercator projection — the most common projection for online maps,\r\n * used by almost all free and commercial tile providers. Assumes that Earth is\r\n * a sphere. Used by the `EPSG:3857` CRS.\r\n */\r\n\r\nvar earthRadius = 6378137;\r\n\r\nexport var SphericalMercator = {\r\n\r\n\tR: earthRadius,\r\n\tMAX_LATITUDE: 85.0511287798,\r\n\r\n\tproject: function (latlng) {\r\n\t\tvar d = Math.PI / 180,\r\n\t\t max = this.MAX_LATITUDE,\r\n\t\t lat = Math.max(Math.min(max, latlng.lat), -max),\r\n\t\t sin = Math.sin(lat * d);\r\n\r\n\t\treturn new Point(\r\n\t\t\tthis.R * latlng.lng * d,\r\n\t\t\tthis.R * Math.log((1 + sin) / (1 - sin)) / 2);\r\n\t},\r\n\r\n\tunproject: function (point) {\r\n\t\tvar d = 180 / Math.PI;\r\n\r\n\t\treturn new LatLng(\r\n\t\t\t(2 * Math.atan(Math.exp(point.y / this.R)) - (Math.PI / 2)) * d,\r\n\t\t\tpoint.x * d / this.R);\r\n\t},\r\n\r\n\tbounds: (function () {\r\n\t\tvar d = earthRadius * Math.PI;\r\n\t\treturn new Bounds([-d, -d], [d, d]);\r\n\t})()\r\n};\r\n", "import {Point} from './Point';\r\nimport * as Util from '../core/Util';\r\n\r\n/*\r\n * @class Transformation\r\n * @aka L.Transformation\r\n *\r\n * Represents an affine transformation: a set of coefficients `a`, `b`, `c`, `d`\r\n * for transforming a point of a form `(x, y)` into `(a*x + b, c*y + d)` and doing\r\n * the reverse. Used by Leaflet in its projections code.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var transformation = L.transformation(2, 5, -1, 10),\r\n * \tp = L.point(1, 2),\r\n * \tp2 = transformation.transform(p), // L.point(7, 8)\r\n * \tp3 = transformation.untransform(p2); // L.point(1, 2)\r\n * ```\r\n */\r\n\r\n\r\n// factory new L.Transformation(a: Number, b: Number, c: Number, d: Number)\r\n// Creates a `Transformation` object with the given coefficients.\r\nexport function Transformation(a, b, c, d) {\r\n\tif (Util.isArray(a)) {\r\n\t\t// use array properties\r\n\t\tthis._a = a[0];\r\n\t\tthis._b = a[1];\r\n\t\tthis._c = a[2];\r\n\t\tthis._d = a[3];\r\n\t\treturn;\r\n\t}\r\n\tthis._a = a;\r\n\tthis._b = b;\r\n\tthis._c = c;\r\n\tthis._d = d;\r\n}\r\n\r\nTransformation.prototype = {\r\n\t// @method transform(point: Point, scale?: Number): Point\r\n\t// Returns a transformed point, optionally multiplied by the given scale.\r\n\t// Only accepts actual `L.Point` instances, not arrays.\r\n\ttransform: function (point, scale) { // (Point, Number) -> Point\r\n\t\treturn this._transform(point.clone(), scale);\r\n\t},\r\n\r\n\t// destructive transform (faster)\r\n\t_transform: function (point, scale) {\r\n\t\tscale = scale || 1;\r\n\t\tpoint.x = scale * (this._a * point.x + this._b);\r\n\t\tpoint.y = scale * (this._c * point.y + this._d);\r\n\t\treturn point;\r\n\t},\r\n\r\n\t// @method untransform(point: Point, scale?: Number): Point\r\n\t// Returns the reverse transformation of the given point, optionally divided\r\n\t// by the given scale. Only accepts actual `L.Point` instances, not arrays.\r\n\tuntransform: function (point, scale) {\r\n\t\tscale = scale || 1;\r\n\t\treturn new Point(\r\n\t\t (point.x / scale - this._b) / this._a,\r\n\t\t (point.y / scale - this._d) / this._c);\r\n\t}\r\n};\r\n\r\n// factory L.transformation(a: Number, b: Number, c: Number, d: Number)\r\n\r\n// @factory L.transformation(a: Number, b: Number, c: Number, d: Number)\r\n// Instantiates a Transformation object with the given coefficients.\r\n\r\n// @alternative\r\n// @factory L.transformation(coefficients: Array): Transformation\r\n// Expects an coefficients array of the form\r\n// `[a: Number, b: Number, c: Number, d: Number]`.\r\n\r\nexport function toTransformation(a, b, c, d) {\r\n\treturn new Transformation(a, b, c, d);\r\n}\r\n", "import {Earth} from './CRS.Earth';\r\nimport {SphericalMercator} from '../projection/Projection.SphericalMercator';\r\nimport {toTransformation} from '../../geometry/Transformation';\r\nimport * as Util from '../../core/Util';\r\n\r\n/*\r\n * @namespace CRS\r\n * @crs L.CRS.EPSG3857\r\n *\r\n * The most common CRS for online maps, used by almost all free and commercial\r\n * tile providers. Uses Spherical Mercator projection. Set in by default in\r\n * Map's `crs` option.\r\n */\r\n\r\nexport var EPSG3857 = Util.extend({}, Earth, {\r\n\tcode: 'EPSG:3857',\r\n\tprojection: SphericalMercator,\r\n\r\n\ttransformation: (function () {\r\n\t\tvar scale = 0.5 / (Math.PI * SphericalMercator.R);\r\n\t\treturn toTransformation(scale, 0.5, -scale, 0.5);\r\n\t}())\r\n});\r\n\r\nexport var EPSG900913 = Util.extend({}, EPSG3857, {\r\n\tcode: 'EPSG:900913'\r\n});\r\n", "import Browser from '../../core/Browser';\n\n// @namespace SVG; @section\n// There are several static functions which can be called without instantiating L.SVG:\n\n// @function create(name: String): SVGElement\n// Returns a instance of [SVGElement](https://developer.mozilla.org/docs/Web/API/SVGElement),\n// corresponding to the class name passed. For example, using 'line' will return\n// an instance of [SVGLineElement](https://developer.mozilla.org/docs/Web/API/SVGLineElement).\nexport function svgCreate(name) {\n\treturn document.createElementNS('http://www.w3.org/2000/svg', name);\n}\n\n// @function pointsToPath(rings: Point[], closed: Boolean): String\n// Generates a SVG path string for multiple rings, with each ring turning\n// into \"M..L..L..\" instructions\nexport function pointsToPath(rings, closed) {\n\tvar str = '',\n\ti, j, len, len2, points, p;\n\n\tfor (i = 0, len = rings.length; i < len; i++) {\n\t\tpoints = rings[i];\n\n\t\tfor (j = 0, len2 = points.length; j < len2; j++) {\n\t\t\tp = points[j];\n\t\t\tstr += (j ? 'L' : 'M') + p.x + ' ' + p.y;\n\t\t}\n\n\t\t// closes the ring for polygons; \"x\" is VML syntax\n\t\tstr += closed ? (Browser.svg ? 'z' : 'x') : '';\n\t}\n\n\t// SVG complains about empty path strings\n\treturn str || 'M0 0';\n}\n\n\n\n\n", "import * as Util from './Util';\r\nimport {svgCreate} from '../layer/vector/SVG.Util';\r\n\r\n/*\r\n * @namespace Browser\r\n * @aka L.Browser\r\n *\r\n * A namespace with static properties for browser/feature detection used by Leaflet internally.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * if (L.Browser.ielt9) {\r\n * alert('Upgrade your browser, dude!');\r\n * }\r\n * ```\r\n */\r\n\r\nvar style = document.documentElement.style;\r\n\r\n// @property ie: Boolean; `true` for all Internet Explorer versions (not Edge).\r\nvar ie = 'ActiveXObject' in window;\r\n\r\n// @property ielt9: Boolean; `true` for Internet Explorer versions less than 9.\r\nvar ielt9 = ie && !document.addEventListener;\r\n\r\n// @property edge: Boolean; `true` for the Edge web browser.\r\nvar edge = 'msLaunchUri' in navigator && !('documentMode' in document);\r\n\r\n// @property webkit: Boolean;\r\n// `true` for webkit-based browsers like Chrome and Safari (including mobile versions).\r\nvar webkit = userAgentContains('webkit');\r\n\r\n// @property android: Boolean\r\n// **Deprecated.** `true` for any browser running on an Android platform.\r\nvar android = userAgentContains('android');\r\n\r\n// @property android23: Boolean; **Deprecated.** `true` for browsers running on Android 2 or Android 3.\r\nvar android23 = userAgentContains('android 2') || userAgentContains('android 3');\r\n\r\n/* See https://stackoverflow.com/a/17961266 for details on detecting stock Android */\r\nvar webkitVer = parseInt(/WebKit\\/([0-9]+)|$/.exec(navigator.userAgent)[1], 10); // also matches AppleWebKit\r\n// @property androidStock: Boolean; **Deprecated.** `true` for the Android stock browser (i.e. not Chrome)\r\nvar androidStock = android && userAgentContains('Google') && webkitVer < 537 && !('AudioNode' in window);\r\n\r\n// @property opera: Boolean; `true` for the Opera browser\r\nvar opera = !!window.opera;\r\n\r\n// @property chrome: Boolean; `true` for the Chrome browser.\r\nvar chrome = !edge && userAgentContains('chrome');\r\n\r\n// @property gecko: Boolean; `true` for gecko-based browsers like Firefox.\r\nvar gecko = userAgentContains('gecko') && !webkit && !opera && !ie;\r\n\r\n// @property safari: Boolean; `true` for the Safari browser.\r\nvar safari = !chrome && userAgentContains('safari');\r\n\r\nvar phantom = userAgentContains('phantom');\r\n\r\n// @property opera12: Boolean\r\n// `true` for the Opera browser supporting CSS transforms (version 12 or later).\r\nvar opera12 = 'OTransition' in style;\r\n\r\n// @property win: Boolean; `true` when the browser is running in a Windows platform\r\nvar win = navigator.platform.indexOf('Win') === 0;\r\n\r\n// @property ie3d: Boolean; `true` for all Internet Explorer versions supporting CSS transforms.\r\nvar ie3d = ie && ('transition' in style);\r\n\r\n// @property webkit3d: Boolean; `true` for webkit-based browsers supporting CSS transforms.\r\nvar webkit3d = ('WebKitCSSMatrix' in window) && ('m11' in new window.WebKitCSSMatrix()) && !android23;\r\n\r\n// @property gecko3d: Boolean; `true` for gecko-based browsers supporting CSS transforms.\r\nvar gecko3d = 'MozPerspective' in style;\r\n\r\n// @property any3d: Boolean\r\n// `true` for all browsers supporting CSS transforms.\r\nvar any3d = !window.L_DISABLE_3D && (ie3d || webkit3d || gecko3d) && !opera12 && !phantom;\r\n\r\n// @property mobile: Boolean; `true` for all browsers running in a mobile device.\r\nvar mobile = typeof orientation !== 'undefined' || userAgentContains('mobile');\r\n\r\n// @property mobileWebkit: Boolean; `true` for all webkit-based browsers in a mobile device.\r\nvar mobileWebkit = mobile && webkit;\r\n\r\n// @property mobileWebkit3d: Boolean\r\n// `true` for all webkit-based browsers in a mobile device supporting CSS transforms.\r\nvar mobileWebkit3d = mobile && webkit3d;\r\n\r\n// @property msPointer: Boolean\r\n// `true` for browsers implementing the Microsoft touch events model (notably IE10).\r\nvar msPointer = !window.PointerEvent && window.MSPointerEvent;\r\n\r\n// @property pointer: Boolean\r\n// `true` for all browsers supporting [pointer events](https://msdn.microsoft.com/en-us/library/dn433244%28v=vs.85%29.aspx).\r\nvar pointer = !!(window.PointerEvent || msPointer);\r\n\r\n// @property touchNative: Boolean\r\n// `true` for all browsers supporting [touch events](https://developer.mozilla.org/docs/Web/API/Touch_events).\r\n// **This does not necessarily mean** that the browser is running in a computer with\r\n// a touchscreen, it only means that the browser is capable of understanding\r\n// touch events.\r\nvar touchNative = 'ontouchstart' in window || !!window.TouchEvent;\r\n\r\n// @property touch: Boolean\r\n// `true` for all browsers supporting either [touch](#browser-touch) or [pointer](#browser-pointer) events.\r\n// Note: pointer events will be preferred (if available), and processed for all `touch*` listeners.\r\nvar touch = !window.L_NO_TOUCH && (touchNative || pointer);\r\n\r\n// @property mobileOpera: Boolean; `true` for the Opera browser in a mobile device.\r\nvar mobileOpera = mobile && opera;\r\n\r\n// @property mobileGecko: Boolean\r\n// `true` for gecko-based browsers running in a mobile device.\r\nvar mobileGecko = mobile && gecko;\r\n\r\n// @property retina: Boolean\r\n// `true` for browsers on a high-resolution \"retina\" screen or on any screen when browser's display zoom is more than 100%.\r\nvar retina = (window.devicePixelRatio || (window.screen.deviceXDPI / window.screen.logicalXDPI)) > 1;\r\n\r\n// @property passiveEvents: Boolean\r\n// `true` for browsers that support passive events.\r\nvar passiveEvents = (function () {\r\n\tvar supportsPassiveOption = false;\r\n\ttry {\r\n\t\tvar opts = Object.defineProperty({}, 'passive', {\r\n\t\t\tget: function () { // eslint-disable-line getter-return\r\n\t\t\t\tsupportsPassiveOption = true;\r\n\t\t\t}\r\n\t\t});\r\n\t\twindow.addEventListener('testPassiveEventSupport', Util.falseFn, opts);\r\n\t\twindow.removeEventListener('testPassiveEventSupport', Util.falseFn, opts);\r\n\t} catch (e) {\r\n\t\t// Errors can safely be ignored since this is only a browser support test.\r\n\t}\r\n\treturn supportsPassiveOption;\r\n}());\r\n\r\n// @property canvas: Boolean\r\n// `true` when the browser supports [`<canvas>`](https://developer.mozilla.org/docs/Web/API/Canvas_API).\r\nvar canvas = (function () {\r\n\treturn !!document.createElement('canvas').getContext;\r\n}());\r\n\r\n// @property svg: Boolean\r\n// `true` when the browser supports [SVG](https://developer.mozilla.org/docs/Web/SVG).\r\nvar svg = !!(document.createElementNS && svgCreate('svg').createSVGRect);\r\n\r\nvar inlineSvg = !!svg && (function () {\r\n\tvar div = document.createElement('div');\r\n\tdiv.innerHTML = '<svg/>';\r\n\treturn (div.firstChild && div.firstChild.namespaceURI) === 'http://www.w3.org/2000/svg';\r\n})();\r\n\r\n// @property vml: Boolean\r\n// `true` if the browser supports [VML](https://en.wikipedia.org/wiki/Vector_Markup_Language).\r\nvar vml = !svg && (function () {\r\n\ttry {\r\n\t\tvar div = document.createElement('div');\r\n\t\tdiv.innerHTML = '<v:shape adj=\"1\"/>';\r\n\r\n\t\tvar shape = div.firstChild;\r\n\t\tshape.style.behavior = 'url(#default#VML)';\r\n\r\n\t\treturn shape && (typeof shape.adj === 'object');\r\n\r\n\t} catch (e) {\r\n\t\treturn false;\r\n\t}\r\n}());\r\n\r\n\r\n// @property mac: Boolean; `true` when the browser is running in a Mac platform\r\nvar mac = navigator.platform.indexOf('Mac') === 0;\r\n\r\n// @property mac: Boolean; `true` when the browser is running in a Linux platform\r\nvar linux = navigator.platform.indexOf('Linux') === 0;\r\n\r\nfunction userAgentContains(str) {\r\n\treturn navigator.userAgent.toLowerCase().indexOf(str) >= 0;\r\n}\r\n\r\n\r\nexport default {\r\n\tie: ie,\r\n\tielt9: ielt9,\r\n\tedge: edge,\r\n\twebkit: webkit,\r\n\tandroid: android,\r\n\tandroid23: android23,\r\n\tandroidStock: androidStock,\r\n\topera: opera,\r\n\tchrome: chrome,\r\n\tgecko: gecko,\r\n\tsafari: safari,\r\n\tphantom: phantom,\r\n\topera12: opera12,\r\n\twin: win,\r\n\tie3d: ie3d,\r\n\twebkit3d: webkit3d,\r\n\tgecko3d: gecko3d,\r\n\tany3d: any3d,\r\n\tmobile: mobile,\r\n\tmobileWebkit: mobileWebkit,\r\n\tmobileWebkit3d: mobileWebkit3d,\r\n\tmsPointer: msPointer,\r\n\tpointer: pointer,\r\n\ttouch: touch,\r\n\ttouchNative: touchNative,\r\n\tmobileOpera: mobileOpera,\r\n\tmobileGecko: mobileGecko,\r\n\tretina: retina,\r\n\tpassiveEvents: passiveEvents,\r\n\tcanvas: canvas,\r\n\tsvg: svg,\r\n\tvml: vml,\r\n\tinlineSvg: inlineSvg,\r\n\tmac: mac,\r\n\tlinux: linux\r\n};\r\n", "import * as DomEvent from './DomEvent';\nimport Browser from '../core/Browser';\nimport {falseFn} from '../core/Util';\n\n/*\n * Extends L.DomEvent to provide touch support for Internet Explorer and Windows-based devices.\n */\n\nvar POINTER_DOWN = Browser.msPointer ? 'MSPointerDown' : 'pointerdown';\nvar POINTER_MOVE = Browser.msPointer ? 'MSPointerMove' : 'pointermove';\nvar POINTER_UP = Browser.msPointer ? 'MSPointerUp' : 'pointerup';\nvar POINTER_CANCEL = Browser.msPointer ? 'MSPointerCancel' : 'pointercancel';\nvar pEvent = {\n\ttouchstart : POINTER_DOWN,\n\ttouchmove : POINTER_MOVE,\n\ttouchend : POINTER_UP,\n\ttouchcancel : POINTER_CANCEL\n};\nvar handle = {\n\ttouchstart : _onPointerStart,\n\ttouchmove : _handlePointer,\n\ttouchend : _handlePointer,\n\ttouchcancel : _handlePointer\n};\nvar _pointers = {};\nvar _pointerDocListener = false;\n\n// Provides a touch events wrapper for (ms)pointer events.\n// ref https://www.w3.org/TR/pointerevents/ https://www.w3.org/Bugs/Public/show_bug.cgi?id=22890\n\nexport function addPointerListener(obj, type, handler) {\n\tif (type === 'touchstart') {\n\t\t_addPointerDocListener();\n\t}\n\tif (!handle[type]) {\n\t\tconsole.warn('wrong event specified:', type);\n\t\treturn falseFn;\n\t}\n\thandler = handle[type].bind(this, handler);\n\tobj.addEventListener(pEvent[type], handler, false);\n\treturn handler;\n}\n\nexport function removePointerListener(obj, type, handler) {\n\tif (!pEvent[type]) {\n\t\tconsole.warn('wrong event specified:', type);\n\t\treturn;\n\t}\n\tobj.removeEventListener(pEvent[type], handler, false);\n}\n\nfunction _globalPointerDown(e) {\n\t_pointers[e.pointerId] = e;\n}\n\nfunction _globalPointerMove(e) {\n\tif (_pointers[e.pointerId]) {\n\t\t_pointers[e.pointerId] = e;\n\t}\n}\n\nfunction _globalPointerUp(e) {\n\tdelete _pointers[e.pointerId];\n}\n\nfunction _addPointerDocListener() {\n\t// need to keep track of what pointers and how many are active to provide e.touches emulation\n\tif (!_pointerDocListener) {\n\t\t// we listen document as any drags that end by moving the touch off the screen get fired there\n\t\tdocument.addEventListener(POINTER_DOWN, _globalPointerDown, true);\n\t\tdocument.addEventListener(POINTER_MOVE, _globalPointerMove, true);\n\t\tdocument.addEventListener(POINTER_UP, _globalPointerUp, true);\n\t\tdocument.addEventListener(POINTER_CANCEL, _globalPointerUp, true);\n\n\t\t_pointerDocListener = true;\n\t}\n}\n\nfunction _handlePointer(handler, e) {\n\tif (e.pointerType === (e.MSPOINTER_TYPE_MOUSE || 'mouse')) { return; }\n\n\te.touches = [];\n\tfor (var i in _pointers) {\n\t\te.touches.push(_pointers[i]);\n\t}\n\te.changedTouches = [e];\n\n\thandler(e);\n}\n\nfunction _onPointerStart(handler, e) {\n\t// IE10 specific: MsTouch needs preventDefault. See #2000\n\tif (e.MSPOINTER_TYPE_TOUCH && e.pointerType === e.MSPOINTER_TYPE_TOUCH) {\n\t\tDomEvent.preventDefault(e);\n\t}\n\t_handlePointer(handler, e);\n}\n", "import * as DomEvent from './DomEvent';\r\n\r\n/*\r\n * Extends the event handling code with double tap support for mobile browsers.\r\n *\r\n * Note: currently most browsers fire native dblclick, with only a few exceptions\r\n * (see https://github.com/Leaflet/Leaflet/issues/7012#issuecomment-595087386)\r\n */\r\n\r\nfunction makeDblclick(event) {\r\n\t// in modern browsers `type` cannot be just overridden:\r\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Getter_only\r\n\tvar newEvent = {},\r\n\t prop, i;\r\n\tfor (i in event) {\r\n\t\tprop = event[i];\r\n\t\tnewEvent[i] = prop && prop.bind ? prop.bind(event) : prop;\r\n\t}\r\n\tevent = newEvent;\r\n\tnewEvent.type = 'dblclick';\r\n\tnewEvent.detail = 2;\r\n\tnewEvent.isTrusted = false;\r\n\tnewEvent._simulated = true; // for debug purposes\r\n\treturn newEvent;\r\n}\r\n\r\nvar delay = 200;\r\nexport function addDoubleTapListener(obj, handler) {\r\n\t// Most browsers handle double tap natively\r\n\tobj.addEventListener('dblclick', handler);\r\n\r\n\t// On some platforms the browser doesn't fire native dblclicks for touch events.\r\n\t// It seems that in all such cases `detail` property of `click` event is always `1`.\r\n\t// So here we rely on that fact to avoid excessive 'dblclick' simulation when not needed.\r\n\tvar last = 0,\r\n\t detail;\r\n\tfunction simDblclick(e) {\r\n\t\tif (e.detail !== 1) {\r\n\t\t\tdetail = e.detail; // keep in sync to avoid false dblclick in some cases\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (e.pointerType === 'mouse' ||\r\n\t\t\t(e.sourceCapabilities && !e.sourceCapabilities.firesTouchEvents)) {\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// When clicking on an <input>, the browser generates a click on its\r\n\t\t// <label> (and vice versa) triggering two clicks in quick succession.\r\n\t\t// This ignores clicks on elements which are a label with a 'for'\r\n\t\t// attribute (or children of such a label), but not children of\r\n\t\t// a <input>.\r\n\t\tvar path = DomEvent.getPropagationPath(e);\r\n\t\tif (path.some(function (el) {\r\n\t\t\treturn el instanceof HTMLLabelElement && el.attributes.for;\r\n\t\t}) &&\r\n\t\t\t!path.some(function (el) {\r\n\t\t\t\treturn (\r\n\t\t\t\t\tel instanceof HTMLInputElement ||\r\n\t\t\t\t\tel instanceof HTMLSelectElement\r\n\t\t\t\t);\r\n\t\t\t})\r\n\t\t) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar now = Date.now();\r\n\t\tif (now - last <= delay) {\r\n\t\t\tdetail++;\r\n\t\t\tif (detail === 2) {\r\n\t\t\t\thandler(makeDblclick(e));\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tdetail = 1;\r\n\t\t}\r\n\t\tlast = now;\r\n\t}\r\n\r\n\tobj.addEventListener('click', simDblclick);\r\n\r\n\treturn {\r\n\t\tdblclick: handler,\r\n\t\tsimDblclick: simDblclick\r\n\t};\r\n}\r\n\r\nexport function removeDoubleTapListener(obj, handlers) {\r\n\tobj.removeEventListener('dblclick', handlers.dblclick);\r\n\tobj.removeEventListener('click', handlers.simDblclick);\r\n}\r\n", "import * as DomEvent from './DomEvent';\r\nimport * as Util from '../core/Util';\r\nimport {Point} from '../geometry/Point';\r\nimport Browser from '../core/Browser';\r\n\r\n/*\r\n * @namespace DomUtil\r\n *\r\n * Utility functions to work with the [DOM](https://developer.mozilla.org/docs/Web/API/Document_Object_Model)\r\n * tree, used by Leaflet internally.\r\n *\r\n * Most functions expecting or returning a `HTMLElement` also work for\r\n * SVG elements. The only difference is that classes refer to CSS classes\r\n * in HTML and SVG classes in SVG.\r\n */\r\n\r\n\r\n// @property TRANSFORM: String\r\n// Vendor-prefixed transform style name (e.g. `'webkitTransform'` for WebKit).\r\nexport var TRANSFORM = testProp(\r\n\t['transform', 'webkitTransform', 'OTransform', 'MozTransform', 'msTransform']);\r\n\r\n// webkitTransition comes first because some browser versions that drop vendor prefix don't do\r\n// the same for the transitionend event, in particular the Android 4.1 stock browser\r\n\r\n// @property TRANSITION: String\r\n// Vendor-prefixed transition style name.\r\nexport var TRANSITION = testProp(\r\n\t['webkitTransition', 'transition', 'OTransition', 'MozTransition', 'msTransition']);\r\n\r\n// @property TRANSITION_END: String\r\n// Vendor-prefixed transitionend event name.\r\nexport var TRANSITION_END =\r\n\tTRANSITION === 'webkitTransition' || TRANSITION === 'OTransition' ? TRANSITION + 'End' : 'transitionend';\r\n\r\n\r\n// @function get(id: String|HTMLElement): HTMLElement\r\n// Returns an element given its DOM id, or returns the element itself\r\n// if it was passed directly.\r\nexport function get(id) {\r\n\treturn typeof id === 'string' ? document.getElementById(id) : id;\r\n}\r\n\r\n// @function getStyle(el: HTMLElement, styleAttrib: String): String\r\n// Returns the value for a certain style attribute on an element,\r\n// including computed values or values set through CSS.\r\nexport function getStyle(el, style) {\r\n\tvar value = el.style[style] || (el.currentStyle && el.currentStyle[style]);\r\n\r\n\tif ((!value || value === 'auto') && document.defaultView) {\r\n\t\tvar css = document.defaultView.getComputedStyle(el, null);\r\n\t\tvalue = css ? css[style] : null;\r\n\t}\r\n\treturn value === 'auto' ? null : value;\r\n}\r\n\r\n// @function create(tagName: String, className?: String, container?: HTMLElement): HTMLElement\r\n// Creates an HTML element with `tagName`, sets its class to `className`, and optionally appends it to `container` element.\r\nexport function create(tagName, className, container) {\r\n\tvar el = document.createElement(tagName);\r\n\tel.className = className || '';\r\n\r\n\tif (container) {\r\n\t\tcontainer.appendChild(el);\r\n\t}\r\n\treturn el;\r\n}\r\n\r\n// @function remove(el: HTMLElement)\r\n// Removes `el` from its parent element\r\nexport function remove(el) {\r\n\tvar parent = el.parentNode;\r\n\tif (parent) {\r\n\t\tparent.removeChild(el);\r\n\t}\r\n}\r\n\r\n// @function empty(el: HTMLElement)\r\n// Removes all of `el`'s children elements from `el`\r\nexport function empty(el) {\r\n\twhile (el.firstChild) {\r\n\t\tel.removeChild(el.firstChild);\r\n\t}\r\n}\r\n\r\n// @function toFront(el: HTMLElement)\r\n// Makes `el` the last child of its parent, so it renders in front of the other children.\r\nexport function toFront(el) {\r\n\tvar parent = el.parentNode;\r\n\tif (parent && parent.lastChild !== el) {\r\n\t\tparent.appendChild(el);\r\n\t}\r\n}\r\n\r\n// @function toBack(el: HTMLElement)\r\n// Makes `el` the first child of its parent, so it renders behind the other children.\r\nexport function toBack(el) {\r\n\tvar parent = el.parentNode;\r\n\tif (parent && parent.firstChild !== el) {\r\n\t\tparent.insertBefore(el, parent.firstChild);\r\n\t}\r\n}\r\n\r\n// @function hasClass(el: HTMLElement, name: String): Boolean\r\n// Returns `true` if the element's class attribute contains `name`.\r\nexport function hasClass(el, name) {\r\n\tif (el.classList !== undefined) {\r\n\t\treturn el.classList.contains(name);\r\n\t}\r\n\tvar className = getClass(el);\r\n\treturn className.length > 0 && new RegExp('(^|\\\\s)' + name + '(\\\\s|$)').test(className);\r\n}\r\n\r\n// @function addClass(el: HTMLElement, name: String)\r\n// Adds `name` to the element's class attribute.\r\nexport function addClass(el, name) {\r\n\tif (el.classList !== undefined) {\r\n\t\tvar classes = Util.splitWords(name);\r\n\t\tfor (var i = 0, len = classes.length; i < len; i++) {\r\n\t\t\tel.classList.add(classes[i]);\r\n\t\t}\r\n\t} else if (!hasClass(el, name)) {\r\n\t\tvar className = getClass(el);\r\n\t\tsetClass(el, (className ? className + ' ' : '') + name);\r\n\t}\r\n}\r\n\r\n// @function removeClass(el: HTMLElement, name: String)\r\n// Removes `name` from the element's class attribute.\r\nexport function removeClass(el, name) {\r\n\tif (el.classList !== undefined) {\r\n\t\tel.classList.remove(name);\r\n\t} else {\r\n\t\tsetClass(el, Util.trim((' ' + getClass(el) + ' ').replace(' ' + name + ' ', ' ')));\r\n\t}\r\n}\r\n\r\n// @function setClass(el: HTMLElement, name: String)\r\n// Sets the element's class.\r\nexport function setClass(el, name) {\r\n\tif (el.className.baseVal === undefined) {\r\n\t\tel.className = name;\r\n\t} else {\r\n\t\t// in case of SVG element\r\n\t\tel.className.baseVal = name;\r\n\t}\r\n}\r\n\r\n// @function getClass(el: HTMLElement): String\r\n// Returns the element's class.\r\nexport function getClass(el) {\r\n\t// Check if the element is an SVGElementInstance and use the correspondingElement instead\r\n\t// (Required for linked SVG elements in IE11.)\r\n\tif (el.correspondingElement) {\r\n\t\tel = el.correspondingElement;\r\n\t}\r\n\treturn el.className.baseVal === undefined ? el.className : el.className.baseVal;\r\n}\r\n\r\n// @function setOpacity(el: HTMLElement, opacity: Number)\r\n// Set the opacity of an element (including old IE support).\r\n// `opacity` must be a number from `0` to `1`.\r\nexport function setOpacity(el, value) {\r\n\tif ('opacity' in el.style) {\r\n\t\tel.style.opacity = value;\r\n\t} else if ('filter' in el.style) {\r\n\t\t_setOpacityIE(el, value);\r\n\t}\r\n}\r\n\r\nfunction _setOpacityIE(el, value) {\r\n\tvar filter = false,\r\n\t filterName = 'DXImageTransform.Microsoft.Alpha';\r\n\r\n\t// filters collection throws an error if we try to retrieve a filter that doesn't exist\r\n\ttry {\r\n\t\tfilter = el.filters.item(filterName);\r\n\t} catch (e) {\r\n\t\t// don't set opacity to 1 if we haven't already set an opacity,\r\n\t\t// it isn't needed and breaks transparent pngs.\r\n\t\tif (value === 1) { return; }\r\n\t}\r\n\r\n\tvalue = Math.round(value * 100);\r\n\r\n\tif (filter) {\r\n\t\tfilter.Enabled = (value !== 100);\r\n\t\tfilter.Opacity = value;\r\n\t} else {\r\n\t\tel.style.filter += ' progid:' + filterName + '(opacity=' + value + ')';\r\n\t}\r\n}\r\n\r\n// @function testProp(props: String[]): String|false\r\n// Goes through the array of style names and returns the first name\r\n// that is a valid style name for an element. If no such name is found,\r\n// it returns false. Useful for vendor-prefixed styles like `transform`.\r\nexport function testProp(props) {\r\n\tvar style = document.documentElement.style;\r\n\r\n\tfor (var i = 0; i < props.length; i++) {\r\n\t\tif (props[i] in style) {\r\n\t\t\treturn props[i];\r\n\t\t}\r\n\t}\r\n\treturn false;\r\n}\r\n\r\n// @function setTransform(el: HTMLElement, offset: Point, scale?: Number)\r\n// Resets the 3D CSS transform of `el` so it is translated by `offset` pixels\r\n// and optionally scaled by `scale`. Does not have an effect if the\r\n// browser doesn't support 3D CSS transforms.\r\nexport function setTransform(el, offset, scale) {\r\n\tvar pos = offset || new Point(0, 0);\r\n\r\n\tel.style[TRANSFORM] =\r\n\t\t(Browser.ie3d ?\r\n\t\t\t'translate(' + pos.x + 'px,' + pos.y + 'px)' :\r\n\t\t\t'translate3d(' + pos.x + 'px,' + pos.y + 'px,0)') +\r\n\t\t(scale ? ' scale(' + scale + ')' : '');\r\n}\r\n\r\n// @function setPosition(el: HTMLElement, position: Point)\r\n// Sets the position of `el` to coordinates specified by `position`,\r\n// using CSS translate or top/left positioning depending on the browser\r\n// (used by Leaflet internally to position its layers).\r\nexport function setPosition(el, point) {\r\n\r\n\t/*eslint-disable */\r\n\tel._leaflet_pos = point;\r\n\t/* eslint-enable */\r\n\r\n\tif (Browser.any3d) {\r\n\t\tsetTransform(el, point);\r\n\t} else {\r\n\t\tel.style.left = point.x + 'px';\r\n\t\tel.style.top = point.y + 'px';\r\n\t}\r\n}\r\n\r\n// @function getPosition(el: HTMLElement): Point\r\n// Returns the coordinates of an element previously positioned with setPosition.\r\nexport function getPosition(el) {\r\n\t// this method is only used for elements previously positioned using setPosition,\r\n\t// so it's safe to cache the position for performance\r\n\r\n\treturn el._leaflet_pos || new Point(0, 0);\r\n}\r\n\r\n// @function disableTextSelection()\r\n// Prevents the user from generating `selectstart` DOM events, usually generated\r\n// when the user drags the mouse through a page with text. Used internally\r\n// by Leaflet to override the behaviour of any click-and-drag interaction on\r\n// the map. Affects drag interactions on the whole document.\r\n\r\n// @function enableTextSelection()\r\n// Cancels the effects of a previous [`L.DomUtil.disableTextSelection`](#domutil-disabletextselection).\r\nexport var disableTextSelection;\r\nexport var enableTextSelection;\r\nvar _userSelect;\r\nif ('onselectstart' in document) {\r\n\tdisableTextSelection = function () {\r\n\t\tDomEvent.on(window, 'selectstart', DomEvent.preventDefault);\r\n\t};\r\n\tenableTextSelection = function () {\r\n\t\tDomEvent.off(window, 'selectstart', DomEvent.preventDefault);\r\n\t};\r\n} else {\r\n\tvar userSelectProperty = testProp(\r\n\t\t['userSelect', 'WebkitUserSelect', 'OUserSelect', 'MozUserSelect', 'msUserSelect']);\r\n\r\n\tdisableTextSelection = function () {\r\n\t\tif (userSelectProperty) {\r\n\t\t\tvar style = document.documentElement.style;\r\n\t\t\t_userSelect = style[userSelectProperty];\r\n\t\t\tstyle[userSelectProperty] = 'none';\r\n\t\t}\r\n\t};\r\n\tenableTextSelection = function () {\r\n\t\tif (userSelectProperty) {\r\n\t\t\tdocument.documentElement.style[userSelectProperty] = _userSelect;\r\n\t\t\t_userSelect = undefined;\r\n\t\t}\r\n\t};\r\n}\r\n\r\n// @function disableImageDrag()\r\n// As [`L.DomUtil.disableTextSelection`](#domutil-disabletextselection), but\r\n// for `dragstart` DOM events, usually generated when the user drags an image.\r\nexport function disableImageDrag() {\r\n\tDomEvent.on(window, 'dragstart', DomEvent.preventDefault);\r\n}\r\n\r\n// @function enableImageDrag()\r\n// Cancels the effects of a previous [`L.DomUtil.disableImageDrag`](#domutil-disabletextselection).\r\nexport function enableImageDrag() {\r\n\tDomEvent.off(window, 'dragstart', DomEvent.preventDefault);\r\n}\r\n\r\nvar _outlineElement, _outlineStyle;\r\n// @function preventOutline(el: HTMLElement)\r\n// Makes the [outline](https://developer.mozilla.org/docs/Web/CSS/outline)\r\n// of the element `el` invisible. Used internally by Leaflet to prevent\r\n// focusable elements from displaying an outline when the user performs a\r\n// drag interaction on them.\r\nexport function preventOutline(element) {\r\n\twhile (element.tabIndex === -1) {\r\n\t\telement = element.parentNode;\r\n\t}\r\n\tif (!element.style) { return; }\r\n\trestoreOutline();\r\n\t_outlineElement = element;\r\n\t_outlineStyle = element.style.outlineStyle;\r\n\telement.style.outlineStyle = 'none';\r\n\tDomEvent.on(window, 'keydown', restoreOutline);\r\n}\r\n\r\n// @function restoreOutline()\r\n// Cancels the effects of a previous [`L.DomUtil.preventOutline`]().\r\nexport function restoreOutline() {\r\n\tif (!_outlineElement) { return; }\r\n\t_outlineElement.style.outlineStyle = _outlineStyle;\r\n\t_outlineElement = undefined;\r\n\t_outlineStyle = undefined;\r\n\tDomEvent.off(window, 'keydown', restoreOutline);\r\n}\r\n\r\n// @function getSizedParentNode(el: HTMLElement): HTMLElement\r\n// Finds the closest parent node which size (width and height) is not null.\r\nexport function getSizedParentNode(element) {\r\n\tdo {\r\n\t\telement = element.parentNode;\r\n\t} while ((!element.offsetWidth || !element.offsetHeight) && element !== document.body);\r\n\treturn element;\r\n}\r\n\r\n// @function getScale(el: HTMLElement): Object\r\n// Computes the CSS scale currently applied on the element.\r\n// Returns an object with `x` and `y` members as horizontal and vertical scales respectively,\r\n// and `boundingClientRect` as the result of [`getBoundingClientRect()`](https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect).\r\nexport function getScale(element) {\r\n\tvar rect = element.getBoundingClientRect(); // Read-only in old browsers.\r\n\r\n\treturn {\r\n\t\tx: rect.width / element.offsetWidth || 1,\r\n\t\ty: rect.height / element.offsetHeight || 1,\r\n\t\tboundingClientRect: rect\r\n\t};\r\n}\r\n", "import {Point} from '../geometry/Point';\r\nimport * as Util from '../core/Util';\r\nimport Browser from '../core/Browser';\r\nimport {addPointerListener, removePointerListener} from './DomEvent.Pointer';\r\nimport {addDoubleTapListener, removeDoubleTapListener} from './DomEvent.DoubleTap';\r\nimport {getScale} from './DomUtil';\r\n\r\n/*\r\n * @namespace DomEvent\r\n * Utility functions to work with the [DOM events](https://developer.mozilla.org/docs/Web/API/Event), used by Leaflet internally.\r\n */\r\n\r\n// Inspired by John Resig, Dean Edwards and YUI addEvent implementations.\r\n\r\n// @function on(el: HTMLElement, types: String, fn: Function, context?: Object): this\r\n// Adds a listener function (`fn`) to a particular DOM event type of the\r\n// element `el`. You can optionally specify the context of the listener\r\n// (object the `this` keyword will point to). You can also pass several\r\n// space-separated types (e.g. `'click dblclick'`).\r\n\r\n// @alternative\r\n// @function on(el: HTMLElement, eventMap: Object, context?: Object): this\r\n// Adds a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`\r\nexport function on(obj, types, fn, context) {\r\n\r\n\tif (types && typeof types === 'object') {\r\n\t\tfor (var type in types) {\r\n\t\t\taddOne(obj, type, types[type], fn);\r\n\t\t}\r\n\t} else {\r\n\t\ttypes = Util.splitWords(types);\r\n\r\n\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\taddOne(obj, types[i], fn, context);\r\n\t\t}\r\n\t}\r\n\r\n\treturn this;\r\n}\r\n\r\nvar eventsKey = '_leaflet_events';\r\n\r\n// @function off(el: HTMLElement, types: String, fn: Function, context?: Object): this\r\n// Removes a previously added listener function.\r\n// Note that if you passed a custom context to on, you must pass the same\r\n// context to `off` in order to remove the listener.\r\n\r\n// @alternative\r\n// @function off(el: HTMLElement, eventMap: Object, context?: Object): this\r\n// Removes a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`\r\n\r\n// @alternative\r\n// @function off(el: HTMLElement, types: String): this\r\n// Removes all previously added listeners of given types.\r\n\r\n// @alternative\r\n// @function off(el: HTMLElement): this\r\n// Removes all previously added listeners from given HTMLElement\r\nexport function off(obj, types, fn, context) {\r\n\r\n\tif (arguments.length === 1) {\r\n\t\tbatchRemove(obj);\r\n\t\tdelete obj[eventsKey];\r\n\r\n\t} else if (types && typeof types === 'object') {\r\n\t\tfor (var type in types) {\r\n\t\t\tremoveOne(obj, type, types[type], fn);\r\n\t\t}\r\n\r\n\t} else {\r\n\t\ttypes = Util.splitWords(types);\r\n\r\n\t\tif (arguments.length === 2) {\r\n\t\t\tbatchRemove(obj, function (type) {\r\n\t\t\t\treturn Util.indexOf(types, type) !== -1;\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\t\tremoveOne(obj, types[i], fn, context);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn this;\r\n}\r\n\r\nfunction batchRemove(obj, filterFn) {\r\n\tfor (var id in obj[eventsKey]) {\r\n\t\tvar type = id.split(/\\d/)[0];\r\n\t\tif (!filterFn || filterFn(type)) {\r\n\t\t\tremoveOne(obj, type, null, null, id);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nvar mouseSubst = {\r\n\tmouseenter: 'mouseover',\r\n\tmouseleave: 'mouseout',\r\n\twheel: !('onwheel' in window) && 'mousewheel'\r\n};\r\n\r\nfunction addOne(obj, type, fn, context) {\r\n\tvar id = type + Util.stamp(fn) + (context ? '_' + Util.stamp(context) : '');\r\n\r\n\tif (obj[eventsKey] && obj[eventsKey][id]) { return this; }\r\n\r\n\tvar handler = function (e) {\r\n\t\treturn fn.call(context || obj, e || window.event);\r\n\t};\r\n\r\n\tvar originalHandler = handler;\r\n\r\n\tif (!Browser.touchNative && Browser.pointer && type.indexOf('touch') === 0) {\r\n\t\t// Needs DomEvent.Pointer.js\r\n\t\thandler = addPointerListener(obj, type, handler);\r\n\r\n\t} else if (Browser.touch && (type === 'dblclick')) {\r\n\t\thandler = addDoubleTapListener(obj, handler);\r\n\r\n\t} else if ('addEventListener' in obj) {\r\n\r\n\t\tif (type === 'touchstart' || type === 'touchmove' || type === 'wheel' || type === 'mousewheel') {\r\n\t\t\tobj.addEventListener(mouseSubst[type] || type, handler, Browser.passiveEvents ? {passive: false} : false);\r\n\r\n\t\t} else if (type === 'mouseenter' || type === 'mouseleave') {\r\n\t\t\thandler = function (e) {\r\n\t\t\t\te = e || window.event;\r\n\t\t\t\tif (isExternalTarget(obj, e)) {\r\n\t\t\t\t\toriginalHandler(e);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\tobj.addEventListener(mouseSubst[type], handler, false);\r\n\r\n\t\t} else {\r\n\t\t\tobj.addEventListener(type, originalHandler, false);\r\n\t\t}\r\n\r\n\t} else {\r\n\t\tobj.attachEvent('on' + type, handler);\r\n\t}\r\n\r\n\tobj[eventsKey] = obj[eventsKey] || {};\r\n\tobj[eventsKey][id] = handler;\r\n}\r\n\r\nfunction removeOne(obj, type, fn, context, id) {\r\n\tid = id || type + Util.stamp(fn) + (context ? '_' + Util.stamp(context) : '');\r\n\tvar handler = obj[eventsKey] && obj[eventsKey][id];\r\n\r\n\tif (!handler) { return this; }\r\n\r\n\tif (!Browser.touchNative && Browser.pointer && type.indexOf('touch') === 0) {\r\n\t\tremovePointerListener(obj, type, handler);\r\n\r\n\t} else if (Browser.touch && (type === 'dblclick')) {\r\n\t\tremoveDoubleTapListener(obj, handler);\r\n\r\n\t} else if ('removeEventListener' in obj) {\r\n\r\n\t\tobj.removeEventListener(mouseSubst[type] || type, handler, false);\r\n\r\n\t} else {\r\n\t\tobj.detachEvent('on' + type, handler);\r\n\t}\r\n\r\n\tobj[eventsKey][id] = null;\r\n}\r\n\r\n// @function stopPropagation(ev: DOMEvent): this\r\n// Stop the given event from propagation to parent elements. Used inside the listener functions:\r\n// ```js\r\n// L.DomEvent.on(div, 'click', function (ev) {\r\n// \tL.DomEvent.stopPropagation(ev);\r\n// });\r\n// ```\r\nexport function stopPropagation(e) {\r\n\r\n\tif (e.stopPropagation) {\r\n\t\te.stopPropagation();\r\n\t} else if (e.originalEvent) { // In case of Leaflet event.\r\n\t\te.originalEvent._stopped = true;\r\n\t} else {\r\n\t\te.cancelBubble = true;\r\n\t}\r\n\r\n\treturn this;\r\n}\r\n\r\n// @function disableScrollPropagation(el: HTMLElement): this\r\n// Adds `stopPropagation` to the element's `'wheel'` events (plus browser variants).\r\nexport function disableScrollPropagation(el) {\r\n\taddOne(el, 'wheel', stopPropagation);\r\n\treturn this;\r\n}\r\n\r\n// @function disableClickPropagation(el: HTMLElement): this\r\n// Adds `stopPropagation` to the element's `'click'`, `'dblclick'`, `'contextmenu'`,\r\n// `'mousedown'` and `'touchstart'` events (plus browser variants).\r\nexport function disableClickPropagation(el) {\r\n\ton(el, 'mousedown touchstart dblclick contextmenu', stopPropagation);\r\n\tel['_leaflet_disable_click'] = true;\r\n\treturn this;\r\n}\r\n\r\n// @function preventDefault(ev: DOMEvent): this\r\n// Prevents the default action of the DOM Event `ev` from happening (such as\r\n// following a link in the href of the a element, or doing a POST request\r\n// with page reload when a `<form>` is submitted).\r\n// Use it inside listener functions.\r\nexport function preventDefault(e) {\r\n\tif (e.preventDefault) {\r\n\t\te.preventDefault();\r\n\t} else {\r\n\t\te.returnValue = false;\r\n\t}\r\n\treturn this;\r\n}\r\n\r\n// @function stop(ev: DOMEvent): this\r\n// Does `stopPropagation` and `preventDefault` at the same time.\r\nexport function stop(e) {\r\n\tpreventDefault(e);\r\n\tstopPropagation(e);\r\n\treturn this;\r\n}\r\n\r\n// @function getPropagationPath(ev: DOMEvent): Array\r\n// Compatibility polyfill for [`Event.composedPath()`](https://developer.mozilla.org/en-US/docs/Web/API/Event/composedPath).\r\n// Returns an array containing the `HTMLElement`s that the given DOM event\r\n// should propagate to (if not stopped).\r\nexport function getPropagationPath(ev) {\r\n\tif (ev.composedPath) {\r\n\t\treturn ev.composedPath();\r\n\t}\r\n\r\n\tvar path = [];\r\n\tvar el = ev.target;\r\n\r\n\twhile (el) {\r\n\t\tpath.push(el);\r\n\t\tel = el.parentNode;\r\n\t}\r\n\treturn path;\r\n}\r\n\r\n\r\n// @function getMousePosition(ev: DOMEvent, container?: HTMLElement): Point\r\n// Gets normalized mouse position from a DOM event relative to the\r\n// `container` (border excluded) or to the whole page if not specified.\r\nexport function getMousePosition(e, container) {\r\n\tif (!container) {\r\n\t\treturn new Point(e.clientX, e.clientY);\r\n\t}\r\n\r\n\tvar scale = getScale(container),\r\n\t offset = scale.boundingClientRect; // left and top values are in page scale (like the event clientX/Y)\r\n\r\n\treturn new Point(\r\n\t\t// offset.left/top values are in page scale (like clientX/Y),\r\n\t\t// whereas clientLeft/Top (border width) values are the original values (before CSS scale applies).\r\n\t\t(e.clientX - offset.left) / scale.x - container.clientLeft,\r\n\t\t(e.clientY - offset.top) / scale.y - container.clientTop\r\n\t);\r\n}\r\n\r\n\r\n// except , Safari and\r\n// We need double the scroll pixels (see #7403 and #4538) for all Browsers\r\n// except OSX (Mac) -> 3x, Chrome running on Linux 1x\r\n\r\nvar wheelPxFactor =\r\n\t(Browser.linux && Browser.chrome) ? window.devicePixelRatio :\r\n\tBrowser.mac ? window.devicePixelRatio * 3 :\r\n\twindow.devicePixelRatio > 0 ? 2 * window.devicePixelRatio : 1;\r\n// @function getWheelDelta(ev: DOMEvent): Number\r\n// Gets normalized wheel delta from a wheel DOM event, in vertical\r\n// pixels scrolled (negative if scrolling down).\r\n// Events from pointing devices without precise scrolling are mapped to\r\n// a best guess of 60 pixels.\r\nexport function getWheelDelta(e) {\r\n\treturn (Browser.edge) ? e.wheelDeltaY / 2 : // Don't trust window-geometry-based delta\r\n\t (e.deltaY && e.deltaMode === 0) ? -e.deltaY / wheelPxFactor : // Pixels\r\n\t (e.deltaY && e.deltaMode === 1) ? -e.deltaY * 20 : // Lines\r\n\t (e.deltaY && e.deltaMode === 2) ? -e.deltaY * 60 : // Pages\r\n\t (e.deltaX || e.deltaZ) ? 0 :\t// Skip horizontal/depth wheel events\r\n\t e.wheelDelta ? (e.wheelDeltaY || e.wheelDelta) / 2 : // Legacy IE pixels\r\n\t (e.detail && Math.abs(e.detail) < 32765) ? -e.detail * 20 : // Legacy Moz lines\r\n\t e.detail ? e.detail / -32765 * 60 : // Legacy Moz pages\r\n\t 0;\r\n}\r\n\r\n// check if element really left/entered the event target (for mouseenter/mouseleave)\r\nexport function isExternalTarget(el, e) {\r\n\r\n\tvar related = e.relatedTarget;\r\n\r\n\tif (!related) { return true; }\r\n\r\n\ttry {\r\n\t\twhile (related && (related !== el)) {\r\n\t\t\trelated = related.parentNode;\r\n\t\t}\r\n\t} catch (err) {\r\n\t\treturn false;\r\n\t}\r\n\treturn (related !== el);\r\n}\r\n\r\n// @function addListener(…): this\r\n// Alias to [`L.DomEvent.on`](#domevent-on)\r\nexport {on as addListener};\r\n\r\n// @function removeListener(…): this\r\n// Alias to [`L.DomEvent.off`](#domevent-off)\r\nexport {off as removeListener};\r\n", "import * as Util from '../core/Util';\nimport {Evented} from '../core/Events';\nimport * as DomUtil from '../dom/DomUtil';\n\n\n/*\n * @class PosAnimation\n * @aka L.PosAnimation\n * @inherits Evented\n * Used internally for panning animations, utilizing CSS3 Transitions for modern browsers and a timer fallback for IE6-9.\n *\n * @example\n * ```js\n * var myPositionMarker = L.marker([48.864716, 2.294694]).addTo(map);\n *\n * myPositionMarker.on(\"click\", function() {\n * \tvar pos = map.latLngToLayerPoint(myPositionMarker.getLatLng());\n * \tpos.y -= 25;\n * \tvar fx = new L.PosAnimation();\n *\n * \tfx.once('end',function() {\n * \t\tpos.y += 25;\n * \t\tfx.run(myPositionMarker._icon, pos, 0.8);\n * \t});\n *\n * \tfx.run(myPositionMarker._icon, pos, 0.3);\n * });\n *\n * ```\n *\n * @constructor L.PosAnimation()\n * Creates a `PosAnimation` object.\n *\n */\n\nexport var PosAnimation = Evented.extend({\n\n\t// @method run(el: HTMLElement, newPos: Point, duration?: Number, easeLinearity?: Number)\n\t// Run an animation of a given element to a new position, optionally setting\n\t// duration in seconds (`0.25` by default) and easing linearity factor (3rd\n\t// argument of the [cubic bezier curve](https://cubic-bezier.com/#0,0,.5,1),\n\t// `0.5` by default).\n\trun: function (el, newPos, duration, easeLinearity) {\n\t\tthis.stop();\n\n\t\tthis._el = el;\n\t\tthis._inProgress = true;\n\t\tthis._duration = duration || 0.25;\n\t\tthis._easeOutPower = 1 / Math.max(easeLinearity || 0.5, 0.2);\n\n\t\tthis._startPos = DomUtil.getPosition(el);\n\t\tthis._offset = newPos.subtract(this._startPos);\n\t\tthis._startTime = +new Date();\n\n\t\t// @event start: Event\n\t\t// Fired when the animation starts\n\t\tthis.fire('start');\n\n\t\tthis._animate();\n\t},\n\n\t// @method stop()\n\t// Stops the animation (if currently running).\n\tstop: function () {\n\t\tif (!this._inProgress) { return; }\n\n\t\tthis._step(true);\n\t\tthis._complete();\n\t},\n\n\t_animate: function () {\n\t\t// animation loop\n\t\tthis._animId = Util.requestAnimFrame(this._animate, this);\n\t\tthis._step();\n\t},\n\n\t_step: function (round) {\n\t\tvar elapsed = (+new Date()) - this._startTime,\n\t\t duration = this._duration * 1000;\n\n\t\tif (elapsed < duration) {\n\t\t\tthis._runFrame(this._easeOut(elapsed / duration), round);\n\t\t} else {\n\t\t\tthis._runFrame(1);\n\t\t\tthis._complete();\n\t\t}\n\t},\n\n\t_runFrame: function (progress, round) {\n\t\tvar pos = this._startPos.add(this._offset.multiplyBy(progress));\n\t\tif (round) {\n\t\t\tpos._round();\n\t\t}\n\t\tDomUtil.setPosition(this._el, pos);\n\n\t\t// @event step: Event\n\t\t// Fired continuously during the animation.\n\t\tthis.fire('step');\n\t},\n\n\t_complete: function () {\n\t\tUtil.cancelAnimFrame(this._animId);\n\n\t\tthis._inProgress = false;\n\t\t// @event end: Event\n\t\t// Fired when the animation ends.\n\t\tthis.fire('end');\n\t},\n\n\t_easeOut: function (t) {\n\t\treturn 1 - Math.pow(1 - t, this._easeOutPower);\n\t}\n});\n", "import * as Util from '../core/Util';\r\nimport {Evented} from '../core/Events';\r\nimport {EPSG3857} from '../geo/crs/CRS.EPSG3857';\r\nimport {Point, toPoint} from '../geometry/Point';\r\nimport {Bounds, toBounds} from '../geometry/Bounds';\r\nimport {LatLng, toLatLng} from '../geo/LatLng';\r\nimport {LatLngBounds, toLatLngBounds} from '../geo/LatLngBounds';\r\nimport Browser from '../core/Browser';\r\nimport * as DomEvent from '../dom/DomEvent';\r\nimport * as DomUtil from '../dom/DomUtil';\r\nimport {PosAnimation} from '../dom/PosAnimation';\r\n\r\n/*\r\n * @class Map\r\n * @aka L.Map\r\n * @inherits Evented\r\n *\r\n * The central class of the API — it is used to create a map on a page and manipulate it.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * // initialize the map on the \"map\" div with a given center and zoom\r\n * var map = L.map('map', {\r\n * \tcenter: [51.505, -0.09],\r\n * \tzoom: 13\r\n * });\r\n * ```\r\n *\r\n */\r\n\r\nexport var Map = Evented.extend({\r\n\r\n\toptions: {\r\n\t\t// @section Map State Options\r\n\t\t// @option crs: CRS = L.CRS.EPSG3857\r\n\t\t// The [Coordinate Reference System](#crs) to use. Don't change this if you're not\r\n\t\t// sure what it means.\r\n\t\tcrs: EPSG3857,\r\n\r\n\t\t// @option center: LatLng = undefined\r\n\t\t// Initial geographic center of the map\r\n\t\tcenter: undefined,\r\n\r\n\t\t// @option zoom: Number = undefined\r\n\t\t// Initial map zoom level\r\n\t\tzoom: undefined,\r\n\r\n\t\t// @option minZoom: Number = *\r\n\t\t// Minimum zoom level of the map.\r\n\t\t// If not specified and at least one `GridLayer` or `TileLayer` is in the map,\r\n\t\t// the lowest of their `minZoom` options will be used instead.\r\n\t\tminZoom: undefined,\r\n\r\n\t\t// @option maxZoom: Number = *\r\n\t\t// Maximum zoom level of the map.\r\n\t\t// If not specified and at least one `GridLayer` or `TileLayer` is in the map,\r\n\t\t// the highest of their `maxZoom` options will be used instead.\r\n\t\tmaxZoom: undefined,\r\n\r\n\t\t// @option layers: Layer[] = []\r\n\t\t// Array of layers that will be added to the map initially\r\n\t\tlayers: [],\r\n\r\n\t\t// @option maxBounds: LatLngBounds = null\r\n\t\t// When this option is set, the map restricts the view to the given\r\n\t\t// geographical bounds, bouncing the user back if the user tries to pan\r\n\t\t// outside the view. To set the restriction dynamically, use\r\n\t\t// [`setMaxBounds`](#map-setmaxbounds) method.\r\n\t\tmaxBounds: undefined,\r\n\r\n\t\t// @option renderer: Renderer = *\r\n\t\t// The default method for drawing vector layers on the map. `L.SVG`\r\n\t\t// or `L.Canvas` by default depending on browser support.\r\n\t\trenderer: undefined,\r\n\r\n\r\n\t\t// @section Animation Options\r\n\t\t// @option zoomAnimation: Boolean = true\r\n\t\t// Whether the map zoom animation is enabled. By default it's enabled\r\n\t\t// in all browsers that support CSS3 Transitions except Android.\r\n\t\tzoomAnimation: true,\r\n\r\n\t\t// @option zoomAnimationThreshold: Number = 4\r\n\t\t// Won't animate zoom if the zoom difference exceeds this value.\r\n\t\tzoomAnimationThreshold: 4,\r\n\r\n\t\t// @option fadeAnimation: Boolean = true\r\n\t\t// Whether the tile fade animation is enabled. By default it's enabled\r\n\t\t// in all browsers that support CSS3 Transitions except Android.\r\n\t\tfadeAnimation: true,\r\n\r\n\t\t// @option markerZoomAnimation: Boolean = true\r\n\t\t// Whether markers animate their zoom with the zoom animation, if disabled\r\n\t\t// they will disappear for the length of the animation. By default it's\r\n\t\t// enabled in all browsers that support CSS3 Transitions except Android.\r\n\t\tmarkerZoomAnimation: true,\r\n\r\n\t\t// @option transform3DLimit: Number = 2^23\r\n\t\t// Defines the maximum size of a CSS translation transform. The default\r\n\t\t// value should not be changed unless a web browser positions layers in\r\n\t\t// the wrong place after doing a large `panBy`.\r\n\t\ttransform3DLimit: 8388608, // Precision limit of a 32-bit float\r\n\r\n\t\t// @section Interaction Options\r\n\t\t// @option zoomSnap: Number = 1\r\n\t\t// Forces the map's zoom level to always be a multiple of this, particularly\r\n\t\t// right after a [`fitBounds()`](#map-fitbounds) or a pinch-zoom.\r\n\t\t// By default, the zoom level snaps to the nearest integer; lower values\r\n\t\t// (e.g. `0.5` or `0.1`) allow for greater granularity. A value of `0`\r\n\t\t// means the zoom level will not be snapped after `fitBounds` or a pinch-zoom.\r\n\t\tzoomSnap: 1,\r\n\r\n\t\t// @option zoomDelta: Number = 1\r\n\t\t// Controls how much the map's zoom level will change after a\r\n\t\t// [`zoomIn()`](#map-zoomin), [`zoomOut()`](#map-zoomout), pressing `+`\r\n\t\t// or `-` on the keyboard, or using the [zoom controls](#control-zoom).\r\n\t\t// Values smaller than `1` (e.g. `0.5`) allow for greater granularity.\r\n\t\tzoomDelta: 1,\r\n\r\n\t\t// @option trackResize: Boolean = true\r\n\t\t// Whether the map automatically handles browser window resize to update itself.\r\n\t\ttrackResize: true\r\n\t},\r\n\r\n\tinitialize: function (id, options) { // (HTMLElement or String, Object)\r\n\t\toptions = Util.setOptions(this, options);\r\n\r\n\t\t// Make sure to assign internal flags at the beginning,\r\n\t\t// to avoid inconsistent state in some edge cases.\r\n\t\tthis._handlers = [];\r\n\t\tthis._layers = {};\r\n\t\tthis._zoomBoundLayers = {};\r\n\t\tthis._sizeChanged = true;\r\n\r\n\t\tthis._initContainer(id);\r\n\t\tthis._initLayout();\r\n\r\n\t\t// hack for https://github.com/Leaflet/Leaflet/issues/1980\r\n\t\tthis._onResize = Util.bind(this._onResize, this);\r\n\r\n\t\tthis._initEvents();\r\n\r\n\t\tif (options.maxBounds) {\r\n\t\t\tthis.setMaxBounds(options.maxBounds);\r\n\t\t}\r\n\r\n\t\tif (options.zoom !== undefined) {\r\n\t\t\tthis._zoom = this._limitZoom(options.zoom);\r\n\t\t}\r\n\r\n\t\tif (options.center && options.zoom !== undefined) {\r\n\t\t\tthis.setView(toLatLng(options.center), options.zoom, {reset: true});\r\n\t\t}\r\n\r\n\t\tthis.callInitHooks();\r\n\r\n\t\t// don't animate on browsers without hardware-accelerated transitions or old Android/Opera\r\n\t\tthis._zoomAnimated = DomUtil.TRANSITION && Browser.any3d && !Browser.mobileOpera &&\r\n\t\t\t\tthis.options.zoomAnimation;\r\n\r\n\t\t// zoom transitions run with the same duration for all layers, so if one of transitionend events\r\n\t\t// happens after starting zoom animation (propagating to the map pane), we know that it ended globally\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tthis._createAnimProxy();\r\n\t\t\tDomEvent.on(this._proxy, DomUtil.TRANSITION_END, this._catchTransitionEnd, this);\r\n\t\t}\r\n\r\n\t\tthis._addLayers(this.options.layers);\r\n\t},\r\n\r\n\r\n\t// @section Methods for modifying map state\r\n\r\n\t// @method setView(center: LatLng, zoom: Number, options?: Zoom/pan options): this\r\n\t// Sets the view of the map (geographical center and zoom) with the given\r\n\t// animation options.\r\n\tsetView: function (center, zoom, options) {\r\n\r\n\t\tzoom = zoom === undefined ? this._zoom : this._limitZoom(zoom);\r\n\t\tcenter = this._limitCenter(toLatLng(center), zoom, this.options.maxBounds);\r\n\t\toptions = options || {};\r\n\r\n\t\tthis._stop();\r\n\r\n\t\tif (this._loaded && !options.reset && options !== true) {\r\n\r\n\t\t\tif (options.animate !== undefined) {\r\n\t\t\t\toptions.zoom = Util.extend({animate: options.animate}, options.zoom);\r\n\t\t\t\toptions.pan = Util.extend({animate: options.animate, duration: options.duration}, options.pan);\r\n\t\t\t}\r\n\r\n\t\t\t// try animating pan or zoom\r\n\t\t\tvar moved = (this._zoom !== zoom) ?\r\n\t\t\t\tthis._tryAnimatedZoom && this._tryAnimatedZoom(center, zoom, options.zoom) :\r\n\t\t\t\tthis._tryAnimatedPan(center, options.pan);\r\n\r\n\t\t\tif (moved) {\r\n\t\t\t\t// prevent resize handler call, the view will refresh after animation anyway\r\n\t\t\t\tclearTimeout(this._sizeTimer);\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// animation didn't start, just reset the map view\r\n\t\tthis._resetView(center, zoom, options.pan && options.pan.noMoveStart);\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method setZoom(zoom: Number, options?: Zoom/pan options): this\r\n\t// Sets the zoom of the map.\r\n\tsetZoom: function (zoom, options) {\r\n\t\tif (!this._loaded) {\r\n\t\t\tthis._zoom = zoom;\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\treturn this.setView(this.getCenter(), zoom, {zoom: options});\r\n\t},\r\n\r\n\t// @method zoomIn(delta?: Number, options?: Zoom options): this\r\n\t// Increases the zoom of the map by `delta` ([`zoomDelta`](#map-zoomdelta) by default).\r\n\tzoomIn: function (delta, options) {\r\n\t\tdelta = delta || (Browser.any3d ? this.options.zoomDelta : 1);\r\n\t\treturn this.setZoom(this._zoom + delta, options);\r\n\t},\r\n\r\n\t// @method zoomOut(delta?: Number, options?: Zoom options): this\r\n\t// Decreases the zoom of the map by `delta` ([`zoomDelta`](#map-zoomdelta) by default).\r\n\tzoomOut: function (delta, options) {\r\n\t\tdelta = delta || (Browser.any3d ? this.options.zoomDelta : 1);\r\n\t\treturn this.setZoom(this._zoom - delta, options);\r\n\t},\r\n\r\n\t// @method setZoomAround(latlng: LatLng, zoom: Number, options: Zoom options): this\r\n\t// Zooms the map while keeping a specified geographical point on the map\r\n\t// stationary (e.g. used internally for scroll zoom and double-click zoom).\r\n\t// @alternative\r\n\t// @method setZoomAround(offset: Point, zoom: Number, options: Zoom options): this\r\n\t// Zooms the map while keeping a specified pixel on the map (relative to the top-left corner) stationary.\r\n\tsetZoomAround: function (latlng, zoom, options) {\r\n\t\tvar scale = this.getZoomScale(zoom),\r\n\t\t viewHalf = this.getSize().divideBy(2),\r\n\t\t containerPoint = latlng instanceof Point ? latlng : this.latLngToContainerPoint(latlng),\r\n\r\n\t\t centerOffset = containerPoint.subtract(viewHalf).multiplyBy(1 - 1 / scale),\r\n\t\t newCenter = this.containerPointToLatLng(viewHalf.add(centerOffset));\r\n\r\n\t\treturn this.setView(newCenter, zoom, {zoom: options});\r\n\t},\r\n\r\n\t_getBoundsCenterZoom: function (bounds, options) {\r\n\r\n\t\toptions = options || {};\r\n\t\tbounds = bounds.getBounds ? bounds.getBounds() : toLatLngBounds(bounds);\r\n\r\n\t\tvar paddingTL = toPoint(options.paddingTopLeft || options.padding || [0, 0]),\r\n\t\t paddingBR = toPoint(options.paddingBottomRight || options.padding || [0, 0]),\r\n\r\n\t\t zoom = this.getBoundsZoom(bounds, false, paddingTL.add(paddingBR));\r\n\r\n\t\tzoom = (typeof options.maxZoom === 'number') ? Math.min(options.maxZoom, zoom) : zoom;\r\n\r\n\t\tif (zoom === Infinity) {\r\n\t\t\treturn {\r\n\t\t\t\tcenter: bounds.getCenter(),\r\n\t\t\t\tzoom: zoom\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tvar paddingOffset = paddingBR.subtract(paddingTL).divideBy(2),\r\n\r\n\t\t swPoint = this.project(bounds.getSouthWest(), zoom),\r\n\t\t nePoint = this.project(bounds.getNorthEast(), zoom),\r\n\t\t center = this.unproject(swPoint.add(nePoint).divideBy(2).add(paddingOffset), zoom);\r\n\r\n\t\treturn {\r\n\t\t\tcenter: center,\r\n\t\t\tzoom: zoom\r\n\t\t};\r\n\t},\r\n\r\n\t// @method fitBounds(bounds: LatLngBounds, options?: fitBounds options): this\r\n\t// Sets a map view that contains the given geographical bounds with the\r\n\t// maximum zoom level possible.\r\n\tfitBounds: function (bounds, options) {\r\n\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\tif (!bounds.isValid()) {\r\n\t\t\tthrow new Error('Bounds are not valid.');\r\n\t\t}\r\n\r\n\t\tvar target = this._getBoundsCenterZoom(bounds, options);\r\n\t\treturn this.setView(target.center, target.zoom, options);\r\n\t},\r\n\r\n\t// @method fitWorld(options?: fitBounds options): this\r\n\t// Sets a map view that mostly contains the whole world with the maximum\r\n\t// zoom level possible.\r\n\tfitWorld: function (options) {\r\n\t\treturn this.fitBounds([[-90, -180], [90, 180]], options);\r\n\t},\r\n\r\n\t// @method panTo(latlng: LatLng, options?: Pan options): this\r\n\t// Pans the map to a given center.\r\n\tpanTo: function (center, options) { // (LatLng)\r\n\t\treturn this.setView(center, this._zoom, {pan: options});\r\n\t},\r\n\r\n\t// @method panBy(offset: Point, options?: Pan options): this\r\n\t// Pans the map by a given number of pixels (animated).\r\n\tpanBy: function (offset, options) {\r\n\t\toffset = toPoint(offset).round();\r\n\t\toptions = options || {};\r\n\r\n\t\tif (!offset.x && !offset.y) {\r\n\t\t\treturn this.fire('moveend');\r\n\t\t}\r\n\t\t// If we pan too far, Chrome gets issues with tiles\r\n\t\t// and makes them disappear or appear in the wrong place (slightly offset) #2602\r\n\t\tif (options.animate !== true && !this.getSize().contains(offset)) {\r\n\t\t\tthis._resetView(this.unproject(this.project(this.getCenter()).add(offset)), this.getZoom());\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tif (!this._panAnim) {\r\n\t\t\tthis._panAnim = new PosAnimation();\r\n\r\n\t\t\tthis._panAnim.on({\r\n\t\t\t\t'step': this._onPanTransitionStep,\r\n\t\t\t\t'end': this._onPanTransitionEnd\r\n\t\t\t}, this);\r\n\t\t}\r\n\r\n\t\t// don't fire movestart if animating inertia\r\n\t\tif (!options.noMoveStart) {\r\n\t\t\tthis.fire('movestart');\r\n\t\t}\r\n\r\n\t\t// animate pan unless animate: false specified\r\n\t\tif (options.animate !== false) {\r\n\t\t\tDomUtil.addClass(this._mapPane, 'leaflet-pan-anim');\r\n\r\n\t\t\tvar newPos = this._getMapPanePos().subtract(offset).round();\r\n\t\t\tthis._panAnim.run(this._mapPane, newPos, options.duration || 0.25, options.easeLinearity);\r\n\t\t} else {\r\n\t\t\tthis._rawPanBy(offset);\r\n\t\t\tthis.fire('move').fire('moveend');\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method flyTo(latlng: LatLng, zoom?: Number, options?: Zoom/pan options): this\r\n\t// Sets the view of the map (geographical center and zoom) performing a smooth\r\n\t// pan-zoom animation.\r\n\tflyTo: function (targetCenter, targetZoom, options) {\r\n\r\n\t\toptions = options || {};\r\n\t\tif (options.animate === false || !Browser.any3d) {\r\n\t\t\treturn this.setView(targetCenter, targetZoom, options);\r\n\t\t}\r\n\r\n\t\tthis._stop();\r\n\r\n\t\tvar from = this.project(this.getCenter()),\r\n\t\t to = this.project(targetCenter),\r\n\t\t size = this.getSize(),\r\n\t\t startZoom = this._zoom;\r\n\r\n\t\ttargetCenter = toLatLng(targetCenter);\r\n\t\ttargetZoom = targetZoom === undefined ? startZoom : targetZoom;\r\n\r\n\t\tvar w0 = Math.max(size.x, size.y),\r\n\t\t w1 = w0 * this.getZoomScale(startZoom, targetZoom),\r\n\t\t u1 = (to.distanceTo(from)) || 1,\r\n\t\t rho = 1.42,\r\n\t\t rho2 = rho * rho;\r\n\r\n\t\tfunction r(i) {\r\n\t\t\tvar s1 = i ? -1 : 1,\r\n\t\t\t s2 = i ? w1 : w0,\r\n\t\t\t t1 = w1 * w1 - w0 * w0 + s1 * rho2 * rho2 * u1 * u1,\r\n\t\t\t b1 = 2 * s2 * rho2 * u1,\r\n\t\t\t b = t1 / b1,\r\n\t\t\t sq = Math.sqrt(b * b + 1) - b;\r\n\r\n\t\t\t // workaround for floating point precision bug when sq = 0, log = -Infinite,\r\n\t\t\t // thus triggering an infinite loop in flyTo\r\n\t\t\t var log = sq < 0.000000001 ? -18 : Math.log(sq);\r\n\r\n\t\t\treturn log;\r\n\t\t}\r\n\r\n\t\tfunction sinh(n) { return (Math.exp(n) - Math.exp(-n)) / 2; }\r\n\t\tfunction cosh(n) { return (Math.exp(n) + Math.exp(-n)) / 2; }\r\n\t\tfunction tanh(n) { return sinh(n) / cosh(n); }\r\n\r\n\t\tvar r0 = r(0);\r\n\r\n\t\tfunction w(s) { return w0 * (cosh(r0) / cosh(r0 + rho * s)); }\r\n\t\tfunction u(s) { return w0 * (cosh(r0) * tanh(r0 + rho * s) - sinh(r0)) / rho2; }\r\n\r\n\t\tfunction easeOut(t) { return 1 - Math.pow(1 - t, 1.5); }\r\n\r\n\t\tvar start = Date.now(),\r\n\t\t S = (r(1) - r0) / rho,\r\n\t\t duration = options.duration ? 1000 * options.duration : 1000 * S * 0.8;\r\n\r\n\t\tfunction frame() {\r\n\t\t\tvar t = (Date.now() - start) / duration,\r\n\t\t\t s = easeOut(t) * S;\r\n\r\n\t\t\tif (t <= 1) {\r\n\t\t\t\tthis._flyToFrame = Util.requestAnimFrame(frame, this);\r\n\r\n\t\t\t\tthis._move(\r\n\t\t\t\t\tthis.unproject(from.add(to.subtract(from).multiplyBy(u(s) / u1)), startZoom),\r\n\t\t\t\t\tthis.getScaleZoom(w0 / w(s), startZoom),\r\n\t\t\t\t\t{flyTo: true});\r\n\r\n\t\t\t} else {\r\n\t\t\t\tthis\r\n\t\t\t\t\t._move(targetCenter, targetZoom)\r\n\t\t\t\t\t._moveEnd(true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._moveStart(true, options.noMoveStart);\r\n\r\n\t\tframe.call(this);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method flyToBounds(bounds: LatLngBounds, options?: fitBounds options): this\r\n\t// Sets the view of the map with a smooth animation like [`flyTo`](#map-flyto),\r\n\t// but takes a bounds parameter like [`fitBounds`](#map-fitbounds).\r\n\tflyToBounds: function (bounds, options) {\r\n\t\tvar target = this._getBoundsCenterZoom(bounds, options);\r\n\t\treturn this.flyTo(target.center, target.zoom, options);\r\n\t},\r\n\r\n\t// @method setMaxBounds(bounds: LatLngBounds): this\r\n\t// Restricts the map view to the given bounds (see the [maxBounds](#map-maxbounds) option).\r\n\tsetMaxBounds: function (bounds) {\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\tif (this.listens('moveend', this._panInsideMaxBounds)) {\r\n\t\t\tthis.off('moveend', this._panInsideMaxBounds);\r\n\t\t}\r\n\r\n\t\tif (!bounds.isValid()) {\r\n\t\t\tthis.options.maxBounds = null;\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tthis.options.maxBounds = bounds;\r\n\r\n\t\tif (this._loaded) {\r\n\t\t\tthis._panInsideMaxBounds();\r\n\t\t}\r\n\r\n\t\treturn this.on('moveend', this._panInsideMaxBounds);\r\n\t},\r\n\r\n\t// @method setMinZoom(zoom: Number): this\r\n\t// Sets the lower limit for the available zoom levels (see the [minZoom](#map-minzoom) option).\r\n\tsetMinZoom: function (zoom) {\r\n\t\tvar oldZoom = this.options.minZoom;\r\n\t\tthis.options.minZoom = zoom;\r\n\r\n\t\tif (this._loaded && oldZoom !== zoom) {\r\n\t\t\tthis.fire('zoomlevelschange');\r\n\r\n\t\t\tif (this.getZoom() < this.options.minZoom) {\r\n\t\t\t\treturn this.setZoom(zoom);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method setMaxZoom(zoom: Number): this\r\n\t// Sets the upper limit for the available zoom levels (see the [maxZoom](#map-maxzoom) option).\r\n\tsetMaxZoom: function (zoom) {\r\n\t\tvar oldZoom = this.options.maxZoom;\r\n\t\tthis.options.maxZoom = zoom;\r\n\r\n\t\tif (this._loaded && oldZoom !== zoom) {\r\n\t\t\tthis.fire('zoomlevelschange');\r\n\r\n\t\t\tif (this.getZoom() > this.options.maxZoom) {\r\n\t\t\t\treturn this.setZoom(zoom);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method panInsideBounds(bounds: LatLngBounds, options?: Pan options): this\r\n\t// Pans the map to the closest view that would lie inside the given bounds (if it's not already), controlling the animation using the options specific, if any.\r\n\tpanInsideBounds: function (bounds, options) {\r\n\t\tthis._enforcingBounds = true;\r\n\t\tvar center = this.getCenter(),\r\n\t\t newCenter = this._limitCenter(center, this._zoom, toLatLngBounds(bounds));\r\n\r\n\t\tif (!center.equals(newCenter)) {\r\n\t\t\tthis.panTo(newCenter, options);\r\n\t\t}\r\n\r\n\t\tthis._enforcingBounds = false;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method panInside(latlng: LatLng, options?: padding options): this\r\n\t// Pans the map the minimum amount to make the `latlng` visible. Use\r\n\t// padding options to fit the display to more restricted bounds.\r\n\t// If `latlng` is already within the (optionally padded) display bounds,\r\n\t// the map will not be panned.\r\n\tpanInside: function (latlng, options) {\r\n\t\toptions = options || {};\r\n\r\n\t\tvar paddingTL = toPoint(options.paddingTopLeft || options.padding || [0, 0]),\r\n\t\t paddingBR = toPoint(options.paddingBottomRight || options.padding || [0, 0]),\r\n\t\t pixelCenter = this.project(this.getCenter()),\r\n\t\t pixelPoint = this.project(latlng),\r\n\t\t pixelBounds = this.getPixelBounds(),\r\n\t\t paddedBounds = toBounds([pixelBounds.min.add(paddingTL), pixelBounds.max.subtract(paddingBR)]),\r\n\t\t paddedSize = paddedBounds.getSize();\r\n\r\n\t\tif (!paddedBounds.contains(pixelPoint)) {\r\n\t\t\tthis._enforcingBounds = true;\r\n\t\t\tvar centerOffset = pixelPoint.subtract(paddedBounds.getCenter());\r\n\t\t\tvar offset = paddedBounds.extend(pixelPoint).getSize().subtract(paddedSize);\r\n\t\t\tpixelCenter.x += centerOffset.x < 0 ? -offset.x : offset.x;\r\n\t\t\tpixelCenter.y += centerOffset.y < 0 ? -offset.y : offset.y;\r\n\t\t\tthis.panTo(this.unproject(pixelCenter), options);\r\n\t\t\tthis._enforcingBounds = false;\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method invalidateSize(options: Zoom/pan options): this\r\n\t// Checks if the map container size changed and updates the map if so —\r\n\t// call it after you've changed the map size dynamically, also animating\r\n\t// pan by default. If `options.pan` is `false`, panning will not occur.\r\n\t// If `options.debounceMoveend` is `true`, it will delay `moveend` event so\r\n\t// that it doesn't happen often even if the method is called many\r\n\t// times in a row.\r\n\r\n\t// @alternative\r\n\t// @method invalidateSize(animate: Boolean): this\r\n\t// Checks if the map container size changed and updates the map if so —\r\n\t// call it after you've changed the map size dynamically, also animating\r\n\t// pan by default.\r\n\tinvalidateSize: function (options) {\r\n\t\tif (!this._loaded) { return this; }\r\n\r\n\t\toptions = Util.extend({\r\n\t\t\tanimate: false,\r\n\t\t\tpan: true\r\n\t\t}, options === true ? {animate: true} : options);\r\n\r\n\t\tvar oldSize = this.getSize();\r\n\t\tthis._sizeChanged = true;\r\n\t\tthis._lastCenter = null;\r\n\r\n\t\tvar newSize = this.getSize(),\r\n\t\t oldCenter = oldSize.divideBy(2).round(),\r\n\t\t newCenter = newSize.divideBy(2).round(),\r\n\t\t offset = oldCenter.subtract(newCenter);\r\n\r\n\t\tif (!offset.x && !offset.y) { return this; }\r\n\r\n\t\tif (options.animate && options.pan) {\r\n\t\t\tthis.panBy(offset);\r\n\r\n\t\t} else {\r\n\t\t\tif (options.pan) {\r\n\t\t\t\tthis._rawPanBy(offset);\r\n\t\t\t}\r\n\r\n\t\t\tthis.fire('move');\r\n\r\n\t\t\tif (options.debounceMoveend) {\r\n\t\t\t\tclearTimeout(this._sizeTimer);\r\n\t\t\t\tthis._sizeTimer = setTimeout(Util.bind(this.fire, this, 'moveend'), 200);\r\n\t\t\t} else {\r\n\t\t\t\tthis.fire('moveend');\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// @section Map state change events\r\n\t\t// @event resize: ResizeEvent\r\n\t\t// Fired when the map is resized.\r\n\t\treturn this.fire('resize', {\r\n\t\t\toldSize: oldSize,\r\n\t\t\tnewSize: newSize\r\n\t\t});\r\n\t},\r\n\r\n\t// @section Methods for modifying map state\r\n\t// @method stop(): this\r\n\t// Stops the currently running `panTo` or `flyTo` animation, if any.\r\n\tstop: function () {\r\n\t\tthis.setZoom(this._limitZoom(this._zoom));\r\n\t\tif (!this.options.zoomSnap) {\r\n\t\t\tthis.fire('viewreset');\r\n\t\t}\r\n\t\treturn this._stop();\r\n\t},\r\n\r\n\t// @section Geolocation methods\r\n\t// @method locate(options?: Locate options): this\r\n\t// Tries to locate the user using the Geolocation API, firing a [`locationfound`](#map-locationfound)\r\n\t// event with location data on success or a [`locationerror`](#map-locationerror) event on failure,\r\n\t// and optionally sets the map view to the user's location with respect to\r\n\t// detection accuracy (or to the world view if geolocation failed).\r\n\t// Note that, if your page doesn't use HTTPS, this method will fail in\r\n\t// modern browsers ([Chrome 50 and newer](https://sites.google.com/a/chromium.org/dev/Home/chromium-security/deprecating-powerful-features-on-insecure-origins))\r\n\t// See `Locate options` for more details.\r\n\tlocate: function (options) {\r\n\r\n\t\toptions = this._locateOptions = Util.extend({\r\n\t\t\ttimeout: 10000,\r\n\t\t\twatch: false\r\n\t\t\t// setView: false\r\n\t\t\t// maxZoom: <Number>\r\n\t\t\t// maximumAge: 0\r\n\t\t\t// enableHighAccuracy: false\r\n\t\t}, options);\r\n\r\n\t\tif (!('geolocation' in navigator)) {\r\n\t\t\tthis._handleGeolocationError({\r\n\t\t\t\tcode: 0,\r\n\t\t\t\tmessage: 'Geolocation not supported.'\r\n\t\t\t});\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tvar onResponse = Util.bind(this._handleGeolocationResponse, this),\r\n\t\t onError = Util.bind(this._handleGeolocationError, this);\r\n\r\n\t\tif (options.watch) {\r\n\t\t\tthis._locationWatchId =\r\n\t\t\t navigator.geolocation.watchPosition(onResponse, onError, options);\r\n\t\t} else {\r\n\t\t\tnavigator.geolocation.getCurrentPosition(onResponse, onError, options);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method stopLocate(): this\r\n\t// Stops watching location previously initiated by `map.locate({watch: true})`\r\n\t// and aborts resetting the map view if map.locate was called with\r\n\t// `{setView: true}`.\r\n\tstopLocate: function () {\r\n\t\tif (navigator.geolocation && navigator.geolocation.clearWatch) {\r\n\t\t\tnavigator.geolocation.clearWatch(this._locationWatchId);\r\n\t\t}\r\n\t\tif (this._locateOptions) {\r\n\t\t\tthis._locateOptions.setView = false;\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_handleGeolocationError: function (error) {\r\n\t\tif (!this._container._leaflet_id) { return; }\r\n\r\n\t\tvar c = error.code,\r\n\t\t message = error.message ||\r\n\t\t (c === 1 ? 'permission denied' :\r\n\t\t (c === 2 ? 'position unavailable' : 'timeout'));\r\n\r\n\t\tif (this._locateOptions.setView && !this._loaded) {\r\n\t\t\tthis.fitWorld();\r\n\t\t}\r\n\r\n\t\t// @section Location events\r\n\t\t// @event locationerror: ErrorEvent\r\n\t\t// Fired when geolocation (using the [`locate`](#map-locate) method) failed.\r\n\t\tthis.fire('locationerror', {\r\n\t\t\tcode: c,\r\n\t\t\tmessage: 'Geolocation error: ' + message + '.'\r\n\t\t});\r\n\t},\r\n\r\n\t_handleGeolocationResponse: function (pos) {\r\n\t\tif (!this._container._leaflet_id) { return; }\r\n\r\n\t\tvar lat = pos.coords.latitude,\r\n\t\t lng = pos.coords.longitude,\r\n\t\t latlng = new LatLng(lat, lng),\r\n\t\t bounds = latlng.toBounds(pos.coords.accuracy * 2),\r\n\t\t options = this._locateOptions;\r\n\r\n\t\tif (options.setView) {\r\n\t\t\tvar zoom = this.getBoundsZoom(bounds);\r\n\t\t\tthis.setView(latlng, options.maxZoom ? Math.min(zoom, options.maxZoom) : zoom);\r\n\t\t}\r\n\r\n\t\tvar data = {\r\n\t\t\tlatlng: latlng,\r\n\t\t\tbounds: bounds,\r\n\t\t\ttimestamp: pos.timestamp\r\n\t\t};\r\n\r\n\t\tfor (var i in pos.coords) {\r\n\t\t\tif (typeof pos.coords[i] === 'number') {\r\n\t\t\t\tdata[i] = pos.coords[i];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// @event locationfound: LocationEvent\r\n\t\t// Fired when geolocation (using the [`locate`](#map-locate) method)\r\n\t\t// went successfully.\r\n\t\tthis.fire('locationfound', data);\r\n\t},\r\n\r\n\t// TODO Appropriate docs section?\r\n\t// @section Other Methods\r\n\t// @method addHandler(name: String, HandlerClass: Function): this\r\n\t// Adds a new `Handler` to the map, given its name and constructor function.\r\n\taddHandler: function (name, HandlerClass) {\r\n\t\tif (!HandlerClass) { return this; }\r\n\r\n\t\tvar handler = this[name] = new HandlerClass(this);\r\n\r\n\t\tthis._handlers.push(handler);\r\n\r\n\t\tif (this.options[name]) {\r\n\t\t\thandler.enable();\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method remove(): this\r\n\t// Destroys the map and clears all related event listeners.\r\n\tremove: function () {\r\n\r\n\t\tthis._initEvents(true);\r\n\t\tif (this.options.maxBounds) { this.off('moveend', this._panInsideMaxBounds); }\r\n\r\n\t\tif (this._containerId !== this._container._leaflet_id) {\r\n\t\t\tthrow new Error('Map container is being reused by another instance');\r\n\t\t}\r\n\r\n\t\ttry {\r\n\t\t\t// throws error in IE6-8\r\n\t\t\tdelete this._container._leaflet_id;\r\n\t\t\tdelete this._containerId;\r\n\t\t} catch (e) {\r\n\t\t\t/*eslint-disable */\r\n\t\t\tthis._container._leaflet_id = undefined;\r\n\t\t\t/* eslint-enable */\r\n\t\t\tthis._containerId = undefined;\r\n\t\t}\r\n\r\n\t\tif (this._locationWatchId !== undefined) {\r\n\t\t\tthis.stopLocate();\r\n\t\t}\r\n\r\n\t\tthis._stop();\r\n\r\n\t\tDomUtil.remove(this._mapPane);\r\n\r\n\t\tif (this._clearControlPos) {\r\n\t\t\tthis._clearControlPos();\r\n\t\t}\r\n\t\tif (this._resizeRequest) {\r\n\t\t\tUtil.cancelAnimFrame(this._resizeRequest);\r\n\t\t\tthis._resizeRequest = null;\r\n\t\t}\r\n\r\n\t\tthis._clearHandlers();\r\n\r\n\t\tif (this._loaded) {\r\n\t\t\t// @section Map state change events\r\n\t\t\t// @event unload: Event\r\n\t\t\t// Fired when the map is destroyed with [remove](#map-remove) method.\r\n\t\t\tthis.fire('unload');\r\n\t\t}\r\n\r\n\t\tvar i;\r\n\t\tfor (i in this._layers) {\r\n\t\t\tthis._layers[i].remove();\r\n\t\t}\r\n\t\tfor (i in this._panes) {\r\n\t\t\tDomUtil.remove(this._panes[i]);\r\n\t\t}\r\n\r\n\t\tthis._layers = [];\r\n\t\tthis._panes = [];\r\n\t\tdelete this._mapPane;\r\n\t\tdelete this._renderer;\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @section Other Methods\r\n\t// @method createPane(name: String, container?: HTMLElement): HTMLElement\r\n\t// Creates a new [map pane](#map-pane) with the given name if it doesn't exist already,\r\n\t// then returns it. The pane is created as a child of `container`, or\r\n\t// as a child of the main map pane if not set.\r\n\tcreatePane: function (name, container) {\r\n\t\tvar className = 'leaflet-pane' + (name ? ' leaflet-' + name.replace('Pane', '') + '-pane' : ''),\r\n\t\t pane = DomUtil.create('div', className, container || this._mapPane);\r\n\r\n\t\tif (name) {\r\n\t\t\tthis._panes[name] = pane;\r\n\t\t}\r\n\t\treturn pane;\r\n\t},\r\n\r\n\t// @section Methods for Getting Map State\r\n\r\n\t// @method getCenter(): LatLng\r\n\t// Returns the geographical center of the map view\r\n\tgetCenter: function () {\r\n\t\tthis._checkIfLoaded();\r\n\r\n\t\tif (this._lastCenter && !this._moved()) {\r\n\t\t\treturn this._lastCenter.clone();\r\n\t\t}\r\n\t\treturn this.layerPointToLatLng(this._getCenterLayerPoint());\r\n\t},\r\n\r\n\t// @method getZoom(): Number\r\n\t// Returns the current zoom level of the map view\r\n\tgetZoom: function () {\r\n\t\treturn this._zoom;\r\n\t},\r\n\r\n\t// @method getBounds(): LatLngBounds\r\n\t// Returns the geographical bounds visible in the current map view\r\n\tgetBounds: function () {\r\n\t\tvar bounds = this.getPixelBounds(),\r\n\t\t sw = this.unproject(bounds.getBottomLeft()),\r\n\t\t ne = this.unproject(bounds.getTopRight());\r\n\r\n\t\treturn new LatLngBounds(sw, ne);\r\n\t},\r\n\r\n\t// @method getMinZoom(): Number\r\n\t// Returns the minimum zoom level of the map (if set in the `minZoom` option of the map or of any layers), or `0` by default.\r\n\tgetMinZoom: function () {\r\n\t\treturn this.options.minZoom === undefined ? this._layersMinZoom || 0 : this.options.minZoom;\r\n\t},\r\n\r\n\t// @method getMaxZoom(): Number\r\n\t// Returns the maximum zoom level of the map (if set in the `maxZoom` option of the map or of any layers).\r\n\tgetMaxZoom: function () {\r\n\t\treturn this.options.maxZoom === undefined ?\r\n\t\t\t(this._layersMaxZoom === undefined ? Infinity : this._layersMaxZoom) :\r\n\t\t\tthis.options.maxZoom;\r\n\t},\r\n\r\n\t// @method getBoundsZoom(bounds: LatLngBounds, inside?: Boolean, padding?: Point): Number\r\n\t// Returns the maximum zoom level on which the given bounds fit to the map\r\n\t// view in its entirety. If `inside` (optional) is set to `true`, the method\r\n\t// instead returns the minimum zoom level on which the map view fits into\r\n\t// the given bounds in its entirety.\r\n\tgetBoundsZoom: function (bounds, inside, padding) { // (LatLngBounds[, Boolean, Point]) -> Number\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\t\tpadding = toPoint(padding || [0, 0]);\r\n\r\n\t\tvar zoom = this.getZoom() || 0,\r\n\t\t min = this.getMinZoom(),\r\n\t\t max = this.getMaxZoom(),\r\n\t\t nw = bounds.getNorthWest(),\r\n\t\t se = bounds.getSouthEast(),\r\n\t\t size = this.getSize().subtract(padding),\r\n\t\t boundsSize = toBounds(this.project(se, zoom), this.project(nw, zoom)).getSize(),\r\n\t\t snap = Browser.any3d ? this.options.zoomSnap : 1,\r\n\t\t scalex = size.x / boundsSize.x,\r\n\t\t scaley = size.y / boundsSize.y,\r\n\t\t scale = inside ? Math.max(scalex, scaley) : Math.min(scalex, scaley);\r\n\r\n\t\tzoom = this.getScaleZoom(scale, zoom);\r\n\r\n\t\tif (snap) {\r\n\t\t\tzoom = Math.round(zoom / (snap / 100)) * (snap / 100); // don't jump if within 1% of a snap level\r\n\t\t\tzoom = inside ? Math.ceil(zoom / snap) * snap : Math.floor(zoom / snap) * snap;\r\n\t\t}\r\n\r\n\t\treturn Math.max(min, Math.min(max, zoom));\r\n\t},\r\n\r\n\t// @method getSize(): Point\r\n\t// Returns the current size of the map container (in pixels).\r\n\tgetSize: function () {\r\n\t\tif (!this._size || this._sizeChanged) {\r\n\t\t\tthis._size = new Point(\r\n\t\t\t\tthis._container.clientWidth || 0,\r\n\t\t\t\tthis._container.clientHeight || 0);\r\n\r\n\t\t\tthis._sizeChanged = false;\r\n\t\t}\r\n\t\treturn this._size.clone();\r\n\t},\r\n\r\n\t// @method getPixelBounds(): Bounds\r\n\t// Returns the bounds of the current map view in projected pixel\r\n\t// coordinates (sometimes useful in layer and overlay implementations).\r\n\tgetPixelBounds: function (center, zoom) {\r\n\t\tvar topLeftPoint = this._getTopLeftPoint(center, zoom);\r\n\t\treturn new Bounds(topLeftPoint, topLeftPoint.add(this.getSize()));\r\n\t},\r\n\r\n\t// TODO: Check semantics - isn't the pixel origin the 0,0 coord relative to\r\n\t// the map pane? \"left point of the map layer\" can be confusing, specially\r\n\t// since there can be negative offsets.\r\n\t// @method getPixelOrigin(): Point\r\n\t// Returns the projected pixel coordinates of the top left point of\r\n\t// the map layer (useful in custom layer and overlay implementations).\r\n\tgetPixelOrigin: function () {\r\n\t\tthis._checkIfLoaded();\r\n\t\treturn this._pixelOrigin;\r\n\t},\r\n\r\n\t// @method getPixelWorldBounds(zoom?: Number): Bounds\r\n\t// Returns the world's bounds in pixel coordinates for zoom level `zoom`.\r\n\t// If `zoom` is omitted, the map's current zoom level is used.\r\n\tgetPixelWorldBounds: function (zoom) {\r\n\t\treturn this.options.crs.getProjectedBounds(zoom === undefined ? this.getZoom() : zoom);\r\n\t},\r\n\r\n\t// @section Other Methods\r\n\r\n\t// @method getPane(pane: String|HTMLElement): HTMLElement\r\n\t// Returns a [map pane](#map-pane), given its name or its HTML element (its identity).\r\n\tgetPane: function (pane) {\r\n\t\treturn typeof pane === 'string' ? this._panes[pane] : pane;\r\n\t},\r\n\r\n\t// @method getPanes(): Object\r\n\t// Returns a plain object containing the names of all [panes](#map-pane) as keys and\r\n\t// the panes as values.\r\n\tgetPanes: function () {\r\n\t\treturn this._panes;\r\n\t},\r\n\r\n\t// @method getContainer: HTMLElement\r\n\t// Returns the HTML element that contains the map.\r\n\tgetContainer: function () {\r\n\t\treturn this._container;\r\n\t},\r\n\r\n\r\n\t// @section Conversion Methods\r\n\r\n\t// @method getZoomScale(toZoom: Number, fromZoom: Number): Number\r\n\t// Returns the scale factor to be applied to a map transition from zoom level\r\n\t// `fromZoom` to `toZoom`. Used internally to help with zoom animations.\r\n\tgetZoomScale: function (toZoom, fromZoom) {\r\n\t\t// TODO replace with universal implementation after refactoring projections\r\n\t\tvar crs = this.options.crs;\r\n\t\tfromZoom = fromZoom === undefined ? this._zoom : fromZoom;\r\n\t\treturn crs.scale(toZoom) / crs.scale(fromZoom);\r\n\t},\r\n\r\n\t// @method getScaleZoom(scale: Number, fromZoom: Number): Number\r\n\t// Returns the zoom level that the map would end up at, if it is at `fromZoom`\r\n\t// level and everything is scaled by a factor of `scale`. Inverse of\r\n\t// [`getZoomScale`](#map-getZoomScale).\r\n\tgetScaleZoom: function (scale, fromZoom) {\r\n\t\tvar crs = this.options.crs;\r\n\t\tfromZoom = fromZoom === undefined ? this._zoom : fromZoom;\r\n\t\tvar zoom = crs.zoom(scale * crs.scale(fromZoom));\r\n\t\treturn isNaN(zoom) ? Infinity : zoom;\r\n\t},\r\n\r\n\t// @method project(latlng: LatLng, zoom: Number): Point\r\n\t// Projects a geographical coordinate `LatLng` according to the projection\r\n\t// of the map's CRS, then scales it according to `zoom` and the CRS's\r\n\t// `Transformation`. The result is pixel coordinate relative to\r\n\t// the CRS origin.\r\n\tproject: function (latlng, zoom) {\r\n\t\tzoom = zoom === undefined ? this._zoom : zoom;\r\n\t\treturn this.options.crs.latLngToPoint(toLatLng(latlng), zoom);\r\n\t},\r\n\r\n\t// @method unproject(point: Point, zoom: Number): LatLng\r\n\t// Inverse of [`project`](#map-project).\r\n\tunproject: function (point, zoom) {\r\n\t\tzoom = zoom === undefined ? this._zoom : zoom;\r\n\t\treturn this.options.crs.pointToLatLng(toPoint(point), zoom);\r\n\t},\r\n\r\n\t// @method layerPointToLatLng(point: Point): LatLng\r\n\t// Given a pixel coordinate relative to the [origin pixel](#map-getpixelorigin),\r\n\t// returns the corresponding geographical coordinate (for the current zoom level).\r\n\tlayerPointToLatLng: function (point) {\r\n\t\tvar projectedPoint = toPoint(point).add(this.getPixelOrigin());\r\n\t\treturn this.unproject(projectedPoint);\r\n\t},\r\n\r\n\t// @method latLngToLayerPoint(latlng: LatLng): Point\r\n\t// Given a geographical coordinate, returns the corresponding pixel coordinate\r\n\t// relative to the [origin pixel](#map-getpixelorigin).\r\n\tlatLngToLayerPoint: function (latlng) {\r\n\t\tvar projectedPoint = this.project(toLatLng(latlng))._round();\r\n\t\treturn projectedPoint._subtract(this.getPixelOrigin());\r\n\t},\r\n\r\n\t// @method wrapLatLng(latlng: LatLng): LatLng\r\n\t// Returns a `LatLng` where `lat` and `lng` has been wrapped according to the\r\n\t// map's CRS's `wrapLat` and `wrapLng` properties, if they are outside the\r\n\t// CRS's bounds.\r\n\t// By default this means longitude is wrapped around the dateline so its\r\n\t// value is between -180 and +180 degrees.\r\n\twrapLatLng: function (latlng) {\r\n\t\treturn this.options.crs.wrapLatLng(toLatLng(latlng));\r\n\t},\r\n\r\n\t// @method wrapLatLngBounds(bounds: LatLngBounds): LatLngBounds\r\n\t// Returns a `LatLngBounds` with the same size as the given one, ensuring that\r\n\t// its center is within the CRS's bounds.\r\n\t// By default this means the center longitude is wrapped around the dateline so its\r\n\t// value is between -180 and +180 degrees, and the majority of the bounds\r\n\t// overlaps the CRS's bounds.\r\n\twrapLatLngBounds: function (latlng) {\r\n\t\treturn this.options.crs.wrapLatLngBounds(toLatLngBounds(latlng));\r\n\t},\r\n\r\n\t// @method distance(latlng1: LatLng, latlng2: LatLng): Number\r\n\t// Returns the distance between two geographical coordinates according to\r\n\t// the map's CRS. By default this measures distance in meters.\r\n\tdistance: function (latlng1, latlng2) {\r\n\t\treturn this.options.crs.distance(toLatLng(latlng1), toLatLng(latlng2));\r\n\t},\r\n\r\n\t// @method containerPointToLayerPoint(point: Point): Point\r\n\t// Given a pixel coordinate relative to the map container, returns the corresponding\r\n\t// pixel coordinate relative to the [origin pixel](#map-getpixelorigin).\r\n\tcontainerPointToLayerPoint: function (point) { // (Point)\r\n\t\treturn toPoint(point).subtract(this._getMapPanePos());\r\n\t},\r\n\r\n\t// @method layerPointToContainerPoint(point: Point): Point\r\n\t// Given a pixel coordinate relative to the [origin pixel](#map-getpixelorigin),\r\n\t// returns the corresponding pixel coordinate relative to the map container.\r\n\tlayerPointToContainerPoint: function (point) { // (Point)\r\n\t\treturn toPoint(point).add(this._getMapPanePos());\r\n\t},\r\n\r\n\t// @method containerPointToLatLng(point: Point): LatLng\r\n\t// Given a pixel coordinate relative to the map container, returns\r\n\t// the corresponding geographical coordinate (for the current zoom level).\r\n\tcontainerPointToLatLng: function (point) {\r\n\t\tvar layerPoint = this.containerPointToLayerPoint(toPoint(point));\r\n\t\treturn this.layerPointToLatLng(layerPoint);\r\n\t},\r\n\r\n\t// @method latLngToContainerPoint(latlng: LatLng): Point\r\n\t// Given a geographical coordinate, returns the corresponding pixel coordinate\r\n\t// relative to the map container.\r\n\tlatLngToContainerPoint: function (latlng) {\r\n\t\treturn this.layerPointToContainerPoint(this.latLngToLayerPoint(toLatLng(latlng)));\r\n\t},\r\n\r\n\t// @method mouseEventToContainerPoint(ev: MouseEvent): Point\r\n\t// Given a MouseEvent object, returns the pixel coordinate relative to the\r\n\t// map container where the event took place.\r\n\tmouseEventToContainerPoint: function (e) {\r\n\t\treturn DomEvent.getMousePosition(e, this._container);\r\n\t},\r\n\r\n\t// @method mouseEventToLayerPoint(ev: MouseEvent): Point\r\n\t// Given a MouseEvent object, returns the pixel coordinate relative to\r\n\t// the [origin pixel](#map-getpixelorigin) where the event took place.\r\n\tmouseEventToLayerPoint: function (e) {\r\n\t\treturn this.containerPointToLayerPoint(this.mouseEventToContainerPoint(e));\r\n\t},\r\n\r\n\t// @method mouseEventToLatLng(ev: MouseEvent): LatLng\r\n\t// Given a MouseEvent object, returns geographical coordinate where the\r\n\t// event took place.\r\n\tmouseEventToLatLng: function (e) { // (MouseEvent)\r\n\t\treturn this.layerPointToLatLng(this.mouseEventToLayerPoint(e));\r\n\t},\r\n\r\n\r\n\t// map initialization methods\r\n\r\n\t_initContainer: function (id) {\r\n\t\tvar container = this._container = DomUtil.get(id);\r\n\r\n\t\tif (!container) {\r\n\t\t\tthrow new Error('Map container not found.');\r\n\t\t} else if (container._leaflet_id) {\r\n\t\t\tthrow new Error('Map container is already initialized.');\r\n\t\t}\r\n\r\n\t\tDomEvent.on(container, 'scroll', this._onScroll, this);\r\n\t\tthis._containerId = Util.stamp(container);\r\n\t},\r\n\r\n\t_initLayout: function () {\r\n\t\tvar container = this._container;\r\n\r\n\t\tthis._fadeAnimated = this.options.fadeAnimation && Browser.any3d;\r\n\r\n\t\tDomUtil.addClass(container, 'leaflet-container' +\r\n\t\t\t(Browser.touch ? ' leaflet-touch' : '') +\r\n\t\t\t(Browser.retina ? ' leaflet-retina' : '') +\r\n\t\t\t(Browser.ielt9 ? ' leaflet-oldie' : '') +\r\n\t\t\t(Browser.safari ? ' leaflet-safari' : '') +\r\n\t\t\t(this._fadeAnimated ? ' leaflet-fade-anim' : ''));\r\n\r\n\t\tvar position = DomUtil.getStyle(container, 'position');\r\n\r\n\t\tif (position !== 'absolute' && position !== 'relative' && position !== 'fixed' && position !== 'sticky') {\r\n\t\t\tcontainer.style.position = 'relative';\r\n\t\t}\r\n\r\n\t\tthis._initPanes();\r\n\r\n\t\tif (this._initControlPos) {\r\n\t\t\tthis._initControlPos();\r\n\t\t}\r\n\t},\r\n\r\n\t_initPanes: function () {\r\n\t\tvar panes = this._panes = {};\r\n\t\tthis._paneRenderers = {};\r\n\r\n\t\t// @section\r\n\t\t//\r\n\t\t// Panes are DOM elements used to control the ordering of layers on the map. You\r\n\t\t// can access panes with [`map.getPane`](#map-getpane) or\r\n\t\t// [`map.getPanes`](#map-getpanes) methods. New panes can be created with the\r\n\t\t// [`map.createPane`](#map-createpane) method.\r\n\t\t//\r\n\t\t// Every map has the following default panes that differ only in zIndex.\r\n\t\t//\r\n\t\t// @pane mapPane: HTMLElement = 'auto'\r\n\t\t// Pane that contains all other map panes\r\n\r\n\t\tthis._mapPane = this.createPane('mapPane', this._container);\r\n\t\tDomUtil.setPosition(this._mapPane, new Point(0, 0));\r\n\r\n\t\t// @pane tilePane: HTMLElement = 200\r\n\t\t// Pane for `GridLayer`s and `TileLayer`s\r\n\t\tthis.createPane('tilePane');\r\n\t\t// @pane overlayPane: HTMLElement = 400\r\n\t\t// Pane for vectors (`Path`s, like `Polyline`s and `Polygon`s), `ImageOverlay`s and `VideoOverlay`s\r\n\t\tthis.createPane('overlayPane');\r\n\t\t// @pane shadowPane: HTMLElement = 500\r\n\t\t// Pane for overlay shadows (e.g. `Marker` shadows)\r\n\t\tthis.createPane('shadowPane');\r\n\t\t// @pane markerPane: HTMLElement = 600\r\n\t\t// Pane for `Icon`s of `Marker`s\r\n\t\tthis.createPane('markerPane');\r\n\t\t// @pane tooltipPane: HTMLElement = 650\r\n\t\t// Pane for `Tooltip`s.\r\n\t\tthis.createPane('tooltipPane');\r\n\t\t// @pane popupPane: HTMLElement = 700\r\n\t\t// Pane for `Popup`s.\r\n\t\tthis.createPane('popupPane');\r\n\r\n\t\tif (!this.options.markerZoomAnimation) {\r\n\t\t\tDomUtil.addClass(panes.markerPane, 'leaflet-zoom-hide');\r\n\t\t\tDomUtil.addClass(panes.shadowPane, 'leaflet-zoom-hide');\r\n\t\t}\r\n\t},\r\n\r\n\r\n\t// private methods that modify map state\r\n\r\n\t// @section Map state change events\r\n\t_resetView: function (center, zoom, noMoveStart) {\r\n\t\tDomUtil.setPosition(this._mapPane, new Point(0, 0));\r\n\r\n\t\tvar loading = !this._loaded;\r\n\t\tthis._loaded = true;\r\n\t\tzoom = this._limitZoom(zoom);\r\n\r\n\t\tthis.fire('viewprereset');\r\n\r\n\t\tvar zoomChanged = this._zoom !== zoom;\r\n\t\tthis\r\n\t\t\t._moveStart(zoomChanged, noMoveStart)\r\n\t\t\t._move(center, zoom)\r\n\t\t\t._moveEnd(zoomChanged);\r\n\r\n\t\t// @event viewreset: Event\r\n\t\t// Fired when the map needs to redraw its content (this usually happens\r\n\t\t// on map zoom or load). Very useful for creating custom overlays.\r\n\t\tthis.fire('viewreset');\r\n\r\n\t\t// @event load: Event\r\n\t\t// Fired when the map is initialized (when its center and zoom are set\r\n\t\t// for the first time).\r\n\t\tif (loading) {\r\n\t\t\tthis.fire('load');\r\n\t\t}\r\n\t},\r\n\r\n\t_moveStart: function (zoomChanged, noMoveStart) {\r\n\t\t// @event zoomstart: Event\r\n\t\t// Fired when the map zoom is about to change (e.g. before zoom animation).\r\n\t\t// @event movestart: Event\r\n\t\t// Fired when the view of the map starts changing (e.g. user starts dragging the map).\r\n\t\tif (zoomChanged) {\r\n\t\t\tthis.fire('zoomstart');\r\n\t\t}\r\n\t\tif (!noMoveStart) {\r\n\t\t\tthis.fire('movestart');\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_move: function (center, zoom, data, supressEvent) {\r\n\t\tif (zoom === undefined) {\r\n\t\t\tzoom = this._zoom;\r\n\t\t}\r\n\t\tvar zoomChanged = this._zoom !== zoom;\r\n\r\n\t\tthis._zoom = zoom;\r\n\t\tthis._lastCenter = center;\r\n\t\tthis._pixelOrigin = this._getNewPixelOrigin(center);\r\n\r\n\t\tif (!supressEvent) {\r\n\t\t\t// @event zoom: Event\r\n\t\t\t// Fired repeatedly during any change in zoom level,\r\n\t\t\t// including zoom and fly animations.\r\n\t\t\tif (zoomChanged || (data && data.pinch)) {\t// Always fire 'zoom' if pinching because #3530\r\n\t\t\t\tthis.fire('zoom', data);\r\n\t\t\t}\r\n\r\n\t\t\t// @event move: Event\r\n\t\t\t// Fired repeatedly during any movement of the map,\r\n\t\t\t// including pan and fly animations.\r\n\t\t\tthis.fire('move', data);\r\n\t\t} else if (data && data.pinch) {\t// Always fire 'zoom' if pinching because #3530\r\n\t\t\tthis.fire('zoom', data);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_moveEnd: function (zoomChanged) {\r\n\t\t// @event zoomend: Event\r\n\t\t// Fired when the map zoom changed, after any animations.\r\n\t\tif (zoomChanged) {\r\n\t\t\tthis.fire('zoomend');\r\n\t\t}\r\n\r\n\t\t// @event moveend: Event\r\n\t\t// Fired when the center of the map stops changing\r\n\t\t// (e.g. user stopped dragging the map or after non-centered zoom).\r\n\t\treturn this.fire('moveend');\r\n\t},\r\n\r\n\t_stop: function () {\r\n\t\tUtil.cancelAnimFrame(this._flyToFrame);\r\n\t\tif (this._panAnim) {\r\n\t\t\tthis._panAnim.stop();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_rawPanBy: function (offset) {\r\n\t\tDomUtil.setPosition(this._mapPane, this._getMapPanePos().subtract(offset));\r\n\t},\r\n\r\n\t_getZoomSpan: function () {\r\n\t\treturn this.getMaxZoom() - this.getMinZoom();\r\n\t},\r\n\r\n\t_panInsideMaxBounds: function () {\r\n\t\tif (!this._enforcingBounds) {\r\n\t\t\tthis.panInsideBounds(this.options.maxBounds);\r\n\t\t}\r\n\t},\r\n\r\n\t_checkIfLoaded: function () {\r\n\t\tif (!this._loaded) {\r\n\t\t\tthrow new Error('Set map center and zoom first.');\r\n\t\t}\r\n\t},\r\n\r\n\t// DOM event handling\r\n\r\n\t// @section Interaction events\r\n\t_initEvents: function (remove) {\r\n\t\tthis._targets = {};\r\n\t\tthis._targets[Util.stamp(this._container)] = this;\r\n\r\n\t\tvar onOff = remove ? DomEvent.off : DomEvent.on;\r\n\r\n\t\t// @event click: MouseEvent\r\n\t\t// Fired when the user clicks (or taps) the map.\r\n\t\t// @event dblclick: MouseEvent\r\n\t\t// Fired when the user double-clicks (or double-taps) the map.\r\n\t\t// @event mousedown: MouseEvent\r\n\t\t// Fired when the user pushes the mouse button on the map.\r\n\t\t// @event mouseup: MouseEvent\r\n\t\t// Fired when the user releases the mouse button on the map.\r\n\t\t// @event mouseover: MouseEvent\r\n\t\t// Fired when the mouse enters the map.\r\n\t\t// @event mouseout: MouseEvent\r\n\t\t// Fired when the mouse leaves the map.\r\n\t\t// @event mousemove: MouseEvent\r\n\t\t// Fired while the mouse moves over the map.\r\n\t\t// @event contextmenu: MouseEvent\r\n\t\t// Fired when the user pushes the right mouse button on the map, prevents\r\n\t\t// default browser context menu from showing if there are listeners on\r\n\t\t// this event. Also fired on mobile when the user holds a single touch\r\n\t\t// for a second (also called long press).\r\n\t\t// @event keypress: KeyboardEvent\r\n\t\t// Fired when the user presses a key from the keyboard that produces a character value while the map is focused.\r\n\t\t// @event keydown: KeyboardEvent\r\n\t\t// Fired when the user presses a key from the keyboard while the map is focused. Unlike the `keypress` event,\r\n\t\t// the `keydown` event is fired for keys that produce a character value and for keys\r\n\t\t// that do not produce a character value.\r\n\t\t// @event keyup: KeyboardEvent\r\n\t\t// Fired when the user releases a key from the keyboard while the map is focused.\r\n\t\tonOff(this._container, 'click dblclick mousedown mouseup ' +\r\n\t\t\t'mouseover mouseout mousemove contextmenu keypress keydown keyup', this._handleDOMEvent, this);\r\n\r\n\t\tif (this.options.trackResize) {\r\n\t\t\tonOff(window, 'resize', this._onResize, this);\r\n\t\t}\r\n\r\n\t\tif (Browser.any3d && this.options.transform3DLimit) {\r\n\t\t\t(remove ? this.off : this.on).call(this, 'moveend', this._onMoveEnd);\r\n\t\t}\r\n\t},\r\n\r\n\t_onResize: function () {\r\n\t\tUtil.cancelAnimFrame(this._resizeRequest);\r\n\t\tthis._resizeRequest = Util.requestAnimFrame(\r\n\t\t function () { this.invalidateSize({debounceMoveend: true}); }, this);\r\n\t},\r\n\r\n\t_onScroll: function () {\r\n\t\tthis._container.scrollTop = 0;\r\n\t\tthis._container.scrollLeft = 0;\r\n\t},\r\n\r\n\t_onMoveEnd: function () {\r\n\t\tvar pos = this._getMapPanePos();\r\n\t\tif (Math.max(Math.abs(pos.x), Math.abs(pos.y)) >= this.options.transform3DLimit) {\r\n\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=1203873 but Webkit also have\r\n\t\t\t// a pixel offset on very high values, see: https://jsfiddle.net/dg6r5hhb/\r\n\t\t\tthis._resetView(this.getCenter(), this.getZoom());\r\n\t\t}\r\n\t},\r\n\r\n\t_findEventTargets: function (e, type) {\r\n\t\tvar targets = [],\r\n\t\t target,\r\n\t\t isHover = type === 'mouseout' || type === 'mouseover',\r\n\t\t src = e.target || e.srcElement,\r\n\t\t dragging = false;\r\n\r\n\t\twhile (src) {\r\n\t\t\ttarget = this._targets[Util.stamp(src)];\r\n\t\t\tif (target && (type === 'click' || type === 'preclick') && this._draggableMoved(target)) {\r\n\t\t\t\t// Prevent firing click after you just dragged an object.\r\n\t\t\t\tdragging = true;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tif (target && target.listens(type, true)) {\r\n\t\t\t\tif (isHover && !DomEvent.isExternalTarget(src, e)) { break; }\r\n\t\t\t\ttargets.push(target);\r\n\t\t\t\tif (isHover) { break; }\r\n\t\t\t}\r\n\t\t\tif (src === this._container) { break; }\r\n\t\t\tsrc = src.parentNode;\r\n\t\t}\r\n\t\tif (!targets.length && !dragging && !isHover && this.listens(type, true)) {\r\n\t\t\ttargets = [this];\r\n\t\t}\r\n\t\treturn targets;\r\n\t},\r\n\r\n\t_isClickDisabled: function (el) {\r\n\t\twhile (el && el !== this._container) {\r\n\t\t\tif (el['_leaflet_disable_click']) { return true; }\r\n\t\t\tel = el.parentNode;\r\n\t\t}\r\n\t},\r\n\r\n\t_handleDOMEvent: function (e) {\r\n\t\tvar el = (e.target || e.srcElement);\r\n\t\tif (!this._loaded || el['_leaflet_disable_events'] || e.type === 'click' && this._isClickDisabled(el)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar type = e.type;\r\n\r\n\t\tif (type === 'mousedown') {\r\n\t\t\t// prevents outline when clicking on keyboard-focusable element\r\n\t\t\tDomUtil.preventOutline(el);\r\n\t\t}\r\n\r\n\t\tthis._fireDOMEvent(e, type);\r\n\t},\r\n\r\n\t_mouseEvents: ['click', 'dblclick', 'mouseover', 'mouseout', 'contextmenu'],\r\n\r\n\t_fireDOMEvent: function (e, type, canvasTargets) {\r\n\r\n\t\tif (e.type === 'click') {\r\n\t\t\t// Fire a synthetic 'preclick' event which propagates up (mainly for closing popups).\r\n\t\t\t// @event preclick: MouseEvent\r\n\t\t\t// Fired before mouse click on the map (sometimes useful when you\r\n\t\t\t// want something to happen on click before any existing click\r\n\t\t\t// handlers start running).\r\n\t\t\tvar synth = Util.extend({}, e);\r\n\t\t\tsynth.type = 'preclick';\r\n\t\t\tthis._fireDOMEvent(synth, synth.type, canvasTargets);\r\n\t\t}\r\n\r\n\t\t// Find the layer the event is propagating from and its parents.\r\n\t\tvar targets = this._findEventTargets(e, type);\r\n\r\n\t\tif (canvasTargets) {\r\n\t\t\tvar filtered = []; // pick only targets with listeners\r\n\t\t\tfor (var i = 0; i < canvasTargets.length; i++) {\r\n\t\t\t\tif (canvasTargets[i].listens(type, true)) {\r\n\t\t\t\t\tfiltered.push(canvasTargets[i]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\ttargets = filtered.concat(targets);\r\n\t\t}\r\n\r\n\t\tif (!targets.length) { return; }\r\n\r\n\t\tif (type === 'contextmenu') {\r\n\t\t\tDomEvent.preventDefault(e);\r\n\t\t}\r\n\r\n\t\tvar target = targets[0];\r\n\t\tvar data = {\r\n\t\t\toriginalEvent: e\r\n\t\t};\r\n\r\n\t\tif (e.type !== 'keypress' && e.type !== 'keydown' && e.type !== 'keyup') {\r\n\t\t\tvar isMarker = target.getLatLng && (!target._radius || target._radius <= 10);\r\n\t\t\tdata.containerPoint = isMarker ?\r\n\t\t\t\tthis.latLngToContainerPoint(target.getLatLng()) : this.mouseEventToContainerPoint(e);\r\n\t\t\tdata.layerPoint = this.containerPointToLayerPoint(data.containerPoint);\r\n\t\t\tdata.latlng = isMarker ? target.getLatLng() : this.layerPointToLatLng(data.layerPoint);\r\n\t\t}\r\n\r\n\t\tfor (i = 0; i < targets.length; i++) {\r\n\t\t\ttargets[i].fire(type, data, true);\r\n\t\t\tif (data.originalEvent._stopped ||\r\n\t\t\t\t(targets[i].options.bubblingMouseEvents === false && Util.indexOf(this._mouseEvents, type) !== -1)) { return; }\r\n\t\t}\r\n\t},\r\n\r\n\t_draggableMoved: function (obj) {\r\n\t\tobj = obj.dragging && obj.dragging.enabled() ? obj : this;\r\n\t\treturn (obj.dragging && obj.dragging.moved()) || (this.boxZoom && this.boxZoom.moved());\r\n\t},\r\n\r\n\t_clearHandlers: function () {\r\n\t\tfor (var i = 0, len = this._handlers.length; i < len; i++) {\r\n\t\t\tthis._handlers[i].disable();\r\n\t\t}\r\n\t},\r\n\r\n\t// @section Other Methods\r\n\r\n\t// @method whenReady(fn: Function, context?: Object): this\r\n\t// Runs the given function `fn` when the map gets initialized with\r\n\t// a view (center and zoom) and at least one layer, or immediately\r\n\t// if it's already initialized, optionally passing a function context.\r\n\twhenReady: function (callback, context) {\r\n\t\tif (this._loaded) {\r\n\t\t\tcallback.call(context || this, {target: this});\r\n\t\t} else {\r\n\t\t\tthis.on('load', callback, context);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\r\n\t// private methods for getting map state\r\n\r\n\t_getMapPanePos: function () {\r\n\t\treturn DomUtil.getPosition(this._mapPane) || new Point(0, 0);\r\n\t},\r\n\r\n\t_moved: function () {\r\n\t\tvar pos = this._getMapPanePos();\r\n\t\treturn pos && !pos.equals([0, 0]);\r\n\t},\r\n\r\n\t_getTopLeftPoint: function (center, zoom) {\r\n\t\tvar pixelOrigin = center && zoom !== undefined ?\r\n\t\t\tthis._getNewPixelOrigin(center, zoom) :\r\n\t\t\tthis.getPixelOrigin();\r\n\t\treturn pixelOrigin.subtract(this._getMapPanePos());\r\n\t},\r\n\r\n\t_getNewPixelOrigin: function (center, zoom) {\r\n\t\tvar viewHalf = this.getSize()._divideBy(2);\r\n\t\treturn this.project(center, zoom)._subtract(viewHalf)._add(this._getMapPanePos())._round();\r\n\t},\r\n\r\n\t_latLngToNewLayerPoint: function (latlng, zoom, center) {\r\n\t\tvar topLeft = this._getNewPixelOrigin(center, zoom);\r\n\t\treturn this.project(latlng, zoom)._subtract(topLeft);\r\n\t},\r\n\r\n\t_latLngBoundsToNewLayerBounds: function (latLngBounds, zoom, center) {\r\n\t\tvar topLeft = this._getNewPixelOrigin(center, zoom);\r\n\t\treturn toBounds([\r\n\t\t\tthis.project(latLngBounds.getSouthWest(), zoom)._subtract(topLeft),\r\n\t\t\tthis.project(latLngBounds.getNorthWest(), zoom)._subtract(topLeft),\r\n\t\t\tthis.project(latLngBounds.getSouthEast(), zoom)._subtract(topLeft),\r\n\t\t\tthis.project(latLngBounds.getNorthEast(), zoom)._subtract(topLeft)\r\n\t\t]);\r\n\t},\r\n\r\n\t// layer point of the current center\r\n\t_getCenterLayerPoint: function () {\r\n\t\treturn this.containerPointToLayerPoint(this.getSize()._divideBy(2));\r\n\t},\r\n\r\n\t// offset of the specified place to the current center in pixels\r\n\t_getCenterOffset: function (latlng) {\r\n\t\treturn this.latLngToLayerPoint(latlng).subtract(this._getCenterLayerPoint());\r\n\t},\r\n\r\n\t// adjust center for view to get inside bounds\r\n\t_limitCenter: function (center, zoom, bounds) {\r\n\r\n\t\tif (!bounds) { return center; }\r\n\r\n\t\tvar centerPoint = this.project(center, zoom),\r\n\t\t viewHalf = this.getSize().divideBy(2),\r\n\t\t viewBounds = new Bounds(centerPoint.subtract(viewHalf), centerPoint.add(viewHalf)),\r\n\t\t offset = this._getBoundsOffset(viewBounds, bounds, zoom);\r\n\r\n\t\t// If offset is less than a pixel, ignore.\r\n\t\t// This prevents unstable projections from getting into\r\n\t\t// an infinite loop of tiny offsets.\r\n\t\tif (Math.abs(offset.x) <= 1 && Math.abs(offset.y) <= 1) {\r\n\t\t\treturn center;\r\n\t\t}\r\n\r\n\t\treturn this.unproject(centerPoint.add(offset), zoom);\r\n\t},\r\n\r\n\t// adjust offset for view to get inside bounds\r\n\t_limitOffset: function (offset, bounds) {\r\n\t\tif (!bounds) { return offset; }\r\n\r\n\t\tvar viewBounds = this.getPixelBounds(),\r\n\t\t newBounds = new Bounds(viewBounds.min.add(offset), viewBounds.max.add(offset));\r\n\r\n\t\treturn offset.add(this._getBoundsOffset(newBounds, bounds));\r\n\t},\r\n\r\n\t// returns offset needed for pxBounds to get inside maxBounds at a specified zoom\r\n\t_getBoundsOffset: function (pxBounds, maxBounds, zoom) {\r\n\t\tvar projectedMaxBounds = toBounds(\r\n\t\t this.project(maxBounds.getNorthEast(), zoom),\r\n\t\t this.project(maxBounds.getSouthWest(), zoom)\r\n\t\t ),\r\n\t\t minOffset = projectedMaxBounds.min.subtract(pxBounds.min),\r\n\t\t maxOffset = projectedMaxBounds.max.subtract(pxBounds.max),\r\n\r\n\t\t dx = this._rebound(minOffset.x, -maxOffset.x),\r\n\t\t dy = this._rebound(minOffset.y, -maxOffset.y);\r\n\r\n\t\treturn new Point(dx, dy);\r\n\t},\r\n\r\n\t_rebound: function (left, right) {\r\n\t\treturn left + right > 0 ?\r\n\t\t\tMath.round(left - right) / 2 :\r\n\t\t\tMath.max(0, Math.ceil(left)) - Math.max(0, Math.floor(right));\r\n\t},\r\n\r\n\t_limitZoom: function (zoom) {\r\n\t\tvar min = this.getMinZoom(),\r\n\t\t max = this.getMaxZoom(),\r\n\t\t snap = Browser.any3d ? this.options.zoomSnap : 1;\r\n\t\tif (snap) {\r\n\t\t\tzoom = Math.round(zoom / snap) * snap;\r\n\t\t}\r\n\t\treturn Math.max(min, Math.min(max, zoom));\r\n\t},\r\n\r\n\t_onPanTransitionStep: function () {\r\n\t\tthis.fire('move');\r\n\t},\r\n\r\n\t_onPanTransitionEnd: function () {\r\n\t\tDomUtil.removeClass(this._mapPane, 'leaflet-pan-anim');\r\n\t\tthis.fire('moveend');\r\n\t},\r\n\r\n\t_tryAnimatedPan: function (center, options) {\r\n\t\t// difference between the new and current centers in pixels\r\n\t\tvar offset = this._getCenterOffset(center)._trunc();\r\n\r\n\t\t// don't animate too far unless animate: true specified in options\r\n\t\tif ((options && options.animate) !== true && !this.getSize().contains(offset)) { return false; }\r\n\r\n\t\tthis.panBy(offset, options);\r\n\r\n\t\treturn true;\r\n\t},\r\n\r\n\t_createAnimProxy: function () {\r\n\r\n\t\tvar proxy = this._proxy = DomUtil.create('div', 'leaflet-proxy leaflet-zoom-animated');\r\n\t\tthis._panes.mapPane.appendChild(proxy);\r\n\r\n\t\tthis.on('zoomanim', function (e) {\r\n\t\t\tvar prop = DomUtil.TRANSFORM,\r\n\t\t\t transform = this._proxy.style[prop];\r\n\r\n\t\t\tDomUtil.setTransform(this._proxy, this.project(e.center, e.zoom), this.getZoomScale(e.zoom, 1));\r\n\r\n\t\t\t// workaround for case when transform is the same and so transitionend event is not fired\r\n\t\t\tif (transform === this._proxy.style[prop] && this._animatingZoom) {\r\n\t\t\t\tthis._onZoomTransitionEnd();\r\n\t\t\t}\r\n\t\t}, this);\r\n\r\n\t\tthis.on('load moveend', this._animMoveEnd, this);\r\n\r\n\t\tthis._on('unload', this._destroyAnimProxy, this);\r\n\t},\r\n\r\n\t_destroyAnimProxy: function () {\r\n\t\tDomUtil.remove(this._proxy);\r\n\t\tthis.off('load moveend', this._animMoveEnd, this);\r\n\t\tdelete this._proxy;\r\n\t},\r\n\r\n\t_animMoveEnd: function () {\r\n\t\tvar c = this.getCenter(),\r\n\t\t z = this.getZoom();\r\n\t\tDomUtil.setTransform(this._proxy, this.project(c, z), this.getZoomScale(z, 1));\r\n\t},\r\n\r\n\t_catchTransitionEnd: function (e) {\r\n\t\tif (this._animatingZoom && e.propertyName.indexOf('transform') >= 0) {\r\n\t\t\tthis._onZoomTransitionEnd();\r\n\t\t}\r\n\t},\r\n\r\n\t_nothingToAnimate: function () {\r\n\t\treturn !this._container.getElementsByClassName('leaflet-zoom-animated').length;\r\n\t},\r\n\r\n\t_tryAnimatedZoom: function (center, zoom, options) {\r\n\r\n\t\tif (this._animatingZoom) { return true; }\r\n\r\n\t\toptions = options || {};\r\n\r\n\t\t// don't animate if disabled, not supported or zoom difference is too large\r\n\t\tif (!this._zoomAnimated || options.animate === false || this._nothingToAnimate() ||\r\n\t\t Math.abs(zoom - this._zoom) > this.options.zoomAnimationThreshold) { return false; }\r\n\r\n\t\t// offset is the pixel coords of the zoom origin relative to the current center\r\n\t\tvar scale = this.getZoomScale(zoom),\r\n\t\t offset = this._getCenterOffset(center)._divideBy(1 - 1 / scale);\r\n\r\n\t\t// don't animate if the zoom origin isn't within one screen from the current center, unless forced\r\n\t\tif (options.animate !== true && !this.getSize().contains(offset)) { return false; }\r\n\r\n\t\tUtil.requestAnimFrame(function () {\r\n\t\t\tthis\r\n\t\t\t ._moveStart(true, options.noMoveStart || false)\r\n\t\t\t ._animateZoom(center, zoom, true);\r\n\t\t}, this);\r\n\r\n\t\treturn true;\r\n\t},\r\n\r\n\t_animateZoom: function (center, zoom, startAnim, noUpdate) {\r\n\t\tif (!this._mapPane) { return; }\r\n\r\n\t\tif (startAnim) {\r\n\t\t\tthis._animatingZoom = true;\r\n\r\n\t\t\t// remember what center/zoom to set after animation\r\n\t\t\tthis._animateToCenter = center;\r\n\t\t\tthis._animateToZoom = zoom;\r\n\r\n\t\t\tDomUtil.addClass(this._mapPane, 'leaflet-zoom-anim');\r\n\t\t}\r\n\r\n\t\t// @section Other Events\r\n\t\t// @event zoomanim: ZoomAnimEvent\r\n\t\t// Fired at least once per zoom animation. For continuous zoom, like pinch zooming, fired once per frame during zoom.\r\n\t\tthis.fire('zoomanim', {\r\n\t\t\tcenter: center,\r\n\t\t\tzoom: zoom,\r\n\t\t\tnoUpdate: noUpdate\r\n\t\t});\r\n\r\n\t\tif (!this._tempFireZoomEvent) {\r\n\t\t\tthis._tempFireZoomEvent = this._zoom !== this._animateToZoom;\r\n\t\t}\r\n\r\n\t\tthis._move(this._animateToCenter, this._animateToZoom, undefined, true);\r\n\r\n\t\t// Work around webkit not firing 'transitionend', see https://github.com/Leaflet/Leaflet/issues/3689, 2693\r\n\t\tsetTimeout(Util.bind(this._onZoomTransitionEnd, this), 250);\r\n\t},\r\n\r\n\t_onZoomTransitionEnd: function () {\r\n\t\tif (!this._animatingZoom) { return; }\r\n\r\n\t\tif (this._mapPane) {\r\n\t\t\tDomUtil.removeClass(this._mapPane, 'leaflet-zoom-anim');\r\n\t\t}\r\n\r\n\t\tthis._animatingZoom = false;\r\n\r\n\t\tthis._move(this._animateToCenter, this._animateToZoom, undefined, true);\r\n\r\n\t\tif (this._tempFireZoomEvent) {\r\n\t\t\tthis.fire('zoom');\r\n\t\t}\r\n\t\tdelete this._tempFireZoomEvent;\r\n\r\n\t\tthis.fire('move');\r\n\r\n\t\tthis._moveEnd(true);\r\n\t}\r\n});\r\n\r\n// @section\r\n\r\n// @factory L.map(id: String, options?: Map options)\r\n// Instantiates a map object given the DOM ID of a `<div>` element\r\n// and optionally an object literal with `Map options`.\r\n//\r\n// @alternative\r\n// @factory L.map(el: HTMLElement, options?: Map options)\r\n// Instantiates a map object given an instance of a `<div>` HTML element\r\n// and optionally an object literal with `Map options`.\r\nexport function createMap(id, options) {\r\n\treturn new Map(id, options);\r\n}\r\n", "\r\nimport {Class} from '../core/Class';\r\nimport {Map} from '../map/Map';\r\nimport * as Util from '../core/Util';\r\nimport * as DomUtil from '../dom/DomUtil';\r\n\r\n/*\r\n * @class Control\r\n * @aka L.Control\r\n * @inherits Class\r\n *\r\n * L.Control is a base class for implementing map controls. Handles positioning.\r\n * All other controls extend from this class.\r\n */\r\n\r\nexport var Control = Class.extend({\r\n\t// @section\r\n\t// @aka Control Options\r\n\toptions: {\r\n\t\t// @option position: String = 'topright'\r\n\t\t// The position of the control (one of the map corners). Possible values are `'topleft'`,\r\n\t\t// `'topright'`, `'bottomleft'` or `'bottomright'`\r\n\t\tposition: 'topright'\r\n\t},\r\n\r\n\tinitialize: function (options) {\r\n\t\tUtil.setOptions(this, options);\r\n\t},\r\n\r\n\t/* @section\r\n\t * Classes extending L.Control will inherit the following methods:\r\n\t *\r\n\t * @method getPosition: string\r\n\t * Returns the position of the control.\r\n\t */\r\n\tgetPosition: function () {\r\n\t\treturn this.options.position;\r\n\t},\r\n\r\n\t// @method setPosition(position: string): this\r\n\t// Sets the position of the control.\r\n\tsetPosition: function (position) {\r\n\t\tvar map = this._map;\r\n\r\n\t\tif (map) {\r\n\t\t\tmap.removeControl(this);\r\n\t\t}\r\n\r\n\t\tthis.options.position = position;\r\n\r\n\t\tif (map) {\r\n\t\t\tmap.addControl(this);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getContainer: HTMLElement\r\n\t// Returns the HTMLElement that contains the control.\r\n\tgetContainer: function () {\r\n\t\treturn this._container;\r\n\t},\r\n\r\n\t// @method addTo(map: Map): this\r\n\t// Adds the control to the given map.\r\n\taddTo: function (map) {\r\n\t\tthis.remove();\r\n\t\tthis._map = map;\r\n\r\n\t\tvar container = this._container = this.onAdd(map),\r\n\t\t pos = this.getPosition(),\r\n\t\t corner = map._controlCorners[pos];\r\n\r\n\t\tDomUtil.addClass(container, 'leaflet-control');\r\n\r\n\t\tif (pos.indexOf('bottom') !== -1) {\r\n\t\t\tcorner.insertBefore(container, corner.firstChild);\r\n\t\t} else {\r\n\t\t\tcorner.appendChild(container);\r\n\t\t}\r\n\r\n\t\tthis._map.on('unload', this.remove, this);\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method remove: this\r\n\t// Removes the control from the map it is currently active on.\r\n\tremove: function () {\r\n\t\tif (!this._map) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tDomUtil.remove(this._container);\r\n\r\n\t\tif (this.onRemove) {\r\n\t\t\tthis.onRemove(this._map);\r\n\t\t}\r\n\r\n\t\tthis._map.off('unload', this.remove, this);\r\n\t\tthis._map = null;\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_refocusOnMap: function (e) {\r\n\t\t// if map exists and event is not a keyboard event\r\n\t\tif (this._map && e && e.screenX > 0 && e.screenY > 0) {\r\n\t\t\tthis._map.getContainer().focus();\r\n\t\t}\r\n\t}\r\n});\r\n\r\nexport var control = function (options) {\r\n\treturn new Control(options);\r\n};\r\n\r\n/* @section Extension methods\r\n * @uninheritable\r\n *\r\n * Every control should extend from `L.Control` and (re-)implement the following methods.\r\n *\r\n * @method onAdd(map: Map): HTMLElement\r\n * Should return the container DOM element for the control and add listeners on relevant map events. Called on [`control.addTo(map)`](#control-addTo).\r\n *\r\n * @method onRemove(map: Map)\r\n * Optional method. Should contain all clean up code that removes the listeners previously added in [`onAdd`](#control-onadd). Called on [`control.remove()`](#control-remove).\r\n */\r\n\r\n/* @namespace Map\r\n * @section Methods for Layers and Controls\r\n */\r\nMap.include({\r\n\t// @method addControl(control: Control): this\r\n\t// Adds the given control to the map\r\n\taddControl: function (control) {\r\n\t\tcontrol.addTo(this);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method removeControl(control: Control): this\r\n\t// Removes the given control from the map\r\n\tremoveControl: function (control) {\r\n\t\tcontrol.remove();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_initControlPos: function () {\r\n\t\tvar corners = this._controlCorners = {},\r\n\t\t l = 'leaflet-',\r\n\t\t container = this._controlContainer =\r\n\t\t DomUtil.create('div', l + 'control-container', this._container);\r\n\r\n\t\tfunction createCorner(vSide, hSide) {\r\n\t\t\tvar className = l + vSide + ' ' + l + hSide;\r\n\r\n\t\t\tcorners[vSide + hSide] = DomUtil.create('div', className, container);\r\n\t\t}\r\n\r\n\t\tcreateCorner('top', 'left');\r\n\t\tcreateCorner('top', 'right');\r\n\t\tcreateCorner('bottom', 'left');\r\n\t\tcreateCorner('bottom', 'right');\r\n\t},\r\n\r\n\t_clearControlPos: function () {\r\n\t\tfor (var i in this._controlCorners) {\r\n\t\t\tDomUtil.remove(this._controlCorners[i]);\r\n\t\t}\r\n\t\tDomUtil.remove(this._controlContainer);\r\n\t\tdelete this._controlCorners;\r\n\t\tdelete this._controlContainer;\r\n\t}\r\n});\r\n", "\r\nimport {Control} from './Control';\r\nimport * as Util from '../core/Util';\r\nimport * as DomEvent from '../dom/DomEvent';\r\nimport * as DomUtil from '../dom/DomUtil';\r\n\r\n/*\r\n * @class Control.Layers\r\n * @aka L.Control.Layers\r\n * @inherits Control\r\n *\r\n * The layers control gives users the ability to switch between different base layers and switch overlays on/off (check out the [detailed example](https://leafletjs.com/examples/layers-control/)). Extends `Control`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var baseLayers = {\r\n * \t\"Mapbox\": mapbox,\r\n * \t\"OpenStreetMap\": osm\r\n * };\r\n *\r\n * var overlays = {\r\n * \t\"Marker\": marker,\r\n * \t\"Roads\": roadsLayer\r\n * };\r\n *\r\n * L.control.layers(baseLayers, overlays).addTo(map);\r\n * ```\r\n *\r\n * The `baseLayers` and `overlays` parameters are object literals with layer names as keys and `Layer` objects as values:\r\n *\r\n * ```js\r\n * {\r\n * \"<someName1>\": layer1,\r\n * \"<someName2>\": layer2\r\n * }\r\n * ```\r\n *\r\n * The layer names can contain HTML, which allows you to add additional styling to the items:\r\n *\r\n * ```js\r\n * {\"<img src='my-layer-icon' /> <span class='my-layer-item'>My Layer</span>\": myLayer}\r\n * ```\r\n */\r\n\r\nexport var Layers = Control.extend({\r\n\t// @section\r\n\t// @aka Control.Layers options\r\n\toptions: {\r\n\t\t// @option collapsed: Boolean = true\r\n\t\t// If `true`, the control will be collapsed into an icon and expanded on mouse hover, touch, or keyboard activation.\r\n\t\tcollapsed: true,\r\n\t\tposition: 'topright',\r\n\r\n\t\t// @option autoZIndex: Boolean = true\r\n\t\t// If `true`, the control will assign zIndexes in increasing order to all of its layers so that the order is preserved when switching them on/off.\r\n\t\tautoZIndex: true,\r\n\r\n\t\t// @option hideSingleBase: Boolean = false\r\n\t\t// If `true`, the base layers in the control will be hidden when there is only one.\r\n\t\thideSingleBase: false,\r\n\r\n\t\t// @option sortLayers: Boolean = false\r\n\t\t// Whether to sort the layers. When `false`, layers will keep the order\r\n\t\t// in which they were added to the control.\r\n\t\tsortLayers: false,\r\n\r\n\t\t// @option sortFunction: Function = *\r\n\t\t// A [compare function](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)\r\n\t\t// that will be used for sorting the layers, when `sortLayers` is `true`.\r\n\t\t// The function receives both the `L.Layer` instances and their names, as in\r\n\t\t// `sortFunction(layerA, layerB, nameA, nameB)`.\r\n\t\t// By default, it sorts layers alphabetically by their name.\r\n\t\tsortFunction: function (layerA, layerB, nameA, nameB) {\r\n\t\t\treturn nameA < nameB ? -1 : (nameB < nameA ? 1 : 0);\r\n\t\t}\r\n\t},\r\n\r\n\tinitialize: function (baseLayers, overlays, options) {\r\n\t\tUtil.setOptions(this, options);\r\n\r\n\t\tthis._layerControlInputs = [];\r\n\t\tthis._layers = [];\r\n\t\tthis._lastZIndex = 0;\r\n\t\tthis._handlingClick = false;\r\n\t\tthis._preventClick = false;\r\n\r\n\t\tfor (var i in baseLayers) {\r\n\t\t\tthis._addLayer(baseLayers[i], i);\r\n\t\t}\r\n\r\n\t\tfor (i in overlays) {\r\n\t\t\tthis._addLayer(overlays[i], i, true);\r\n\t\t}\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tthis._initLayout();\r\n\t\tthis._update();\r\n\r\n\t\tthis._map = map;\r\n\t\tmap.on('zoomend', this._checkDisabledLayers, this);\r\n\r\n\t\tfor (var i = 0; i < this._layers.length; i++) {\r\n\t\t\tthis._layers[i].layer.on('add remove', this._onLayerChange, this);\r\n\t\t}\r\n\r\n\t\treturn this._container;\r\n\t},\r\n\r\n\taddTo: function (map) {\r\n\t\tControl.prototype.addTo.call(this, map);\r\n\t\t// Trigger expand after Layers Control has been inserted into DOM so that is now has an actual height.\r\n\t\treturn this._expandIfNotCollapsed();\r\n\t},\r\n\r\n\tonRemove: function () {\r\n\t\tthis._map.off('zoomend', this._checkDisabledLayers, this);\r\n\r\n\t\tfor (var i = 0; i < this._layers.length; i++) {\r\n\t\t\tthis._layers[i].layer.off('add remove', this._onLayerChange, this);\r\n\t\t}\r\n\t},\r\n\r\n\t// @method addBaseLayer(layer: Layer, name: String): this\r\n\t// Adds a base layer (radio button entry) with the given name to the control.\r\n\taddBaseLayer: function (layer, name) {\r\n\t\tthis._addLayer(layer, name);\r\n\t\treturn (this._map) ? this._update() : this;\r\n\t},\r\n\r\n\t// @method addOverlay(layer: Layer, name: String): this\r\n\t// Adds an overlay (checkbox entry) with the given name to the control.\r\n\taddOverlay: function (layer, name) {\r\n\t\tthis._addLayer(layer, name, true);\r\n\t\treturn (this._map) ? this._update() : this;\r\n\t},\r\n\r\n\t// @method removeLayer(layer: Layer): this\r\n\t// Remove the given layer from the control.\r\n\tremoveLayer: function (layer) {\r\n\t\tlayer.off('add remove', this._onLayerChange, this);\r\n\r\n\t\tvar obj = this._getLayer(Util.stamp(layer));\r\n\t\tif (obj) {\r\n\t\t\tthis._layers.splice(this._layers.indexOf(obj), 1);\r\n\t\t}\r\n\t\treturn (this._map) ? this._update() : this;\r\n\t},\r\n\r\n\t// @method expand(): this\r\n\t// Expand the control container if collapsed.\r\n\texpand: function () {\r\n\t\tDomUtil.addClass(this._container, 'leaflet-control-layers-expanded');\r\n\t\tthis._section.style.height = null;\r\n\t\tvar acceptableHeight = this._map.getSize().y - (this._container.offsetTop + 50);\r\n\t\tif (acceptableHeight < this._section.clientHeight) {\r\n\t\t\tDomUtil.addClass(this._section, 'leaflet-control-layers-scrollbar');\r\n\t\t\tthis._section.style.height = acceptableHeight + 'px';\r\n\t\t} else {\r\n\t\t\tDomUtil.removeClass(this._section, 'leaflet-control-layers-scrollbar');\r\n\t\t}\r\n\t\tthis._checkDisabledLayers();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method collapse(): this\r\n\t// Collapse the control container if expanded.\r\n\tcollapse: function () {\r\n\t\tDomUtil.removeClass(this._container, 'leaflet-control-layers-expanded');\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_initLayout: function () {\r\n\t\tvar className = 'leaflet-control-layers',\r\n\t\t container = this._container = DomUtil.create('div', className),\r\n\t\t collapsed = this.options.collapsed;\r\n\r\n\t\t// makes this work on IE touch devices by stopping it from firing a mouseout event when the touch is released\r\n\t\tcontainer.setAttribute('aria-haspopup', true);\r\n\r\n\t\tDomEvent.disableClickPropagation(container);\r\n\t\tDomEvent.disableScrollPropagation(container);\r\n\r\n\t\tvar section = this._section = DomUtil.create('section', className + '-list');\r\n\r\n\t\tif (collapsed) {\r\n\t\t\tthis._map.on('click', this.collapse, this);\r\n\r\n\t\t\tDomEvent.on(container, {\r\n\t\t\t\tmouseenter: this._expandSafely,\r\n\t\t\t\tmouseleave: this.collapse\r\n\t\t\t}, this);\r\n\t\t}\r\n\r\n\t\tvar link = this._layersLink = DomUtil.create('a', className + '-toggle', container);\r\n\t\tlink.href = '#';\r\n\t\tlink.title = 'Layers';\r\n\t\tlink.setAttribute('role', 'button');\r\n\r\n\t\tDomEvent.on(link, {\r\n\t\t\tkeydown: function (e) {\r\n\t\t\t\tif (e.keyCode === 13) {\r\n\t\t\t\t\tthis._expandSafely();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t// Certain screen readers intercept the key event and instead send a click event\r\n\t\t\tclick: function (e) {\r\n\t\t\t\tDomEvent.preventDefault(e);\r\n\t\t\t\tthis._expandSafely();\r\n\t\t\t}\r\n\t\t}, this);\r\n\r\n\t\tif (!collapsed) {\r\n\t\t\tthis.expand();\r\n\t\t}\r\n\r\n\t\tthis._baseLayersList = DomUtil.create('div', className + '-base', section);\r\n\t\tthis._separator = DomUtil.create('div', className + '-separator', section);\r\n\t\tthis._overlaysList = DomUtil.create('div', className + '-overlays', section);\r\n\r\n\t\tcontainer.appendChild(section);\r\n\t},\r\n\r\n\t_getLayer: function (id) {\r\n\t\tfor (var i = 0; i < this._layers.length; i++) {\r\n\r\n\t\t\tif (this._layers[i] && Util.stamp(this._layers[i].layer) === id) {\r\n\t\t\t\treturn this._layers[i];\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t_addLayer: function (layer, name, overlay) {\r\n\t\tif (this._map) {\r\n\t\t\tlayer.on('add remove', this._onLayerChange, this);\r\n\t\t}\r\n\r\n\t\tthis._layers.push({\r\n\t\t\tlayer: layer,\r\n\t\t\tname: name,\r\n\t\t\toverlay: overlay\r\n\t\t});\r\n\r\n\t\tif (this.options.sortLayers) {\r\n\t\t\tthis._layers.sort(Util.bind(function (a, b) {\r\n\t\t\t\treturn this.options.sortFunction(a.layer, b.layer, a.name, b.name);\r\n\t\t\t}, this));\r\n\t\t}\r\n\r\n\t\tif (this.options.autoZIndex && layer.setZIndex) {\r\n\t\t\tthis._lastZIndex++;\r\n\t\t\tlayer.setZIndex(this._lastZIndex);\r\n\t\t}\r\n\r\n\t\tthis._expandIfNotCollapsed();\r\n\t},\r\n\r\n\t_update: function () {\r\n\t\tif (!this._container) { return this; }\r\n\r\n\t\tDomUtil.empty(this._baseLayersList);\r\n\t\tDomUtil.empty(this._overlaysList);\r\n\r\n\t\tthis._layerControlInputs = [];\r\n\t\tvar baseLayersPresent, overlaysPresent, i, obj, baseLayersCount = 0;\r\n\r\n\t\tfor (i = 0; i < this._layers.length; i++) {\r\n\t\t\tobj = this._layers[i];\r\n\t\t\tthis._addItem(obj);\r\n\t\t\toverlaysPresent = overlaysPresent || obj.overlay;\r\n\t\t\tbaseLayersPresent = baseLayersPresent || !obj.overlay;\r\n\t\t\tbaseLayersCount += !obj.overlay ? 1 : 0;\r\n\t\t}\r\n\r\n\t\t// Hide base layers section if there's only one layer.\r\n\t\tif (this.options.hideSingleBase) {\r\n\t\t\tbaseLayersPresent = baseLayersPresent && baseLayersCount > 1;\r\n\t\t\tthis._baseLayersList.style.display = baseLayersPresent ? '' : 'none';\r\n\t\t}\r\n\r\n\t\tthis._separator.style.display = overlaysPresent && baseLayersPresent ? '' : 'none';\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_onLayerChange: function (e) {\r\n\t\tif (!this._handlingClick) {\r\n\t\t\tthis._update();\r\n\t\t}\r\n\r\n\t\tvar obj = this._getLayer(Util.stamp(e.target));\r\n\r\n\t\t// @namespace Map\r\n\t\t// @section Layer events\r\n\t\t// @event baselayerchange: LayersControlEvent\r\n\t\t// Fired when the base layer is changed through the [layers control](#control-layers).\r\n\t\t// @event overlayadd: LayersControlEvent\r\n\t\t// Fired when an overlay is selected through the [layers control](#control-layers).\r\n\t\t// @event overlayremove: LayersControlEvent\r\n\t\t// Fired when an overlay is deselected through the [layers control](#control-layers).\r\n\t\t// @namespace Control.Layers\r\n\t\tvar type = obj.overlay ?\r\n\t\t\t(e.type === 'add' ? 'overlayadd' : 'overlayremove') :\r\n\t\t\t(e.type === 'add' ? 'baselayerchange' : null);\r\n\r\n\t\tif (type) {\r\n\t\t\tthis._map.fire(type, obj);\r\n\t\t}\r\n\t},\r\n\r\n\t// IE7 bugs out if you create a radio dynamically, so you have to do it this hacky way (see https://stackoverflow.com/a/119079)\r\n\t_createRadioElement: function (name, checked) {\r\n\r\n\t\tvar radioHtml = '<input type=\"radio\" class=\"leaflet-control-layers-selector\" name=\"' +\r\n\t\t\t\tname + '\"' + (checked ? ' checked=\"checked\"' : '') + '/>';\r\n\r\n\t\tvar radioFragment = document.createElement('div');\r\n\t\tradioFragment.innerHTML = radioHtml;\r\n\r\n\t\treturn radioFragment.firstChild;\r\n\t},\r\n\r\n\t_addItem: function (obj) {\r\n\t\tvar label = document.createElement('label'),\r\n\t\t checked = this._map.hasLayer(obj.layer),\r\n\t\t input;\r\n\r\n\t\tif (obj.overlay) {\r\n\t\t\tinput = document.createElement('input');\r\n\t\t\tinput.type = 'checkbox';\r\n\t\t\tinput.className = 'leaflet-control-layers-selector';\r\n\t\t\tinput.defaultChecked = checked;\r\n\t\t} else {\r\n\t\t\tinput = this._createRadioElement('leaflet-base-layers_' + Util.stamp(this), checked);\r\n\t\t}\r\n\r\n\t\tthis._layerControlInputs.push(input);\r\n\t\tinput.layerId = Util.stamp(obj.layer);\r\n\r\n\t\tDomEvent.on(input, 'click', this._onInputClick, this);\r\n\r\n\t\tvar name = document.createElement('span');\r\n\t\tname.innerHTML = ' ' + obj.name;\r\n\r\n\t\t// Helps from preventing layer control flicker when checkboxes are disabled\r\n\t\t// https://github.com/Leaflet/Leaflet/issues/2771\r\n\t\tvar holder = document.createElement('span');\r\n\r\n\t\tlabel.appendChild(holder);\r\n\t\tholder.appendChild(input);\r\n\t\tholder.appendChild(name);\r\n\r\n\t\tvar container = obj.overlay ? this._overlaysList : this._baseLayersList;\r\n\t\tcontainer.appendChild(label);\r\n\r\n\t\tthis._checkDisabledLayers();\r\n\t\treturn label;\r\n\t},\r\n\r\n\t_onInputClick: function () {\r\n\t\t// expanding the control on mobile with a click can cause adding a layer - we don't want this\r\n\t\tif (this._preventClick) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar inputs = this._layerControlInputs,\r\n\t\t input, layer;\r\n\t\tvar addedLayers = [],\r\n\t\t removedLayers = [];\r\n\r\n\t\tthis._handlingClick = true;\r\n\r\n\t\tfor (var i = inputs.length - 1; i >= 0; i--) {\r\n\t\t\tinput = inputs[i];\r\n\t\t\tlayer = this._getLayer(input.layerId).layer;\r\n\r\n\t\t\tif (input.checked) {\r\n\t\t\t\taddedLayers.push(layer);\r\n\t\t\t} else if (!input.checked) {\r\n\t\t\t\tremovedLayers.push(layer);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Bugfix issue 2318: Should remove all old layers before readding new ones\r\n\t\tfor (i = 0; i < removedLayers.length; i++) {\r\n\t\t\tif (this._map.hasLayer(removedLayers[i])) {\r\n\t\t\t\tthis._map.removeLayer(removedLayers[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor (i = 0; i < addedLayers.length; i++) {\r\n\t\t\tif (!this._map.hasLayer(addedLayers[i])) {\r\n\t\t\t\tthis._map.addLayer(addedLayers[i]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._handlingClick = false;\r\n\r\n\t\tthis._refocusOnMap();\r\n\t},\r\n\r\n\t_checkDisabledLayers: function () {\r\n\t\tvar inputs = this._layerControlInputs,\r\n\t\t input,\r\n\t\t layer,\r\n\t\t zoom = this._map.getZoom();\r\n\r\n\t\tfor (var i = inputs.length - 1; i >= 0; i--) {\r\n\t\t\tinput = inputs[i];\r\n\t\t\tlayer = this._getLayer(input.layerId).layer;\r\n\t\t\tinput.disabled = (layer.options.minZoom !== undefined && zoom < layer.options.minZoom) ||\r\n\t\t\t (layer.options.maxZoom !== undefined && zoom > layer.options.maxZoom);\r\n\r\n\t\t}\r\n\t},\r\n\r\n\t_expandIfNotCollapsed: function () {\r\n\t\tif (this._map && !this.options.collapsed) {\r\n\t\t\tthis.expand();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_expandSafely: function () {\r\n\t\tvar section = this._section;\r\n\t\tthis._preventClick = true;\r\n\t\tDomEvent.on(section, 'click', DomEvent.preventDefault);\r\n\t\tthis.expand();\r\n\t\tvar that = this;\r\n\t\tsetTimeout(function () {\r\n\t\t\tDomEvent.off(section, 'click', DomEvent.preventDefault);\r\n\t\t\tthat._preventClick = false;\r\n\t\t});\r\n\t}\r\n\r\n});\r\n\r\n\r\n// @factory L.control.layers(baselayers?: Object, overlays?: Object, options?: Control.Layers options)\r\n// Creates a layers control with the given layers. Base layers will be switched with radio buttons, while overlays will be switched with checkboxes. Note that all base layers should be passed in the base layers object, but only one should be added to the map during map instantiation.\r\nexport var layers = function (baseLayers, overlays, options) {\r\n\treturn new Layers(baseLayers, overlays, options);\r\n};\r\n", "\r\nimport {Control} from './Control';\r\nimport {Map} from '../map/Map';\r\nimport * as DomUtil from '../dom/DomUtil';\r\nimport * as DomEvent from '../dom/DomEvent';\r\n\r\n/*\r\n * @class Control.Zoom\r\n * @aka L.Control.Zoom\r\n * @inherits Control\r\n *\r\n * A basic zoom control with two buttons (zoom in and zoom out). It is put on the map by default unless you set its [`zoomControl` option](#map-zoomcontrol) to `false`. Extends `Control`.\r\n */\r\n\r\nexport var Zoom = Control.extend({\r\n\t// @section\r\n\t// @aka Control.Zoom options\r\n\toptions: {\r\n\t\tposition: 'topleft',\r\n\r\n\t\t// @option zoomInText: String = '<span aria-hidden=\"true\">+</span>'\r\n\t\t// The text set on the 'zoom in' button.\r\n\t\tzoomInText: '<span aria-hidden=\"true\">+</span>',\r\n\r\n\t\t// @option zoomInTitle: String = 'Zoom in'\r\n\t\t// The title set on the 'zoom in' button.\r\n\t\tzoomInTitle: 'Zoom in',\r\n\r\n\t\t// @option zoomOutText: String = '<span aria-hidden=\"true\">−</span>'\r\n\t\t// The text set on the 'zoom out' button.\r\n\t\tzoomOutText: '<span aria-hidden=\"true\">−</span>',\r\n\r\n\t\t// @option zoomOutTitle: String = 'Zoom out'\r\n\t\t// The title set on the 'zoom out' button.\r\n\t\tzoomOutTitle: 'Zoom out'\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tvar zoomName = 'leaflet-control-zoom',\r\n\t\t container = DomUtil.create('div', zoomName + ' leaflet-bar'),\r\n\t\t options = this.options;\r\n\r\n\t\tthis._zoomInButton = this._createButton(options.zoomInText, options.zoomInTitle,\r\n\t\t zoomName + '-in', container, this._zoomIn);\r\n\t\tthis._zoomOutButton = this._createButton(options.zoomOutText, options.zoomOutTitle,\r\n\t\t zoomName + '-out', container, this._zoomOut);\r\n\r\n\t\tthis._updateDisabled();\r\n\t\tmap.on('zoomend zoomlevelschange', this._updateDisabled, this);\r\n\r\n\t\treturn container;\r\n\t},\r\n\r\n\tonRemove: function (map) {\r\n\t\tmap.off('zoomend zoomlevelschange', this._updateDisabled, this);\r\n\t},\r\n\r\n\tdisable: function () {\r\n\t\tthis._disabled = true;\r\n\t\tthis._updateDisabled();\r\n\t\treturn this;\r\n\t},\r\n\r\n\tenable: function () {\r\n\t\tthis._disabled = false;\r\n\t\tthis._updateDisabled();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_zoomIn: function (e) {\r\n\t\tif (!this._disabled && this._map._zoom < this._map.getMaxZoom()) {\r\n\t\t\tthis._map.zoomIn(this._map.options.zoomDelta * (e.shiftKey ? 3 : 1));\r\n\t\t}\r\n\t},\r\n\r\n\t_zoomOut: function (e) {\r\n\t\tif (!this._disabled && this._map._zoom > this._map.getMinZoom()) {\r\n\t\t\tthis._map.zoomOut(this._map.options.zoomDelta * (e.shiftKey ? 3 : 1));\r\n\t\t}\r\n\t},\r\n\r\n\t_createButton: function (html, title, className, container, fn) {\r\n\t\tvar link = DomUtil.create('a', className, container);\r\n\t\tlink.innerHTML = html;\r\n\t\tlink.href = '#';\r\n\t\tlink.title = title;\r\n\r\n\t\t/*\r\n\t\t * Will force screen readers like VoiceOver to read this as \"Zoom in - button\"\r\n\t\t */\r\n\t\tlink.setAttribute('role', 'button');\r\n\t\tlink.setAttribute('aria-label', title);\r\n\r\n\t\tDomEvent.disableClickPropagation(link);\r\n\t\tDomEvent.on(link, 'click', DomEvent.stop);\r\n\t\tDomEvent.on(link, 'click', fn, this);\r\n\t\tDomEvent.on(link, 'click', this._refocusOnMap, this);\r\n\r\n\t\treturn link;\r\n\t},\r\n\r\n\t_updateDisabled: function () {\r\n\t\tvar map = this._map,\r\n\t\t className = 'leaflet-disabled';\r\n\r\n\t\tDomUtil.removeClass(this._zoomInButton, className);\r\n\t\tDomUtil.removeClass(this._zoomOutButton, className);\r\n\t\tthis._zoomInButton.setAttribute('aria-disabled', 'false');\r\n\t\tthis._zoomOutButton.setAttribute('aria-disabled', 'false');\r\n\r\n\t\tif (this._disabled || map._zoom === map.getMinZoom()) {\r\n\t\t\tDomUtil.addClass(this._zoomOutButton, className);\r\n\t\t\tthis._zoomOutButton.setAttribute('aria-disabled', 'true');\r\n\t\t}\r\n\t\tif (this._disabled || map._zoom === map.getMaxZoom()) {\r\n\t\t\tDomUtil.addClass(this._zoomInButton, className);\r\n\t\t\tthis._zoomInButton.setAttribute('aria-disabled', 'true');\r\n\t\t}\r\n\t}\r\n});\r\n\r\n// @namespace Map\r\n// @section Control options\r\n// @option zoomControl: Boolean = true\r\n// Whether a [zoom control](#control-zoom) is added to the map by default.\r\nMap.mergeOptions({\r\n\tzoomControl: true\r\n});\r\n\r\nMap.addInitHook(function () {\r\n\tif (this.options.zoomControl) {\r\n\t\t// @section Controls\r\n\t\t// @property zoomControl: Control.Zoom\r\n\t\t// The default zoom control (only available if the\r\n\t\t// [`zoomControl` option](#map-zoomcontrol) was `true` when creating the map).\r\n\t\tthis.zoomControl = new Zoom();\r\n\t\tthis.addControl(this.zoomControl);\r\n\t}\r\n});\r\n\r\n// @namespace Control.Zoom\r\n// @factory L.control.zoom(options: Control.Zoom options)\r\n// Creates a zoom control\r\nexport var zoom = function (options) {\r\n\treturn new Zoom(options);\r\n};\r\n", "\nimport {Control} from './Control';\nimport * as DomUtil from '../dom/DomUtil';\n\n/*\n * @class Control.Scale\n * @aka L.Control.Scale\n * @inherits Control\n *\n * A simple scale control that shows the scale of the current center of screen in metric (m/km) and imperial (mi/ft) systems. Extends `Control`.\n *\n * @example\n *\n * ```js\n * L.control.scale().addTo(map);\n * ```\n */\n\nexport var Scale = Control.extend({\n\t// @section\n\t// @aka Control.Scale options\n\toptions: {\n\t\tposition: 'bottomleft',\n\n\t\t// @option maxWidth: Number = 100\n\t\t// Maximum width of the control in pixels. The width is set dynamically to show round values (e.g. 100, 200, 500).\n\t\tmaxWidth: 100,\n\n\t\t// @option metric: Boolean = True\n\t\t// Whether to show the metric scale line (m/km).\n\t\tmetric: true,\n\n\t\t// @option imperial: Boolean = True\n\t\t// Whether to show the imperial scale line (mi/ft).\n\t\timperial: true\n\n\t\t// @option updateWhenIdle: Boolean = false\n\t\t// If `true`, the control is updated on [`moveend`](#map-moveend), otherwise it's always up-to-date (updated on [`move`](#map-move)).\n\t},\n\n\tonAdd: function (map) {\n\t\tvar className = 'leaflet-control-scale',\n\t\t container = DomUtil.create('div', className),\n\t\t options = this.options;\n\n\t\tthis._addScales(options, className + '-line', container);\n\n\t\tmap.on(options.updateWhenIdle ? 'moveend' : 'move', this._update, this);\n\t\tmap.whenReady(this._update, this);\n\n\t\treturn container;\n\t},\n\n\tonRemove: function (map) {\n\t\tmap.off(this.options.updateWhenIdle ? 'moveend' : 'move', this._update, this);\n\t},\n\n\t_addScales: function (options, className, container) {\n\t\tif (options.metric) {\n\t\t\tthis._mScale = DomUtil.create('div', className, container);\n\t\t}\n\t\tif (options.imperial) {\n\t\t\tthis._iScale = DomUtil.create('div', className, container);\n\t\t}\n\t},\n\n\t_update: function () {\n\t\tvar map = this._map,\n\t\t y = map.getSize().y / 2;\n\n\t\tvar maxMeters = map.distance(\n\t\t\tmap.containerPointToLatLng([0, y]),\n\t\t\tmap.containerPointToLatLng([this.options.maxWidth, y]));\n\n\t\tthis._updateScales(maxMeters);\n\t},\n\n\t_updateScales: function (maxMeters) {\n\t\tif (this.options.metric && maxMeters) {\n\t\t\tthis._updateMetric(maxMeters);\n\t\t}\n\t\tif (this.options.imperial && maxMeters) {\n\t\t\tthis._updateImperial(maxMeters);\n\t\t}\n\t},\n\n\t_updateMetric: function (maxMeters) {\n\t\tvar meters = this._getRoundNum(maxMeters),\n\t\t label = meters < 1000 ? meters + ' m' : (meters / 1000) + ' km';\n\n\t\tthis._updateScale(this._mScale, label, meters / maxMeters);\n\t},\n\n\t_updateImperial: function (maxMeters) {\n\t\tvar maxFeet = maxMeters * 3.2808399,\n\t\t maxMiles, miles, feet;\n\n\t\tif (maxFeet > 5280) {\n\t\t\tmaxMiles = maxFeet / 5280;\n\t\t\tmiles = this._getRoundNum(maxMiles);\n\t\t\tthis._updateScale(this._iScale, miles + ' mi', miles / maxMiles);\n\n\t\t} else {\n\t\t\tfeet = this._getRoundNum(maxFeet);\n\t\t\tthis._updateScale(this._iScale, feet + ' ft', feet / maxFeet);\n\t\t}\n\t},\n\n\t_updateScale: function (scale, text, ratio) {\n\t\tscale.style.width = Math.round(this.options.maxWidth * ratio) + 'px';\n\t\tscale.innerHTML = text;\n\t},\n\n\t_getRoundNum: function (num) {\n\t\tvar pow10 = Math.pow(10, (Math.floor(num) + '').length - 1),\n\t\t d = num / pow10;\n\n\t\td = d >= 10 ? 10 :\n\t\t d >= 5 ? 5 :\n\t\t d >= 3 ? 3 :\n\t\t d >= 2 ? 2 : 1;\n\n\t\treturn pow10 * d;\n\t}\n});\n\n\n// @factory L.control.scale(options?: Control.Scale options)\n// Creates an scale control with the given options.\nexport var scale = function (options) {\n\treturn new Scale(options);\n};\n", "\r\nimport {Control} from './Control';\r\nimport {Map} from '../map/Map';\r\nimport * as Util from '../core/Util';\r\nimport * as DomEvent from '../dom/DomEvent';\r\nimport * as DomUtil from '../dom/DomUtil';\r\nimport Browser from '../core/Browser';\r\n\r\nvar ukrainianFlag = '<svg aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"8\" viewBox=\"0 0 12 8\" class=\"leaflet-attribution-flag\"><path fill=\"#4C7BE1\" d=\"M0 0h12v4H0z\"/><path fill=\"#FFD500\" d=\"M0 4h12v3H0z\"/><path fill=\"#E0BC00\" d=\"M0 7h12v1H0z\"/></svg>';\r\n\r\n\r\n/*\r\n * @class Control.Attribution\r\n * @aka L.Control.Attribution\r\n * @inherits Control\r\n *\r\n * The attribution control allows you to display attribution data in a small text box on a map. It is put on the map by default unless you set its [`attributionControl` option](#map-attributioncontrol) to `false`, and it fetches attribution texts from layers with the [`getAttribution` method](#layer-getattribution) automatically. Extends Control.\r\n */\r\n\r\nexport var Attribution = Control.extend({\r\n\t// @section\r\n\t// @aka Control.Attribution options\r\n\toptions: {\r\n\t\tposition: 'bottomright',\r\n\r\n\t\t// @option prefix: String|false = 'Leaflet'\r\n\t\t// The HTML text shown before the attributions. Pass `false` to disable.\r\n\t\tprefix: '<a href=\"https://leafletjs.com\" title=\"A JavaScript library for interactive maps\">' + (Browser.inlineSvg ? ukrainianFlag + ' ' : '') + 'Leaflet</a>'\r\n\t},\r\n\r\n\tinitialize: function (options) {\r\n\t\tUtil.setOptions(this, options);\r\n\r\n\t\tthis._attributions = {};\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tmap.attributionControl = this;\r\n\t\tthis._container = DomUtil.create('div', 'leaflet-control-attribution');\r\n\t\tDomEvent.disableClickPropagation(this._container);\r\n\r\n\t\t// TODO ugly, refactor\r\n\t\tfor (var i in map._layers) {\r\n\t\t\tif (map._layers[i].getAttribution) {\r\n\t\t\t\tthis.addAttribution(map._layers[i].getAttribution());\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._update();\r\n\r\n\t\tmap.on('layeradd', this._addAttribution, this);\r\n\r\n\t\treturn this._container;\r\n\t},\r\n\r\n\tonRemove: function (map) {\r\n\t\tmap.off('layeradd', this._addAttribution, this);\r\n\t},\r\n\r\n\t_addAttribution: function (ev) {\r\n\t\tif (ev.layer.getAttribution) {\r\n\t\t\tthis.addAttribution(ev.layer.getAttribution());\r\n\t\t\tev.layer.once('remove', function () {\r\n\t\t\t\tthis.removeAttribution(ev.layer.getAttribution());\r\n\t\t\t}, this);\r\n\t\t}\r\n\t},\r\n\r\n\t// @method setPrefix(prefix: String|false): this\r\n\t// The HTML text shown before the attributions. Pass `false` to disable.\r\n\tsetPrefix: function (prefix) {\r\n\t\tthis.options.prefix = prefix;\r\n\t\tthis._update();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method addAttribution(text: String): this\r\n\t// Adds an attribution text (e.g. `'© OpenStreetMap contributors'`).\r\n\taddAttribution: function (text) {\r\n\t\tif (!text) { return this; }\r\n\r\n\t\tif (!this._attributions[text]) {\r\n\t\t\tthis._attributions[text] = 0;\r\n\t\t}\r\n\t\tthis._attributions[text]++;\r\n\r\n\t\tthis._update();\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method removeAttribution(text: String): this\r\n\t// Removes an attribution text.\r\n\tremoveAttribution: function (text) {\r\n\t\tif (!text) { return this; }\r\n\r\n\t\tif (this._attributions[text]) {\r\n\t\t\tthis._attributions[text]--;\r\n\t\t\tthis._update();\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_update: function () {\r\n\t\tif (!this._map) { return; }\r\n\r\n\t\tvar attribs = [];\r\n\r\n\t\tfor (var i in this._attributions) {\r\n\t\t\tif (this._attributions[i]) {\r\n\t\t\t\tattribs.push(i);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar prefixAndAttribs = [];\r\n\r\n\t\tif (this.options.prefix) {\r\n\t\t\tprefixAndAttribs.push(this.options.prefix);\r\n\t\t}\r\n\t\tif (attribs.length) {\r\n\t\t\tprefixAndAttribs.push(attribs.join(', '));\r\n\t\t}\r\n\r\n\t\tthis._container.innerHTML = prefixAndAttribs.join(' <span aria-hidden=\"true\">|</span> ');\r\n\t}\r\n});\r\n\r\n// @namespace Map\r\n// @section Control options\r\n// @option attributionControl: Boolean = true\r\n// Whether a [attribution control](#control-attribution) is added to the map by default.\r\nMap.mergeOptions({\r\n\tattributionControl: true\r\n});\r\n\r\nMap.addInitHook(function () {\r\n\tif (this.options.attributionControl) {\r\n\t\tnew Attribution().addTo(this);\r\n\t}\r\n});\r\n\r\n// @namespace Control.Attribution\r\n// @factory L.control.attribution(options: Control.Attribution options)\r\n// Creates an attribution control.\r\nexport var attribution = function (options) {\r\n\treturn new Attribution(options);\r\n};\r\n", "import {Control, control} from './Control';\nimport {Layers, layers} from './Control.Layers';\nimport {Zoom, zoom} from './Control.Zoom';\nimport {Scale, scale} from './Control.Scale';\nimport {Attribution, attribution} from './Control.Attribution';\n\nControl.Layers = Layers;\nControl.Zoom = Zoom;\nControl.Scale = Scale;\nControl.Attribution = Attribution;\n\ncontrol.layers = layers;\ncontrol.zoom = zoom;\ncontrol.scale = scale;\ncontrol.attribution = attribution;\n\nexport {Control, control};\n", "import {Class} from './Class';\n\n/*\n\tL.Handler is a base class for handler classes that are used internally to inject\n\tinteraction features like dragging to classes like Map and Marker.\n*/\n\n// @class Handler\n// @aka L.Handler\n// Abstract class for map interaction handlers\n\nexport var Handler = Class.extend({\n\tinitialize: function (map) {\n\t\tthis._map = map;\n\t},\n\n\t// @method enable(): this\n\t// Enables the handler\n\tenable: function () {\n\t\tif (this._enabled) { return this; }\n\n\t\tthis._enabled = true;\n\t\tthis.addHooks();\n\t\treturn this;\n\t},\n\n\t// @method disable(): this\n\t// Disables the handler\n\tdisable: function () {\n\t\tif (!this._enabled) { return this; }\n\n\t\tthis._enabled = false;\n\t\tthis.removeHooks();\n\t\treturn this;\n\t},\n\n\t// @method enabled(): Boolean\n\t// Returns `true` if the handler is enabled\n\tenabled: function () {\n\t\treturn !!this._enabled;\n\t}\n\n\t// @section Extension methods\n\t// Classes inheriting from `Handler` must implement the two following methods:\n\t// @method addHooks()\n\t// Called when the handler is enabled, should add event hooks.\n\t// @method removeHooks()\n\t// Called when the handler is disabled, should remove the event hooks added previously.\n});\n\n// @section There is static function which can be called without instantiating L.Handler:\n// @function addTo(map: Map, name: String): this\n// Adds a new Handler to the given map with the given name.\nHandler.addTo = function (map, name) {\n\tmap.addHandler(name, this);\n\treturn this;\n};\n", "import Browser from './Browser';\nexport {Browser};\n\nexport {Class} from './Class';\n\nimport {Evented} from './Events';\nimport {Events} from './Events';\nexport {Evented};\nexport var Mixin = {Events: Events};\n\nexport {Handler} from './Handler';\n\nimport * as Util from './Util';\nexport {Util};\nexport {extend, bind, stamp, setOptions} from './Util';\n", "import {Evented} from '../core/Events';\r\nimport Browser from '../core/Browser';\r\nimport * as DomEvent from './DomEvent';\r\nimport * as DomUtil from './DomUtil';\r\nimport * as Util from '../core/Util';\r\nimport {Point} from '../geometry/Point';\r\n\r\n/*\r\n * @class Draggable\r\n * @aka L.Draggable\r\n * @inherits Evented\r\n *\r\n * A class for making DOM elements draggable (including touch support).\r\n * Used internally for map and marker dragging. Only works for elements\r\n * that were positioned with [`L.DomUtil.setPosition`](#domutil-setposition).\r\n *\r\n * @example\r\n * ```js\r\n * var draggable = new L.Draggable(elementToDrag);\r\n * draggable.enable();\r\n * ```\r\n */\r\n\r\nvar START = Browser.touch ? 'touchstart mousedown' : 'mousedown';\r\n\r\nexport var Draggable = Evented.extend({\r\n\r\n\toptions: {\r\n\t\t// @section\r\n\t\t// @aka Draggable options\r\n\t\t// @option clickTolerance: Number = 3\r\n\t\t// The max number of pixels a user can shift the mouse pointer during a click\r\n\t\t// for it to be considered a valid click (as opposed to a mouse drag).\r\n\t\tclickTolerance: 3\r\n\t},\r\n\r\n\t// @constructor L.Draggable(el: HTMLElement, dragHandle?: HTMLElement, preventOutline?: Boolean, options?: Draggable options)\r\n\t// Creates a `Draggable` object for moving `el` when you start dragging the `dragHandle` element (equals `el` itself by default).\r\n\tinitialize: function (element, dragStartTarget, preventOutline, options) {\r\n\t\tUtil.setOptions(this, options);\r\n\r\n\t\tthis._element = element;\r\n\t\tthis._dragStartTarget = dragStartTarget || element;\r\n\t\tthis._preventOutline = preventOutline;\r\n\t},\r\n\r\n\t// @method enable()\r\n\t// Enables the dragging ability\r\n\tenable: function () {\r\n\t\tif (this._enabled) { return; }\r\n\r\n\t\tDomEvent.on(this._dragStartTarget, START, this._onDown, this);\r\n\r\n\t\tthis._enabled = true;\r\n\t},\r\n\r\n\t// @method disable()\r\n\t// Disables the dragging ability\r\n\tdisable: function () {\r\n\t\tif (!this._enabled) { return; }\r\n\r\n\t\t// If we're currently dragging this draggable,\r\n\t\t// disabling it counts as first ending the drag.\r\n\t\tif (Draggable._dragging === this) {\r\n\t\t\tthis.finishDrag(true);\r\n\t\t}\r\n\r\n\t\tDomEvent.off(this._dragStartTarget, START, this._onDown, this);\r\n\r\n\t\tthis._enabled = false;\r\n\t\tthis._moved = false;\r\n\t},\r\n\r\n\t_onDown: function (e) {\r\n\t\t// Ignore the event if disabled; this happens in IE11\r\n\t\t// under some circumstances, see #3666.\r\n\t\tif (!this._enabled) { return; }\r\n\r\n\t\tthis._moved = false;\r\n\r\n\t\tif (DomUtil.hasClass(this._element, 'leaflet-zoom-anim')) { return; }\r\n\r\n\t\tif (e.touches && e.touches.length !== 1) {\r\n\t\t\t// Finish dragging to avoid conflict with touchZoom\r\n\t\t\tif (Draggable._dragging === this) {\r\n\t\t\t\tthis.finishDrag();\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (Draggable._dragging || e.shiftKey || ((e.which !== 1) && (e.button !== 1) && !e.touches)) { return; }\r\n\t\tDraggable._dragging = this; // Prevent dragging multiple objects at once.\r\n\r\n\t\tif (this._preventOutline) {\r\n\t\t\tDomUtil.preventOutline(this._element);\r\n\t\t}\r\n\r\n\t\tDomUtil.disableImageDrag();\r\n\t\tDomUtil.disableTextSelection();\r\n\r\n\t\tif (this._moving) { return; }\r\n\r\n\t\t// @event down: Event\r\n\t\t// Fired when a drag is about to start.\r\n\t\tthis.fire('down');\r\n\r\n\t\tvar first = e.touches ? e.touches[0] : e,\r\n\t\t sizedParent = DomUtil.getSizedParentNode(this._element);\r\n\r\n\t\tthis._startPoint = new Point(first.clientX, first.clientY);\r\n\t\tthis._startPos = DomUtil.getPosition(this._element);\r\n\r\n\t\t// Cache the scale, so that we can continuously compensate for it during drag (_onMove).\r\n\t\tthis._parentScale = DomUtil.getScale(sizedParent);\r\n\r\n\t\tvar mouseevent = e.type === 'mousedown';\r\n\t\tDomEvent.on(document, mouseevent ? 'mousemove' : 'touchmove', this._onMove, this);\r\n\t\tDomEvent.on(document, mouseevent ? 'mouseup' : 'touchend touchcancel', this._onUp, this);\r\n\t},\r\n\r\n\t_onMove: function (e) {\r\n\t\t// Ignore the event if disabled; this happens in IE11\r\n\t\t// under some circumstances, see #3666.\r\n\t\tif (!this._enabled) { return; }\r\n\r\n\t\tif (e.touches && e.touches.length > 1) {\r\n\t\t\tthis._moved = true;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar first = (e.touches && e.touches.length === 1 ? e.touches[0] : e),\r\n\t\t offset = new Point(first.clientX, first.clientY)._subtract(this._startPoint);\r\n\r\n\t\tif (!offset.x && !offset.y) { return; }\r\n\t\tif (Math.abs(offset.x) + Math.abs(offset.y) < this.options.clickTolerance) { return; }\r\n\r\n\t\t// We assume that the parent container's position, border and scale do not change for the duration of the drag.\r\n\t\t// Therefore there is no need to account for the position and border (they are eliminated by the subtraction)\r\n\t\t// and we can use the cached value for the scale.\r\n\t\toffset.x /= this._parentScale.x;\r\n\t\toffset.y /= this._parentScale.y;\r\n\r\n\t\tDomEvent.preventDefault(e);\r\n\r\n\t\tif (!this._moved) {\r\n\t\t\t// @event dragstart: Event\r\n\t\t\t// Fired when a drag starts\r\n\t\t\tthis.fire('dragstart');\r\n\r\n\t\t\tthis._moved = true;\r\n\r\n\t\t\tDomUtil.addClass(document.body, 'leaflet-dragging');\r\n\r\n\t\t\tthis._lastTarget = e.target || e.srcElement;\r\n\t\t\t// IE and Edge do not give the <use> element, so fetch it\r\n\t\t\t// if necessary\r\n\t\t\tif (window.SVGElementInstance && this._lastTarget instanceof window.SVGElementInstance) {\r\n\t\t\t\tthis._lastTarget = this._lastTarget.correspondingUseElement;\r\n\t\t\t}\r\n\t\t\tDomUtil.addClass(this._lastTarget, 'leaflet-drag-target');\r\n\t\t}\r\n\r\n\t\tthis._newPos = this._startPos.add(offset);\r\n\t\tthis._moving = true;\r\n\r\n\t\tthis._lastEvent = e;\r\n\t\tthis._updatePosition();\r\n\t},\r\n\r\n\t_updatePosition: function () {\r\n\t\tvar e = {originalEvent: this._lastEvent};\r\n\r\n\t\t// @event predrag: Event\r\n\t\t// Fired continuously during dragging *before* each corresponding\r\n\t\t// update of the element's position.\r\n\t\tthis.fire('predrag', e);\r\n\t\tDomUtil.setPosition(this._element, this._newPos);\r\n\r\n\t\t// @event drag: Event\r\n\t\t// Fired continuously during dragging.\r\n\t\tthis.fire('drag', e);\r\n\t},\r\n\r\n\t_onUp: function () {\r\n\t\t// Ignore the event if disabled; this happens in IE11\r\n\t\t// under some circumstances, see #3666.\r\n\t\tif (!this._enabled) { return; }\r\n\t\tthis.finishDrag();\r\n\t},\r\n\r\n\tfinishDrag: function (noInertia) {\r\n\t\tDomUtil.removeClass(document.body, 'leaflet-dragging');\r\n\r\n\t\tif (this._lastTarget) {\r\n\t\t\tDomUtil.removeClass(this._lastTarget, 'leaflet-drag-target');\r\n\t\t\tthis._lastTarget = null;\r\n\t\t}\r\n\r\n\t\tDomEvent.off(document, 'mousemove touchmove', this._onMove, this);\r\n\t\tDomEvent.off(document, 'mouseup touchend touchcancel', this._onUp, this);\r\n\r\n\t\tDomUtil.enableImageDrag();\r\n\t\tDomUtil.enableTextSelection();\r\n\r\n\t\tvar fireDragend = this._moved && this._moving;\r\n\r\n\t\tthis._moving = false;\r\n\t\tDraggable._dragging = false;\r\n\r\n\t\tif (fireDragend) {\r\n\t\t\t// @event dragend: DragEndEvent\r\n\t\t\t// Fired when the drag ends.\r\n\t\t\tthis.fire('dragend', {\r\n\t\t\t\tnoInertia: noInertia,\r\n\t\t\t\tdistance: this._newPos.distanceTo(this._startPos)\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n});\r\n", "import * as LineUtil from './LineUtil';\r\nimport {toLatLng} from '../geo/LatLng';\r\nimport {toPoint} from './Point';\r\nimport {toLatLngBounds} from '../geo/LatLngBounds';\r\n/*\r\n * @namespace PolyUtil\r\n * Various utility functions for polygon geometries.\r\n */\r\n\r\n/* @function clipPolygon(points: Point[], bounds: Bounds, round?: Boolean): Point[]\r\n * Clips the polygon geometry defined by the given `points` by the given bounds (using the [Sutherland-Hodgman algorithm](https://en.wikipedia.org/wiki/Sutherland%E2%80%93Hodgman_algorithm)).\r\n * Used by Leaflet to only show polygon points that are on the screen or near, increasing\r\n * performance. Note that polygon points needs different algorithm for clipping\r\n * than polyline, so there's a separate method for it.\r\n */\r\nexport function clipPolygon(points, bounds, round) {\r\n\tvar clippedPoints,\r\n\t edges = [1, 4, 2, 8],\r\n\t i, j, k,\r\n\t a, b,\r\n\t len, edge, p;\r\n\r\n\tfor (i = 0, len = points.length; i < len; i++) {\r\n\t\tpoints[i]._code = LineUtil._getBitCode(points[i], bounds);\r\n\t}\r\n\r\n\t// for each edge (left, bottom, right, top)\r\n\tfor (k = 0; k < 4; k++) {\r\n\t\tedge = edges[k];\r\n\t\tclippedPoints = [];\r\n\r\n\t\tfor (i = 0, len = points.length, j = len - 1; i < len; j = i++) {\r\n\t\t\ta = points[i];\r\n\t\t\tb = points[j];\r\n\r\n\t\t\t// if a is inside the clip window\r\n\t\t\tif (!(a._code & edge)) {\r\n\t\t\t\t// if b is outside the clip window (a->b goes out of screen)\r\n\t\t\t\tif (b._code & edge) {\r\n\t\t\t\t\tp = LineUtil._getEdgeIntersection(b, a, edge, bounds, round);\r\n\t\t\t\t\tp._code = LineUtil._getBitCode(p, bounds);\r\n\t\t\t\t\tclippedPoints.push(p);\r\n\t\t\t\t}\r\n\t\t\t\tclippedPoints.push(a);\r\n\r\n\t\t\t// else if b is inside the clip window (a->b enters the screen)\r\n\t\t\t} else if (!(b._code & edge)) {\r\n\t\t\t\tp = LineUtil._getEdgeIntersection(b, a, edge, bounds, round);\r\n\t\t\t\tp._code = LineUtil._getBitCode(p, bounds);\r\n\t\t\t\tclippedPoints.push(p);\r\n\t\t\t}\r\n\t\t}\r\n\t\tpoints = clippedPoints;\r\n\t}\r\n\r\n\treturn points;\r\n}\r\n\r\n/* @function polygonCenter(latlngs: LatLng[], crs: CRS): LatLng\r\n * Returns the center ([centroid](http://en.wikipedia.org/wiki/Centroid)) of the passed LatLngs (first ring) from a polygon.\r\n */\r\nexport function polygonCenter(latlngs, crs) {\r\n\tvar i, j, p1, p2, f, area, x, y, center;\r\n\r\n\tif (!latlngs || latlngs.length === 0) {\r\n\t\tthrow new Error('latlngs not passed');\r\n\t}\r\n\r\n\tif (!LineUtil.isFlat(latlngs)) {\r\n\t\tconsole.warn('latlngs are not flat! Only the first ring will be used');\r\n\t\tlatlngs = latlngs[0];\r\n\t}\r\n\r\n\tvar centroidLatLng = toLatLng([0, 0]);\r\n\r\n\tvar bounds = toLatLngBounds(latlngs);\r\n\tvar areaBounds = bounds.getNorthWest().distanceTo(bounds.getSouthWest()) * bounds.getNorthEast().distanceTo(bounds.getNorthWest());\r\n\t// tests showed that below 1700 rounding errors are happening\r\n\tif (areaBounds < 1700) {\r\n\t\t// getting a inexact center, to move the latlngs near to [0, 0] to prevent rounding errors\r\n\t\tcentroidLatLng = centroid(latlngs);\r\n\t}\r\n\r\n\tvar len = latlngs.length;\r\n\tvar points = [];\r\n\tfor (i = 0; i < len; i++) {\r\n\t\tvar latlng = toLatLng(latlngs[i]);\r\n\t\tpoints.push(crs.project(toLatLng([latlng.lat - centroidLatLng.lat, latlng.lng - centroidLatLng.lng])));\r\n\t}\r\n\r\n\tarea = x = y = 0;\r\n\r\n\t// polygon centroid algorithm;\r\n\tfor (i = 0, j = len - 1; i < len; j = i++) {\r\n\t\tp1 = points[i];\r\n\t\tp2 = points[j];\r\n\r\n\t\tf = p1.y * p2.x - p2.y * p1.x;\r\n\t\tx += (p1.x + p2.x) * f;\r\n\t\ty += (p1.y + p2.y) * f;\r\n\t\tarea += f * 3;\r\n\t}\r\n\r\n\tif (area === 0) {\r\n\t\t// Polygon is so small that all points are on same pixel.\r\n\t\tcenter = points[0];\r\n\t} else {\r\n\t\tcenter = [x / area, y / area];\r\n\t}\r\n\r\n\tvar latlngCenter = crs.unproject(toPoint(center));\r\n\treturn toLatLng([latlngCenter.lat + centroidLatLng.lat, latlngCenter.lng + centroidLatLng.lng]);\r\n}\r\n\r\n/* @function centroid(latlngs: LatLng[]): LatLng\r\n * Returns the 'center of mass' of the passed LatLngs.\r\n */\r\nexport function centroid(coords) {\r\n\tvar latSum = 0;\r\n\tvar lngSum = 0;\r\n\tvar len = 0;\r\n\tfor (var i = 0; i < coords.length; i++) {\r\n\t\tvar latlng = toLatLng(coords[i]);\r\n\t\tlatSum += latlng.lat;\r\n\t\tlngSum += latlng.lng;\r\n\t\tlen++;\r\n\t}\r\n\treturn toLatLng([latSum / len, lngSum / len]);\r\n}\r\n", "import {Point, toPoint} from './Point';\r\nimport * as Util from '../core/Util';\r\nimport {toLatLng} from '../geo/LatLng';\r\nimport {centroid} from './PolyUtil';\r\nimport {toLatLngBounds} from '../geo/LatLngBounds';\r\n\r\n\r\n/*\r\n * @namespace LineUtil\r\n *\r\n * Various utility functions for polyline points processing, used by Leaflet internally to make polylines lightning-fast.\r\n */\r\n\r\n// Simplify polyline with vertex reduction and Douglas-Peucker simplification.\r\n// Improves rendering performance dramatically by lessening the number of points to draw.\r\n\r\n// @function simplify(points: Point[], tolerance: Number): Point[]\r\n// Dramatically reduces the number of points in a polyline while retaining\r\n// its shape and returns a new array of simplified points, using the\r\n// [Ramer-Douglas-Peucker algorithm](https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm).\r\n// Used for a huge performance boost when processing/displaying Leaflet polylines for\r\n// each zoom level and also reducing visual noise. tolerance affects the amount of\r\n// simplification (lesser value means higher quality but slower and with more points).\r\n// Also released as a separated micro-library [Simplify.js](https://mourner.github.io/simplify-js/).\r\nexport function simplify(points, tolerance) {\r\n\tif (!tolerance || !points.length) {\r\n\t\treturn points.slice();\r\n\t}\r\n\r\n\tvar sqTolerance = tolerance * tolerance;\r\n\r\n\t // stage 1: vertex reduction\r\n\t points = _reducePoints(points, sqTolerance);\r\n\r\n\t // stage 2: Douglas-Peucker simplification\r\n\t points = _simplifyDP(points, sqTolerance);\r\n\r\n\treturn points;\r\n}\r\n\r\n// @function pointToSegmentDistance(p: Point, p1: Point, p2: Point): Number\r\n// Returns the distance between point `p` and segment `p1` to `p2`.\r\nexport function pointToSegmentDistance(p, p1, p2) {\r\n\treturn Math.sqrt(_sqClosestPointOnSegment(p, p1, p2, true));\r\n}\r\n\r\n// @function closestPointOnSegment(p: Point, p1: Point, p2: Point): Number\r\n// Returns the closest point from a point `p` on a segment `p1` to `p2`.\r\nexport function closestPointOnSegment(p, p1, p2) {\r\n\treturn _sqClosestPointOnSegment(p, p1, p2);\r\n}\r\n\r\n// Ramer-Douglas-Peucker simplification, see https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm\r\nfunction _simplifyDP(points, sqTolerance) {\r\n\r\n\tvar len = points.length,\r\n\t ArrayConstructor = typeof Uint8Array !== undefined + '' ? Uint8Array : Array,\r\n\t markers = new ArrayConstructor(len);\r\n\r\n\t markers[0] = markers[len - 1] = 1;\r\n\r\n\t_simplifyDPStep(points, markers, sqTolerance, 0, len - 1);\r\n\r\n\tvar i,\r\n\t newPoints = [];\r\n\r\n\tfor (i = 0; i < len; i++) {\r\n\t\tif (markers[i]) {\r\n\t\t\tnewPoints.push(points[i]);\r\n\t\t}\r\n\t}\r\n\r\n\treturn newPoints;\r\n}\r\n\r\nfunction _simplifyDPStep(points, markers, sqTolerance, first, last) {\r\n\r\n\tvar maxSqDist = 0,\r\n\tindex, i, sqDist;\r\n\r\n\tfor (i = first + 1; i <= last - 1; i++) {\r\n\t\tsqDist = _sqClosestPointOnSegment(points[i], points[first], points[last], true);\r\n\r\n\t\tif (sqDist > maxSqDist) {\r\n\t\t\tindex = i;\r\n\t\t\tmaxSqDist = sqDist;\r\n\t\t}\r\n\t}\r\n\r\n\tif (maxSqDist > sqTolerance) {\r\n\t\tmarkers[index] = 1;\r\n\r\n\t\t_simplifyDPStep(points, markers, sqTolerance, first, index);\r\n\t\t_simplifyDPStep(points, markers, sqTolerance, index, last);\r\n\t}\r\n}\r\n\r\n// reduce points that are too close to each other to a single point\r\nfunction _reducePoints(points, sqTolerance) {\r\n\tvar reducedPoints = [points[0]];\r\n\r\n\tfor (var i = 1, prev = 0, len = points.length; i < len; i++) {\r\n\t\tif (_sqDist(points[i], points[prev]) > sqTolerance) {\r\n\t\t\treducedPoints.push(points[i]);\r\n\t\t\tprev = i;\r\n\t\t}\r\n\t}\r\n\tif (prev < len - 1) {\r\n\t\treducedPoints.push(points[len - 1]);\r\n\t}\r\n\treturn reducedPoints;\r\n}\r\n\r\nvar _lastCode;\r\n\r\n// @function clipSegment(a: Point, b: Point, bounds: Bounds, useLastCode?: Boolean, round?: Boolean): Point[]|Boolean\r\n// Clips the segment a to b by rectangular bounds with the\r\n// [Cohen-Sutherland algorithm](https://en.wikipedia.org/wiki/Cohen%E2%80%93Sutherland_algorithm)\r\n// (modifying the segment points directly!). Used by Leaflet to only show polyline\r\n// points that are on the screen or near, increasing performance.\r\nexport function clipSegment(a, b, bounds, useLastCode, round) {\r\n\tvar codeA = useLastCode ? _lastCode : _getBitCode(a, bounds),\r\n\t codeB = _getBitCode(b, bounds),\r\n\r\n\t codeOut, p, newCode;\r\n\r\n\t // save 2nd code to avoid calculating it on the next segment\r\n\t _lastCode = codeB;\r\n\r\n\twhile (true) {\r\n\t\t// if a,b is inside the clip window (trivial accept)\r\n\t\tif (!(codeA | codeB)) {\r\n\t\t\treturn [a, b];\r\n\t\t}\r\n\r\n\t\t// if a,b is outside the clip window (trivial reject)\r\n\t\tif (codeA & codeB) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t// other cases\r\n\t\tcodeOut = codeA || codeB;\r\n\t\tp = _getEdgeIntersection(a, b, codeOut, bounds, round);\r\n\t\tnewCode = _getBitCode(p, bounds);\r\n\r\n\t\tif (codeOut === codeA) {\r\n\t\t\ta = p;\r\n\t\t\tcodeA = newCode;\r\n\t\t} else {\r\n\t\t\tb = p;\r\n\t\t\tcodeB = newCode;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport function _getEdgeIntersection(a, b, code, bounds, round) {\r\n\tvar dx = b.x - a.x,\r\n\t dy = b.y - a.y,\r\n\t min = bounds.min,\r\n\t max = bounds.max,\r\n\t x, y;\r\n\r\n\tif (code & 8) { // top\r\n\t\tx = a.x + dx * (max.y - a.y) / dy;\r\n\t\ty = max.y;\r\n\r\n\t} else if (code & 4) { // bottom\r\n\t\tx = a.x + dx * (min.y - a.y) / dy;\r\n\t\ty = min.y;\r\n\r\n\t} else if (code & 2) { // right\r\n\t\tx = max.x;\r\n\t\ty = a.y + dy * (max.x - a.x) / dx;\r\n\r\n\t} else if (code & 1) { // left\r\n\t\tx = min.x;\r\n\t\ty = a.y + dy * (min.x - a.x) / dx;\r\n\t}\r\n\r\n\treturn new Point(x, y, round);\r\n}\r\n\r\nexport function _getBitCode(p, bounds) {\r\n\tvar code = 0;\r\n\r\n\tif (p.x < bounds.min.x) { // left\r\n\t\tcode |= 1;\r\n\t} else if (p.x > bounds.max.x) { // right\r\n\t\tcode |= 2;\r\n\t}\r\n\r\n\tif (p.y < bounds.min.y) { // bottom\r\n\t\tcode |= 4;\r\n\t} else if (p.y > bounds.max.y) { // top\r\n\t\tcode |= 8;\r\n\t}\r\n\r\n\treturn code;\r\n}\r\n\r\n// square distance (to avoid unnecessary Math.sqrt calls)\r\nfunction _sqDist(p1, p2) {\r\n\tvar dx = p2.x - p1.x,\r\n\t dy = p2.y - p1.y;\r\n\treturn dx * dx + dy * dy;\r\n}\r\n\r\n// return closest point on segment or distance to that point\r\nexport function _sqClosestPointOnSegment(p, p1, p2, sqDist) {\r\n\tvar x = p1.x,\r\n\t y = p1.y,\r\n\t dx = p2.x - x,\r\n\t dy = p2.y - y,\r\n\t dot = dx * dx + dy * dy,\r\n\t t;\r\n\r\n\tif (dot > 0) {\r\n\t\tt = ((p.x - x) * dx + (p.y - y) * dy) / dot;\r\n\r\n\t\tif (t > 1) {\r\n\t\t\tx = p2.x;\r\n\t\t\ty = p2.y;\r\n\t\t} else if (t > 0) {\r\n\t\t\tx += dx * t;\r\n\t\t\ty += dy * t;\r\n\t\t}\r\n\t}\r\n\r\n\tdx = p.x - x;\r\n\tdy = p.y - y;\r\n\r\n\treturn sqDist ? dx * dx + dy * dy : new Point(x, y);\r\n}\r\n\r\n\r\n// @function isFlat(latlngs: LatLng[]): Boolean\r\n// Returns true if `latlngs` is a flat array, false is nested.\r\nexport function isFlat(latlngs) {\r\n\treturn !Util.isArray(latlngs[0]) || (typeof latlngs[0][0] !== 'object' && typeof latlngs[0][0] !== 'undefined');\r\n}\r\n\r\nexport function _flat(latlngs) {\r\n\tconsole.warn('Deprecated use of _flat, please use L.LineUtil.isFlat instead.');\r\n\treturn isFlat(latlngs);\r\n}\r\n\r\n/* @function polylineCenter(latlngs: LatLng[], crs: CRS): LatLng\r\n * Returns the center ([centroid](http://en.wikipedia.org/wiki/Centroid)) of the passed LatLngs (first ring) from a polyline.\r\n */\r\nexport function polylineCenter(latlngs, crs) {\r\n\tvar i, halfDist, segDist, dist, p1, p2, ratio, center;\r\n\r\n\tif (!latlngs || latlngs.length === 0) {\r\n\t\tthrow new Error('latlngs not passed');\r\n\t}\r\n\r\n\tif (!isFlat(latlngs)) {\r\n\t\tconsole.warn('latlngs are not flat! Only the first ring will be used');\r\n\t\tlatlngs = latlngs[0];\r\n\t}\r\n\r\n\tvar centroidLatLng = toLatLng([0, 0]);\r\n\r\n\tvar bounds = toLatLngBounds(latlngs);\r\n\tvar areaBounds = bounds.getNorthWest().distanceTo(bounds.getSouthWest()) * bounds.getNorthEast().distanceTo(bounds.getNorthWest());\r\n\t// tests showed that below 1700 rounding errors are happening\r\n\tif (areaBounds < 1700) {\r\n\t\t// getting a inexact center, to move the latlngs near to [0, 0] to prevent rounding errors\r\n\t\tcentroidLatLng = centroid(latlngs);\r\n\t}\r\n\r\n\tvar len = latlngs.length;\r\n\tvar points = [];\r\n\tfor (i = 0; i < len; i++) {\r\n\t\tvar latlng = toLatLng(latlngs[i]);\r\n\t\tpoints.push(crs.project(toLatLng([latlng.lat - centroidLatLng.lat, latlng.lng - centroidLatLng.lng])));\r\n\t}\r\n\r\n\tfor (i = 0, halfDist = 0; i < len - 1; i++) {\r\n\t\thalfDist += points[i].distanceTo(points[i + 1]) / 2;\r\n\t}\r\n\r\n\t// The line is so small in the current view that all points are on the same pixel.\r\n\tif (halfDist === 0) {\r\n\t\tcenter = points[0];\r\n\t} else {\r\n\t\tfor (i = 0, dist = 0; i < len - 1; i++) {\r\n\t\t\tp1 = points[i];\r\n\t\t\tp2 = points[i + 1];\r\n\t\t\tsegDist = p1.distanceTo(p2);\r\n\t\t\tdist += segDist;\r\n\r\n\t\t\tif (dist > halfDist) {\r\n\t\t\t\tratio = (dist - halfDist) / segDist;\r\n\t\t\t\tcenter = [\r\n\t\t\t\t\tp2.x - ratio * (p2.x - p1.x),\r\n\t\t\t\t\tp2.y - ratio * (p2.y - p1.y)\r\n\t\t\t\t];\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tvar latlngCenter = crs.unproject(toPoint(center));\r\n\treturn toLatLng([latlngCenter.lat + centroidLatLng.lat, latlngCenter.lng + centroidLatLng.lng]);\r\n}\r\n", "import {LatLng} from '../LatLng';\r\nimport {Bounds} from '../../geometry/Bounds';\r\nimport {Point} from '../../geometry/Point';\r\n\r\n/*\r\n * @namespace Projection\r\n * @section\r\n * Leaflet comes with a set of already defined Projections out of the box:\r\n *\r\n * @projection L.Projection.LonLat\r\n *\r\n * Equirectangular, or Plate Carree projection — the most simple projection,\r\n * mostly used by GIS enthusiasts. Directly maps `x` as longitude, and `y` as\r\n * latitude. Also suitable for flat worlds, e.g. game maps. Used by the\r\n * `EPSG:4326` and `Simple` CRS.\r\n */\r\n\r\nexport var LonLat = {\r\n\tproject: function (latlng) {\r\n\t\treturn new Point(latlng.lng, latlng.lat);\r\n\t},\r\n\r\n\tunproject: function (point) {\r\n\t\treturn new LatLng(point.y, point.x);\r\n\t},\r\n\r\n\tbounds: new Bounds([-180, -90], [180, 90])\r\n};\r\n", "import {LatLng} from '../LatLng';\r\nimport {Bounds} from '../../geometry/Bounds';\r\nimport {Point} from '../../geometry/Point';\r\n\r\n/*\r\n * @namespace Projection\r\n * @projection L.Projection.Mercator\r\n *\r\n * Elliptical Mercator projection — more complex than Spherical Mercator. Assumes that Earth is an ellipsoid. Used by the EPSG:3395 CRS.\r\n */\r\n\r\nexport var Mercator = {\r\n\tR: 6378137,\r\n\tR_MINOR: 6356752.314245179,\r\n\r\n\tbounds: new Bounds([-20037508.34279, -15496570.73972], [20037508.34279, 18764656.23138]),\r\n\r\n\tproject: function (latlng) {\r\n\t\tvar d = Math.PI / 180,\r\n\t\t r = this.R,\r\n\t\t y = latlng.lat * d,\r\n\t\t tmp = this.R_MINOR / r,\r\n\t\t e = Math.sqrt(1 - tmp * tmp),\r\n\t\t con = e * Math.sin(y);\r\n\r\n\t\tvar ts = Math.tan(Math.PI / 4 - y / 2) / Math.pow((1 - con) / (1 + con), e / 2);\r\n\t\ty = -r * Math.log(Math.max(ts, 1E-10));\r\n\r\n\t\treturn new Point(latlng.lng * d * r, y);\r\n\t},\r\n\r\n\tunproject: function (point) {\r\n\t\tvar d = 180 / Math.PI,\r\n\t\t r = this.R,\r\n\t\t tmp = this.R_MINOR / r,\r\n\t\t e = Math.sqrt(1 - tmp * tmp),\r\n\t\t ts = Math.exp(-point.y / r),\r\n\t\t phi = Math.PI / 2 - 2 * Math.atan(ts);\r\n\r\n\t\tfor (var i = 0, dphi = 0.1, con; i < 15 && Math.abs(dphi) > 1e-7; i++) {\r\n\t\t\tcon = e * Math.sin(phi);\r\n\t\t\tcon = Math.pow((1 - con) / (1 + con), e / 2);\r\n\t\t\tdphi = Math.PI / 2 - 2 * Math.atan(ts * con) - phi;\r\n\t\t\tphi += dphi;\r\n\t\t}\r\n\r\n\t\treturn new LatLng(phi * d, point.x * d / r);\r\n\t}\r\n};\r\n", "/*\n * @class Projection\n\n * An object with methods for projecting geographical coordinates of the world onto\n * a flat surface (and back). See [Map projection](https://en.wikipedia.org/wiki/Map_projection).\n\n * @property bounds: Bounds\n * The bounds (specified in CRS units) where the projection is valid\n\n * @method project(latlng: LatLng): Point\n * Projects geographical coordinates into a 2D point.\n * Only accepts actual `L.LatLng` instances, not arrays.\n\n * @method unproject(point: Point): LatLng\n * The inverse of `project`. Projects a 2D point into a geographical location.\n * Only accepts actual `L.Point` instances, not arrays.\n\n * Note that the projection instances do not inherit from Leaflet's `Class` object,\n * and can't be instantiated. Also, new classes can't inherit from them,\n * and methods can't be added to them with the `include` function.\n\n */\n\nexport {LonLat} from './Projection.LonLat';\nexport {Mercator} from './Projection.Mercator';\nexport {SphericalMercator} from './Projection.SphericalMercator';\n", "import {Earth} from './CRS.Earth';\r\nimport {Mercator} from '../projection/Projection.Mercator';\r\nimport {toTransformation} from '../../geometry/Transformation';\r\nimport * as Util from '../../core/Util';\r\n\r\n/*\r\n * @namespace CRS\r\n * @crs L.CRS.EPSG3395\r\n *\r\n * Rarely used by some commercial tile providers. Uses Elliptical Mercator projection.\r\n */\r\nexport var EPSG3395 = Util.extend({}, Earth, {\r\n\tcode: 'EPSG:3395',\r\n\tprojection: Mercator,\r\n\r\n\ttransformation: (function () {\r\n\t\tvar scale = 0.5 / (Math.PI * Mercator.R);\r\n\t\treturn toTransformation(scale, 0.5, -scale, 0.5);\r\n\t}())\r\n});\r\n", "import {Earth} from './CRS.Earth';\r\nimport {LonLat} from '../projection/Projection.LonLat';\r\nimport {toTransformation} from '../../geometry/Transformation';\r\nimport * as Util from '../../core/Util';\r\n\r\n/*\r\n * @namespace CRS\r\n * @crs L.CRS.EPSG4326\r\n *\r\n * A common CRS among GIS enthusiasts. Uses simple Equirectangular projection.\r\n *\r\n * Leaflet 1.0.x complies with the [TMS coordinate scheme for EPSG:4326](https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification#global-geodetic),\r\n * which is a breaking change from 0.7.x behaviour. If you are using a `TileLayer`\r\n * with this CRS, ensure that there are two 256x256 pixel tiles covering the\r\n * whole earth at zoom level zero, and that the tile coordinate origin is (-180,+90),\r\n * or (-180,-90) for `TileLayer`s with [the `tms` option](#tilelayer-tms) set.\r\n */\r\n\r\nexport var EPSG4326 = Util.extend({}, Earth, {\r\n\tcode: 'EPSG:4326',\r\n\tprojection: LonLat,\r\n\ttransformation: toTransformation(1 / 180, 1, -1 / 180, 0.5)\r\n});\r\n", "import {CRS} from './CRS';\nimport {LonLat} from '../projection/Projection.LonLat';\nimport {toTransformation} from '../../geometry/Transformation';\nimport * as Util from '../../core/Util';\n\n/*\n * @namespace CRS\n * @crs L.CRS.Simple\n *\n * A simple CRS that maps longitude and latitude into `x` and `y` directly.\n * May be used for maps of flat surfaces (e.g. game maps). Note that the `y`\n * axis should still be inverted (going from bottom to top). `distance()` returns\n * simple euclidean distance.\n */\n\nexport var Simple = Util.extend({}, CRS, {\n\tprojection: LonLat,\n\ttransformation: toTransformation(1, 0, -1, 0),\n\n\tscale: function (zoom) {\n\t\treturn Math.pow(2, zoom);\n\t},\n\n\tzoom: function (scale) {\n\t\treturn Math.log(scale) / Math.LN2;\n\t},\n\n\tdistance: function (latlng1, latlng2) {\n\t\tvar dx = latlng2.lng - latlng1.lng,\n\t\t dy = latlng2.lat - latlng1.lat;\n\n\t\treturn Math.sqrt(dx * dx + dy * dy);\n\t},\n\n\tinfinite: true\n});\n", "import {CRS} from './CRS';\nimport {Earth} from './CRS.Earth';\nimport {EPSG3395} from './CRS.EPSG3395';\nimport {EPSG3857, EPSG900913} from './CRS.EPSG3857';\nimport {EPSG4326} from './CRS.EPSG4326';\nimport {Simple} from './CRS.Simple';\n\nCRS.Earth = Earth;\nCRS.EPSG3395 = EPSG3395;\nCRS.EPSG3857 = EPSG3857;\nCRS.EPSG900913 = EPSG900913;\nCRS.EPSG4326 = EPSG4326;\nCRS.Simple = Simple;\n\nexport {CRS};\n", "import {Evented} from '../core/Events';\nimport {Map} from '../map/Map';\nimport * as Util from '../core/Util';\n\n/*\n * @class Layer\n * @inherits Evented\n * @aka L.Layer\n * @aka ILayer\n *\n * A set of methods from the Layer base class that all Leaflet layers use.\n * Inherits all methods, options and events from `L.Evented`.\n *\n * @example\n *\n * ```js\n * var layer = L.marker(latlng).addTo(map);\n * layer.addTo(map);\n * layer.remove();\n * ```\n *\n * @event add: Event\n * Fired after the layer is added to a map\n *\n * @event remove: Event\n * Fired after the layer is removed from a map\n */\n\n\nexport var Layer = Evented.extend({\n\n\t// Classes extending `L.Layer` will inherit the following options:\n\toptions: {\n\t\t// @option pane: String = 'overlayPane'\n\t\t// By default the layer will be added to the map's [overlay pane](#map-overlaypane). Overriding this option will cause the layer to be placed on another pane by default.\n\t\tpane: 'overlayPane',\n\n\t\t// @option attribution: String = null\n\t\t// String to be shown in the attribution control, e.g. \"© OpenStreetMap contributors\". It describes the layer data and is often a legal obligation towards copyright holders and tile providers.\n\t\tattribution: null,\n\n\t\tbubblingMouseEvents: true\n\t},\n\n\t/* @section\n\t * Classes extending `L.Layer` will inherit the following methods:\n\t *\n\t * @method addTo(map: Map|LayerGroup): this\n\t * Adds the layer to the given map or layer group.\n\t */\n\taddTo: function (map) {\n\t\tmap.addLayer(this);\n\t\treturn this;\n\t},\n\n\t// @method remove: this\n\t// Removes the layer from the map it is currently active on.\n\tremove: function () {\n\t\treturn this.removeFrom(this._map || this._mapToAdd);\n\t},\n\n\t// @method removeFrom(map: Map): this\n\t// Removes the layer from the given map\n\t//\n\t// @alternative\n\t// @method removeFrom(group: LayerGroup): this\n\t// Removes the layer from the given `LayerGroup`\n\tremoveFrom: function (obj) {\n\t\tif (obj) {\n\t\t\tobj.removeLayer(this);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method getPane(name? : String): HTMLElement\n\t// Returns the `HTMLElement` representing the named pane on the map. If `name` is omitted, returns the pane for this layer.\n\tgetPane: function (name) {\n\t\treturn this._map.getPane(name ? (this.options[name] || name) : this.options.pane);\n\t},\n\n\taddInteractiveTarget: function (targetEl) {\n\t\tthis._map._targets[Util.stamp(targetEl)] = this;\n\t\treturn this;\n\t},\n\n\tremoveInteractiveTarget: function (targetEl) {\n\t\tdelete this._map._targets[Util.stamp(targetEl)];\n\t\treturn this;\n\t},\n\n\t// @method getAttribution: String\n\t// Used by the `attribution control`, returns the [attribution option](#gridlayer-attribution).\n\tgetAttribution: function () {\n\t\treturn this.options.attribution;\n\t},\n\n\t_layerAdd: function (e) {\n\t\tvar map = e.target;\n\n\t\t// check in case layer gets added and then removed before the map is ready\n\t\tif (!map.hasLayer(this)) { return; }\n\n\t\tthis._map = map;\n\t\tthis._zoomAnimated = map._zoomAnimated;\n\n\t\tif (this.getEvents) {\n\t\t\tvar events = this.getEvents();\n\t\t\tmap.on(events, this);\n\t\t\tthis.once('remove', function () {\n\t\t\t\tmap.off(events, this);\n\t\t\t}, this);\n\t\t}\n\n\t\tthis.onAdd(map);\n\n\t\tthis.fire('add');\n\t\tmap.fire('layeradd', {layer: this});\n\t}\n});\n\n/* @section Extension methods\n * @uninheritable\n *\n * Every layer should extend from `L.Layer` and (re-)implement the following methods.\n *\n * @method onAdd(map: Map): this\n * Should contain code that creates DOM elements for the layer, adds them to `map panes` where they should belong and puts listeners on relevant map events. Called on [`map.addLayer(layer)`](#map-addlayer).\n *\n * @method onRemove(map: Map): this\n * Should contain all clean up code that removes the layer's elements from the DOM and removes listeners previously added in [`onAdd`](#layer-onadd). Called on [`map.removeLayer(layer)`](#map-removelayer).\n *\n * @method getEvents(): Object\n * This optional method should return an object like `{ viewreset: this._reset }` for [`addEventListener`](#evented-addeventlistener). The event handlers in this object will be automatically added and removed from the map with your layer.\n *\n * @method getAttribution(): String\n * This optional method should return a string containing HTML to be shown on the `Attribution control` whenever the layer is visible.\n *\n * @method beforeAdd(map: Map): this\n * Optional method. Called on [`map.addLayer(layer)`](#map-addlayer), before the layer is added to the map, before events are initialized, without waiting until the map is in a usable state. Use for early initialization only.\n */\n\n\n/* @namespace Map\n * @section Layer events\n *\n * @event layeradd: LayerEvent\n * Fired when a new layer is added to the map.\n *\n * @event layerremove: LayerEvent\n * Fired when some layer is removed from the map\n *\n * @section Methods for Layers and Controls\n */\nMap.include({\n\t// @method addLayer(layer: Layer): this\n\t// Adds the given layer to the map\n\taddLayer: function (layer) {\n\t\tif (!layer._layerAdd) {\n\t\t\tthrow new Error('The provided object is not a Layer.');\n\t\t}\n\n\t\tvar id = Util.stamp(layer);\n\t\tif (this._layers[id]) { return this; }\n\t\tthis._layers[id] = layer;\n\n\t\tlayer._mapToAdd = this;\n\n\t\tif (layer.beforeAdd) {\n\t\t\tlayer.beforeAdd(this);\n\t\t}\n\n\t\tthis.whenReady(layer._layerAdd, layer);\n\n\t\treturn this;\n\t},\n\n\t// @method removeLayer(layer: Layer): this\n\t// Removes the given layer from the map.\n\tremoveLayer: function (layer) {\n\t\tvar id = Util.stamp(layer);\n\n\t\tif (!this._layers[id]) { return this; }\n\n\t\tif (this._loaded) {\n\t\t\tlayer.onRemove(this);\n\t\t}\n\n\t\tdelete this._layers[id];\n\n\t\tif (this._loaded) {\n\t\t\tthis.fire('layerremove', {layer: layer});\n\t\t\tlayer.fire('remove');\n\t\t}\n\n\t\tlayer._map = layer._mapToAdd = null;\n\n\t\treturn this;\n\t},\n\n\t// @method hasLayer(layer: Layer): Boolean\n\t// Returns `true` if the given layer is currently added to the map\n\thasLayer: function (layer) {\n\t\treturn Util.stamp(layer) in this._layers;\n\t},\n\n\t/* @method eachLayer(fn: Function, context?: Object): this\n\t * Iterates over the layers of the map, optionally specifying context of the iterator function.\n\t * ```\n\t * map.eachLayer(function(layer){\n\t * layer.bindPopup('Hello');\n\t * });\n\t * ```\n\t */\n\teachLayer: function (method, context) {\n\t\tfor (var i in this._layers) {\n\t\t\tmethod.call(context, this._layers[i]);\n\t\t}\n\t\treturn this;\n\t},\n\n\t_addLayers: function (layers) {\n\t\tlayers = layers ? (Util.isArray(layers) ? layers : [layers]) : [];\n\n\t\tfor (var i = 0, len = layers.length; i < len; i++) {\n\t\t\tthis.addLayer(layers[i]);\n\t\t}\n\t},\n\n\t_addZoomLimit: function (layer) {\n\t\tif (!isNaN(layer.options.maxZoom) || !isNaN(layer.options.minZoom)) {\n\t\t\tthis._zoomBoundLayers[Util.stamp(layer)] = layer;\n\t\t\tthis._updateZoomLevels();\n\t\t}\n\t},\n\n\t_removeZoomLimit: function (layer) {\n\t\tvar id = Util.stamp(layer);\n\n\t\tif (this._zoomBoundLayers[id]) {\n\t\t\tdelete this._zoomBoundLayers[id];\n\t\t\tthis._updateZoomLevels();\n\t\t}\n\t},\n\n\t_updateZoomLevels: function () {\n\t\tvar minZoom = Infinity,\n\t\t maxZoom = -Infinity,\n\t\t oldZoomSpan = this._getZoomSpan();\n\n\t\tfor (var i in this._zoomBoundLayers) {\n\t\t\tvar options = this._zoomBoundLayers[i].options;\n\n\t\t\tminZoom = options.minZoom === undefined ? minZoom : Math.min(minZoom, options.minZoom);\n\t\t\tmaxZoom = options.maxZoom === undefined ? maxZoom : Math.max(maxZoom, options.maxZoom);\n\t\t}\n\n\t\tthis._layersMaxZoom = maxZoom === -Infinity ? undefined : maxZoom;\n\t\tthis._layersMinZoom = minZoom === Infinity ? undefined : minZoom;\n\n\t\t// @section Map state change events\n\t\t// @event zoomlevelschange: Event\n\t\t// Fired when the number of zoomlevels on the map is changed due\n\t\t// to adding or removing a layer.\n\t\tif (oldZoomSpan !== this._getZoomSpan()) {\n\t\t\tthis.fire('zoomlevelschange');\n\t\t}\n\n\t\tif (this.options.maxZoom === undefined && this._layersMaxZoom && this.getZoom() > this._layersMaxZoom) {\n\t\t\tthis.setZoom(this._layersMaxZoom);\n\t\t}\n\t\tif (this.options.minZoom === undefined && this._layersMinZoom && this.getZoom() < this._layersMinZoom) {\n\t\t\tthis.setZoom(this._layersMinZoom);\n\t\t}\n\t}\n});\n", "\r\nimport {Layer} from './Layer';\r\nimport * as Util from '../core/Util';\r\n\r\n/*\r\n * @class LayerGroup\r\n * @aka L.LayerGroup\r\n * @inherits Interactive layer\r\n *\r\n * Used to group several layers and handle them as one. If you add it to the map,\r\n * any layers added or removed from the group will be added/removed on the map as\r\n * well. Extends `Layer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.layerGroup([marker1, marker2])\r\n * \t.addLayer(polyline)\r\n * \t.addTo(map);\r\n * ```\r\n */\r\n\r\nexport var LayerGroup = Layer.extend({\r\n\r\n\tinitialize: function (layers, options) {\r\n\t\tUtil.setOptions(this, options);\r\n\r\n\t\tthis._layers = {};\r\n\r\n\t\tvar i, len;\r\n\r\n\t\tif (layers) {\r\n\t\t\tfor (i = 0, len = layers.length; i < len; i++) {\r\n\t\t\t\tthis.addLayer(layers[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t// @method addLayer(layer: Layer): this\r\n\t// Adds the given layer to the group.\r\n\taddLayer: function (layer) {\r\n\t\tvar id = this.getLayerId(layer);\r\n\r\n\t\tthis._layers[id] = layer;\r\n\r\n\t\tif (this._map) {\r\n\t\t\tthis._map.addLayer(layer);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method removeLayer(layer: Layer): this\r\n\t// Removes the given layer from the group.\r\n\t// @alternative\r\n\t// @method removeLayer(id: Number): this\r\n\t// Removes the layer with the given internal ID from the group.\r\n\tremoveLayer: function (layer) {\r\n\t\tvar id = layer in this._layers ? layer : this.getLayerId(layer);\r\n\r\n\t\tif (this._map && this._layers[id]) {\r\n\t\t\tthis._map.removeLayer(this._layers[id]);\r\n\t\t}\r\n\r\n\t\tdelete this._layers[id];\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method hasLayer(layer: Layer): Boolean\r\n\t// Returns `true` if the given layer is currently added to the group.\r\n\t// @alternative\r\n\t// @method hasLayer(id: Number): Boolean\r\n\t// Returns `true` if the given internal ID is currently added to the group.\r\n\thasLayer: function (layer) {\r\n\t\tvar layerId = typeof layer === 'number' ? layer : this.getLayerId(layer);\r\n\t\treturn layerId in this._layers;\r\n\t},\r\n\r\n\t// @method clearLayers(): this\r\n\t// Removes all the layers from the group.\r\n\tclearLayers: function () {\r\n\t\treturn this.eachLayer(this.removeLayer, this);\r\n\t},\r\n\r\n\t// @method invoke(methodName: String, …): this\r\n\t// Calls `methodName` on every layer contained in this group, passing any\r\n\t// additional parameters. Has no effect if the layers contained do not\r\n\t// implement `methodName`.\r\n\tinvoke: function (methodName) {\r\n\t\tvar args = Array.prototype.slice.call(arguments, 1),\r\n\t\t i, layer;\r\n\r\n\t\tfor (i in this._layers) {\r\n\t\t\tlayer = this._layers[i];\r\n\r\n\t\t\tif (layer[methodName]) {\r\n\t\t\t\tlayer[methodName].apply(layer, args);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tthis.eachLayer(map.addLayer, map);\r\n\t},\r\n\r\n\tonRemove: function (map) {\r\n\t\tthis.eachLayer(map.removeLayer, map);\r\n\t},\r\n\r\n\t// @method eachLayer(fn: Function, context?: Object): this\r\n\t// Iterates over the layers of the group, optionally specifying context of the iterator function.\r\n\t// ```js\r\n\t// group.eachLayer(function (layer) {\r\n\t// \tlayer.bindPopup('Hello');\r\n\t// });\r\n\t// ```\r\n\teachLayer: function (method, context) {\r\n\t\tfor (var i in this._layers) {\r\n\t\t\tmethod.call(context, this._layers[i]);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getLayer(id: Number): Layer\r\n\t// Returns the layer with the given internal ID.\r\n\tgetLayer: function (id) {\r\n\t\treturn this._layers[id];\r\n\t},\r\n\r\n\t// @method getLayers(): Layer[]\r\n\t// Returns an array of all the layers added to the group.\r\n\tgetLayers: function () {\r\n\t\tvar layers = [];\r\n\t\tthis.eachLayer(layers.push, layers);\r\n\t\treturn layers;\r\n\t},\r\n\r\n\t// @method setZIndex(zIndex: Number): this\r\n\t// Calls `setZIndex` on every layer contained in this group, passing the z-index.\r\n\tsetZIndex: function (zIndex) {\r\n\t\treturn this.invoke('setZIndex', zIndex);\r\n\t},\r\n\r\n\t// @method getLayerId(layer: Layer): Number\r\n\t// Returns the internal ID for a layer\r\n\tgetLayerId: function (layer) {\r\n\t\treturn Util.stamp(layer);\r\n\t}\r\n});\r\n\r\n\r\n// @factory L.layerGroup(layers?: Layer[], options?: Object)\r\n// Create a layer group, optionally given an initial set of layers and an `options` object.\r\nexport var layerGroup = function (layers, options) {\r\n\treturn new LayerGroup(layers, options);\r\n};\r\n", "import {LayerGroup} from './LayerGroup';\r\nimport {LatLngBounds} from '../geo/LatLngBounds';\r\n\r\n/*\r\n * @class FeatureGroup\r\n * @aka L.FeatureGroup\r\n * @inherits LayerGroup\r\n *\r\n * Extended `LayerGroup` that makes it easier to do the same thing to all its member layers:\r\n * * [`bindPopup`](#layer-bindpopup) binds a popup to all of the layers at once (likewise with [`bindTooltip`](#layer-bindtooltip))\r\n * * Events are propagated to the `FeatureGroup`, so if the group has an event\r\n * handler, it will handle events from any of the layers. This includes mouse events\r\n * and custom events.\r\n * * Has `layeradd` and `layerremove` events\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.featureGroup([marker1, marker2, polyline])\r\n * \t.bindPopup('Hello world!')\r\n * \t.on('click', function() { alert('Clicked on a member of the group!'); })\r\n * \t.addTo(map);\r\n * ```\r\n */\r\n\r\nexport var FeatureGroup = LayerGroup.extend({\r\n\r\n\taddLayer: function (layer) {\r\n\t\tif (this.hasLayer(layer)) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tlayer.addEventParent(this);\r\n\r\n\t\tLayerGroup.prototype.addLayer.call(this, layer);\r\n\r\n\t\t// @event layeradd: LayerEvent\r\n\t\t// Fired when a layer is added to this `FeatureGroup`\r\n\t\treturn this.fire('layeradd', {layer: layer});\r\n\t},\r\n\r\n\tremoveLayer: function (layer) {\r\n\t\tif (!this.hasLayer(layer)) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\tif (layer in this._layers) {\r\n\t\t\tlayer = this._layers[layer];\r\n\t\t}\r\n\r\n\t\tlayer.removeEventParent(this);\r\n\r\n\t\tLayerGroup.prototype.removeLayer.call(this, layer);\r\n\r\n\t\t// @event layerremove: LayerEvent\r\n\t\t// Fired when a layer is removed from this `FeatureGroup`\r\n\t\treturn this.fire('layerremove', {layer: layer});\r\n\t},\r\n\r\n\t// @method setStyle(style: Path options): this\r\n\t// Sets the given path options to each layer of the group that has a `setStyle` method.\r\n\tsetStyle: function (style) {\r\n\t\treturn this.invoke('setStyle', style);\r\n\t},\r\n\r\n\t// @method bringToFront(): this\r\n\t// Brings the layer group to the top of all other layers\r\n\tbringToFront: function () {\r\n\t\treturn this.invoke('bringToFront');\r\n\t},\r\n\r\n\t// @method bringToBack(): this\r\n\t// Brings the layer group to the back of all other layers\r\n\tbringToBack: function () {\r\n\t\treturn this.invoke('bringToBack');\r\n\t},\r\n\r\n\t// @method getBounds(): LatLngBounds\r\n\t// Returns the LatLngBounds of the Feature Group (created from bounds and coordinates of its children).\r\n\tgetBounds: function () {\r\n\t\tvar bounds = new LatLngBounds();\r\n\r\n\t\tfor (var id in this._layers) {\r\n\t\t\tvar layer = this._layers[id];\r\n\t\t\tbounds.extend(layer.getBounds ? layer.getBounds() : layer.getLatLng());\r\n\t\t}\r\n\t\treturn bounds;\r\n\t}\r\n});\r\n\r\n// @factory L.featureGroup(layers?: Layer[], options?: Object)\r\n// Create a feature group, optionally given an initial set of layers and an `options` object.\r\nexport var featureGroup = function (layers, options) {\r\n\treturn new FeatureGroup(layers, options);\r\n};\r\n", "import {Class} from '../../core/Class';\r\nimport {setOptions} from '../../core/Util';\r\nimport {toPoint as point} from '../../geometry/Point';\r\nimport Browser from '../../core/Browser';\r\n\r\n/*\r\n * @class Icon\r\n * @aka L.Icon\r\n *\r\n * Represents an icon to provide when creating a marker.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var myIcon = L.icon({\r\n * iconUrl: 'my-icon.png',\r\n * iconRetinaUrl: 'my-icon@2x.png',\r\n * iconSize: [38, 95],\r\n * iconAnchor: [22, 94],\r\n * popupAnchor: [-3, -76],\r\n * shadowUrl: 'my-icon-shadow.png',\r\n * shadowRetinaUrl: 'my-icon-shadow@2x.png',\r\n * shadowSize: [68, 95],\r\n * shadowAnchor: [22, 94]\r\n * });\r\n *\r\n * L.marker([50.505, 30.57], {icon: myIcon}).addTo(map);\r\n * ```\r\n *\r\n * `L.Icon.Default` extends `L.Icon` and is the blue icon Leaflet uses for markers by default.\r\n *\r\n */\r\n\r\nexport var Icon = Class.extend({\r\n\r\n\t/* @section\r\n\t * @aka Icon options\r\n\t *\r\n\t * @option iconUrl: String = null\r\n\t * **(required)** The URL to the icon image (absolute or relative to your script path).\r\n\t *\r\n\t * @option iconRetinaUrl: String = null\r\n\t * The URL to a retina sized version of the icon image (absolute or relative to your\r\n\t * script path). Used for Retina screen devices.\r\n\t *\r\n\t * @option iconSize: Point = null\r\n\t * Size of the icon image in pixels.\r\n\t *\r\n\t * @option iconAnchor: Point = null\r\n\t * The coordinates of the \"tip\" of the icon (relative to its top left corner). The icon\r\n\t * will be aligned so that this point is at the marker's geographical location. Centered\r\n\t * by default if size is specified, also can be set in CSS with negative margins.\r\n\t *\r\n\t * @option popupAnchor: Point = [0, 0]\r\n\t * The coordinates of the point from which popups will \"open\", relative to the icon anchor.\r\n\t *\r\n\t * @option tooltipAnchor: Point = [0, 0]\r\n\t * The coordinates of the point from which tooltips will \"open\", relative to the icon anchor.\r\n\t *\r\n\t * @option shadowUrl: String = null\r\n\t * The URL to the icon shadow image. If not specified, no shadow image will be created.\r\n\t *\r\n\t * @option shadowRetinaUrl: String = null\r\n\t *\r\n\t * @option shadowSize: Point = null\r\n\t * Size of the shadow image in pixels.\r\n\t *\r\n\t * @option shadowAnchor: Point = null\r\n\t * The coordinates of the \"tip\" of the shadow (relative to its top left corner) (the same\r\n\t * as iconAnchor if not specified).\r\n\t *\r\n\t * @option className: String = ''\r\n\t * A custom class name to assign to both icon and shadow images. Empty by default.\r\n\t */\r\n\r\n\toptions: {\r\n\t\tpopupAnchor: [0, 0],\r\n\t\ttooltipAnchor: [0, 0],\r\n\r\n\t\t// @option crossOrigin: Boolean|String = false\r\n\t\t// Whether the crossOrigin attribute will be added to the tiles.\r\n\t\t// If a String is provided, all tiles will have their crossOrigin attribute set to the String provided. This is needed if you want to access tile pixel data.\r\n\t\t// Refer to [CORS Settings](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for valid String values.\r\n\t\tcrossOrigin: false\r\n\t},\r\n\r\n\tinitialize: function (options) {\r\n\t\tsetOptions(this, options);\r\n\t},\r\n\r\n\t// @method createIcon(oldIcon?: HTMLElement): HTMLElement\r\n\t// Called internally when the icon has to be shown, returns a `<img>` HTML element\r\n\t// styled according to the options.\r\n\tcreateIcon: function (oldIcon) {\r\n\t\treturn this._createIcon('icon', oldIcon);\r\n\t},\r\n\r\n\t// @method createShadow(oldIcon?: HTMLElement): HTMLElement\r\n\t// As `createIcon`, but for the shadow beneath it.\r\n\tcreateShadow: function (oldIcon) {\r\n\t\treturn this._createIcon('shadow', oldIcon);\r\n\t},\r\n\r\n\t_createIcon: function (name, oldIcon) {\r\n\t\tvar src = this._getIconUrl(name);\r\n\r\n\t\tif (!src) {\r\n\t\t\tif (name === 'icon') {\r\n\t\t\t\tthrow new Error('iconUrl not set in Icon options (see the docs).');\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tvar img = this._createImg(src, oldIcon && oldIcon.tagName === 'IMG' ? oldIcon : null);\r\n\t\tthis._setIconStyles(img, name);\r\n\r\n\t\tif (this.options.crossOrigin || this.options.crossOrigin === '') {\r\n\t\t\timg.crossOrigin = this.options.crossOrigin === true ? '' : this.options.crossOrigin;\r\n\t\t}\r\n\r\n\t\treturn img;\r\n\t},\r\n\r\n\t_setIconStyles: function (img, name) {\r\n\t\tvar options = this.options;\r\n\t\tvar sizeOption = options[name + 'Size'];\r\n\r\n\t\tif (typeof sizeOption === 'number') {\r\n\t\t\tsizeOption = [sizeOption, sizeOption];\r\n\t\t}\r\n\r\n\t\tvar size = point(sizeOption),\r\n\t\t anchor = point(name === 'shadow' && options.shadowAnchor || options.iconAnchor ||\r\n\t\t size && size.divideBy(2, true));\r\n\r\n\t\timg.className = 'leaflet-marker-' + name + ' ' + (options.className || '');\r\n\r\n\t\tif (anchor) {\r\n\t\t\timg.style.marginLeft = (-anchor.x) + 'px';\r\n\t\t\timg.style.marginTop = (-anchor.y) + 'px';\r\n\t\t}\r\n\r\n\t\tif (size) {\r\n\t\t\timg.style.width = size.x + 'px';\r\n\t\t\timg.style.height = size.y + 'px';\r\n\t\t}\r\n\t},\r\n\r\n\t_createImg: function (src, el) {\r\n\t\tel = el || document.createElement('img');\r\n\t\tel.src = src;\r\n\t\treturn el;\r\n\t},\r\n\r\n\t_getIconUrl: function (name) {\r\n\t\treturn Browser.retina && this.options[name + 'RetinaUrl'] || this.options[name + 'Url'];\r\n\t}\r\n});\r\n\r\n\r\n// @factory L.icon(options: Icon options)\r\n// Creates an icon instance with the given options.\r\nexport function icon(options) {\r\n\treturn new Icon(options);\r\n}\r\n", "import {Icon} from './Icon';\nimport * as DomUtil from '../../dom/DomUtil';\n\n/*\n * @miniclass Icon.Default (Icon)\n * @aka L.Icon.Default\n * @section\n *\n * A trivial subclass of `Icon`, represents the icon to use in `Marker`s when\n * no icon is specified. Points to the blue marker image distributed with Leaflet\n * releases.\n *\n * In order to customize the default icon, just change the properties of `L.Icon.Default.prototype.options`\n * (which is a set of `Icon options`).\n *\n * If you want to _completely_ replace the default icon, override the\n * `L.Marker.prototype.options.icon` with your own icon instead.\n */\n\nexport var IconDefault = Icon.extend({\n\n\toptions: {\n\t\ticonUrl: 'marker-icon.png',\n\t\ticonRetinaUrl: 'marker-icon-2x.png',\n\t\tshadowUrl: 'marker-shadow.png',\n\t\ticonSize: [25, 41],\n\t\ticonAnchor: [12, 41],\n\t\tpopupAnchor: [1, -34],\n\t\ttooltipAnchor: [16, -28],\n\t\tshadowSize: [41, 41]\n\t},\n\n\t_getIconUrl: function (name) {\n\t\tif (typeof IconDefault.imagePath !== 'string') {\t// Deprecated, backwards-compatibility only\n\t\t\tIconDefault.imagePath = this._detectIconPath();\n\t\t}\n\n\t\t// @option imagePath: String\n\t\t// `Icon.Default` will try to auto-detect the location of the\n\t\t// blue icon images. If you are placing these images in a non-standard\n\t\t// way, set this option to point to the right path.\n\t\treturn (this.options.imagePath || IconDefault.imagePath) + Icon.prototype._getIconUrl.call(this, name);\n\t},\n\n\t_stripUrl: function (path) {\t// separate function to use in tests\n\t\tvar strip = function (str, re, idx) {\n\t\t\tvar match = re.exec(str);\n\t\t\treturn match && match[idx];\n\t\t};\n\t\tpath = strip(path, /^url\\((['\"])?(.+)\\1\\)$/, 2);\n\t\treturn path && strip(path, /^(.*)marker-icon\\.png$/, 1);\n\t},\n\n\t_detectIconPath: function () {\n\t\tvar el = DomUtil.create('div', 'leaflet-default-icon-path', document.body);\n\t\tvar path = DomUtil.getStyle(el, 'background-image') ||\n\t\t DomUtil.getStyle(el, 'backgroundImage');\t// IE8\n\n\t\tdocument.body.removeChild(el);\n\t\tpath = this._stripUrl(path);\n\t\tif (path) { return path; }\n\t\tvar link = document.querySelector('link[href$=\"leaflet.css\"]');\n\t\tif (!link) { return ''; }\n\t\treturn link.href.substring(0, link.href.length - 'leaflet.css'.length - 1);\n\t}\n});\n", "import {Handler} from '../../core/Handler';\nimport * as DomUtil from '../../dom/DomUtil';\nimport {Draggable} from '../../dom/Draggable';\nimport {toBounds} from '../../geometry/Bounds';\nimport {toPoint} from '../../geometry/Point';\nimport {requestAnimFrame, cancelAnimFrame} from '../../core/Util';\n\n/*\n * L.Handler.MarkerDrag is used internally by L.Marker to make the markers draggable.\n */\n\n\n/* @namespace Marker\n * @section Interaction handlers\n *\n * Interaction handlers are properties of a marker instance that allow you to control interaction behavior in runtime, enabling or disabling certain features such as dragging (see `Handler` methods). Example:\n *\n * ```js\n * marker.dragging.disable();\n * ```\n *\n * @property dragging: Handler\n * Marker dragging handler (by both mouse and touch). Only valid when the marker is on the map (Otherwise set [`marker.options.draggable`](#marker-draggable)).\n */\n\nexport var MarkerDrag = Handler.extend({\n\tinitialize: function (marker) {\n\t\tthis._marker = marker;\n\t},\n\n\taddHooks: function () {\n\t\tvar icon = this._marker._icon;\n\n\t\tif (!this._draggable) {\n\t\t\tthis._draggable = new Draggable(icon, icon, true);\n\t\t}\n\n\t\tthis._draggable.on({\n\t\t\tdragstart: this._onDragStart,\n\t\t\tpredrag: this._onPreDrag,\n\t\t\tdrag: this._onDrag,\n\t\t\tdragend: this._onDragEnd\n\t\t}, this).enable();\n\n\t\tDomUtil.addClass(icon, 'leaflet-marker-draggable');\n\t},\n\n\tremoveHooks: function () {\n\t\tthis._draggable.off({\n\t\t\tdragstart: this._onDragStart,\n\t\t\tpredrag: this._onPreDrag,\n\t\t\tdrag: this._onDrag,\n\t\t\tdragend: this._onDragEnd\n\t\t}, this).disable();\n\n\t\tif (this._marker._icon) {\n\t\t\tDomUtil.removeClass(this._marker._icon, 'leaflet-marker-draggable');\n\t\t}\n\t},\n\n\tmoved: function () {\n\t\treturn this._draggable && this._draggable._moved;\n\t},\n\n\t_adjustPan: function (e) {\n\t\tvar marker = this._marker,\n\t\t map = marker._map,\n\t\t speed = this._marker.options.autoPanSpeed,\n\t\t padding = this._marker.options.autoPanPadding,\n\t\t iconPos = DomUtil.getPosition(marker._icon),\n\t\t bounds = map.getPixelBounds(),\n\t\t origin = map.getPixelOrigin();\n\n\t\tvar panBounds = toBounds(\n\t\t\tbounds.min._subtract(origin).add(padding),\n\t\t\tbounds.max._subtract(origin).subtract(padding)\n\t\t);\n\n\t\tif (!panBounds.contains(iconPos)) {\n\t\t\t// Compute incremental movement\n\t\t\tvar movement = toPoint(\n\t\t\t\t(Math.max(panBounds.max.x, iconPos.x) - panBounds.max.x) / (bounds.max.x - panBounds.max.x) -\n\t\t\t\t(Math.min(panBounds.min.x, iconPos.x) - panBounds.min.x) / (bounds.min.x - panBounds.min.x),\n\n\t\t\t\t(Math.max(panBounds.max.y, iconPos.y) - panBounds.max.y) / (bounds.max.y - panBounds.max.y) -\n\t\t\t\t(Math.min(panBounds.min.y, iconPos.y) - panBounds.min.y) / (bounds.min.y - panBounds.min.y)\n\t\t\t).multiplyBy(speed);\n\n\t\t\tmap.panBy(movement, {animate: false});\n\n\t\t\tthis._draggable._newPos._add(movement);\n\t\t\tthis._draggable._startPos._add(movement);\n\n\t\t\tDomUtil.setPosition(marker._icon, this._draggable._newPos);\n\t\t\tthis._onDrag(e);\n\n\t\t\tthis._panRequest = requestAnimFrame(this._adjustPan.bind(this, e));\n\t\t}\n\t},\n\n\t_onDragStart: function () {\n\t\t// @section Dragging events\n\t\t// @event dragstart: Event\n\t\t// Fired when the user starts dragging the marker.\n\n\t\t// @event movestart: Event\n\t\t// Fired when the marker starts moving (because of dragging).\n\n\t\tthis._oldLatLng = this._marker.getLatLng();\n\n\t\t// When using ES6 imports it could not be set when `Popup` was not imported as well\n\t\tthis._marker.closePopup && this._marker.closePopup();\n\n\t\tthis._marker\n\t\t\t.fire('movestart')\n\t\t\t.fire('dragstart');\n\t},\n\n\t_onPreDrag: function (e) {\n\t\tif (this._marker.options.autoPan) {\n\t\t\tcancelAnimFrame(this._panRequest);\n\t\t\tthis._panRequest = requestAnimFrame(this._adjustPan.bind(this, e));\n\t\t}\n\t},\n\n\t_onDrag: function (e) {\n\t\tvar marker = this._marker,\n\t\t shadow = marker._shadow,\n\t\t iconPos = DomUtil.getPosition(marker._icon),\n\t\t latlng = marker._map.layerPointToLatLng(iconPos);\n\n\t\t// update shadow position\n\t\tif (shadow) {\n\t\t\tDomUtil.setPosition(shadow, iconPos);\n\t\t}\n\n\t\tmarker._latlng = latlng;\n\t\te.latlng = latlng;\n\t\te.oldLatLng = this._oldLatLng;\n\n\t\t// @event drag: Event\n\t\t// Fired repeatedly while the user drags the marker.\n\t\tmarker\n\t\t .fire('move', e)\n\t\t .fire('drag', e);\n\t},\n\n\t_onDragEnd: function (e) {\n\t\t// @event dragend: DragEndEvent\n\t\t// Fired when the user stops dragging the marker.\n\n\t\t cancelAnimFrame(this._panRequest);\n\n\t\t// @event moveend: Event\n\t\t// Fired when the marker stops moving (because of dragging).\n\t\tdelete this._oldLatLng;\n\t\tthis._marker\n\t\t .fire('moveend')\n\t\t .fire('dragend', e);\n\t}\n});\n", "import {Layer} from '../Layer';\r\nimport {IconDefault} from './Icon.Default';\r\nimport * as Util from '../../core/Util';\r\nimport {toLatLng as latLng} from '../../geo/LatLng';\r\nimport {toPoint as point} from '../../geometry/Point';\r\nimport * as DomUtil from '../../dom/DomUtil';\r\nimport * as DomEvent from '../../dom/DomEvent';\r\nimport {MarkerDrag} from './Marker.Drag';\r\n\r\n/*\r\n * @class Marker\r\n * @inherits Interactive layer\r\n * @aka L.Marker\r\n * L.Marker is used to display clickable/draggable icons on the map. Extends `Layer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.marker([50.5, 30.5]).addTo(map);\r\n * ```\r\n */\r\n\r\nexport var Marker = Layer.extend({\r\n\r\n\t// @section\r\n\t// @aka Marker options\r\n\toptions: {\r\n\t\t// @option icon: Icon = *\r\n\t\t// Icon instance to use for rendering the marker.\r\n\t\t// See [Icon documentation](#L.Icon) for details on how to customize the marker icon.\r\n\t\t// If not specified, a common instance of `L.Icon.Default` is used.\r\n\t\ticon: new IconDefault(),\r\n\r\n\t\t// Option inherited from \"Interactive layer\" abstract class\r\n\t\tinteractive: true,\r\n\r\n\t\t// @option keyboard: Boolean = true\r\n\t\t// Whether the marker can be tabbed to with a keyboard and clicked by pressing enter.\r\n\t\tkeyboard: true,\r\n\r\n\t\t// @option title: String = ''\r\n\t\t// Text for the browser tooltip that appear on marker hover (no tooltip by default).\r\n\t\t// [Useful for accessibility](https://leafletjs.com/examples/accessibility/#markers-must-be-labelled).\r\n\t\ttitle: '',\r\n\r\n\t\t// @option alt: String = 'Marker'\r\n\t\t// Text for the `alt` attribute of the icon image.\r\n\t\t// [Useful for accessibility](https://leafletjs.com/examples/accessibility/#markers-must-be-labelled).\r\n\t\talt: 'Marker',\r\n\r\n\t\t// @option zIndexOffset: Number = 0\r\n\t\t// By default, marker images zIndex is set automatically based on its latitude. Use this option if you want to put the marker on top of all others (or below), specifying a high value like `1000` (or high negative value, respectively).\r\n\t\tzIndexOffset: 0,\r\n\r\n\t\t// @option opacity: Number = 1.0\r\n\t\t// The opacity of the marker.\r\n\t\topacity: 1,\r\n\r\n\t\t// @option riseOnHover: Boolean = false\r\n\t\t// If `true`, the marker will get on top of others when you hover the mouse over it.\r\n\t\triseOnHover: false,\r\n\r\n\t\t// @option riseOffset: Number = 250\r\n\t\t// The z-index offset used for the `riseOnHover` feature.\r\n\t\triseOffset: 250,\r\n\r\n\t\t// @option pane: String = 'markerPane'\r\n\t\t// `Map pane` where the markers icon will be added.\r\n\t\tpane: 'markerPane',\r\n\r\n\t\t// @option shadowPane: String = 'shadowPane'\r\n\t\t// `Map pane` where the markers shadow will be added.\r\n\t\tshadowPane: 'shadowPane',\r\n\r\n\t\t// @option bubblingMouseEvents: Boolean = false\r\n\t\t// When `true`, a mouse event on this marker will trigger the same event on the map\r\n\t\t// (unless [`L.DomEvent.stopPropagation`](#domevent-stoppropagation) is used).\r\n\t\tbubblingMouseEvents: false,\r\n\r\n\t\t// @option autoPanOnFocus: Boolean = true\r\n\t\t// When `true`, the map will pan whenever the marker is focused (via\r\n\t\t// e.g. pressing `tab` on the keyboard) to ensure the marker is\r\n\t\t// visible within the map's bounds\r\n\t\tautoPanOnFocus: true,\r\n\r\n\t\t// @section Draggable marker options\r\n\t\t// @option draggable: Boolean = false\r\n\t\t// Whether the marker is draggable with mouse/touch or not.\r\n\t\tdraggable: false,\r\n\r\n\t\t// @option autoPan: Boolean = false\r\n\t\t// Whether to pan the map when dragging this marker near its edge or not.\r\n\t\tautoPan: false,\r\n\r\n\t\t// @option autoPanPadding: Point = Point(50, 50)\r\n\t\t// Distance (in pixels to the left/right and to the top/bottom) of the\r\n\t\t// map edge to start panning the map.\r\n\t\tautoPanPadding: [50, 50],\r\n\r\n\t\t// @option autoPanSpeed: Number = 10\r\n\t\t// Number of pixels the map should pan by.\r\n\t\tautoPanSpeed: 10\r\n\t},\r\n\r\n\t/* @section\r\n\t *\r\n\t * In addition to [shared layer methods](#Layer) like `addTo()` and `remove()` and [popup methods](#Popup) like bindPopup() you can also use the following methods:\r\n\t */\r\n\r\n\tinitialize: function (latlng, options) {\r\n\t\tUtil.setOptions(this, options);\r\n\t\tthis._latlng = latLng(latlng);\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tthis._zoomAnimated = this._zoomAnimated && map.options.markerZoomAnimation;\r\n\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tmap.on('zoomanim', this._animateZoom, this);\r\n\t\t}\r\n\r\n\t\tthis._initIcon();\r\n\t\tthis.update();\r\n\t},\r\n\r\n\tonRemove: function (map) {\r\n\t\tif (this.dragging && this.dragging.enabled()) {\r\n\t\t\tthis.options.draggable = true;\r\n\t\t\tthis.dragging.removeHooks();\r\n\t\t}\r\n\t\tdelete this.dragging;\r\n\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tmap.off('zoomanim', this._animateZoom, this);\r\n\t\t}\r\n\r\n\t\tthis._removeIcon();\r\n\t\tthis._removeShadow();\r\n\t},\r\n\r\n\tgetEvents: function () {\r\n\t\treturn {\r\n\t\t\tzoom: this.update,\r\n\t\t\tviewreset: this.update\r\n\t\t};\r\n\t},\r\n\r\n\t// @method getLatLng: LatLng\r\n\t// Returns the current geographical position of the marker.\r\n\tgetLatLng: function () {\r\n\t\treturn this._latlng;\r\n\t},\r\n\r\n\t// @method setLatLng(latlng: LatLng): this\r\n\t// Changes the marker position to the given point.\r\n\tsetLatLng: function (latlng) {\r\n\t\tvar oldLatLng = this._latlng;\r\n\t\tthis._latlng = latLng(latlng);\r\n\t\tthis.update();\r\n\r\n\t\t// @event move: Event\r\n\t\t// Fired when the marker is moved via [`setLatLng`](#marker-setlatlng) or by [dragging](#marker-dragging). Old and new coordinates are included in event arguments as `oldLatLng`, `latlng`.\r\n\t\treturn this.fire('move', {oldLatLng: oldLatLng, latlng: this._latlng});\r\n\t},\r\n\r\n\t// @method setZIndexOffset(offset: Number): this\r\n\t// Changes the [zIndex offset](#marker-zindexoffset) of the marker.\r\n\tsetZIndexOffset: function (offset) {\r\n\t\tthis.options.zIndexOffset = offset;\r\n\t\treturn this.update();\r\n\t},\r\n\r\n\t// @method getIcon: Icon\r\n\t// Returns the current icon used by the marker\r\n\tgetIcon: function () {\r\n\t\treturn this.options.icon;\r\n\t},\r\n\r\n\t// @method setIcon(icon: Icon): this\r\n\t// Changes the marker icon.\r\n\tsetIcon: function (icon) {\r\n\r\n\t\tthis.options.icon = icon;\r\n\r\n\t\tif (this._map) {\r\n\t\t\tthis._initIcon();\r\n\t\t\tthis.update();\r\n\t\t}\r\n\r\n\t\tif (this._popup) {\r\n\t\t\tthis.bindPopup(this._popup, this._popup.options);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\tgetElement: function () {\r\n\t\treturn this._icon;\r\n\t},\r\n\r\n\tupdate: function () {\r\n\r\n\t\tif (this._icon && this._map) {\r\n\t\t\tvar pos = this._map.latLngToLayerPoint(this._latlng).round();\r\n\t\t\tthis._setPos(pos);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_initIcon: function () {\r\n\t\tvar options = this.options,\r\n\t\t classToAdd = 'leaflet-zoom-' + (this._zoomAnimated ? 'animated' : 'hide');\r\n\r\n\t\tvar icon = options.icon.createIcon(this._icon),\r\n\t\t addIcon = false;\r\n\r\n\t\t// if we're not reusing the icon, remove the old one and init new one\r\n\t\tif (icon !== this._icon) {\r\n\t\t\tif (this._icon) {\r\n\t\t\t\tthis._removeIcon();\r\n\t\t\t}\r\n\t\t\taddIcon = true;\r\n\r\n\t\t\tif (options.title) {\r\n\t\t\t\ticon.title = options.title;\r\n\t\t\t}\r\n\r\n\t\t\tif (icon.tagName === 'IMG') {\r\n\t\t\t\ticon.alt = options.alt || '';\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tDomUtil.addClass(icon, classToAdd);\r\n\r\n\t\tif (options.keyboard) {\r\n\t\t\ticon.tabIndex = '0';\r\n\t\t\ticon.setAttribute('role', 'button');\r\n\t\t}\r\n\r\n\t\tthis._icon = icon;\r\n\r\n\t\tif (options.riseOnHover) {\r\n\t\t\tthis.on({\r\n\t\t\t\tmouseover: this._bringToFront,\r\n\t\t\t\tmouseout: this._resetZIndex\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.options.autoPanOnFocus) {\r\n\t\t\tDomEvent.on(icon, 'focus', this._panOnFocus, this);\r\n\t\t}\r\n\r\n\t\tvar newShadow = options.icon.createShadow(this._shadow),\r\n\t\t addShadow = false;\r\n\r\n\t\tif (newShadow !== this._shadow) {\r\n\t\t\tthis._removeShadow();\r\n\t\t\taddShadow = true;\r\n\t\t}\r\n\r\n\t\tif (newShadow) {\r\n\t\t\tDomUtil.addClass(newShadow, classToAdd);\r\n\t\t\tnewShadow.alt = '';\r\n\t\t}\r\n\t\tthis._shadow = newShadow;\r\n\r\n\r\n\t\tif (options.opacity < 1) {\r\n\t\t\tthis._updateOpacity();\r\n\t\t}\r\n\r\n\r\n\t\tif (addIcon) {\r\n\t\t\tthis.getPane().appendChild(this._icon);\r\n\t\t}\r\n\t\tthis._initInteraction();\r\n\t\tif (newShadow && addShadow) {\r\n\t\t\tthis.getPane(options.shadowPane).appendChild(this._shadow);\r\n\t\t}\r\n\t},\r\n\r\n\t_removeIcon: function () {\r\n\t\tif (this.options.riseOnHover) {\r\n\t\t\tthis.off({\r\n\t\t\t\tmouseover: this._bringToFront,\r\n\t\t\t\tmouseout: this._resetZIndex\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.options.autoPanOnFocus) {\r\n\t\t\tDomEvent.off(this._icon, 'focus', this._panOnFocus, this);\r\n\t\t}\r\n\r\n\t\tDomUtil.remove(this._icon);\r\n\t\tthis.removeInteractiveTarget(this._icon);\r\n\r\n\t\tthis._icon = null;\r\n\t},\r\n\r\n\t_removeShadow: function () {\r\n\t\tif (this._shadow) {\r\n\t\t\tDomUtil.remove(this._shadow);\r\n\t\t}\r\n\t\tthis._shadow = null;\r\n\t},\r\n\r\n\t_setPos: function (pos) {\r\n\r\n\t\tif (this._icon) {\r\n\t\t\tDomUtil.setPosition(this._icon, pos);\r\n\t\t}\r\n\r\n\t\tif (this._shadow) {\r\n\t\t\tDomUtil.setPosition(this._shadow, pos);\r\n\t\t}\r\n\r\n\t\tthis._zIndex = pos.y + this.options.zIndexOffset;\r\n\r\n\t\tthis._resetZIndex();\r\n\t},\r\n\r\n\t_updateZIndex: function (offset) {\r\n\t\tif (this._icon) {\r\n\t\t\tthis._icon.style.zIndex = this._zIndex + offset;\r\n\t\t}\r\n\t},\r\n\r\n\t_animateZoom: function (opt) {\r\n\t\tvar pos = this._map._latLngToNewLayerPoint(this._latlng, opt.zoom, opt.center).round();\r\n\r\n\t\tthis._setPos(pos);\r\n\t},\r\n\r\n\t_initInteraction: function () {\r\n\r\n\t\tif (!this.options.interactive) { return; }\r\n\r\n\t\tDomUtil.addClass(this._icon, 'leaflet-interactive');\r\n\r\n\t\tthis.addInteractiveTarget(this._icon);\r\n\r\n\t\tif (MarkerDrag) {\r\n\t\t\tvar draggable = this.options.draggable;\r\n\t\t\tif (this.dragging) {\r\n\t\t\t\tdraggable = this.dragging.enabled();\r\n\t\t\t\tthis.dragging.disable();\r\n\t\t\t}\r\n\r\n\t\t\tthis.dragging = new MarkerDrag(this);\r\n\r\n\t\t\tif (draggable) {\r\n\t\t\t\tthis.dragging.enable();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t// @method setOpacity(opacity: Number): this\r\n\t// Changes the opacity of the marker.\r\n\tsetOpacity: function (opacity) {\r\n\t\tthis.options.opacity = opacity;\r\n\t\tif (this._map) {\r\n\t\t\tthis._updateOpacity();\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_updateOpacity: function () {\r\n\t\tvar opacity = this.options.opacity;\r\n\r\n\t\tif (this._icon) {\r\n\t\t\tDomUtil.setOpacity(this._icon, opacity);\r\n\t\t}\r\n\r\n\t\tif (this._shadow) {\r\n\t\t\tDomUtil.setOpacity(this._shadow, opacity);\r\n\t\t}\r\n\t},\r\n\r\n\t_bringToFront: function () {\r\n\t\tthis._updateZIndex(this.options.riseOffset);\r\n\t},\r\n\r\n\t_resetZIndex: function () {\r\n\t\tthis._updateZIndex(0);\r\n\t},\r\n\r\n\t_panOnFocus: function () {\r\n\t\tvar map = this._map;\r\n\t\tif (!map) { return; }\r\n\r\n\t\tvar iconOpts = this.options.icon.options;\r\n\t\tvar size = iconOpts.iconSize ? point(iconOpts.iconSize) : point(0, 0);\r\n\t\tvar anchor = iconOpts.iconAnchor ? point(iconOpts.iconAnchor) : point(0, 0);\r\n\r\n\t\tmap.panInside(this._latlng, {\r\n\t\t\tpaddingTopLeft: anchor,\r\n\t\t\tpaddingBottomRight: size.subtract(anchor)\r\n\t\t});\r\n\t},\r\n\r\n\t_getPopupAnchor: function () {\r\n\t\treturn this.options.icon.options.popupAnchor;\r\n\t},\r\n\r\n\t_getTooltipAnchor: function () {\r\n\t\treturn this.options.icon.options.tooltipAnchor;\r\n\t}\r\n});\r\n\r\n\r\n// factory L.marker(latlng: LatLng, options? : Marker options)\r\n\r\n// @factory L.marker(latlng: LatLng, options? : Marker options)\r\n// Instantiates a Marker object given a geographical point and optionally an options object.\r\nexport function marker(latlng, options) {\r\n\treturn new Marker(latlng, options);\r\n}\r\n", "import {Layer} from '../Layer';\nimport * as Util from '../../core/Util';\n\n/*\n * @class Path\n * @aka L.Path\n * @inherits Interactive layer\n *\n * An abstract class that contains options and constants shared between vector\n * overlays (Polygon, Polyline, Circle). Do not use it directly. Extends `Layer`.\n */\n\nexport var Path = Layer.extend({\n\n\t// @section\n\t// @aka Path options\n\toptions: {\n\t\t// @option stroke: Boolean = true\n\t\t// Whether to draw stroke along the path. Set it to `false` to disable borders on polygons or circles.\n\t\tstroke: true,\n\n\t\t// @option color: String = '#3388ff'\n\t\t// Stroke color\n\t\tcolor: '#3388ff',\n\n\t\t// @option weight: Number = 3\n\t\t// Stroke width in pixels\n\t\tweight: 3,\n\n\t\t// @option opacity: Number = 1.0\n\t\t// Stroke opacity\n\t\topacity: 1,\n\n\t\t// @option lineCap: String= 'round'\n\t\t// A string that defines [shape to be used at the end](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-linecap) of the stroke.\n\t\tlineCap: 'round',\n\n\t\t// @option lineJoin: String = 'round'\n\t\t// A string that defines [shape to be used at the corners](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-linejoin) of the stroke.\n\t\tlineJoin: 'round',\n\n\t\t// @option dashArray: String = null\n\t\t// A string that defines the stroke [dash pattern](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-dasharray). Doesn't work on `Canvas`-powered layers in [some old browsers](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/setLineDash#Browser_compatibility).\n\t\tdashArray: null,\n\n\t\t// @option dashOffset: String = null\n\t\t// A string that defines the [distance into the dash pattern to start the dash](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-dashoffset). Doesn't work on `Canvas`-powered layers in [some old browsers](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/setLineDash#Browser_compatibility).\n\t\tdashOffset: null,\n\n\t\t// @option fill: Boolean = depends\n\t\t// Whether to fill the path with color. Set it to `false` to disable filling on polygons or circles.\n\t\tfill: false,\n\n\t\t// @option fillColor: String = *\n\t\t// Fill color. Defaults to the value of the [`color`](#path-color) option\n\t\tfillColor: null,\n\n\t\t// @option fillOpacity: Number = 0.2\n\t\t// Fill opacity.\n\t\tfillOpacity: 0.2,\n\n\t\t// @option fillRule: String = 'evenodd'\n\t\t// A string that defines [how the inside of a shape](https://developer.mozilla.org/docs/Web/SVG/Attribute/fill-rule) is determined.\n\t\tfillRule: 'evenodd',\n\n\t\t// className: '',\n\n\t\t// Option inherited from \"Interactive layer\" abstract class\n\t\tinteractive: true,\n\n\t\t// @option bubblingMouseEvents: Boolean = true\n\t\t// When `true`, a mouse event on this path will trigger the same event on the map\n\t\t// (unless [`L.DomEvent.stopPropagation`](#domevent-stoppropagation) is used).\n\t\tbubblingMouseEvents: true\n\t},\n\n\tbeforeAdd: function (map) {\n\t\t// Renderer is set here because we need to call renderer.getEvents\n\t\t// before this.getEvents.\n\t\tthis._renderer = map.getRenderer(this);\n\t},\n\n\tonAdd: function () {\n\t\tthis._renderer._initPath(this);\n\t\tthis._reset();\n\t\tthis._renderer._addPath(this);\n\t},\n\n\tonRemove: function () {\n\t\tthis._renderer._removePath(this);\n\t},\n\n\t// @method redraw(): this\n\t// Redraws the layer. Sometimes useful after you changed the coordinates that the path uses.\n\tredraw: function () {\n\t\tif (this._map) {\n\t\t\tthis._renderer._updatePath(this);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method setStyle(style: Path options): this\n\t// Changes the appearance of a Path based on the options in the `Path options` object.\n\tsetStyle: function (style) {\n\t\tUtil.setOptions(this, style);\n\t\tif (this._renderer) {\n\t\t\tthis._renderer._updateStyle(this);\n\t\t\tif (this.options.stroke && style && Object.prototype.hasOwnProperty.call(style, 'weight')) {\n\t\t\t\tthis._updateBounds();\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method bringToFront(): this\n\t// Brings the layer to the top of all path layers.\n\tbringToFront: function () {\n\t\tif (this._renderer) {\n\t\t\tthis._renderer._bringToFront(this);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method bringToBack(): this\n\t// Brings the layer to the bottom of all path layers.\n\tbringToBack: function () {\n\t\tif (this._renderer) {\n\t\t\tthis._renderer._bringToBack(this);\n\t\t}\n\t\treturn this;\n\t},\n\n\tgetElement: function () {\n\t\treturn this._path;\n\t},\n\n\t_reset: function () {\n\t\t// defined in child classes\n\t\tthis._project();\n\t\tthis._update();\n\t},\n\n\t_clickTolerance: function () {\n\t\t// used when doing hit detection for Canvas layers\n\t\treturn (this.options.stroke ? this.options.weight / 2 : 0) +\n\t\t (this._renderer.options.tolerance || 0);\n\t}\n});\n", "import {Path} from './Path';\nimport * as Util from '../../core/Util';\nimport {toLatLng} from '../../geo/LatLng';\nimport {Bounds} from '../../geometry/Bounds';\n\n\n/*\n * @class CircleMarker\n * @aka L.CircleMarker\n * @inherits Path\n *\n * A circle of a fixed size with radius specified in pixels. Extends `Path`.\n */\n\nexport var CircleMarker = Path.extend({\n\n\t// @section\n\t// @aka CircleMarker options\n\toptions: {\n\t\tfill: true,\n\n\t\t// @option radius: Number = 10\n\t\t// Radius of the circle marker, in pixels\n\t\tradius: 10\n\t},\n\n\tinitialize: function (latlng, options) {\n\t\tUtil.setOptions(this, options);\n\t\tthis._latlng = toLatLng(latlng);\n\t\tthis._radius = this.options.radius;\n\t},\n\n\t// @method setLatLng(latLng: LatLng): this\n\t// Sets the position of a circle marker to a new location.\n\tsetLatLng: function (latlng) {\n\t\tvar oldLatLng = this._latlng;\n\t\tthis._latlng = toLatLng(latlng);\n\t\tthis.redraw();\n\n\t\t// @event move: Event\n\t\t// Fired when the marker is moved via [`setLatLng`](#circlemarker-setlatlng). Old and new coordinates are included in event arguments as `oldLatLng`, `latlng`.\n\t\treturn this.fire('move', {oldLatLng: oldLatLng, latlng: this._latlng});\n\t},\n\n\t// @method getLatLng(): LatLng\n\t// Returns the current geographical position of the circle marker\n\tgetLatLng: function () {\n\t\treturn this._latlng;\n\t},\n\n\t// @method setRadius(radius: Number): this\n\t// Sets the radius of a circle marker. Units are in pixels.\n\tsetRadius: function (radius) {\n\t\tthis.options.radius = this._radius = radius;\n\t\treturn this.redraw();\n\t},\n\n\t// @method getRadius(): Number\n\t// Returns the current radius of the circle\n\tgetRadius: function () {\n\t\treturn this._radius;\n\t},\n\n\tsetStyle : function (options) {\n\t\tvar radius = options && options.radius || this._radius;\n\t\tPath.prototype.setStyle.call(this, options);\n\t\tthis.setRadius(radius);\n\t\treturn this;\n\t},\n\n\t_project: function () {\n\t\tthis._point = this._map.latLngToLayerPoint(this._latlng);\n\t\tthis._updateBounds();\n\t},\n\n\t_updateBounds: function () {\n\t\tvar r = this._radius,\n\t\t r2 = this._radiusY || r,\n\t\t w = this._clickTolerance(),\n\t\t p = [r + w, r2 + w];\n\t\tthis._pxBounds = new Bounds(this._point.subtract(p), this._point.add(p));\n\t},\n\n\t_update: function () {\n\t\tif (this._map) {\n\t\t\tthis._updatePath();\n\t\t}\n\t},\n\n\t_updatePath: function () {\n\t\tthis._renderer._updateCircle(this);\n\t},\n\n\t_empty: function () {\n\t\treturn this._radius && !this._renderer._bounds.intersects(this._pxBounds);\n\t},\n\n\t// Needed by the `Canvas` renderer for interactivity\n\t_containsPoint: function (p) {\n\t\treturn p.distanceTo(this._point) <= this._radius + this._clickTolerance();\n\t}\n});\n\n\n// @factory L.circleMarker(latlng: LatLng, options?: CircleMarker options)\n// Instantiates a circle marker object given a geographical point, and an optional options object.\nexport function circleMarker(latlng, options) {\n\treturn new CircleMarker(latlng, options);\n}\n", "import {CircleMarker} from './CircleMarker';\nimport {Path} from './Path';\nimport * as Util from '../../core/Util';\nimport {toLatLng} from '../../geo/LatLng';\nimport {LatLngBounds} from '../../geo/LatLngBounds';\nimport {Earth} from '../../geo/crs/CRS.Earth';\n\n\n/*\n * @class Circle\n * @aka L.Circle\n * @inherits CircleMarker\n *\n * A class for drawing circle overlays on a map. Extends `CircleMarker`.\n *\n * It's an approximation and starts to diverge from a real circle closer to poles (due to projection distortion).\n *\n * @example\n *\n * ```js\n * L.circle([50.5, 30.5], {radius: 200}).addTo(map);\n * ```\n */\n\nexport var Circle = CircleMarker.extend({\n\n\tinitialize: function (latlng, options, legacyOptions) {\n\t\tif (typeof options === 'number') {\n\t\t\t// Backwards compatibility with 0.7.x factory (latlng, radius, options?)\n\t\t\toptions = Util.extend({}, legacyOptions, {radius: options});\n\t\t}\n\t\tUtil.setOptions(this, options);\n\t\tthis._latlng = toLatLng(latlng);\n\n\t\tif (isNaN(this.options.radius)) { throw new Error('Circle radius cannot be NaN'); }\n\n\t\t// @section\n\t\t// @aka Circle options\n\t\t// @option radius: Number; Radius of the circle, in meters.\n\t\tthis._mRadius = this.options.radius;\n\t},\n\n\t// @method setRadius(radius: Number): this\n\t// Sets the radius of a circle. Units are in meters.\n\tsetRadius: function (radius) {\n\t\tthis._mRadius = radius;\n\t\treturn this.redraw();\n\t},\n\n\t// @method getRadius(): Number\n\t// Returns the current radius of a circle. Units are in meters.\n\tgetRadius: function () {\n\t\treturn this._mRadius;\n\t},\n\n\t// @method getBounds(): LatLngBounds\n\t// Returns the `LatLngBounds` of the path.\n\tgetBounds: function () {\n\t\tvar half = [this._radius, this._radiusY || this._radius];\n\n\t\treturn new LatLngBounds(\n\t\t\tthis._map.layerPointToLatLng(this._point.subtract(half)),\n\t\t\tthis._map.layerPointToLatLng(this._point.add(half)));\n\t},\n\n\tsetStyle: Path.prototype.setStyle,\n\n\t_project: function () {\n\n\t\tvar lng = this._latlng.lng,\n\t\t lat = this._latlng.lat,\n\t\t map = this._map,\n\t\t crs = map.options.crs;\n\n\t\tif (crs.distance === Earth.distance) {\n\t\t\tvar d = Math.PI / 180,\n\t\t\t latR = (this._mRadius / Earth.R) / d,\n\t\t\t top = map.project([lat + latR, lng]),\n\t\t\t bottom = map.project([lat - latR, lng]),\n\t\t\t p = top.add(bottom).divideBy(2),\n\t\t\t lat2 = map.unproject(p).lat,\n\t\t\t lngR = Math.acos((Math.cos(latR * d) - Math.sin(lat * d) * Math.sin(lat2 * d)) /\n\t\t\t (Math.cos(lat * d) * Math.cos(lat2 * d))) / d;\n\n\t\t\tif (isNaN(lngR) || lngR === 0) {\n\t\t\t\tlngR = latR / Math.cos(Math.PI / 180 * lat); // Fallback for edge case, #2425\n\t\t\t}\n\n\t\t\tthis._point = p.subtract(map.getPixelOrigin());\n\t\t\tthis._radius = isNaN(lngR) ? 0 : p.x - map.project([lat2, lng - lngR]).x;\n\t\t\tthis._radiusY = p.y - top.y;\n\n\t\t} else {\n\t\t\tvar latlng2 = crs.unproject(crs.project(this._latlng).subtract([this._mRadius, 0]));\n\n\t\t\tthis._point = map.latLngToLayerPoint(this._latlng);\n\t\t\tthis._radius = this._point.x - map.latLngToLayerPoint(latlng2).x;\n\t\t}\n\n\t\tthis._updateBounds();\n\t}\n});\n\n// @factory L.circle(latlng: LatLng, options?: Circle options)\n// Instantiates a circle object given a geographical point, and an options object\n// which contains the circle radius.\n// @alternative\n// @factory L.circle(latlng: LatLng, radius: Number, options?: Circle options)\n// Obsolete way of instantiating a circle, for compatibility with 0.7.x code.\n// Do not use in new applications or plugins.\nexport function circle(latlng, options, legacyOptions) {\n\treturn new Circle(latlng, options, legacyOptions);\n}\n", "import {Path} from './Path';\nimport * as Util from '../../core/Util';\nimport * as LineUtil from '../../geometry/LineUtil';\nimport {LatLng, toLatLng} from '../../geo/LatLng';\nimport {LatLngBounds} from '../../geo/LatLngBounds';\nimport {Bounds} from '../../geometry/Bounds';\nimport {Point} from '../../geometry/Point';\n\n/*\n * @class Polyline\n * @aka L.Polyline\n * @inherits Path\n *\n * A class for drawing polyline overlays on a map. Extends `Path`.\n *\n * @example\n *\n * ```js\n * // create a red polyline from an array of LatLng points\n * var latlngs = [\n * \t[45.51, -122.68],\n * \t[37.77, -122.43],\n * \t[34.04, -118.2]\n * ];\n *\n * var polyline = L.polyline(latlngs, {color: 'red'}).addTo(map);\n *\n * // zoom the map to the polyline\n * map.fitBounds(polyline.getBounds());\n * ```\n *\n * You can also pass a multi-dimensional array to represent a `MultiPolyline` shape:\n *\n * ```js\n * // create a red polyline from an array of arrays of LatLng points\n * var latlngs = [\n * \t[[45.51, -122.68],\n * \t [37.77, -122.43],\n * \t [34.04, -118.2]],\n * \t[[40.78, -73.91],\n * \t [41.83, -87.62],\n * \t [32.76, -96.72]]\n * ];\n * ```\n */\n\n\nexport var Polyline = Path.extend({\n\n\t// @section\n\t// @aka Polyline options\n\toptions: {\n\t\t// @option smoothFactor: Number = 1.0\n\t\t// How much to simplify the polyline on each zoom level. More means\n\t\t// better performance and smoother look, and less means more accurate representation.\n\t\tsmoothFactor: 1.0,\n\n\t\t// @option noClip: Boolean = false\n\t\t// Disable polyline clipping.\n\t\tnoClip: false\n\t},\n\n\tinitialize: function (latlngs, options) {\n\t\tUtil.setOptions(this, options);\n\t\tthis._setLatLngs(latlngs);\n\t},\n\n\t// @method getLatLngs(): LatLng[]\n\t// Returns an array of the points in the path, or nested arrays of points in case of multi-polyline.\n\tgetLatLngs: function () {\n\t\treturn this._latlngs;\n\t},\n\n\t// @method setLatLngs(latlngs: LatLng[]): this\n\t// Replaces all the points in the polyline with the given array of geographical points.\n\tsetLatLngs: function (latlngs) {\n\t\tthis._setLatLngs(latlngs);\n\t\treturn this.redraw();\n\t},\n\n\t// @method isEmpty(): Boolean\n\t// Returns `true` if the Polyline has no LatLngs.\n\tisEmpty: function () {\n\t\treturn !this._latlngs.length;\n\t},\n\n\t// @method closestLayerPoint(p: Point): Point\n\t// Returns the point closest to `p` on the Polyline.\n\tclosestLayerPoint: function (p) {\n\t\tvar minDistance = Infinity,\n\t\t minPoint = null,\n\t\t closest = LineUtil._sqClosestPointOnSegment,\n\t\t p1, p2;\n\n\t\tfor (var j = 0, jLen = this._parts.length; j < jLen; j++) {\n\t\t\tvar points = this._parts[j];\n\n\t\t\tfor (var i = 1, len = points.length; i < len; i++) {\n\t\t\t\tp1 = points[i - 1];\n\t\t\t\tp2 = points[i];\n\n\t\t\t\tvar sqDist = closest(p, p1, p2, true);\n\n\t\t\t\tif (sqDist < minDistance) {\n\t\t\t\t\tminDistance = sqDist;\n\t\t\t\t\tminPoint = closest(p, p1, p2);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (minPoint) {\n\t\t\tminPoint.distance = Math.sqrt(minDistance);\n\t\t}\n\t\treturn minPoint;\n\t},\n\n\t// @method getCenter(): LatLng\n\t// Returns the center ([centroid](https://en.wikipedia.org/wiki/Centroid)) of the polyline.\n\tgetCenter: function () {\n\t\t// throws error when not yet added to map as this center calculation requires projected coordinates\n\t\tif (!this._map) {\n\t\t\tthrow new Error('Must add layer to map before using getCenter()');\n\t\t}\n\t\treturn LineUtil.polylineCenter(this._defaultShape(), this._map.options.crs);\n\t},\n\n\t// @method getBounds(): LatLngBounds\n\t// Returns the `LatLngBounds` of the path.\n\tgetBounds: function () {\n\t\treturn this._bounds;\n\t},\n\n\t// @method addLatLng(latlng: LatLng, latlngs?: LatLng[]): this\n\t// Adds a given point to the polyline. By default, adds to the first ring of\n\t// the polyline in case of a multi-polyline, but can be overridden by passing\n\t// a specific ring as a LatLng array (that you can earlier access with [`getLatLngs`](#polyline-getlatlngs)).\n\taddLatLng: function (latlng, latlngs) {\n\t\tlatlngs = latlngs || this._defaultShape();\n\t\tlatlng = toLatLng(latlng);\n\t\tlatlngs.push(latlng);\n\t\tthis._bounds.extend(latlng);\n\t\treturn this.redraw();\n\t},\n\n\t_setLatLngs: function (latlngs) {\n\t\tthis._bounds = new LatLngBounds();\n\t\tthis._latlngs = this._convertLatLngs(latlngs);\n\t},\n\n\t_defaultShape: function () {\n\t\treturn LineUtil.isFlat(this._latlngs) ? this._latlngs : this._latlngs[0];\n\t},\n\n\t// recursively convert latlngs input into actual LatLng instances; calculate bounds along the way\n\t_convertLatLngs: function (latlngs) {\n\t\tvar result = [],\n\t\t flat = LineUtil.isFlat(latlngs);\n\n\t\tfor (var i = 0, len = latlngs.length; i < len; i++) {\n\t\t\tif (flat) {\n\t\t\t\tresult[i] = toLatLng(latlngs[i]);\n\t\t\t\tthis._bounds.extend(result[i]);\n\t\t\t} else {\n\t\t\t\tresult[i] = this._convertLatLngs(latlngs[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t},\n\n\t_project: function () {\n\t\tvar pxBounds = new Bounds();\n\t\tthis._rings = [];\n\t\tthis._projectLatlngs(this._latlngs, this._rings, pxBounds);\n\n\t\tif (this._bounds.isValid() && pxBounds.isValid()) {\n\t\t\tthis._rawPxBounds = pxBounds;\n\t\t\tthis._updateBounds();\n\t\t}\n\t},\n\n\t_updateBounds: function () {\n\t\tvar w = this._clickTolerance(),\n\t\t p = new Point(w, w);\n\n\t\tif (!this._rawPxBounds) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._pxBounds = new Bounds([\n\t\t\tthis._rawPxBounds.min.subtract(p),\n\t\t\tthis._rawPxBounds.max.add(p)\n\t\t]);\n\t},\n\n\t// recursively turns latlngs into a set of rings with projected coordinates\n\t_projectLatlngs: function (latlngs, result, projectedBounds) {\n\t\tvar flat = latlngs[0] instanceof LatLng,\n\t\t len = latlngs.length,\n\t\t i, ring;\n\n\t\tif (flat) {\n\t\t\tring = [];\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tring[i] = this._map.latLngToLayerPoint(latlngs[i]);\n\t\t\t\tprojectedBounds.extend(ring[i]);\n\t\t\t}\n\t\t\tresult.push(ring);\n\t\t} else {\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tthis._projectLatlngs(latlngs[i], result, projectedBounds);\n\t\t\t}\n\t\t}\n\t},\n\n\t// clip polyline by renderer bounds so that we have less to render for performance\n\t_clipPoints: function () {\n\t\tvar bounds = this._renderer._bounds;\n\n\t\tthis._parts = [];\n\t\tif (!this._pxBounds || !this._pxBounds.intersects(bounds)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.options.noClip) {\n\t\t\tthis._parts = this._rings;\n\t\t\treturn;\n\t\t}\n\n\t\tvar parts = this._parts,\n\t\t i, j, k, len, len2, segment, points;\n\n\t\tfor (i = 0, k = 0, len = this._rings.length; i < len; i++) {\n\t\t\tpoints = this._rings[i];\n\n\t\t\tfor (j = 0, len2 = points.length; j < len2 - 1; j++) {\n\t\t\t\tsegment = LineUtil.clipSegment(points[j], points[j + 1], bounds, j, true);\n\n\t\t\t\tif (!segment) { continue; }\n\n\t\t\t\tparts[k] = parts[k] || [];\n\t\t\t\tparts[k].push(segment[0]);\n\n\t\t\t\t// if segment goes out of screen, or it's the last one, it's the end of the line part\n\t\t\t\tif ((segment[1] !== points[j + 1]) || (j === len2 - 2)) {\n\t\t\t\t\tparts[k].push(segment[1]);\n\t\t\t\t\tk++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// simplify each clipped part of the polyline for performance\n\t_simplifyPoints: function () {\n\t\tvar parts = this._parts,\n\t\t tolerance = this.options.smoothFactor;\n\n\t\tfor (var i = 0, len = parts.length; i < len; i++) {\n\t\t\tparts[i] = LineUtil.simplify(parts[i], tolerance);\n\t\t}\n\t},\n\n\t_update: function () {\n\t\tif (!this._map) { return; }\n\n\t\tthis._clipPoints();\n\t\tthis._simplifyPoints();\n\t\tthis._updatePath();\n\t},\n\n\t_updatePath: function () {\n\t\tthis._renderer._updatePoly(this);\n\t},\n\n\t// Needed by the `Canvas` renderer for interactivity\n\t_containsPoint: function (p, closed) {\n\t\tvar i, j, k, len, len2, part,\n\t\t w = this._clickTolerance();\n\n\t\tif (!this._pxBounds || !this._pxBounds.contains(p)) { return false; }\n\n\t\t// hit detection for polylines\n\t\tfor (i = 0, len = this._parts.length; i < len; i++) {\n\t\t\tpart = this._parts[i];\n\n\t\t\tfor (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {\n\t\t\t\tif (!closed && (j === 0)) { continue; }\n\n\t\t\t\tif (LineUtil.pointToSegmentDistance(p, part[k], part[j]) <= w) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n});\n\n// @factory L.polyline(latlngs: LatLng[], options?: Polyline options)\n// Instantiates a polyline object given an array of geographical points and\n// optionally an options object. You can create a `Polyline` object with\n// multiple separate lines (`MultiPolyline`) by passing an array of arrays\n// of geographic points.\nexport function polyline(latlngs, options) {\n\treturn new Polyline(latlngs, options);\n}\n\n// Retrocompat. Allow plugins to support Leaflet versions before and after 1.1.\nPolyline._flat = LineUtil._flat;\n", "import {Polyline} from './Polyline';\nimport {LatLng} from '../../geo/LatLng';\nimport * as LineUtil from '../../geometry/LineUtil';\nimport {Point} from '../../geometry/Point';\nimport {Bounds} from '../../geometry/Bounds';\nimport * as PolyUtil from '../../geometry/PolyUtil';\n\n/*\n * @class Polygon\n * @aka L.Polygon\n * @inherits Polyline\n *\n * A class for drawing polygon overlays on a map. Extends `Polyline`.\n *\n * Note that points you pass when creating a polygon shouldn't have an additional last point equal to the first one — it's better to filter out such points.\n *\n *\n * @example\n *\n * ```js\n * // create a red polygon from an array of LatLng points\n * var latlngs = [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]];\n *\n * var polygon = L.polygon(latlngs, {color: 'red'}).addTo(map);\n *\n * // zoom the map to the polygon\n * map.fitBounds(polygon.getBounds());\n * ```\n *\n * You can also pass an array of arrays of latlngs, with the first array representing the outer shape and the other arrays representing holes in the outer shape:\n *\n * ```js\n * var latlngs = [\n * [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]], // outer ring\n * [[37.29, -108.58],[40.71, -108.58],[40.71, -102.50],[37.29, -102.50]] // hole\n * ];\n * ```\n *\n * Additionally, you can pass a multi-dimensional array to represent a MultiPolygon shape.\n *\n * ```js\n * var latlngs = [\n * [ // first polygon\n * [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]], // outer ring\n * [[37.29, -108.58],[40.71, -108.58],[40.71, -102.50],[37.29, -102.50]] // hole\n * ],\n * [ // second polygon\n * [[41, -111.03],[45, -111.04],[45, -104.05],[41, -104.05]]\n * ]\n * ];\n * ```\n */\n\nexport var Polygon = Polyline.extend({\n\n\toptions: {\n\t\tfill: true\n\t},\n\n\tisEmpty: function () {\n\t\treturn !this._latlngs.length || !this._latlngs[0].length;\n\t},\n\n\t// @method getCenter(): LatLng\n\t// Returns the center ([centroid](http://en.wikipedia.org/wiki/Centroid)) of the Polygon.\n\tgetCenter: function () {\n\t\t// throws error when not yet added to map as this center calculation requires projected coordinates\n\t\tif (!this._map) {\n\t\t\tthrow new Error('Must add layer to map before using getCenter()');\n\t\t}\n\t\treturn PolyUtil.polygonCenter(this._defaultShape(), this._map.options.crs);\n\t},\n\n\t_convertLatLngs: function (latlngs) {\n\t\tvar result = Polyline.prototype._convertLatLngs.call(this, latlngs),\n\t\t len = result.length;\n\n\t\t// remove last point if it equals first one\n\t\tif (len >= 2 && result[0] instanceof LatLng && result[0].equals(result[len - 1])) {\n\t\t\tresult.pop();\n\t\t}\n\t\treturn result;\n\t},\n\n\t_setLatLngs: function (latlngs) {\n\t\tPolyline.prototype._setLatLngs.call(this, latlngs);\n\t\tif (LineUtil.isFlat(this._latlngs)) {\n\t\t\tthis._latlngs = [this._latlngs];\n\t\t}\n\t},\n\n\t_defaultShape: function () {\n\t\treturn LineUtil.isFlat(this._latlngs[0]) ? this._latlngs[0] : this._latlngs[0][0];\n\t},\n\n\t_clipPoints: function () {\n\t\t// polygons need a different clipping algorithm so we redefine that\n\n\t\tvar bounds = this._renderer._bounds,\n\t\t w = this.options.weight,\n\t\t p = new Point(w, w);\n\n\t\t// increase clip padding by stroke width to avoid stroke on clip edges\n\t\tbounds = new Bounds(bounds.min.subtract(p), bounds.max.add(p));\n\n\t\tthis._parts = [];\n\t\tif (!this._pxBounds || !this._pxBounds.intersects(bounds)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.options.noClip) {\n\t\t\tthis._parts = this._rings;\n\t\t\treturn;\n\t\t}\n\n\t\tfor (var i = 0, len = this._rings.length, clipped; i < len; i++) {\n\t\t\tclipped = PolyUtil.clipPolygon(this._rings[i], bounds, true);\n\t\t\tif (clipped.length) {\n\t\t\t\tthis._parts.push(clipped);\n\t\t\t}\n\t\t}\n\t},\n\n\t_updatePath: function () {\n\t\tthis._renderer._updatePoly(this, true);\n\t},\n\n\t// Needed by the `Canvas` renderer for interactivity\n\t_containsPoint: function (p) {\n\t\tvar inside = false,\n\t\t part, p1, p2, i, j, k, len, len2;\n\n\t\tif (!this._pxBounds || !this._pxBounds.contains(p)) { return false; }\n\n\t\t// ray casting algorithm for detecting if point is in polygon\n\t\tfor (i = 0, len = this._parts.length; i < len; i++) {\n\t\t\tpart = this._parts[i];\n\n\t\t\tfor (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {\n\t\t\t\tp1 = part[j];\n\t\t\t\tp2 = part[k];\n\n\t\t\t\tif (((p1.y > p.y) !== (p2.y > p.y)) && (p.x < (p2.x - p1.x) * (p.y - p1.y) / (p2.y - p1.y) + p1.x)) {\n\t\t\t\t\tinside = !inside;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// also check if it's on polygon stroke\n\t\treturn inside || Polyline.prototype._containsPoint.call(this, p, true);\n\t}\n\n});\n\n\n// @factory L.polygon(latlngs: LatLng[], options?: Polyline options)\nexport function polygon(latlngs, options) {\n\treturn new Polygon(latlngs, options);\n}\n", "import {LayerGroup} from './LayerGroup';\r\nimport {FeatureGroup} from './FeatureGroup';\r\nimport * as Util from '../core/Util';\r\nimport {Marker} from './marker/Marker';\r\nimport {Circle} from './vector/Circle';\r\nimport {CircleMarker} from './vector/CircleMarker';\r\nimport {Polyline} from './vector/Polyline';\r\nimport {Polygon} from './vector/Polygon';\r\nimport {LatLng} from '../geo/LatLng';\r\nimport * as LineUtil from '../geometry/LineUtil';\r\nimport {toLatLng} from '../geo/LatLng';\r\n\r\n\r\n/*\r\n * @class GeoJSON\r\n * @aka L.GeoJSON\r\n * @inherits FeatureGroup\r\n *\r\n * Represents a GeoJSON object or an array of GeoJSON objects. Allows you to parse\r\n * GeoJSON data and display it on the map. Extends `FeatureGroup`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.geoJSON(data, {\r\n * \tstyle: function (feature) {\r\n * \t\treturn {color: feature.properties.color};\r\n * \t}\r\n * }).bindPopup(function (layer) {\r\n * \treturn layer.feature.properties.description;\r\n * }).addTo(map);\r\n * ```\r\n */\r\n\r\nexport var GeoJSON = FeatureGroup.extend({\r\n\r\n\t/* @section\r\n\t * @aka GeoJSON options\r\n\t *\r\n\t * @option pointToLayer: Function = *\r\n\t * A `Function` defining how GeoJSON points spawn Leaflet layers. It is internally\r\n\t * called when data is added, passing the GeoJSON point feature and its `LatLng`.\r\n\t * The default is to spawn a default `Marker`:\r\n\t * ```js\r\n\t * function(geoJsonPoint, latlng) {\r\n\t * \treturn L.marker(latlng);\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @option style: Function = *\r\n\t * A `Function` defining the `Path options` for styling GeoJSON lines and polygons,\r\n\t * called internally when data is added.\r\n\t * The default value is to not override any defaults:\r\n\t * ```js\r\n\t * function (geoJsonFeature) {\r\n\t * \treturn {}\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @option onEachFeature: Function = *\r\n\t * A `Function` that will be called once for each created `Feature`, after it has\r\n\t * been created and styled. Useful for attaching events and popups to features.\r\n\t * The default is to do nothing with the newly created layers:\r\n\t * ```js\r\n\t * function (feature, layer) {}\r\n\t * ```\r\n\t *\r\n\t * @option filter: Function = *\r\n\t * A `Function` that will be used to decide whether to include a feature or not.\r\n\t * The default is to include all features:\r\n\t * ```js\r\n\t * function (geoJsonFeature) {\r\n\t * \treturn true;\r\n\t * }\r\n\t * ```\r\n\t * Note: dynamically changing the `filter` option will have effect only on newly\r\n\t * added data. It will _not_ re-evaluate already included features.\r\n\t *\r\n\t * @option coordsToLatLng: Function = *\r\n\t * A `Function` that will be used for converting GeoJSON coordinates to `LatLng`s.\r\n\t * The default is the `coordsToLatLng` static method.\r\n\t *\r\n\t * @option markersInheritOptions: Boolean = false\r\n\t * Whether default Markers for \"Point\" type Features inherit from group options.\r\n\t */\r\n\r\n\tinitialize: function (geojson, options) {\r\n\t\tUtil.setOptions(this, options);\r\n\r\n\t\tthis._layers = {};\r\n\r\n\t\tif (geojson) {\r\n\t\t\tthis.addData(geojson);\r\n\t\t}\r\n\t},\r\n\r\n\t// @method addData( <GeoJSON> data ): this\r\n\t// Adds a GeoJSON object to the layer.\r\n\taddData: function (geojson) {\r\n\t\tvar features = Util.isArray(geojson) ? geojson : geojson.features,\r\n\t\t i, len, feature;\r\n\r\n\t\tif (features) {\r\n\t\t\tfor (i = 0, len = features.length; i < len; i++) {\r\n\t\t\t\t// only add this if geometry or geometries are set and not null\r\n\t\t\t\tfeature = features[i];\r\n\t\t\t\tif (feature.geometries || feature.geometry || feature.features || feature.coordinates) {\r\n\t\t\t\t\tthis.addData(feature);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tvar options = this.options;\r\n\r\n\t\tif (options.filter && !options.filter(geojson)) { return this; }\r\n\r\n\t\tvar layer = geometryToLayer(geojson, options);\r\n\t\tif (!layer) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\tlayer.feature = asFeature(geojson);\r\n\r\n\t\tlayer.defaultOptions = layer.options;\r\n\t\tthis.resetStyle(layer);\r\n\r\n\t\tif (options.onEachFeature) {\r\n\t\t\toptions.onEachFeature(geojson, layer);\r\n\t\t}\r\n\r\n\t\treturn this.addLayer(layer);\r\n\t},\r\n\r\n\t// @method resetStyle( <Path> layer? ): this\r\n\t// Resets the given vector layer's style to the original GeoJSON style, useful for resetting style after hover events.\r\n\t// If `layer` is omitted, the style of all features in the current layer is reset.\r\n\tresetStyle: function (layer) {\r\n\t\tif (layer === undefined) {\r\n\t\t\treturn this.eachLayer(this.resetStyle, this);\r\n\t\t}\r\n\t\t// reset any custom styles\r\n\t\tlayer.options = Util.extend({}, layer.defaultOptions);\r\n\t\tthis._setLayerStyle(layer, this.options.style);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method setStyle( <Function> style ): this\r\n\t// Changes styles of GeoJSON vector layers with the given style function.\r\n\tsetStyle: function (style) {\r\n\t\treturn this.eachLayer(function (layer) {\r\n\t\t\tthis._setLayerStyle(layer, style);\r\n\t\t}, this);\r\n\t},\r\n\r\n\t_setLayerStyle: function (layer, style) {\r\n\t\tif (layer.setStyle) {\r\n\t\t\tif (typeof style === 'function') {\r\n\t\t\t\tstyle = style(layer.feature);\r\n\t\t\t}\r\n\t\t\tlayer.setStyle(style);\r\n\t\t}\r\n\t}\r\n});\r\n\r\n// @section\r\n// There are several static functions which can be called without instantiating L.GeoJSON:\r\n\r\n// @function geometryToLayer(featureData: Object, options?: GeoJSON options): Layer\r\n// Creates a `Layer` from a given GeoJSON feature. Can use a custom\r\n// [`pointToLayer`](#geojson-pointtolayer) and/or [`coordsToLatLng`](#geojson-coordstolatlng)\r\n// functions if provided as options.\r\nexport function geometryToLayer(geojson, options) {\r\n\r\n\tvar geometry = geojson.type === 'Feature' ? geojson.geometry : geojson,\r\n\t coords = geometry ? geometry.coordinates : null,\r\n\t layers = [],\r\n\t pointToLayer = options && options.pointToLayer,\r\n\t _coordsToLatLng = options && options.coordsToLatLng || coordsToLatLng,\r\n\t latlng, latlngs, i, len;\r\n\r\n\tif (!coords && !geometry) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tswitch (geometry.type) {\r\n\tcase 'Point':\r\n\t\tlatlng = _coordsToLatLng(coords);\r\n\t\treturn _pointToLayer(pointToLayer, geojson, latlng, options);\r\n\r\n\tcase 'MultiPoint':\r\n\t\tfor (i = 0, len = coords.length; i < len; i++) {\r\n\t\t\tlatlng = _coordsToLatLng(coords[i]);\r\n\t\t\tlayers.push(_pointToLayer(pointToLayer, geojson, latlng, options));\r\n\t\t}\r\n\t\treturn new FeatureGroup(layers);\r\n\r\n\tcase 'LineString':\r\n\tcase 'MultiLineString':\r\n\t\tlatlngs = coordsToLatLngs(coords, geometry.type === 'LineString' ? 0 : 1, _coordsToLatLng);\r\n\t\treturn new Polyline(latlngs, options);\r\n\r\n\tcase 'Polygon':\r\n\tcase 'MultiPolygon':\r\n\t\tlatlngs = coordsToLatLngs(coords, geometry.type === 'Polygon' ? 1 : 2, _coordsToLatLng);\r\n\t\treturn new Polygon(latlngs, options);\r\n\r\n\tcase 'GeometryCollection':\r\n\t\tfor (i = 0, len = geometry.geometries.length; i < len; i++) {\r\n\t\t\tvar geoLayer = geometryToLayer({\r\n\t\t\t\tgeometry: geometry.geometries[i],\r\n\t\t\t\ttype: 'Feature',\r\n\t\t\t\tproperties: geojson.properties\r\n\t\t\t}, options);\r\n\r\n\t\t\tif (geoLayer) {\r\n\t\t\t\tlayers.push(geoLayer);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn new FeatureGroup(layers);\r\n\r\n\tcase 'FeatureCollection':\r\n\t\tfor (i = 0, len = geometry.features.length; i < len; i++) {\r\n\t\t\tvar featureLayer = geometryToLayer(geometry.features[i], options);\r\n\r\n\t\t\tif (featureLayer) {\r\n\t\t\t\tlayers.push(featureLayer);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn new FeatureGroup(layers);\r\n\r\n\tdefault:\r\n\t\tthrow new Error('Invalid GeoJSON object.');\r\n\t}\r\n}\r\n\r\nfunction _pointToLayer(pointToLayerFn, geojson, latlng, options) {\r\n\treturn pointToLayerFn ?\r\n\t\tpointToLayerFn(geojson, latlng) :\r\n\t\tnew Marker(latlng, options && options.markersInheritOptions && options);\r\n}\r\n\r\n// @function coordsToLatLng(coords: Array): LatLng\r\n// Creates a `LatLng` object from an array of 2 numbers (longitude, latitude)\r\n// or 3 numbers (longitude, latitude, altitude) used in GeoJSON for points.\r\nexport function coordsToLatLng(coords) {\r\n\treturn new LatLng(coords[1], coords[0], coords[2]);\r\n}\r\n\r\n// @function coordsToLatLngs(coords: Array, levelsDeep?: Number, coordsToLatLng?: Function): Array\r\n// Creates a multidimensional array of `LatLng`s from a GeoJSON coordinates array.\r\n// `levelsDeep` specifies the nesting level (0 is for an array of points, 1 for an array of arrays of points, etc., 0 by default).\r\n// Can use a custom [`coordsToLatLng`](#geojson-coordstolatlng) function.\r\nexport function coordsToLatLngs(coords, levelsDeep, _coordsToLatLng) {\r\n\tvar latlngs = [];\r\n\r\n\tfor (var i = 0, len = coords.length, latlng; i < len; i++) {\r\n\t\tlatlng = levelsDeep ?\r\n\t\t\tcoordsToLatLngs(coords[i], levelsDeep - 1, _coordsToLatLng) :\r\n\t\t\t(_coordsToLatLng || coordsToLatLng)(coords[i]);\r\n\r\n\t\tlatlngs.push(latlng);\r\n\t}\r\n\r\n\treturn latlngs;\r\n}\r\n\r\n// @function latLngToCoords(latlng: LatLng, precision?: Number|false): Array\r\n// Reverse of [`coordsToLatLng`](#geojson-coordstolatlng)\r\n// Coordinates values are rounded with [`formatNum`](#util-formatnum) function.\r\nexport function latLngToCoords(latlng, precision) {\r\n\tlatlng = toLatLng(latlng);\r\n\treturn latlng.alt !== undefined ?\r\n\t\t[Util.formatNum(latlng.lng, precision), Util.formatNum(latlng.lat, precision), Util.formatNum(latlng.alt, precision)] :\r\n\t\t[Util.formatNum(latlng.lng, precision), Util.formatNum(latlng.lat, precision)];\r\n}\r\n\r\n// @function latLngsToCoords(latlngs: Array, levelsDeep?: Number, closed?: Boolean, precision?: Number|false): Array\r\n// Reverse of [`coordsToLatLngs`](#geojson-coordstolatlngs)\r\n// `closed` determines whether the first point should be appended to the end of the array to close the feature, only used when `levelsDeep` is 0. False by default.\r\n// Coordinates values are rounded with [`formatNum`](#util-formatnum) function.\r\nexport function latLngsToCoords(latlngs, levelsDeep, closed, precision) {\r\n\tvar coords = [];\r\n\r\n\tfor (var i = 0, len = latlngs.length; i < len; i++) {\r\n\t\t// Check for flat arrays required to ensure unbalanced arrays are correctly converted in recursion\r\n\t\tcoords.push(levelsDeep ?\r\n\t\t\tlatLngsToCoords(latlngs[i], LineUtil.isFlat(latlngs[i]) ? 0 : levelsDeep - 1, closed, precision) :\r\n\t\t\tlatLngToCoords(latlngs[i], precision));\r\n\t}\r\n\r\n\tif (!levelsDeep && closed && coords.length > 0) {\r\n\t\tcoords.push(coords[0].slice());\r\n\t}\r\n\r\n\treturn coords;\r\n}\r\n\r\nexport function getFeature(layer, newGeometry) {\r\n\treturn layer.feature ?\r\n\t\tUtil.extend({}, layer.feature, {geometry: newGeometry}) :\r\n\t\tasFeature(newGeometry);\r\n}\r\n\r\n// @function asFeature(geojson: Object): Object\r\n// Normalize GeoJSON geometries/features into GeoJSON features.\r\nexport function asFeature(geojson) {\r\n\tif (geojson.type === 'Feature' || geojson.type === 'FeatureCollection') {\r\n\t\treturn geojson;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttype: 'Feature',\r\n\t\tproperties: {},\r\n\t\tgeometry: geojson\r\n\t};\r\n}\r\n\r\nvar PointToGeoJSON = {\r\n\ttoGeoJSON: function (precision) {\r\n\t\treturn getFeature(this, {\r\n\t\t\ttype: 'Point',\r\n\t\t\tcoordinates: latLngToCoords(this.getLatLng(), precision)\r\n\t\t});\r\n\t}\r\n};\r\n\r\n// @namespace Marker\r\n// @section Other methods\r\n// @method toGeoJSON(precision?: Number|false): Object\r\n// Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.\r\n// Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the marker (as a GeoJSON `Point` Feature).\r\nMarker.include(PointToGeoJSON);\r\n\r\n// @namespace CircleMarker\r\n// @method toGeoJSON(precision?: Number|false): Object\r\n// Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.\r\n// Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the circle marker (as a GeoJSON `Point` Feature).\r\nCircle.include(PointToGeoJSON);\r\nCircleMarker.include(PointToGeoJSON);\r\n\r\n\r\n// @namespace Polyline\r\n// @method toGeoJSON(precision?: Number|false): Object\r\n// Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.\r\n// Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the polyline (as a GeoJSON `LineString` or `MultiLineString` Feature).\r\nPolyline.include({\r\n\ttoGeoJSON: function (precision) {\r\n\t\tvar multi = !LineUtil.isFlat(this._latlngs);\r\n\r\n\t\tvar coords = latLngsToCoords(this._latlngs, multi ? 1 : 0, false, precision);\r\n\r\n\t\treturn getFeature(this, {\r\n\t\t\ttype: (multi ? 'Multi' : '') + 'LineString',\r\n\t\t\tcoordinates: coords\r\n\t\t});\r\n\t}\r\n});\r\n\r\n// @namespace Polygon\r\n// @method toGeoJSON(precision?: Number|false): Object\r\n// Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.\r\n// Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the polygon (as a GeoJSON `Polygon` or `MultiPolygon` Feature).\r\nPolygon.include({\r\n\ttoGeoJSON: function (precision) {\r\n\t\tvar holes = !LineUtil.isFlat(this._latlngs),\r\n\t\t multi = holes && !LineUtil.isFlat(this._latlngs[0]);\r\n\r\n\t\tvar coords = latLngsToCoords(this._latlngs, multi ? 2 : holes ? 1 : 0, true, precision);\r\n\r\n\t\tif (!holes) {\r\n\t\t\tcoords = [coords];\r\n\t\t}\r\n\r\n\t\treturn getFeature(this, {\r\n\t\t\ttype: (multi ? 'Multi' : '') + 'Polygon',\r\n\t\t\tcoordinates: coords\r\n\t\t});\r\n\t}\r\n});\r\n\r\n\r\n// @namespace LayerGroup\r\nLayerGroup.include({\r\n\ttoMultiPoint: function (precision) {\r\n\t\tvar coords = [];\r\n\r\n\t\tthis.eachLayer(function (layer) {\r\n\t\t\tcoords.push(layer.toGeoJSON(precision).geometry.coordinates);\r\n\t\t});\r\n\r\n\t\treturn getFeature(this, {\r\n\t\t\ttype: 'MultiPoint',\r\n\t\t\tcoordinates: coords\r\n\t\t});\r\n\t},\r\n\r\n\t// @method toGeoJSON(precision?: Number|false): Object\r\n\t// Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.\r\n\t// Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the layer group (as a GeoJSON `FeatureCollection`, `GeometryCollection`, or `MultiPoint`).\r\n\ttoGeoJSON: function (precision) {\r\n\r\n\t\tvar type = this.feature && this.feature.geometry && this.feature.geometry.type;\r\n\r\n\t\tif (type === 'MultiPoint') {\r\n\t\t\treturn this.toMultiPoint(precision);\r\n\t\t}\r\n\r\n\t\tvar isGeometryCollection = type === 'GeometryCollection',\r\n\t\t jsons = [];\r\n\r\n\t\tthis.eachLayer(function (layer) {\r\n\t\t\tif (layer.toGeoJSON) {\r\n\t\t\t\tvar json = layer.toGeoJSON(precision);\r\n\t\t\t\tif (isGeometryCollection) {\r\n\t\t\t\t\tjsons.push(json.geometry);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar feature = asFeature(json);\r\n\t\t\t\t\t// Squash nested feature collections\r\n\t\t\t\t\tif (feature.type === 'FeatureCollection') {\r\n\t\t\t\t\t\tjsons.push.apply(jsons, feature.features);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tjsons.push(feature);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif (isGeometryCollection) {\r\n\t\t\treturn getFeature(this, {\r\n\t\t\t\tgeometries: jsons,\r\n\t\t\t\ttype: 'GeometryCollection'\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\ttype: 'FeatureCollection',\r\n\t\t\tfeatures: jsons\r\n\t\t};\r\n\t}\r\n});\r\n\r\n// @namespace GeoJSON\r\n// @factory L.geoJSON(geojson?: Object, options?: GeoJSON options)\r\n// Creates a GeoJSON layer. Optionally accepts an object in\r\n// [GeoJSON format](https://tools.ietf.org/html/rfc7946) to display on the map\r\n// (you can alternatively add it later with `addData` method) and an `options` object.\r\nexport function geoJSON(geojson, options) {\r\n\treturn new GeoJSON(geojson, options);\r\n}\r\n\r\n// Backward compatibility.\r\nexport var geoJson = geoJSON;\r\n", "import {Layer} from './Layer';\r\nimport * as Util from '../core/Util';\r\nimport {toLatLngBounds} from '../geo/LatLngBounds';\r\nimport {Bounds} from '../geometry/Bounds';\r\nimport * as DomUtil from '../dom/DomUtil';\r\n\r\n/*\r\n * @class ImageOverlay\r\n * @aka L.ImageOverlay\r\n * @inherits Interactive layer\r\n *\r\n * Used to load and display a single image over specific bounds of the map. Extends `Layer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var imageUrl = 'https://maps.lib.utexas.edu/maps/historical/newark_nj_1922.jpg',\r\n * \timageBounds = [[40.712216, -74.22655], [40.773941, -74.12544]];\r\n * L.imageOverlay(imageUrl, imageBounds).addTo(map);\r\n * ```\r\n */\r\n\r\nexport var ImageOverlay = Layer.extend({\r\n\r\n\t// @section\r\n\t// @aka ImageOverlay options\r\n\toptions: {\r\n\t\t// @option opacity: Number = 1.0\r\n\t\t// The opacity of the image overlay.\r\n\t\topacity: 1,\r\n\r\n\t\t// @option alt: String = ''\r\n\t\t// Text for the `alt` attribute of the image (useful for accessibility).\r\n\t\talt: '',\r\n\r\n\t\t// @option interactive: Boolean = false\r\n\t\t// If `true`, the image overlay will emit [mouse events](#interactive-layer) when clicked or hovered.\r\n\t\tinteractive: false,\r\n\r\n\t\t// @option crossOrigin: Boolean|String = false\r\n\t\t// Whether the crossOrigin attribute will be added to the image.\r\n\t\t// If a String is provided, the image will have its crossOrigin attribute set to the String provided. This is needed if you want to access image pixel data.\r\n\t\t// Refer to [CORS Settings](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for valid String values.\r\n\t\tcrossOrigin: false,\r\n\r\n\t\t// @option errorOverlayUrl: String = ''\r\n\t\t// URL to the overlay image to show in place of the overlay that failed to load.\r\n\t\terrorOverlayUrl: '',\r\n\r\n\t\t// @option zIndex: Number = 1\r\n\t\t// The explicit [zIndex](https://developer.mozilla.org/docs/Web/CSS/CSS_Positioning/Understanding_z_index) of the overlay layer.\r\n\t\tzIndex: 1,\r\n\r\n\t\t// @option className: String = ''\r\n\t\t// A custom class name to assign to the image. Empty by default.\r\n\t\tclassName: ''\r\n\t},\r\n\r\n\tinitialize: function (url, bounds, options) { // (String, LatLngBounds, Object)\r\n\t\tthis._url = url;\r\n\t\tthis._bounds = toLatLngBounds(bounds);\r\n\r\n\t\tUtil.setOptions(this, options);\r\n\t},\r\n\r\n\tonAdd: function () {\r\n\t\tif (!this._image) {\r\n\t\t\tthis._initImage();\r\n\r\n\t\t\tif (this.options.opacity < 1) {\r\n\t\t\t\tthis._updateOpacity();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this.options.interactive) {\r\n\t\t\tDomUtil.addClass(this._image, 'leaflet-interactive');\r\n\t\t\tthis.addInteractiveTarget(this._image);\r\n\t\t}\r\n\r\n\t\tthis.getPane().appendChild(this._image);\r\n\t\tthis._reset();\r\n\t},\r\n\r\n\tonRemove: function () {\r\n\t\tDomUtil.remove(this._image);\r\n\t\tif (this.options.interactive) {\r\n\t\t\tthis.removeInteractiveTarget(this._image);\r\n\t\t}\r\n\t},\r\n\r\n\t// @method setOpacity(opacity: Number): this\r\n\t// Sets the opacity of the overlay.\r\n\tsetOpacity: function (opacity) {\r\n\t\tthis.options.opacity = opacity;\r\n\r\n\t\tif (this._image) {\r\n\t\t\tthis._updateOpacity();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\tsetStyle: function (styleOpts) {\r\n\t\tif (styleOpts.opacity) {\r\n\t\t\tthis.setOpacity(styleOpts.opacity);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method bringToFront(): this\r\n\t// Brings the layer to the top of all overlays.\r\n\tbringToFront: function () {\r\n\t\tif (this._map) {\r\n\t\t\tDomUtil.toFront(this._image);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method bringToBack(): this\r\n\t// Brings the layer to the bottom of all overlays.\r\n\tbringToBack: function () {\r\n\t\tif (this._map) {\r\n\t\t\tDomUtil.toBack(this._image);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method setUrl(url: String): this\r\n\t// Changes the URL of the image.\r\n\tsetUrl: function (url) {\r\n\t\tthis._url = url;\r\n\r\n\t\tif (this._image) {\r\n\t\t\tthis._image.src = url;\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method setBounds(bounds: LatLngBounds): this\r\n\t// Update the bounds that this ImageOverlay covers\r\n\tsetBounds: function (bounds) {\r\n\t\tthis._bounds = toLatLngBounds(bounds);\r\n\r\n\t\tif (this._map) {\r\n\t\t\tthis._reset();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\tgetEvents: function () {\r\n\t\tvar events = {\r\n\t\t\tzoom: this._reset,\r\n\t\t\tviewreset: this._reset\r\n\t\t};\r\n\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tevents.zoomanim = this._animateZoom;\r\n\t\t}\r\n\r\n\t\treturn events;\r\n\t},\r\n\r\n\t// @method setZIndex(value: Number): this\r\n\t// Changes the [zIndex](#imageoverlay-zindex) of the image overlay.\r\n\tsetZIndex: function (value) {\r\n\t\tthis.options.zIndex = value;\r\n\t\tthis._updateZIndex();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getBounds(): LatLngBounds\r\n\t// Get the bounds that this ImageOverlay covers\r\n\tgetBounds: function () {\r\n\t\treturn this._bounds;\r\n\t},\r\n\r\n\t// @method getElement(): HTMLElement\r\n\t// Returns the instance of [`HTMLImageElement`](https://developer.mozilla.org/docs/Web/API/HTMLImageElement)\r\n\t// used by this overlay.\r\n\tgetElement: function () {\r\n\t\treturn this._image;\r\n\t},\r\n\r\n\t_initImage: function () {\r\n\t\tvar wasElementSupplied = this._url.tagName === 'IMG';\r\n\t\tvar img = this._image = wasElementSupplied ? this._url : DomUtil.create('img');\r\n\r\n\t\tDomUtil.addClass(img, 'leaflet-image-layer');\r\n\t\tif (this._zoomAnimated) { DomUtil.addClass(img, 'leaflet-zoom-animated'); }\r\n\t\tif (this.options.className) { DomUtil.addClass(img, this.options.className); }\r\n\r\n\t\timg.onselectstart = Util.falseFn;\r\n\t\timg.onmousemove = Util.falseFn;\r\n\r\n\t\t// @event load: Event\r\n\t\t// Fired when the ImageOverlay layer has loaded its image\r\n\t\timg.onload = Util.bind(this.fire, this, 'load');\r\n\t\timg.onerror = Util.bind(this._overlayOnError, this, 'error');\r\n\r\n\t\tif (this.options.crossOrigin || this.options.crossOrigin === '') {\r\n\t\t\timg.crossOrigin = this.options.crossOrigin === true ? '' : this.options.crossOrigin;\r\n\t\t}\r\n\r\n\t\tif (this.options.zIndex) {\r\n\t\t\tthis._updateZIndex();\r\n\t\t}\r\n\r\n\t\tif (wasElementSupplied) {\r\n\t\t\tthis._url = img.src;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\timg.src = this._url;\r\n\t\timg.alt = this.options.alt;\r\n\t},\r\n\r\n\t_animateZoom: function (e) {\r\n\t\tvar scale = this._map.getZoomScale(e.zoom),\r\n\t\t offset = this._map._latLngBoundsToNewLayerBounds(this._bounds, e.zoom, e.center).min;\r\n\r\n\t\tDomUtil.setTransform(this._image, offset, scale);\r\n\t},\r\n\r\n\t_reset: function () {\r\n\t\tvar image = this._image,\r\n\t\t bounds = new Bounds(\r\n\t\t this._map.latLngToLayerPoint(this._bounds.getNorthWest()),\r\n\t\t this._map.latLngToLayerPoint(this._bounds.getSouthEast())),\r\n\t\t size = bounds.getSize();\r\n\r\n\t\tDomUtil.setPosition(image, bounds.min);\r\n\r\n\t\timage.style.width = size.x + 'px';\r\n\t\timage.style.height = size.y + 'px';\r\n\t},\r\n\r\n\t_updateOpacity: function () {\r\n\t\tDomUtil.setOpacity(this._image, this.options.opacity);\r\n\t},\r\n\r\n\t_updateZIndex: function () {\r\n\t\tif (this._image && this.options.zIndex !== undefined && this.options.zIndex !== null) {\r\n\t\t\tthis._image.style.zIndex = this.options.zIndex;\r\n\t\t}\r\n\t},\r\n\r\n\t_overlayOnError: function () {\r\n\t\t// @event error: Event\r\n\t\t// Fired when the ImageOverlay layer fails to load its image\r\n\t\tthis.fire('error');\r\n\r\n\t\tvar errorUrl = this.options.errorOverlayUrl;\r\n\t\tif (errorUrl && this._url !== errorUrl) {\r\n\t\t\tthis._url = errorUrl;\r\n\t\t\tthis._image.src = errorUrl;\r\n\t\t}\r\n\t},\r\n\r\n\t// @method getCenter(): LatLng\r\n\t// Returns the center of the ImageOverlay.\r\n\tgetCenter: function () {\r\n\t\treturn this._bounds.getCenter();\r\n\t}\r\n});\r\n\r\n// @factory L.imageOverlay(imageUrl: String, bounds: LatLngBounds, options?: ImageOverlay options)\r\n// Instantiates an image overlay object given the URL of the image and the\r\n// geographical bounds it is tied to.\r\nexport var imageOverlay = function (url, bounds, options) {\r\n\treturn new ImageOverlay(url, bounds, options);\r\n};\r\n", "import {ImageOverlay} from './ImageOverlay';\r\nimport * as DomUtil from '../dom/DomUtil';\r\nimport * as Util from '../core/Util';\r\n\r\n/*\r\n * @class VideoOverlay\r\n * @aka L.VideoOverlay\r\n * @inherits ImageOverlay\r\n *\r\n * Used to load and display a video player over specific bounds of the map. Extends `ImageOverlay`.\r\n *\r\n * A video overlay uses the [`<video>`](https://developer.mozilla.org/docs/Web/HTML/Element/video)\r\n * HTML5 element.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var videoUrl = 'https://www.mapbox.com/bites/00188/patricia_nasa.webm',\r\n * \tvideoBounds = [[ 32, -130], [ 13, -100]];\r\n * L.videoOverlay(videoUrl, videoBounds ).addTo(map);\r\n * ```\r\n */\r\n\r\nexport var VideoOverlay = ImageOverlay.extend({\r\n\r\n\t// @section\r\n\t// @aka VideoOverlay options\r\n\toptions: {\r\n\t\t// @option autoplay: Boolean = true\r\n\t\t// Whether the video starts playing automatically when loaded.\r\n\t\t// On some browsers autoplay will only work with `muted: true`\r\n\t\tautoplay: true,\r\n\r\n\t\t// @option loop: Boolean = true\r\n\t\t// Whether the video will loop back to the beginning when played.\r\n\t\tloop: true,\r\n\r\n\t\t// @option keepAspectRatio: Boolean = true\r\n\t\t// Whether the video will save aspect ratio after the projection.\r\n\t\t// Relevant for supported browsers. See [browser compatibility](https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit)\r\n\t\tkeepAspectRatio: true,\r\n\r\n\t\t// @option muted: Boolean = false\r\n\t\t// Whether the video starts on mute when loaded.\r\n\t\tmuted: false,\r\n\r\n\t\t// @option playsInline: Boolean = true\r\n\t\t// Mobile browsers will play the video right where it is instead of open it up in fullscreen mode.\r\n\t\tplaysInline: true\r\n\t},\r\n\r\n\t_initImage: function () {\r\n\t\tvar wasElementSupplied = this._url.tagName === 'VIDEO';\r\n\t\tvar vid = this._image = wasElementSupplied ? this._url : DomUtil.create('video');\r\n\r\n\t\tDomUtil.addClass(vid, 'leaflet-image-layer');\r\n\t\tif (this._zoomAnimated) { DomUtil.addClass(vid, 'leaflet-zoom-animated'); }\r\n\t\tif (this.options.className) { DomUtil.addClass(vid, this.options.className); }\r\n\r\n\t\tvid.onselectstart = Util.falseFn;\r\n\t\tvid.onmousemove = Util.falseFn;\r\n\r\n\t\t// @event load: Event\r\n\t\t// Fired when the video has finished loading the first frame\r\n\t\tvid.onloadeddata = Util.bind(this.fire, this, 'load');\r\n\r\n\t\tif (wasElementSupplied) {\r\n\t\t\tvar sourceElements = vid.getElementsByTagName('source');\r\n\t\t\tvar sources = [];\r\n\t\t\tfor (var j = 0; j < sourceElements.length; j++) {\r\n\t\t\t\tsources.push(sourceElements[j].src);\r\n\t\t\t}\r\n\r\n\t\t\tthis._url = (sourceElements.length > 0) ? sources : [vid.src];\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!Util.isArray(this._url)) { this._url = [this._url]; }\r\n\r\n\t\tif (!this.options.keepAspectRatio && Object.prototype.hasOwnProperty.call(vid.style, 'objectFit')) {\r\n\t\t\tvid.style['objectFit'] = 'fill';\r\n\t\t}\r\n\t\tvid.autoplay = !!this.options.autoplay;\r\n\t\tvid.loop = !!this.options.loop;\r\n\t\tvid.muted = !!this.options.muted;\r\n\t\tvid.playsInline = !!this.options.playsInline;\r\n\t\tfor (var i = 0; i < this._url.length; i++) {\r\n\t\t\tvar source = DomUtil.create('source');\r\n\t\t\tsource.src = this._url[i];\r\n\t\t\tvid.appendChild(source);\r\n\t\t}\r\n\t}\r\n\r\n\t// @method getElement(): HTMLVideoElement\r\n\t// Returns the instance of [`HTMLVideoElement`](https://developer.mozilla.org/docs/Web/API/HTMLVideoElement)\r\n\t// used by this overlay.\r\n});\r\n\r\n\r\n// @factory L.videoOverlay(video: String|Array|HTMLVideoElement, bounds: LatLngBounds, options?: VideoOverlay options)\r\n// Instantiates an image overlay object given the URL of the video (or array of URLs, or even a video element) and the\r\n// geographical bounds it is tied to.\r\n\r\nexport function videoOverlay(video, bounds, options) {\r\n\treturn new VideoOverlay(video, bounds, options);\r\n}\r\n", "import {ImageOverlay} from './ImageOverlay';\nimport * as DomUtil from '../dom/DomUtil';\nimport * as Util from '../core/Util';\n\n/*\n * @class SVGOverlay\n * @aka L.SVGOverlay\n * @inherits ImageOverlay\n *\n * Used to load, display and provide DOM access to an SVG file over specific bounds of the map. Extends `ImageOverlay`.\n *\n * An SVG overlay uses the [`<svg>`](https://developer.mozilla.org/docs/Web/SVG/Element/svg) element.\n *\n * @example\n *\n * ```js\n * var svgElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n * svgElement.setAttribute('xmlns', \"http://www.w3.org/2000/svg\");\n * svgElement.setAttribute('viewBox', \"0 0 200 200\");\n * svgElement.innerHTML = '<rect width=\"200\" height=\"200\"/><rect x=\"75\" y=\"23\" width=\"50\" height=\"50\" style=\"fill:red\"/><rect x=\"75\" y=\"123\" width=\"50\" height=\"50\" style=\"fill:#0013ff\"/>';\n * var svgElementBounds = [ [ 32, -130 ], [ 13, -100 ] ];\n * L.svgOverlay(svgElement, svgElementBounds).addTo(map);\n * ```\n */\n\nexport var SVGOverlay = ImageOverlay.extend({\n\t_initImage: function () {\n\t\tvar el = this._image = this._url;\n\n\t\tDomUtil.addClass(el, 'leaflet-image-layer');\n\t\tif (this._zoomAnimated) { DomUtil.addClass(el, 'leaflet-zoom-animated'); }\n\t\tif (this.options.className) { DomUtil.addClass(el, this.options.className); }\n\n\t\tel.onselectstart = Util.falseFn;\n\t\tel.onmousemove = Util.falseFn;\n\t}\n\n\t// @method getElement(): SVGElement\n\t// Returns the instance of [`SVGElement`](https://developer.mozilla.org/docs/Web/API/SVGElement)\n\t// used by this overlay.\n});\n\n\n// @factory L.svgOverlay(svg: String|SVGElement, bounds: LatLngBounds, options?: SVGOverlay options)\n// Instantiates an image overlay object given an SVG element and the geographical bounds it is tied to.\n// A viewBox attribute is required on the SVG element to zoom in and out properly.\n\nexport function svgOverlay(el, bounds, options) {\n\treturn new SVGOverlay(el, bounds, options);\n}\n", "import {Map} from '../map/Map';\r\nimport {Layer} from './Layer';\r\nimport {FeatureGroup} from './FeatureGroup';\r\nimport * as Util from '../core/Util';\r\nimport {toLatLng, LatLng} from '../geo/LatLng';\r\nimport {toPoint} from '../geometry/Point';\r\nimport * as DomUtil from '../dom/DomUtil';\r\n\r\n/*\r\n * @class DivOverlay\r\n * @inherits Interactive layer\r\n * @aka L.DivOverlay\r\n * Base model for L.Popup and L.Tooltip. Inherit from it for custom overlays like plugins.\r\n */\r\n\r\n// @namespace DivOverlay\r\nexport var DivOverlay = Layer.extend({\r\n\r\n\t// @section\r\n\t// @aka DivOverlay options\r\n\toptions: {\r\n\t\t// @option interactive: Boolean = false\r\n\t\t// If true, the popup/tooltip will listen to the mouse events.\r\n\t\tinteractive: false,\r\n\r\n\t\t// @option offset: Point = Point(0, 0)\r\n\t\t// The offset of the overlay position.\r\n\t\toffset: [0, 0],\r\n\r\n\t\t// @option className: String = ''\r\n\t\t// A custom CSS class name to assign to the overlay.\r\n\t\tclassName: '',\r\n\r\n\t\t// @option pane: String = undefined\r\n\t\t// `Map pane` where the overlay will be added.\r\n\t\tpane: undefined,\r\n\r\n\t\t// @option content: String|HTMLElement|Function = ''\r\n\t\t// Sets the HTML content of the overlay while initializing. If a function is passed the source layer will be\r\n\t\t// passed to the function. The function should return a `String` or `HTMLElement` to be used in the overlay.\r\n\t\tcontent: ''\r\n\t},\r\n\r\n\tinitialize: function (options, source) {\r\n\t\tif (options && (options instanceof LatLng || Util.isArray(options))) {\r\n\t\t\tthis._latlng = toLatLng(options);\r\n\t\t\tUtil.setOptions(this, source);\r\n\t\t} else {\r\n\t\t\tUtil.setOptions(this, options);\r\n\t\t\tthis._source = source;\r\n\t\t}\r\n\t\tif (this.options.content) {\r\n\t\t\tthis._content = this.options.content;\r\n\t\t}\r\n\t},\r\n\r\n\t// @method openOn(map: Map): this\r\n\t// Adds the overlay to the map.\r\n\t// Alternative to `map.openPopup(popup)`/`.openTooltip(tooltip)`.\r\n\topenOn: function (map) {\r\n\t\tmap = arguments.length ? map : this._source._map; // experimental, not the part of public api\r\n\t\tif (!map.hasLayer(this)) {\r\n\t\t\tmap.addLayer(this);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method close(): this\r\n\t// Closes the overlay.\r\n\t// Alternative to `map.closePopup(popup)`/`.closeTooltip(tooltip)`\r\n\t// and `layer.closePopup()`/`.closeTooltip()`.\r\n\tclose: function () {\r\n\t\tif (this._map) {\r\n\t\t\tthis._map.removeLayer(this);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method toggle(layer?: Layer): this\r\n\t// Opens or closes the overlay bound to layer depending on its current state.\r\n\t// Argument may be omitted only for overlay bound to layer.\r\n\t// Alternative to `layer.togglePopup()`/`.toggleTooltip()`.\r\n\ttoggle: function (layer) {\r\n\t\tif (this._map) {\r\n\t\t\tthis.close();\r\n\t\t} else {\r\n\t\t\tif (arguments.length) {\r\n\t\t\t\tthis._source = layer;\r\n\t\t\t} else {\r\n\t\t\t\tlayer = this._source;\r\n\t\t\t}\r\n\t\t\tthis._prepareOpen();\r\n\r\n\t\t\t// open the overlay on the map\r\n\t\t\tthis.openOn(layer._map);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tthis._zoomAnimated = map._zoomAnimated;\r\n\r\n\t\tif (!this._container) {\r\n\t\t\tthis._initLayout();\r\n\t\t}\r\n\r\n\t\tif (map._fadeAnimated) {\r\n\t\t\tDomUtil.setOpacity(this._container, 0);\r\n\t\t}\r\n\r\n\t\tclearTimeout(this._removeTimeout);\r\n\t\tthis.getPane().appendChild(this._container);\r\n\t\tthis.update();\r\n\r\n\t\tif (map._fadeAnimated) {\r\n\t\t\tDomUtil.setOpacity(this._container, 1);\r\n\t\t}\r\n\r\n\t\tthis.bringToFront();\r\n\r\n\t\tif (this.options.interactive) {\r\n\t\t\tDomUtil.addClass(this._container, 'leaflet-interactive');\r\n\t\t\tthis.addInteractiveTarget(this._container);\r\n\t\t}\r\n\t},\r\n\r\n\tonRemove: function (map) {\r\n\t\tif (map._fadeAnimated) {\r\n\t\t\tDomUtil.setOpacity(this._container, 0);\r\n\t\t\tthis._removeTimeout = setTimeout(Util.bind(DomUtil.remove, undefined, this._container), 200);\r\n\t\t} else {\r\n\t\t\tDomUtil.remove(this._container);\r\n\t\t}\r\n\r\n\t\tif (this.options.interactive) {\r\n\t\t\tDomUtil.removeClass(this._container, 'leaflet-interactive');\r\n\t\t\tthis.removeInteractiveTarget(this._container);\r\n\t\t}\r\n\t},\r\n\r\n\t// @namespace DivOverlay\r\n\t// @method getLatLng: LatLng\r\n\t// Returns the geographical point of the overlay.\r\n\tgetLatLng: function () {\r\n\t\treturn this._latlng;\r\n\t},\r\n\r\n\t// @method setLatLng(latlng: LatLng): this\r\n\t// Sets the geographical point where the overlay will open.\r\n\tsetLatLng: function (latlng) {\r\n\t\tthis._latlng = toLatLng(latlng);\r\n\t\tif (this._map) {\r\n\t\t\tthis._updatePosition();\r\n\t\t\tthis._adjustPan();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getContent: String|HTMLElement\r\n\t// Returns the content of the overlay.\r\n\tgetContent: function () {\r\n\t\treturn this._content;\r\n\t},\r\n\r\n\t// @method setContent(htmlContent: String|HTMLElement|Function): this\r\n\t// Sets the HTML content of the overlay. If a function is passed the source layer will be passed to the function.\r\n\t// The function should return a `String` or `HTMLElement` to be used in the overlay.\r\n\tsetContent: function (content) {\r\n\t\tthis._content = content;\r\n\t\tthis.update();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getElement: String|HTMLElement\r\n\t// Returns the HTML container of the overlay.\r\n\tgetElement: function () {\r\n\t\treturn this._container;\r\n\t},\r\n\r\n\t// @method update: null\r\n\t// Updates the overlay content, layout and position. Useful for updating the overlay after something inside changed, e.g. image loaded.\r\n\tupdate: function () {\r\n\t\tif (!this._map) { return; }\r\n\r\n\t\tthis._container.style.visibility = 'hidden';\r\n\r\n\t\tthis._updateContent();\r\n\t\tthis._updateLayout();\r\n\t\tthis._updatePosition();\r\n\r\n\t\tthis._container.style.visibility = '';\r\n\r\n\t\tthis._adjustPan();\r\n\t},\r\n\r\n\tgetEvents: function () {\r\n\t\tvar events = {\r\n\t\t\tzoom: this._updatePosition,\r\n\t\t\tviewreset: this._updatePosition\r\n\t\t};\r\n\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tevents.zoomanim = this._animateZoom;\r\n\t\t}\r\n\t\treturn events;\r\n\t},\r\n\r\n\t// @method isOpen: Boolean\r\n\t// Returns `true` when the overlay is visible on the map.\r\n\tisOpen: function () {\r\n\t\treturn !!this._map && this._map.hasLayer(this);\r\n\t},\r\n\r\n\t// @method bringToFront: this\r\n\t// Brings this overlay in front of other overlays (in the same map pane).\r\n\tbringToFront: function () {\r\n\t\tif (this._map) {\r\n\t\t\tDomUtil.toFront(this._container);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method bringToBack: this\r\n\t// Brings this overlay to the back of other overlays (in the same map pane).\r\n\tbringToBack: function () {\r\n\t\tif (this._map) {\r\n\t\t\tDomUtil.toBack(this._container);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// prepare bound overlay to open: update latlng pos / content source (for FeatureGroup)\r\n\t_prepareOpen: function (latlng) {\r\n\t\tvar source = this._source;\r\n\t\tif (!source._map) { return false; }\r\n\r\n\t\tif (source instanceof FeatureGroup) {\r\n\t\t\tsource = null;\r\n\t\t\tvar layers = this._source._layers;\r\n\t\t\tfor (var id in layers) {\r\n\t\t\t\tif (layers[id]._map) {\r\n\t\t\t\t\tsource = layers[id];\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (!source) { return false; } // Unable to get source layer.\r\n\r\n\t\t\t// set overlay source to this layer\r\n\t\t\tthis._source = source;\r\n\t\t}\r\n\r\n\t\tif (!latlng) {\r\n\t\t\tif (source.getCenter) {\r\n\t\t\t\tlatlng = source.getCenter();\r\n\t\t\t} else if (source.getLatLng) {\r\n\t\t\t\tlatlng = source.getLatLng();\r\n\t\t\t} else if (source.getBounds) {\r\n\t\t\t\tlatlng = source.getBounds().getCenter();\r\n\t\t\t} else {\r\n\t\t\t\tthrow new Error('Unable to get source layer LatLng.');\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.setLatLng(latlng);\r\n\r\n\t\tif (this._map) {\r\n\t\t\t// update the overlay (content, layout, etc...)\r\n\t\t\tthis.update();\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t},\r\n\r\n\t_updateContent: function () {\r\n\t\tif (!this._content) { return; }\r\n\r\n\t\tvar node = this._contentNode;\r\n\t\tvar content = (typeof this._content === 'function') ? this._content(this._source || this) : this._content;\r\n\r\n\t\tif (typeof content === 'string') {\r\n\t\t\tnode.innerHTML = content;\r\n\t\t} else {\r\n\t\t\twhile (node.hasChildNodes()) {\r\n\t\t\t\tnode.removeChild(node.firstChild);\r\n\t\t\t}\r\n\t\t\tnode.appendChild(content);\r\n\t\t}\r\n\r\n\t\t// @namespace DivOverlay\r\n\t\t// @section DivOverlay events\r\n\t\t// @event contentupdate: Event\r\n\t\t// Fired when the content of the overlay is updated\r\n\t\tthis.fire('contentupdate');\r\n\t},\r\n\r\n\t_updatePosition: function () {\r\n\t\tif (!this._map) { return; }\r\n\r\n\t\tvar pos = this._map.latLngToLayerPoint(this._latlng),\r\n\t\t offset = toPoint(this.options.offset),\r\n\t\t anchor = this._getAnchor();\r\n\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tDomUtil.setPosition(this._container, pos.add(anchor));\r\n\t\t} else {\r\n\t\t\toffset = offset.add(pos).add(anchor);\r\n\t\t}\r\n\r\n\t\tvar bottom = this._containerBottom = -offset.y,\r\n\t\t left = this._containerLeft = -Math.round(this._containerWidth / 2) + offset.x;\r\n\r\n\t\t// bottom position the overlay in case the height of the overlay changes (images loading etc)\r\n\t\tthis._container.style.bottom = bottom + 'px';\r\n\t\tthis._container.style.left = left + 'px';\r\n\t},\r\n\r\n\t_getAnchor: function () {\r\n\t\treturn [0, 0];\r\n\t}\r\n\r\n});\r\n\r\nMap.include({\r\n\t_initOverlay: function (OverlayClass, content, latlng, options) {\r\n\t\tvar overlay = content;\r\n\t\tif (!(overlay instanceof OverlayClass)) {\r\n\t\t\toverlay = new OverlayClass(options).setContent(content);\r\n\t\t}\r\n\t\tif (latlng) {\r\n\t\t\toverlay.setLatLng(latlng);\r\n\t\t}\r\n\t\treturn overlay;\r\n\t}\r\n});\r\n\r\n\r\nLayer.include({\r\n\t_initOverlay: function (OverlayClass, old, content, options) {\r\n\t\tvar overlay = content;\r\n\t\tif (overlay instanceof OverlayClass) {\r\n\t\t\tUtil.setOptions(overlay, options);\r\n\t\t\toverlay._source = this;\r\n\t\t} else {\r\n\t\t\toverlay = (old && !options) ? old : new OverlayClass(options, this);\r\n\t\t\toverlay.setContent(content);\r\n\t\t}\r\n\t\treturn overlay;\r\n\t}\r\n});\r\n", "import {DivOverlay} from './DivOverlay';\r\nimport * as DomEvent from '../dom/DomEvent';\r\nimport * as DomUtil from '../dom/DomUtil';\r\nimport {Point, toPoint} from '../geometry/Point';\r\nimport {Map} from '../map/Map';\r\nimport {Layer} from './Layer';\r\nimport {Path} from './vector/Path';\r\nimport {FeatureGroup} from './FeatureGroup';\r\n\r\n/*\r\n * @class Popup\r\n * @inherits DivOverlay\r\n * @aka L.Popup\r\n * Used to open popups in certain places of the map. Use [Map.openPopup](#map-openpopup) to\r\n * open popups while making sure that only one popup is open at one time\r\n * (recommended for usability), or use [Map.addLayer](#map-addlayer) to open as many as you want.\r\n *\r\n * @example\r\n *\r\n * If you want to just bind a popup to marker click and then open it, it's really easy:\r\n *\r\n * ```js\r\n * marker.bindPopup(popupContent).openPopup();\r\n * ```\r\n * Path overlays like polylines also have a `bindPopup` method.\r\n *\r\n * A popup can be also standalone:\r\n *\r\n * ```js\r\n * var popup = L.popup()\r\n * \t.setLatLng(latlng)\r\n * \t.setContent('<p>Hello world!<br />This is a nice popup.</p>')\r\n * \t.openOn(map);\r\n * ```\r\n * or\r\n * ```js\r\n * var popup = L.popup(latlng, {content: '<p>Hello world!<br />This is a nice popup.</p>')\r\n * \t.openOn(map);\r\n * ```\r\n */\r\n\r\n\r\n// @namespace Popup\r\nexport var Popup = DivOverlay.extend({\r\n\r\n\t// @section\r\n\t// @aka Popup options\r\n\toptions: {\r\n\t\t// @option pane: String = 'popupPane'\r\n\t\t// `Map pane` where the popup will be added.\r\n\t\tpane: 'popupPane',\r\n\r\n\t\t// @option offset: Point = Point(0, 7)\r\n\t\t// The offset of the popup position.\r\n\t\toffset: [0, 7],\r\n\r\n\t\t// @option maxWidth: Number = 300\r\n\t\t// Max width of the popup, in pixels.\r\n\t\tmaxWidth: 300,\r\n\r\n\t\t// @option minWidth: Number = 50\r\n\t\t// Min width of the popup, in pixels.\r\n\t\tminWidth: 50,\r\n\r\n\t\t// @option maxHeight: Number = null\r\n\t\t// If set, creates a scrollable container of the given height\r\n\t\t// inside a popup if its content exceeds it.\r\n\t\t// The scrollable container can be styled using the\r\n\t\t// `leaflet-popup-scrolled` CSS class selector.\r\n\t\tmaxHeight: null,\r\n\r\n\t\t// @option autoPan: Boolean = true\r\n\t\t// Set it to `false` if you don't want the map to do panning animation\r\n\t\t// to fit the opened popup.\r\n\t\tautoPan: true,\r\n\r\n\t\t// @option autoPanPaddingTopLeft: Point = null\r\n\t\t// The margin between the popup and the top left corner of the map\r\n\t\t// view after autopanning was performed.\r\n\t\tautoPanPaddingTopLeft: null,\r\n\r\n\t\t// @option autoPanPaddingBottomRight: Point = null\r\n\t\t// The margin between the popup and the bottom right corner of the map\r\n\t\t// view after autopanning was performed.\r\n\t\tautoPanPaddingBottomRight: null,\r\n\r\n\t\t// @option autoPanPadding: Point = Point(5, 5)\r\n\t\t// Equivalent of setting both top left and bottom right autopan padding to the same value.\r\n\t\tautoPanPadding: [5, 5],\r\n\r\n\t\t// @option keepInView: Boolean = false\r\n\t\t// Set it to `true` if you want to prevent users from panning the popup\r\n\t\t// off of the screen while it is open.\r\n\t\tkeepInView: false,\r\n\r\n\t\t// @option closeButton: Boolean = true\r\n\t\t// Controls the presence of a close button in the popup.\r\n\t\tcloseButton: true,\r\n\r\n\t\t// @option autoClose: Boolean = true\r\n\t\t// Set it to `false` if you want to override the default behavior of\r\n\t\t// the popup closing when another popup is opened.\r\n\t\tautoClose: true,\r\n\r\n\t\t// @option closeOnEscapeKey: Boolean = true\r\n\t\t// Set it to `false` if you want to override the default behavior of\r\n\t\t// the ESC key for closing of the popup.\r\n\t\tcloseOnEscapeKey: true,\r\n\r\n\t\t// @option closeOnClick: Boolean = *\r\n\t\t// Set it if you want to override the default behavior of the popup closing when user clicks\r\n\t\t// on the map. Defaults to the map's [`closePopupOnClick`](#map-closepopuponclick) option.\r\n\r\n\t\t// @option className: String = ''\r\n\t\t// A custom CSS class name to assign to the popup.\r\n\t\tclassName: ''\r\n\t},\r\n\r\n\t// @namespace Popup\r\n\t// @method openOn(map: Map): this\r\n\t// Alternative to `map.openPopup(popup)`.\r\n\t// Adds the popup to the map and closes the previous one.\r\n\topenOn: function (map) {\r\n\t\tmap = arguments.length ? map : this._source._map; // experimental, not the part of public api\r\n\r\n\t\tif (!map.hasLayer(this) && map._popup && map._popup.options.autoClose) {\r\n\t\t\tmap.removeLayer(map._popup);\r\n\t\t}\r\n\t\tmap._popup = this;\r\n\r\n\t\treturn DivOverlay.prototype.openOn.call(this, map);\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tDivOverlay.prototype.onAdd.call(this, map);\r\n\r\n\t\t// @namespace Map\r\n\t\t// @section Popup events\r\n\t\t// @event popupopen: PopupEvent\r\n\t\t// Fired when a popup is opened in the map\r\n\t\tmap.fire('popupopen', {popup: this});\r\n\r\n\t\tif (this._source) {\r\n\t\t\t// @namespace Layer\r\n\t\t\t// @section Popup events\r\n\t\t\t// @event popupopen: PopupEvent\r\n\t\t\t// Fired when a popup bound to this layer is opened\r\n\t\t\tthis._source.fire('popupopen', {popup: this}, true);\r\n\t\t\t// For non-path layers, we toggle the popup when clicking\r\n\t\t\t// again the layer, so prevent the map to reopen it.\r\n\t\t\tif (!(this._source instanceof Path)) {\r\n\t\t\t\tthis._source.on('preclick', DomEvent.stopPropagation);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tonRemove: function (map) {\r\n\t\tDivOverlay.prototype.onRemove.call(this, map);\r\n\r\n\t\t// @namespace Map\r\n\t\t// @section Popup events\r\n\t\t// @event popupclose: PopupEvent\r\n\t\t// Fired when a popup in the map is closed\r\n\t\tmap.fire('popupclose', {popup: this});\r\n\r\n\t\tif (this._source) {\r\n\t\t\t// @namespace Layer\r\n\t\t\t// @section Popup events\r\n\t\t\t// @event popupclose: PopupEvent\r\n\t\t\t// Fired when a popup bound to this layer is closed\r\n\t\t\tthis._source.fire('popupclose', {popup: this}, true);\r\n\t\t\tif (!(this._source instanceof Path)) {\r\n\t\t\t\tthis._source.off('preclick', DomEvent.stopPropagation);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tgetEvents: function () {\r\n\t\tvar events = DivOverlay.prototype.getEvents.call(this);\r\n\r\n\t\tif (this.options.closeOnClick !== undefined ? this.options.closeOnClick : this._map.options.closePopupOnClick) {\r\n\t\t\tevents.preclick = this.close;\r\n\t\t}\r\n\r\n\t\tif (this.options.keepInView) {\r\n\t\t\tevents.moveend = this._adjustPan;\r\n\t\t}\r\n\r\n\t\treturn events;\r\n\t},\r\n\r\n\t_initLayout: function () {\r\n\t\tvar prefix = 'leaflet-popup',\r\n\t\t container = this._container = DomUtil.create('div',\r\n\t\t\tprefix + ' ' + (this.options.className || '') +\r\n\t\t\t' leaflet-zoom-animated');\r\n\r\n\t\tvar wrapper = this._wrapper = DomUtil.create('div', prefix + '-content-wrapper', container);\r\n\t\tthis._contentNode = DomUtil.create('div', prefix + '-content', wrapper);\r\n\r\n\t\tDomEvent.disableClickPropagation(container);\r\n\t\tDomEvent.disableScrollPropagation(this._contentNode);\r\n\t\tDomEvent.on(container, 'contextmenu', DomEvent.stopPropagation);\r\n\r\n\t\tthis._tipContainer = DomUtil.create('div', prefix + '-tip-container', container);\r\n\t\tthis._tip = DomUtil.create('div', prefix + '-tip', this._tipContainer);\r\n\r\n\t\tif (this.options.closeButton) {\r\n\t\t\tvar closeButton = this._closeButton = DomUtil.create('a', prefix + '-close-button', container);\r\n\t\t\tcloseButton.setAttribute('role', 'button'); // overrides the implicit role=link of <a> elements #7399\r\n\t\t\tcloseButton.setAttribute('aria-label', 'Close popup');\r\n\t\t\tcloseButton.href = '#close';\r\n\t\t\tcloseButton.innerHTML = '<span aria-hidden=\"true\">×</span>';\r\n\r\n\t\t\tDomEvent.on(closeButton, 'click', function (ev) {\r\n\t\t\t\tDomEvent.preventDefault(ev);\r\n\t\t\t\tthis.close();\r\n\t\t\t}, this);\r\n\t\t}\r\n\t},\r\n\r\n\t_updateLayout: function () {\r\n\t\tvar container = this._contentNode,\r\n\t\t style = container.style;\r\n\r\n\t\tstyle.width = '';\r\n\t\tstyle.whiteSpace = 'nowrap';\r\n\r\n\t\tvar width = container.offsetWidth;\r\n\t\twidth = Math.min(width, this.options.maxWidth);\r\n\t\twidth = Math.max(width, this.options.minWidth);\r\n\r\n\t\tstyle.width = (width + 1) + 'px';\r\n\t\tstyle.whiteSpace = '';\r\n\r\n\t\tstyle.height = '';\r\n\r\n\t\tvar height = container.offsetHeight,\r\n\t\t maxHeight = this.options.maxHeight,\r\n\t\t scrolledClass = 'leaflet-popup-scrolled';\r\n\r\n\t\tif (maxHeight && height > maxHeight) {\r\n\t\t\tstyle.height = maxHeight + 'px';\r\n\t\t\tDomUtil.addClass(container, scrolledClass);\r\n\t\t} else {\r\n\t\t\tDomUtil.removeClass(container, scrolledClass);\r\n\t\t}\r\n\r\n\t\tthis._containerWidth = this._container.offsetWidth;\r\n\t},\r\n\r\n\t_animateZoom: function (e) {\r\n\t\tvar pos = this._map._latLngToNewLayerPoint(this._latlng, e.zoom, e.center),\r\n\t\t anchor = this._getAnchor();\r\n\t\tDomUtil.setPosition(this._container, pos.add(anchor));\r\n\t},\r\n\r\n\t_adjustPan: function () {\r\n\t\tif (!this.options.autoPan) { return; }\r\n\t\tif (this._map._panAnim) { this._map._panAnim.stop(); }\r\n\r\n\t\t// We can endlessly recurse if keepInView is set and the view resets.\r\n\t\t// Let's guard against that by exiting early if we're responding to our own autopan.\r\n\t\tif (this._autopanning) {\r\n\t\t\tthis._autopanning = false;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar map = this._map,\r\n\t\t marginBottom = parseInt(DomUtil.getStyle(this._container, 'marginBottom'), 10) || 0,\r\n\t\t containerHeight = this._container.offsetHeight + marginBottom,\r\n\t\t containerWidth = this._containerWidth,\r\n\t\t layerPos = new Point(this._containerLeft, -containerHeight - this._containerBottom);\r\n\r\n\t\tlayerPos._add(DomUtil.getPosition(this._container));\r\n\r\n\t\tvar containerPos = map.layerPointToContainerPoint(layerPos),\r\n\t\t padding = toPoint(this.options.autoPanPadding),\r\n\t\t paddingTL = toPoint(this.options.autoPanPaddingTopLeft || padding),\r\n\t\t paddingBR = toPoint(this.options.autoPanPaddingBottomRight || padding),\r\n\t\t size = map.getSize(),\r\n\t\t dx = 0,\r\n\t\t dy = 0;\r\n\r\n\t\tif (containerPos.x + containerWidth + paddingBR.x > size.x) { // right\r\n\t\t\tdx = containerPos.x + containerWidth - size.x + paddingBR.x;\r\n\t\t}\r\n\t\tif (containerPos.x - dx - paddingTL.x < 0) { // left\r\n\t\t\tdx = containerPos.x - paddingTL.x;\r\n\t\t}\r\n\t\tif (containerPos.y + containerHeight + paddingBR.y > size.y) { // bottom\r\n\t\t\tdy = containerPos.y + containerHeight - size.y + paddingBR.y;\r\n\t\t}\r\n\t\tif (containerPos.y - dy - paddingTL.y < 0) { // top\r\n\t\t\tdy = containerPos.y - paddingTL.y;\r\n\t\t}\r\n\r\n\t\t// @namespace Map\r\n\t\t// @section Popup events\r\n\t\t// @event autopanstart: Event\r\n\t\t// Fired when the map starts autopanning when opening a popup.\r\n\t\tif (dx || dy) {\r\n\t\t\t// Track that we're autopanning, as this function will be re-ran on moveend\r\n\t\t\tif (this.options.keepInView) {\r\n\t\t\t\tthis._autopanning = true;\r\n\t\t\t}\r\n\r\n\t\t\tmap\r\n\t\t\t .fire('autopanstart')\r\n\t\t\t .panBy([dx, dy]);\r\n\t\t}\r\n\t},\r\n\r\n\t_getAnchor: function () {\r\n\t\t// Where should we anchor the popup on the source layer?\r\n\t\treturn toPoint(this._source && this._source._getPopupAnchor ? this._source._getPopupAnchor() : [0, 0]);\r\n\t}\r\n\r\n});\r\n\r\n// @namespace Popup\r\n// @factory L.popup(options?: Popup options, source?: Layer)\r\n// Instantiates a `Popup` object given an optional `options` object that describes its appearance and location and an optional `source` object that is used to tag the popup with a reference to the Layer to which it refers.\r\n// @alternative\r\n// @factory L.popup(latlng: LatLng, options?: Popup options)\r\n// Instantiates a `Popup` object given `latlng` where the popup will open and an optional `options` object that describes its appearance and location.\r\nexport var popup = function (options, source) {\r\n\treturn new Popup(options, source);\r\n};\r\n\r\n\r\n/* @namespace Map\r\n * @section Interaction Options\r\n * @option closePopupOnClick: Boolean = true\r\n * Set it to `false` if you don't want popups to close when user clicks the map.\r\n */\r\nMap.mergeOptions({\r\n\tclosePopupOnClick: true\r\n});\r\n\r\n\r\n// @namespace Map\r\n// @section Methods for Layers and Controls\r\nMap.include({\r\n\t// @method openPopup(popup: Popup): this\r\n\t// Opens the specified popup while closing the previously opened (to make sure only one is opened at one time for usability).\r\n\t// @alternative\r\n\t// @method openPopup(content: String|HTMLElement, latlng: LatLng, options?: Popup options): this\r\n\t// Creates a popup with the specified content and options and opens it in the given point on a map.\r\n\topenPopup: function (popup, latlng, options) {\r\n\t\tthis._initOverlay(Popup, popup, latlng, options)\r\n\t\t .openOn(this);\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method closePopup(popup?: Popup): this\r\n\t// Closes the popup previously opened with [openPopup](#map-openpopup) (or the given one).\r\n\tclosePopup: function (popup) {\r\n\t\tpopup = arguments.length ? popup : this._popup;\r\n\t\tif (popup) {\r\n\t\t\tpopup.close();\r\n\t\t}\r\n\t\treturn this;\r\n\t}\r\n});\r\n\r\n/*\r\n * @namespace Layer\r\n * @section Popup methods example\r\n *\r\n * All layers share a set of methods convenient for binding popups to it.\r\n *\r\n * ```js\r\n * var layer = L.Polygon(latlngs).bindPopup('Hi There!').addTo(map);\r\n * layer.openPopup();\r\n * layer.closePopup();\r\n * ```\r\n *\r\n * Popups will also be automatically opened when the layer is clicked on and closed when the layer is removed from the map or another popup is opened.\r\n */\r\n\r\n// @section Popup methods\r\nLayer.include({\r\n\r\n\t// @method bindPopup(content: String|HTMLElement|Function|Popup, options?: Popup options): this\r\n\t// Binds a popup to the layer with the passed `content` and sets up the\r\n\t// necessary event listeners. If a `Function` is passed it will receive\r\n\t// the layer as the first argument and should return a `String` or `HTMLElement`.\r\n\tbindPopup: function (content, options) {\r\n\t\tthis._popup = this._initOverlay(Popup, this._popup, content, options);\r\n\t\tif (!this._popupHandlersAdded) {\r\n\t\t\tthis.on({\r\n\t\t\t\tclick: this._openPopup,\r\n\t\t\t\tkeypress: this._onKeyPress,\r\n\t\t\t\tremove: this.closePopup,\r\n\t\t\t\tmove: this._movePopup\r\n\t\t\t});\r\n\t\t\tthis._popupHandlersAdded = true;\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method unbindPopup(): this\r\n\t// Removes the popup previously bound with `bindPopup`.\r\n\tunbindPopup: function () {\r\n\t\tif (this._popup) {\r\n\t\t\tthis.off({\r\n\t\t\t\tclick: this._openPopup,\r\n\t\t\t\tkeypress: this._onKeyPress,\r\n\t\t\t\tremove: this.closePopup,\r\n\t\t\t\tmove: this._movePopup\r\n\t\t\t});\r\n\t\t\tthis._popupHandlersAdded = false;\r\n\t\t\tthis._popup = null;\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method openPopup(latlng?: LatLng): this\r\n\t// Opens the bound popup at the specified `latlng` or at the default popup anchor if no `latlng` is passed.\r\n\topenPopup: function (latlng) {\r\n\t\tif (this._popup) {\r\n\t\t\tif (!(this instanceof FeatureGroup)) {\r\n\t\t\t\tthis._popup._source = this;\r\n\t\t\t}\r\n\t\t\tif (this._popup._prepareOpen(latlng || this._latlng)) {\r\n\t\t\t\t// open the popup on the map\r\n\t\t\t\tthis._popup.openOn(this._map);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method closePopup(): this\r\n\t// Closes the popup bound to this layer if it is open.\r\n\tclosePopup: function () {\r\n\t\tif (this._popup) {\r\n\t\t\tthis._popup.close();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method togglePopup(): this\r\n\t// Opens or closes the popup bound to this layer depending on its current state.\r\n\ttogglePopup: function () {\r\n\t\tif (this._popup) {\r\n\t\t\tthis._popup.toggle(this);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method isPopupOpen(): boolean\r\n\t// Returns `true` if the popup bound to this layer is currently open.\r\n\tisPopupOpen: function () {\r\n\t\treturn (this._popup ? this._popup.isOpen() : false);\r\n\t},\r\n\r\n\t// @method setPopupContent(content: String|HTMLElement|Popup): this\r\n\t// Sets the content of the popup bound to this layer.\r\n\tsetPopupContent: function (content) {\r\n\t\tif (this._popup) {\r\n\t\t\tthis._popup.setContent(content);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getPopup(): Popup\r\n\t// Returns the popup bound to this layer.\r\n\tgetPopup: function () {\r\n\t\treturn this._popup;\r\n\t},\r\n\r\n\t_openPopup: function (e) {\r\n\t\tif (!this._popup || !this._map) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t// prevent map click\r\n\t\tDomEvent.stop(e);\r\n\r\n\t\tvar target = e.layer || e.target;\r\n\t\tif (this._popup._source === target && !(target instanceof Path)) {\r\n\t\t\t// treat it like a marker and figure out\r\n\t\t\t// if we should toggle it open/closed\r\n\t\t\tif (this._map.hasLayer(this._popup)) {\r\n\t\t\t\tthis.closePopup();\r\n\t\t\t} else {\r\n\t\t\t\tthis.openPopup(e.latlng);\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis._popup._source = target;\r\n\t\tthis.openPopup(e.latlng);\r\n\t},\r\n\r\n\t_movePopup: function (e) {\r\n\t\tthis._popup.setLatLng(e.latlng);\r\n\t},\r\n\r\n\t_onKeyPress: function (e) {\r\n\t\tif (e.originalEvent.keyCode === 13) {\r\n\t\t\tthis._openPopup(e);\r\n\t\t}\r\n\t}\r\n});\r\n", "import {DivOverlay} from './DivOverlay';\nimport {toPoint} from '../geometry/Point';\nimport {Map} from '../map/Map';\nimport {Layer} from './Layer';\nimport * as DomUtil from '../dom/DomUtil';\nimport * as DomEvent from '../dom/DomEvent';\nimport * as Util from '../core/Util';\nimport {FeatureGroup} from './FeatureGroup';\n\n/*\n * @class Tooltip\n * @inherits DivOverlay\n * @aka L.Tooltip\n * Used to display small texts on top of map layers.\n *\n * @example\n * If you want to just bind a tooltip to marker:\n *\n * ```js\n * marker.bindTooltip(\"my tooltip text\").openTooltip();\n * ```\n * Path overlays like polylines also have a `bindTooltip` method.\n *\n * A tooltip can be also standalone:\n *\n * ```js\n * var tooltip = L.tooltip()\n * \t.setLatLng(latlng)\n * \t.setContent('Hello world!<br />This is a nice tooltip.')\n * \t.addTo(map);\n * ```\n * or\n * ```js\n * var tooltip = L.tooltip(latlng, {content: 'Hello world!<br />This is a nice tooltip.'})\n * \t.addTo(map);\n * ```\n *\n *\n * Note about tooltip offset. Leaflet takes two options in consideration\n * for computing tooltip offsetting:\n * - the `offset` Tooltip option: it defaults to [0, 0], and it's specific to one tooltip.\n * Add a positive x offset to move the tooltip to the right, and a positive y offset to\n * move it to the bottom. Negatives will move to the left and top.\n * - the `tooltipAnchor` Icon option: this will only be considered for Marker. You\n * should adapt this value if you use a custom icon.\n */\n\n\n// @namespace Tooltip\nexport var Tooltip = DivOverlay.extend({\n\n\t// @section\n\t// @aka Tooltip options\n\toptions: {\n\t\t// @option pane: String = 'tooltipPane'\n\t\t// `Map pane` where the tooltip will be added.\n\t\tpane: 'tooltipPane',\n\n\t\t// @option offset: Point = Point(0, 0)\n\t\t// Optional offset of the tooltip position.\n\t\toffset: [0, 0],\n\n\t\t// @option direction: String = 'auto'\n\t\t// Direction where to open the tooltip. Possible values are: `right`, `left`,\n\t\t// `top`, `bottom`, `center`, `auto`.\n\t\t// `auto` will dynamically switch between `right` and `left` according to the tooltip\n\t\t// position on the map.\n\t\tdirection: 'auto',\n\n\t\t// @option permanent: Boolean = false\n\t\t// Whether to open the tooltip permanently or only on mouseover.\n\t\tpermanent: false,\n\n\t\t// @option sticky: Boolean = false\n\t\t// If true, the tooltip will follow the mouse instead of being fixed at the feature center.\n\t\tsticky: false,\n\n\t\t// @option opacity: Number = 0.9\n\t\t// Tooltip container opacity.\n\t\topacity: 0.9\n\t},\n\n\tonAdd: function (map) {\n\t\tDivOverlay.prototype.onAdd.call(this, map);\n\t\tthis.setOpacity(this.options.opacity);\n\n\t\t// @namespace Map\n\t\t// @section Tooltip events\n\t\t// @event tooltipopen: TooltipEvent\n\t\t// Fired when a tooltip is opened in the map.\n\t\tmap.fire('tooltipopen', {tooltip: this});\n\n\t\tif (this._source) {\n\t\t\tthis.addEventParent(this._source);\n\n\t\t\t// @namespace Layer\n\t\t\t// @section Tooltip events\n\t\t\t// @event tooltipopen: TooltipEvent\n\t\t\t// Fired when a tooltip bound to this layer is opened.\n\t\t\tthis._source.fire('tooltipopen', {tooltip: this}, true);\n\t\t}\n\t},\n\n\tonRemove: function (map) {\n\t\tDivOverlay.prototype.onRemove.call(this, map);\n\n\t\t// @namespace Map\n\t\t// @section Tooltip events\n\t\t// @event tooltipclose: TooltipEvent\n\t\t// Fired when a tooltip in the map is closed.\n\t\tmap.fire('tooltipclose', {tooltip: this});\n\n\t\tif (this._source) {\n\t\t\tthis.removeEventParent(this._source);\n\n\t\t\t// @namespace Layer\n\t\t\t// @section Tooltip events\n\t\t\t// @event tooltipclose: TooltipEvent\n\t\t\t// Fired when a tooltip bound to this layer is closed.\n\t\t\tthis._source.fire('tooltipclose', {tooltip: this}, true);\n\t\t}\n\t},\n\n\tgetEvents: function () {\n\t\tvar events = DivOverlay.prototype.getEvents.call(this);\n\n\t\tif (!this.options.permanent) {\n\t\t\tevents.preclick = this.close;\n\t\t}\n\n\t\treturn events;\n\t},\n\n\t_initLayout: function () {\n\t\tvar prefix = 'leaflet-tooltip',\n\t\t className = prefix + ' ' + (this.options.className || '') + ' leaflet-zoom-' + (this._zoomAnimated ? 'animated' : 'hide');\n\n\t\tthis._contentNode = this._container = DomUtil.create('div', className);\n\n\t\tthis._container.setAttribute('role', 'tooltip');\n\t\tthis._container.setAttribute('id', 'leaflet-tooltip-' + Util.stamp(this));\n\t},\n\n\t_updateLayout: function () {},\n\n\t_adjustPan: function () {},\n\n\t_setPosition: function (pos) {\n\t\tvar subX, subY,\n\t\t map = this._map,\n\t\t container = this._container,\n\t\t centerPoint = map.latLngToContainerPoint(map.getCenter()),\n\t\t tooltipPoint = map.layerPointToContainerPoint(pos),\n\t\t direction = this.options.direction,\n\t\t tooltipWidth = container.offsetWidth,\n\t\t tooltipHeight = container.offsetHeight,\n\t\t offset = toPoint(this.options.offset),\n\t\t anchor = this._getAnchor();\n\n\t\tif (direction === 'top') {\n\t\t\tsubX = tooltipWidth / 2;\n\t\t\tsubY = tooltipHeight;\n\t\t} else if (direction === 'bottom') {\n\t\t\tsubX = tooltipWidth / 2;\n\t\t\tsubY = 0;\n\t\t} else if (direction === 'center') {\n\t\t\tsubX = tooltipWidth / 2;\n\t\t\tsubY = tooltipHeight / 2;\n\t\t} else if (direction === 'right') {\n\t\t\tsubX = 0;\n\t\t\tsubY = tooltipHeight / 2;\n\t\t} else if (direction === 'left') {\n\t\t\tsubX = tooltipWidth;\n\t\t\tsubY = tooltipHeight / 2;\n\t\t} else if (tooltipPoint.x < centerPoint.x) {\n\t\t\tdirection = 'right';\n\t\t\tsubX = 0;\n\t\t\tsubY = tooltipHeight / 2;\n\t\t} else {\n\t\t\tdirection = 'left';\n\t\t\tsubX = tooltipWidth + (offset.x + anchor.x) * 2;\n\t\t\tsubY = tooltipHeight / 2;\n\t\t}\n\n\t\tpos = pos.subtract(toPoint(subX, subY, true)).add(offset).add(anchor);\n\n\t\tDomUtil.removeClass(container, 'leaflet-tooltip-right');\n\t\tDomUtil.removeClass(container, 'leaflet-tooltip-left');\n\t\tDomUtil.removeClass(container, 'leaflet-tooltip-top');\n\t\tDomUtil.removeClass(container, 'leaflet-tooltip-bottom');\n\t\tDomUtil.addClass(container, 'leaflet-tooltip-' + direction);\n\t\tDomUtil.setPosition(container, pos);\n\t},\n\n\t_updatePosition: function () {\n\t\tvar pos = this._map.latLngToLayerPoint(this._latlng);\n\t\tthis._setPosition(pos);\n\t},\n\n\tsetOpacity: function (opacity) {\n\t\tthis.options.opacity = opacity;\n\n\t\tif (this._container) {\n\t\t\tDomUtil.setOpacity(this._container, opacity);\n\t\t}\n\t},\n\n\t_animateZoom: function (e) {\n\t\tvar pos = this._map._latLngToNewLayerPoint(this._latlng, e.zoom, e.center);\n\t\tthis._setPosition(pos);\n\t},\n\n\t_getAnchor: function () {\n\t\t// Where should we anchor the tooltip on the source layer?\n\t\treturn toPoint(this._source && this._source._getTooltipAnchor && !this.options.sticky ? this._source._getTooltipAnchor() : [0, 0]);\n\t}\n\n});\n\n// @namespace Tooltip\n// @factory L.tooltip(options?: Tooltip options, source?: Layer)\n// Instantiates a `Tooltip` object given an optional `options` object that describes its appearance and location and an optional `source` object that is used to tag the tooltip with a reference to the Layer to which it refers.\n// @alternative\n// @factory L.tooltip(latlng: LatLng, options?: Tooltip options)\n// Instantiates a `Tooltip` object given `latlng` where the tooltip will open and an optional `options` object that describes its appearance and location.\nexport var tooltip = function (options, source) {\n\treturn new Tooltip(options, source);\n};\n\n// @namespace Map\n// @section Methods for Layers and Controls\nMap.include({\n\n\t// @method openTooltip(tooltip: Tooltip): this\n\t// Opens the specified tooltip.\n\t// @alternative\n\t// @method openTooltip(content: String|HTMLElement, latlng: LatLng, options?: Tooltip options): this\n\t// Creates a tooltip with the specified content and options and open it.\n\topenTooltip: function (tooltip, latlng, options) {\n\t\tthis._initOverlay(Tooltip, tooltip, latlng, options)\n\t\t .openOn(this);\n\n\t\treturn this;\n\t},\n\n\t// @method closeTooltip(tooltip: Tooltip): this\n\t// Closes the tooltip given as parameter.\n\tcloseTooltip: function (tooltip) {\n\t\ttooltip.close();\n\t\treturn this;\n\t}\n\n});\n\n/*\n * @namespace Layer\n * @section Tooltip methods example\n *\n * All layers share a set of methods convenient for binding tooltips to it.\n *\n * ```js\n * var layer = L.Polygon(latlngs).bindTooltip('Hi There!').addTo(map);\n * layer.openTooltip();\n * layer.closeTooltip();\n * ```\n */\n\n// @section Tooltip methods\nLayer.include({\n\n\t// @method bindTooltip(content: String|HTMLElement|Function|Tooltip, options?: Tooltip options): this\n\t// Binds a tooltip to the layer with the passed `content` and sets up the\n\t// necessary event listeners. If a `Function` is passed it will receive\n\t// the layer as the first argument and should return a `String` or `HTMLElement`.\n\tbindTooltip: function (content, options) {\n\n\t\tif (this._tooltip && this.isTooltipOpen()) {\n\t\t\tthis.unbindTooltip();\n\t\t}\n\n\t\tthis._tooltip = this._initOverlay(Tooltip, this._tooltip, content, options);\n\t\tthis._initTooltipInteractions();\n\n\t\tif (this._tooltip.options.permanent && this._map && this._map.hasLayer(this)) {\n\t\t\tthis.openTooltip();\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t// @method unbindTooltip(): this\n\t// Removes the tooltip previously bound with `bindTooltip`.\n\tunbindTooltip: function () {\n\t\tif (this._tooltip) {\n\t\t\tthis._initTooltipInteractions(true);\n\t\t\tthis.closeTooltip();\n\t\t\tthis._tooltip = null;\n\t\t}\n\t\treturn this;\n\t},\n\n\t_initTooltipInteractions: function (remove) {\n\t\tif (!remove && this._tooltipHandlersAdded) { return; }\n\t\tvar onOff = remove ? 'off' : 'on',\n\t\t events = {\n\t\t\tremove: this.closeTooltip,\n\t\t\tmove: this._moveTooltip\n\t\t };\n\t\tif (!this._tooltip.options.permanent) {\n\t\t\tevents.mouseover = this._openTooltip;\n\t\t\tevents.mouseout = this.closeTooltip;\n\t\t\tevents.click = this._openTooltip;\n\t\t\tif (this._map) {\n\t\t\t\tthis._addFocusListeners();\n\t\t\t} else {\n\t\t\t\tevents.add = this._addFocusListeners;\n\t\t\t}\n\t\t} else {\n\t\t\tevents.add = this._openTooltip;\n\t\t}\n\t\tif (this._tooltip.options.sticky) {\n\t\t\tevents.mousemove = this._moveTooltip;\n\t\t}\n\t\tthis[onOff](events);\n\t\tthis._tooltipHandlersAdded = !remove;\n\t},\n\n\t// @method openTooltip(latlng?: LatLng): this\n\t// Opens the bound tooltip at the specified `latlng` or at the default tooltip anchor if no `latlng` is passed.\n\topenTooltip: function (latlng) {\n\t\tif (this._tooltip) {\n\t\t\tif (!(this instanceof FeatureGroup)) {\n\t\t\t\tthis._tooltip._source = this;\n\t\t\t}\n\t\t\tif (this._tooltip._prepareOpen(latlng)) {\n\t\t\t\t// open the tooltip on the map\n\t\t\t\tthis._tooltip.openOn(this._map);\n\n\t\t\t\tif (this.getElement) {\n\t\t\t\t\tthis._setAriaDescribedByOnLayer(this);\n\t\t\t\t} else if (this.eachLayer) {\n\t\t\t\t\tthis.eachLayer(this._setAriaDescribedByOnLayer, this);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method closeTooltip(): this\n\t// Closes the tooltip bound to this layer if it is open.\n\tcloseTooltip: function () {\n\t\tif (this._tooltip) {\n\t\t\treturn this._tooltip.close();\n\t\t}\n\t},\n\n\t// @method toggleTooltip(): this\n\t// Opens or closes the tooltip bound to this layer depending on its current state.\n\ttoggleTooltip: function () {\n\t\tif (this._tooltip) {\n\t\t\tthis._tooltip.toggle(this);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method isTooltipOpen(): boolean\n\t// Returns `true` if the tooltip bound to this layer is currently open.\n\tisTooltipOpen: function () {\n\t\treturn this._tooltip.isOpen();\n\t},\n\n\t// @method setTooltipContent(content: String|HTMLElement|Tooltip): this\n\t// Sets the content of the tooltip bound to this layer.\n\tsetTooltipContent: function (content) {\n\t\tif (this._tooltip) {\n\t\t\tthis._tooltip.setContent(content);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method getTooltip(): Tooltip\n\t// Returns the tooltip bound to this layer.\n\tgetTooltip: function () {\n\t\treturn this._tooltip;\n\t},\n\n\t_addFocusListeners: function () {\n\t\tif (this.getElement) {\n\t\t\tthis._addFocusListenersOnLayer(this);\n\t\t} else if (this.eachLayer) {\n\t\t\tthis.eachLayer(this._addFocusListenersOnLayer, this);\n\t\t}\n\t},\n\n\t_addFocusListenersOnLayer: function (layer) {\n\t\tvar el = typeof layer.getElement === 'function' && layer.getElement();\n\t\tif (el) {\n\t\t\tDomEvent.on(el, 'focus', function () {\n\t\t\t\tthis._tooltip._source = layer;\n\t\t\t\tthis.openTooltip();\n\t\t\t}, this);\n\t\t\tDomEvent.on(el, 'blur', this.closeTooltip, this);\n\t\t}\n\t},\n\n\t_setAriaDescribedByOnLayer: function (layer) {\n\t\tvar el = typeof layer.getElement === 'function' && layer.getElement();\n\t\tif (el) {\n\t\t\tel.setAttribute('aria-describedby', this._tooltip._container.id);\n\t\t}\n\t},\n\n\n\t_openTooltip: function (e) {\n\t\tif (!this._tooltip || !this._map) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If the map is moving, we will show the tooltip after it's done.\n\t\tif (this._map.dragging && this._map.dragging.moving() && !this._openOnceFlag) {\n\t\t\tthis._openOnceFlag = true;\n\t\t\tvar that = this;\n\t\t\tthis._map.once('moveend', function () {\n\t\t\t\tthat._openOnceFlag = false;\n\t\t\t\tthat._openTooltip(e);\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tthis._tooltip._source = e.layer || e.target;\n\n\t\tthis.openTooltip(this._tooltip.options.sticky ? e.latlng : undefined);\n\t},\n\n\t_moveTooltip: function (e) {\n\t\tvar latlng = e.latlng, containerPoint, layerPoint;\n\t\tif (this._tooltip.options.sticky && e.originalEvent) {\n\t\t\tcontainerPoint = this._map.mouseEventToContainerPoint(e.originalEvent);\n\t\t\tlayerPoint = this._map.containerPointToLayerPoint(containerPoint);\n\t\t\tlatlng = this._map.layerPointToLatLng(layerPoint);\n\t\t}\n\t\tthis._tooltip.setLatLng(latlng);\n\t}\n});\n", "import {Icon} from './Icon';\nimport {toPoint as point} from '../../geometry/Point';\nimport {empty} from '../../dom/DomUtil';\n\n/*\n * @class DivIcon\n * @aka L.DivIcon\n * @inherits Icon\n *\n * Represents a lightweight icon for markers that uses a simple `<div>`\n * element instead of an image. Inherits from `Icon` but ignores the `iconUrl` and shadow options.\n *\n * @example\n * ```js\n * var myIcon = L.divIcon({className: 'my-div-icon'});\n * // you can set .my-div-icon styles in CSS\n *\n * L.marker([50.505, 30.57], {icon: myIcon}).addTo(map);\n * ```\n *\n * By default, it has a 'leaflet-div-icon' CSS class and is styled as a little white square with a shadow.\n */\n\nexport var DivIcon = Icon.extend({\n\toptions: {\n\t\t// @section\n\t\t// @aka DivIcon options\n\t\ticonSize: [12, 12], // also can be set through CSS\n\n\t\t// iconAnchor: (Point),\n\t\t// popupAnchor: (Point),\n\n\t\t// @option html: String|HTMLElement = ''\n\t\t// Custom HTML code to put inside the div element, empty by default. Alternatively,\n\t\t// an instance of `HTMLElement`.\n\t\thtml: false,\n\n\t\t// @option bgPos: Point = [0, 0]\n\t\t// Optional relative position of the background, in pixels\n\t\tbgPos: null,\n\n\t\tclassName: 'leaflet-div-icon'\n\t},\n\n\tcreateIcon: function (oldIcon) {\n\t\tvar div = (oldIcon && oldIcon.tagName === 'DIV') ? oldIcon : document.createElement('div'),\n\t\t options = this.options;\n\n\t\tif (options.html instanceof Element) {\n\t\t\tempty(div);\n\t\t\tdiv.appendChild(options.html);\n\t\t} else {\n\t\t\tdiv.innerHTML = options.html !== false ? options.html : '';\n\t\t}\n\n\t\tif (options.bgPos) {\n\t\t\tvar bgPos = point(options.bgPos);\n\t\t\tdiv.style.backgroundPosition = (-bgPos.x) + 'px ' + (-bgPos.y) + 'px';\n\t\t}\n\t\tthis._setIconStyles(div, 'icon');\n\n\t\treturn div;\n\t},\n\n\tcreateShadow: function () {\n\t\treturn null;\n\t}\n});\n\n// @factory L.divIcon(options: DivIcon options)\n// Creates a `DivIcon` instance with the given options.\nexport function divIcon(options) {\n\treturn new DivIcon(options);\n}\n", "import {Icon} from './Icon';\nexport {icon} from './Icon';\nimport {IconDefault} from './Icon.Default';\nIcon.Default = IconDefault;\nexport {Icon};\n\nexport {DivIcon, divIcon} from './DivIcon';\nexport {Marker, marker} from './Marker';\n", "import {Layer} from '../Layer';\nimport Browser from '../../core/Browser';\nimport * as Util from '../../core/Util';\nimport * as DomUtil from '../../dom/DomUtil';\nimport {Point} from '../../geometry/Point';\nimport {Bounds} from '../../geometry/Bounds';\nimport {LatLngBounds, toLatLngBounds as latLngBounds} from '../../geo/LatLngBounds';\n\n/*\n * @class GridLayer\n * @inherits Layer\n * @aka L.GridLayer\n *\n * Generic class for handling a tiled grid of HTML elements. This is the base class for all tile layers and replaces `TileLayer.Canvas`.\n * GridLayer can be extended to create a tiled grid of HTML elements like `<canvas>`, `<img>` or `<div>`. GridLayer will handle creating and animating these DOM elements for you.\n *\n *\n * @section Synchronous usage\n * @example\n *\n * To create a custom layer, extend GridLayer and implement the `createTile()` method, which will be passed a `Point` object with the `x`, `y`, and `z` (zoom level) coordinates to draw your tile.\n *\n * ```js\n * var CanvasLayer = L.GridLayer.extend({\n * createTile: function(coords){\n * // create a <canvas> element for drawing\n * var tile = L.DomUtil.create('canvas', 'leaflet-tile');\n *\n * // setup tile width and height according to the options\n * var size = this.getTileSize();\n * tile.width = size.x;\n * tile.height = size.y;\n *\n * // get a canvas context and draw something on it using coords.x, coords.y and coords.z\n * var ctx = tile.getContext('2d');\n *\n * // return the tile so it can be rendered on screen\n * return tile;\n * }\n * });\n * ```\n *\n * @section Asynchronous usage\n * @example\n *\n * Tile creation can also be asynchronous, this is useful when using a third-party drawing library. Once the tile is finished drawing it can be passed to the `done()` callback.\n *\n * ```js\n * var CanvasLayer = L.GridLayer.extend({\n * createTile: function(coords, done){\n * var error;\n *\n * // create a <canvas> element for drawing\n * var tile = L.DomUtil.create('canvas', 'leaflet-tile');\n *\n * // setup tile width and height according to the options\n * var size = this.getTileSize();\n * tile.width = size.x;\n * tile.height = size.y;\n *\n * // draw something asynchronously and pass the tile to the done() callback\n * setTimeout(function() {\n * done(error, tile);\n * }, 1000);\n *\n * return tile;\n * }\n * });\n * ```\n *\n * @section\n */\n\n\nexport var GridLayer = Layer.extend({\n\n\t// @section\n\t// @aka GridLayer options\n\toptions: {\n\t\t// @option tileSize: Number|Point = 256\n\t\t// Width and height of tiles in the grid. Use a number if width and height are equal, or `L.point(width, height)` otherwise.\n\t\ttileSize: 256,\n\n\t\t// @option opacity: Number = 1.0\n\t\t// Opacity of the tiles. Can be used in the `createTile()` function.\n\t\topacity: 1,\n\n\t\t// @option updateWhenIdle: Boolean = (depends)\n\t\t// Load new tiles only when panning ends.\n\t\t// `true` by default on mobile browsers, in order to avoid too many requests and keep smooth navigation.\n\t\t// `false` otherwise in order to display new tiles _during_ panning, since it is easy to pan outside the\n\t\t// [`keepBuffer`](#gridlayer-keepbuffer) option in desktop browsers.\n\t\tupdateWhenIdle: Browser.mobile,\n\n\t\t// @option updateWhenZooming: Boolean = true\n\t\t// By default, a smooth zoom animation (during a [touch zoom](#map-touchzoom) or a [`flyTo()`](#map-flyto)) will update grid layers every integer zoom level. Setting this option to `false` will update the grid layer only when the smooth animation ends.\n\t\tupdateWhenZooming: true,\n\n\t\t// @option updateInterval: Number = 200\n\t\t// Tiles will not update more than once every `updateInterval` milliseconds when panning.\n\t\tupdateInterval: 200,\n\n\t\t// @option zIndex: Number = 1\n\t\t// The explicit zIndex of the tile layer.\n\t\tzIndex: 1,\n\n\t\t// @option bounds: LatLngBounds = undefined\n\t\t// If set, tiles will only be loaded inside the set `LatLngBounds`.\n\t\tbounds: null,\n\n\t\t// @option minZoom: Number = 0\n\t\t// The minimum zoom level down to which this layer will be displayed (inclusive).\n\t\tminZoom: 0,\n\n\t\t// @option maxZoom: Number = undefined\n\t\t// The maximum zoom level up to which this layer will be displayed (inclusive).\n\t\tmaxZoom: undefined,\n\n\t\t// @option maxNativeZoom: Number = undefined\n\t\t// Maximum zoom number the tile source has available. If it is specified,\n\t\t// the tiles on all zoom levels higher than `maxNativeZoom` will be loaded\n\t\t// from `maxNativeZoom` level and auto-scaled.\n\t\tmaxNativeZoom: undefined,\n\n\t\t// @option minNativeZoom: Number = undefined\n\t\t// Minimum zoom number the tile source has available. If it is specified,\n\t\t// the tiles on all zoom levels lower than `minNativeZoom` will be loaded\n\t\t// from `minNativeZoom` level and auto-scaled.\n\t\tminNativeZoom: undefined,\n\n\t\t// @option noWrap: Boolean = false\n\t\t// Whether the layer is wrapped around the antimeridian. If `true`, the\n\t\t// GridLayer will only be displayed once at low zoom levels. Has no\n\t\t// effect when the [map CRS](#map-crs) doesn't wrap around. Can be used\n\t\t// in combination with [`bounds`](#gridlayer-bounds) to prevent requesting\n\t\t// tiles outside the CRS limits.\n\t\tnoWrap: false,\n\n\t\t// @option pane: String = 'tilePane'\n\t\t// `Map pane` where the grid layer will be added.\n\t\tpane: 'tilePane',\n\n\t\t// @option className: String = ''\n\t\t// A custom class name to assign to the tile layer. Empty by default.\n\t\tclassName: '',\n\n\t\t// @option keepBuffer: Number = 2\n\t\t// When panning the map, keep this many rows and columns of tiles before unloading them.\n\t\tkeepBuffer: 2\n\t},\n\n\tinitialize: function (options) {\n\t\tUtil.setOptions(this, options);\n\t},\n\n\tonAdd: function () {\n\t\tthis._initContainer();\n\n\t\tthis._levels = {};\n\t\tthis._tiles = {};\n\n\t\tthis._resetView(); // implicit _update() call\n\t},\n\n\tbeforeAdd: function (map) {\n\t\tmap._addZoomLimit(this);\n\t},\n\n\tonRemove: function (map) {\n\t\tthis._removeAllTiles();\n\t\tDomUtil.remove(this._container);\n\t\tmap._removeZoomLimit(this);\n\t\tthis._container = null;\n\t\tthis._tileZoom = undefined;\n\t},\n\n\t// @method bringToFront: this\n\t// Brings the tile layer to the top of all tile layers.\n\tbringToFront: function () {\n\t\tif (this._map) {\n\t\t\tDomUtil.toFront(this._container);\n\t\t\tthis._setAutoZIndex(Math.max);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method bringToBack: this\n\t// Brings the tile layer to the bottom of all tile layers.\n\tbringToBack: function () {\n\t\tif (this._map) {\n\t\t\tDomUtil.toBack(this._container);\n\t\t\tthis._setAutoZIndex(Math.min);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method getContainer: HTMLElement\n\t// Returns the HTML element that contains the tiles for this layer.\n\tgetContainer: function () {\n\t\treturn this._container;\n\t},\n\n\t// @method setOpacity(opacity: Number): this\n\t// Changes the [opacity](#gridlayer-opacity) of the grid layer.\n\tsetOpacity: function (opacity) {\n\t\tthis.options.opacity = opacity;\n\t\tthis._updateOpacity();\n\t\treturn this;\n\t},\n\n\t// @method setZIndex(zIndex: Number): this\n\t// Changes the [zIndex](#gridlayer-zindex) of the grid layer.\n\tsetZIndex: function (zIndex) {\n\t\tthis.options.zIndex = zIndex;\n\t\tthis._updateZIndex();\n\n\t\treturn this;\n\t},\n\n\t// @method isLoading: Boolean\n\t// Returns `true` if any tile in the grid layer has not finished loading.\n\tisLoading: function () {\n\t\treturn this._loading;\n\t},\n\n\t// @method redraw: this\n\t// Causes the layer to clear all the tiles and request them again.\n\tredraw: function () {\n\t\tif (this._map) {\n\t\t\tthis._removeAllTiles();\n\t\t\tvar tileZoom = this._clampZoom(this._map.getZoom());\n\t\t\tif (tileZoom !== this._tileZoom) {\n\t\t\t\tthis._tileZoom = tileZoom;\n\t\t\t\tthis._updateLevels();\n\t\t\t}\n\t\t\tthis._update();\n\t\t}\n\t\treturn this;\n\t},\n\n\tgetEvents: function () {\n\t\tvar events = {\n\t\t\tviewprereset: this._invalidateAll,\n\t\t\tviewreset: this._resetView,\n\t\t\tzoom: this._resetView,\n\t\t\tmoveend: this._onMoveEnd\n\t\t};\n\n\t\tif (!this.options.updateWhenIdle) {\n\t\t\t// update tiles on move, but not more often than once per given interval\n\t\t\tif (!this._onMove) {\n\t\t\t\tthis._onMove = Util.throttle(this._onMoveEnd, this.options.updateInterval, this);\n\t\t\t}\n\n\t\t\tevents.move = this._onMove;\n\t\t}\n\n\t\tif (this._zoomAnimated) {\n\t\t\tevents.zoomanim = this._animateZoom;\n\t\t}\n\n\t\treturn events;\n\t},\n\n\t// @section Extension methods\n\t// Layers extending `GridLayer` shall reimplement the following method.\n\t// @method createTile(coords: Object, done?: Function): HTMLElement\n\t// Called only internally, must be overridden by classes extending `GridLayer`.\n\t// Returns the `HTMLElement` corresponding to the given `coords`. If the `done` callback\n\t// is specified, it must be called when the tile has finished loading and drawing.\n\tcreateTile: function () {\n\t\treturn document.createElement('div');\n\t},\n\n\t// @section\n\t// @method getTileSize: Point\n\t// Normalizes the [tileSize option](#gridlayer-tilesize) into a point. Used by the `createTile()` method.\n\tgetTileSize: function () {\n\t\tvar s = this.options.tileSize;\n\t\treturn s instanceof Point ? s : new Point(s, s);\n\t},\n\n\t_updateZIndex: function () {\n\t\tif (this._container && this.options.zIndex !== undefined && this.options.zIndex !== null) {\n\t\t\tthis._container.style.zIndex = this.options.zIndex;\n\t\t}\n\t},\n\n\t_setAutoZIndex: function (compare) {\n\t\t// go through all other layers of the same pane, set zIndex to max + 1 (front) or min - 1 (back)\n\n\t\tvar layers = this.getPane().children,\n\t\t edgeZIndex = -compare(-Infinity, Infinity); // -Infinity for max, Infinity for min\n\n\t\tfor (var i = 0, len = layers.length, zIndex; i < len; i++) {\n\n\t\t\tzIndex = layers[i].style.zIndex;\n\n\t\t\tif (layers[i] !== this._container && zIndex) {\n\t\t\t\tedgeZIndex = compare(edgeZIndex, +zIndex);\n\t\t\t}\n\t\t}\n\n\t\tif (isFinite(edgeZIndex)) {\n\t\t\tthis.options.zIndex = edgeZIndex + compare(-1, 1);\n\t\t\tthis._updateZIndex();\n\t\t}\n\t},\n\n\t_updateOpacity: function () {\n\t\tif (!this._map) { return; }\n\n\t\t// IE doesn't inherit filter opacity properly, so we're forced to set it on tiles\n\t\tif (Browser.ielt9) { return; }\n\n\t\tDomUtil.setOpacity(this._container, this.options.opacity);\n\n\t\tvar now = +new Date(),\n\t\t nextFrame = false,\n\t\t willPrune = false;\n\n\t\tfor (var key in this._tiles) {\n\t\t\tvar tile = this._tiles[key];\n\t\t\tif (!tile.current || !tile.loaded) { continue; }\n\n\t\t\tvar fade = Math.min(1, (now - tile.loaded) / 200);\n\n\t\t\tDomUtil.setOpacity(tile.el, fade);\n\t\t\tif (fade < 1) {\n\t\t\t\tnextFrame = true;\n\t\t\t} else {\n\t\t\t\tif (tile.active) {\n\t\t\t\t\twillPrune = true;\n\t\t\t\t} else {\n\t\t\t\t\tthis._onOpaqueTile(tile);\n\t\t\t\t}\n\t\t\t\ttile.active = true;\n\t\t\t}\n\t\t}\n\n\t\tif (willPrune && !this._noPrune) { this._pruneTiles(); }\n\n\t\tif (nextFrame) {\n\t\t\tUtil.cancelAnimFrame(this._fadeFrame);\n\t\t\tthis._fadeFrame = Util.requestAnimFrame(this._updateOpacity, this);\n\t\t}\n\t},\n\n\t_onOpaqueTile: Util.falseFn,\n\n\t_initContainer: function () {\n\t\tif (this._container) { return; }\n\n\t\tthis._container = DomUtil.create('div', 'leaflet-layer ' + (this.options.className || ''));\n\t\tthis._updateZIndex();\n\n\t\tif (this.options.opacity < 1) {\n\t\t\tthis._updateOpacity();\n\t\t}\n\n\t\tthis.getPane().appendChild(this._container);\n\t},\n\n\t_updateLevels: function () {\n\n\t\tvar zoom = this._tileZoom,\n\t\t maxZoom = this.options.maxZoom;\n\n\t\tif (zoom === undefined) { return undefined; }\n\n\t\tfor (var z in this._levels) {\n\t\t\tz = Number(z);\n\t\t\tif (this._levels[z].el.children.length || z === zoom) {\n\t\t\t\tthis._levels[z].el.style.zIndex = maxZoom - Math.abs(zoom - z);\n\t\t\t\tthis._onUpdateLevel(z);\n\t\t\t} else {\n\t\t\t\tDomUtil.remove(this._levels[z].el);\n\t\t\t\tthis._removeTilesAtZoom(z);\n\t\t\t\tthis._onRemoveLevel(z);\n\t\t\t\tdelete this._levels[z];\n\t\t\t}\n\t\t}\n\n\t\tvar level = this._levels[zoom],\n\t\t map = this._map;\n\n\t\tif (!level) {\n\t\t\tlevel = this._levels[zoom] = {};\n\n\t\t\tlevel.el = DomUtil.create('div', 'leaflet-tile-container leaflet-zoom-animated', this._container);\n\t\t\tlevel.el.style.zIndex = maxZoom;\n\n\t\t\tlevel.origin = map.project(map.unproject(map.getPixelOrigin()), zoom).round();\n\t\t\tlevel.zoom = zoom;\n\n\t\t\tthis._setZoomTransform(level, map.getCenter(), map.getZoom());\n\n\t\t\t// force the browser to consider the newly added element for transition\n\t\t\tUtil.falseFn(level.el.offsetWidth);\n\n\t\t\tthis._onCreateLevel(level);\n\t\t}\n\n\t\tthis._level = level;\n\n\t\treturn level;\n\t},\n\n\t_onUpdateLevel: Util.falseFn,\n\n\t_onRemoveLevel: Util.falseFn,\n\n\t_onCreateLevel: Util.falseFn,\n\n\t_pruneTiles: function () {\n\t\tif (!this._map) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar key, tile;\n\n\t\tvar zoom = this._map.getZoom();\n\t\tif (zoom > this.options.maxZoom ||\n\t\t\tzoom < this.options.minZoom) {\n\t\t\tthis._removeAllTiles();\n\t\t\treturn;\n\t\t}\n\n\t\tfor (key in this._tiles) {\n\t\t\ttile = this._tiles[key];\n\t\t\ttile.retain = tile.current;\n\t\t}\n\n\t\tfor (key in this._tiles) {\n\t\t\ttile = this._tiles[key];\n\t\t\tif (tile.current && !tile.active) {\n\t\t\t\tvar coords = tile.coords;\n\t\t\t\tif (!this._retainParent(coords.x, coords.y, coords.z, coords.z - 5)) {\n\t\t\t\t\tthis._retainChildren(coords.x, coords.y, coords.z, coords.z + 2);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (key in this._tiles) {\n\t\t\tif (!this._tiles[key].retain) {\n\t\t\t\tthis._removeTile(key);\n\t\t\t}\n\t\t}\n\t},\n\n\t_removeTilesAtZoom: function (zoom) {\n\t\tfor (var key in this._tiles) {\n\t\t\tif (this._tiles[key].coords.z !== zoom) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthis._removeTile(key);\n\t\t}\n\t},\n\n\t_removeAllTiles: function () {\n\t\tfor (var key in this._tiles) {\n\t\t\tthis._removeTile(key);\n\t\t}\n\t},\n\n\t_invalidateAll: function () {\n\t\tfor (var z in this._levels) {\n\t\t\tDomUtil.remove(this._levels[z].el);\n\t\t\tthis._onRemoveLevel(Number(z));\n\t\t\tdelete this._levels[z];\n\t\t}\n\t\tthis._removeAllTiles();\n\n\t\tthis._tileZoom = undefined;\n\t},\n\n\t_retainParent: function (x, y, z, minZoom) {\n\t\tvar x2 = Math.floor(x / 2),\n\t\t y2 = Math.floor(y / 2),\n\t\t z2 = z - 1,\n\t\t coords2 = new Point(+x2, +y2);\n\t\tcoords2.z = +z2;\n\n\t\tvar key = this._tileCoordsToKey(coords2),\n\t\t tile = this._tiles[key];\n\n\t\tif (tile && tile.active) {\n\t\t\ttile.retain = true;\n\t\t\treturn true;\n\n\t\t} else if (tile && tile.loaded) {\n\t\t\ttile.retain = true;\n\t\t}\n\n\t\tif (z2 > minZoom) {\n\t\t\treturn this._retainParent(x2, y2, z2, minZoom);\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_retainChildren: function (x, y, z, maxZoom) {\n\n\t\tfor (var i = 2 * x; i < 2 * x + 2; i++) {\n\t\t\tfor (var j = 2 * y; j < 2 * y + 2; j++) {\n\n\t\t\t\tvar coords = new Point(i, j);\n\t\t\t\tcoords.z = z + 1;\n\n\t\t\t\tvar key = this._tileCoordsToKey(coords),\n\t\t\t\t tile = this._tiles[key];\n\n\t\t\t\tif (tile && tile.active) {\n\t\t\t\t\ttile.retain = true;\n\t\t\t\t\tcontinue;\n\n\t\t\t\t} else if (tile && tile.loaded) {\n\t\t\t\t\ttile.retain = true;\n\t\t\t\t}\n\n\t\t\t\tif (z + 1 < maxZoom) {\n\t\t\t\t\tthis._retainChildren(i, j, z + 1, maxZoom);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t_resetView: function (e) {\n\t\tvar animating = e && (e.pinch || e.flyTo);\n\t\tthis._setView(this._map.getCenter(), this._map.getZoom(), animating, animating);\n\t},\n\n\t_animateZoom: function (e) {\n\t\tthis._setView(e.center, e.zoom, true, e.noUpdate);\n\t},\n\n\t_clampZoom: function (zoom) {\n\t\tvar options = this.options;\n\n\t\tif (undefined !== options.minNativeZoom && zoom < options.minNativeZoom) {\n\t\t\treturn options.minNativeZoom;\n\t\t}\n\n\t\tif (undefined !== options.maxNativeZoom && options.maxNativeZoom < zoom) {\n\t\t\treturn options.maxNativeZoom;\n\t\t}\n\n\t\treturn zoom;\n\t},\n\n\t_setView: function (center, zoom, noPrune, noUpdate) {\n\t\tvar tileZoom = Math.round(zoom);\n\t\tif ((this.options.maxZoom !== undefined && tileZoom > this.options.maxZoom) ||\n\t\t (this.options.minZoom !== undefined && tileZoom < this.options.minZoom)) {\n\t\t\ttileZoom = undefined;\n\t\t} else {\n\t\t\ttileZoom = this._clampZoom(tileZoom);\n\t\t}\n\n\t\tvar tileZoomChanged = this.options.updateWhenZooming && (tileZoom !== this._tileZoom);\n\n\t\tif (!noUpdate || tileZoomChanged) {\n\n\t\t\tthis._tileZoom = tileZoom;\n\n\t\t\tif (this._abortLoading) {\n\t\t\t\tthis._abortLoading();\n\t\t\t}\n\n\t\t\tthis._updateLevels();\n\t\t\tthis._resetGrid();\n\n\t\t\tif (tileZoom !== undefined) {\n\t\t\t\tthis._update(center);\n\t\t\t}\n\n\t\t\tif (!noPrune) {\n\t\t\t\tthis._pruneTiles();\n\t\t\t}\n\n\t\t\t// Flag to prevent _updateOpacity from pruning tiles during\n\t\t\t// a zoom anim or a pinch gesture\n\t\t\tthis._noPrune = !!noPrune;\n\t\t}\n\n\t\tthis._setZoomTransforms(center, zoom);\n\t},\n\n\t_setZoomTransforms: function (center, zoom) {\n\t\tfor (var i in this._levels) {\n\t\t\tthis._setZoomTransform(this._levels[i], center, zoom);\n\t\t}\n\t},\n\n\t_setZoomTransform: function (level, center, zoom) {\n\t\tvar scale = this._map.getZoomScale(zoom, level.zoom),\n\t\t translate = level.origin.multiplyBy(scale)\n\t\t .subtract(this._map._getNewPixelOrigin(center, zoom)).round();\n\n\t\tif (Browser.any3d) {\n\t\t\tDomUtil.setTransform(level.el, translate, scale);\n\t\t} else {\n\t\t\tDomUtil.setPosition(level.el, translate);\n\t\t}\n\t},\n\n\t_resetGrid: function () {\n\t\tvar map = this._map,\n\t\t crs = map.options.crs,\n\t\t tileSize = this._tileSize = this.getTileSize(),\n\t\t tileZoom = this._tileZoom;\n\n\t\tvar bounds = this._map.getPixelWorldBounds(this._tileZoom);\n\t\tif (bounds) {\n\t\t\tthis._globalTileRange = this._pxBoundsToTileRange(bounds);\n\t\t}\n\n\t\tthis._wrapX = crs.wrapLng && !this.options.noWrap && [\n\t\t\tMath.floor(map.project([0, crs.wrapLng[0]], tileZoom).x / tileSize.x),\n\t\t\tMath.ceil(map.project([0, crs.wrapLng[1]], tileZoom).x / tileSize.y)\n\t\t];\n\t\tthis._wrapY = crs.wrapLat && !this.options.noWrap && [\n\t\t\tMath.floor(map.project([crs.wrapLat[0], 0], tileZoom).y / tileSize.x),\n\t\t\tMath.ceil(map.project([crs.wrapLat[1], 0], tileZoom).y / tileSize.y)\n\t\t];\n\t},\n\n\t_onMoveEnd: function () {\n\t\tif (!this._map || this._map._animatingZoom) { return; }\n\n\t\tthis._update();\n\t},\n\n\t_getTiledPixelBounds: function (center) {\n\t\tvar map = this._map,\n\t\t mapZoom = map._animatingZoom ? Math.max(map._animateToZoom, map.getZoom()) : map.getZoom(),\n\t\t scale = map.getZoomScale(mapZoom, this._tileZoom),\n\t\t pixelCenter = map.project(center, this._tileZoom).floor(),\n\t\t halfSize = map.getSize().divideBy(scale * 2);\n\n\t\treturn new Bounds(pixelCenter.subtract(halfSize), pixelCenter.add(halfSize));\n\t},\n\n\t// Private method to load tiles in the grid's active zoom level according to map bounds\n\t_update: function (center) {\n\t\tvar map = this._map;\n\t\tif (!map) { return; }\n\t\tvar zoom = this._clampZoom(map.getZoom());\n\n\t\tif (center === undefined) { center = map.getCenter(); }\n\t\tif (this._tileZoom === undefined) { return; }\t// if out of minzoom/maxzoom\n\n\t\tvar pixelBounds = this._getTiledPixelBounds(center),\n\t\t tileRange = this._pxBoundsToTileRange(pixelBounds),\n\t\t tileCenter = tileRange.getCenter(),\n\t\t queue = [],\n\t\t margin = this.options.keepBuffer,\n\t\t noPruneRange = new Bounds(tileRange.getBottomLeft().subtract([margin, -margin]),\n\t\t tileRange.getTopRight().add([margin, -margin]));\n\n\t\t// Sanity check: panic if the tile range contains Infinity somewhere.\n\t\tif (!(isFinite(tileRange.min.x) &&\n\t\t isFinite(tileRange.min.y) &&\n\t\t isFinite(tileRange.max.x) &&\n\t\t isFinite(tileRange.max.y))) { throw new Error('Attempted to load an infinite number of tiles'); }\n\n\t\tfor (var key in this._tiles) {\n\t\t\tvar c = this._tiles[key].coords;\n\t\t\tif (c.z !== this._tileZoom || !noPruneRange.contains(new Point(c.x, c.y))) {\n\t\t\t\tthis._tiles[key].current = false;\n\t\t\t}\n\t\t}\n\n\t\t// _update just loads more tiles. If the tile zoom level differs too much\n\t\t// from the map's, let _setView reset levels and prune old tiles.\n\t\tif (Math.abs(zoom - this._tileZoom) > 1) { this._setView(center, zoom); return; }\n\n\t\t// create a queue of coordinates to load tiles from\n\t\tfor (var j = tileRange.min.y; j <= tileRange.max.y; j++) {\n\t\t\tfor (var i = tileRange.min.x; i <= tileRange.max.x; i++) {\n\t\t\t\tvar coords = new Point(i, j);\n\t\t\t\tcoords.z = this._tileZoom;\n\n\t\t\t\tif (!this._isValidTile(coords)) { continue; }\n\n\t\t\t\tvar tile = this._tiles[this._tileCoordsToKey(coords)];\n\t\t\t\tif (tile) {\n\t\t\t\t\ttile.current = true;\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push(coords);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// sort tile queue to load tiles in order of their distance to center\n\t\tqueue.sort(function (a, b) {\n\t\t\treturn a.distanceTo(tileCenter) - b.distanceTo(tileCenter);\n\t\t});\n\n\t\tif (queue.length !== 0) {\n\t\t\t// if it's the first batch of tiles to load\n\t\t\tif (!this._loading) {\n\t\t\t\tthis._loading = true;\n\t\t\t\t// @event loading: Event\n\t\t\t\t// Fired when the grid layer starts loading tiles.\n\t\t\t\tthis.fire('loading');\n\t\t\t}\n\n\t\t\t// create DOM fragment to append tiles in one batch\n\t\t\tvar fragment = document.createDocumentFragment();\n\n\t\t\tfor (i = 0; i < queue.length; i++) {\n\t\t\t\tthis._addTile(queue[i], fragment);\n\t\t\t}\n\n\t\t\tthis._level.el.appendChild(fragment);\n\t\t}\n\t},\n\n\t_isValidTile: function (coords) {\n\t\tvar crs = this._map.options.crs;\n\n\t\tif (!crs.infinite) {\n\t\t\t// don't load tile if it's out of bounds and not wrapped\n\t\t\tvar bounds = this._globalTileRange;\n\t\t\tif ((!crs.wrapLng && (coords.x < bounds.min.x || coords.x > bounds.max.x)) ||\n\t\t\t (!crs.wrapLat && (coords.y < bounds.min.y || coords.y > bounds.max.y))) { return false; }\n\t\t}\n\n\t\tif (!this.options.bounds) { return true; }\n\n\t\t// don't load tile if it doesn't intersect the bounds in options\n\t\tvar tileBounds = this._tileCoordsToBounds(coords);\n\t\treturn latLngBounds(this.options.bounds).overlaps(tileBounds);\n\t},\n\n\t_keyToBounds: function (key) {\n\t\treturn this._tileCoordsToBounds(this._keyToTileCoords(key));\n\t},\n\n\t_tileCoordsToNwSe: function (coords) {\n\t\tvar map = this._map,\n\t\t tileSize = this.getTileSize(),\n\t\t nwPoint = coords.scaleBy(tileSize),\n\t\t sePoint = nwPoint.add(tileSize),\n\t\t nw = map.unproject(nwPoint, coords.z),\n\t\t se = map.unproject(sePoint, coords.z);\n\t\treturn [nw, se];\n\t},\n\n\t// converts tile coordinates to its geographical bounds\n\t_tileCoordsToBounds: function (coords) {\n\t\tvar bp = this._tileCoordsToNwSe(coords),\n\t\t bounds = new LatLngBounds(bp[0], bp[1]);\n\n\t\tif (!this.options.noWrap) {\n\t\t\tbounds = this._map.wrapLatLngBounds(bounds);\n\t\t}\n\t\treturn bounds;\n\t},\n\t// converts tile coordinates to key for the tile cache\n\t_tileCoordsToKey: function (coords) {\n\t\treturn coords.x + ':' + coords.y + ':' + coords.z;\n\t},\n\n\t// converts tile cache key to coordinates\n\t_keyToTileCoords: function (key) {\n\t\tvar k = key.split(':'),\n\t\t coords = new Point(+k[0], +k[1]);\n\t\tcoords.z = +k[2];\n\t\treturn coords;\n\t},\n\n\t_removeTile: function (key) {\n\t\tvar tile = this._tiles[key];\n\t\tif (!tile) { return; }\n\n\t\tDomUtil.remove(tile.el);\n\n\t\tdelete this._tiles[key];\n\n\t\t// @event tileunload: TileEvent\n\t\t// Fired when a tile is removed (e.g. when a tile goes off the screen).\n\t\tthis.fire('tileunload', {\n\t\t\ttile: tile.el,\n\t\t\tcoords: this._keyToTileCoords(key)\n\t\t});\n\t},\n\n\t_initTile: function (tile) {\n\t\tDomUtil.addClass(tile, 'leaflet-tile');\n\n\t\tvar tileSize = this.getTileSize();\n\t\ttile.style.width = tileSize.x + 'px';\n\t\ttile.style.height = tileSize.y + 'px';\n\n\t\ttile.onselectstart = Util.falseFn;\n\t\ttile.onmousemove = Util.falseFn;\n\n\t\t// update opacity on tiles in IE7-8 because of filter inheritance problems\n\t\tif (Browser.ielt9 && this.options.opacity < 1) {\n\t\t\tDomUtil.setOpacity(tile, this.options.opacity);\n\t\t}\n\t},\n\n\t_addTile: function (coords, container) {\n\t\tvar tilePos = this._getTilePos(coords),\n\t\t key = this._tileCoordsToKey(coords);\n\n\t\tvar tile = this.createTile(this._wrapCoords(coords), Util.bind(this._tileReady, this, coords));\n\n\t\tthis._initTile(tile);\n\n\t\t// if createTile is defined with a second argument (\"done\" callback),\n\t\t// we know that tile is async and will be ready later; otherwise\n\t\tif (this.createTile.length < 2) {\n\t\t\t// mark tile as ready, but delay one frame for opacity animation to happen\n\t\t\tUtil.requestAnimFrame(Util.bind(this._tileReady, this, coords, null, tile));\n\t\t}\n\n\t\tDomUtil.setPosition(tile, tilePos);\n\n\t\t// save tile in cache\n\t\tthis._tiles[key] = {\n\t\t\tel: tile,\n\t\t\tcoords: coords,\n\t\t\tcurrent: true\n\t\t};\n\n\t\tcontainer.appendChild(tile);\n\t\t// @event tileloadstart: TileEvent\n\t\t// Fired when a tile is requested and starts loading.\n\t\tthis.fire('tileloadstart', {\n\t\t\ttile: tile,\n\t\t\tcoords: coords\n\t\t});\n\t},\n\n\t_tileReady: function (coords, err, tile) {\n\t\tif (err) {\n\t\t\t// @event tileerror: TileErrorEvent\n\t\t\t// Fired when there is an error loading a tile.\n\t\t\tthis.fire('tileerror', {\n\t\t\t\terror: err,\n\t\t\t\ttile: tile,\n\t\t\t\tcoords: coords\n\t\t\t});\n\t\t}\n\n\t\tvar key = this._tileCoordsToKey(coords);\n\n\t\ttile = this._tiles[key];\n\t\tif (!tile) { return; }\n\n\t\ttile.loaded = +new Date();\n\t\tif (this._map._fadeAnimated) {\n\t\t\tDomUtil.setOpacity(tile.el, 0);\n\t\t\tUtil.cancelAnimFrame(this._fadeFrame);\n\t\t\tthis._fadeFrame = Util.requestAnimFrame(this._updateOpacity, this);\n\t\t} else {\n\t\t\ttile.active = true;\n\t\t\tthis._pruneTiles();\n\t\t}\n\n\t\tif (!err) {\n\t\t\tDomUtil.addClass(tile.el, 'leaflet-tile-loaded');\n\n\t\t\t// @event tileload: TileEvent\n\t\t\t// Fired when a tile loads.\n\t\t\tthis.fire('tileload', {\n\t\t\t\ttile: tile.el,\n\t\t\t\tcoords: coords\n\t\t\t});\n\t\t}\n\n\t\tif (this._noTilesToLoad()) {\n\t\t\tthis._loading = false;\n\t\t\t// @event load: Event\n\t\t\t// Fired when the grid layer loaded all visible tiles.\n\t\t\tthis.fire('load');\n\n\t\t\tif (Browser.ielt9 || !this._map._fadeAnimated) {\n\t\t\t\tUtil.requestAnimFrame(this._pruneTiles, this);\n\t\t\t} else {\n\t\t\t\t// Wait a bit more than 0.2 secs (the duration of the tile fade-in)\n\t\t\t\t// to trigger a pruning.\n\t\t\t\tsetTimeout(Util.bind(this._pruneTiles, this), 250);\n\t\t\t}\n\t\t}\n\t},\n\n\t_getTilePos: function (coords) {\n\t\treturn coords.scaleBy(this.getTileSize()).subtract(this._level.origin);\n\t},\n\n\t_wrapCoords: function (coords) {\n\t\tvar newCoords = new Point(\n\t\t\tthis._wrapX ? Util.wrapNum(coords.x, this._wrapX) : coords.x,\n\t\t\tthis._wrapY ? Util.wrapNum(coords.y, this._wrapY) : coords.y);\n\t\tnewCoords.z = coords.z;\n\t\treturn newCoords;\n\t},\n\n\t_pxBoundsToTileRange: function (bounds) {\n\t\tvar tileSize = this.getTileSize();\n\t\treturn new Bounds(\n\t\t\tbounds.min.unscaleBy(tileSize).floor(),\n\t\t\tbounds.max.unscaleBy(tileSize).ceil().subtract([1, 1]));\n\t},\n\n\t_noTilesToLoad: function () {\n\t\tfor (var key in this._tiles) {\n\t\t\tif (!this._tiles[key].loaded) { return false; }\n\t\t}\n\t\treturn true;\n\t}\n});\n\n// @factory L.gridLayer(options?: GridLayer options)\n// Creates a new instance of GridLayer with the supplied options.\nexport function gridLayer(options) {\n\treturn new GridLayer(options);\n}\n", "import {GridLayer} from './GridLayer';\r\nimport Browser from '../../core/Browser';\r\nimport * as Util from '../../core/Util';\r\nimport * as DomEvent from '../../dom/DomEvent';\r\nimport * as DomUtil from '../../dom/DomUtil';\r\n\r\n\r\n/*\r\n * @class TileLayer\r\n * @inherits GridLayer\r\n * @aka L.TileLayer\r\n * Used to load and display tile layers on the map. Note that most tile servers require attribution, which you can set under `Layer`. Extends `GridLayer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png?{foo}', {foo: 'bar', attribution: '© <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors'}).addTo(map);\n * ```\r\n *\r\n * @section URL template\r\n * @example\r\n *\r\n * A string of the following form:\r\n *\r\n * ```\r\n * 'https://{s}.somedomain.com/blabla/{z}/{x}/{y}{r}.png'\r\n * ```\r\n *\r\n * `{s}` means one of the available subdomains (used sequentially to help with browser parallel requests per domain limitation; subdomain values are specified in options; `a`, `b` or `c` by default, can be omitted), `{z}` — zoom level, `{x}` and `{y}` — tile coordinates. `{r}` can be used to add \"@2x\" to the URL to load retina tiles.\r\n *\r\n * You can use custom keys in the template, which will be [evaluated](#util-template) from TileLayer options, like this:\r\n *\r\n * ```\r\n * L.tileLayer('https://{s}.somedomain.com/{foo}/{z}/{x}/{y}.png', {foo: 'bar'});\r\n * ```\r\n */\r\n\r\n\r\nexport var TileLayer = GridLayer.extend({\r\n\r\n\t// @section\r\n\t// @aka TileLayer options\r\n\toptions: {\r\n\t\t// @option minZoom: Number = 0\r\n\t\t// The minimum zoom level down to which this layer will be displayed (inclusive).\r\n\t\tminZoom: 0,\r\n\r\n\t\t// @option maxZoom: Number = 18\r\n\t\t// The maximum zoom level up to which this layer will be displayed (inclusive).\r\n\t\tmaxZoom: 18,\r\n\r\n\t\t// @option subdomains: String|String[] = 'abc'\r\n\t\t// Subdomains of the tile service. Can be passed in the form of one string (where each letter is a subdomain name) or an array of strings.\r\n\t\tsubdomains: 'abc',\r\n\r\n\t\t// @option errorTileUrl: String = ''\r\n\t\t// URL to the tile image to show in place of the tile that failed to load.\r\n\t\terrorTileUrl: '',\r\n\r\n\t\t// @option zoomOffset: Number = 0\r\n\t\t// The zoom number used in tile URLs will be offset with this value.\r\n\t\tzoomOffset: 0,\r\n\r\n\t\t// @option tms: Boolean = false\r\n\t\t// If `true`, inverses Y axis numbering for tiles (turn this on for [TMS](https://en.wikipedia.org/wiki/Tile_Map_Service) services).\r\n\t\ttms: false,\r\n\r\n\t\t// @option zoomReverse: Boolean = false\r\n\t\t// If set to true, the zoom number used in tile URLs will be reversed (`maxZoom - zoom` instead of `zoom`)\r\n\t\tzoomReverse: false,\r\n\r\n\t\t// @option detectRetina: Boolean = false\r\n\t\t// If `true` and user is on a retina display, it will request four tiles of half the specified size and a bigger zoom level in place of one to utilize the high resolution.\r\n\t\tdetectRetina: false,\r\n\r\n\t\t// @option crossOrigin: Boolean|String = false\r\n\t\t// Whether the crossOrigin attribute will be added to the tiles.\r\n\t\t// If a String is provided, all tiles will have their crossOrigin attribute set to the String provided. This is needed if you want to access tile pixel data.\r\n\t\t// Refer to [CORS Settings](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for valid String values.\r\n\t\tcrossOrigin: false,\r\n\r\n\t\t// @option referrerPolicy: Boolean|String = false\r\n\t\t// Whether the referrerPolicy attribute will be added to the tiles.\r\n\t\t// If a String is provided, all tiles will have their referrerPolicy attribute set to the String provided.\r\n\t\t// This may be needed if your map's rendering context has a strict default but your tile provider expects a valid referrer\r\n\t\t// (e.g. to validate an API token).\r\n\t\t// Refer to [HTMLImageElement.referrerPolicy](https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/referrerPolicy) for valid String values.\r\n\t\treferrerPolicy: false\r\n\t},\r\n\r\n\tinitialize: function (url, options) {\r\n\r\n\t\tthis._url = url;\r\n\r\n\t\toptions = Util.setOptions(this, options);\r\n\r\n\t\t// detecting retina displays, adjusting tileSize and zoom levels\r\n\t\tif (options.detectRetina && Browser.retina && options.maxZoom > 0) {\r\n\r\n\t\t\toptions.tileSize = Math.floor(options.tileSize / 2);\r\n\r\n\t\t\tif (!options.zoomReverse) {\r\n\t\t\t\toptions.zoomOffset++;\r\n\t\t\t\toptions.maxZoom = Math.max(options.minZoom, options.maxZoom - 1);\r\n\t\t\t} else {\r\n\t\t\t\toptions.zoomOffset--;\r\n\t\t\t\toptions.minZoom = Math.min(options.maxZoom, options.minZoom + 1);\r\n\t\t\t}\r\n\r\n\t\t\toptions.minZoom = Math.max(0, options.minZoom);\r\n\t\t} else if (!options.zoomReverse) {\r\n\t\t\t// make sure maxZoom is gte minZoom\r\n\t\t\toptions.maxZoom = Math.max(options.minZoom, options.maxZoom);\r\n\t\t} else {\r\n\t\t\t// make sure minZoom is lte maxZoom\r\n\t\t\toptions.minZoom = Math.min(options.maxZoom, options.minZoom);\r\n\t\t}\r\n\r\n\t\tif (typeof options.subdomains === 'string') {\r\n\t\t\toptions.subdomains = options.subdomains.split('');\r\n\t\t}\r\n\r\n\t\tthis.on('tileunload', this._onTileRemove);\r\n\t},\r\n\r\n\t// @method setUrl(url: String, noRedraw?: Boolean): this\r\n\t// Updates the layer's URL template and redraws it (unless `noRedraw` is set to `true`).\r\n\t// If the URL does not change, the layer will not be redrawn unless\r\n\t// the noRedraw parameter is set to false.\r\n\tsetUrl: function (url, noRedraw) {\r\n\t\tif (this._url === url && noRedraw === undefined) {\r\n\t\t\tnoRedraw = true;\r\n\t\t}\r\n\r\n\t\tthis._url = url;\r\n\r\n\t\tif (!noRedraw) {\r\n\t\t\tthis.redraw();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method createTile(coords: Object, done?: Function): HTMLElement\r\n\t// Called only internally, overrides GridLayer's [`createTile()`](#gridlayer-createtile)\r\n\t// to return an `<img>` HTML element with the appropriate image URL given `coords`. The `done`\r\n\t// callback is called when the tile has been loaded.\r\n\tcreateTile: function (coords, done) {\r\n\t\tvar tile = document.createElement('img');\r\n\r\n\t\tDomEvent.on(tile, 'load', Util.bind(this._tileOnLoad, this, done, tile));\r\n\t\tDomEvent.on(tile, 'error', Util.bind(this._tileOnError, this, done, tile));\r\n\r\n\t\tif (this.options.crossOrigin || this.options.crossOrigin === '') {\r\n\t\t\ttile.crossOrigin = this.options.crossOrigin === true ? '' : this.options.crossOrigin;\r\n\t\t}\r\n\r\n\t\t// for this new option we follow the documented behavior\r\n\t\t// more closely by only setting the property when string\r\n\t\tif (typeof this.options.referrerPolicy === 'string') {\r\n\t\t\ttile.referrerPolicy = this.options.referrerPolicy;\r\n\t\t}\r\n\r\n\t\t// The alt attribute is set to the empty string,\r\n\t\t// allowing screen readers to ignore the decorative image tiles.\r\n\t\t// https://www.w3.org/WAI/tutorials/images/decorative/\r\n\t\t// https://www.w3.org/TR/html-aria/#el-img-empty-alt\r\n\t\ttile.alt = '';\r\n\r\n\t\ttile.src = this.getTileUrl(coords);\r\n\r\n\t\treturn tile;\r\n\t},\r\n\r\n\t// @section Extension methods\r\n\t// @uninheritable\r\n\t// Layers extending `TileLayer` might reimplement the following method.\r\n\t// @method getTileUrl(coords: Object): String\r\n\t// Called only internally, returns the URL for a tile given its coordinates.\r\n\t// Classes extending `TileLayer` can override this function to provide custom tile URL naming schemes.\r\n\tgetTileUrl: function (coords) {\r\n\t\tvar data = {\r\n\t\t\tr: Browser.retina ? '@2x' : '',\r\n\t\t\ts: this._getSubdomain(coords),\r\n\t\t\tx: coords.x,\r\n\t\t\ty: coords.y,\r\n\t\t\tz: this._getZoomForUrl()\r\n\t\t};\r\n\t\tif (this._map && !this._map.options.crs.infinite) {\r\n\t\t\tvar invertedY = this._globalTileRange.max.y - coords.y;\r\n\t\t\tif (this.options.tms) {\r\n\t\t\t\tdata['y'] = invertedY;\r\n\t\t\t}\r\n\t\t\tdata['-y'] = invertedY;\r\n\t\t}\r\n\r\n\t\treturn Util.template(this._url, Util.extend(data, this.options));\r\n\t},\r\n\r\n\t_tileOnLoad: function (done, tile) {\r\n\t\t// For https://github.com/Leaflet/Leaflet/issues/3332\r\n\t\tif (Browser.ielt9) {\r\n\t\t\tsetTimeout(Util.bind(done, this, null, tile), 0);\r\n\t\t} else {\r\n\t\t\tdone(null, tile);\r\n\t\t}\r\n\t},\r\n\r\n\t_tileOnError: function (done, tile, e) {\r\n\t\tvar errorUrl = this.options.errorTileUrl;\r\n\t\tif (errorUrl && tile.getAttribute('src') !== errorUrl) {\r\n\t\t\ttile.src = errorUrl;\r\n\t\t}\r\n\t\tdone(e, tile);\r\n\t},\r\n\r\n\t_onTileRemove: function (e) {\r\n\t\te.tile.onload = null;\r\n\t},\r\n\r\n\t_getZoomForUrl: function () {\r\n\t\tvar zoom = this._tileZoom,\r\n\t\tmaxZoom = this.options.maxZoom,\r\n\t\tzoomReverse = this.options.zoomReverse,\r\n\t\tzoomOffset = this.options.zoomOffset;\r\n\r\n\t\tif (zoomReverse) {\r\n\t\t\tzoom = maxZoom - zoom;\r\n\t\t}\r\n\r\n\t\treturn zoom + zoomOffset;\r\n\t},\r\n\r\n\t_getSubdomain: function (tilePoint) {\r\n\t\tvar index = Math.abs(tilePoint.x + tilePoint.y) % this.options.subdomains.length;\r\n\t\treturn this.options.subdomains[index];\r\n\t},\r\n\r\n\t// stops loading all tiles in the background layer\r\n\t_abortLoading: function () {\r\n\t\tvar i, tile;\r\n\t\tfor (i in this._tiles) {\r\n\t\t\tif (this._tiles[i].coords.z !== this._tileZoom) {\r\n\t\t\t\ttile = this._tiles[i].el;\r\n\r\n\t\t\t\ttile.onload = Util.falseFn;\r\n\t\t\t\ttile.onerror = Util.falseFn;\r\n\r\n\t\t\t\tif (!tile.complete) {\r\n\t\t\t\t\ttile.src = Util.emptyImageUrl;\r\n\t\t\t\t\tvar coords = this._tiles[i].coords;\r\n\t\t\t\t\tDomUtil.remove(tile);\r\n\t\t\t\t\tdelete this._tiles[i];\r\n\t\t\t\t\t// @event tileabort: TileEvent\r\n\t\t\t\t\t// Fired when a tile was loading but is now not wanted.\r\n\t\t\t\t\tthis.fire('tileabort', {\r\n\t\t\t\t\t\ttile: tile,\r\n\t\t\t\t\t\tcoords: coords\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t_removeTile: function (key) {\r\n\t\tvar tile = this._tiles[key];\r\n\t\tif (!tile) { return; }\r\n\r\n\t\t// Cancels any pending http requests associated with the tile\r\n\t\ttile.el.setAttribute('src', Util.emptyImageUrl);\r\n\r\n\t\treturn GridLayer.prototype._removeTile.call(this, key);\r\n\t},\r\n\r\n\t_tileReady: function (coords, err, tile) {\r\n\t\tif (!this._map || (tile && tile.getAttribute('src') === Util.emptyImageUrl)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\treturn GridLayer.prototype._tileReady.call(this, coords, err, tile);\r\n\t}\r\n});\r\n\r\n\r\n// @factory L.tilelayer(urlTemplate: String, options?: TileLayer options)\r\n// Instantiates a tile layer object given a `URL template` and optionally an options object.\r\n\r\nexport function tileLayer(url, options) {\r\n\treturn new TileLayer(url, options);\r\n}\r\n", "import {TileLayer} from './TileLayer';\r\nimport {extend, setOptions, getParamString} from '../../core/Util';\r\nimport Browser from '../../core/Browser';\r\nimport {EPSG4326} from '../../geo/crs/CRS.EPSG4326';\r\nimport {toBounds} from '../../geometry/Bounds';\r\n\r\n/*\r\n * @class TileLayer.WMS\r\n * @inherits TileLayer\r\n * @aka L.TileLayer.WMS\r\n * Used to display [WMS](https://en.wikipedia.org/wiki/Web_Map_Service) services as tile layers on the map. Extends `TileLayer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var nexrad = L.tileLayer.wms(\"http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r.cgi\", {\r\n * \tlayers: 'nexrad-n0r-900913',\r\n * \tformat: 'image/png',\r\n * \ttransparent: true,\r\n * \tattribution: \"Weather data © 2012 IEM Nexrad\"\r\n * });\r\n * ```\r\n */\r\n\r\nexport var TileLayerWMS = TileLayer.extend({\r\n\r\n\t// @section\r\n\t// @aka TileLayer.WMS options\r\n\t// If any custom options not documented here are used, they will be sent to the\r\n\t// WMS server as extra parameters in each request URL. This can be useful for\r\n\t// [non-standard vendor WMS parameters](https://docs.geoserver.org/stable/en/user/services/wms/vendor.html).\r\n\tdefaultWmsParams: {\r\n\t\tservice: 'WMS',\r\n\t\trequest: 'GetMap',\r\n\r\n\t\t// @option layers: String = ''\r\n\t\t// **(required)** Comma-separated list of WMS layers to show.\r\n\t\tlayers: '',\r\n\r\n\t\t// @option styles: String = ''\r\n\t\t// Comma-separated list of WMS styles.\r\n\t\tstyles: '',\r\n\r\n\t\t// @option format: String = 'image/jpeg'\r\n\t\t// WMS image format (use `'image/png'` for layers with transparency).\r\n\t\tformat: 'image/jpeg',\r\n\r\n\t\t// @option transparent: Boolean = false\r\n\t\t// If `true`, the WMS service will return images with transparency.\r\n\t\ttransparent: false,\r\n\r\n\t\t// @option version: String = '1.1.1'\r\n\t\t// Version of the WMS service to use\r\n\t\tversion: '1.1.1'\r\n\t},\r\n\r\n\toptions: {\r\n\t\t// @option crs: CRS = null\r\n\t\t// Coordinate Reference System to use for the WMS requests, defaults to\r\n\t\t// map CRS. Don't change this if you're not sure what it means.\r\n\t\tcrs: null,\r\n\r\n\t\t// @option uppercase: Boolean = false\r\n\t\t// If `true`, WMS request parameter keys will be uppercase.\r\n\t\tuppercase: false\r\n\t},\r\n\r\n\tinitialize: function (url, options) {\r\n\r\n\t\tthis._url = url;\r\n\r\n\t\tvar wmsParams = extend({}, this.defaultWmsParams);\r\n\r\n\t\t// all keys that are not TileLayer options go to WMS params\r\n\t\tfor (var i in options) {\r\n\t\t\tif (!(i in this.options)) {\r\n\t\t\t\twmsParams[i] = options[i];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\toptions = setOptions(this, options);\r\n\r\n\t\tvar realRetina = options.detectRetina && Browser.retina ? 2 : 1;\r\n\t\tvar tileSize = this.getTileSize();\r\n\t\twmsParams.width = tileSize.x * realRetina;\r\n\t\twmsParams.height = tileSize.y * realRetina;\r\n\r\n\t\tthis.wmsParams = wmsParams;\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\r\n\t\tthis._crs = this.options.crs || map.options.crs;\r\n\t\tthis._wmsVersion = parseFloat(this.wmsParams.version);\r\n\r\n\t\tvar projectionKey = this._wmsVersion >= 1.3 ? 'crs' : 'srs';\r\n\t\tthis.wmsParams[projectionKey] = this._crs.code;\r\n\r\n\t\tTileLayer.prototype.onAdd.call(this, map);\r\n\t},\r\n\r\n\tgetTileUrl: function (coords) {\r\n\r\n\t\tvar tileBounds = this._tileCoordsToNwSe(coords),\r\n\t\t crs = this._crs,\r\n\t\t bounds = toBounds(crs.project(tileBounds[0]), crs.project(tileBounds[1])),\r\n\t\t min = bounds.min,\r\n\t\t max = bounds.max,\r\n\t\t bbox = (this._wmsVersion >= 1.3 && this._crs === EPSG4326 ?\r\n\t\t [min.y, min.x, max.y, max.x] :\r\n\t\t [min.x, min.y, max.x, max.y]).join(','),\r\n\t\t url = TileLayer.prototype.getTileUrl.call(this, coords);\r\n\t\treturn url +\r\n\t\t\tgetParamString(this.wmsParams, url, this.options.uppercase) +\r\n\t\t\t(this.options.uppercase ? '&BBOX=' : '&bbox=') + bbox;\r\n\t},\r\n\r\n\t// @method setParams(params: Object, noRedraw?: Boolean): this\r\n\t// Merges an object with the new parameters and re-requests tiles on the current screen (unless `noRedraw` was set to true).\r\n\tsetParams: function (params, noRedraw) {\r\n\r\n\t\textend(this.wmsParams, params);\r\n\r\n\t\tif (!noRedraw) {\r\n\t\t\tthis.redraw();\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n});\r\n\r\n\r\n// @factory L.tileLayer.wms(baseUrl: String, options: TileLayer.WMS options)\r\n// Instantiates a WMS tile layer object given a base URL of the WMS service and a WMS parameters/options object.\r\nexport function tileLayerWMS(url, options) {\r\n\treturn new TileLayerWMS(url, options);\r\n}\r\n", "export {GridLayer, gridLayer} from './GridLayer';\nimport {TileLayer, tileLayer} from './TileLayer';\nimport {TileLayerWMS, tileLayerWMS} from './TileLayer.WMS';\nTileLayer.WMS = TileLayerWMS;\ntileLayer.wms = tileLayerWMS;\nexport {TileLayer, tileLayer};\n", "import {Layer} from '../Layer';\nimport * as DomUtil from '../../dom/DomUtil';\nimport * as Util from '../../core/Util';\nimport Browser from '../../core/Browser';\nimport {Bounds} from '../../geometry/Bounds';\n\n\n\n/*\n * @class Renderer\n * @inherits Layer\n * @aka L.Renderer\n *\n * Base class for vector renderer implementations (`SVG`, `Canvas`). Handles the\n * DOM container of the renderer, its bounds, and its zoom animation.\n *\n * A `Renderer` works as an implicit layer group for all `Path`s - the renderer\n * itself can be added or removed to the map. All paths use a renderer, which can\n * be implicit (the map will decide the type of renderer and use it automatically)\n * or explicit (using the [`renderer`](#path-renderer) option of the path).\n *\n * Do not use this class directly, use `SVG` and `Canvas` instead.\n *\n * @event update: Event\n * Fired when the renderer updates its bounds, center and zoom, for example when\n * its map has moved\n */\n\nexport var Renderer = Layer.extend({\n\n\t// @section\n\t// @aka Renderer options\n\toptions: {\n\t\t// @option padding: Number = 0.1\n\t\t// How much to extend the clip area around the map view (relative to its size)\n\t\t// e.g. 0.1 would be 10% of map view in each direction\n\t\tpadding: 0.1\n\t},\n\n\tinitialize: function (options) {\n\t\tUtil.setOptions(this, options);\n\t\tUtil.stamp(this);\n\t\tthis._layers = this._layers || {};\n\t},\n\n\tonAdd: function () {\n\t\tif (!this._container) {\n\t\t\tthis._initContainer(); // defined by renderer implementations\n\n\t\t\t// always keep transform-origin as 0 0\n\t\t\tDomUtil.addClass(this._container, 'leaflet-zoom-animated');\n\t\t}\n\n\t\tthis.getPane().appendChild(this._container);\n\t\tthis._update();\n\t\tthis.on('update', this._updatePaths, this);\n\t},\n\n\tonRemove: function () {\n\t\tthis.off('update', this._updatePaths, this);\n\t\tthis._destroyContainer();\n\t},\n\n\tgetEvents: function () {\n\t\tvar events = {\n\t\t\tviewreset: this._reset,\n\t\t\tzoom: this._onZoom,\n\t\t\tmoveend: this._update,\n\t\t\tzoomend: this._onZoomEnd\n\t\t};\n\t\tif (this._zoomAnimated) {\n\t\t\tevents.zoomanim = this._onAnimZoom;\n\t\t}\n\t\treturn events;\n\t},\n\n\t_onAnimZoom: function (ev) {\n\t\tthis._updateTransform(ev.center, ev.zoom);\n\t},\n\n\t_onZoom: function () {\n\t\tthis._updateTransform(this._map.getCenter(), this._map.getZoom());\n\t},\n\n\t_updateTransform: function (center, zoom) {\n\t\tvar scale = this._map.getZoomScale(zoom, this._zoom),\n\t\t viewHalf = this._map.getSize().multiplyBy(0.5 + this.options.padding),\n\t\t currentCenterPoint = this._map.project(this._center, zoom),\n\n\t\t topLeftOffset = viewHalf.multiplyBy(-scale).add(currentCenterPoint)\n\t\t\t\t .subtract(this._map._getNewPixelOrigin(center, zoom));\n\n\t\tif (Browser.any3d) {\n\t\t\tDomUtil.setTransform(this._container, topLeftOffset, scale);\n\t\t} else {\n\t\t\tDomUtil.setPosition(this._container, topLeftOffset);\n\t\t}\n\t},\n\n\t_reset: function () {\n\t\tthis._update();\n\t\tthis._updateTransform(this._center, this._zoom);\n\n\t\tfor (var id in this._layers) {\n\t\t\tthis._layers[id]._reset();\n\t\t}\n\t},\n\n\t_onZoomEnd: function () {\n\t\tfor (var id in this._layers) {\n\t\t\tthis._layers[id]._project();\n\t\t}\n\t},\n\n\t_updatePaths: function () {\n\t\tfor (var id in this._layers) {\n\t\t\tthis._layers[id]._update();\n\t\t}\n\t},\n\n\t_update: function () {\n\t\t// Update pixel bounds of renderer container (for positioning/sizing/clipping later)\n\t\t// Subclasses are responsible of firing the 'update' event.\n\t\tvar p = this.options.padding,\n\t\t size = this._map.getSize(),\n\t\t min = this._map.containerPointToLayerPoint(size.multiplyBy(-p)).round();\n\n\t\tthis._bounds = new Bounds(min, min.add(size.multiplyBy(1 + p * 2)).round());\n\n\t\tthis._center = this._map.getCenter();\n\t\tthis._zoom = this._map.getZoom();\n\t}\n});\n", "import {Renderer} from './Renderer';\nimport * as DomUtil from '../../dom/DomUtil';\nimport * as DomEvent from '../../dom/DomEvent';\nimport Browser from '../../core/Browser';\nimport * as Util from '../../core/Util';\nimport {Bounds} from '../../geometry/Bounds';\n\n/*\n * @class Canvas\n * @inherits Renderer\n * @aka L.Canvas\n *\n * Allows vector layers to be displayed with [`<canvas>`](https://developer.mozilla.org/docs/Web/API/Canvas_API).\n * Inherits `Renderer`.\n *\n * Due to [technical limitations](https://caniuse.com/canvas), Canvas is not\n * available in all web browsers, notably IE8, and overlapping geometries might\n * not display properly in some edge cases.\n *\n * @example\n *\n * Use Canvas by default for all paths in the map:\n *\n * ```js\n * var map = L.map('map', {\n * \trenderer: L.canvas()\n * });\n * ```\n *\n * Use a Canvas renderer with extra padding for specific vector geometries:\n *\n * ```js\n * var map = L.map('map');\n * var myRenderer = L.canvas({ padding: 0.5 });\n * var line = L.polyline( coordinates, { renderer: myRenderer } );\n * var circle = L.circle( center, { renderer: myRenderer } );\n * ```\n */\n\nexport var Canvas = Renderer.extend({\n\n\t// @section\n\t// @aka Canvas options\n\toptions: {\n\t\t// @option tolerance: Number = 0\n\t\t// How much to extend the click tolerance around a path/object on the map.\n\t\ttolerance: 0\n\t},\n\n\tgetEvents: function () {\n\t\tvar events = Renderer.prototype.getEvents.call(this);\n\t\tevents.viewprereset = this._onViewPreReset;\n\t\treturn events;\n\t},\n\n\t_onViewPreReset: function () {\n\t\t// Set a flag so that a viewprereset+moveend+viewreset only updates&redraws once\n\t\tthis._postponeUpdatePaths = true;\n\t},\n\n\tonAdd: function () {\n\t\tRenderer.prototype.onAdd.call(this);\n\n\t\t// Redraw vectors since canvas is cleared upon removal,\n\t\t// in case of removing the renderer itself from the map.\n\t\tthis._draw();\n\t},\n\n\t_initContainer: function () {\n\t\tvar container = this._container = document.createElement('canvas');\n\n\t\tDomEvent.on(container, 'mousemove', this._onMouseMove, this);\n\t\tDomEvent.on(container, 'click dblclick mousedown mouseup contextmenu', this._onClick, this);\n\t\tDomEvent.on(container, 'mouseout', this._handleMouseOut, this);\n\t\tcontainer['_leaflet_disable_events'] = true;\n\n\t\tthis._ctx = container.getContext('2d');\n\t},\n\n\t_destroyContainer: function () {\n\t\tUtil.cancelAnimFrame(this._redrawRequest);\n\t\tdelete this._ctx;\n\t\tDomUtil.remove(this._container);\n\t\tDomEvent.off(this._container);\n\t\tdelete this._container;\n\t},\n\n\t_updatePaths: function () {\n\t\tif (this._postponeUpdatePaths) { return; }\n\n\t\tvar layer;\n\t\tthis._redrawBounds = null;\n\t\tfor (var id in this._layers) {\n\t\t\tlayer = this._layers[id];\n\t\t\tlayer._update();\n\t\t}\n\t\tthis._redraw();\n\t},\n\n\t_update: function () {\n\t\tif (this._map._animatingZoom && this._bounds) { return; }\n\n\t\tRenderer.prototype._update.call(this);\n\n\t\tvar b = this._bounds,\n\t\t container = this._container,\n\t\t size = b.getSize(),\n\t\t m = Browser.retina ? 2 : 1;\n\n\t\tDomUtil.setPosition(container, b.min);\n\n\t\t// set canvas size (also clearing it); use double size on retina\n\t\tcontainer.width = m * size.x;\n\t\tcontainer.height = m * size.y;\n\t\tcontainer.style.width = size.x + 'px';\n\t\tcontainer.style.height = size.y + 'px';\n\n\t\tif (Browser.retina) {\n\t\t\tthis._ctx.scale(2, 2);\n\t\t}\n\n\t\t// translate so we use the same path coordinates after canvas element moves\n\t\tthis._ctx.translate(-b.min.x, -b.min.y);\n\n\t\t// Tell paths to redraw themselves\n\t\tthis.fire('update');\n\t},\n\n\t_reset: function () {\n\t\tRenderer.prototype._reset.call(this);\n\n\t\tif (this._postponeUpdatePaths) {\n\t\t\tthis._postponeUpdatePaths = false;\n\t\t\tthis._updatePaths();\n\t\t}\n\t},\n\n\t_initPath: function (layer) {\n\t\tthis._updateDashArray(layer);\n\t\tthis._layers[Util.stamp(layer)] = layer;\n\n\t\tvar order = layer._order = {\n\t\t\tlayer: layer,\n\t\t\tprev: this._drawLast,\n\t\t\tnext: null\n\t\t};\n\t\tif (this._drawLast) { this._drawLast.next = order; }\n\t\tthis._drawLast = order;\n\t\tthis._drawFirst = this._drawFirst || this._drawLast;\n\t},\n\n\t_addPath: function (layer) {\n\t\tthis._requestRedraw(layer);\n\t},\n\n\t_removePath: function (layer) {\n\t\tvar order = layer._order;\n\t\tvar next = order.next;\n\t\tvar prev = order.prev;\n\n\t\tif (next) {\n\t\t\tnext.prev = prev;\n\t\t} else {\n\t\t\tthis._drawLast = prev;\n\t\t}\n\t\tif (prev) {\n\t\t\tprev.next = next;\n\t\t} else {\n\t\t\tthis._drawFirst = next;\n\t\t}\n\n\t\tdelete layer._order;\n\n\t\tdelete this._layers[Util.stamp(layer)];\n\n\t\tthis._requestRedraw(layer);\n\t},\n\n\t_updatePath: function (layer) {\n\t\t// Redraw the union of the layer's old pixel\n\t\t// bounds and the new pixel bounds.\n\t\tthis._extendRedrawBounds(layer);\n\t\tlayer._project();\n\t\tlayer._update();\n\t\t// The redraw will extend the redraw bounds\n\t\t// with the new pixel bounds.\n\t\tthis._requestRedraw(layer);\n\t},\n\n\t_updateStyle: function (layer) {\n\t\tthis._updateDashArray(layer);\n\t\tthis._requestRedraw(layer);\n\t},\n\n\t_updateDashArray: function (layer) {\n\t\tif (typeof layer.options.dashArray === 'string') {\n\t\t\tvar parts = layer.options.dashArray.split(/[, ]+/),\n\t\t\t dashArray = [],\n\t\t\t dashValue,\n\t\t\t i;\n\t\t\tfor (i = 0; i < parts.length; i++) {\n\t\t\t\tdashValue = Number(parts[i]);\n\t\t\t\t// Ignore dash array containing invalid lengths\n\t\t\t\tif (isNaN(dashValue)) { return; }\n\t\t\t\tdashArray.push(dashValue);\n\t\t\t}\n\t\t\tlayer.options._dashArray = dashArray;\n\t\t} else {\n\t\t\tlayer.options._dashArray = layer.options.dashArray;\n\t\t}\n\t},\n\n\t_requestRedraw: function (layer) {\n\t\tif (!this._map) { return; }\n\n\t\tthis._extendRedrawBounds(layer);\n\t\tthis._redrawRequest = this._redrawRequest || Util.requestAnimFrame(this._redraw, this);\n\t},\n\n\t_extendRedrawBounds: function (layer) {\n\t\tif (layer._pxBounds) {\n\t\t\tvar padding = (layer.options.weight || 0) + 1;\n\t\t\tthis._redrawBounds = this._redrawBounds || new Bounds();\n\t\t\tthis._redrawBounds.extend(layer._pxBounds.min.subtract([padding, padding]));\n\t\t\tthis._redrawBounds.extend(layer._pxBounds.max.add([padding, padding]));\n\t\t}\n\t},\n\n\t_redraw: function () {\n\t\tthis._redrawRequest = null;\n\n\t\tif (this._redrawBounds) {\n\t\t\tthis._redrawBounds.min._floor();\n\t\t\tthis._redrawBounds.max._ceil();\n\t\t}\n\n\t\tthis._clear(); // clear layers in redraw bounds\n\t\tthis._draw(); // draw layers\n\n\t\tthis._redrawBounds = null;\n\t},\n\n\t_clear: function () {\n\t\tvar bounds = this._redrawBounds;\n\t\tif (bounds) {\n\t\t\tvar size = bounds.getSize();\n\t\t\tthis._ctx.clearRect(bounds.min.x, bounds.min.y, size.x, size.y);\n\t\t} else {\n\t\t\tthis._ctx.save();\n\t\t\tthis._ctx.setTransform(1, 0, 0, 1, 0, 0);\n\t\t\tthis._ctx.clearRect(0, 0, this._container.width, this._container.height);\n\t\t\tthis._ctx.restore();\n\t\t}\n\t},\n\n\t_draw: function () {\n\t\tvar layer, bounds = this._redrawBounds;\n\t\tthis._ctx.save();\n\t\tif (bounds) {\n\t\t\tvar size = bounds.getSize();\n\t\t\tthis._ctx.beginPath();\n\t\t\tthis._ctx.rect(bounds.min.x, bounds.min.y, size.x, size.y);\n\t\t\tthis._ctx.clip();\n\t\t}\n\n\t\tthis._drawing = true;\n\n\t\tfor (var order = this._drawFirst; order; order = order.next) {\n\t\t\tlayer = order.layer;\n\t\t\tif (!bounds || (layer._pxBounds && layer._pxBounds.intersects(bounds))) {\n\t\t\t\tlayer._updatePath();\n\t\t\t}\n\t\t}\n\n\t\tthis._drawing = false;\n\n\t\tthis._ctx.restore(); // Restore state before clipping.\n\t},\n\n\t_updatePoly: function (layer, closed) {\n\t\tif (!this._drawing) { return; }\n\n\t\tvar i, j, len2, p,\n\t\t parts = layer._parts,\n\t\t len = parts.length,\n\t\t ctx = this._ctx;\n\n\t\tif (!len) { return; }\n\n\t\tctx.beginPath();\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tfor (j = 0, len2 = parts[i].length; j < len2; j++) {\n\t\t\t\tp = parts[i][j];\n\t\t\t\tctx[j ? 'lineTo' : 'moveTo'](p.x, p.y);\n\t\t\t}\n\t\t\tif (closed) {\n\t\t\t\tctx.closePath();\n\t\t\t}\n\t\t}\n\n\t\tthis._fillStroke(ctx, layer);\n\n\t\t// TODO optimization: 1 fill/stroke for all features with equal style instead of 1 for each feature\n\t},\n\n\t_updateCircle: function (layer) {\n\n\t\tif (!this._drawing || layer._empty()) { return; }\n\n\t\tvar p = layer._point,\n\t\t ctx = this._ctx,\n\t\t r = Math.max(Math.round(layer._radius), 1),\n\t\t s = (Math.max(Math.round(layer._radiusY), 1) || r) / r;\n\n\t\tif (s !== 1) {\n\t\t\tctx.save();\n\t\t\tctx.scale(1, s);\n\t\t}\n\n\t\tctx.beginPath();\n\t\tctx.arc(p.x, p.y / s, r, 0, Math.PI * 2, false);\n\n\t\tif (s !== 1) {\n\t\t\tctx.restore();\n\t\t}\n\n\t\tthis._fillStroke(ctx, layer);\n\t},\n\n\t_fillStroke: function (ctx, layer) {\n\t\tvar options = layer.options;\n\n\t\tif (options.fill) {\n\t\t\tctx.globalAlpha = options.fillOpacity;\n\t\t\tctx.fillStyle = options.fillColor || options.color;\n\t\t\tctx.fill(options.fillRule || 'evenodd');\n\t\t}\n\n\t\tif (options.stroke && options.weight !== 0) {\n\t\t\tif (ctx.setLineDash) {\n\t\t\t\tctx.setLineDash(layer.options && layer.options._dashArray || []);\n\t\t\t}\n\t\t\tctx.globalAlpha = options.opacity;\n\t\t\tctx.lineWidth = options.weight;\n\t\t\tctx.strokeStyle = options.color;\n\t\t\tctx.lineCap = options.lineCap;\n\t\t\tctx.lineJoin = options.lineJoin;\n\t\t\tctx.stroke();\n\t\t}\n\t},\n\n\t// Canvas obviously doesn't have mouse events for individual drawn objects,\n\t// so we emulate that by calculating what's under the mouse on mousemove/click manually\n\n\t_onClick: function (e) {\n\t\tvar point = this._map.mouseEventToLayerPoint(e), layer, clickedLayer;\n\n\t\tfor (var order = this._drawFirst; order; order = order.next) {\n\t\t\tlayer = order.layer;\n\t\t\tif (layer.options.interactive && layer._containsPoint(point)) {\n\t\t\t\tif (!(e.type === 'click' || e.type === 'preclick') || !this._map._draggableMoved(layer)) {\n\t\t\t\t\tclickedLayer = layer;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis._fireEvent(clickedLayer ? [clickedLayer] : false, e);\n\t},\n\n\t_onMouseMove: function (e) {\n\t\tif (!this._map || this._map.dragging.moving() || this._map._animatingZoom) { return; }\n\n\t\tvar point = this._map.mouseEventToLayerPoint(e);\n\t\tthis._handleMouseHover(e, point);\n\t},\n\n\n\t_handleMouseOut: function (e) {\n\t\tvar layer = this._hoveredLayer;\n\t\tif (layer) {\n\t\t\t// if we're leaving the layer, fire mouseout\n\t\t\tDomUtil.removeClass(this._container, 'leaflet-interactive');\n\t\t\tthis._fireEvent([layer], e, 'mouseout');\n\t\t\tthis._hoveredLayer = null;\n\t\t\tthis._mouseHoverThrottled = false;\n\t\t}\n\t},\n\n\t_handleMouseHover: function (e, point) {\n\t\tif (this._mouseHoverThrottled) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar layer, candidateHoveredLayer;\n\n\t\tfor (var order = this._drawFirst; order; order = order.next) {\n\t\t\tlayer = order.layer;\n\t\t\tif (layer.options.interactive && layer._containsPoint(point)) {\n\t\t\t\tcandidateHoveredLayer = layer;\n\t\t\t}\n\t\t}\n\n\t\tif (candidateHoveredLayer !== this._hoveredLayer) {\n\t\t\tthis._handleMouseOut(e);\n\n\t\t\tif (candidateHoveredLayer) {\n\t\t\t\tDomUtil.addClass(this._container, 'leaflet-interactive'); // change cursor\n\t\t\t\tthis._fireEvent([candidateHoveredLayer], e, 'mouseover');\n\t\t\t\tthis._hoveredLayer = candidateHoveredLayer;\n\t\t\t}\n\t\t}\n\n\t\tthis._fireEvent(this._hoveredLayer ? [this._hoveredLayer] : false, e);\n\n\t\tthis._mouseHoverThrottled = true;\n\t\tsetTimeout(Util.bind(function () {\n\t\t\tthis._mouseHoverThrottled = false;\n\t\t}, this), 32);\n\t},\n\n\t_fireEvent: function (layers, e, type) {\n\t\tthis._map._fireDOMEvent(e, type || e.type, layers);\n\t},\n\n\t_bringToFront: function (layer) {\n\t\tvar order = layer._order;\n\n\t\tif (!order) { return; }\n\n\t\tvar next = order.next;\n\t\tvar prev = order.prev;\n\n\t\tif (next) {\n\t\t\tnext.prev = prev;\n\t\t} else {\n\t\t\t// Already last\n\t\t\treturn;\n\t\t}\n\t\tif (prev) {\n\t\t\tprev.next = next;\n\t\t} else if (next) {\n\t\t\t// Update first entry unless this is the\n\t\t\t// single entry\n\t\t\tthis._drawFirst = next;\n\t\t}\n\n\t\torder.prev = this._drawLast;\n\t\tthis._drawLast.next = order;\n\n\t\torder.next = null;\n\t\tthis._drawLast = order;\n\n\t\tthis._requestRedraw(layer);\n\t},\n\n\t_bringToBack: function (layer) {\n\t\tvar order = layer._order;\n\n\t\tif (!order) { return; }\n\n\t\tvar next = order.next;\n\t\tvar prev = order.prev;\n\n\t\tif (prev) {\n\t\t\tprev.next = next;\n\t\t} else {\n\t\t\t// Already first\n\t\t\treturn;\n\t\t}\n\t\tif (next) {\n\t\t\tnext.prev = prev;\n\t\t} else if (prev) {\n\t\t\t// Update last entry unless this is the\n\t\t\t// single entry\n\t\t\tthis._drawLast = prev;\n\t\t}\n\n\t\torder.prev = null;\n\n\t\torder.next = this._drawFirst;\n\t\tthis._drawFirst.prev = order;\n\t\tthis._drawFirst = order;\n\n\t\tthis._requestRedraw(layer);\n\t}\n});\n\n// @factory L.canvas(options?: Renderer options)\n// Creates a Canvas renderer with the given options.\nexport function canvas(options) {\n\treturn Browser.canvas ? new Canvas(options) : null;\n}\n", "import * as DomUtil from '../../dom/DomUtil';\nimport * as Util from '../../core/Util';\nimport {Renderer} from './Renderer';\n\n/*\n * Thanks to Dmitry Baranovsky and his Raphael library for inspiration!\n */\n\n\nexport var vmlCreate = (function () {\n\ttry {\n\t\tdocument.namespaces.add('lvml', 'urn:schemas-microsoft-com:vml');\n\t\treturn function (name) {\n\t\t\treturn document.createElement('<lvml:' + name + ' class=\"lvml\">');\n\t\t};\n\t} catch (e) {\n\t\t// Do not return fn from catch block so `e` can be garbage collected\n\t\t// See https://github.com/Leaflet/Leaflet/pull/7279\n\t}\n\treturn function (name) {\n\t\treturn document.createElement('<' + name + ' xmlns=\"urn:schemas-microsoft.com:vml\" class=\"lvml\">');\n\t};\n})();\n\n\n/*\n * @class SVG\n *\n *\n * VML was deprecated in 2012, which means VML functionality exists only for backwards compatibility\n * with old versions of Internet Explorer.\n */\n\n// mixin to redefine some SVG methods to handle VML syntax which is similar but with some differences\nexport var vmlMixin = {\n\n\t_initContainer: function () {\n\t\tthis._container = DomUtil.create('div', 'leaflet-vml-container');\n\t},\n\n\t_update: function () {\n\t\tif (this._map._animatingZoom) { return; }\n\t\tRenderer.prototype._update.call(this);\n\t\tthis.fire('update');\n\t},\n\n\t_initPath: function (layer) {\n\t\tvar container = layer._container = vmlCreate('shape');\n\n\t\tDomUtil.addClass(container, 'leaflet-vml-shape ' + (this.options.className || ''));\n\n\t\tcontainer.coordsize = '1 1';\n\n\t\tlayer._path = vmlCreate('path');\n\t\tcontainer.appendChild(layer._path);\n\n\t\tthis._updateStyle(layer);\n\t\tthis._layers[Util.stamp(layer)] = layer;\n\t},\n\n\t_addPath: function (layer) {\n\t\tvar container = layer._container;\n\t\tthis._container.appendChild(container);\n\n\t\tif (layer.options.interactive) {\n\t\t\tlayer.addInteractiveTarget(container);\n\t\t}\n\t},\n\n\t_removePath: function (layer) {\n\t\tvar container = layer._container;\n\t\tDomUtil.remove(container);\n\t\tlayer.removeInteractiveTarget(container);\n\t\tdelete this._layers[Util.stamp(layer)];\n\t},\n\n\t_updateStyle: function (layer) {\n\t\tvar stroke = layer._stroke,\n\t\t fill = layer._fill,\n\t\t options = layer.options,\n\t\t container = layer._container;\n\n\t\tcontainer.stroked = !!options.stroke;\n\t\tcontainer.filled = !!options.fill;\n\n\t\tif (options.stroke) {\n\t\t\tif (!stroke) {\n\t\t\t\tstroke = layer._stroke = vmlCreate('stroke');\n\t\t\t}\n\t\t\tcontainer.appendChild(stroke);\n\t\t\tstroke.weight = options.weight + 'px';\n\t\t\tstroke.color = options.color;\n\t\t\tstroke.opacity = options.opacity;\n\n\t\t\tif (options.dashArray) {\n\t\t\t\tstroke.dashStyle = Util.isArray(options.dashArray) ?\n\t\t\t\t options.dashArray.join(' ') :\n\t\t\t\t options.dashArray.replace(/( *, *)/g, ' ');\n\t\t\t} else {\n\t\t\t\tstroke.dashStyle = '';\n\t\t\t}\n\t\t\tstroke.endcap = options.lineCap.replace('butt', 'flat');\n\t\t\tstroke.joinstyle = options.lineJoin;\n\n\t\t} else if (stroke) {\n\t\t\tcontainer.removeChild(stroke);\n\t\t\tlayer._stroke = null;\n\t\t}\n\n\t\tif (options.fill) {\n\t\t\tif (!fill) {\n\t\t\t\tfill = layer._fill = vmlCreate('fill');\n\t\t\t}\n\t\t\tcontainer.appendChild(fill);\n\t\t\tfill.color = options.fillColor || options.color;\n\t\t\tfill.opacity = options.fillOpacity;\n\n\t\t} else if (fill) {\n\t\t\tcontainer.removeChild(fill);\n\t\t\tlayer._fill = null;\n\t\t}\n\t},\n\n\t_updateCircle: function (layer) {\n\t\tvar p = layer._point.round(),\n\t\t r = Math.round(layer._radius),\n\t\t r2 = Math.round(layer._radiusY || r);\n\n\t\tthis._setPath(layer, layer._empty() ? 'M0 0' :\n\t\t\t'AL ' + p.x + ',' + p.y + ' ' + r + ',' + r2 + ' 0,' + (65535 * 360));\n\t},\n\n\t_setPath: function (layer, path) {\n\t\tlayer._path.v = path;\n\t},\n\n\t_bringToFront: function (layer) {\n\t\tDomUtil.toFront(layer._container);\n\t},\n\n\t_bringToBack: function (layer) {\n\t\tDomUtil.toBack(layer._container);\n\t}\n};\n", "import {Renderer} from './Renderer';\nimport * as DomUtil from '../../dom/DomUtil';\nimport * as DomEvent from '../../dom/DomEvent';\nimport Browser from '../../core/Browser';\nimport {stamp} from '../../core/Util';\nimport {svgCreate, pointsToPath} from './SVG.Util';\nexport {pointsToPath};\nimport {vmlMixin, vmlCreate} from './SVG.VML';\n\nexport var create = Browser.vml ? vmlCreate : svgCreate;\n\n/*\n * @class SVG\n * @inherits Renderer\n * @aka L.SVG\n *\n * Allows vector layers to be displayed with [SVG](https://developer.mozilla.org/docs/Web/SVG).\n * Inherits `Renderer`.\n *\n * Due to [technical limitations](https://caniuse.com/svg), SVG is not\n * available in all web browsers, notably Android 2.x and 3.x.\n *\n * Although SVG is not available on IE7 and IE8, these browsers support\n * [VML](https://en.wikipedia.org/wiki/Vector_Markup_Language)\n * (a now deprecated technology), and the SVG renderer will fall back to VML in\n * this case.\n *\n * @example\n *\n * Use SVG by default for all paths in the map:\n *\n * ```js\n * var map = L.map('map', {\n * \trenderer: L.svg()\n * });\n * ```\n *\n * Use a SVG renderer with extra padding for specific vector geometries:\n *\n * ```js\n * var map = L.map('map');\n * var myRenderer = L.svg({ padding: 0.5 });\n * var line = L.polyline( coordinates, { renderer: myRenderer } );\n * var circle = L.circle( center, { renderer: myRenderer } );\n * ```\n */\n\nexport var SVG = Renderer.extend({\n\n\t_initContainer: function () {\n\t\tthis._container = create('svg');\n\n\t\t// makes it possible to click through svg root; we'll reset it back in individual paths\n\t\tthis._container.setAttribute('pointer-events', 'none');\n\n\t\tthis._rootGroup = create('g');\n\t\tthis._container.appendChild(this._rootGroup);\n\t},\n\n\t_destroyContainer: function () {\n\t\tDomUtil.remove(this._container);\n\t\tDomEvent.off(this._container);\n\t\tdelete this._container;\n\t\tdelete this._rootGroup;\n\t\tdelete this._svgSize;\n\t},\n\n\t_update: function () {\n\t\tif (this._map._animatingZoom && this._bounds) { return; }\n\n\t\tRenderer.prototype._update.call(this);\n\n\t\tvar b = this._bounds,\n\t\t size = b.getSize(),\n\t\t container = this._container;\n\n\t\t// set size of svg-container if changed\n\t\tif (!this._svgSize || !this._svgSize.equals(size)) {\n\t\t\tthis._svgSize = size;\n\t\t\tcontainer.setAttribute('width', size.x);\n\t\t\tcontainer.setAttribute('height', size.y);\n\t\t}\n\n\t\t// movement: update container viewBox so that we don't have to change coordinates of individual layers\n\t\tDomUtil.setPosition(container, b.min);\n\t\tcontainer.setAttribute('viewBox', [b.min.x, b.min.y, size.x, size.y].join(' '));\n\n\t\tthis.fire('update');\n\t},\n\n\t// methods below are called by vector layers implementations\n\n\t_initPath: function (layer) {\n\t\tvar path = layer._path = create('path');\n\n\t\t// @namespace Path\n\t\t// @option className: String = null\n\t\t// Custom class name set on an element. Only for SVG renderer.\n\t\tif (layer.options.className) {\n\t\t\tDomUtil.addClass(path, layer.options.className);\n\t\t}\n\n\t\tif (layer.options.interactive) {\n\t\t\tDomUtil.addClass(path, 'leaflet-interactive');\n\t\t}\n\n\t\tthis._updateStyle(layer);\n\t\tthis._layers[stamp(layer)] = layer;\n\t},\n\n\t_addPath: function (layer) {\n\t\tif (!this._rootGroup) { this._initContainer(); }\n\t\tthis._rootGroup.appendChild(layer._path);\n\t\tlayer.addInteractiveTarget(layer._path);\n\t},\n\n\t_removePath: function (layer) {\n\t\tDomUtil.remove(layer._path);\n\t\tlayer.removeInteractiveTarget(layer._path);\n\t\tdelete this._layers[stamp(layer)];\n\t},\n\n\t_updatePath: function (layer) {\n\t\tlayer._project();\n\t\tlayer._update();\n\t},\n\n\t_updateStyle: function (layer) {\n\t\tvar path = layer._path,\n\t\t options = layer.options;\n\n\t\tif (!path) { return; }\n\n\t\tif (options.stroke) {\n\t\t\tpath.setAttribute('stroke', options.color);\n\t\t\tpath.setAttribute('stroke-opacity', options.opacity);\n\t\t\tpath.setAttribute('stroke-width', options.weight);\n\t\t\tpath.setAttribute('stroke-linecap', options.lineCap);\n\t\t\tpath.setAttribute('stroke-linejoin', options.lineJoin);\n\n\t\t\tif (options.dashArray) {\n\t\t\t\tpath.setAttribute('stroke-dasharray', options.dashArray);\n\t\t\t} else {\n\t\t\t\tpath.removeAttribute('stroke-dasharray');\n\t\t\t}\n\n\t\t\tif (options.dashOffset) {\n\t\t\t\tpath.setAttribute('stroke-dashoffset', options.dashOffset);\n\t\t\t} else {\n\t\t\t\tpath.removeAttribute('stroke-dashoffset');\n\t\t\t}\n\t\t} else {\n\t\t\tpath.setAttribute('stroke', 'none');\n\t\t}\n\n\t\tif (options.fill) {\n\t\t\tpath.setAttribute('fill', options.fillColor || options.color);\n\t\t\tpath.setAttribute('fill-opacity', options.fillOpacity);\n\t\t\tpath.setAttribute('fill-rule', options.fillRule || 'evenodd');\n\t\t} else {\n\t\t\tpath.setAttribute('fill', 'none');\n\t\t}\n\t},\n\n\t_updatePoly: function (layer, closed) {\n\t\tthis._setPath(layer, pointsToPath(layer._parts, closed));\n\t},\n\n\t_updateCircle: function (layer) {\n\t\tvar p = layer._point,\n\t\t r = Math.max(Math.round(layer._radius), 1),\n\t\t r2 = Math.max(Math.round(layer._radiusY), 1) || r,\n\t\t arc = 'a' + r + ',' + r2 + ' 0 1,0 ';\n\n\t\t// drawing a circle with two half-arcs\n\t\tvar d = layer._empty() ? 'M0 0' :\n\t\t\t'M' + (p.x - r) + ',' + p.y +\n\t\t\tarc + (r * 2) + ',0 ' +\n\t\t\tarc + (-r * 2) + ',0 ';\n\n\t\tthis._setPath(layer, d);\n\t},\n\n\t_setPath: function (layer, path) {\n\t\tlayer._path.setAttribute('d', path);\n\t},\n\n\t// SVG does not have the concept of zIndex so we resort to changing the DOM order of elements\n\t_bringToFront: function (layer) {\n\t\tDomUtil.toFront(layer._path);\n\t},\n\n\t_bringToBack: function (layer) {\n\t\tDomUtil.toBack(layer._path);\n\t}\n});\n\nif (Browser.vml) {\n\tSVG.include(vmlMixin);\n}\n\n// @namespace SVG\n// @factory L.svg(options?: Renderer options)\n// Creates a SVG renderer with the given options.\nexport function svg(options) {\n\treturn Browser.svg || Browser.vml ? new SVG(options) : null;\n}\n", "import {Map} from '../../map/Map';\nimport {canvas} from './Canvas';\nimport {svg} from './SVG';\n\nMap.include({\n\t// @namespace Map; @method getRenderer(layer: Path): Renderer\n\t// Returns the instance of `Renderer` that should be used to render the given\n\t// `Path`. It will ensure that the `renderer` options of the map and paths\n\t// are respected, and that the renderers do exist on the map.\n\tgetRenderer: function (layer) {\n\t\t// @namespace Path; @option renderer: Renderer\n\t\t// Use this specific instance of `Renderer` for this path. Takes\n\t\t// precedence over the map's [default renderer](#map-renderer).\n\t\tvar renderer = layer.options.renderer || this._getPaneRenderer(layer.options.pane) || this.options.renderer || this._renderer;\n\n\t\tif (!renderer) {\n\t\t\trenderer = this._renderer = this._createRenderer();\n\t\t}\n\n\t\tif (!this.hasLayer(renderer)) {\n\t\t\tthis.addLayer(renderer);\n\t\t}\n\t\treturn renderer;\n\t},\n\n\t_getPaneRenderer: function (name) {\n\t\tif (name === 'overlayPane' || name === undefined) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar renderer = this._paneRenderers[name];\n\t\tif (renderer === undefined) {\n\t\t\trenderer = this._createRenderer({pane: name});\n\t\t\tthis._paneRenderers[name] = renderer;\n\t\t}\n\t\treturn renderer;\n\t},\n\n\t_createRenderer: function (options) {\n\t\t// @namespace Map; @option preferCanvas: Boolean = false\n\t\t// Whether `Path`s should be rendered on a `Canvas` renderer.\n\t\t// By default, all `Path`s are rendered in a `SVG` renderer.\n\t\treturn (this.options.preferCanvas && canvas(options)) || svg(options);\n\t}\n});\n", "import {Polygon} from './Polygon';\nimport {toLatLngBounds} from '../../geo/LatLngBounds';\n\n/*\n * L.Rectangle extends Polygon and creates a rectangle when passed a LatLngBounds object.\n */\n\n/*\n * @class Rectangle\n * @aka L.Rectangle\n * @inherits Polygon\n *\n * A class for drawing rectangle overlays on a map. Extends `Polygon`.\n *\n * @example\n *\n * ```js\n * // define rectangle geographical bounds\n * var bounds = [[54.559322, -5.767822], [56.1210604, -3.021240]];\n *\n * // create an orange rectangle\n * L.rectangle(bounds, {color: \"#ff7800\", weight: 1}).addTo(map);\n *\n * // zoom the map to the rectangle bounds\n * map.fitBounds(bounds);\n * ```\n *\n */\n\n\nexport var Rectangle = Polygon.extend({\n\tinitialize: function (latLngBounds, options) {\n\t\tPolygon.prototype.initialize.call(this, this._boundsToLatLngs(latLngBounds), options);\n\t},\n\n\t// @method setBounds(latLngBounds: LatLngBounds): this\n\t// Redraws the rectangle with the passed bounds.\n\tsetBounds: function (latLngBounds) {\n\t\treturn this.setLatLngs(this._boundsToLatLngs(latLngBounds));\n\t},\n\n\t_boundsToLatLngs: function (latLngBounds) {\n\t\tlatLngBounds = toLatLngBounds(latLngBounds);\n\t\treturn [\n\t\t\tlatLngBounds.getSouthWest(),\n\t\t\tlatLngBounds.getNorthWest(),\n\t\t\tlatLngBounds.getNorthEast(),\n\t\t\tlatLngBounds.getSouthEast()\n\t\t];\n\t}\n});\n\n\n// @factory L.rectangle(latLngBounds: LatLngBounds, options?: Polyline options)\nexport function rectangle(latLngBounds, options) {\n\treturn new Rectangle(latLngBounds, options);\n}\n", "export {Renderer} from './Renderer';\nexport {Canvas, canvas} from './Canvas';\nimport {SVG, create, pointsToPath, svg} from './SVG';\nSVG.create = create;\nSVG.pointsToPath = pointsToPath;\nexport {SVG, svg};\nimport './Renderer.getRenderer';\t// This is a bit of a hack, but needed because circular dependencies\n\nexport {Path} from './Path';\nexport {CircleMarker, circleMarker} from './CircleMarker';\nexport {Circle, circle} from './Circle';\nexport {Polyline, polyline} from './Polyline';\nexport {Polygon, polygon} from './Polygon';\nexport {Rectangle, rectangle} from './Rectangle';\n", "export {Layer} from './Layer';\nexport {LayerGroup, layerGroup} from './LayerGroup';\nexport {FeatureGroup, featureGroup} from './FeatureGroup';\nimport {GeoJSON, geoJSON, geoJson, geometryToLayer, coordsToLatLng, coordsToLatLngs, latLngToCoords, latLngsToCoords, getFeature, asFeature} from './GeoJSON';\nGeoJSON.geometryToLayer = geometryToLayer;\nGeoJSON.coordsToLatLng = coordsToLatLng;\nGeoJSON.coordsToLatLngs = coordsToLatLngs;\nGeoJSON.latLngToCoords = latLngToCoords;\nGeoJSON.latLngsToCoords = latLngsToCoords;\nGeoJSON.getFeature = getFeature;\nGeoJSON.asFeature = asFeature;\nexport {GeoJSON, geoJSON, geoJson};\n\nexport {ImageOverlay, imageOverlay} from './ImageOverlay';\nexport {VideoOverlay, videoOverlay} from './VideoOverlay';\nexport {SVGOverlay, svgOverlay} from './SVGOverlay';\n\nexport {DivOverlay} from './DivOverlay';\nexport {Popup, popup} from './Popup';\nexport {Tooltip, tooltip} from './Tooltip';\n\nexport * from './marker/index';\nexport * from './tile/index';\nexport * from './vector/index';\n", "import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\nimport * as Util from '../../core/Util';\nimport * as DomUtil from '../../dom/DomUtil';\nimport * as DomEvent from '../../dom/DomEvent';\nimport {LatLngBounds} from '../../geo/LatLngBounds';\nimport {Bounds} from '../../geometry/Bounds';\n\n/*\n * L.Handler.BoxZoom is used to add shift-drag zoom interaction to the map\n * (zoom to a selected bounding box), enabled by default.\n */\n\n// @namespace Map\n// @section Interaction Options\nMap.mergeOptions({\n\t// @option boxZoom: Boolean = true\n\t// Whether the map can be zoomed to a rectangular area specified by\n\t// dragging the mouse while pressing the shift key.\n\tboxZoom: true\n});\n\nexport var BoxZoom = Handler.extend({\n\tinitialize: function (map) {\n\t\tthis._map = map;\n\t\tthis._container = map._container;\n\t\tthis._pane = map._panes.overlayPane;\n\t\tthis._resetStateTimeout = 0;\n\t\tmap.on('unload', this._destroy, this);\n\t},\n\n\taddHooks: function () {\n\t\tDomEvent.on(this._container, 'mousedown', this._onMouseDown, this);\n\t},\n\n\tremoveHooks: function () {\n\t\tDomEvent.off(this._container, 'mousedown', this._onMouseDown, this);\n\t},\n\n\tmoved: function () {\n\t\treturn this._moved;\n\t},\n\n\t_destroy: function () {\n\t\tDomUtil.remove(this._pane);\n\t\tdelete this._pane;\n\t},\n\n\t_resetState: function () {\n\t\tthis._resetStateTimeout = 0;\n\t\tthis._moved = false;\n\t},\n\n\t_clearDeferredResetState: function () {\n\t\tif (this._resetStateTimeout !== 0) {\n\t\t\tclearTimeout(this._resetStateTimeout);\n\t\t\tthis._resetStateTimeout = 0;\n\t\t}\n\t},\n\n\t_onMouseDown: function (e) {\n\t\tif (!e.shiftKey || ((e.which !== 1) && (e.button !== 1))) { return false; }\n\n\t\t// Clear the deferred resetState if it hasn't executed yet, otherwise it\n\t\t// will interrupt the interaction and orphan a box element in the container.\n\t\tthis._clearDeferredResetState();\n\t\tthis._resetState();\n\n\t\tDomUtil.disableTextSelection();\n\t\tDomUtil.disableImageDrag();\n\n\t\tthis._startPoint = this._map.mouseEventToContainerPoint(e);\n\n\t\tDomEvent.on(document, {\n\t\t\tcontextmenu: DomEvent.stop,\n\t\t\tmousemove: this._onMouseMove,\n\t\t\tmouseup: this._onMouseUp,\n\t\t\tkeydown: this._onKeyDown\n\t\t}, this);\n\t},\n\n\t_onMouseMove: function (e) {\n\t\tif (!this._moved) {\n\t\t\tthis._moved = true;\n\n\t\t\tthis._box = DomUtil.create('div', 'leaflet-zoom-box', this._container);\n\t\t\tDomUtil.addClass(this._container, 'leaflet-crosshair');\n\n\t\t\tthis._map.fire('boxzoomstart');\n\t\t}\n\n\t\tthis._point = this._map.mouseEventToContainerPoint(e);\n\n\t\tvar bounds = new Bounds(this._point, this._startPoint),\n\t\t size = bounds.getSize();\n\n\t\tDomUtil.setPosition(this._box, bounds.min);\n\n\t\tthis._box.style.width = size.x + 'px';\n\t\tthis._box.style.height = size.y + 'px';\n\t},\n\n\t_finish: function () {\n\t\tif (this._moved) {\n\t\t\tDomUtil.remove(this._box);\n\t\t\tDomUtil.removeClass(this._container, 'leaflet-crosshair');\n\t\t}\n\n\t\tDomUtil.enableTextSelection();\n\t\tDomUtil.enableImageDrag();\n\n\t\tDomEvent.off(document, {\n\t\t\tcontextmenu: DomEvent.stop,\n\t\t\tmousemove: this._onMouseMove,\n\t\t\tmouseup: this._onMouseUp,\n\t\t\tkeydown: this._onKeyDown\n\t\t}, this);\n\t},\n\n\t_onMouseUp: function (e) {\n\t\tif ((e.which !== 1) && (e.button !== 1)) { return; }\n\n\t\tthis._finish();\n\n\t\tif (!this._moved) { return; }\n\t\t// Postpone to next JS tick so internal click event handling\n\t\t// still see it as \"moved\".\n\t\tthis._clearDeferredResetState();\n\t\tthis._resetStateTimeout = setTimeout(Util.bind(this._resetState, this), 0);\n\n\t\tvar bounds = new LatLngBounds(\n\t\t this._map.containerPointToLatLng(this._startPoint),\n\t\t this._map.containerPointToLatLng(this._point));\n\n\t\tthis._map\n\t\t\t.fitBounds(bounds)\n\t\t\t.fire('boxzoomend', {boxZoomBounds: bounds});\n\t},\n\n\t_onKeyDown: function (e) {\n\t\tif (e.keyCode === 27) {\n\t\t\tthis._finish();\n\t\t\tthis._clearDeferredResetState();\n\t\t\tthis._resetState();\n\t\t}\n\t}\n});\n\n// @section Handlers\n// @property boxZoom: Handler\n// Box (shift-drag with mouse) zoom handler.\nMap.addInitHook('addHandler', 'boxZoom', BoxZoom);\n", "import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\n\n/*\n * L.Handler.DoubleClickZoom is used to handle double-click zoom on the map, enabled by default.\n */\n\n// @namespace Map\n// @section Interaction Options\n\nMap.mergeOptions({\n\t// @option doubleClickZoom: Boolean|String = true\n\t// Whether the map can be zoomed in by double clicking on it and\n\t// zoomed out by double clicking while holding shift. If passed\n\t// `'center'`, double-click zoom will zoom to the center of the\n\t// view regardless of where the mouse was.\n\tdoubleClickZoom: true\n});\n\nexport var DoubleClickZoom = Handler.extend({\n\taddHooks: function () {\n\t\tthis._map.on('dblclick', this._onDoubleClick, this);\n\t},\n\n\tremoveHooks: function () {\n\t\tthis._map.off('dblclick', this._onDoubleClick, this);\n\t},\n\n\t_onDoubleClick: function (e) {\n\t\tvar map = this._map,\n\t\t oldZoom = map.getZoom(),\n\t\t delta = map.options.zoomDelta,\n\t\t zoom = e.originalEvent.shiftKey ? oldZoom - delta : oldZoom + delta;\n\n\t\tif (map.options.doubleClickZoom === 'center') {\n\t\t\tmap.setZoom(zoom);\n\t\t} else {\n\t\t\tmap.setZoomAround(e.containerPoint, zoom);\n\t\t}\n\t}\n});\n\n// @section Handlers\n//\n// Map properties include interaction handlers that allow you to control\n// interaction behavior in runtime, enabling or disabling certain features such\n// as dragging or touch zoom (see `Handler` methods). For example:\n//\n// ```js\n// map.doubleClickZoom.disable();\n// ```\n//\n// @property doubleClickZoom: Handler\n// Double click zoom handler.\nMap.addInitHook('addHandler', 'doubleClickZoom', DoubleClickZoom);\n", "import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\nimport {Draggable} from '../../dom/Draggable';\nimport * as Util from '../../core/Util';\nimport * as DomUtil from '../../dom/DomUtil';\nimport {toLatLngBounds as latLngBounds} from '../../geo/LatLngBounds';\nimport {toBounds} from '../../geometry/Bounds';\n\n/*\n * L.Handler.MapDrag is used to make the map draggable (with panning inertia), enabled by default.\n */\n\n// @namespace Map\n// @section Interaction Options\nMap.mergeOptions({\n\t// @option dragging: Boolean = true\n\t// Whether the map is draggable with mouse/touch or not.\n\tdragging: true,\n\n\t// @section Panning Inertia Options\n\t// @option inertia: Boolean = *\n\t// If enabled, panning of the map will have an inertia effect where\n\t// the map builds momentum while dragging and continues moving in\n\t// the same direction for some time. Feels especially nice on touch\n\t// devices. Enabled by default.\n\tinertia: true,\n\n\t// @option inertiaDeceleration: Number = 3000\n\t// The rate with which the inertial movement slows down, in pixels/second².\n\tinertiaDeceleration: 3400, // px/s^2\n\n\t// @option inertiaMaxSpeed: Number = Infinity\n\t// Max speed of the inertial movement, in pixels/second.\n\tinertiaMaxSpeed: Infinity, // px/s\n\n\t// @option easeLinearity: Number = 0.2\n\teaseLinearity: 0.2,\n\n\t// TODO refactor, move to CRS\n\t// @option worldCopyJump: Boolean = false\n\t// With this option enabled, the map tracks when you pan to another \"copy\"\n\t// of the world and seamlessly jumps to the original one so that all overlays\n\t// like markers and vector layers are still visible.\n\tworldCopyJump: false,\n\n\t// @option maxBoundsViscosity: Number = 0.0\n\t// If `maxBounds` is set, this option will control how solid the bounds\n\t// are when dragging the map around. The default value of `0.0` allows the\n\t// user to drag outside the bounds at normal speed, higher values will\n\t// slow down map dragging outside bounds, and `1.0` makes the bounds fully\n\t// solid, preventing the user from dragging outside the bounds.\n\tmaxBoundsViscosity: 0.0\n});\n\nexport var Drag = Handler.extend({\n\taddHooks: function () {\n\t\tif (!this._draggable) {\n\t\t\tvar map = this._map;\n\n\t\t\tthis._draggable = new Draggable(map._mapPane, map._container);\n\n\t\t\tthis._draggable.on({\n\t\t\t\tdragstart: this._onDragStart,\n\t\t\t\tdrag: this._onDrag,\n\t\t\t\tdragend: this._onDragEnd\n\t\t\t}, this);\n\n\t\t\tthis._draggable.on('predrag', this._onPreDragLimit, this);\n\t\t\tif (map.options.worldCopyJump) {\n\t\t\t\tthis._draggable.on('predrag', this._onPreDragWrap, this);\n\t\t\t\tmap.on('zoomend', this._onZoomEnd, this);\n\n\t\t\t\tmap.whenReady(this._onZoomEnd, this);\n\t\t\t}\n\t\t}\n\t\tDomUtil.addClass(this._map._container, 'leaflet-grab leaflet-touch-drag');\n\t\tthis._draggable.enable();\n\t\tthis._positions = [];\n\t\tthis._times = [];\n\t},\n\n\tremoveHooks: function () {\n\t\tDomUtil.removeClass(this._map._container, 'leaflet-grab');\n\t\tDomUtil.removeClass(this._map._container, 'leaflet-touch-drag');\n\t\tthis._draggable.disable();\n\t},\n\n\tmoved: function () {\n\t\treturn this._draggable && this._draggable._moved;\n\t},\n\n\tmoving: function () {\n\t\treturn this._draggable && this._draggable._moving;\n\t},\n\n\t_onDragStart: function () {\n\t\tvar map = this._map;\n\n\t\tmap._stop();\n\t\tif (this._map.options.maxBounds && this._map.options.maxBoundsViscosity) {\n\t\t\tvar bounds = latLngBounds(this._map.options.maxBounds);\n\n\t\t\tthis._offsetLimit = toBounds(\n\t\t\t\tthis._map.latLngToContainerPoint(bounds.getNorthWest()).multiplyBy(-1),\n\t\t\t\tthis._map.latLngToContainerPoint(bounds.getSouthEast()).multiplyBy(-1)\n\t\t\t\t\t.add(this._map.getSize()));\n\n\t\t\tthis._viscosity = Math.min(1.0, Math.max(0.0, this._map.options.maxBoundsViscosity));\n\t\t} else {\n\t\t\tthis._offsetLimit = null;\n\t\t}\n\n\t\tmap\n\t\t .fire('movestart')\n\t\t .fire('dragstart');\n\n\t\tif (map.options.inertia) {\n\t\t\tthis._positions = [];\n\t\t\tthis._times = [];\n\t\t}\n\t},\n\n\t_onDrag: function (e) {\n\t\tif (this._map.options.inertia) {\n\t\t\tvar time = this._lastTime = +new Date(),\n\t\t\t pos = this._lastPos = this._draggable._absPos || this._draggable._newPos;\n\n\t\t\tthis._positions.push(pos);\n\t\t\tthis._times.push(time);\n\n\t\t\tthis._prunePositions(time);\n\t\t}\n\n\t\tthis._map\n\t\t .fire('move', e)\n\t\t .fire('drag', e);\n\t},\n\n\t_prunePositions: function (time) {\n\t\twhile (this._positions.length > 1 && time - this._times[0] > 50) {\n\t\t\tthis._positions.shift();\n\t\t\tthis._times.shift();\n\t\t}\n\t},\n\n\t_onZoomEnd: function () {\n\t\tvar pxCenter = this._map.getSize().divideBy(2),\n\t\t pxWorldCenter = this._map.latLngToLayerPoint([0, 0]);\n\n\t\tthis._initialWorldOffset = pxWorldCenter.subtract(pxCenter).x;\n\t\tthis._worldWidth = this._map.getPixelWorldBounds().getSize().x;\n\t},\n\n\t_viscousLimit: function (value, threshold) {\n\t\treturn value - (value - threshold) * this._viscosity;\n\t},\n\n\t_onPreDragLimit: function () {\n\t\tif (!this._viscosity || !this._offsetLimit) { return; }\n\n\t\tvar offset = this._draggable._newPos.subtract(this._draggable._startPos);\n\n\t\tvar limit = this._offsetLimit;\n\t\tif (offset.x < limit.min.x) { offset.x = this._viscousLimit(offset.x, limit.min.x); }\n\t\tif (offset.y < limit.min.y) { offset.y = this._viscousLimit(offset.y, limit.min.y); }\n\t\tif (offset.x > limit.max.x) { offset.x = this._viscousLimit(offset.x, limit.max.x); }\n\t\tif (offset.y > limit.max.y) { offset.y = this._viscousLimit(offset.y, limit.max.y); }\n\n\t\tthis._draggable._newPos = this._draggable._startPos.add(offset);\n\t},\n\n\t_onPreDragWrap: function () {\n\t\t// TODO refactor to be able to adjust map pane position after zoom\n\t\tvar worldWidth = this._worldWidth,\n\t\t halfWidth = Math.round(worldWidth / 2),\n\t\t dx = this._initialWorldOffset,\n\t\t x = this._draggable._newPos.x,\n\t\t newX1 = (x - halfWidth + dx) % worldWidth + halfWidth - dx,\n\t\t newX2 = (x + halfWidth + dx) % worldWidth - halfWidth - dx,\n\t\t newX = Math.abs(newX1 + dx) < Math.abs(newX2 + dx) ? newX1 : newX2;\n\n\t\tthis._draggable._absPos = this._draggable._newPos.clone();\n\t\tthis._draggable._newPos.x = newX;\n\t},\n\n\t_onDragEnd: function (e) {\n\t\tvar map = this._map,\n\t\t options = map.options,\n\n\t\t noInertia = !options.inertia || e.noInertia || this._times.length < 2;\n\n\t\tmap.fire('dragend', e);\n\n\t\tif (noInertia) {\n\t\t\tmap.fire('moveend');\n\n\t\t} else {\n\t\t\tthis._prunePositions(+new Date());\n\n\t\t\tvar direction = this._lastPos.subtract(this._positions[0]),\n\t\t\t duration = (this._lastTime - this._times[0]) / 1000,\n\t\t\t ease = options.easeLinearity,\n\n\t\t\t speedVector = direction.multiplyBy(ease / duration),\n\t\t\t speed = speedVector.distanceTo([0, 0]),\n\n\t\t\t limitedSpeed = Math.min(options.inertiaMaxSpeed, speed),\n\t\t\t limitedSpeedVector = speedVector.multiplyBy(limitedSpeed / speed),\n\n\t\t\t decelerationDuration = limitedSpeed / (options.inertiaDeceleration * ease),\n\t\t\t offset = limitedSpeedVector.multiplyBy(-decelerationDuration / 2).round();\n\n\t\t\tif (!offset.x && !offset.y) {\n\t\t\t\tmap.fire('moveend');\n\n\t\t\t} else {\n\t\t\t\toffset = map._limitOffset(offset, map.options.maxBounds);\n\n\t\t\t\tUtil.requestAnimFrame(function () {\n\t\t\t\t\tmap.panBy(offset, {\n\t\t\t\t\t\tduration: decelerationDuration,\n\t\t\t\t\t\teaseLinearity: ease,\n\t\t\t\t\t\tnoMoveStart: true,\n\t\t\t\t\t\tanimate: true\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n});\n\n// @section Handlers\n// @property dragging: Handler\n// Map dragging handler (by both mouse and touch).\nMap.addInitHook('addHandler', 'dragging', Drag);\n", "import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\nimport {on, off, stop} from '../../dom/DomEvent';\nimport {toPoint} from '../../geometry/Point';\n\n\n/*\n * L.Map.Keyboard is handling keyboard interaction with the map, enabled by default.\n */\n\n// @namespace Map\n// @section Keyboard Navigation Options\nMap.mergeOptions({\n\t// @option keyboard: Boolean = true\n\t// Makes the map focusable and allows users to navigate the map with keyboard\n\t// arrows and `+`/`-` keys.\n\tkeyboard: true,\n\n\t// @option keyboardPanDelta: Number = 80\n\t// Amount of pixels to pan when pressing an arrow key.\n\tkeyboardPanDelta: 80\n});\n\nexport var Keyboard = Handler.extend({\n\n\tkeyCodes: {\n\t\tleft: [37],\n\t\tright: [39],\n\t\tdown: [40],\n\t\tup: [38],\n\t\tzoomIn: [187, 107, 61, 171],\n\t\tzoomOut: [189, 109, 54, 173]\n\t},\n\n\tinitialize: function (map) {\n\t\tthis._map = map;\n\n\t\tthis._setPanDelta(map.options.keyboardPanDelta);\n\t\tthis._setZoomDelta(map.options.zoomDelta);\n\t},\n\n\taddHooks: function () {\n\t\tvar container = this._map._container;\n\n\t\t// make the container focusable by tabbing\n\t\tif (container.tabIndex <= 0) {\n\t\t\tcontainer.tabIndex = '0';\n\t\t}\n\n\t\ton(container, {\n\t\t\tfocus: this._onFocus,\n\t\t\tblur: this._onBlur,\n\t\t\tmousedown: this._onMouseDown\n\t\t}, this);\n\n\t\tthis._map.on({\n\t\t\tfocus: this._addHooks,\n\t\t\tblur: this._removeHooks\n\t\t}, this);\n\t},\n\n\tremoveHooks: function () {\n\t\tthis._removeHooks();\n\n\t\toff(this._map._container, {\n\t\t\tfocus: this._onFocus,\n\t\t\tblur: this._onBlur,\n\t\t\tmousedown: this._onMouseDown\n\t\t}, this);\n\n\t\tthis._map.off({\n\t\t\tfocus: this._addHooks,\n\t\t\tblur: this._removeHooks\n\t\t}, this);\n\t},\n\n\t_onMouseDown: function () {\n\t\tif (this._focused) { return; }\n\n\t\tvar body = document.body,\n\t\t docEl = document.documentElement,\n\t\t top = body.scrollTop || docEl.scrollTop,\n\t\t left = body.scrollLeft || docEl.scrollLeft;\n\n\t\tthis._map._container.focus();\n\n\t\twindow.scrollTo(left, top);\n\t},\n\n\t_onFocus: function () {\n\t\tthis._focused = true;\n\t\tthis._map.fire('focus');\n\t},\n\n\t_onBlur: function () {\n\t\tthis._focused = false;\n\t\tthis._map.fire('blur');\n\t},\n\n\t_setPanDelta: function (panDelta) {\n\t\tvar keys = this._panKeys = {},\n\t\t codes = this.keyCodes,\n\t\t i, len;\n\n\t\tfor (i = 0, len = codes.left.length; i < len; i++) {\n\t\t\tkeys[codes.left[i]] = [-1 * panDelta, 0];\n\t\t}\n\t\tfor (i = 0, len = codes.right.length; i < len; i++) {\n\t\t\tkeys[codes.right[i]] = [panDelta, 0];\n\t\t}\n\t\tfor (i = 0, len = codes.down.length; i < len; i++) {\n\t\t\tkeys[codes.down[i]] = [0, panDelta];\n\t\t}\n\t\tfor (i = 0, len = codes.up.length; i < len; i++) {\n\t\t\tkeys[codes.up[i]] = [0, -1 * panDelta];\n\t\t}\n\t},\n\n\t_setZoomDelta: function (zoomDelta) {\n\t\tvar keys = this._zoomKeys = {},\n\t\t codes = this.keyCodes,\n\t\t i, len;\n\n\t\tfor (i = 0, len = codes.zoomIn.length; i < len; i++) {\n\t\t\tkeys[codes.zoomIn[i]] = zoomDelta;\n\t\t}\n\t\tfor (i = 0, len = codes.zoomOut.length; i < len; i++) {\n\t\t\tkeys[codes.zoomOut[i]] = -zoomDelta;\n\t\t}\n\t},\n\n\t_addHooks: function () {\n\t\ton(document, 'keydown', this._onKeyDown, this);\n\t},\n\n\t_removeHooks: function () {\n\t\toff(document, 'keydown', this._onKeyDown, this);\n\t},\n\n\t_onKeyDown: function (e) {\n\t\tif (e.altKey || e.ctrlKey || e.metaKey) { return; }\n\n\t\tvar key = e.keyCode,\n\t\t map = this._map,\n\t\t offset;\n\n\t\tif (key in this._panKeys) {\n\t\t\tif (!map._panAnim || !map._panAnim._inProgress) {\n\t\t\t\toffset = this._panKeys[key];\n\t\t\t\tif (e.shiftKey) {\n\t\t\t\t\toffset = toPoint(offset).multiplyBy(3);\n\t\t\t\t}\n\n\t\t\t\tif (map.options.maxBounds) {\n\t\t\t\t\toffset = map._limitOffset(toPoint(offset), map.options.maxBounds);\n\t\t\t\t}\n\n\t\t\t\tif (map.options.worldCopyJump) {\n\t\t\t\t\tvar newLatLng = map.wrapLatLng(map.unproject(map.project(map.getCenter()).add(offset)));\n\t\t\t\t\tmap.panTo(newLatLng);\n\t\t\t\t} else {\n\t\t\t\t\tmap.panBy(offset);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (key in this._zoomKeys) {\n\t\t\tmap.setZoom(map.getZoom() + (e.shiftKey ? 3 : 1) * this._zoomKeys[key]);\n\n\t\t} else if (key === 27 && map._popup && map._popup.options.closeOnEscapeKey) {\n\t\t\tmap.closePopup();\n\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\n\t\tstop(e);\n\t}\n});\n\n// @section Handlers\n// @section Handlers\n// @property keyboard: Handler\n// Keyboard navigation handler.\nMap.addInitHook('addHandler', 'keyboard', Keyboard);\n", "import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\nimport * as DomEvent from '../../dom/DomEvent';\nimport * as Util from '../../core/Util';\n\n/*\n * L.Handler.ScrollWheelZoom is used by L.Map to enable mouse scroll wheel zoom on the map.\n */\n\n// @namespace Map\n// @section Interaction Options\nMap.mergeOptions({\n\t// @section Mouse wheel options\n\t// @option scrollWheelZoom: Boolean|String = true\n\t// Whether the map can be zoomed by using the mouse wheel. If passed `'center'`,\n\t// it will zoom to the center of the view regardless of where the mouse was.\n\tscrollWheelZoom: true,\n\n\t// @option wheelDebounceTime: Number = 40\n\t// Limits the rate at which a wheel can fire (in milliseconds). By default\n\t// user can't zoom via wheel more often than once per 40 ms.\n\twheelDebounceTime: 40,\n\n\t// @option wheelPxPerZoomLevel: Number = 60\n\t// How many scroll pixels (as reported by [L.DomEvent.getWheelDelta](#domevent-getwheeldelta))\n\t// mean a change of one full zoom level. Smaller values will make wheel-zooming\n\t// faster (and vice versa).\n\twheelPxPerZoomLevel: 60\n});\n\nexport var ScrollWheelZoom = Handler.extend({\n\taddHooks: function () {\n\t\tDomEvent.on(this._map._container, 'wheel', this._onWheelScroll, this);\n\n\t\tthis._delta = 0;\n\t},\n\n\tremoveHooks: function () {\n\t\tDomEvent.off(this._map._container, 'wheel', this._onWheelScroll, this);\n\t},\n\n\t_onWheelScroll: function (e) {\n\t\tvar delta = DomEvent.getWheelDelta(e);\n\n\t\tvar debounce = this._map.options.wheelDebounceTime;\n\n\t\tthis._delta += delta;\n\t\tthis._lastMousePos = this._map.mouseEventToContainerPoint(e);\n\n\t\tif (!this._startTime) {\n\t\t\tthis._startTime = +new Date();\n\t\t}\n\n\t\tvar left = Math.max(debounce - (+new Date() - this._startTime), 0);\n\n\t\tclearTimeout(this._timer);\n\t\tthis._timer = setTimeout(Util.bind(this._performZoom, this), left);\n\n\t\tDomEvent.stop(e);\n\t},\n\n\t_performZoom: function () {\n\t\tvar map = this._map,\n\t\t zoom = map.getZoom(),\n\t\t snap = this._map.options.zoomSnap || 0;\n\n\t\tmap._stop(); // stop panning and fly animations if any\n\n\t\t// map the delta with a sigmoid function to -4..4 range leaning on -1..1\n\t\tvar d2 = this._delta / (this._map.options.wheelPxPerZoomLevel * 4),\n\t\t d3 = 4 * Math.log(2 / (1 + Math.exp(-Math.abs(d2)))) / Math.LN2,\n\t\t d4 = snap ? Math.ceil(d3 / snap) * snap : d3,\n\t\t delta = map._limitZoom(zoom + (this._delta > 0 ? d4 : -d4)) - zoom;\n\n\t\tthis._delta = 0;\n\t\tthis._startTime = null;\n\n\t\tif (!delta) { return; }\n\n\t\tif (map.options.scrollWheelZoom === 'center') {\n\t\t\tmap.setZoom(zoom + delta);\n\t\t} else {\n\t\t\tmap.setZoomAround(this._lastMousePos, zoom + delta);\n\t\t}\n\t}\n});\n\n// @section Handlers\n// @property scrollWheelZoom: Handler\n// Scroll wheel zoom handler.\nMap.addInitHook('addHandler', 'scrollWheelZoom', ScrollWheelZoom);\n", "import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\nimport * as DomEvent from '../../dom/DomEvent';\nimport {Point} from '../../geometry/Point';\nimport * as Util from '../../core/Util';\nimport Browser from '../../core/Browser';\n\n/*\n * L.Map.TapHold is used to simulate `contextmenu` event on long hold,\n * which otherwise is not fired by mobile Safari.\n */\n\nvar tapHoldDelay = 600;\n\n// @namespace Map\n// @section Interaction Options\nMap.mergeOptions({\n\t// @section Touch interaction options\n\t// @option tapHold: Boolean\n\t// Enables simulation of `contextmenu` event, default is `true` for mobile Safari.\n\ttapHold: Browser.touchNative && Browser.safari && Browser.mobile,\n\n\t// @option tapTolerance: Number = 15\n\t// The max number of pixels a user can shift his finger during touch\n\t// for it to be considered a valid tap.\n\ttapTolerance: 15\n});\n\nexport var TapHold = Handler.extend({\n\taddHooks: function () {\n\t\tDomEvent.on(this._map._container, 'touchstart', this._onDown, this);\n\t},\n\n\tremoveHooks: function () {\n\t\tDomEvent.off(this._map._container, 'touchstart', this._onDown, this);\n\t},\n\n\t_onDown: function (e) {\n\t\tclearTimeout(this._holdTimeout);\n\t\tif (e.touches.length !== 1) { return; }\n\n\t\tvar first = e.touches[0];\n\t\tthis._startPos = this._newPos = new Point(first.clientX, first.clientY);\n\n\t\tthis._holdTimeout = setTimeout(Util.bind(function () {\n\t\t\tthis._cancel();\n\t\t\tif (!this._isTapValid()) { return; }\n\n\t\t\t// prevent simulated mouse events https://w3c.github.io/touch-events/#mouse-events\n\t\t\tDomEvent.on(document, 'touchend', DomEvent.preventDefault);\n\t\t\tDomEvent.on(document, 'touchend touchcancel', this._cancelClickPrevent);\n\t\t\tthis._simulateEvent('contextmenu', first);\n\t\t}, this), tapHoldDelay);\n\n\t\tDomEvent.on(document, 'touchend touchcancel contextmenu', this._cancel, this);\n\t\tDomEvent.on(document, 'touchmove', this._onMove, this);\n\t},\n\n\t_cancelClickPrevent: function cancelClickPrevent() {\n\t\tDomEvent.off(document, 'touchend', DomEvent.preventDefault);\n\t\tDomEvent.off(document, 'touchend touchcancel', cancelClickPrevent);\n\t},\n\n\t_cancel: function () {\n\t\tclearTimeout(this._holdTimeout);\n\t\tDomEvent.off(document, 'touchend touchcancel contextmenu', this._cancel, this);\n\t\tDomEvent.off(document, 'touchmove', this._onMove, this);\n\t},\n\n\t_onMove: function (e) {\n\t\tvar first = e.touches[0];\n\t\tthis._newPos = new Point(first.clientX, first.clientY);\n\t},\n\n\t_isTapValid: function () {\n\t\treturn this._newPos.distanceTo(this._startPos) <= this._map.options.tapTolerance;\n\t},\n\n\t_simulateEvent: function (type, e) {\n\t\tvar simulatedEvent = new MouseEvent(type, {\n\t\t\tbubbles: true,\n\t\t\tcancelable: true,\n\t\t\tview: window,\n\t\t\t// detail: 1,\n\t\t\tscreenX: e.screenX,\n\t\t\tscreenY: e.screenY,\n\t\t\tclientX: e.clientX,\n\t\t\tclientY: e.clientY,\n\t\t\t// button: 2,\n\t\t\t// buttons: 2\n\t\t});\n\n\t\tsimulatedEvent._simulated = true;\n\n\t\te.target.dispatchEvent(simulatedEvent);\n\t}\n});\n\n// @section Handlers\n// @property tapHold: Handler\n// Long tap handler to simulate `contextmenu` event (useful in mobile Safari).\nMap.addInitHook('addHandler', 'tapHold', TapHold);\n", "import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\nimport * as DomEvent from '../../dom/DomEvent';\nimport * as Util from '../../core/Util';\nimport * as DomUtil from '../../dom/DomUtil';\nimport Browser from '../../core/Browser';\n\n/*\n * L.Handler.TouchZoom is used by L.Map to add pinch zoom on supported mobile browsers.\n */\n\n// @namespace Map\n// @section Interaction Options\nMap.mergeOptions({\n\t// @section Touch interaction options\n\t// @option touchZoom: Boolean|String = *\n\t// Whether the map can be zoomed by touch-dragging with two fingers. If\n\t// passed `'center'`, it will zoom to the center of the view regardless of\n\t// where the touch events (fingers) were. Enabled for touch-capable web\n\t// browsers.\n\ttouchZoom: Browser.touch,\n\n\t// @option bounceAtZoomLimits: Boolean = true\n\t// Set it to false if you don't want the map to zoom beyond min/max zoom\n\t// and then bounce back when pinch-zooming.\n\tbounceAtZoomLimits: true\n});\n\nexport var TouchZoom = Handler.extend({\n\taddHooks: function () {\n\t\tDomUtil.addClass(this._map._container, 'leaflet-touch-zoom');\n\t\tDomEvent.on(this._map._container, 'touchstart', this._onTouchStart, this);\n\t},\n\n\tremoveHooks: function () {\n\t\tDomUtil.removeClass(this._map._container, 'leaflet-touch-zoom');\n\t\tDomEvent.off(this._map._container, 'touchstart', this._onTouchStart, this);\n\t},\n\n\t_onTouchStart: function (e) {\n\t\tvar map = this._map;\n\t\tif (!e.touches || e.touches.length !== 2 || map._animatingZoom || this._zooming) { return; }\n\n\t\tvar p1 = map.mouseEventToContainerPoint(e.touches[0]),\n\t\t p2 = map.mouseEventToContainerPoint(e.touches[1]);\n\n\t\tthis._centerPoint = map.getSize()._divideBy(2);\n\t\tthis._startLatLng = map.containerPointToLatLng(this._centerPoint);\n\t\tif (map.options.touchZoom !== 'center') {\n\t\t\tthis._pinchStartLatLng = map.containerPointToLatLng(p1.add(p2)._divideBy(2));\n\t\t}\n\n\t\tthis._startDist = p1.distanceTo(p2);\n\t\tthis._startZoom = map.getZoom();\n\n\t\tthis._moved = false;\n\t\tthis._zooming = true;\n\n\t\tmap._stop();\n\n\t\tDomEvent.on(document, 'touchmove', this._onTouchMove, this);\n\t\tDomEvent.on(document, 'touchend touchcancel', this._onTouchEnd, this);\n\n\t\tDomEvent.preventDefault(e);\n\t},\n\n\t_onTouchMove: function (e) {\n\t\tif (!e.touches || e.touches.length !== 2 || !this._zooming) { return; }\n\n\t\tvar map = this._map,\n\t\t p1 = map.mouseEventToContainerPoint(e.touches[0]),\n\t\t p2 = map.mouseEventToContainerPoint(e.touches[1]),\n\t\t scale = p1.distanceTo(p2) / this._startDist;\n\n\t\tthis._zoom = map.getScaleZoom(scale, this._startZoom);\n\n\t\tif (!map.options.bounceAtZoomLimits && (\n\t\t\t(this._zoom < map.getMinZoom() && scale < 1) ||\n\t\t\t(this._zoom > map.getMaxZoom() && scale > 1))) {\n\t\t\tthis._zoom = map._limitZoom(this._zoom);\n\t\t}\n\n\t\tif (map.options.touchZoom === 'center') {\n\t\t\tthis._center = this._startLatLng;\n\t\t\tif (scale === 1) { return; }\n\t\t} else {\n\t\t\t// Get delta from pinch to center, so centerLatLng is delta applied to initial pinchLatLng\n\t\t\tvar delta = p1._add(p2)._divideBy(2)._subtract(this._centerPoint);\n\t\t\tif (scale === 1 && delta.x === 0 && delta.y === 0) { return; }\n\t\t\tthis._center = map.unproject(map.project(this._pinchStartLatLng, this._zoom).subtract(delta), this._zoom);\n\t\t}\n\n\t\tif (!this._moved) {\n\t\t\tmap._moveStart(true, false);\n\t\t\tthis._moved = true;\n\t\t}\n\n\t\tUtil.cancelAnimFrame(this._animRequest);\n\n\t\tvar moveFn = Util.bind(map._move, map, this._center, this._zoom, {pinch: true, round: false}, undefined);\n\t\tthis._animRequest = Util.requestAnimFrame(moveFn, this, true);\n\n\t\tDomEvent.preventDefault(e);\n\t},\n\n\t_onTouchEnd: function () {\n\t\tif (!this._moved || !this._zooming) {\n\t\t\tthis._zooming = false;\n\t\t\treturn;\n\t\t}\n\n\t\tthis._zooming = false;\n\t\tUtil.cancelAnimFrame(this._animRequest);\n\n\t\tDomEvent.off(document, 'touchmove', this._onTouchMove, this);\n\t\tDomEvent.off(document, 'touchend touchcancel', this._onTouchEnd, this);\n\n\t\t// Pinch updates GridLayers' levels only when zoomSnap is off, so zoomSnap becomes noUpdate.\n\t\tif (this._map.options.zoomAnimation) {\n\t\t\tthis._map._animateZoom(this._center, this._map._limitZoom(this._zoom), true, this._map.options.zoomSnap);\n\t\t} else {\n\t\t\tthis._map._resetView(this._center, this._map._limitZoom(this._zoom));\n\t\t}\n\t}\n});\n\n// @section Handlers\n// @property touchZoom: Handler\n// Touch zoom handler.\nMap.addInitHook('addHandler', 'touchZoom', TouchZoom);\n", "import {Map} from './Map';\nimport {BoxZoom} from './handler/Map.BoxZoom';\nMap.BoxZoom = BoxZoom;\nimport {DoubleClickZoom} from './handler/Map.DoubleClickZoom';\nMap.DoubleClickZoom = DoubleClickZoom;\nimport {Drag} from './handler/Map.Drag';\nMap.Drag = Drag;\nimport {Keyboard} from './handler/Map.Keyboard';\nMap.Keyboard = Keyboard;\nimport {ScrollWheelZoom} from './handler/Map.ScrollWheelZoom';\nMap.ScrollWheelZoom = ScrollWheelZoom;\nimport {TapHold} from './handler/Map.TapHold';\nMap.TapHold = TapHold;\nimport {TouchZoom} from './handler/Map.TouchZoom';\nMap.TouchZoom = TouchZoom;\n\nexport {Map, createMap as map} from './Map';\n", "(function (root, factory) {\n\tif (typeof define === 'function' && define.amd) {\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine(['leaflet'], factory);\n\t} else if (typeof modules === 'object' && module.exports) {\n\t\t// define a Common JS module that relies on 'leaflet'\n\t\tmodule.exports = factory(require('leaflet'));\n\t} else {\n\t\t// Assume Leaflet is loaded into global object L already\n\t\tfactory(L);\n\t}\n}(this, function (L) {\n\t'use strict';\n\n\tL.TileLayer.Provider = L.TileLayer.extend({\n\t\tinitialize: function (arg, options) {\n\t\t\tvar providers = L.TileLayer.Provider.providers;\n\n\t\t\tvar parts = arg.split('.');\n\n\t\t\tvar providerName = parts[0];\n\t\t\tvar variantName = parts[1];\n\n\t\t\tif (!providers[providerName]) {\n\t\t\t\tthrow 'No such provider (' + providerName + ')';\n\t\t\t}\n\n\t\t\tvar provider = {\n\t\t\t\turl: providers[providerName].url,\n\t\t\t\toptions: providers[providerName].options\n\t\t\t};\n\n\t\t\t// overwrite values in provider from variant.\n\t\t\tif (variantName && 'variants' in providers[providerName]) {\n\t\t\t\tif (!(variantName in providers[providerName].variants)) {\n\t\t\t\t\tthrow 'No such variant of ' + providerName + ' (' + variantName + ')';\n\t\t\t\t}\n\t\t\t\tvar variant = providers[providerName].variants[variantName];\n\t\t\t\tvar variantOptions;\n\t\t\t\tif (typeof variant === 'string') {\n\t\t\t\t\tvariantOptions = {\n\t\t\t\t\t\tvariant: variant\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tvariantOptions = variant.options;\n\t\t\t\t}\n\t\t\t\tprovider = {\n\t\t\t\t\turl: variant.url || provider.url,\n\t\t\t\t\toptions: L.Util.extend({}, provider.options, variantOptions)\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// replace attribution placeholders with their values from toplevel provider attribution,\n\t\t\t// recursively\n\t\t\tvar attributionReplacer = function (attr) {\n\t\t\t\tif (attr.indexOf('{attribution.') === -1) {\n\t\t\t\t\treturn attr;\n\t\t\t\t}\n\t\t\t\treturn attr.replace(/\\{attribution.(\\w*)\\}/g,\n\t\t\t\t\tfunction (match, attributionName) {\n\t\t\t\t\t\treturn attributionReplacer(providers[attributionName].options.attribution);\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t};\n\t\t\tprovider.options.attribution = attributionReplacer(provider.options.attribution);\n\n\t\t\t// Compute final options combining provider options with any user overrides\n\t\t\tvar layerOpts = L.Util.extend({}, provider.options, options);\n\t\t\tL.TileLayer.prototype.initialize.call(this, provider.url, layerOpts);\n\t\t}\n\t});\n\n\t/**\n\t * Definition of providers.\n\t * see http://leafletjs.com/reference.html#tilelayer for options in the options map.\n\t */\n\n\tL.TileLayer.Provider.providers = {\n\t\tOpenStreetMap: {\n\t\t\turl: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',\n\t\t\toptions: {\n\t\t\t\tmaxZoom: 19,\n\t\t\t\tattribution:\n\t\t\t\t\t'© <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors'\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tMapnik: {},\n\t\t\t\tDE: {\n\t\t\t\t\turl: 'https://{s}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png',\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tmaxZoom: 18\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tCH: {\n\t\t\t\t\turl: 'https://tile.osm.ch/switzerland/{z}/{x}/{y}.png',\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tmaxZoom: 18,\n\t\t\t\t\t\tbounds: [[45, 5], [48, 11]]\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tFrance: {\n\t\t\t\t\turl: 'https://{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png',\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tmaxZoom: 20,\n\t\t\t\t\t\tattribution: '© OpenStreetMap France | {attribution.OpenStreetMap}'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tHOT: {\n\t\t\t\t\turl: 'https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png',\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tattribution:\n\t\t\t\t\t\t\t'{attribution.OpenStreetMap}, ' +\n\t\t\t\t\t\t\t'Tiles style by <a href=\"https://www.hotosm.org/\" target=\"_blank\">Humanitarian OpenStreetMap Team</a> ' +\n\t\t\t\t\t\t\t'hosted by <a href=\"https://openstreetmap.fr/\" target=\"_blank\">OpenStreetMap France</a>'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tBZH: {\n\t\t\t\t\turl: 'https://tile.openstreetmap.bzh/br/{z}/{x}/{y}.png',\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tattribution: '{attribution.OpenStreetMap}, Tiles courtesy of <a href=\"http://www.openstreetmap.bzh/\" target=\"_blank\">Breton OpenStreetMap Team</a>',\n\t\t\t\t\t\tbounds: [[46.2, -5.5], [50, 0.7]]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tOpenSeaMap: {\n\t\t\turl: 'https://tiles.openseamap.org/seamark/{z}/{x}/{y}.png',\n\t\t\toptions: {\n\t\t\t\tattribution: 'Map data: © <a href=\"http://www.openseamap.org\">OpenSeaMap</a> contributors'\n\t\t\t}\n\t\t},\n\t\tOPNVKarte: {\n\t\t\turl: 'https://tileserver.memomaps.de/tilegen/{z}/{x}/{y}.png',\n\t\t\toptions: {\n\t\t\t\tmaxZoom: 18,\n\t\t\t\tattribution: 'Map <a href=\"https://memomaps.de/\">memomaps.de</a> <a href=\"http://creativecommons.org/licenses/by-sa/2.0/\">CC-BY-SA</a>, map data {attribution.OpenStreetMap}'\n\t\t\t}\n\t\t},\n\t\tOpenTopoMap: {\n\t\t\turl: 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png',\n\t\t\toptions: {\n\t\t\t\tmaxZoom: 17,\n\t\t\t\tattribution: 'Map data: {attribution.OpenStreetMap}, <a href=\"http://viewfinderpanoramas.org\">SRTM</a> | Map style: © <a href=\"https://opentopomap.org\">OpenTopoMap</a> (<a href=\"https://creativecommons.org/licenses/by-sa/3.0/\">CC-BY-SA</a>)'\n\t\t\t}\n\t\t},\n\t\tOpenRailwayMap: {\n\t\t\turl: 'https://{s}.tiles.openrailwaymap.org/standard/{z}/{x}/{y}.png',\n\t\t\toptions: {\n\t\t\t\tmaxZoom: 19,\n\t\t\t\tattribution: 'Map data: {attribution.OpenStreetMap} | Map style: © <a href=\"https://www.OpenRailwayMap.org\">OpenRailwayMap</a> (<a href=\"https://creativecommons.org/licenses/by-sa/3.0/\">CC-BY-SA</a>)'\n\t\t\t}\n\t\t},\n\t\tOpenFireMap: {\n\t\t\turl: 'http://openfiremap.org/hytiles/{z}/{x}/{y}.png',\n\t\t\toptions: {\n\t\t\t\tmaxZoom: 19,\n\t\t\t\tattribution: 'Map data: {attribution.OpenStreetMap} | Map style: © <a href=\"http://www.openfiremap.org\">OpenFireMap</a> (<a href=\"https://creativecommons.org/licenses/by-sa/3.0/\">CC-BY-SA</a>)'\n\t\t\t}\n\t\t},\n\t\tSafeCast: {\n\t\t\turl: 'https://s3.amazonaws.com/te512.safecast.org/{z}/{x}/{y}.png',\n\t\t\toptions: {\n\t\t\t\tmaxZoom: 16,\n\t\t\t\tattribution: 'Map data: {attribution.OpenStreetMap} | Map style: © <a href=\"https://blog.safecast.org/about/\">SafeCast</a> (<a href=\"https://creativecommons.org/licenses/by-sa/3.0/\">CC-BY-SA</a>)'\n\t\t\t}\n\t\t},\n\t\tStadia: {\n\t\t\turl: 'https://tiles.stadiamaps.com/tiles/alidade_smooth/{z}/{x}/{y}{r}.png',\n\t\t\toptions: {\n\t\t\t\tmaxZoom: 20,\n\t\t\t\tattribution: '© <a href=\"https://stadiamaps.com/\">Stadia Maps</a>, © <a href=\"https://openmaptiles.org/\">OpenMapTiles</a> © <a href=\"http://openstreetmap.org\">OpenStreetMap</a> contributors'\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tAlidadeSmooth: {\n\t\t\t\t\turl: 'https://tiles.stadiamaps.com/tiles/alidade_smooth/{z}/{x}/{y}{r}.png'\n\t\t\t\t},\n\t\t\t\tAlidadeSmoothDark: {\n\t\t\t\t\turl: 'https://tiles.stadiamaps.com/tiles/alidade_smooth_dark/{z}/{x}/{y}{r}.png'\n\t\t\t\t},\n\t\t\t\tOSMBright: {\n\t\t\t\t\turl: 'https://tiles.stadiamaps.com/tiles/osm_bright/{z}/{x}/{y}{r}.png'\n\t\t\t\t},\n\t\t\t\tOutdoors: {\n\t\t\t\t\turl: 'https://tiles.stadiamaps.com/tiles/outdoors/{z}/{x}/{y}{r}.png'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tThunderforest: {\n\t\t\turl: 'https://{s}.tile.thunderforest.com/{variant}/{z}/{x}/{y}.png?apikey={apikey}',\n\t\t\toptions: {\n\t\t\t\tattribution:\n\t\t\t\t\t'© <a href=\"http://www.thunderforest.com/\">Thunderforest</a>, {attribution.OpenStreetMap}',\n\t\t\t\tvariant: 'cycle',\n\t\t\t\tapikey: '<insert your api key here>',\n\t\t\t\tmaxZoom: 22\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tOpenCycleMap: 'cycle',\n\t\t\t\tTransport: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'transport'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tTransportDark: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'transport-dark'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tSpinalMap: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'spinal-map'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tLandscape: 'landscape',\n\t\t\t\tOutdoors: 'outdoors',\n\t\t\t\tPioneer: 'pioneer',\n\t\t\t\tMobileAtlas: 'mobile-atlas',\n\t\t\t\tNeighbourhood: 'neighbourhood'\n\t\t\t}\n\t\t},\n\t\tCyclOSM: {\n\t\t\turl: 'https://{s}.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png',\n\t\t\toptions: {\n\t\t\t\tmaxZoom: 20,\n\t\t\t\tattribution: '<a href=\"https://github.com/cyclosm/cyclosm-cartocss-style/releases\" title=\"CyclOSM - Open Bicycle render\">CyclOSM</a> | Map data: {attribution.OpenStreetMap}'\n\t\t\t}\n\t\t},\n\t\tHydda: {\n\t\t\turl: 'https://{s}.tile.openstreetmap.se/hydda/{variant}/{z}/{x}/{y}.png',\n\t\t\toptions: {\n\t\t\t\tmaxZoom: 20,\n\t\t\t\tvariant: 'full',\n\t\t\t\tattribution: 'Tiles courtesy of <a href=\"http://openstreetmap.se/\" target=\"_blank\">OpenStreetMap Sweden</a> — Map data {attribution.OpenStreetMap}'\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tFull: 'full',\n\t\t\t\tBase: 'base',\n\t\t\t\tRoadsAndLabels: 'roads_and_labels'\n\t\t\t}\n\t\t},\n\t\tJawg: {\n\t\t\turl: 'https://{s}.tile.jawg.io/{variant}/{z}/{x}/{y}{r}.png?access-token={accessToken}',\n\t\t\toptions: {\n\t\t\t\tattribution:\n\t\t\t\t\t'<a href=\"http://jawg.io\" title=\"Tiles Courtesy of Jawg Maps\" target=\"_blank\">© <b>Jawg</b>Maps</a> ' +\n\t\t\t\t\t'{attribution.OpenStreetMap}',\n\t\t\t\tminZoom: 0,\n\t\t\t\tmaxZoom: 22,\n\t\t\t\tsubdomains: 'abcd',\n\t\t\t\tvariant: 'jawg-terrain',\n\t\t\t\t// Get your own Jawg access token here : https://www.jawg.io/lab/\n\t\t\t\t// NB : this is a demonstration key that comes with no guarantee\n\t\t\t\taccessToken: '<insert your access token here>',\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tStreets: 'jawg-streets',\n\t\t\t\tTerrain: 'jawg-terrain',\n\t\t\t\tSunny: 'jawg-sunny',\n\t\t\t\tDark: 'jawg-dark',\n\t\t\t\tLight: 'jawg-light',\n\t\t\t\tMatrix: 'jawg-matrix'\n\t\t\t}\n\t\t},\n\t\tMapBox: {\n\t\t\turl: 'https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}{r}?access_token={accessToken}',\n\t\t\toptions: {\n\t\t\t\tattribution:\n\t\t\t\t\t'© <a href=\"https://www.mapbox.com/about/maps/\" target=\"_blank\">Mapbox</a> ' +\n\t\t\t\t\t'{attribution.OpenStreetMap} ' +\n\t\t\t\t\t'<a href=\"https://www.mapbox.com/map-feedback/\" target=\"_blank\">Improve this map</a>',\n\t\t\t\ttileSize: 512,\n\t\t\t\tmaxZoom: 18,\n\t\t\t\tzoomOffset: -1,\n\t\t\t\tid: 'mapbox/streets-v11',\n\t\t\t\taccessToken: '<insert your access token here>',\n\t\t\t}\n\t\t},\n\t\tMapTiler: {\n\t\t\turl: 'https://api.maptiler.com/maps/{variant}/{z}/{x}/{y}{r}.{ext}?key={key}',\n\t\t\toptions: {\n\t\t\t\tattribution:\n\t\t\t\t\t'<a href=\"https://www.maptiler.com/copyright/\" target=\"_blank\">© MapTiler</a> <a href=\"https://www.openstreetmap.org/copyright\" target=\"_blank\">© OpenStreetMap contributors</a>',\n\t\t\t\tvariant: 'streets',\n\t\t\t\text: 'png',\n\t\t\t\tkey: '<insert your MapTiler Cloud API key here>',\n\t\t\t\ttileSize: 512,\n\t\t\t\tzoomOffset: -1,\n\t\t\t\tminZoom: 0,\n\t\t\t\tmaxZoom: 21\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tStreets: 'streets',\n\t\t\t\tBasic: 'basic',\n\t\t\t\tBright: 'bright',\n\t\t\t\tPastel: 'pastel',\n\t\t\t\tPositron: 'positron',\n\t\t\t\tHybrid: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'hybrid',\n\t\t\t\t\t\text: 'jpg'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tToner: 'toner',\n\t\t\t\tTopo: 'topo',\n\t\t\t\tVoyager: 'voyager'\n\t\t\t}\n\t\t},\n\t\tStamen: {\n\t\t\turl: 'https://stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}{r}.{ext}',\n\t\t\toptions: {\n\t\t\t\tattribution:\n\t\t\t\t\t'Map tiles by <a href=\"http://stamen.com\">Stamen Design</a>, ' +\n\t\t\t\t\t'<a href=\"http://creativecommons.org/licenses/by/3.0\">CC BY 3.0</a> — ' +\n\t\t\t\t\t'Map data {attribution.OpenStreetMap}',\n\t\t\t\tsubdomains: 'abcd',\n\t\t\t\tminZoom: 0,\n\t\t\t\tmaxZoom: 20,\n\t\t\t\tvariant: 'toner',\n\t\t\t\text: 'png'\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tToner: 'toner',\n\t\t\t\tTonerBackground: 'toner-background',\n\t\t\t\tTonerHybrid: 'toner-hybrid',\n\t\t\t\tTonerLines: 'toner-lines',\n\t\t\t\tTonerLabels: 'toner-labels',\n\t\t\t\tTonerLite: 'toner-lite',\n\t\t\t\tWatercolor: {\n\t\t\t\t\turl: 'https://stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}.{ext}',\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'watercolor',\n\t\t\t\t\t\text: 'jpg',\n\t\t\t\t\t\tminZoom: 1,\n\t\t\t\t\t\tmaxZoom: 16\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tTerrain: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'terrain',\n\t\t\t\t\t\tminZoom: 0,\n\t\t\t\t\t\tmaxZoom: 18\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tTerrainBackground: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'terrain-background',\n\t\t\t\t\t\tminZoom: 0,\n\t\t\t\t\t\tmaxZoom: 18\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tTerrainLabels: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'terrain-labels',\n\t\t\t\t\t\tminZoom: 0,\n\t\t\t\t\t\tmaxZoom: 18\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tTopOSMRelief: {\n\t\t\t\t\turl: 'https://stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}.{ext}',\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'toposm-color-relief',\n\t\t\t\t\t\text: 'jpg',\n\t\t\t\t\t\tbounds: [[22, -132], [51, -56]]\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tTopOSMFeatures: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'toposm-features',\n\t\t\t\t\t\tbounds: [[22, -132], [51, -56]],\n\t\t\t\t\t\topacity: 0.9\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tTomTom: {\n\t\t\turl: 'https://{s}.api.tomtom.com/map/1/tile/{variant}/{style}/{z}/{x}/{y}.{ext}?key={apikey}',\n\t\t\toptions: {\n\t\t\t\tvariant: 'basic',\n\t\t\t\tmaxZoom: 22,\n\t\t\t\tattribution:\n\t\t\t\t\t'<a href=\"https://tomtom.com\" target=\"_blank\">© 1992 - ' + new Date().getFullYear() + ' TomTom.</a> ',\n\t\t\t\tsubdomains: 'abcd',\n\t\t\t\tstyle: 'main',\n\t\t\t\text: 'png',\n\t\t\t\tapikey: '<insert your API key here>',\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tBasic: 'basic',\n\t\t\t\tHybrid: 'hybrid',\n\t\t\t\tLabels: 'labels'\n\t\t\t}\n\t\t},\n\t\tEsri: {\n\t\t\turl: 'https://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}',\n\t\t\toptions: {\n\t\t\t\tvariant: 'World_Street_Map',\n\t\t\t\tattribution: 'Tiles © Esri'\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tWorldStreetMap: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tattribution:\n\t\t\t\t\t\t\t'{attribution.Esri} — ' +\n\t\t\t\t\t\t\t'Source: Esri, DeLorme, NAVTEQ, USGS, Intermap, iPC, NRCAN, Esri Japan, METI, Esri China (Hong Kong), Esri (Thailand), TomTom, 2012'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tDeLorme: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'Specialty/DeLorme_World_Base_Map',\n\t\t\t\t\t\tminZoom: 1,\n\t\t\t\t\t\tmaxZoom: 11,\n\t\t\t\t\t\tattribution: '{attribution.Esri} — Copyright: ©2012 DeLorme'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tWorldTopoMap: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'World_Topo_Map',\n\t\t\t\t\t\tattribution:\n\t\t\t\t\t\t\t'{attribution.Esri} — ' +\n\t\t\t\t\t\t\t'Esri, DeLorme, NAVTEQ, TomTom, Intermap, iPC, USGS, FAO, NPS, NRCAN, GeoBase, Kadaster NL, Ordnance Survey, Esri Japan, METI, Esri China (Hong Kong), and the GIS User Community'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tWorldImagery: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'World_Imagery',\n\t\t\t\t\t\tattribution:\n\t\t\t\t\t\t\t'{attribution.Esri} — ' +\n\t\t\t\t\t\t\t'Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tWorldTerrain: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'World_Terrain_Base',\n\t\t\t\t\t\tmaxZoom: 13,\n\t\t\t\t\t\tattribution:\n\t\t\t\t\t\t\t'{attribution.Esri} — ' +\n\t\t\t\t\t\t\t'Source: USGS, Esri, TANA, DeLorme, and NPS'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tWorldShadedRelief: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'World_Shaded_Relief',\n\t\t\t\t\t\tmaxZoom: 13,\n\t\t\t\t\t\tattribution: '{attribution.Esri} — Source: Esri'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tWorldPhysical: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'World_Physical_Map',\n\t\t\t\t\t\tmaxZoom: 8,\n\t\t\t\t\t\tattribution: '{attribution.Esri} — Source: US National Park Service'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tOceanBasemap: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'Ocean_Basemap',\n\t\t\t\t\t\tmaxZoom: 13,\n\t\t\t\t\t\tattribution: '{attribution.Esri} — Sources: GEBCO, NOAA, CHS, OSU, UNH, CSUMB, National Geographic, DeLorme, NAVTEQ, and Esri'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tNatGeoWorldMap: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'NatGeo_World_Map',\n\t\t\t\t\t\tmaxZoom: 16,\n\t\t\t\t\t\tattribution: '{attribution.Esri} — National Geographic, Esri, DeLorme, NAVTEQ, UNEP-WCMC, USGS, NASA, ESA, METI, NRCAN, GEBCO, NOAA, iPC'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tWorldGrayCanvas: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'Canvas/World_Light_Gray_Base',\n\t\t\t\t\t\tmaxZoom: 16,\n\t\t\t\t\t\tattribution: '{attribution.Esri} — Esri, DeLorme, NAVTEQ'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tOpenWeatherMap: {\n\t\t\turl: 'http://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png?appid={apiKey}',\n\t\t\toptions: {\n\t\t\t\tmaxZoom: 19,\n\t\t\t\tattribution: 'Map data © <a href=\"http://openweathermap.org\">OpenWeatherMap</a>',\n\t\t\t\tapiKey: '<insert your api key here>',\n\t\t\t\topacity: 0.5\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tClouds: 'clouds',\n\t\t\t\tCloudsClassic: 'clouds_cls',\n\t\t\t\tPrecipitation: 'precipitation',\n\t\t\t\tPrecipitationClassic: 'precipitation_cls',\n\t\t\t\tRain: 'rain',\n\t\t\t\tRainClassic: 'rain_cls',\n\t\t\t\tPressure: 'pressure',\n\t\t\t\tPressureContour: 'pressure_cntr',\n\t\t\t\tWind: 'wind',\n\t\t\t\tTemperature: 'temp',\n\t\t\t\tSnow: 'snow'\n\t\t\t}\n\t\t},\n\t\tHERE: {\n\t\t\t/*\n\t\t\t * HERE maps, formerly Nokia maps.\n\t\t\t * These basemaps are free, but you need an api id and app key. Please sign up at\n\t\t\t * https://developer.here.com/plans\n\t\t\t */\n\t\t\turl:\n\t\t\t\t'https://{s}.{base}.maps.api.here.com/maptile/2.1/' +\n\t\t\t\t'{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?' +\n\t\t\t\t'app_id={app_id}&app_code={app_code}&lg={language}',\n\t\t\toptions: {\n\t\t\t\tattribution:\n\t\t\t\t\t'Map © 1987-' + new Date().getFullYear() + ' <a href=\"http://developer.here.com\">HERE</a>',\n\t\t\t\tsubdomains: '1234',\n\t\t\t\tmapID: 'newest',\n\t\t\t\t'app_id': '<insert your app_id here>',\n\t\t\t\t'app_code': '<insert your app_code here>',\n\t\t\t\tbase: 'base',\n\t\t\t\tvariant: 'normal.day',\n\t\t\t\tmaxZoom: 20,\n\t\t\t\ttype: 'maptile',\n\t\t\t\tlanguage: 'eng',\n\t\t\t\tformat: 'png8',\n\t\t\t\tsize: '256'\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tnormalDay: 'normal.day',\n\t\t\t\tnormalDayCustom: 'normal.day.custom',\n\t\t\t\tnormalDayGrey: 'normal.day.grey',\n\t\t\t\tnormalDayMobile: 'normal.day.mobile',\n\t\t\t\tnormalDayGreyMobile: 'normal.day.grey.mobile',\n\t\t\t\tnormalDayTransit: 'normal.day.transit',\n\t\t\t\tnormalDayTransitMobile: 'normal.day.transit.mobile',\n\t\t\t\tnormalDayTraffic: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'normal.traffic.day',\n\t\t\t\t\t\tbase: 'traffic',\n\t\t\t\t\t\ttype: 'traffictile'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tnormalNight: 'normal.night',\n\t\t\t\tnormalNightMobile: 'normal.night.mobile',\n\t\t\t\tnormalNightGrey: 'normal.night.grey',\n\t\t\t\tnormalNightGreyMobile: 'normal.night.grey.mobile',\n\t\t\t\tnormalNightTransit: 'normal.night.transit',\n\t\t\t\tnormalNightTransitMobile: 'normal.night.transit.mobile',\n\t\t\t\treducedDay: 'reduced.day',\n\t\t\t\treducedNight: 'reduced.night',\n\t\t\t\tbasicMap: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\ttype: 'basetile'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tmapLabels: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\ttype: 'labeltile',\n\t\t\t\t\t\tformat: 'png'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttrafficFlow: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tbase: 'traffic',\n\t\t\t\t\t\ttype: 'flowtile'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tcarnavDayGrey: 'carnav.day.grey',\n\t\t\t\thybridDay: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tbase: 'aerial',\n\t\t\t\t\t\tvariant: 'hybrid.day'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\thybridDayMobile: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tbase: 'aerial',\n\t\t\t\t\t\tvariant: 'hybrid.day.mobile'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\thybridDayTransit: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tbase: 'aerial',\n\t\t\t\t\t\tvariant: 'hybrid.day.transit'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\thybridDayGrey: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tbase: 'aerial',\n\t\t\t\t\t\tvariant: 'hybrid.grey.day'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\thybridDayTraffic: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'hybrid.traffic.day',\n\t\t\t\t\t\tbase: 'traffic',\n\t\t\t\t\t\ttype: 'traffictile'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpedestrianDay: 'pedestrian.day',\n\t\t\t\tpedestrianNight: 'pedestrian.night',\n\t\t\t\tsatelliteDay: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tbase: 'aerial',\n\t\t\t\t\t\tvariant: 'satellite.day'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tterrainDay: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tbase: 'aerial',\n\t\t\t\t\t\tvariant: 'terrain.day'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tterrainDayMobile: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tbase: 'aerial',\n\t\t\t\t\t\tvariant: 'terrain.day.mobile'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tHEREv3: {\n\t\t\t/*\n\t\t\t * HERE maps API Version 3.\n\t\t\t * These basemaps are free, but you need an API key. Please sign up at\n\t\t\t * https://developer.here.com/plans\n\t\t\t * Version 3 deprecates the app_id and app_code access in favor of apiKey\n\t\t\t *\n\t\t\t * Supported access methods as of 2019/12/21:\n\t\t\t * @see https://developer.here.com/faqs#access-control-1--how-do-you-control-access-to-here-location-services\n\t\t\t */\n\t\t\turl:\n\t\t\t\t'https://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/' +\n\t\t\t\t'{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?' +\n\t\t\t\t'apiKey={apiKey}&lg={language}',\n\t\t\toptions: {\n\t\t\t\tattribution:\n\t\t\t\t\t'Map © 1987-' + new Date().getFullYear() + ' <a href=\"http://developer.here.com\">HERE</a>',\n\t\t\t\tsubdomains: '1234',\n\t\t\t\tmapID: 'newest',\n\t\t\t\tapiKey: '<insert your apiKey here>',\n\t\t\t\tbase: 'base',\n\t\t\t\tvariant: 'normal.day',\n\t\t\t\tmaxZoom: 20,\n\t\t\t\ttype: 'maptile',\n\t\t\t\tlanguage: 'eng',\n\t\t\t\tformat: 'png8',\n\t\t\t\tsize: '256'\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tnormalDay: 'normal.day',\n\t\t\t\tnormalDayCustom: 'normal.day.custom',\n\t\t\t\tnormalDayGrey: 'normal.day.grey',\n\t\t\t\tnormalDayMobile: 'normal.day.mobile',\n\t\t\t\tnormalDayGreyMobile: 'normal.day.grey.mobile',\n\t\t\t\tnormalDayTransit: 'normal.day.transit',\n\t\t\t\tnormalDayTransitMobile: 'normal.day.transit.mobile',\n\t\t\t\tnormalNight: 'normal.night',\n\t\t\t\tnormalNightMobile: 'normal.night.mobile',\n\t\t\t\tnormalNightGrey: 'normal.night.grey',\n\t\t\t\tnormalNightGreyMobile: 'normal.night.grey.mobile',\n\t\t\t\tnormalNightTransit: 'normal.night.transit',\n\t\t\t\tnormalNightTransitMobile: 'normal.night.transit.mobile',\n\t\t\t\treducedDay: 'reduced.day',\n\t\t\t\treducedNight: 'reduced.night',\n\t\t\t\tbasicMap: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\ttype: 'basetile'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tmapLabels: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\ttype: 'labeltile',\n\t\t\t\t\t\tformat: 'png'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttrafficFlow: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tbase: 'traffic',\n\t\t\t\t\t\ttype: 'flowtile'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tcarnavDayGrey: 'carnav.day.grey',\n\t\t\t\thybridDay: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tbase: 'aerial',\n\t\t\t\t\t\tvariant: 'hybrid.day'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\thybridDayMobile: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tbase: 'aerial',\n\t\t\t\t\t\tvariant: 'hybrid.day.mobile'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\thybridDayTransit: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tbase: 'aerial',\n\t\t\t\t\t\tvariant: 'hybrid.day.transit'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\thybridDayGrey: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tbase: 'aerial',\n\t\t\t\t\t\tvariant: 'hybrid.grey.day'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpedestrianDay: 'pedestrian.day',\n\t\t\t\tpedestrianNight: 'pedestrian.night',\n\t\t\t\tsatelliteDay: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tbase: 'aerial',\n\t\t\t\t\t\tvariant: 'satellite.day'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tterrainDay: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tbase: 'aerial',\n\t\t\t\t\t\tvariant: 'terrain.day'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tterrainDayMobile: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tbase: 'aerial',\n\t\t\t\t\t\tvariant: 'terrain.day.mobile'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tFreeMapSK: {\n\t\t\turl: 'https://{s}.freemap.sk/T/{z}/{x}/{y}.jpeg',\n\t\t\toptions: {\n\t\t\t\tminZoom: 8,\n\t\t\t\tmaxZoom: 16,\n\t\t\t\tsubdomains: 'abcd',\n\t\t\t\tbounds: [[47.204642, 15.996093], [49.830896, 22.576904]],\n\t\t\t\tattribution:\n\t\t\t\t\t'{attribution.OpenStreetMap}, vizualization CC-By-SA 2.0 <a href=\"http://freemap.sk\">Freemap.sk</a>'\n\t\t\t}\n\t\t},\n\t\tMtbMap: {\n\t\t\turl: 'http://tile.mtbmap.cz/mtbmap_tiles/{z}/{x}/{y}.png',\n\t\t\toptions: {\n\t\t\t\tattribution:\n\t\t\t\t\t'{attribution.OpenStreetMap} & USGS'\n\t\t\t}\n\t\t},\n\t\tCartoDB: {\n\t\t\turl: 'https://{s}.basemaps.cartocdn.com/{variant}/{z}/{x}/{y}{r}.png',\n\t\t\toptions: {\n\t\t\t\tattribution: '{attribution.OpenStreetMap} © <a href=\"https://carto.com/attributions\">CARTO</a>',\n\t\t\t\tsubdomains: 'abcd',\n\t\t\t\tmaxZoom: 20,\n\t\t\t\tvariant: 'light_all'\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tPositron: 'light_all',\n\t\t\t\tPositronNoLabels: 'light_nolabels',\n\t\t\t\tPositronOnlyLabels: 'light_only_labels',\n\t\t\t\tDarkMatter: 'dark_all',\n\t\t\t\tDarkMatterNoLabels: 'dark_nolabels',\n\t\t\t\tDarkMatterOnlyLabels: 'dark_only_labels',\n\t\t\t\tVoyager: 'rastertiles/voyager',\n\t\t\t\tVoyagerNoLabels: 'rastertiles/voyager_nolabels',\n\t\t\t\tVoyagerOnlyLabels: 'rastertiles/voyager_only_labels',\n\t\t\t\tVoyagerLabelsUnder: 'rastertiles/voyager_labels_under'\n\t\t\t}\n\t\t},\n\t\tHikeBike: {\n\t\t\turl: 'https://tiles.wmflabs.org/{variant}/{z}/{x}/{y}.png',\n\t\t\toptions: {\n\t\t\t\tmaxZoom: 19,\n\t\t\t\tattribution: '{attribution.OpenStreetMap}',\n\t\t\t\tvariant: 'hikebike'\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tHikeBike: {},\n\t\t\t\tHillShading: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tmaxZoom: 15,\n\t\t\t\t\t\tvariant: 'hillshading'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tBasemapAT: {\n\t\t\turl: 'https://maps{s}.wien.gv.at/basemap/{variant}/{type}/google3857/{z}/{y}/{x}.{format}',\n\t\t\toptions: {\n\t\t\t\tmaxZoom: 19,\n\t\t\t\tattribution: 'Datenquelle: <a href=\"https://www.basemap.at\">basemap.at</a>',\n\t\t\t\tsubdomains: ['', '1', '2', '3', '4'],\n\t\t\t\ttype: 'normal',\n\t\t\t\tformat: 'png',\n\t\t\t\tbounds: [[46.358770, 8.782379], [49.037872, 17.189532]],\n\t\t\t\tvariant: 'geolandbasemap'\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tbasemap: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tmaxZoom: 20, // currently only in Vienna\n\t\t\t\t\t\tvariant: 'geolandbasemap'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tgrau: 'bmapgrau',\n\t\t\t\toverlay: 'bmapoverlay',\n\t\t\t\tterrain: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'bmapgelaende',\n\t\t\t\t\t\ttype: 'grau',\n\t\t\t\t\t\tformat: 'jpeg'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tsurface: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'bmapoberflaeche',\n\t\t\t\t\t\ttype: 'grau',\n\t\t\t\t\t\tformat: 'jpeg'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\thighdpi: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'bmaphidpi',\n\t\t\t\t\t\tformat: 'jpeg'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\torthofoto: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tmaxZoom: 20, // currently only in Vienna\n\t\t\t\t\t\tvariant: 'bmaporthofoto30cm',\n\t\t\t\t\t\tformat: 'jpeg'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tnlmaps: {\n\t\t\turl: 'https://geodata.nationaalgeoregister.nl/tiles/service/wmts/{variant}/EPSG:3857/{z}/{x}/{y}.png',\n\t\t\toptions: {\n\t\t\t\tminZoom: 6,\n\t\t\t\tmaxZoom: 19,\n\t\t\t\tbounds: [[50.5, 3.25], [54, 7.6]],\n\t\t\t\tattribution: 'Kaartgegevens © <a href=\"https://www.kadaster.nl\">Kadaster</a>'\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\t'standaard': 'brtachtergrondkaart',\n\t\t\t\t'pastel': 'brtachtergrondkaartpastel',\n\t\t\t\t'grijs': 'brtachtergrondkaartgrijs',\n\t\t\t\t'luchtfoto': {\n\t\t\t\t\t'url': 'https://service.pdok.nl/hwh/luchtfotorgb/wmts/v1_0/Actueel_ortho25/EPSG:3857/{z}/{x}/{y}.jpeg',\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tNASAGIBS: {\n\t\t\turl: 'https://map1.vis.earthdata.nasa.gov/wmts-webmerc/{variant}/default/{time}/{tilematrixset}{maxZoom}/{z}/{y}/{x}.{format}',\n\t\t\toptions: {\n\t\t\t\tattribution:\n\t\t\t\t\t'Imagery provided by services from the Global Imagery Browse Services (GIBS), operated by the NASA/GSFC/Earth Science Data and Information System ' +\n\t\t\t\t\t'(<a href=\"https://earthdata.nasa.gov\">ESDIS</a>) with funding provided by NASA/HQ.',\n\t\t\t\tbounds: [[-85.0511287776, -179.999999975], [85.0511287776, 179.999999975]],\n\t\t\t\tminZoom: 1,\n\t\t\t\tmaxZoom: 9,\n\t\t\t\tformat: 'jpg',\n\t\t\t\ttime: '',\n\t\t\t\ttilematrixset: 'GoogleMapsCompatible_Level'\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tModisTerraTrueColorCR: 'MODIS_Terra_CorrectedReflectance_TrueColor',\n\t\t\t\tModisTerraBands367CR: 'MODIS_Terra_CorrectedReflectance_Bands367',\n\t\t\t\tViirsEarthAtNight2012: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'VIIRS_CityLights_2012',\n\t\t\t\t\t\tmaxZoom: 8\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tModisTerraLSTDay: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'MODIS_Terra_Land_Surface_Temp_Day',\n\t\t\t\t\t\tformat: 'png',\n\t\t\t\t\t\tmaxZoom: 7,\n\t\t\t\t\t\topacity: 0.75\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tModisTerraSnowCover: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'MODIS_Terra_NDSI_Snow_Cover',\n\t\t\t\t\t\tformat: 'png',\n\t\t\t\t\t\tmaxZoom: 8,\n\t\t\t\t\t\topacity: 0.75\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tModisTerraAOD: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'MODIS_Terra_Aerosol',\n\t\t\t\t\t\tformat: 'png',\n\t\t\t\t\t\tmaxZoom: 6,\n\t\t\t\t\t\topacity: 0.75\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tModisTerraChlorophyll: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'MODIS_Terra_Chlorophyll_A',\n\t\t\t\t\t\tformat: 'png',\n\t\t\t\t\t\tmaxZoom: 7,\n\t\t\t\t\t\topacity: 0.75\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tNLS: {\n\t\t\t// NLS maps are copyright National library of Scotland.\n\t\t\t// http://maps.nls.uk/projects/api/index.html\n\t\t\t// Please contact NLS for anything other than non-commercial low volume usage\n\t\t\t//\n\t\t\t// Map sources: Ordnance Survey 1:1m to 1:63K, 1920s-1940s\n\t\t\t// z0-9 - 1:1m\n\t\t\t// z10-11 - quarter inch (1:253440)\n\t\t\t// z12-18 - one inch (1:63360)\n\t\t\turl: 'https://nls-{s}.tileserver.com/nls/{z}/{x}/{y}.jpg',\n\t\t\toptions: {\n\t\t\t\tattribution: '<a href=\"http://geo.nls.uk/maps/\">National Library of Scotland Historic Maps</a>',\n\t\t\t\tbounds: [[49.6, -12], [61.7, 3]],\n\t\t\t\tminZoom: 1,\n\t\t\t\tmaxZoom: 18,\n\t\t\t\tsubdomains: '0123',\n\t\t\t}\n\t\t},\n\t\tJusticeMap: {\n\t\t\t// Justice Map (http://www.justicemap.org/)\n\t\t\t// Visualize race and income data for your community, county and country.\n\t\t\t// Includes tools for data journalists, bloggers and community activists.\n\t\t\turl: 'https://www.justicemap.org/tile/{size}/{variant}/{z}/{x}/{y}.png',\n\t\t\toptions: {\n\t\t\t\tattribution: '<a href=\"http://www.justicemap.org/terms.php\">Justice Map</a>',\n\t\t\t\t// one of 'county', 'tract', 'block'\n\t\t\t\tsize: 'county',\n\t\t\t\t// Bounds for USA, including Alaska and Hawaii\n\t\t\t\tbounds: [[14, -180], [72, -56]]\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tincome: 'income',\n\t\t\t\tamericanIndian: 'indian',\n\t\t\t\tasian: 'asian',\n\t\t\t\tblack: 'black',\n\t\t\t\thispanic: 'hispanic',\n\t\t\t\tmulti: 'multi',\n\t\t\t\tnonWhite: 'nonwhite',\n\t\t\t\twhite: 'white',\n\t\t\t\tplurality: 'plural'\n\t\t\t}\n\t\t},\n\t\tGeoportailFrance: {\n\t\t\turl: 'https://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET=PM&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}',\n\t\t\toptions: {\n\t\t\t\tattribution: '<a target=\"_blank\" href=\"https://www.geoportail.gouv.fr/\">Geoportail France</a>',\n\t\t\t\tbounds: [[-75, -180], [81, 180]],\n\t\t\t\tminZoom: 2,\n\t\t\t\tmaxZoom: 18,\n\t\t\t\t// Get your own geoportail apikey here : http://professionnels.ign.fr/ign/contrats/\n\t\t\t\t// NB : 'choisirgeoportail' is a demonstration key that comes with no guarantee\n\t\t\t\tapikey: 'choisirgeoportail',\n\t\t\t\tformat: 'image/png',\n\t\t\t\tstyle: 'normal',\n\t\t\t\tvariant: 'GEOGRAPHICALGRIDSYSTEMS.PLANIGNV2'\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tplan: 'GEOGRAPHICALGRIDSYSTEMS.PLANIGNV2',\n\t\t\t\tparcels: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'CADASTRALPARCELS.PARCELLAIRE_EXPRESS',\n\t\t\t\t\t\tstyle: 'PCI vecteur',\n\t\t\t\t\t\tmaxZoom: 20\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\torthos: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tmaxZoom: 19,\n\t\t\t\t\t\tformat: 'image/jpeg',\n\t\t\t\t\t\tvariant: 'ORTHOIMAGERY.ORTHOPHOTOS'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tOneMapSG: {\n\t\t\turl: 'https://maps-{s}.onemap.sg/v3/{variant}/{z}/{x}/{y}.png',\n\t\t\toptions: {\n\t\t\t\tvariant: 'Default',\n\t\t\t\tminZoom: 11,\n\t\t\t\tmaxZoom: 18,\n\t\t\t\tbounds: [[1.56073, 104.11475], [1.16, 103.502]],\n\t\t\t\tattribution: '<img src=\"https://docs.onemap.sg/maps/images/oneMap64-01.png\" style=\"height:20px;width:20px;\"/> New OneMap | Map data © contributors, <a href=\"http://SLA.gov.sg\">Singapore Land Authority</a>'\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tDefault: 'Default',\n\t\t\t\tNight: 'Night',\n\t\t\t\tOriginal: 'Original',\n\t\t\t\tGrey: 'Grey',\n\t\t\t\tLandLot: 'LandLot'\n\t\t\t}\n\t\t},\n\t\tUSGS: {\n\t\t\turl: 'https://basemap.nationalmap.gov/arcgis/rest/services/USGSTopo/MapServer/tile/{z}/{y}/{x}',\n\t\t\toptions: {\n\t\t\t\tmaxZoom: 20,\n\t\t\t\tattribution: 'Tiles courtesy of the <a href=\"https://usgs.gov/\">U.S. Geological Survey</a>'\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tUSTopo: {},\n\t\t\t\tUSImagery: {\n\t\t\t\t\turl: 'https://basemap.nationalmap.gov/arcgis/rest/services/USGSImageryOnly/MapServer/tile/{z}/{y}/{x}'\n\t\t\t\t},\n\t\t\t\tUSImageryTopo: {\n\t\t\t\t\turl: 'https://basemap.nationalmap.gov/arcgis/rest/services/USGSImageryTopo/MapServer/tile/{z}/{y}/{x}'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tWaymarkedTrails: {\n\t\t\turl: 'https://tile.waymarkedtrails.org/{variant}/{z}/{x}/{y}.png',\n\t\t\toptions: {\n\t\t\t\tmaxZoom: 18,\n\t\t\t\tattribution: 'Map data: {attribution.OpenStreetMap} | Map style: © <a href=\"https://waymarkedtrails.org\">waymarkedtrails.org</a> (<a href=\"https://creativecommons.org/licenses/by-sa/3.0/\">CC-BY-SA</a>)'\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\thiking: 'hiking',\n\t\t\t\tcycling: 'cycling',\n\t\t\t\tmtb: 'mtb',\n\t\t\t\tslopes: 'slopes',\n\t\t\t\triding: 'riding',\n\t\t\t\tskating: 'skating'\n\t\t\t}\n\t\t},\n\t\tOpenAIP: {\n\t\t\turl: 'https://{s}.tile.maps.openaip.net/geowebcache/service/tms/1.0.0/openaip_basemap@EPSG%3A900913@png/{z}/{x}/{y}.{ext}',\n\t\t\toptions: {\n\t\t\t\tattribution: '<a href=\"https://www.openaip.net/\">openAIP Data</a> (<a href=\"https://creativecommons.org/licenses/by-sa/3.0/\">CC-BY-NC-SA</a>)',\n\t\t\t\text: 'png',\n\t\t\t\tminZoom: 4,\n\t\t\t\tmaxZoom: 14,\n\t\t\t\ttms: true,\n\t\t\t\tdetectRetina: true,\n\t\t\t\tsubdomains: '12'\n\t\t\t}\n\t\t},\n\t\tOpenSnowMap: {\n\t\t\turl: 'https://tiles.opensnowmap.org/{variant}/{z}/{x}/{y}.png',\n\t\t\toptions: {\n\t\t\t\tminZoom: 9,\n\t\t\t\tmaxZoom: 18,\n\t\t\t\tattribution: 'Map data: {attribution.OpenStreetMap} & ODbL, © <a href=\"https://www.opensnowmap.org/iframes/data.html\">www.opensnowmap.org</a> <a href=\"https://creativecommons.org/licenses/by-sa/2.0/\">CC-BY-SA</a>'\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tpistes: 'pistes',\n\t\t\t}\n\t\t},\n\t\tAzureMaps: {\n\t\t\turl: \n\t\t\t\t'https://atlas.microsoft.com/map/tile?api-version={apiVersion}'+\n\t\t\t\t'&tilesetId={variant}&x={x}&y={y}&zoom={z}&language={language}'+\n\t\t\t\t'&subscription-key={subscriptionKey}',\n\t\t\toptions: {\n\t\t\t\tattribution: 'See https://docs.microsoft.com/en-US/rest/api/maps/renderv2/getmaptilepreview for details.',\n\t\t\t\tapiVersion: '2.0',\n\t\t\t\tvariant: 'microsoft.imagery',\n\t\t\t\tsubscriptionKey: '<insert your subscription key here>',\n\t\t\t\tlanguage: 'en-US',\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tMicrosoftImagery: 'microsoft.imagery',\n\t\t\t\tMicrosoftBaseDarkGrey: 'microsoft.base.darkgrey',\n\t\t\t\tMicrosoftBaseRoad: 'microsoft.base.road',\n\t\t\t\tMicrosoftBaseHybridRoad: 'microsoft.base.hybrid.road',\n\t\t\t\tMicrosoftTerraMain: 'microsoft.terra.main',\n\t\t\t\tMicrosoftWeatherInfraredMain: {\n\t\t\t\t\turl: \n\t\t\t\t\t'https://atlas.microsoft.com/map/tile?api-version={apiVersion}'+\n\t\t\t\t\t'&tilesetId={variant}&x={x}&y={y}&zoom={z}'+\n\t\t\t\t\t'&timeStamp={timeStamp}&language={language}' +\n\t\t\t\t\t'&subscription-key={subscriptionKey}',\n\t\t\t\t\toptions: {\n\t\t\t\t\t\ttimeStamp: '2021-05-08T09:03:00Z',\n\t\t\t\t\t\tattribution: 'See https://docs.microsoft.com/en-US/rest/api/maps/renderv2/getmaptilepreview#uri-parameters for details.',\n\t\t\t\t\t\tvariant: 'microsoft.weather.infrared.main',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tMicrosoftWeatherRadarMain: {\n\t\t\t\t\turl: \n\t\t\t\t\t'https://atlas.microsoft.com/map/tile?api-version={apiVersion}'+\n\t\t\t\t\t'&tilesetId={variant}&x={x}&y={y}&zoom={z}'+\n\t\t\t\t\t'&timeStamp={timeStamp}&language={language}' +\n\t\t\t\t\t'&subscription-key={subscriptionKey}',\n\t\t\t\t\toptions: {\n\t\t\t\t\t\ttimeStamp: '2021-05-08T09:03:00Z',\n\t\t\t\t\t\tattribution: 'See https://docs.microsoft.com/en-US/rest/api/maps/renderv2/getmaptilepreview#uri-parameters for details.',\n\t\t\t\t\t\tvariant: 'microsoft.weather.radar.main',\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t},\n\t\t}\n\t};\n\n\tL.tileLayer.provider = function (provider, options) {\n\t\treturn new L.TileLayer.Provider(provider, options);\n\t};\n\n\treturn L;\n}));\n", "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n// This is CodeMirror (https://codemirror.net/5), a code editor\n// implemented in JavaScript on top of the browser's DOM.\n//\n// You can find some technical background for some of the code below\n// at http://marijnhaverbeke.nl/blog/#cm-internals .\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = global || self, global.CodeMirror = factory());\n}(this, (function () { 'use strict';\n\n // Kludges for bugs and behavior differences that can't be feature\n // detected are enabled based on userAgent etc sniffing.\n var userAgent = navigator.userAgent;\n var platform = navigator.platform;\n\n var gecko = /gecko\\/\\d/i.test(userAgent);\n var ie_upto10 = /MSIE \\d/.test(userAgent);\n var ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(userAgent);\n var edge = /Edge\\/(\\d+)/.exec(userAgent);\n var ie = ie_upto10 || ie_11up || edge;\n var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]);\n var webkit = !edge && /WebKit\\//.test(userAgent);\n var qtwebkit = webkit && /Qt\\/\\d+\\.\\d+/.test(userAgent);\n var chrome = !edge && /Chrome\\/(\\d+)/.exec(userAgent);\n var chrome_version = chrome && +chrome[1];\n var presto = /Opera\\//.test(userAgent);\n var safari = /Apple Computer/.test(navigator.vendor);\n var mac_geMountainLion = /Mac OS X 1\\d\\D([8-9]|\\d\\d)\\D/.test(userAgent);\n var phantom = /PhantomJS/.test(userAgent);\n\n var ios = safari && (/Mobile\\/\\w+/.test(userAgent) || navigator.maxTouchPoints > 2);\n var android = /Android/.test(userAgent);\n // This is woefully incomplete. Suggestions for alternative methods welcome.\n var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent);\n var mac = ios || /Mac/.test(platform);\n var chromeOS = /\\bCrOS\\b/.test(userAgent);\n var windows = /win/i.test(platform);\n\n var presto_version = presto && userAgent.match(/Version\\/(\\d*\\.\\d*)/);\n if (presto_version) { presto_version = Number(presto_version[1]); }\n if (presto_version && presto_version >= 15) { presto = false; webkit = true; }\n // Some browsers use the wrong event properties to signal cmd/ctrl on OS X\n var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11));\n var captureRightClick = gecko || (ie && ie_version >= 9);\n\n function classTest(cls) { return new RegExp(\"(^|\\\\s)\" + cls + \"(?:$|\\\\s)\\\\s*\") }\n\n var rmClass = function(node, cls) {\n var current = node.className;\n var match = classTest(cls).exec(current);\n if (match) {\n var after = current.slice(match.index + match[0].length);\n node.className = current.slice(0, match.index) + (after ? match[1] + after : \"\");\n }\n };\n\n function removeChildren(e) {\n for (var count = e.childNodes.length; count > 0; --count)\n { e.removeChild(e.firstChild); }\n return e\n }\n\n function removeChildrenAndAdd(parent, e) {\n return removeChildren(parent).appendChild(e)\n }\n\n function elt(tag, content, className, style) {\n var e = document.createElement(tag);\n if (className) { e.className = className; }\n if (style) { e.style.cssText = style; }\n if (typeof content == \"string\") { e.appendChild(document.createTextNode(content)); }\n else if (content) { for (var i = 0; i < content.length; ++i) { e.appendChild(content[i]); } }\n return e\n }\n // wrapper for elt, which removes the elt from the accessibility tree\n function eltP(tag, content, className, style) {\n var e = elt(tag, content, className, style);\n e.setAttribute(\"role\", \"presentation\");\n return e\n }\n\n var range;\n if (document.createRange) { range = function(node, start, end, endNode) {\n var r = document.createRange();\n r.setEnd(endNode || node, end);\n r.setStart(node, start);\n return r\n }; }\n else { range = function(node, start, end) {\n var r = document.body.createTextRange();\n try { r.moveToElementText(node.parentNode); }\n catch(e) { return r }\n r.collapse(true);\n r.moveEnd(\"character\", end);\n r.moveStart(\"character\", start);\n return r\n }; }\n\n function contains(parent, child) {\n if (child.nodeType == 3) // Android browser always returns false when child is a textnode\n { child = child.parentNode; }\n if (parent.contains)\n { return parent.contains(child) }\n do {\n if (child.nodeType == 11) { child = child.host; }\n if (child == parent) { return true }\n } while (child = child.parentNode)\n }\n\n function activeElt(rootNode) {\n // IE and Edge may throw an \"Unspecified Error\" when accessing document.activeElement.\n // IE < 10 will throw when accessed while the page is loading or in an iframe.\n // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable.\n var doc = rootNode.ownerDocument || rootNode;\n var activeElement;\n try {\n activeElement = rootNode.activeElement;\n } catch(e) {\n activeElement = doc.body || null;\n }\n while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement)\n { activeElement = activeElement.shadowRoot.activeElement; }\n return activeElement\n }\n\n function addClass(node, cls) {\n var current = node.className;\n if (!classTest(cls).test(current)) { node.className += (current ? \" \" : \"\") + cls; }\n }\n function joinClasses(a, b) {\n var as = a.split(\" \");\n for (var i = 0; i < as.length; i++)\n { if (as[i] && !classTest(as[i]).test(b)) { b += \" \" + as[i]; } }\n return b\n }\n\n var selectInput = function(node) { node.select(); };\n if (ios) // Mobile Safari apparently has a bug where select() is broken.\n { selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; }\n else if (ie) // Suppress mysterious IE10 errors\n { selectInput = function(node) { try { node.select(); } catch(_e) {} }; }\n\n function doc(cm) { return cm.display.wrapper.ownerDocument }\n\n function root(cm) {\n return rootNode(cm.display.wrapper)\n }\n\n function rootNode(element) {\n // Detect modern browsers (2017+).\n return element.getRootNode ? element.getRootNode() : element.ownerDocument\n }\n\n function win(cm) { return doc(cm).defaultView }\n\n function bind(f) {\n var args = Array.prototype.slice.call(arguments, 1);\n return function(){return f.apply(null, args)}\n }\n\n function copyObj(obj, target, overwrite) {\n if (!target) { target = {}; }\n for (var prop in obj)\n { if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop)))\n { target[prop] = obj[prop]; } }\n return target\n }\n\n // Counts the column offset in a string, taking tabs into account.\n // Used mostly to find indentation.\n function countColumn(string, end, tabSize, startIndex, startValue) {\n if (end == null) {\n end = string.search(/[^\\s\\u00a0]/);\n if (end == -1) { end = string.length; }\n }\n for (var i = startIndex || 0, n = startValue || 0;;) {\n var nextTab = string.indexOf(\"\\t\", i);\n if (nextTab < 0 || nextTab >= end)\n { return n + (end - i) }\n n += nextTab - i;\n n += tabSize - (n % tabSize);\n i = nextTab + 1;\n }\n }\n\n var Delayed = function() {\n this.id = null;\n this.f = null;\n this.time = 0;\n this.handler = bind(this.onTimeout, this);\n };\n Delayed.prototype.onTimeout = function (self) {\n self.id = 0;\n if (self.time <= +new Date) {\n self.f();\n } else {\n setTimeout(self.handler, self.time - +new Date);\n }\n };\n Delayed.prototype.set = function (ms, f) {\n this.f = f;\n var time = +new Date + ms;\n if (!this.id || time < this.time) {\n clearTimeout(this.id);\n this.id = setTimeout(this.handler, ms);\n this.time = time;\n }\n };\n\n function indexOf(array, elt) {\n for (var i = 0; i < array.length; ++i)\n { if (array[i] == elt) { return i } }\n return -1\n }\n\n // Number of pixels added to scroller and sizer to hide scrollbar\n var scrollerGap = 50;\n\n // Returned or thrown by various protocols to signal 'I'm not\n // handling this'.\n var Pass = {toString: function(){return \"CodeMirror.Pass\"}};\n\n // Reused option objects for setSelection & friends\n var sel_dontScroll = {scroll: false}, sel_mouse = {origin: \"*mouse\"}, sel_move = {origin: \"+move\"};\n\n // The inverse of countColumn -- find the offset that corresponds to\n // a particular column.\n function findColumn(string, goal, tabSize) {\n for (var pos = 0, col = 0;;) {\n var nextTab = string.indexOf(\"\\t\", pos);\n if (nextTab == -1) { nextTab = string.length; }\n var skipped = nextTab - pos;\n if (nextTab == string.length || col + skipped >= goal)\n { return pos + Math.min(skipped, goal - col) }\n col += nextTab - pos;\n col += tabSize - (col % tabSize);\n pos = nextTab + 1;\n if (col >= goal) { return pos }\n }\n }\n\n var spaceStrs = [\"\"];\n function spaceStr(n) {\n while (spaceStrs.length <= n)\n { spaceStrs.push(lst(spaceStrs) + \" \"); }\n return spaceStrs[n]\n }\n\n function lst(arr) { return arr[arr.length-1] }\n\n function map(array, f) {\n var out = [];\n for (var i = 0; i < array.length; i++) { out[i] = f(array[i], i); }\n return out\n }\n\n function insertSorted(array, value, score) {\n var pos = 0, priority = score(value);\n while (pos < array.length && score(array[pos]) <= priority) { pos++; }\n array.splice(pos, 0, value);\n }\n\n function nothing() {}\n\n function createObj(base, props) {\n var inst;\n if (Object.create) {\n inst = Object.create(base);\n } else {\n nothing.prototype = base;\n inst = new nothing();\n }\n if (props) { copyObj(props, inst); }\n return inst\n }\n\n var nonASCIISingleCaseWordChar = /[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;\n function isWordCharBasic(ch) {\n return /\\w/.test(ch) || ch > \"\\x80\" &&\n (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch))\n }\n function isWordChar(ch, helper) {\n if (!helper) { return isWordCharBasic(ch) }\n if (helper.source.indexOf(\"\\\\w\") > -1 && isWordCharBasic(ch)) { return true }\n return helper.test(ch)\n }\n\n function isEmpty(obj) {\n for (var n in obj) { if (obj.hasOwnProperty(n) && obj[n]) { return false } }\n return true\n }\n\n // Extending unicode characters. A series of a non-extending char +\n // any number of extending chars is treated as a single unit as far\n // as editing and measuring is concerned. This is not fully correct,\n // since some scripts/fonts/browsers also treat other configurations\n // of code points as a group.\n var extendingChars = /[\\u0300-\\u036f\\u0483-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u065e\\u0670\\u06d6-\\u06dc\\u06de-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0900-\\u0902\\u093c\\u0941-\\u0948\\u094d\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2\\u09e3\\u0a01\\u0a02\\u0a3c\\u0a41\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70\\u0a71\\u0a75\\u0a81\\u0a82\\u0abc\\u0ac1-\\u0ac5\\u0ac7\\u0ac8\\u0acd\\u0ae2\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0d3e\\u0d41-\\u0d44\\u0d4d\\u0d57\\u0d62\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86\\u0f87\\u0f90-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039\\u103a\\u103d\\u103e\\u1058\\u1059\\u105e-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108d\\u109d\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193b\\u1a17\\u1a18\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1b00-\\u1b03\\u1b34\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80\\u1b81\\u1ba2-\\u1ba5\\u1ba8\\u1ba9\\u1c2c-\\u1c33\\u1c36\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1dc0-\\u1de6\\u1dfd-\\u1dff\\u200c\\u200d\\u20d0-\\u20f0\\u2cef-\\u2cf1\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua66f-\\ua672\\ua67c\\ua67d\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua825\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc\\uaa29-\\uaa2e\\uaa31\\uaa32\\uaa35\\uaa36\\uaa43\\uaa4c\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uabe5\\uabe8\\uabed\\udc00-\\udfff\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\uff9e\\uff9f]/;\n function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch) }\n\n // Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range.\n function skipExtendingChars(str, pos, dir) {\n while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) { pos += dir; }\n return pos\n }\n\n // Returns the value from the range [`from`; `to`] that satisfies\n // `pred` and is closest to `from`. Assumes that at least `to`\n // satisfies `pred`. Supports `from` being greater than `to`.\n function findFirst(pred, from, to) {\n // At any point we are certain `to` satisfies `pred`, don't know\n // whether `from` does.\n var dir = from > to ? -1 : 1;\n for (;;) {\n if (from == to) { return from }\n var midF = (from + to) / 2, mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF);\n if (mid == from) { return pred(mid) ? from : to }\n if (pred(mid)) { to = mid; }\n else { from = mid + dir; }\n }\n }\n\n // BIDI HELPERS\n\n function iterateBidiSections(order, from, to, f) {\n if (!order) { return f(from, to, \"ltr\", 0) }\n var found = false;\n for (var i = 0; i < order.length; ++i) {\n var part = order[i];\n if (part.from < to && part.to > from || from == to && part.to == from) {\n f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? \"rtl\" : \"ltr\", i);\n found = true;\n }\n }\n if (!found) { f(from, to, \"ltr\"); }\n }\n\n var bidiOther = null;\n function getBidiPartAt(order, ch, sticky) {\n var found;\n bidiOther = null;\n for (var i = 0; i < order.length; ++i) {\n var cur = order[i];\n if (cur.from < ch && cur.to > ch) { return i }\n if (cur.to == ch) {\n if (cur.from != cur.to && sticky == \"before\") { found = i; }\n else { bidiOther = i; }\n }\n if (cur.from == ch) {\n if (cur.from != cur.to && sticky != \"before\") { found = i; }\n else { bidiOther = i; }\n }\n }\n return found != null ? found : bidiOther\n }\n\n // Bidirectional ordering algorithm\n // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm\n // that this (partially) implements.\n\n // One-char codes used for character types:\n // L (L): Left-to-Right\n // R (R): Right-to-Left\n // r (AL): Right-to-Left Arabic\n // 1 (EN): European Number\n // + (ES): European Number Separator\n // % (ET): European Number Terminator\n // n (AN): Arabic Number\n // , (CS): Common Number Separator\n // m (NSM): Non-Spacing Mark\n // b (BN): Boundary Neutral\n // s (B): Paragraph Separator\n // t (S): Segment Separator\n // w (WS): Whitespace\n // N (ON): Other Neutrals\n\n // Returns null if characters are ordered as they appear\n // (left-to-right), or an array of sections ({from, to, level}\n // objects) in the order in which they occur visually.\n var bidiOrdering = (function() {\n // Character types for codepoints 0 to 0xff\n var lowTypes = \"bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN\";\n // Character types for codepoints 0x600 to 0x6f9\n var arabicTypes = \"nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111\";\n function charType(code) {\n if (code <= 0xf7) { return lowTypes.charAt(code) }\n else if (0x590 <= code && code <= 0x5f4) { return \"R\" }\n else if (0x600 <= code && code <= 0x6f9) { return arabicTypes.charAt(code - 0x600) }\n else if (0x6ee <= code && code <= 0x8ac) { return \"r\" }\n else if (0x2000 <= code && code <= 0x200b) { return \"w\" }\n else if (code == 0x200c) { return \"b\" }\n else { return \"L\" }\n }\n\n var bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\n var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/;\n\n function BidiSpan(level, from, to) {\n this.level = level;\n this.from = from; this.to = to;\n }\n\n return function(str, direction) {\n var outerType = direction == \"ltr\" ? \"L\" : \"R\";\n\n if (str.length == 0 || direction == \"ltr\" && !bidiRE.test(str)) { return false }\n var len = str.length, types = [];\n for (var i = 0; i < len; ++i)\n { types.push(charType(str.charCodeAt(i))); }\n\n // W1. Examine each non-spacing mark (NSM) in the level run, and\n // change the type of the NSM to the type of the previous\n // character. If the NSM is at the start of the level run, it will\n // get the type of sor.\n for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) {\n var type = types[i$1];\n if (type == \"m\") { types[i$1] = prev; }\n else { prev = type; }\n }\n\n // W2. Search backwards from each instance of a European number\n // until the first strong type (R, L, AL, or sor) is found. If an\n // AL is found, change the type of the European number to Arabic\n // number.\n // W3. Change all ALs to R.\n for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) {\n var type$1 = types[i$2];\n if (type$1 == \"1\" && cur == \"r\") { types[i$2] = \"n\"; }\n else if (isStrong.test(type$1)) { cur = type$1; if (type$1 == \"r\") { types[i$2] = \"R\"; } }\n }\n\n // W4. A single European separator between two European numbers\n // changes to a European number. A single common separator between\n // two numbers of the same type changes to that type.\n for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) {\n var type$2 = types[i$3];\n if (type$2 == \"+\" && prev$1 == \"1\" && types[i$3+1] == \"1\") { types[i$3] = \"1\"; }\n else if (type$2 == \",\" && prev$1 == types[i$3+1] &&\n (prev$1 == \"1\" || prev$1 == \"n\")) { types[i$3] = prev$1; }\n prev$1 = type$2;\n }\n\n // W5. A sequence of European terminators adjacent to European\n // numbers changes to all European numbers.\n // W6. Otherwise, separators and terminators change to Other\n // Neutral.\n for (var i$4 = 0; i$4 < len; ++i$4) {\n var type$3 = types[i$4];\n if (type$3 == \",\") { types[i$4] = \"N\"; }\n else if (type$3 == \"%\") {\n var end = (void 0);\n for (end = i$4 + 1; end < len && types[end] == \"%\"; ++end) {}\n var replace = (i$4 && types[i$4-1] == \"!\") || (end < len && types[end] == \"1\") ? \"1\" : \"N\";\n for (var j = i$4; j < end; ++j) { types[j] = replace; }\n i$4 = end - 1;\n }\n }\n\n // W7. Search backwards from each instance of a European number\n // until the first strong type (R, L, or sor) is found. If an L is\n // found, then change the type of the European number to L.\n for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) {\n var type$4 = types[i$5];\n if (cur$1 == \"L\" && type$4 == \"1\") { types[i$5] = \"L\"; }\n else if (isStrong.test(type$4)) { cur$1 = type$4; }\n }\n\n // N1. A sequence of neutrals takes the direction of the\n // surrounding strong text if the text on both sides has the same\n // direction. European and Arabic numbers act as if they were R in\n // terms of their influence on neutrals. Start-of-level-run (sor)\n // and end-of-level-run (eor) are used at level run boundaries.\n // N2. Any remaining neutrals take the embedding direction.\n for (var i$6 = 0; i$6 < len; ++i$6) {\n if (isNeutral.test(types[i$6])) {\n var end$1 = (void 0);\n for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {}\n var before = (i$6 ? types[i$6-1] : outerType) == \"L\";\n var after = (end$1 < len ? types[end$1] : outerType) == \"L\";\n var replace$1 = before == after ? (before ? \"L\" : \"R\") : outerType;\n for (var j$1 = i$6; j$1 < end$1; ++j$1) { types[j$1] = replace$1; }\n i$6 = end$1 - 1;\n }\n }\n\n // Here we depart from the documented algorithm, in order to avoid\n // building up an actual levels array. Since there are only three\n // levels (0, 1, 2) in an implementation that doesn't take\n // explicit embedding into account, we can build up the order on\n // the fly, without following the level-based algorithm.\n var order = [], m;\n for (var i$7 = 0; i$7 < len;) {\n if (countsAsLeft.test(types[i$7])) {\n var start = i$7;\n for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {}\n order.push(new BidiSpan(0, start, i$7));\n } else {\n var pos = i$7, at = order.length, isRTL = direction == \"rtl\" ? 1 : 0;\n for (++i$7; i$7 < len && types[i$7] != \"L\"; ++i$7) {}\n for (var j$2 = pos; j$2 < i$7;) {\n if (countsAsNum.test(types[j$2])) {\n if (pos < j$2) { order.splice(at, 0, new BidiSpan(1, pos, j$2)); at += isRTL; }\n var nstart = j$2;\n for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {}\n order.splice(at, 0, new BidiSpan(2, nstart, j$2));\n at += isRTL;\n pos = j$2;\n } else { ++j$2; }\n }\n if (pos < i$7) { order.splice(at, 0, new BidiSpan(1, pos, i$7)); }\n }\n }\n if (direction == \"ltr\") {\n if (order[0].level == 1 && (m = str.match(/^\\s+/))) {\n order[0].from = m[0].length;\n order.unshift(new BidiSpan(0, 0, m[0].length));\n }\n if (lst(order).level == 1 && (m = str.match(/\\s+$/))) {\n lst(order).to -= m[0].length;\n order.push(new BidiSpan(0, len - m[0].length, len));\n }\n }\n\n return direction == \"rtl\" ? order.reverse() : order\n }\n })();\n\n // Get the bidi ordering for the given line (and cache it). Returns\n // false for lines that are fully left-to-right, and an array of\n // BidiSpan objects otherwise.\n function getOrder(line, direction) {\n var order = line.order;\n if (order == null) { order = line.order = bidiOrdering(line.text, direction); }\n return order\n }\n\n // EVENT HANDLING\n\n // Lightweight event framework. on/off also work on DOM nodes,\n // registering native DOM handlers.\n\n var noHandlers = [];\n\n var on = function(emitter, type, f) {\n if (emitter.addEventListener) {\n emitter.addEventListener(type, f, false);\n } else if (emitter.attachEvent) {\n emitter.attachEvent(\"on\" + type, f);\n } else {\n var map = emitter._handlers || (emitter._handlers = {});\n map[type] = (map[type] || noHandlers).concat(f);\n }\n };\n\n function getHandlers(emitter, type) {\n return emitter._handlers && emitter._handlers[type] || noHandlers\n }\n\n function off(emitter, type, f) {\n if (emitter.removeEventListener) {\n emitter.removeEventListener(type, f, false);\n } else if (emitter.detachEvent) {\n emitter.detachEvent(\"on\" + type, f);\n } else {\n var map = emitter._handlers, arr = map && map[type];\n if (arr) {\n var index = indexOf(arr, f);\n if (index > -1)\n { map[type] = arr.slice(0, index).concat(arr.slice(index + 1)); }\n }\n }\n }\n\n function signal(emitter, type /*, values...*/) {\n var handlers = getHandlers(emitter, type);\n if (!handlers.length) { return }\n var args = Array.prototype.slice.call(arguments, 2);\n for (var i = 0; i < handlers.length; ++i) { handlers[i].apply(null, args); }\n }\n\n // The DOM events that CodeMirror handles can be overridden by\n // registering a (non-DOM) handler on the editor for the event name,\n // and preventDefault-ing the event in that handler.\n function signalDOMEvent(cm, e, override) {\n if (typeof e == \"string\")\n { e = {type: e, preventDefault: function() { this.defaultPrevented = true; }}; }\n signal(cm, override || e.type, cm, e);\n return e_defaultPrevented(e) || e.codemirrorIgnore\n }\n\n function signalCursorActivity(cm) {\n var arr = cm._handlers && cm._handlers.cursorActivity;\n if (!arr) { return }\n var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []);\n for (var i = 0; i < arr.length; ++i) { if (indexOf(set, arr[i]) == -1)\n { set.push(arr[i]); } }\n }\n\n function hasHandler(emitter, type) {\n return getHandlers(emitter, type).length > 0\n }\n\n // Add on and off methods to a constructor's prototype, to make\n // registering events on such objects more convenient.\n function eventMixin(ctor) {\n ctor.prototype.on = function(type, f) {on(this, type, f);};\n ctor.prototype.off = function(type, f) {off(this, type, f);};\n }\n\n // Due to the fact that we still support jurassic IE versions, some\n // compatibility wrappers are needed.\n\n function e_preventDefault(e) {\n if (e.preventDefault) { e.preventDefault(); }\n else { e.returnValue = false; }\n }\n function e_stopPropagation(e) {\n if (e.stopPropagation) { e.stopPropagation(); }\n else { e.cancelBubble = true; }\n }\n function e_defaultPrevented(e) {\n return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false\n }\n function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);}\n\n function e_target(e) {return e.target || e.srcElement}\n function e_button(e) {\n var b = e.which;\n if (b == null) {\n if (e.button & 1) { b = 1; }\n else if (e.button & 2) { b = 3; }\n else if (e.button & 4) { b = 2; }\n }\n if (mac && e.ctrlKey && b == 1) { b = 3; }\n return b\n }\n\n // Detect drag-and-drop\n var dragAndDrop = function() {\n // There is *some* kind of drag-and-drop support in IE6-8, but I\n // couldn't get it to work yet.\n if (ie && ie_version < 9) { return false }\n var div = elt('div');\n return \"draggable\" in div || \"dragDrop\" in div\n }();\n\n var zwspSupported;\n function zeroWidthElement(measure) {\n if (zwspSupported == null) {\n var test = elt(\"span\", \"\\u200b\");\n removeChildrenAndAdd(measure, elt(\"span\", [test, document.createTextNode(\"x\")]));\n if (measure.firstChild.offsetHeight != 0)\n { zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); }\n }\n var node = zwspSupported ? elt(\"span\", \"\\u200b\") :\n elt(\"span\", \"\\u00a0\", null, \"display: inline-block; width: 1px; margin-right: -1px\");\n node.setAttribute(\"cm-text\", \"\");\n return node\n }\n\n // Feature-detect IE's crummy client rect reporting for bidi text\n var badBidiRects;\n function hasBadBidiRects(measure) {\n if (badBidiRects != null) { return badBidiRects }\n var txt = removeChildrenAndAdd(measure, document.createTextNode(\"A\\u062eA\"));\n var r0 = range(txt, 0, 1).getBoundingClientRect();\n var r1 = range(txt, 1, 2).getBoundingClientRect();\n removeChildren(measure);\n if (!r0 || r0.left == r0.right) { return false } // Safari returns null in some cases (#2780)\n return badBidiRects = (r1.right - r0.right < 3)\n }\n\n // See if \"\".split is the broken IE version, if so, provide an\n // alternative way to split lines.\n var splitLinesAuto = \"\\n\\nb\".split(/\\n/).length != 3 ? function (string) {\n var pos = 0, result = [], l = string.length;\n while (pos <= l) {\n var nl = string.indexOf(\"\\n\", pos);\n if (nl == -1) { nl = string.length; }\n var line = string.slice(pos, string.charAt(nl - 1) == \"\\r\" ? nl - 1 : nl);\n var rt = line.indexOf(\"\\r\");\n if (rt != -1) {\n result.push(line.slice(0, rt));\n pos += rt + 1;\n } else {\n result.push(line);\n pos = nl + 1;\n }\n }\n return result\n } : function (string) { return string.split(/\\r\\n?|\\n/); };\n\n var hasSelection = window.getSelection ? function (te) {\n try { return te.selectionStart != te.selectionEnd }\n catch(e) { return false }\n } : function (te) {\n var range;\n try {range = te.ownerDocument.selection.createRange();}\n catch(e) {}\n if (!range || range.parentElement() != te) { return false }\n return range.compareEndPoints(\"StartToEnd\", range) != 0\n };\n\n var hasCopyEvent = (function () {\n var e = elt(\"div\");\n if (\"oncopy\" in e) { return true }\n e.setAttribute(\"oncopy\", \"return;\");\n return typeof e.oncopy == \"function\"\n })();\n\n var badZoomedRects = null;\n function hasBadZoomedRects(measure) {\n if (badZoomedRects != null) { return badZoomedRects }\n var node = removeChildrenAndAdd(measure, elt(\"span\", \"x\"));\n var normal = node.getBoundingClientRect();\n var fromRange = range(node, 0, 1).getBoundingClientRect();\n return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1\n }\n\n // Known modes, by name and by MIME\n var modes = {}, mimeModes = {};\n\n // Extra arguments are stored as the mode's dependencies, which is\n // used by (legacy) mechanisms like loadmode.js to automatically\n // load a mode. (Preferred mechanism is the require/define calls.)\n function defineMode(name, mode) {\n if (arguments.length > 2)\n { mode.dependencies = Array.prototype.slice.call(arguments, 2); }\n modes[name] = mode;\n }\n\n function defineMIME(mime, spec) {\n mimeModes[mime] = spec;\n }\n\n // Given a MIME type, a {name, ...options} config object, or a name\n // string, return a mode config object.\n function resolveMode(spec) {\n if (typeof spec == \"string\" && mimeModes.hasOwnProperty(spec)) {\n spec = mimeModes[spec];\n } else if (spec && typeof spec.name == \"string\" && mimeModes.hasOwnProperty(spec.name)) {\n var found = mimeModes[spec.name];\n if (typeof found == \"string\") { found = {name: found}; }\n spec = createObj(found, spec);\n spec.name = found.name;\n } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+xml$/.test(spec)) {\n return resolveMode(\"application/xml\")\n } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+json$/.test(spec)) {\n return resolveMode(\"application/json\")\n }\n if (typeof spec == \"string\") { return {name: spec} }\n else { return spec || {name: \"null\"} }\n }\n\n // Given a mode spec (anything that resolveMode accepts), find and\n // initialize an actual mode object.\n function getMode(options, spec) {\n spec = resolveMode(spec);\n var mfactory = modes[spec.name];\n if (!mfactory) { return getMode(options, \"text/plain\") }\n var modeObj = mfactory(options, spec);\n if (modeExtensions.hasOwnProperty(spec.name)) {\n var exts = modeExtensions[spec.name];\n for (var prop in exts) {\n if (!exts.hasOwnProperty(prop)) { continue }\n if (modeObj.hasOwnProperty(prop)) { modeObj[\"_\" + prop] = modeObj[prop]; }\n modeObj[prop] = exts[prop];\n }\n }\n modeObj.name = spec.name;\n if (spec.helperType) { modeObj.helperType = spec.helperType; }\n if (spec.modeProps) { for (var prop$1 in spec.modeProps)\n { modeObj[prop$1] = spec.modeProps[prop$1]; } }\n\n return modeObj\n }\n\n // This can be used to attach properties to mode objects from\n // outside the actual mode definition.\n var modeExtensions = {};\n function extendMode(mode, properties) {\n var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {});\n copyObj(properties, exts);\n }\n\n function copyState(mode, state) {\n if (state === true) { return state }\n if (mode.copyState) { return mode.copyState(state) }\n var nstate = {};\n for (var n in state) {\n var val = state[n];\n if (val instanceof Array) { val = val.concat([]); }\n nstate[n] = val;\n }\n return nstate\n }\n\n // Given a mode and a state (for that mode), find the inner mode and\n // state at the position that the state refers to.\n function innerMode(mode, state) {\n var info;\n while (mode.innerMode) {\n info = mode.innerMode(state);\n if (!info || info.mode == mode) { break }\n state = info.state;\n mode = info.mode;\n }\n return info || {mode: mode, state: state}\n }\n\n function startState(mode, a1, a2) {\n return mode.startState ? mode.startState(a1, a2) : true\n }\n\n // STRING STREAM\n\n // Fed to the mode parsers, provides helper functions to make\n // parsers more succinct.\n\n var StringStream = function(string, tabSize, lineOracle) {\n this.pos = this.start = 0;\n this.string = string;\n this.tabSize = tabSize || 8;\n this.lastColumnPos = this.lastColumnValue = 0;\n this.lineStart = 0;\n this.lineOracle = lineOracle;\n };\n\n StringStream.prototype.eol = function () {return this.pos >= this.string.length};\n StringStream.prototype.sol = function () {return this.pos == this.lineStart};\n StringStream.prototype.peek = function () {return this.string.charAt(this.pos) || undefined};\n StringStream.prototype.next = function () {\n if (this.pos < this.string.length)\n { return this.string.charAt(this.pos++) }\n };\n StringStream.prototype.eat = function (match) {\n var ch = this.string.charAt(this.pos);\n var ok;\n if (typeof match == \"string\") { ok = ch == match; }\n else { ok = ch && (match.test ? match.test(ch) : match(ch)); }\n if (ok) {++this.pos; return ch}\n };\n StringStream.prototype.eatWhile = function (match) {\n var start = this.pos;\n while (this.eat(match)){}\n return this.pos > start\n };\n StringStream.prototype.eatSpace = function () {\n var start = this.pos;\n while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos))) { ++this.pos; }\n return this.pos > start\n };\n StringStream.prototype.skipToEnd = function () {this.pos = this.string.length;};\n StringStream.prototype.skipTo = function (ch) {\n var found = this.string.indexOf(ch, this.pos);\n if (found > -1) {this.pos = found; return true}\n };\n StringStream.prototype.backUp = function (n) {this.pos -= n;};\n StringStream.prototype.column = function () {\n if (this.lastColumnPos < this.start) {\n this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);\n this.lastColumnPos = this.start;\n }\n return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n };\n StringStream.prototype.indentation = function () {\n return countColumn(this.string, null, this.tabSize) -\n (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n };\n StringStream.prototype.match = function (pattern, consume, caseInsensitive) {\n if (typeof pattern == \"string\") {\n var cased = function (str) { return caseInsensitive ? str.toLowerCase() : str; };\n var substr = this.string.substr(this.pos, pattern.length);\n if (cased(substr) == cased(pattern)) {\n if (consume !== false) { this.pos += pattern.length; }\n return true\n }\n } else {\n var match = this.string.slice(this.pos).match(pattern);\n if (match && match.index > 0) { return null }\n if (match && consume !== false) { this.pos += match[0].length; }\n return match\n }\n };\n StringStream.prototype.current = function (){return this.string.slice(this.start, this.pos)};\n StringStream.prototype.hideFirstChars = function (n, inner) {\n this.lineStart += n;\n try { return inner() }\n finally { this.lineStart -= n; }\n };\n StringStream.prototype.lookAhead = function (n) {\n var oracle = this.lineOracle;\n return oracle && oracle.lookAhead(n)\n };\n StringStream.prototype.baseToken = function () {\n var oracle = this.lineOracle;\n return oracle && oracle.baseToken(this.pos)\n };\n\n // Find the line object corresponding to the given line number.\n function getLine(doc, n) {\n n -= doc.first;\n if (n < 0 || n >= doc.size) { throw new Error(\"There is no line \" + (n + doc.first) + \" in the document.\") }\n var chunk = doc;\n while (!chunk.lines) {\n for (var i = 0;; ++i) {\n var child = chunk.children[i], sz = child.chunkSize();\n if (n < sz) { chunk = child; break }\n n -= sz;\n }\n }\n return chunk.lines[n]\n }\n\n // Get the part of a document between two positions, as an array of\n // strings.\n function getBetween(doc, start, end) {\n var out = [], n = start.line;\n doc.iter(start.line, end.line + 1, function (line) {\n var text = line.text;\n if (n == end.line) { text = text.slice(0, end.ch); }\n if (n == start.line) { text = text.slice(start.ch); }\n out.push(text);\n ++n;\n });\n return out\n }\n // Get the lines between from and to, as array of strings.\n function getLines(doc, from, to) {\n var out = [];\n doc.iter(from, to, function (line) { out.push(line.text); }); // iter aborts when callback returns truthy value\n return out\n }\n\n // Update the height of a line, propagating the height change\n // upwards to parent nodes.\n function updateLineHeight(line, height) {\n var diff = height - line.height;\n if (diff) { for (var n = line; n; n = n.parent) { n.height += diff; } }\n }\n\n // Given a line object, find its line number by walking up through\n // its parent links.\n function lineNo(line) {\n if (line.parent == null) { return null }\n var cur = line.parent, no = indexOf(cur.lines, line);\n for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {\n for (var i = 0;; ++i) {\n if (chunk.children[i] == cur) { break }\n no += chunk.children[i].chunkSize();\n }\n }\n return no + cur.first\n }\n\n // Find the line at the given vertical position, using the height\n // information in the document tree.\n function lineAtHeight(chunk, h) {\n var n = chunk.first;\n outer: do {\n for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) {\n var child = chunk.children[i$1], ch = child.height;\n if (h < ch) { chunk = child; continue outer }\n h -= ch;\n n += child.chunkSize();\n }\n return n\n } while (!chunk.lines)\n var i = 0;\n for (; i < chunk.lines.length; ++i) {\n var line = chunk.lines[i], lh = line.height;\n if (h < lh) { break }\n h -= lh;\n }\n return n + i\n }\n\n function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size}\n\n function lineNumberFor(options, i) {\n return String(options.lineNumberFormatter(i + options.firstLineNumber))\n }\n\n // A Pos instance represents a position within the text.\n function Pos(line, ch, sticky) {\n if ( sticky === void 0 ) sticky = null;\n\n if (!(this instanceof Pos)) { return new Pos(line, ch, sticky) }\n this.line = line;\n this.ch = ch;\n this.sticky = sticky;\n }\n\n // Compare two positions, return 0 if they are the same, a negative\n // number when a is less, and a positive number otherwise.\n function cmp(a, b) { return a.line - b.line || a.ch - b.ch }\n\n function equalCursorPos(a, b) { return a.sticky == b.sticky && cmp(a, b) == 0 }\n\n function copyPos(x) {return Pos(x.line, x.ch)}\n function maxPos(a, b) { return cmp(a, b) < 0 ? b : a }\n function minPos(a, b) { return cmp(a, b) < 0 ? a : b }\n\n // Most of the external API clips given positions to make sure they\n // actually exist within the document.\n function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1))}\n function clipPos(doc, pos) {\n if (pos.line < doc.first) { return Pos(doc.first, 0) }\n var last = doc.first + doc.size - 1;\n if (pos.line > last) { return Pos(last, getLine(doc, last).text.length) }\n return clipToLen(pos, getLine(doc, pos.line).text.length)\n }\n function clipToLen(pos, linelen) {\n var ch = pos.ch;\n if (ch == null || ch > linelen) { return Pos(pos.line, linelen) }\n else if (ch < 0) { return Pos(pos.line, 0) }\n else { return pos }\n }\n function clipPosArray(doc, array) {\n var out = [];\n for (var i = 0; i < array.length; i++) { out[i] = clipPos(doc, array[i]); }\n return out\n }\n\n var SavedContext = function(state, lookAhead) {\n this.state = state;\n this.lookAhead = lookAhead;\n };\n\n var Context = function(doc, state, line, lookAhead) {\n this.state = state;\n this.doc = doc;\n this.line = line;\n this.maxLookAhead = lookAhead || 0;\n this.baseTokens = null;\n this.baseTokenPos = 1;\n };\n\n Context.prototype.lookAhead = function (n) {\n var line = this.doc.getLine(this.line + n);\n if (line != null && n > this.maxLookAhead) { this.maxLookAhead = n; }\n return line\n };\n\n Context.prototype.baseToken = function (n) {\n if (!this.baseTokens) { return null }\n while (this.baseTokens[this.baseTokenPos] <= n)\n { this.baseTokenPos += 2; }\n var type = this.baseTokens[this.baseTokenPos + 1];\n return {type: type && type.replace(/( |^)overlay .*/, \"\"),\n size: this.baseTokens[this.baseTokenPos] - n}\n };\n\n Context.prototype.nextLine = function () {\n this.line++;\n if (this.maxLookAhead > 0) { this.maxLookAhead--; }\n };\n\n Context.fromSaved = function (doc, saved, line) {\n if (saved instanceof SavedContext)\n { return new Context(doc, copyState(doc.mode, saved.state), line, saved.lookAhead) }\n else\n { return new Context(doc, copyState(doc.mode, saved), line) }\n };\n\n Context.prototype.save = function (copy) {\n var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state;\n return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state\n };\n\n\n // Compute a style array (an array starting with a mode generation\n // -- for invalidation -- followed by pairs of end positions and\n // style strings), which is used to highlight the tokens on the\n // line.\n function highlightLine(cm, line, context, forceToEnd) {\n // A styles array always starts with a number identifying the\n // mode/overlays that it is based on (for easy invalidation).\n var st = [cm.state.modeGen], lineClasses = {};\n // Compute the base array of styles\n runMode(cm, line.text, cm.doc.mode, context, function (end, style) { return st.push(end, style); },\n lineClasses, forceToEnd);\n var state = context.state;\n\n // Run overlays, adjust style array.\n var loop = function ( o ) {\n context.baseTokens = st;\n var overlay = cm.state.overlays[o], i = 1, at = 0;\n context.state = true;\n runMode(cm, line.text, overlay.mode, context, function (end, style) {\n var start = i;\n // Ensure there's a token end at the current position, and that i points at it\n while (at < end) {\n var i_end = st[i];\n if (i_end > end)\n { st.splice(i, 1, end, st[i+1], i_end); }\n i += 2;\n at = Math.min(end, i_end);\n }\n if (!style) { return }\n if (overlay.opaque) {\n st.splice(start, i - start, end, \"overlay \" + style);\n i = start + 2;\n } else {\n for (; start < i; start += 2) {\n var cur = st[start+1];\n st[start+1] = (cur ? cur + \" \" : \"\") + \"overlay \" + style;\n }\n }\n }, lineClasses);\n context.state = state;\n context.baseTokens = null;\n context.baseTokenPos = 1;\n };\n\n for (var o = 0; o < cm.state.overlays.length; ++o) loop( o );\n\n return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null}\n }\n\n function getLineStyles(cm, line, updateFrontier) {\n if (!line.styles || line.styles[0] != cm.state.modeGen) {\n var context = getContextBefore(cm, lineNo(line));\n var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state);\n var result = highlightLine(cm, line, context);\n if (resetState) { context.state = resetState; }\n line.stateAfter = context.save(!resetState);\n line.styles = result.styles;\n if (result.classes) { line.styleClasses = result.classes; }\n else if (line.styleClasses) { line.styleClasses = null; }\n if (updateFrontier === cm.doc.highlightFrontier)\n { cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier); }\n }\n return line.styles\n }\n\n function getContextBefore(cm, n, precise) {\n var doc = cm.doc, display = cm.display;\n if (!doc.mode.startState) { return new Context(doc, true, n) }\n var start = findStartLine(cm, n, precise);\n var saved = start > doc.first && getLine(doc, start - 1).stateAfter;\n var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start);\n\n doc.iter(start, n, function (line) {\n processLine(cm, line.text, context);\n var pos = context.line;\n line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null;\n context.nextLine();\n });\n if (precise) { doc.modeFrontier = context.line; }\n return context\n }\n\n // Lightweight form of highlight -- proceed over this line and\n // update state, but don't save a style array. Used for lines that\n // aren't currently visible.\n function processLine(cm, text, context, startAt) {\n var mode = cm.doc.mode;\n var stream = new StringStream(text, cm.options.tabSize, context);\n stream.start = stream.pos = startAt || 0;\n if (text == \"\") { callBlankLine(mode, context.state); }\n while (!stream.eol()) {\n readToken(mode, stream, context.state);\n stream.start = stream.pos;\n }\n }\n\n function callBlankLine(mode, state) {\n if (mode.blankLine) { return mode.blankLine(state) }\n if (!mode.innerMode) { return }\n var inner = innerMode(mode, state);\n if (inner.mode.blankLine) { return inner.mode.blankLine(inner.state) }\n }\n\n function readToken(mode, stream, state, inner) {\n for (var i = 0; i < 10; i++) {\n if (inner) { inner[0] = innerMode(mode, state).mode; }\n var style = mode.token(stream, state);\n if (stream.pos > stream.start) { return style }\n }\n throw new Error(\"Mode \" + mode.name + \" failed to advance stream.\")\n }\n\n var Token = function(stream, type, state) {\n this.start = stream.start; this.end = stream.pos;\n this.string = stream.current();\n this.type = type || null;\n this.state = state;\n };\n\n // Utility for getTokenAt and getLineTokens\n function takeToken(cm, pos, precise, asArray) {\n var doc = cm.doc, mode = doc.mode, style;\n pos = clipPos(doc, pos);\n var line = getLine(doc, pos.line), context = getContextBefore(cm, pos.line, precise);\n var stream = new StringStream(line.text, cm.options.tabSize, context), tokens;\n if (asArray) { tokens = []; }\n while ((asArray || stream.pos < pos.ch) && !stream.eol()) {\n stream.start = stream.pos;\n style = readToken(mode, stream, context.state);\n if (asArray) { tokens.push(new Token(stream, style, copyState(doc.mode, context.state))); }\n }\n return asArray ? tokens : new Token(stream, style, context.state)\n }\n\n function extractLineClasses(type, output) {\n if (type) { for (;;) {\n var lineClass = type.match(/(?:^|\\s+)line-(background-)?(\\S+)/);\n if (!lineClass) { break }\n type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length);\n var prop = lineClass[1] ? \"bgClass\" : \"textClass\";\n if (output[prop] == null)\n { output[prop] = lineClass[2]; }\n else if (!(new RegExp(\"(?:^|\\\\s)\" + lineClass[2] + \"(?:$|\\\\s)\")).test(output[prop]))\n { output[prop] += \" \" + lineClass[2]; }\n } }\n return type\n }\n\n // Run the given mode's parser over a line, calling f for each token.\n function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) {\n var flattenSpans = mode.flattenSpans;\n if (flattenSpans == null) { flattenSpans = cm.options.flattenSpans; }\n var curStart = 0, curStyle = null;\n var stream = new StringStream(text, cm.options.tabSize, context), style;\n var inner = cm.options.addModeClass && [null];\n if (text == \"\") { extractLineClasses(callBlankLine(mode, context.state), lineClasses); }\n while (!stream.eol()) {\n if (stream.pos > cm.options.maxHighlightLength) {\n flattenSpans = false;\n if (forceToEnd) { processLine(cm, text, context, stream.pos); }\n stream.pos = text.length;\n style = null;\n } else {\n style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses);\n }\n if (inner) {\n var mName = inner[0].name;\n if (mName) { style = \"m-\" + (style ? mName + \" \" + style : mName); }\n }\n if (!flattenSpans || curStyle != style) {\n while (curStart < stream.start) {\n curStart = Math.min(stream.start, curStart + 5000);\n f(curStart, curStyle);\n }\n curStyle = style;\n }\n stream.start = stream.pos;\n }\n while (curStart < stream.pos) {\n // Webkit seems to refuse to render text nodes longer than 57444\n // characters, and returns inaccurate measurements in nodes\n // starting around 5000 chars.\n var pos = Math.min(stream.pos, curStart + 5000);\n f(pos, curStyle);\n curStart = pos;\n }\n }\n\n // Finds the line to start with when starting a parse. Tries to\n // find a line with a stateAfter, so that it can start with a\n // valid state. If that fails, it returns the line with the\n // smallest indentation, which tends to need the least context to\n // parse correctly.\n function findStartLine(cm, n, precise) {\n var minindent, minline, doc = cm.doc;\n var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100);\n for (var search = n; search > lim; --search) {\n if (search <= doc.first) { return doc.first }\n var line = getLine(doc, search - 1), after = line.stateAfter;\n if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier))\n { return search }\n var indented = countColumn(line.text, null, cm.options.tabSize);\n if (minline == null || minindent > indented) {\n minline = search - 1;\n minindent = indented;\n }\n }\n return minline\n }\n\n function retreatFrontier(doc, n) {\n doc.modeFrontier = Math.min(doc.modeFrontier, n);\n if (doc.highlightFrontier < n - 10) { return }\n var start = doc.first;\n for (var line = n - 1; line > start; line--) {\n var saved = getLine(doc, line).stateAfter;\n // change is on 3\n // state on line 1 looked ahead 2 -- so saw 3\n // test 1 + 2 < 3 should cover this\n if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) {\n start = line + 1;\n break\n }\n }\n doc.highlightFrontier = Math.min(doc.highlightFrontier, start);\n }\n\n // Optimize some code when these features are not used.\n var sawReadOnlySpans = false, sawCollapsedSpans = false;\n\n function seeReadOnlySpans() {\n sawReadOnlySpans = true;\n }\n\n function seeCollapsedSpans() {\n sawCollapsedSpans = true;\n }\n\n // TEXTMARKER SPANS\n\n function MarkedSpan(marker, from, to) {\n this.marker = marker;\n this.from = from; this.to = to;\n }\n\n // Search an array of spans for a span matching the given marker.\n function getMarkedSpanFor(spans, marker) {\n if (spans) { for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n if (span.marker == marker) { return span }\n } }\n }\n\n // Remove a span from an array, returning undefined if no spans are\n // left (we don't store arrays for lines without spans).\n function removeMarkedSpan(spans, span) {\n var r;\n for (var i = 0; i < spans.length; ++i)\n { if (spans[i] != span) { (r || (r = [])).push(spans[i]); } }\n return r\n }\n\n // Add a span to a line.\n function addMarkedSpan(line, span, op) {\n var inThisOp = op && window.WeakSet && (op.markedSpans || (op.markedSpans = new WeakSet));\n if (inThisOp && line.markedSpans && inThisOp.has(line.markedSpans)) {\n line.markedSpans.push(span);\n } else {\n line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span];\n if (inThisOp) { inThisOp.add(line.markedSpans); }\n }\n span.marker.attachLine(line);\n }\n\n // Used for the algorithm that adjusts markers for a change in the\n // document. These functions cut an array of spans at a given\n // character position, returning an array of remaining chunks (or\n // undefined if nothing remains).\n function markedSpansBefore(old, startCh, isInsert) {\n var nw;\n if (old) { for (var i = 0; i < old.length; ++i) {\n var span = old[i], marker = span.marker;\n var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh);\n if (startsBefore || span.from == startCh && marker.type == \"bookmark\" && (!isInsert || !span.marker.insertLeft)) {\n var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh)\n ;(nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to));\n }\n } }\n return nw\n }\n function markedSpansAfter(old, endCh, isInsert) {\n var nw;\n if (old) { for (var i = 0; i < old.length; ++i) {\n var span = old[i], marker = span.marker;\n var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh);\n if (endsAfter || span.from == endCh && marker.type == \"bookmark\" && (!isInsert || span.marker.insertLeft)) {\n var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh)\n ;(nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh,\n span.to == null ? null : span.to - endCh));\n }\n } }\n return nw\n }\n\n // Given a change object, compute the new set of marker spans that\n // cover the line in which the change took place. Removes spans\n // entirely within the change, reconnects spans belonging to the\n // same marker that appear on both sides of the change, and cuts off\n // spans partially within the change. Returns an array of span\n // arrays with one element for each line in (after) the change.\n function stretchSpansOverChange(doc, change) {\n if (change.full) { return null }\n var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans;\n var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans;\n if (!oldFirst && !oldLast) { return null }\n\n var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0;\n // Get the spans that 'stick out' on both sides\n var first = markedSpansBefore(oldFirst, startCh, isInsert);\n var last = markedSpansAfter(oldLast, endCh, isInsert);\n\n // Next, merge those two ends\n var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0);\n if (first) {\n // Fix up .to properties of first\n for (var i = 0; i < first.length; ++i) {\n var span = first[i];\n if (span.to == null) {\n var found = getMarkedSpanFor(last, span.marker);\n if (!found) { span.to = startCh; }\n else if (sameLine) { span.to = found.to == null ? null : found.to + offset; }\n }\n }\n }\n if (last) {\n // Fix up .from in last (or move them into first in case of sameLine)\n for (var i$1 = 0; i$1 < last.length; ++i$1) {\n var span$1 = last[i$1];\n if (span$1.to != null) { span$1.to += offset; }\n if (span$1.from == null) {\n var found$1 = getMarkedSpanFor(first, span$1.marker);\n if (!found$1) {\n span$1.from = offset;\n if (sameLine) { (first || (first = [])).push(span$1); }\n }\n } else {\n span$1.from += offset;\n if (sameLine) { (first || (first = [])).push(span$1); }\n }\n }\n }\n // Make sure we didn't create any zero-length spans\n if (first) { first = clearEmptySpans(first); }\n if (last && last != first) { last = clearEmptySpans(last); }\n\n var newMarkers = [first];\n if (!sameLine) {\n // Fill gap with whole-line-spans\n var gap = change.text.length - 2, gapMarkers;\n if (gap > 0 && first)\n { for (var i$2 = 0; i$2 < first.length; ++i$2)\n { if (first[i$2].to == null)\n { (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null)); } } }\n for (var i$3 = 0; i$3 < gap; ++i$3)\n { newMarkers.push(gapMarkers); }\n newMarkers.push(last);\n }\n return newMarkers\n }\n\n // Remove spans that are empty and don't have a clearWhenEmpty\n // option of false.\n function clearEmptySpans(spans) {\n for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false)\n { spans.splice(i--, 1); }\n }\n if (!spans.length) { return null }\n return spans\n }\n\n // Used to 'clip' out readOnly ranges when making a change.\n function removeReadOnlyRanges(doc, from, to) {\n var markers = null;\n doc.iter(from.line, to.line + 1, function (line) {\n if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {\n var mark = line.markedSpans[i].marker;\n if (mark.readOnly && (!markers || indexOf(markers, mark) == -1))\n { (markers || (markers = [])).push(mark); }\n } }\n });\n if (!markers) { return null }\n var parts = [{from: from, to: to}];\n for (var i = 0; i < markers.length; ++i) {\n var mk = markers[i], m = mk.find(0);\n for (var j = 0; j < parts.length; ++j) {\n var p = parts[j];\n if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { continue }\n var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to);\n if (dfrom < 0 || !mk.inclusiveLeft && !dfrom)\n { newParts.push({from: p.from, to: m.from}); }\n if (dto > 0 || !mk.inclusiveRight && !dto)\n { newParts.push({from: m.to, to: p.to}); }\n parts.splice.apply(parts, newParts);\n j += newParts.length - 3;\n }\n }\n return parts\n }\n\n // Connect or disconnect spans from a line.\n function detachMarkedSpans(line) {\n var spans = line.markedSpans;\n if (!spans) { return }\n for (var i = 0; i < spans.length; ++i)\n { spans[i].marker.detachLine(line); }\n line.markedSpans = null;\n }\n function attachMarkedSpans(line, spans) {\n if (!spans) { return }\n for (var i = 0; i < spans.length; ++i)\n { spans[i].marker.attachLine(line); }\n line.markedSpans = spans;\n }\n\n // Helpers used when computing which overlapping collapsed span\n // counts as the larger one.\n function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0 }\n function extraRight(marker) { return marker.inclusiveRight ? 1 : 0 }\n\n // Returns a number indicating which of two overlapping collapsed\n // spans is larger (and thus includes the other). Falls back to\n // comparing ids when the spans cover exactly the same range.\n function compareCollapsedMarkers(a, b) {\n var lenDiff = a.lines.length - b.lines.length;\n if (lenDiff != 0) { return lenDiff }\n var aPos = a.find(), bPos = b.find();\n var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b);\n if (fromCmp) { return -fromCmp }\n var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b);\n if (toCmp) { return toCmp }\n return b.id - a.id\n }\n\n // Find out whether a line ends or starts in a collapsed span. If\n // so, return the marker for that span.\n function collapsedSpanAtSide(line, start) {\n var sps = sawCollapsedSpans && line.markedSpans, found;\n if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {\n sp = sps[i];\n if (sp.marker.collapsed && (start ? sp.from : sp.to) == null &&\n (!found || compareCollapsedMarkers(found, sp.marker) < 0))\n { found = sp.marker; }\n } }\n return found\n }\n function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true) }\n function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false) }\n\n function collapsedSpanAround(line, ch) {\n var sps = sawCollapsedSpans && line.markedSpans, found;\n if (sps) { for (var i = 0; i < sps.length; ++i) {\n var sp = sps[i];\n if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) &&\n (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { found = sp.marker; }\n } }\n return found\n }\n\n // Test whether there exists a collapsed span that partially\n // overlaps (covers the start or end, but not both) of a new span.\n // Such overlap is not allowed.\n function conflictingCollapsedRange(doc, lineNo, from, to, marker) {\n var line = getLine(doc, lineNo);\n var sps = sawCollapsedSpans && line.markedSpans;\n if (sps) { for (var i = 0; i < sps.length; ++i) {\n var sp = sps[i];\n if (!sp.marker.collapsed) { continue }\n var found = sp.marker.find(0);\n var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker);\n var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker);\n if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) { continue }\n if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) ||\n fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0))\n { return true }\n } }\n }\n\n // A visual line is a line as drawn on the screen. Folding, for\n // example, can cause multiple logical lines to appear on the same\n // visual line. This finds the start of the visual line that the\n // given line is part of (usually that is the line itself).\n function visualLine(line) {\n var merged;\n while (merged = collapsedSpanAtStart(line))\n { line = merged.find(-1, true).line; }\n return line\n }\n\n function visualLineEnd(line) {\n var merged;\n while (merged = collapsedSpanAtEnd(line))\n { line = merged.find(1, true).line; }\n return line\n }\n\n // Returns an array of logical lines that continue the visual line\n // started by the argument, or undefined if there are no such lines.\n function visualLineContinued(line) {\n var merged, lines;\n while (merged = collapsedSpanAtEnd(line)) {\n line = merged.find(1, true).line\n ;(lines || (lines = [])).push(line);\n }\n return lines\n }\n\n // Get the line number of the start of the visual line that the\n // given line number is part of.\n function visualLineNo(doc, lineN) {\n var line = getLine(doc, lineN), vis = visualLine(line);\n if (line == vis) { return lineN }\n return lineNo(vis)\n }\n\n // Get the line number of the start of the next visual line after\n // the given line.\n function visualLineEndNo(doc, lineN) {\n if (lineN > doc.lastLine()) { return lineN }\n var line = getLine(doc, lineN), merged;\n if (!lineIsHidden(doc, line)) { return lineN }\n while (merged = collapsedSpanAtEnd(line))\n { line = merged.find(1, true).line; }\n return lineNo(line) + 1\n }\n\n // Compute whether a line is hidden. Lines count as hidden when they\n // are part of a visual line that starts with another line, or when\n // they are entirely covered by collapsed, non-widget span.\n function lineIsHidden(doc, line) {\n var sps = sawCollapsedSpans && line.markedSpans;\n if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {\n sp = sps[i];\n if (!sp.marker.collapsed) { continue }\n if (sp.from == null) { return true }\n if (sp.marker.widgetNode) { continue }\n if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp))\n { return true }\n } }\n }\n function lineIsHiddenInner(doc, line, span) {\n if (span.to == null) {\n var end = span.marker.find(1, true);\n return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker))\n }\n if (span.marker.inclusiveRight && span.to == line.text.length)\n { return true }\n for (var sp = (void 0), i = 0; i < line.markedSpans.length; ++i) {\n sp = line.markedSpans[i];\n if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to &&\n (sp.to == null || sp.to != span.from) &&\n (sp.marker.inclusiveLeft || span.marker.inclusiveRight) &&\n lineIsHiddenInner(doc, line, sp)) { return true }\n }\n }\n\n // Find the height above the given line.\n function heightAtLine(lineObj) {\n lineObj = visualLine(lineObj);\n\n var h = 0, chunk = lineObj.parent;\n for (var i = 0; i < chunk.lines.length; ++i) {\n var line = chunk.lines[i];\n if (line == lineObj) { break }\n else { h += line.height; }\n }\n for (var p = chunk.parent; p; chunk = p, p = chunk.parent) {\n for (var i$1 = 0; i$1 < p.children.length; ++i$1) {\n var cur = p.children[i$1];\n if (cur == chunk) { break }\n else { h += cur.height; }\n }\n }\n return h\n }\n\n // Compute the character length of a line, taking into account\n // collapsed ranges (see markText) that might hide parts, and join\n // other lines onto it.\n function lineLength(line) {\n if (line.height == 0) { return 0 }\n var len = line.text.length, merged, cur = line;\n while (merged = collapsedSpanAtStart(cur)) {\n var found = merged.find(0, true);\n cur = found.from.line;\n len += found.from.ch - found.to.ch;\n }\n cur = line;\n while (merged = collapsedSpanAtEnd(cur)) {\n var found$1 = merged.find(0, true);\n len -= cur.text.length - found$1.from.ch;\n cur = found$1.to.line;\n len += cur.text.length - found$1.to.ch;\n }\n return len\n }\n\n // Find the longest line in the document.\n function findMaxLine(cm) {\n var d = cm.display, doc = cm.doc;\n d.maxLine = getLine(doc, doc.first);\n d.maxLineLength = lineLength(d.maxLine);\n d.maxLineChanged = true;\n doc.iter(function (line) {\n var len = lineLength(line);\n if (len > d.maxLineLength) {\n d.maxLineLength = len;\n d.maxLine = line;\n }\n });\n }\n\n // LINE DATA STRUCTURE\n\n // Line objects. These hold state related to a line, including\n // highlighting info (the styles array).\n var Line = function(text, markedSpans, estimateHeight) {\n this.text = text;\n attachMarkedSpans(this, markedSpans);\n this.height = estimateHeight ? estimateHeight(this) : 1;\n };\n\n Line.prototype.lineNo = function () { return lineNo(this) };\n eventMixin(Line);\n\n // Change the content (text, markers) of a line. Automatically\n // invalidates cached information and tries to re-estimate the\n // line's height.\n function updateLine(line, text, markedSpans, estimateHeight) {\n line.text = text;\n if (line.stateAfter) { line.stateAfter = null; }\n if (line.styles) { line.styles = null; }\n if (line.order != null) { line.order = null; }\n detachMarkedSpans(line);\n attachMarkedSpans(line, markedSpans);\n var estHeight = estimateHeight ? estimateHeight(line) : 1;\n if (estHeight != line.height) { updateLineHeight(line, estHeight); }\n }\n\n // Detach a line from the document tree and its markers.\n function cleanUpLine(line) {\n line.parent = null;\n detachMarkedSpans(line);\n }\n\n // Convert a style as returned by a mode (either null, or a string\n // containing one or more styles) to a CSS style. This is cached,\n // and also looks for line-wide styles.\n var styleToClassCache = {}, styleToClassCacheWithMode = {};\n function interpretTokenStyle(style, options) {\n if (!style || /^\\s*$/.test(style)) { return null }\n var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache;\n return cache[style] ||\n (cache[style] = style.replace(/\\S+/g, \"cm-$&\"))\n }\n\n // Render the DOM representation of the text of a line. Also builds\n // up a 'line map', which points at the DOM nodes that represent\n // specific stretches of text, and is used by the measuring code.\n // The returned object contains the DOM node, this map, and\n // information about line-wide styles that were set by the mode.\n function buildLineContent(cm, lineView) {\n // The padding-right forces the element to have a 'border', which\n // is needed on Webkit to be able to get line-level bounding\n // rectangles for it (in measureChar).\n var content = eltP(\"span\", null, null, webkit ? \"padding-right: .1px\" : null);\n var builder = {pre: eltP(\"pre\", [content], \"CodeMirror-line\"), content: content,\n col: 0, pos: 0, cm: cm,\n trailingSpace: false,\n splitSpaces: cm.getOption(\"lineWrapping\")};\n lineView.measure = {};\n\n // Iterate over the logical lines that make up this visual line.\n for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) {\n var line = i ? lineView.rest[i - 1] : lineView.line, order = (void 0);\n builder.pos = 0;\n builder.addToken = buildToken;\n // Optionally wire in some hacks into the token-rendering\n // algorithm, to deal with browser quirks.\n if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction)))\n { builder.addToken = buildTokenBadBidi(builder.addToken, order); }\n builder.map = [];\n var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line);\n insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate));\n if (line.styleClasses) {\n if (line.styleClasses.bgClass)\n { builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || \"\"); }\n if (line.styleClasses.textClass)\n { builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || \"\"); }\n }\n\n // Ensure at least a single node is present, for measuring.\n if (builder.map.length == 0)\n { builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); }\n\n // Store the map and a cache object for the current logical line\n if (i == 0) {\n lineView.measure.map = builder.map;\n lineView.measure.cache = {};\n } else {\n (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map)\n ;(lineView.measure.caches || (lineView.measure.caches = [])).push({});\n }\n }\n\n // See issue #2901\n if (webkit) {\n var last = builder.content.lastChild;\n if (/\\bcm-tab\\b/.test(last.className) || (last.querySelector && last.querySelector(\".cm-tab\")))\n { builder.content.className = \"cm-tab-wrap-hack\"; }\n }\n\n signal(cm, \"renderLine\", cm, lineView.line, builder.pre);\n if (builder.pre.className)\n { builder.textClass = joinClasses(builder.pre.className, builder.textClass || \"\"); }\n\n return builder\n }\n\n function defaultSpecialCharPlaceholder(ch) {\n var token = elt(\"span\", \"\\u2022\", \"cm-invalidchar\");\n token.title = \"\\\\u\" + ch.charCodeAt(0).toString(16);\n token.setAttribute(\"aria-label\", token.title);\n return token\n }\n\n // Build up the DOM representation for a single token, and add it to\n // the line map. Takes care to render special characters separately.\n function buildToken(builder, text, style, startStyle, endStyle, css, attributes) {\n if (!text) { return }\n var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text;\n var special = builder.cm.state.specialChars, mustWrap = false;\n var content;\n if (!special.test(text)) {\n builder.col += text.length;\n content = document.createTextNode(displayText);\n builder.map.push(builder.pos, builder.pos + text.length, content);\n if (ie && ie_version < 9) { mustWrap = true; }\n builder.pos += text.length;\n } else {\n content = document.createDocumentFragment();\n var pos = 0;\n while (true) {\n special.lastIndex = pos;\n var m = special.exec(text);\n var skipped = m ? m.index - pos : text.length - pos;\n if (skipped) {\n var txt = document.createTextNode(displayText.slice(pos, pos + skipped));\n if (ie && ie_version < 9) { content.appendChild(elt(\"span\", [txt])); }\n else { content.appendChild(txt); }\n builder.map.push(builder.pos, builder.pos + skipped, txt);\n builder.col += skipped;\n builder.pos += skipped;\n }\n if (!m) { break }\n pos += skipped + 1;\n var txt$1 = (void 0);\n if (m[0] == \"\\t\") {\n var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize;\n txt$1 = content.appendChild(elt(\"span\", spaceStr(tabWidth), \"cm-tab\"));\n txt$1.setAttribute(\"role\", \"presentation\");\n txt$1.setAttribute(\"cm-text\", \"\\t\");\n builder.col += tabWidth;\n } else if (m[0] == \"\\r\" || m[0] == \"\\n\") {\n txt$1 = content.appendChild(elt(\"span\", m[0] == \"\\r\" ? \"\\u240d\" : \"\\u2424\", \"cm-invalidchar\"));\n txt$1.setAttribute(\"cm-text\", m[0]);\n builder.col += 1;\n } else {\n txt$1 = builder.cm.options.specialCharPlaceholder(m[0]);\n txt$1.setAttribute(\"cm-text\", m[0]);\n if (ie && ie_version < 9) { content.appendChild(elt(\"span\", [txt$1])); }\n else { content.appendChild(txt$1); }\n builder.col += 1;\n }\n builder.map.push(builder.pos, builder.pos + 1, txt$1);\n builder.pos++;\n }\n }\n builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32;\n if (style || startStyle || endStyle || mustWrap || css || attributes) {\n var fullStyle = style || \"\";\n if (startStyle) { fullStyle += startStyle; }\n if (endStyle) { fullStyle += endStyle; }\n var token = elt(\"span\", [content], fullStyle, css);\n if (attributes) {\n for (var attr in attributes) { if (attributes.hasOwnProperty(attr) && attr != \"style\" && attr != \"class\")\n { token.setAttribute(attr, attributes[attr]); } }\n }\n return builder.content.appendChild(token)\n }\n builder.content.appendChild(content);\n }\n\n // Change some spaces to NBSP to prevent the browser from collapsing\n // trailing spaces at the end of a line when rendering text (issue #1362).\n function splitSpaces(text, trailingBefore) {\n if (text.length > 1 && !/ /.test(text)) { return text }\n var spaceBefore = trailingBefore, result = \"\";\n for (var i = 0; i < text.length; i++) {\n var ch = text.charAt(i);\n if (ch == \" \" && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32))\n { ch = \"\\u00a0\"; }\n result += ch;\n spaceBefore = ch == \" \";\n }\n return result\n }\n\n // Work around nonsense dimensions being reported for stretches of\n // right-to-left text.\n function buildTokenBadBidi(inner, order) {\n return function (builder, text, style, startStyle, endStyle, css, attributes) {\n style = style ? style + \" cm-force-border\" : \"cm-force-border\";\n var start = builder.pos, end = start + text.length;\n for (;;) {\n // Find the part that overlaps with the start of this text\n var part = (void 0);\n for (var i = 0; i < order.length; i++) {\n part = order[i];\n if (part.to > start && part.from <= start) { break }\n }\n if (part.to >= end) { return inner(builder, text, style, startStyle, endStyle, css, attributes) }\n inner(builder, text.slice(0, part.to - start), style, startStyle, null, css, attributes);\n startStyle = null;\n text = text.slice(part.to - start);\n start = part.to;\n }\n }\n }\n\n function buildCollapsedSpan(builder, size, marker, ignoreWidget) {\n var widget = !ignoreWidget && marker.widgetNode;\n if (widget) { builder.map.push(builder.pos, builder.pos + size, widget); }\n if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) {\n if (!widget)\n { widget = builder.content.appendChild(document.createElement(\"span\")); }\n widget.setAttribute(\"cm-marker\", marker.id);\n }\n if (widget) {\n builder.cm.display.input.setUneditable(widget);\n builder.content.appendChild(widget);\n }\n builder.pos += size;\n builder.trailingSpace = false;\n }\n\n // Outputs a number of spans to make up a line, taking highlighting\n // and marked text into account.\n function insertLineContent(line, builder, styles) {\n var spans = line.markedSpans, allText = line.text, at = 0;\n if (!spans) {\n for (var i$1 = 1; i$1 < styles.length; i$1+=2)\n { builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1+1], builder.cm.options)); }\n return\n }\n\n var len = allText.length, pos = 0, i = 1, text = \"\", style, css;\n var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, collapsed, attributes;\n for (;;) {\n if (nextChange == pos) { // Update current marker set\n spanStyle = spanEndStyle = spanStartStyle = css = \"\";\n attributes = null;\n collapsed = null; nextChange = Infinity;\n var foundBookmarks = [], endStyles = (void 0);\n for (var j = 0; j < spans.length; ++j) {\n var sp = spans[j], m = sp.marker;\n if (m.type == \"bookmark\" && sp.from == pos && m.widgetNode) {\n foundBookmarks.push(m);\n } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) {\n if (sp.to != null && sp.to != pos && nextChange > sp.to) {\n nextChange = sp.to;\n spanEndStyle = \"\";\n }\n if (m.className) { spanStyle += \" \" + m.className; }\n if (m.css) { css = (css ? css + \";\" : \"\") + m.css; }\n if (m.startStyle && sp.from == pos) { spanStartStyle += \" \" + m.startStyle; }\n if (m.endStyle && sp.to == nextChange) { (endStyles || (endStyles = [])).push(m.endStyle, sp.to); }\n // support for the old title property\n // https://github.com/codemirror/CodeMirror/pull/5673\n if (m.title) { (attributes || (attributes = {})).title = m.title; }\n if (m.attributes) {\n for (var attr in m.attributes)\n { (attributes || (attributes = {}))[attr] = m.attributes[attr]; }\n }\n if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0))\n { collapsed = sp; }\n } else if (sp.from > pos && nextChange > sp.from) {\n nextChange = sp.from;\n }\n }\n if (endStyles) { for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2)\n { if (endStyles[j$1 + 1] == nextChange) { spanEndStyle += \" \" + endStyles[j$1]; } } }\n\n if (!collapsed || collapsed.from == pos) { for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2)\n { buildCollapsedSpan(builder, 0, foundBookmarks[j$2]); } }\n if (collapsed && (collapsed.from || 0) == pos) {\n buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos,\n collapsed.marker, collapsed.from == null);\n if (collapsed.to == null) { return }\n if (collapsed.to == pos) { collapsed = false; }\n }\n }\n if (pos >= len) { break }\n\n var upto = Math.min(len, nextChange);\n while (true) {\n if (text) {\n var end = pos + text.length;\n if (!collapsed) {\n var tokenText = end > upto ? text.slice(0, upto - pos) : text;\n builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle,\n spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : \"\", css, attributes);\n }\n if (end >= upto) {text = text.slice(upto - pos); pos = upto; break}\n pos = end;\n spanStartStyle = \"\";\n }\n text = allText.slice(at, at = styles[i++]);\n style = interpretTokenStyle(styles[i++], builder.cm.options);\n }\n }\n }\n\n\n // These objects are used to represent the visible (currently drawn)\n // part of the document. A LineView may correspond to multiple\n // logical lines, if those are connected by collapsed ranges.\n function LineView(doc, line, lineN) {\n // The starting line\n this.line = line;\n // Continuing lines, if any\n this.rest = visualLineContinued(line);\n // Number of logical lines in this visual line\n this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1;\n this.node = this.text = null;\n this.hidden = lineIsHidden(doc, line);\n }\n\n // Create a range of LineView objects for the given lines.\n function buildViewArray(cm, from, to) {\n var array = [], nextPos;\n for (var pos = from; pos < to; pos = nextPos) {\n var view = new LineView(cm.doc, getLine(cm.doc, pos), pos);\n nextPos = pos + view.size;\n array.push(view);\n }\n return array\n }\n\n var operationGroup = null;\n\n function pushOperation(op) {\n if (operationGroup) {\n operationGroup.ops.push(op);\n } else {\n op.ownsGroup = operationGroup = {\n ops: [op],\n delayedCallbacks: []\n };\n }\n }\n\n function fireCallbacksForOps(group) {\n // Calls delayed callbacks and cursorActivity handlers until no\n // new ones appear\n var callbacks = group.delayedCallbacks, i = 0;\n do {\n for (; i < callbacks.length; i++)\n { callbacks[i].call(null); }\n for (var j = 0; j < group.ops.length; j++) {\n var op = group.ops[j];\n if (op.cursorActivityHandlers)\n { while (op.cursorActivityCalled < op.cursorActivityHandlers.length)\n { op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm); } }\n }\n } while (i < callbacks.length)\n }\n\n function finishOperation(op, endCb) {\n var group = op.ownsGroup;\n if (!group) { return }\n\n try { fireCallbacksForOps(group); }\n finally {\n operationGroup = null;\n endCb(group);\n }\n }\n\n var orphanDelayedCallbacks = null;\n\n // Often, we want to signal events at a point where we are in the\n // middle of some work, but don't want the handler to start calling\n // other methods on the editor, which might be in an inconsistent\n // state or simply not expect any other events to happen.\n // signalLater looks whether there are any handlers, and schedules\n // them to be executed when the last operation ends, or, if no\n // operation is active, when a timeout fires.\n function signalLater(emitter, type /*, values...*/) {\n var arr = getHandlers(emitter, type);\n if (!arr.length) { return }\n var args = Array.prototype.slice.call(arguments, 2), list;\n if (operationGroup) {\n list = operationGroup.delayedCallbacks;\n } else if (orphanDelayedCallbacks) {\n list = orphanDelayedCallbacks;\n } else {\n list = orphanDelayedCallbacks = [];\n setTimeout(fireOrphanDelayed, 0);\n }\n var loop = function ( i ) {\n list.push(function () { return arr[i].apply(null, args); });\n };\n\n for (var i = 0; i < arr.length; ++i)\n loop( i );\n }\n\n function fireOrphanDelayed() {\n var delayed = orphanDelayedCallbacks;\n orphanDelayedCallbacks = null;\n for (var i = 0; i < delayed.length; ++i) { delayed[i](); }\n }\n\n // When an aspect of a line changes, a string is added to\n // lineView.changes. This updates the relevant part of the line's\n // DOM structure.\n function updateLineForChanges(cm, lineView, lineN, dims) {\n for (var j = 0; j < lineView.changes.length; j++) {\n var type = lineView.changes[j];\n if (type == \"text\") { updateLineText(cm, lineView); }\n else if (type == \"gutter\") { updateLineGutter(cm, lineView, lineN, dims); }\n else if (type == \"class\") { updateLineClasses(cm, lineView); }\n else if (type == \"widget\") { updateLineWidgets(cm, lineView, dims); }\n }\n lineView.changes = null;\n }\n\n // Lines with gutter elements, widgets or a background class need to\n // be wrapped, and have the extra elements added to the wrapper div\n function ensureLineWrapped(lineView) {\n if (lineView.node == lineView.text) {\n lineView.node = elt(\"div\", null, null, \"position: relative\");\n if (lineView.text.parentNode)\n { lineView.text.parentNode.replaceChild(lineView.node, lineView.text); }\n lineView.node.appendChild(lineView.text);\n if (ie && ie_version < 8) { lineView.node.style.zIndex = 2; }\n }\n return lineView.node\n }\n\n function updateLineBackground(cm, lineView) {\n var cls = lineView.bgClass ? lineView.bgClass + \" \" + (lineView.line.bgClass || \"\") : lineView.line.bgClass;\n if (cls) { cls += \" CodeMirror-linebackground\"; }\n if (lineView.background) {\n if (cls) { lineView.background.className = cls; }\n else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; }\n } else if (cls) {\n var wrap = ensureLineWrapped(lineView);\n lineView.background = wrap.insertBefore(elt(\"div\", null, cls), wrap.firstChild);\n cm.display.input.setUneditable(lineView.background);\n }\n }\n\n // Wrapper around buildLineContent which will reuse the structure\n // in display.externalMeasured when possible.\n function getLineContent(cm, lineView) {\n var ext = cm.display.externalMeasured;\n if (ext && ext.line == lineView.line) {\n cm.display.externalMeasured = null;\n lineView.measure = ext.measure;\n return ext.built\n }\n return buildLineContent(cm, lineView)\n }\n\n // Redraw the line's text. Interacts with the background and text\n // classes because the mode may output tokens that influence these\n // classes.\n function updateLineText(cm, lineView) {\n var cls = lineView.text.className;\n var built = getLineContent(cm, lineView);\n if (lineView.text == lineView.node) { lineView.node = built.pre; }\n lineView.text.parentNode.replaceChild(built.pre, lineView.text);\n lineView.text = built.pre;\n if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) {\n lineView.bgClass = built.bgClass;\n lineView.textClass = built.textClass;\n updateLineClasses(cm, lineView);\n } else if (cls) {\n lineView.text.className = cls;\n }\n }\n\n function updateLineClasses(cm, lineView) {\n updateLineBackground(cm, lineView);\n if (lineView.line.wrapClass)\n { ensureLineWrapped(lineView).className = lineView.line.wrapClass; }\n else if (lineView.node != lineView.text)\n { lineView.node.className = \"\"; }\n var textClass = lineView.textClass ? lineView.textClass + \" \" + (lineView.line.textClass || \"\") : lineView.line.textClass;\n lineView.text.className = textClass || \"\";\n }\n\n function updateLineGutter(cm, lineView, lineN, dims) {\n if (lineView.gutter) {\n lineView.node.removeChild(lineView.gutter);\n lineView.gutter = null;\n }\n if (lineView.gutterBackground) {\n lineView.node.removeChild(lineView.gutterBackground);\n lineView.gutterBackground = null;\n }\n if (lineView.line.gutterClass) {\n var wrap = ensureLineWrapped(lineView);\n lineView.gutterBackground = elt(\"div\", null, \"CodeMirror-gutter-background \" + lineView.line.gutterClass,\n (\"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px; width: \" + (dims.gutterTotalWidth) + \"px\"));\n cm.display.input.setUneditable(lineView.gutterBackground);\n wrap.insertBefore(lineView.gutterBackground, lineView.text);\n }\n var markers = lineView.line.gutterMarkers;\n if (cm.options.lineNumbers || markers) {\n var wrap$1 = ensureLineWrapped(lineView);\n var gutterWrap = lineView.gutter = elt(\"div\", null, \"CodeMirror-gutter-wrapper\", (\"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px\"));\n gutterWrap.setAttribute(\"aria-hidden\", \"true\");\n cm.display.input.setUneditable(gutterWrap);\n wrap$1.insertBefore(gutterWrap, lineView.text);\n if (lineView.line.gutterClass)\n { gutterWrap.className += \" \" + lineView.line.gutterClass; }\n if (cm.options.lineNumbers && (!markers || !markers[\"CodeMirror-linenumbers\"]))\n { lineView.lineNumber = gutterWrap.appendChild(\n elt(\"div\", lineNumberFor(cm.options, lineN),\n \"CodeMirror-linenumber CodeMirror-gutter-elt\",\n (\"left: \" + (dims.gutterLeft[\"CodeMirror-linenumbers\"]) + \"px; width: \" + (cm.display.lineNumInnerWidth) + \"px\"))); }\n if (markers) { for (var k = 0; k < cm.display.gutterSpecs.length; ++k) {\n var id = cm.display.gutterSpecs[k].className, found = markers.hasOwnProperty(id) && markers[id];\n if (found)\n { gutterWrap.appendChild(elt(\"div\", [found], \"CodeMirror-gutter-elt\",\n (\"left: \" + (dims.gutterLeft[id]) + \"px; width: \" + (dims.gutterWidth[id]) + \"px\"))); }\n } }\n }\n }\n\n function updateLineWidgets(cm, lineView, dims) {\n if (lineView.alignable) { lineView.alignable = null; }\n var isWidget = classTest(\"CodeMirror-linewidget\");\n for (var node = lineView.node.firstChild, next = (void 0); node; node = next) {\n next = node.nextSibling;\n if (isWidget.test(node.className)) { lineView.node.removeChild(node); }\n }\n insertLineWidgets(cm, lineView, dims);\n }\n\n // Build a line's DOM representation from scratch\n function buildLineElement(cm, lineView, lineN, dims) {\n var built = getLineContent(cm, lineView);\n lineView.text = lineView.node = built.pre;\n if (built.bgClass) { lineView.bgClass = built.bgClass; }\n if (built.textClass) { lineView.textClass = built.textClass; }\n\n updateLineClasses(cm, lineView);\n updateLineGutter(cm, lineView, lineN, dims);\n insertLineWidgets(cm, lineView, dims);\n return lineView.node\n }\n\n // A lineView may contain multiple logical lines (when merged by\n // collapsed spans). The widgets for all of them need to be drawn.\n function insertLineWidgets(cm, lineView, dims) {\n insertLineWidgetsFor(cm, lineView.line, lineView, dims, true);\n if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)\n { insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); } }\n }\n\n function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) {\n if (!line.widgets) { return }\n var wrap = ensureLineWrapped(lineView);\n for (var i = 0, ws = line.widgets; i < ws.length; ++i) {\n var widget = ws[i], node = elt(\"div\", [widget.node], \"CodeMirror-linewidget\" + (widget.className ? \" \" + widget.className : \"\"));\n if (!widget.handleMouseEvents) { node.setAttribute(\"cm-ignore-events\", \"true\"); }\n positionLineWidget(widget, node, lineView, dims);\n cm.display.input.setUneditable(node);\n if (allowAbove && widget.above)\n { wrap.insertBefore(node, lineView.gutter || lineView.text); }\n else\n { wrap.appendChild(node); }\n signalLater(widget, \"redraw\");\n }\n }\n\n function positionLineWidget(widget, node, lineView, dims) {\n if (widget.noHScroll) {\n (lineView.alignable || (lineView.alignable = [])).push(node);\n var width = dims.wrapperWidth;\n node.style.left = dims.fixedPos + \"px\";\n if (!widget.coverGutter) {\n width -= dims.gutterTotalWidth;\n node.style.paddingLeft = dims.gutterTotalWidth + \"px\";\n }\n node.style.width = width + \"px\";\n }\n if (widget.coverGutter) {\n node.style.zIndex = 5;\n node.style.position = \"relative\";\n if (!widget.noHScroll) { node.style.marginLeft = -dims.gutterTotalWidth + \"px\"; }\n }\n }\n\n function widgetHeight(widget) {\n if (widget.height != null) { return widget.height }\n var cm = widget.doc.cm;\n if (!cm) { return 0 }\n if (!contains(document.body, widget.node)) {\n var parentStyle = \"position: relative;\";\n if (widget.coverGutter)\n { parentStyle += \"margin-left: -\" + cm.display.gutters.offsetWidth + \"px;\"; }\n if (widget.noHScroll)\n { parentStyle += \"width: \" + cm.display.wrapper.clientWidth + \"px;\"; }\n removeChildrenAndAdd(cm.display.measure, elt(\"div\", [widget.node], null, parentStyle));\n }\n return widget.height = widget.node.parentNode.offsetHeight\n }\n\n // Return true when the given mouse event happened in a widget\n function eventInWidget(display, e) {\n for (var n = e_target(e); n != display.wrapper; n = n.parentNode) {\n if (!n || (n.nodeType == 1 && n.getAttribute(\"cm-ignore-events\") == \"true\") ||\n (n.parentNode == display.sizer && n != display.mover))\n { return true }\n }\n }\n\n // POSITION MEASUREMENT\n\n function paddingTop(display) {return display.lineSpace.offsetTop}\n function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight}\n function paddingH(display) {\n if (display.cachedPaddingH) { return display.cachedPaddingH }\n var e = removeChildrenAndAdd(display.measure, elt(\"pre\", \"x\", \"CodeMirror-line-like\"));\n var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle;\n var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)};\n if (!isNaN(data.left) && !isNaN(data.right)) { display.cachedPaddingH = data; }\n return data\n }\n\n function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth }\n function displayWidth(cm) {\n return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth\n }\n function displayHeight(cm) {\n return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight\n }\n\n // Ensure the lineView.wrapping.heights array is populated. This is\n // an array of bottom offsets for the lines that make up a drawn\n // line. When lineWrapping is on, there might be more than one\n // height.\n function ensureLineHeights(cm, lineView, rect) {\n var wrapping = cm.options.lineWrapping;\n var curWidth = wrapping && displayWidth(cm);\n if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) {\n var heights = lineView.measure.heights = [];\n if (wrapping) {\n lineView.measure.width = curWidth;\n var rects = lineView.text.firstChild.getClientRects();\n for (var i = 0; i < rects.length - 1; i++) {\n var cur = rects[i], next = rects[i + 1];\n if (Math.abs(cur.bottom - next.bottom) > 2)\n { heights.push((cur.bottom + next.top) / 2 - rect.top); }\n }\n }\n heights.push(rect.bottom - rect.top);\n }\n }\n\n // Find a line map (mapping character offsets to text nodes) and a\n // measurement cache for the given line number. (A line view might\n // contain multiple lines when collapsed ranges are present.)\n function mapFromLineView(lineView, line, lineN) {\n if (lineView.line == line)\n { return {map: lineView.measure.map, cache: lineView.measure.cache} }\n if (lineView.rest) {\n for (var i = 0; i < lineView.rest.length; i++)\n { if (lineView.rest[i] == line)\n { return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]} } }\n for (var i$1 = 0; i$1 < lineView.rest.length; i$1++)\n { if (lineNo(lineView.rest[i$1]) > lineN)\n { return {map: lineView.measure.maps[i$1], cache: lineView.measure.caches[i$1], before: true} } }\n }\n }\n\n // Render a line into the hidden node display.externalMeasured. Used\n // when measurement is needed for a line that's not in the viewport.\n function updateExternalMeasurement(cm, line) {\n line = visualLine(line);\n var lineN = lineNo(line);\n var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN);\n view.lineN = lineN;\n var built = view.built = buildLineContent(cm, view);\n view.text = built.pre;\n removeChildrenAndAdd(cm.display.lineMeasure, built.pre);\n return view\n }\n\n // Get a {top, bottom, left, right} box (in line-local coordinates)\n // for a given character.\n function measureChar(cm, line, ch, bias) {\n return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias)\n }\n\n // Find a line view that corresponds to the given line number.\n function findViewForLine(cm, lineN) {\n if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo)\n { return cm.display.view[findViewIndex(cm, lineN)] }\n var ext = cm.display.externalMeasured;\n if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size)\n { return ext }\n }\n\n // Measurement can be split in two steps, the set-up work that\n // applies to the whole line, and the measurement of the actual\n // character. Functions like coordsChar, that need to do a lot of\n // measurements in a row, can thus ensure that the set-up work is\n // only done once.\n function prepareMeasureForLine(cm, line) {\n var lineN = lineNo(line);\n var view = findViewForLine(cm, lineN);\n if (view && !view.text) {\n view = null;\n } else if (view && view.changes) {\n updateLineForChanges(cm, view, lineN, getDimensions(cm));\n cm.curOp.forceUpdate = true;\n }\n if (!view)\n { view = updateExternalMeasurement(cm, line); }\n\n var info = mapFromLineView(view, line, lineN);\n return {\n line: line, view: view, rect: null,\n map: info.map, cache: info.cache, before: info.before,\n hasHeights: false\n }\n }\n\n // Given a prepared measurement object, measures the position of an\n // actual character (or fetches it from the cache).\n function measureCharPrepared(cm, prepared, ch, bias, varHeight) {\n if (prepared.before) { ch = -1; }\n var key = ch + (bias || \"\"), found;\n if (prepared.cache.hasOwnProperty(key)) {\n found = prepared.cache[key];\n } else {\n if (!prepared.rect)\n { prepared.rect = prepared.view.text.getBoundingClientRect(); }\n if (!prepared.hasHeights) {\n ensureLineHeights(cm, prepared.view, prepared.rect);\n prepared.hasHeights = true;\n }\n found = measureCharInner(cm, prepared, ch, bias);\n if (!found.bogus) { prepared.cache[key] = found; }\n }\n return {left: found.left, right: found.right,\n top: varHeight ? found.rtop : found.top,\n bottom: varHeight ? found.rbottom : found.bottom}\n }\n\n var nullRect = {left: 0, right: 0, top: 0, bottom: 0};\n\n function nodeAndOffsetInLineMap(map, ch, bias) {\n var node, start, end, collapse, mStart, mEnd;\n // First, search the line map for the text node corresponding to,\n // or closest to, the target character.\n for (var i = 0; i < map.length; i += 3) {\n mStart = map[i];\n mEnd = map[i + 1];\n if (ch < mStart) {\n start = 0; end = 1;\n collapse = \"left\";\n } else if (ch < mEnd) {\n start = ch - mStart;\n end = start + 1;\n } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) {\n end = mEnd - mStart;\n start = end - 1;\n if (ch >= mEnd) { collapse = \"right\"; }\n }\n if (start != null) {\n node = map[i + 2];\n if (mStart == mEnd && bias == (node.insertLeft ? \"left\" : \"right\"))\n { collapse = bias; }\n if (bias == \"left\" && start == 0)\n { while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) {\n node = map[(i -= 3) + 2];\n collapse = \"left\";\n } }\n if (bias == \"right\" && start == mEnd - mStart)\n { while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) {\n node = map[(i += 3) + 2];\n collapse = \"right\";\n } }\n break\n }\n }\n return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd}\n }\n\n function getUsefulRect(rects, bias) {\n var rect = nullRect;\n if (bias == \"left\") { for (var i = 0; i < rects.length; i++) {\n if ((rect = rects[i]).left != rect.right) { break }\n } } else { for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) {\n if ((rect = rects[i$1]).left != rect.right) { break }\n } }\n return rect\n }\n\n function measureCharInner(cm, prepared, ch, bias) {\n var place = nodeAndOffsetInLineMap(prepared.map, ch, bias);\n var node = place.node, start = place.start, end = place.end, collapse = place.collapse;\n\n var rect;\n if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates.\n for (var i$1 = 0; i$1 < 4; i$1++) { // Retry a maximum of 4 times when nonsense rectangles are returned\n while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { --start; }\n while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { ++end; }\n if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart)\n { rect = node.parentNode.getBoundingClientRect(); }\n else\n { rect = getUsefulRect(range(node, start, end).getClientRects(), bias); }\n if (rect.left || rect.right || start == 0) { break }\n end = start;\n start = start - 1;\n collapse = \"right\";\n }\n if (ie && ie_version < 11) { rect = maybeUpdateRectForZooming(cm.display.measure, rect); }\n } else { // If it is a widget, simply get the box for the whole widget.\n if (start > 0) { collapse = bias = \"right\"; }\n var rects;\n if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1)\n { rect = rects[bias == \"right\" ? rects.length - 1 : 0]; }\n else\n { rect = node.getBoundingClientRect(); }\n }\n if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) {\n var rSpan = node.parentNode.getClientRects()[0];\n if (rSpan)\n { rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; }\n else\n { rect = nullRect; }\n }\n\n var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top;\n var mid = (rtop + rbot) / 2;\n var heights = prepared.view.measure.heights;\n var i = 0;\n for (; i < heights.length - 1; i++)\n { if (mid < heights[i]) { break } }\n var top = i ? heights[i - 1] : 0, bot = heights[i];\n var result = {left: (collapse == \"right\" ? rect.right : rect.left) - prepared.rect.left,\n right: (collapse == \"left\" ? rect.left : rect.right) - prepared.rect.left,\n top: top, bottom: bot};\n if (!rect.left && !rect.right) { result.bogus = true; }\n if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; }\n\n return result\n }\n\n // Work around problem with bounding client rects on ranges being\n // returned incorrectly when zoomed on IE10 and below.\n function maybeUpdateRectForZooming(measure, rect) {\n if (!window.screen || screen.logicalXDPI == null ||\n screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure))\n { return rect }\n var scaleX = screen.logicalXDPI / screen.deviceXDPI;\n var scaleY = screen.logicalYDPI / screen.deviceYDPI;\n return {left: rect.left * scaleX, right: rect.right * scaleX,\n top: rect.top * scaleY, bottom: rect.bottom * scaleY}\n }\n\n function clearLineMeasurementCacheFor(lineView) {\n if (lineView.measure) {\n lineView.measure.cache = {};\n lineView.measure.heights = null;\n if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)\n { lineView.measure.caches[i] = {}; } }\n }\n }\n\n function clearLineMeasurementCache(cm) {\n cm.display.externalMeasure = null;\n removeChildren(cm.display.lineMeasure);\n for (var i = 0; i < cm.display.view.length; i++)\n { clearLineMeasurementCacheFor(cm.display.view[i]); }\n }\n\n function clearCaches(cm) {\n clearLineMeasurementCache(cm);\n cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null;\n if (!cm.options.lineWrapping) { cm.display.maxLineChanged = true; }\n cm.display.lineNumChars = null;\n }\n\n function pageScrollX(doc) {\n // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206\n // which causes page_Offset and bounding client rects to use\n // different reference viewports and invalidate our calculations.\n if (chrome && android) { return -(doc.body.getBoundingClientRect().left - parseInt(getComputedStyle(doc.body).marginLeft)) }\n return doc.defaultView.pageXOffset || (doc.documentElement || doc.body).scrollLeft\n }\n function pageScrollY(doc) {\n if (chrome && android) { return -(doc.body.getBoundingClientRect().top - parseInt(getComputedStyle(doc.body).marginTop)) }\n return doc.defaultView.pageYOffset || (doc.documentElement || doc.body).scrollTop\n }\n\n function widgetTopHeight(lineObj) {\n var ref = visualLine(lineObj);\n var widgets = ref.widgets;\n var height = 0;\n if (widgets) { for (var i = 0; i < widgets.length; ++i) { if (widgets[i].above)\n { height += widgetHeight(widgets[i]); } } }\n return height\n }\n\n // Converts a {top, bottom, left, right} box from line-local\n // coordinates into another coordinate system. Context may be one of\n // \"line\", \"div\" (display.lineDiv), \"local\"./null (editor), \"window\",\n // or \"page\".\n function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) {\n if (!includeWidgets) {\n var height = widgetTopHeight(lineObj);\n rect.top += height; rect.bottom += height;\n }\n if (context == \"line\") { return rect }\n if (!context) { context = \"local\"; }\n var yOff = heightAtLine(lineObj);\n if (context == \"local\") { yOff += paddingTop(cm.display); }\n else { yOff -= cm.display.viewOffset; }\n if (context == \"page\" || context == \"window\") {\n var lOff = cm.display.lineSpace.getBoundingClientRect();\n yOff += lOff.top + (context == \"window\" ? 0 : pageScrollY(doc(cm)));\n var xOff = lOff.left + (context == \"window\" ? 0 : pageScrollX(doc(cm)));\n rect.left += xOff; rect.right += xOff;\n }\n rect.top += yOff; rect.bottom += yOff;\n return rect\n }\n\n // Coverts a box from \"div\" coords to another coordinate system.\n // Context may be \"window\", \"page\", \"div\", or \"local\"./null.\n function fromCoordSystem(cm, coords, context) {\n if (context == \"div\") { return coords }\n var left = coords.left, top = coords.top;\n // First move into \"page\" coordinate system\n if (context == \"page\") {\n left -= pageScrollX(doc(cm));\n top -= pageScrollY(doc(cm));\n } else if (context == \"local\" || !context) {\n var localBox = cm.display.sizer.getBoundingClientRect();\n left += localBox.left;\n top += localBox.top;\n }\n\n var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect();\n return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top}\n }\n\n function charCoords(cm, pos, context, lineObj, bias) {\n if (!lineObj) { lineObj = getLine(cm.doc, pos.line); }\n return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context)\n }\n\n // Returns a box for a given cursor position, which may have an\n // 'other' property containing the position of the secondary cursor\n // on a bidi boundary.\n // A cursor Pos(line, char, \"before\") is on the same visual line as `char - 1`\n // and after `char - 1` in writing order of `char - 1`\n // A cursor Pos(line, char, \"after\") is on the same visual line as `char`\n // and before `char` in writing order of `char`\n // Examples (upper-case letters are RTL, lower-case are LTR):\n // Pos(0, 1, ...)\n // before after\n // ab a|b a|b\n // aB a|B aB|\n // Ab |Ab A|b\n // AB B|A B|A\n // Every position after the last character on a line is considered to stick\n // to the last character on the line.\n function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) {\n lineObj = lineObj || getLine(cm.doc, pos.line);\n if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }\n function get(ch, right) {\n var m = measureCharPrepared(cm, preparedMeasure, ch, right ? \"right\" : \"left\", varHeight);\n if (right) { m.left = m.right; } else { m.right = m.left; }\n return intoCoordSystem(cm, lineObj, m, context)\n }\n var order = getOrder(lineObj, cm.doc.direction), ch = pos.ch, sticky = pos.sticky;\n if (ch >= lineObj.text.length) {\n ch = lineObj.text.length;\n sticky = \"before\";\n } else if (ch <= 0) {\n ch = 0;\n sticky = \"after\";\n }\n if (!order) { return get(sticky == \"before\" ? ch - 1 : ch, sticky == \"before\") }\n\n function getBidi(ch, partPos, invert) {\n var part = order[partPos], right = part.level == 1;\n return get(invert ? ch - 1 : ch, right != invert)\n }\n var partPos = getBidiPartAt(order, ch, sticky);\n var other = bidiOther;\n var val = getBidi(ch, partPos, sticky == \"before\");\n if (other != null) { val.other = getBidi(ch, other, sticky != \"before\"); }\n return val\n }\n\n // Used to cheaply estimate the coordinates for a position. Used for\n // intermediate scroll updates.\n function estimateCoords(cm, pos) {\n var left = 0;\n pos = clipPos(cm.doc, pos);\n if (!cm.options.lineWrapping) { left = charWidth(cm.display) * pos.ch; }\n var lineObj = getLine(cm.doc, pos.line);\n var top = heightAtLine(lineObj) + paddingTop(cm.display);\n return {left: left, right: left, top: top, bottom: top + lineObj.height}\n }\n\n // Positions returned by coordsChar contain some extra information.\n // xRel is the relative x position of the input coordinates compared\n // to the found position (so xRel > 0 means the coordinates are to\n // the right of the character position, for example). When outside\n // is true, that means the coordinates lie outside the line's\n // vertical range.\n function PosWithInfo(line, ch, sticky, outside, xRel) {\n var pos = Pos(line, ch, sticky);\n pos.xRel = xRel;\n if (outside) { pos.outside = outside; }\n return pos\n }\n\n // Compute the character position closest to the given coordinates.\n // Input must be lineSpace-local (\"div\" coordinate system).\n function coordsChar(cm, x, y) {\n var doc = cm.doc;\n y += cm.display.viewOffset;\n if (y < 0) { return PosWithInfo(doc.first, 0, null, -1, -1) }\n var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1;\n if (lineN > last)\n { return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, 1, 1) }\n if (x < 0) { x = 0; }\n\n var lineObj = getLine(doc, lineN);\n for (;;) {\n var found = coordsCharInner(cm, lineObj, lineN, x, y);\n var collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 || found.outside > 0 ? 1 : 0));\n if (!collapsed) { return found }\n var rangeEnd = collapsed.find(1);\n if (rangeEnd.line == lineN) { return rangeEnd }\n lineObj = getLine(doc, lineN = rangeEnd.line);\n }\n }\n\n function wrappedLineExtent(cm, lineObj, preparedMeasure, y) {\n y -= widgetTopHeight(lineObj);\n var end = lineObj.text.length;\n var begin = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y; }, end, 0);\n end = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch).top > y; }, begin, end);\n return {begin: begin, end: end}\n }\n\n function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) {\n if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }\n var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), \"line\").top;\n return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop)\n }\n\n // Returns true if the given side of a box is after the given\n // coordinates, in top-to-bottom, left-to-right order.\n function boxIsAfter(box, x, y, left) {\n return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x\n }\n\n function coordsCharInner(cm, lineObj, lineNo, x, y) {\n // Move y into line-local coordinate space\n y -= heightAtLine(lineObj);\n var preparedMeasure = prepareMeasureForLine(cm, lineObj);\n // When directly calling `measureCharPrepared`, we have to adjust\n // for the widgets at this line.\n var widgetHeight = widgetTopHeight(lineObj);\n var begin = 0, end = lineObj.text.length, ltr = true;\n\n var order = getOrder(lineObj, cm.doc.direction);\n // If the line isn't plain left-to-right text, first figure out\n // which bidi section the coordinates fall into.\n if (order) {\n var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart)\n (cm, lineObj, lineNo, preparedMeasure, order, x, y);\n ltr = part.level != 1;\n // The awkward -1 offsets are needed because findFirst (called\n // on these below) will treat its first bound as inclusive,\n // second as exclusive, but we want to actually address the\n // characters in the part's range\n begin = ltr ? part.from : part.to - 1;\n end = ltr ? part.to : part.from - 1;\n }\n\n // A binary search to find the first character whose bounding box\n // starts after the coordinates. If we run across any whose box wrap\n // the coordinates, store that.\n var chAround = null, boxAround = null;\n var ch = findFirst(function (ch) {\n var box = measureCharPrepared(cm, preparedMeasure, ch);\n box.top += widgetHeight; box.bottom += widgetHeight;\n if (!boxIsAfter(box, x, y, false)) { return false }\n if (box.top <= y && box.left <= x) {\n chAround = ch;\n boxAround = box;\n }\n return true\n }, begin, end);\n\n var baseX, sticky, outside = false;\n // If a box around the coordinates was found, use that\n if (boxAround) {\n // Distinguish coordinates nearer to the left or right side of the box\n var atLeft = x - boxAround.left < boxAround.right - x, atStart = atLeft == ltr;\n ch = chAround + (atStart ? 0 : 1);\n sticky = atStart ? \"after\" : \"before\";\n baseX = atLeft ? boxAround.left : boxAround.right;\n } else {\n // (Adjust for extended bound, if necessary.)\n if (!ltr && (ch == end || ch == begin)) { ch++; }\n // To determine which side to associate with, get the box to the\n // left of the character and compare it's vertical position to the\n // coordinates\n sticky = ch == 0 ? \"after\" : ch == lineObj.text.length ? \"before\" :\n (measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight <= y) == ltr ?\n \"after\" : \"before\";\n // Now get accurate coordinates for this place, in order to get a\n // base X position\n var coords = cursorCoords(cm, Pos(lineNo, ch, sticky), \"line\", lineObj, preparedMeasure);\n baseX = coords.left;\n outside = y < coords.top ? -1 : y >= coords.bottom ? 1 : 0;\n }\n\n ch = skipExtendingChars(lineObj.text, ch, 1);\n return PosWithInfo(lineNo, ch, sticky, outside, x - baseX)\n }\n\n function coordsBidiPart(cm, lineObj, lineNo, preparedMeasure, order, x, y) {\n // Bidi parts are sorted left-to-right, and in a non-line-wrapping\n // situation, we can take this ordering to correspond to the visual\n // ordering. This finds the first part whose end is after the given\n // coordinates.\n var index = findFirst(function (i) {\n var part = order[i], ltr = part.level != 1;\n return boxIsAfter(cursorCoords(cm, Pos(lineNo, ltr ? part.to : part.from, ltr ? \"before\" : \"after\"),\n \"line\", lineObj, preparedMeasure), x, y, true)\n }, 0, order.length - 1);\n var part = order[index];\n // If this isn't the first part, the part's start is also after\n // the coordinates, and the coordinates aren't on the same line as\n // that start, move one part back.\n if (index > 0) {\n var ltr = part.level != 1;\n var start = cursorCoords(cm, Pos(lineNo, ltr ? part.from : part.to, ltr ? \"after\" : \"before\"),\n \"line\", lineObj, preparedMeasure);\n if (boxIsAfter(start, x, y, true) && start.top > y)\n { part = order[index - 1]; }\n }\n return part\n }\n\n function coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) {\n // In a wrapped line, rtl text on wrapping boundaries can do things\n // that don't correspond to the ordering in our `order` array at\n // all, so a binary search doesn't work, and we want to return a\n // part that only spans one line so that the binary search in\n // coordsCharInner is safe. As such, we first find the extent of the\n // wrapped line, and then do a flat search in which we discard any\n // spans that aren't on the line.\n var ref = wrappedLineExtent(cm, lineObj, preparedMeasure, y);\n var begin = ref.begin;\n var end = ref.end;\n if (/\\s/.test(lineObj.text.charAt(end - 1))) { end--; }\n var part = null, closestDist = null;\n for (var i = 0; i < order.length; i++) {\n var p = order[i];\n if (p.from >= end || p.to <= begin) { continue }\n var ltr = p.level != 1;\n var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right;\n // Weigh against spans ending before this, so that they are only\n // picked if nothing ends after\n var dist = endX < x ? x - endX + 1e9 : endX - x;\n if (!part || closestDist > dist) {\n part = p;\n closestDist = dist;\n }\n }\n if (!part) { part = order[order.length - 1]; }\n // Clip the part to the wrapped line.\n if (part.from < begin) { part = {from: begin, to: part.to, level: part.level}; }\n if (part.to > end) { part = {from: part.from, to: end, level: part.level}; }\n return part\n }\n\n var measureText;\n // Compute the default text height.\n function textHeight(display) {\n if (display.cachedTextHeight != null) { return display.cachedTextHeight }\n if (measureText == null) {\n measureText = elt(\"pre\", null, \"CodeMirror-line-like\");\n // Measure a bunch of lines, for browsers that compute\n // fractional heights.\n for (var i = 0; i < 49; ++i) {\n measureText.appendChild(document.createTextNode(\"x\"));\n measureText.appendChild(elt(\"br\"));\n }\n measureText.appendChild(document.createTextNode(\"x\"));\n }\n removeChildrenAndAdd(display.measure, measureText);\n var height = measureText.offsetHeight / 50;\n if (height > 3) { display.cachedTextHeight = height; }\n removeChildren(display.measure);\n return height || 1\n }\n\n // Compute the default character width.\n function charWidth(display) {\n if (display.cachedCharWidth != null) { return display.cachedCharWidth }\n var anchor = elt(\"span\", \"xxxxxxxxxx\");\n var pre = elt(\"pre\", [anchor], \"CodeMirror-line-like\");\n removeChildrenAndAdd(display.measure, pre);\n var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10;\n if (width > 2) { display.cachedCharWidth = width; }\n return width || 10\n }\n\n // Do a bulk-read of the DOM positions and sizes needed to draw the\n // view, so that we don't interleave reading and writing to the DOM.\n function getDimensions(cm) {\n var d = cm.display, left = {}, width = {};\n var gutterLeft = d.gutters.clientLeft;\n for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {\n var id = cm.display.gutterSpecs[i].className;\n left[id] = n.offsetLeft + n.clientLeft + gutterLeft;\n width[id] = n.clientWidth;\n }\n return {fixedPos: compensateForHScroll(d),\n gutterTotalWidth: d.gutters.offsetWidth,\n gutterLeft: left,\n gutterWidth: width,\n wrapperWidth: d.wrapper.clientWidth}\n }\n\n // Computes display.scroller.scrollLeft + display.gutters.offsetWidth,\n // but using getBoundingClientRect to get a sub-pixel-accurate\n // result.\n function compensateForHScroll(display) {\n return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left\n }\n\n // Returns a function that estimates the height of a line, to use as\n // first approximation until the line becomes visible (and is thus\n // properly measurable).\n function estimateHeight(cm) {\n var th = textHeight(cm.display), wrapping = cm.options.lineWrapping;\n var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3);\n return function (line) {\n if (lineIsHidden(cm.doc, line)) { return 0 }\n\n var widgetsHeight = 0;\n if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) {\n if (line.widgets[i].height) { widgetsHeight += line.widgets[i].height; }\n } }\n\n if (wrapping)\n { return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th }\n else\n { return widgetsHeight + th }\n }\n }\n\n function estimateLineHeights(cm) {\n var doc = cm.doc, est = estimateHeight(cm);\n doc.iter(function (line) {\n var estHeight = est(line);\n if (estHeight != line.height) { updateLineHeight(line, estHeight); }\n });\n }\n\n // Given a mouse event, find the corresponding position. If liberal\n // is false, it checks whether a gutter or scrollbar was clicked,\n // and returns null if it was. forRect is used by rectangular\n // selections, and tries to estimate a character position even for\n // coordinates beyond the right of the text.\n function posFromMouse(cm, e, liberal, forRect) {\n var display = cm.display;\n if (!liberal && e_target(e).getAttribute(\"cm-not-content\") == \"true\") { return null }\n\n var x, y, space = display.lineSpace.getBoundingClientRect();\n // Fails unpredictably on IE[67] when mouse is dragged around quickly.\n try { x = e.clientX - space.left; y = e.clientY - space.top; }\n catch (e$1) { return null }\n var coords = coordsChar(cm, x, y), line;\n if (forRect && coords.xRel > 0 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) {\n var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length;\n coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff));\n }\n return coords\n }\n\n // Find the view element corresponding to a given line. Return null\n // when the line isn't visible.\n function findViewIndex(cm, n) {\n if (n >= cm.display.viewTo) { return null }\n n -= cm.display.viewFrom;\n if (n < 0) { return null }\n var view = cm.display.view;\n for (var i = 0; i < view.length; i++) {\n n -= view[i].size;\n if (n < 0) { return i }\n }\n }\n\n // Updates the display.view data structure for a given change to the\n // document. From and to are in pre-change coordinates. Lendiff is\n // the amount of lines added or subtracted by the change. This is\n // used for changes that span multiple lines, or change the way\n // lines are divided into visual lines. regLineChange (below)\n // registers single-line changes.\n function regChange(cm, from, to, lendiff) {\n if (from == null) { from = cm.doc.first; }\n if (to == null) { to = cm.doc.first + cm.doc.size; }\n if (!lendiff) { lendiff = 0; }\n\n var display = cm.display;\n if (lendiff && to < display.viewTo &&\n (display.updateLineNumbers == null || display.updateLineNumbers > from))\n { display.updateLineNumbers = from; }\n\n cm.curOp.viewChanged = true;\n\n if (from >= display.viewTo) { // Change after\n if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo)\n { resetView(cm); }\n } else if (to <= display.viewFrom) { // Change before\n if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) {\n resetView(cm);\n } else {\n display.viewFrom += lendiff;\n display.viewTo += lendiff;\n }\n } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap\n resetView(cm);\n } else if (from <= display.viewFrom) { // Top overlap\n var cut = viewCuttingPoint(cm, to, to + lendiff, 1);\n if (cut) {\n display.view = display.view.slice(cut.index);\n display.viewFrom = cut.lineN;\n display.viewTo += lendiff;\n } else {\n resetView(cm);\n }\n } else if (to >= display.viewTo) { // Bottom overlap\n var cut$1 = viewCuttingPoint(cm, from, from, -1);\n if (cut$1) {\n display.view = display.view.slice(0, cut$1.index);\n display.viewTo = cut$1.lineN;\n } else {\n resetView(cm);\n }\n } else { // Gap in the middle\n var cutTop = viewCuttingPoint(cm, from, from, -1);\n var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1);\n if (cutTop && cutBot) {\n display.view = display.view.slice(0, cutTop.index)\n .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN))\n .concat(display.view.slice(cutBot.index));\n display.viewTo += lendiff;\n } else {\n resetView(cm);\n }\n }\n\n var ext = display.externalMeasured;\n if (ext) {\n if (to < ext.lineN)\n { ext.lineN += lendiff; }\n else if (from < ext.lineN + ext.size)\n { display.externalMeasured = null; }\n }\n }\n\n // Register a change to a single line. Type must be one of \"text\",\n // \"gutter\", \"class\", \"widget\"\n function regLineChange(cm, line, type) {\n cm.curOp.viewChanged = true;\n var display = cm.display, ext = cm.display.externalMeasured;\n if (ext && line >= ext.lineN && line < ext.lineN + ext.size)\n { display.externalMeasured = null; }\n\n if (line < display.viewFrom || line >= display.viewTo) { return }\n var lineView = display.view[findViewIndex(cm, line)];\n if (lineView.node == null) { return }\n var arr = lineView.changes || (lineView.changes = []);\n if (indexOf(arr, type) == -1) { arr.push(type); }\n }\n\n // Clear the view.\n function resetView(cm) {\n cm.display.viewFrom = cm.display.viewTo = cm.doc.first;\n cm.display.view = [];\n cm.display.viewOffset = 0;\n }\n\n function viewCuttingPoint(cm, oldN, newN, dir) {\n var index = findViewIndex(cm, oldN), diff, view = cm.display.view;\n if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size)\n { return {index: index, lineN: newN} }\n var n = cm.display.viewFrom;\n for (var i = 0; i < index; i++)\n { n += view[i].size; }\n if (n != oldN) {\n if (dir > 0) {\n if (index == view.length - 1) { return null }\n diff = (n + view[index].size) - oldN;\n index++;\n } else {\n diff = n - oldN;\n }\n oldN += diff; newN += diff;\n }\n while (visualLineNo(cm.doc, newN) != newN) {\n if (index == (dir < 0 ? 0 : view.length - 1)) { return null }\n newN += dir * view[index - (dir < 0 ? 1 : 0)].size;\n index += dir;\n }\n return {index: index, lineN: newN}\n }\n\n // Force the view to cover a given range, adding empty view element\n // or clipping off existing ones as needed.\n function adjustView(cm, from, to) {\n var display = cm.display, view = display.view;\n if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) {\n display.view = buildViewArray(cm, from, to);\n display.viewFrom = from;\n } else {\n if (display.viewFrom > from)\n { display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); }\n else if (display.viewFrom < from)\n { display.view = display.view.slice(findViewIndex(cm, from)); }\n display.viewFrom = from;\n if (display.viewTo < to)\n { display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); }\n else if (display.viewTo > to)\n { display.view = display.view.slice(0, findViewIndex(cm, to)); }\n }\n display.viewTo = to;\n }\n\n // Count the number of lines in the view whose DOM representation is\n // out of date (or nonexistent).\n function countDirtyView(cm) {\n var view = cm.display.view, dirty = 0;\n for (var i = 0; i < view.length; i++) {\n var lineView = view[i];\n if (!lineView.hidden && (!lineView.node || lineView.changes)) { ++dirty; }\n }\n return dirty\n }\n\n function updateSelection(cm) {\n cm.display.input.showSelection(cm.display.input.prepareSelection());\n }\n\n function prepareSelection(cm, primary) {\n if ( primary === void 0 ) primary = true;\n\n var doc = cm.doc, result = {};\n var curFragment = result.cursors = document.createDocumentFragment();\n var selFragment = result.selection = document.createDocumentFragment();\n\n var customCursor = cm.options.$customCursor;\n if (customCursor) { primary = true; }\n for (var i = 0; i < doc.sel.ranges.length; i++) {\n if (!primary && i == doc.sel.primIndex) { continue }\n var range = doc.sel.ranges[i];\n if (range.from().line >= cm.display.viewTo || range.to().line < cm.display.viewFrom) { continue }\n var collapsed = range.empty();\n if (customCursor) {\n var head = customCursor(cm, range);\n if (head) { drawSelectionCursor(cm, head, curFragment); }\n } else if (collapsed || cm.options.showCursorWhenSelecting) {\n drawSelectionCursor(cm, range.head, curFragment);\n }\n if (!collapsed)\n { drawSelectionRange(cm, range, selFragment); }\n }\n return result\n }\n\n // Draws a cursor for the given range\n function drawSelectionCursor(cm, head, output) {\n var pos = cursorCoords(cm, head, \"div\", null, null, !cm.options.singleCursorHeightPerLine);\n\n var cursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor\"));\n cursor.style.left = pos.left + \"px\";\n cursor.style.top = pos.top + \"px\";\n cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + \"px\";\n\n if (/\\bcm-fat-cursor\\b/.test(cm.getWrapperElement().className)) {\n var charPos = charCoords(cm, head, \"div\", null, null);\n var width = charPos.right - charPos.left;\n cursor.style.width = (width > 0 ? width : cm.defaultCharWidth()) + \"px\";\n }\n\n if (pos.other) {\n // Secondary cursor, shown when on a 'jump' in bi-directional text\n var otherCursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor CodeMirror-secondarycursor\"));\n otherCursor.style.display = \"\";\n otherCursor.style.left = pos.other.left + \"px\";\n otherCursor.style.top = pos.other.top + \"px\";\n otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + \"px\";\n }\n }\n\n function cmpCoords(a, b) { return a.top - b.top || a.left - b.left }\n\n // Draws the given range as a highlighted selection\n function drawSelectionRange(cm, range, output) {\n var display = cm.display, doc = cm.doc;\n var fragment = document.createDocumentFragment();\n var padding = paddingH(cm.display), leftSide = padding.left;\n var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right;\n var docLTR = doc.direction == \"ltr\";\n\n function add(left, top, width, bottom) {\n if (top < 0) { top = 0; }\n top = Math.round(top);\n bottom = Math.round(bottom);\n fragment.appendChild(elt(\"div\", null, \"CodeMirror-selected\", (\"position: absolute; left: \" + left + \"px;\\n top: \" + top + \"px; width: \" + (width == null ? rightSide - left : width) + \"px;\\n height: \" + (bottom - top) + \"px\")));\n }\n\n function drawForLine(line, fromArg, toArg) {\n var lineObj = getLine(doc, line);\n var lineLen = lineObj.text.length;\n var start, end;\n function coords(ch, bias) {\n return charCoords(cm, Pos(line, ch), \"div\", lineObj, bias)\n }\n\n function wrapX(pos, dir, side) {\n var extent = wrappedLineExtentChar(cm, lineObj, null, pos);\n var prop = (dir == \"ltr\") == (side == \"after\") ? \"left\" : \"right\";\n var ch = side == \"after\" ? extent.begin : extent.end - (/\\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1);\n return coords(ch, prop)[prop]\n }\n\n var order = getOrder(lineObj, doc.direction);\n iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) {\n var ltr = dir == \"ltr\";\n var fromPos = coords(from, ltr ? \"left\" : \"right\");\n var toPos = coords(to - 1, ltr ? \"right\" : \"left\");\n\n var openStart = fromArg == null && from == 0, openEnd = toArg == null && to == lineLen;\n var first = i == 0, last = !order || i == order.length - 1;\n if (toPos.top - fromPos.top <= 3) { // Single line\n var openLeft = (docLTR ? openStart : openEnd) && first;\n var openRight = (docLTR ? openEnd : openStart) && last;\n var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left;\n var right = openRight ? rightSide : (ltr ? toPos : fromPos).right;\n add(left, fromPos.top, right - left, fromPos.bottom);\n } else { // Multiple lines\n var topLeft, topRight, botLeft, botRight;\n if (ltr) {\n topLeft = docLTR && openStart && first ? leftSide : fromPos.left;\n topRight = docLTR ? rightSide : wrapX(from, dir, \"before\");\n botLeft = docLTR ? leftSide : wrapX(to, dir, \"after\");\n botRight = docLTR && openEnd && last ? rightSide : toPos.right;\n } else {\n topLeft = !docLTR ? leftSide : wrapX(from, dir, \"before\");\n topRight = !docLTR && openStart && first ? rightSide : fromPos.right;\n botLeft = !docLTR && openEnd && last ? leftSide : toPos.left;\n botRight = !docLTR ? rightSide : wrapX(to, dir, \"after\");\n }\n add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom);\n if (fromPos.bottom < toPos.top) { add(leftSide, fromPos.bottom, null, toPos.top); }\n add(botLeft, toPos.top, botRight - botLeft, toPos.bottom);\n }\n\n if (!start || cmpCoords(fromPos, start) < 0) { start = fromPos; }\n if (cmpCoords(toPos, start) < 0) { start = toPos; }\n if (!end || cmpCoords(fromPos, end) < 0) { end = fromPos; }\n if (cmpCoords(toPos, end) < 0) { end = toPos; }\n });\n return {start: start, end: end}\n }\n\n var sFrom = range.from(), sTo = range.to();\n if (sFrom.line == sTo.line) {\n drawForLine(sFrom.line, sFrom.ch, sTo.ch);\n } else {\n var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line);\n var singleVLine = visualLine(fromLine) == visualLine(toLine);\n var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end;\n var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start;\n if (singleVLine) {\n if (leftEnd.top < rightStart.top - 2) {\n add(leftEnd.right, leftEnd.top, null, leftEnd.bottom);\n add(leftSide, rightStart.top, rightStart.left, rightStart.bottom);\n } else {\n add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom);\n }\n }\n if (leftEnd.bottom < rightStart.top)\n { add(leftSide, leftEnd.bottom, null, rightStart.top); }\n }\n\n output.appendChild(fragment);\n }\n\n // Cursor-blinking\n function restartBlink(cm) {\n if (!cm.state.focused) { return }\n var display = cm.display;\n clearInterval(display.blinker);\n var on = true;\n display.cursorDiv.style.visibility = \"\";\n if (cm.options.cursorBlinkRate > 0)\n { display.blinker = setInterval(function () {\n if (!cm.hasFocus()) { onBlur(cm); }\n display.cursorDiv.style.visibility = (on = !on) ? \"\" : \"hidden\";\n }, cm.options.cursorBlinkRate); }\n else if (cm.options.cursorBlinkRate < 0)\n { display.cursorDiv.style.visibility = \"hidden\"; }\n }\n\n function ensureFocus(cm) {\n if (!cm.hasFocus()) {\n cm.display.input.focus();\n if (!cm.state.focused) { onFocus(cm); }\n }\n }\n\n function delayBlurEvent(cm) {\n cm.state.delayingBlurEvent = true;\n setTimeout(function () { if (cm.state.delayingBlurEvent) {\n cm.state.delayingBlurEvent = false;\n if (cm.state.focused) { onBlur(cm); }\n } }, 100);\n }\n\n function onFocus(cm, e) {\n if (cm.state.delayingBlurEvent && !cm.state.draggingText) { cm.state.delayingBlurEvent = false; }\n\n if (cm.options.readOnly == \"nocursor\") { return }\n if (!cm.state.focused) {\n signal(cm, \"focus\", cm, e);\n cm.state.focused = true;\n addClass(cm.display.wrapper, \"CodeMirror-focused\");\n // This test prevents this from firing when a context\n // menu is closed (since the input reset would kill the\n // select-all detection hack)\n if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) {\n cm.display.input.reset();\n if (webkit) { setTimeout(function () { return cm.display.input.reset(true); }, 20); } // Issue #1730\n }\n cm.display.input.receivedFocus();\n }\n restartBlink(cm);\n }\n function onBlur(cm, e) {\n if (cm.state.delayingBlurEvent) { return }\n\n if (cm.state.focused) {\n signal(cm, \"blur\", cm, e);\n cm.state.focused = false;\n rmClass(cm.display.wrapper, \"CodeMirror-focused\");\n }\n clearInterval(cm.display.blinker);\n setTimeout(function () { if (!cm.state.focused) { cm.display.shift = false; } }, 150);\n }\n\n // Read the actual heights of the rendered lines, and update their\n // stored heights to match.\n function updateHeightsInViewport(cm) {\n var display = cm.display;\n var prevBottom = display.lineDiv.offsetTop;\n var viewTop = Math.max(0, display.scroller.getBoundingClientRect().top);\n var oldHeight = display.lineDiv.getBoundingClientRect().top;\n var mustScroll = 0;\n for (var i = 0; i < display.view.length; i++) {\n var cur = display.view[i], wrapping = cm.options.lineWrapping;\n var height = (void 0), width = 0;\n if (cur.hidden) { continue }\n oldHeight += cur.line.height;\n if (ie && ie_version < 8) {\n var bot = cur.node.offsetTop + cur.node.offsetHeight;\n height = bot - prevBottom;\n prevBottom = bot;\n } else {\n var box = cur.node.getBoundingClientRect();\n height = box.bottom - box.top;\n // Check that lines don't extend past the right of the current\n // editor width\n if (!wrapping && cur.text.firstChild)\n { width = cur.text.firstChild.getBoundingClientRect().right - box.left - 1; }\n }\n var diff = cur.line.height - height;\n if (diff > .005 || diff < -.005) {\n if (oldHeight < viewTop) { mustScroll -= diff; }\n updateLineHeight(cur.line, height);\n updateWidgetHeight(cur.line);\n if (cur.rest) { for (var j = 0; j < cur.rest.length; j++)\n { updateWidgetHeight(cur.rest[j]); } }\n }\n if (width > cm.display.sizerWidth) {\n var chWidth = Math.ceil(width / charWidth(cm.display));\n if (chWidth > cm.display.maxLineLength) {\n cm.display.maxLineLength = chWidth;\n cm.display.maxLine = cur.line;\n cm.display.maxLineChanged = true;\n }\n }\n }\n if (Math.abs(mustScroll) > 2) { display.scroller.scrollTop += mustScroll; }\n }\n\n // Read and store the height of line widgets associated with the\n // given line.\n function updateWidgetHeight(line) {\n if (line.widgets) { for (var i = 0; i < line.widgets.length; ++i) {\n var w = line.widgets[i], parent = w.node.parentNode;\n if (parent) { w.height = parent.offsetHeight; }\n } }\n }\n\n // Compute the lines that are visible in a given viewport (defaults\n // the current scroll position). viewport may contain top,\n // height, and ensure (see op.scrollToPos) properties.\n function visibleLines(display, doc, viewport) {\n var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop;\n top = Math.floor(top - paddingTop(display));\n var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight;\n\n var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom);\n // Ensure is a {from: {line, ch}, to: {line, ch}} object, and\n // forces those lines into the viewport (if possible).\n if (viewport && viewport.ensure) {\n var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line;\n if (ensureFrom < from) {\n from = ensureFrom;\n to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight);\n } else if (Math.min(ensureTo, doc.lastLine()) >= to) {\n from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight);\n to = ensureTo;\n }\n }\n return {from: from, to: Math.max(to, from + 1)}\n }\n\n // SCROLLING THINGS INTO VIEW\n\n // If an editor sits on the top or bottom of the window, partially\n // scrolled out of view, this ensures that the cursor is visible.\n function maybeScrollWindow(cm, rect) {\n if (signalDOMEvent(cm, \"scrollCursorIntoView\")) { return }\n\n var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null;\n var doc = display.wrapper.ownerDocument;\n if (rect.top + box.top < 0) { doScroll = true; }\n else if (rect.bottom + box.top > (doc.defaultView.innerHeight || doc.documentElement.clientHeight)) { doScroll = false; }\n if (doScroll != null && !phantom) {\n var scrollNode = elt(\"div\", \"\\u200b\", null, (\"position: absolute;\\n top: \" + (rect.top - display.viewOffset - paddingTop(cm.display)) + \"px;\\n height: \" + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + \"px;\\n left: \" + (rect.left) + \"px; width: \" + (Math.max(2, rect.right - rect.left)) + \"px;\"));\n cm.display.lineSpace.appendChild(scrollNode);\n scrollNode.scrollIntoView(doScroll);\n cm.display.lineSpace.removeChild(scrollNode);\n }\n }\n\n // Scroll a given position into view (immediately), verifying that\n // it actually became visible (as line heights are accurately\n // measured, the position of something may 'drift' during drawing).\n function scrollPosIntoView(cm, pos, end, margin) {\n if (margin == null) { margin = 0; }\n var rect;\n if (!cm.options.lineWrapping && pos == end) {\n // Set pos and end to the cursor positions around the character pos sticks to\n // If pos.sticky == \"before\", that is around pos.ch - 1, otherwise around pos.ch\n // If pos == Pos(_, 0, \"before\"), pos and end are unchanged\n end = pos.sticky == \"before\" ? Pos(pos.line, pos.ch + 1, \"before\") : pos;\n pos = pos.ch ? Pos(pos.line, pos.sticky == \"before\" ? pos.ch - 1 : pos.ch, \"after\") : pos;\n }\n for (var limit = 0; limit < 5; limit++) {\n var changed = false;\n var coords = cursorCoords(cm, pos);\n var endCoords = !end || end == pos ? coords : cursorCoords(cm, end);\n rect = {left: Math.min(coords.left, endCoords.left),\n top: Math.min(coords.top, endCoords.top) - margin,\n right: Math.max(coords.left, endCoords.left),\n bottom: Math.max(coords.bottom, endCoords.bottom) + margin};\n var scrollPos = calculateScrollPos(cm, rect);\n var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft;\n if (scrollPos.scrollTop != null) {\n updateScrollTop(cm, scrollPos.scrollTop);\n if (Math.abs(cm.doc.scrollTop - startTop) > 1) { changed = true; }\n }\n if (scrollPos.scrollLeft != null) {\n setScrollLeft(cm, scrollPos.scrollLeft);\n if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { changed = true; }\n }\n if (!changed) { break }\n }\n return rect\n }\n\n // Scroll a given set of coordinates into view (immediately).\n function scrollIntoView(cm, rect) {\n var scrollPos = calculateScrollPos(cm, rect);\n if (scrollPos.scrollTop != null) { updateScrollTop(cm, scrollPos.scrollTop); }\n if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft); }\n }\n\n // Calculate a new scroll position needed to scroll the given\n // rectangle into view. Returns an object with scrollTop and\n // scrollLeft properties. When these are undefined, the\n // vertical/horizontal position does not need to be adjusted.\n function calculateScrollPos(cm, rect) {\n var display = cm.display, snapMargin = textHeight(cm.display);\n if (rect.top < 0) { rect.top = 0; }\n var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop;\n var screen = displayHeight(cm), result = {};\n if (rect.bottom - rect.top > screen) { rect.bottom = rect.top + screen; }\n var docBottom = cm.doc.height + paddingVert(display);\n var atTop = rect.top < snapMargin, atBottom = rect.bottom > docBottom - snapMargin;\n if (rect.top < screentop) {\n result.scrollTop = atTop ? 0 : rect.top;\n } else if (rect.bottom > screentop + screen) {\n var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen);\n if (newTop != screentop) { result.scrollTop = newTop; }\n }\n\n var gutterSpace = cm.options.fixedGutter ? 0 : display.gutters.offsetWidth;\n var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft - gutterSpace;\n var screenw = displayWidth(cm) - display.gutters.offsetWidth;\n var tooWide = rect.right - rect.left > screenw;\n if (tooWide) { rect.right = rect.left + screenw; }\n if (rect.left < 10)\n { result.scrollLeft = 0; }\n else if (rect.left < screenleft)\n { result.scrollLeft = Math.max(0, rect.left + gutterSpace - (tooWide ? 0 : 10)); }\n else if (rect.right > screenw + screenleft - 3)\n { result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw; }\n return result\n }\n\n // Store a relative adjustment to the scroll position in the current\n // operation (to be applied when the operation finishes).\n function addToScrollTop(cm, top) {\n if (top == null) { return }\n resolveScrollToPos(cm);\n cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top;\n }\n\n // Make sure that at the end of the operation the current cursor is\n // shown.\n function ensureCursorVisible(cm) {\n resolveScrollToPos(cm);\n var cur = cm.getCursor();\n cm.curOp.scrollToPos = {from: cur, to: cur, margin: cm.options.cursorScrollMargin};\n }\n\n function scrollToCoords(cm, x, y) {\n if (x != null || y != null) { resolveScrollToPos(cm); }\n if (x != null) { cm.curOp.scrollLeft = x; }\n if (y != null) { cm.curOp.scrollTop = y; }\n }\n\n function scrollToRange(cm, range) {\n resolveScrollToPos(cm);\n cm.curOp.scrollToPos = range;\n }\n\n // When an operation has its scrollToPos property set, and another\n // scroll action is applied before the end of the operation, this\n // 'simulates' scrolling that position into view in a cheap way, so\n // that the effect of intermediate scroll commands is not ignored.\n function resolveScrollToPos(cm) {\n var range = cm.curOp.scrollToPos;\n if (range) {\n cm.curOp.scrollToPos = null;\n var from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to);\n scrollToCoordsRange(cm, from, to, range.margin);\n }\n }\n\n function scrollToCoordsRange(cm, from, to, margin) {\n var sPos = calculateScrollPos(cm, {\n left: Math.min(from.left, to.left),\n top: Math.min(from.top, to.top) - margin,\n right: Math.max(from.right, to.right),\n bottom: Math.max(from.bottom, to.bottom) + margin\n });\n scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop);\n }\n\n // Sync the scrollable area and scrollbars, ensure the viewport\n // covers the visible area.\n function updateScrollTop(cm, val) {\n if (Math.abs(cm.doc.scrollTop - val) < 2) { return }\n if (!gecko) { updateDisplaySimple(cm, {top: val}); }\n setScrollTop(cm, val, true);\n if (gecko) { updateDisplaySimple(cm); }\n startWorker(cm, 100);\n }\n\n function setScrollTop(cm, val, forceScroll) {\n val = Math.max(0, Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val));\n if (cm.display.scroller.scrollTop == val && !forceScroll) { return }\n cm.doc.scrollTop = val;\n cm.display.scrollbars.setScrollTop(val);\n if (cm.display.scroller.scrollTop != val) { cm.display.scroller.scrollTop = val; }\n }\n\n // Sync scroller and scrollbar, ensure the gutter elements are\n // aligned.\n function setScrollLeft(cm, val, isScroller, forceScroll) {\n val = Math.max(0, Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth));\n if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) { return }\n cm.doc.scrollLeft = val;\n alignHorizontally(cm);\n if (cm.display.scroller.scrollLeft != val) { cm.display.scroller.scrollLeft = val; }\n cm.display.scrollbars.setScrollLeft(val);\n }\n\n // SCROLLBARS\n\n // Prepare DOM reads needed to update the scrollbars. Done in one\n // shot to minimize update/measure roundtrips.\n function measureForScrollbars(cm) {\n var d = cm.display, gutterW = d.gutters.offsetWidth;\n var docH = Math.round(cm.doc.height + paddingVert(cm.display));\n return {\n clientHeight: d.scroller.clientHeight,\n viewHeight: d.wrapper.clientHeight,\n scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth,\n viewWidth: d.wrapper.clientWidth,\n barLeft: cm.options.fixedGutter ? gutterW : 0,\n docHeight: docH,\n scrollHeight: docH + scrollGap(cm) + d.barHeight,\n nativeBarWidth: d.nativeBarWidth,\n gutterWidth: gutterW\n }\n }\n\n var NativeScrollbars = function(place, scroll, cm) {\n this.cm = cm;\n var vert = this.vert = elt(\"div\", [elt(\"div\", null, null, \"min-width: 1px\")], \"CodeMirror-vscrollbar\");\n var horiz = this.horiz = elt(\"div\", [elt(\"div\", null, null, \"height: 100%; min-height: 1px\")], \"CodeMirror-hscrollbar\");\n vert.tabIndex = horiz.tabIndex = -1;\n place(vert); place(horiz);\n\n on(vert, \"scroll\", function () {\n if (vert.clientHeight) { scroll(vert.scrollTop, \"vertical\"); }\n });\n on(horiz, \"scroll\", function () {\n if (horiz.clientWidth) { scroll(horiz.scrollLeft, \"horizontal\"); }\n });\n\n this.checkedZeroWidth = false;\n // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).\n if (ie && ie_version < 8) { this.horiz.style.minHeight = this.vert.style.minWidth = \"18px\"; }\n };\n\n NativeScrollbars.prototype.update = function (measure) {\n var needsH = measure.scrollWidth > measure.clientWidth + 1;\n var needsV = measure.scrollHeight > measure.clientHeight + 1;\n var sWidth = measure.nativeBarWidth;\n\n if (needsV) {\n this.vert.style.display = \"block\";\n this.vert.style.bottom = needsH ? sWidth + \"px\" : \"0\";\n var totalHeight = measure.viewHeight - (needsH ? sWidth : 0);\n // A bug in IE8 can cause this value to be negative, so guard it.\n this.vert.firstChild.style.height =\n Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + \"px\";\n } else {\n this.vert.scrollTop = 0;\n this.vert.style.display = \"\";\n this.vert.firstChild.style.height = \"0\";\n }\n\n if (needsH) {\n this.horiz.style.display = \"block\";\n this.horiz.style.right = needsV ? sWidth + \"px\" : \"0\";\n this.horiz.style.left = measure.barLeft + \"px\";\n var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0);\n this.horiz.firstChild.style.width =\n Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + \"px\";\n } else {\n this.horiz.style.display = \"\";\n this.horiz.firstChild.style.width = \"0\";\n }\n\n if (!this.checkedZeroWidth && measure.clientHeight > 0) {\n if (sWidth == 0) { this.zeroWidthHack(); }\n this.checkedZeroWidth = true;\n }\n\n return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0}\n };\n\n NativeScrollbars.prototype.setScrollLeft = function (pos) {\n if (this.horiz.scrollLeft != pos) { this.horiz.scrollLeft = pos; }\n if (this.disableHoriz) { this.enableZeroWidthBar(this.horiz, this.disableHoriz, \"horiz\"); }\n };\n\n NativeScrollbars.prototype.setScrollTop = function (pos) {\n if (this.vert.scrollTop != pos) { this.vert.scrollTop = pos; }\n if (this.disableVert) { this.enableZeroWidthBar(this.vert, this.disableVert, \"vert\"); }\n };\n\n NativeScrollbars.prototype.zeroWidthHack = function () {\n var w = mac && !mac_geMountainLion ? \"12px\" : \"18px\";\n this.horiz.style.height = this.vert.style.width = w;\n this.horiz.style.visibility = this.vert.style.visibility = \"hidden\";\n this.disableHoriz = new Delayed;\n this.disableVert = new Delayed;\n };\n\n NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) {\n bar.style.visibility = \"\";\n function maybeDisable() {\n // To find out whether the scrollbar is still visible, we\n // check whether the element under the pixel in the bottom\n // right corner of the scrollbar box is the scrollbar box\n // itself (when the bar is still visible) or its filler child\n // (when the bar is hidden). If it is still visible, we keep\n // it enabled, if it's hidden, we disable pointer events.\n var box = bar.getBoundingClientRect();\n var elt = type == \"vert\" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2)\n : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1);\n if (elt != bar) { bar.style.visibility = \"hidden\"; }\n else { delay.set(1000, maybeDisable); }\n }\n delay.set(1000, maybeDisable);\n };\n\n NativeScrollbars.prototype.clear = function () {\n var parent = this.horiz.parentNode;\n parent.removeChild(this.horiz);\n parent.removeChild(this.vert);\n };\n\n var NullScrollbars = function () {};\n\n NullScrollbars.prototype.update = function () { return {bottom: 0, right: 0} };\n NullScrollbars.prototype.setScrollLeft = function () {};\n NullScrollbars.prototype.setScrollTop = function () {};\n NullScrollbars.prototype.clear = function () {};\n\n function updateScrollbars(cm, measure) {\n if (!measure) { measure = measureForScrollbars(cm); }\n var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight;\n updateScrollbarsInner(cm, measure);\n for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) {\n if (startWidth != cm.display.barWidth && cm.options.lineWrapping)\n { updateHeightsInViewport(cm); }\n updateScrollbarsInner(cm, measureForScrollbars(cm));\n startWidth = cm.display.barWidth; startHeight = cm.display.barHeight;\n }\n }\n\n // Re-synchronize the fake scrollbars with the actual size of the\n // content.\n function updateScrollbarsInner(cm, measure) {\n var d = cm.display;\n var sizes = d.scrollbars.update(measure);\n\n d.sizer.style.paddingRight = (d.barWidth = sizes.right) + \"px\";\n d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + \"px\";\n d.heightForcer.style.borderBottom = sizes.bottom + \"px solid transparent\";\n\n if (sizes.right && sizes.bottom) {\n d.scrollbarFiller.style.display = \"block\";\n d.scrollbarFiller.style.height = sizes.bottom + \"px\";\n d.scrollbarFiller.style.width = sizes.right + \"px\";\n } else { d.scrollbarFiller.style.display = \"\"; }\n if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {\n d.gutterFiller.style.display = \"block\";\n d.gutterFiller.style.height = sizes.bottom + \"px\";\n d.gutterFiller.style.width = measure.gutterWidth + \"px\";\n } else { d.gutterFiller.style.display = \"\"; }\n }\n\n var scrollbarModel = {\"native\": NativeScrollbars, \"null\": NullScrollbars};\n\n function initScrollbars(cm) {\n if (cm.display.scrollbars) {\n cm.display.scrollbars.clear();\n if (cm.display.scrollbars.addClass)\n { rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); }\n }\n\n cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) {\n cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller);\n // Prevent clicks in the scrollbars from killing focus\n on(node, \"mousedown\", function () {\n if (cm.state.focused) { setTimeout(function () { return cm.display.input.focus(); }, 0); }\n });\n node.setAttribute(\"cm-not-content\", \"true\");\n }, function (pos, axis) {\n if (axis == \"horizontal\") { setScrollLeft(cm, pos); }\n else { updateScrollTop(cm, pos); }\n }, cm);\n if (cm.display.scrollbars.addClass)\n { addClass(cm.display.wrapper, cm.display.scrollbars.addClass); }\n }\n\n // Operations are used to wrap a series of changes to the editor\n // state in such a way that each change won't have to update the\n // cursor and display (which would be awkward, slow, and\n // error-prone). Instead, display updates are batched and then all\n // combined and executed at once.\n\n var nextOpId = 0;\n // Start a new operation.\n function startOperation(cm) {\n cm.curOp = {\n cm: cm,\n viewChanged: false, // Flag that indicates that lines might need to be redrawn\n startHeight: cm.doc.height, // Used to detect need to update scrollbar\n forceUpdate: false, // Used to force a redraw\n updateInput: 0, // Whether to reset the input textarea\n typing: false, // Whether this reset should be careful to leave existing text (for compositing)\n changeObjs: null, // Accumulated changes, for firing change events\n cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on\n cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already\n selectionChanged: false, // Whether the selection needs to be redrawn\n updateMaxLine: false, // Set when the widest line needs to be determined anew\n scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet\n scrollToPos: null, // Used to scroll to a specific position\n focus: false,\n id: ++nextOpId, // Unique ID\n markArrays: null // Used by addMarkedSpan\n };\n pushOperation(cm.curOp);\n }\n\n // Finish an operation, updating the display and signalling delayed events\n function endOperation(cm) {\n var op = cm.curOp;\n if (op) { finishOperation(op, function (group) {\n for (var i = 0; i < group.ops.length; i++)\n { group.ops[i].cm.curOp = null; }\n endOperations(group);\n }); }\n }\n\n // The DOM updates done when an operation finishes are batched so\n // that the minimum number of relayouts are required.\n function endOperations(group) {\n var ops = group.ops;\n for (var i = 0; i < ops.length; i++) // Read DOM\n { endOperation_R1(ops[i]); }\n for (var i$1 = 0; i$1 < ops.length; i$1++) // Write DOM (maybe)\n { endOperation_W1(ops[i$1]); }\n for (var i$2 = 0; i$2 < ops.length; i$2++) // Read DOM\n { endOperation_R2(ops[i$2]); }\n for (var i$3 = 0; i$3 < ops.length; i$3++) // Write DOM (maybe)\n { endOperation_W2(ops[i$3]); }\n for (var i$4 = 0; i$4 < ops.length; i$4++) // Read DOM\n { endOperation_finish(ops[i$4]); }\n }\n\n function endOperation_R1(op) {\n var cm = op.cm, display = cm.display;\n maybeClipScrollbars(cm);\n if (op.updateMaxLine) { findMaxLine(cm); }\n\n op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null ||\n op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom ||\n op.scrollToPos.to.line >= display.viewTo) ||\n display.maxLineChanged && cm.options.lineWrapping;\n op.update = op.mustUpdate &&\n new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate);\n }\n\n function endOperation_W1(op) {\n op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update);\n }\n\n function endOperation_R2(op) {\n var cm = op.cm, display = cm.display;\n if (op.updatedDisplay) { updateHeightsInViewport(cm); }\n\n op.barMeasure = measureForScrollbars(cm);\n\n // If the max line changed since it was last measured, measure it,\n // and ensure the document's width matches it.\n // updateDisplay_W2 will use these properties to do the actual resizing\n if (display.maxLineChanged && !cm.options.lineWrapping) {\n op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3;\n cm.display.sizerWidth = op.adjustWidthTo;\n op.barMeasure.scrollWidth =\n Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth);\n op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm));\n }\n\n if (op.updatedDisplay || op.selectionChanged)\n { op.preparedSelection = display.input.prepareSelection(); }\n }\n\n function endOperation_W2(op) {\n var cm = op.cm;\n\n if (op.adjustWidthTo != null) {\n cm.display.sizer.style.minWidth = op.adjustWidthTo + \"px\";\n if (op.maxScrollLeft < cm.doc.scrollLeft)\n { setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); }\n cm.display.maxLineChanged = false;\n }\n\n var takeFocus = op.focus && op.focus == activeElt(root(cm));\n if (op.preparedSelection)\n { cm.display.input.showSelection(op.preparedSelection, takeFocus); }\n if (op.updatedDisplay || op.startHeight != cm.doc.height)\n { updateScrollbars(cm, op.barMeasure); }\n if (op.updatedDisplay)\n { setDocumentHeight(cm, op.barMeasure); }\n\n if (op.selectionChanged) { restartBlink(cm); }\n\n if (cm.state.focused && op.updateInput)\n { cm.display.input.reset(op.typing); }\n if (takeFocus) { ensureFocus(op.cm); }\n }\n\n function endOperation_finish(op) {\n var cm = op.cm, display = cm.display, doc = cm.doc;\n\n if (op.updatedDisplay) { postUpdateDisplay(cm, op.update); }\n\n // Abort mouse wheel delta measurement, when scrolling explicitly\n if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos))\n { display.wheelStartX = display.wheelStartY = null; }\n\n // Propagate the scroll position to the actual DOM scroller\n if (op.scrollTop != null) { setScrollTop(cm, op.scrollTop, op.forceScroll); }\n\n if (op.scrollLeft != null) { setScrollLeft(cm, op.scrollLeft, true, true); }\n // If we need to scroll a specific position into view, do so.\n if (op.scrollToPos) {\n var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from),\n clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin);\n maybeScrollWindow(cm, rect);\n }\n\n // Fire events for markers that are hidden/unidden by editing or\n // undoing\n var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers;\n if (hidden) { for (var i = 0; i < hidden.length; ++i)\n { if (!hidden[i].lines.length) { signal(hidden[i], \"hide\"); } } }\n if (unhidden) { for (var i$1 = 0; i$1 < unhidden.length; ++i$1)\n { if (unhidden[i$1].lines.length) { signal(unhidden[i$1], \"unhide\"); } } }\n\n if (display.wrapper.offsetHeight)\n { doc.scrollTop = cm.display.scroller.scrollTop; }\n\n // Fire change events, and delayed event handlers\n if (op.changeObjs)\n { signal(cm, \"changes\", cm, op.changeObjs); }\n if (op.update)\n { op.update.finish(); }\n }\n\n // Run the given function in an operation\n function runInOp(cm, f) {\n if (cm.curOp) { return f() }\n startOperation(cm);\n try { return f() }\n finally { endOperation(cm); }\n }\n // Wraps a function in an operation. Returns the wrapped function.\n function operation(cm, f) {\n return function() {\n if (cm.curOp) { return f.apply(cm, arguments) }\n startOperation(cm);\n try { return f.apply(cm, arguments) }\n finally { endOperation(cm); }\n }\n }\n // Used to add methods to editor and doc instances, wrapping them in\n // operations.\n function methodOp(f) {\n return function() {\n if (this.curOp) { return f.apply(this, arguments) }\n startOperation(this);\n try { return f.apply(this, arguments) }\n finally { endOperation(this); }\n }\n }\n function docMethodOp(f) {\n return function() {\n var cm = this.cm;\n if (!cm || cm.curOp) { return f.apply(this, arguments) }\n startOperation(cm);\n try { return f.apply(this, arguments) }\n finally { endOperation(cm); }\n }\n }\n\n // HIGHLIGHT WORKER\n\n function startWorker(cm, time) {\n if (cm.doc.highlightFrontier < cm.display.viewTo)\n { cm.state.highlight.set(time, bind(highlightWorker, cm)); }\n }\n\n function highlightWorker(cm) {\n var doc = cm.doc;\n if (doc.highlightFrontier >= cm.display.viewTo) { return }\n var end = +new Date + cm.options.workTime;\n var context = getContextBefore(cm, doc.highlightFrontier);\n var changedLines = [];\n\n doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) {\n if (context.line >= cm.display.viewFrom) { // Visible\n var oldStyles = line.styles;\n var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null;\n var highlighted = highlightLine(cm, line, context, true);\n if (resetState) { context.state = resetState; }\n line.styles = highlighted.styles;\n var oldCls = line.styleClasses, newCls = highlighted.classes;\n if (newCls) { line.styleClasses = newCls; }\n else if (oldCls) { line.styleClasses = null; }\n var ischange = !oldStyles || oldStyles.length != line.styles.length ||\n oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass);\n for (var i = 0; !ischange && i < oldStyles.length; ++i) { ischange = oldStyles[i] != line.styles[i]; }\n if (ischange) { changedLines.push(context.line); }\n line.stateAfter = context.save();\n context.nextLine();\n } else {\n if (line.text.length <= cm.options.maxHighlightLength)\n { processLine(cm, line.text, context); }\n line.stateAfter = context.line % 5 == 0 ? context.save() : null;\n context.nextLine();\n }\n if (+new Date > end) {\n startWorker(cm, cm.options.workDelay);\n return true\n }\n });\n doc.highlightFrontier = context.line;\n doc.modeFrontier = Math.max(doc.modeFrontier, context.line);\n if (changedLines.length) { runInOp(cm, function () {\n for (var i = 0; i < changedLines.length; i++)\n { regLineChange(cm, changedLines[i], \"text\"); }\n }); }\n }\n\n // DISPLAY DRAWING\n\n var DisplayUpdate = function(cm, viewport, force) {\n var display = cm.display;\n\n this.viewport = viewport;\n // Store some values that we'll need later (but don't want to force a relayout for)\n this.visible = visibleLines(display, cm.doc, viewport);\n this.editorIsHidden = !display.wrapper.offsetWidth;\n this.wrapperHeight = display.wrapper.clientHeight;\n this.wrapperWidth = display.wrapper.clientWidth;\n this.oldDisplayWidth = displayWidth(cm);\n this.force = force;\n this.dims = getDimensions(cm);\n this.events = [];\n };\n\n DisplayUpdate.prototype.signal = function (emitter, type) {\n if (hasHandler(emitter, type))\n { this.events.push(arguments); }\n };\n DisplayUpdate.prototype.finish = function () {\n for (var i = 0; i < this.events.length; i++)\n { signal.apply(null, this.events[i]); }\n };\n\n function maybeClipScrollbars(cm) {\n var display = cm.display;\n if (!display.scrollbarsClipped && display.scroller.offsetWidth) {\n display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth;\n display.heightForcer.style.height = scrollGap(cm) + \"px\";\n display.sizer.style.marginBottom = -display.nativeBarWidth + \"px\";\n display.sizer.style.borderRightWidth = scrollGap(cm) + \"px\";\n display.scrollbarsClipped = true;\n }\n }\n\n function selectionSnapshot(cm) {\n if (cm.hasFocus()) { return null }\n var active = activeElt(root(cm));\n if (!active || !contains(cm.display.lineDiv, active)) { return null }\n var result = {activeElt: active};\n if (window.getSelection) {\n var sel = win(cm).getSelection();\n if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) {\n result.anchorNode = sel.anchorNode;\n result.anchorOffset = sel.anchorOffset;\n result.focusNode = sel.focusNode;\n result.focusOffset = sel.focusOffset;\n }\n }\n return result\n }\n\n function restoreSelection(snapshot) {\n if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt(rootNode(snapshot.activeElt))) { return }\n snapshot.activeElt.focus();\n if (!/^(INPUT|TEXTAREA)$/.test(snapshot.activeElt.nodeName) &&\n snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) {\n var doc = snapshot.activeElt.ownerDocument;\n var sel = doc.defaultView.getSelection(), range = doc.createRange();\n range.setEnd(snapshot.anchorNode, snapshot.anchorOffset);\n range.collapse(false);\n sel.removeAllRanges();\n sel.addRange(range);\n sel.extend(snapshot.focusNode, snapshot.focusOffset);\n }\n }\n\n // Does the actual updating of the line display. Bails out\n // (returning false) when there is nothing to be done and forced is\n // false.\n function updateDisplayIfNeeded(cm, update) {\n var display = cm.display, doc = cm.doc;\n\n if (update.editorIsHidden) {\n resetView(cm);\n return false\n }\n\n // Bail out if the visible area is already rendered and nothing changed.\n if (!update.force &&\n update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo &&\n (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) &&\n display.renderedView == display.view && countDirtyView(cm) == 0)\n { return false }\n\n if (maybeUpdateLineNumberWidth(cm)) {\n resetView(cm);\n update.dims = getDimensions(cm);\n }\n\n // Compute a suitable new viewport (from & to)\n var end = doc.first + doc.size;\n var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first);\n var to = Math.min(end, update.visible.to + cm.options.viewportMargin);\n if (display.viewFrom < from && from - display.viewFrom < 20) { from = Math.max(doc.first, display.viewFrom); }\n if (display.viewTo > to && display.viewTo - to < 20) { to = Math.min(end, display.viewTo); }\n if (sawCollapsedSpans) {\n from = visualLineNo(cm.doc, from);\n to = visualLineEndNo(cm.doc, to);\n }\n\n var different = from != display.viewFrom || to != display.viewTo ||\n display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth;\n adjustView(cm, from, to);\n\n display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom));\n // Position the mover div to align with the current scroll position\n cm.display.mover.style.top = display.viewOffset + \"px\";\n\n var toUpdate = countDirtyView(cm);\n if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view &&\n (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo))\n { return false }\n\n // For big changes, we hide the enclosing element during the\n // update, since that speeds up the operations on most browsers.\n var selSnapshot = selectionSnapshot(cm);\n if (toUpdate > 4) { display.lineDiv.style.display = \"none\"; }\n patchDisplay(cm, display.updateLineNumbers, update.dims);\n if (toUpdate > 4) { display.lineDiv.style.display = \"\"; }\n display.renderedView = display.view;\n // There might have been a widget with a focused element that got\n // hidden or updated, if so re-focus it.\n restoreSelection(selSnapshot);\n\n // Prevent selection and cursors from interfering with the scroll\n // width and height.\n removeChildren(display.cursorDiv);\n removeChildren(display.selectionDiv);\n display.gutters.style.height = display.sizer.style.minHeight = 0;\n\n if (different) {\n display.lastWrapHeight = update.wrapperHeight;\n display.lastWrapWidth = update.wrapperWidth;\n startWorker(cm, 400);\n }\n\n display.updateLineNumbers = null;\n\n return true\n }\n\n function postUpdateDisplay(cm, update) {\n var viewport = update.viewport;\n\n for (var first = true;; first = false) {\n if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) {\n // Clip forced viewport to actual scrollable area.\n if (viewport && viewport.top != null)\n { viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}; }\n // Updated line heights might result in the drawn area not\n // actually covering the viewport. Keep looping until it does.\n update.visible = visibleLines(cm.display, cm.doc, viewport);\n if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo)\n { break }\n } else if (first) {\n update.visible = visibleLines(cm.display, cm.doc, viewport);\n }\n if (!updateDisplayIfNeeded(cm, update)) { break }\n updateHeightsInViewport(cm);\n var barMeasure = measureForScrollbars(cm);\n updateSelection(cm);\n updateScrollbars(cm, barMeasure);\n setDocumentHeight(cm, barMeasure);\n update.force = false;\n }\n\n update.signal(cm, \"update\", cm);\n if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) {\n update.signal(cm, \"viewportChange\", cm, cm.display.viewFrom, cm.display.viewTo);\n cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo;\n }\n }\n\n function updateDisplaySimple(cm, viewport) {\n var update = new DisplayUpdate(cm, viewport);\n if (updateDisplayIfNeeded(cm, update)) {\n updateHeightsInViewport(cm);\n postUpdateDisplay(cm, update);\n var barMeasure = measureForScrollbars(cm);\n updateSelection(cm);\n updateScrollbars(cm, barMeasure);\n setDocumentHeight(cm, barMeasure);\n update.finish();\n }\n }\n\n // Sync the actual display DOM structure with display.view, removing\n // nodes for lines that are no longer in view, and creating the ones\n // that are not there yet, and updating the ones that are out of\n // date.\n function patchDisplay(cm, updateNumbersFrom, dims) {\n var display = cm.display, lineNumbers = cm.options.lineNumbers;\n var container = display.lineDiv, cur = container.firstChild;\n\n function rm(node) {\n var next = node.nextSibling;\n // Works around a throw-scroll bug in OS X Webkit\n if (webkit && mac && cm.display.currentWheelTarget == node)\n { node.style.display = \"none\"; }\n else\n { node.parentNode.removeChild(node); }\n return next\n }\n\n var view = display.view, lineN = display.viewFrom;\n // Loop over the elements in the view, syncing cur (the DOM nodes\n // in display.lineDiv) with the view as we go.\n for (var i = 0; i < view.length; i++) {\n var lineView = view[i];\n if (lineView.hidden) ; else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet\n var node = buildLineElement(cm, lineView, lineN, dims);\n container.insertBefore(node, cur);\n } else { // Already drawn\n while (cur != lineView.node) { cur = rm(cur); }\n var updateNumber = lineNumbers && updateNumbersFrom != null &&\n updateNumbersFrom <= lineN && lineView.lineNumber;\n if (lineView.changes) {\n if (indexOf(lineView.changes, \"gutter\") > -1) { updateNumber = false; }\n updateLineForChanges(cm, lineView, lineN, dims);\n }\n if (updateNumber) {\n removeChildren(lineView.lineNumber);\n lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN)));\n }\n cur = lineView.node.nextSibling;\n }\n lineN += lineView.size;\n }\n while (cur) { cur = rm(cur); }\n }\n\n function updateGutterSpace(display) {\n var width = display.gutters.offsetWidth;\n display.sizer.style.marginLeft = width + \"px\";\n // Send an event to consumers responding to changes in gutter width.\n signalLater(display, \"gutterChanged\", display);\n }\n\n function setDocumentHeight(cm, measure) {\n cm.display.sizer.style.minHeight = measure.docHeight + \"px\";\n cm.display.heightForcer.style.top = measure.docHeight + \"px\";\n cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + \"px\";\n }\n\n // Re-align line numbers and gutter marks to compensate for\n // horizontal scrolling.\n function alignHorizontally(cm) {\n var display = cm.display, view = display.view;\n if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) { return }\n var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft;\n var gutterW = display.gutters.offsetWidth, left = comp + \"px\";\n for (var i = 0; i < view.length; i++) { if (!view[i].hidden) {\n if (cm.options.fixedGutter) {\n if (view[i].gutter)\n { view[i].gutter.style.left = left; }\n if (view[i].gutterBackground)\n { view[i].gutterBackground.style.left = left; }\n }\n var align = view[i].alignable;\n if (align) { for (var j = 0; j < align.length; j++)\n { align[j].style.left = left; } }\n } }\n if (cm.options.fixedGutter)\n { display.gutters.style.left = (comp + gutterW) + \"px\"; }\n }\n\n // Used to ensure that the line number gutter is still the right\n // size for the current document size. Returns true when an update\n // is needed.\n function maybeUpdateLineNumberWidth(cm) {\n if (!cm.options.lineNumbers) { return false }\n var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display;\n if (last.length != display.lineNumChars) {\n var test = display.measure.appendChild(elt(\"div\", [elt(\"div\", last)],\n \"CodeMirror-linenumber CodeMirror-gutter-elt\"));\n var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW;\n display.lineGutter.style.width = \"\";\n display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1;\n display.lineNumWidth = display.lineNumInnerWidth + padding;\n display.lineNumChars = display.lineNumInnerWidth ? last.length : -1;\n display.lineGutter.style.width = display.lineNumWidth + \"px\";\n updateGutterSpace(cm.display);\n return true\n }\n return false\n }\n\n function getGutters(gutters, lineNumbers) {\n var result = [], sawLineNumbers = false;\n for (var i = 0; i < gutters.length; i++) {\n var name = gutters[i], style = null;\n if (typeof name != \"string\") { style = name.style; name = name.className; }\n if (name == \"CodeMirror-linenumbers\") {\n if (!lineNumbers) { continue }\n else { sawLineNumbers = true; }\n }\n result.push({className: name, style: style});\n }\n if (lineNumbers && !sawLineNumbers) { result.push({className: \"CodeMirror-linenumbers\", style: null}); }\n return result\n }\n\n // Rebuild the gutter elements, ensure the margin to the left of the\n // code matches their width.\n function renderGutters(display) {\n var gutters = display.gutters, specs = display.gutterSpecs;\n removeChildren(gutters);\n display.lineGutter = null;\n for (var i = 0; i < specs.length; ++i) {\n var ref = specs[i];\n var className = ref.className;\n var style = ref.style;\n var gElt = gutters.appendChild(elt(\"div\", null, \"CodeMirror-gutter \" + className));\n if (style) { gElt.style.cssText = style; }\n if (className == \"CodeMirror-linenumbers\") {\n display.lineGutter = gElt;\n gElt.style.width = (display.lineNumWidth || 1) + \"px\";\n }\n }\n gutters.style.display = specs.length ? \"\" : \"none\";\n updateGutterSpace(display);\n }\n\n function updateGutters(cm) {\n renderGutters(cm.display);\n regChange(cm);\n alignHorizontally(cm);\n }\n\n // The display handles the DOM integration, both for input reading\n // and content drawing. It holds references to DOM nodes and\n // display-related state.\n\n function Display(place, doc, input, options) {\n var d = this;\n this.input = input;\n\n // Covers bottom-right square when both scrollbars are present.\n d.scrollbarFiller = elt(\"div\", null, \"CodeMirror-scrollbar-filler\");\n d.scrollbarFiller.setAttribute(\"cm-not-content\", \"true\");\n // Covers bottom of gutter when coverGutterNextToScrollbar is on\n // and h scrollbar is present.\n d.gutterFiller = elt(\"div\", null, \"CodeMirror-gutter-filler\");\n d.gutterFiller.setAttribute(\"cm-not-content\", \"true\");\n // Will contain the actual code, positioned to cover the viewport.\n d.lineDiv = eltP(\"div\", null, \"CodeMirror-code\");\n // Elements are added to these to represent selection and cursors.\n d.selectionDiv = elt(\"div\", null, null, \"position: relative; z-index: 1\");\n d.cursorDiv = elt(\"div\", null, \"CodeMirror-cursors\");\n // A visibility: hidden element used to find the size of things.\n d.measure = elt(\"div\", null, \"CodeMirror-measure\");\n // When lines outside of the viewport are measured, they are drawn in this.\n d.lineMeasure = elt(\"div\", null, \"CodeMirror-measure\");\n // Wraps everything that needs to exist inside the vertically-padded coordinate system\n d.lineSpace = eltP(\"div\", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv],\n null, \"position: relative; outline: none\");\n var lines = eltP(\"div\", [d.lineSpace], \"CodeMirror-lines\");\n // Moved around its parent to cover visible view.\n d.mover = elt(\"div\", [lines], null, \"position: relative\");\n // Set to the height of the document, allowing scrolling.\n d.sizer = elt(\"div\", [d.mover], \"CodeMirror-sizer\");\n d.sizerWidth = null;\n // Behavior of elts with overflow: auto and padding is\n // inconsistent across browsers. This is used to ensure the\n // scrollable area is big enough.\n d.heightForcer = elt(\"div\", null, null, \"position: absolute; height: \" + scrollerGap + \"px; width: 1px;\");\n // Will contain the gutters, if any.\n d.gutters = elt(\"div\", null, \"CodeMirror-gutters\");\n d.lineGutter = null;\n // Actual scrollable element.\n d.scroller = elt(\"div\", [d.sizer, d.heightForcer, d.gutters], \"CodeMirror-scroll\");\n d.scroller.setAttribute(\"tabIndex\", \"-1\");\n // The element in which the editor lives.\n d.wrapper = elt(\"div\", [d.scrollbarFiller, d.gutterFiller, d.scroller], \"CodeMirror\");\n // See #6982. FIXME remove when this has been fixed for a while in Chrome\n if (chrome && chrome_version >= 105) { d.wrapper.style.clipPath = \"inset(0px)\"; }\n\n // This attribute is respected by automatic translation systems such as Google Translate,\n // and may also be respected by tools used by human translators.\n d.wrapper.setAttribute('translate', 'no');\n\n // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported)\n if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; }\n if (!webkit && !(gecko && mobile)) { d.scroller.draggable = true; }\n\n if (place) {\n if (place.appendChild) { place.appendChild(d.wrapper); }\n else { place(d.wrapper); }\n }\n\n // Current rendered range (may be bigger than the view window).\n d.viewFrom = d.viewTo = doc.first;\n d.reportedViewFrom = d.reportedViewTo = doc.first;\n // Information about the rendered lines.\n d.view = [];\n d.renderedView = null;\n // Holds info about a single rendered line when it was rendered\n // for measurement, while not in view.\n d.externalMeasured = null;\n // Empty space (in pixels) above the view\n d.viewOffset = 0;\n d.lastWrapHeight = d.lastWrapWidth = 0;\n d.updateLineNumbers = null;\n\n d.nativeBarWidth = d.barHeight = d.barWidth = 0;\n d.scrollbarsClipped = false;\n\n // Used to only resize the line number gutter when necessary (when\n // the amount of lines crosses a boundary that makes its width change)\n d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null;\n // Set to true when a non-horizontal-scrolling line widget is\n // added. As an optimization, line widget aligning is skipped when\n // this is false.\n d.alignWidgets = false;\n\n d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n\n // Tracks the maximum line length so that the horizontal scrollbar\n // can be kept static when scrolling.\n d.maxLine = null;\n d.maxLineLength = 0;\n d.maxLineChanged = false;\n\n // Used for measuring wheel scrolling granularity\n d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null;\n\n // True when shift is held down.\n d.shift = false;\n\n // Used to track whether anything happened since the context menu\n // was opened.\n d.selForContextMenu = null;\n\n d.activeTouch = null;\n\n d.gutterSpecs = getGutters(options.gutters, options.lineNumbers);\n renderGutters(d);\n\n input.init(d);\n }\n\n // Since the delta values reported on mouse wheel events are\n // unstandardized between browsers and even browser versions, and\n // generally horribly unpredictable, this code starts by measuring\n // the scroll effect that the first few mouse wheel events have,\n // and, from that, detects the way it can convert deltas to pixel\n // offsets afterwards.\n //\n // The reason we want to know the amount a wheel event will scroll\n // is that it gives us a chance to update the display before the\n // actual scrolling happens, reducing flickering.\n\n var wheelSamples = 0, wheelPixelsPerUnit = null;\n // Fill in a browser-detected starting value on browsers where we\n // know one. These don't have to be accurate -- the result of them\n // being wrong would just be a slight flicker on the first wheel\n // scroll (if it is large enough).\n if (ie) { wheelPixelsPerUnit = -.53; }\n else if (gecko) { wheelPixelsPerUnit = 15; }\n else if (chrome) { wheelPixelsPerUnit = -.7; }\n else if (safari) { wheelPixelsPerUnit = -1/3; }\n\n function wheelEventDelta(e) {\n var dx = e.wheelDeltaX, dy = e.wheelDeltaY;\n if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { dx = e.detail; }\n if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { dy = e.detail; }\n else if (dy == null) { dy = e.wheelDelta; }\n return {x: dx, y: dy}\n }\n function wheelEventPixels(e) {\n var delta = wheelEventDelta(e);\n delta.x *= wheelPixelsPerUnit;\n delta.y *= wheelPixelsPerUnit;\n return delta\n }\n\n function onScrollWheel(cm, e) {\n // On Chrome 102, viewport updates somehow stop wheel-based\n // scrolling. Turning off pointer events during the scroll seems\n // to avoid the issue.\n if (chrome && chrome_version == 102) {\n if (cm.display.chromeScrollHack == null) { cm.display.sizer.style.pointerEvents = \"none\"; }\n else { clearTimeout(cm.display.chromeScrollHack); }\n cm.display.chromeScrollHack = setTimeout(function () {\n cm.display.chromeScrollHack = null;\n cm.display.sizer.style.pointerEvents = \"\";\n }, 100);\n }\n var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y;\n var pixelsPerUnit = wheelPixelsPerUnit;\n if (e.deltaMode === 0) {\n dx = e.deltaX;\n dy = e.deltaY;\n pixelsPerUnit = 1;\n }\n\n var display = cm.display, scroll = display.scroller;\n // Quit if there's nothing to scroll here\n var canScrollX = scroll.scrollWidth > scroll.clientWidth;\n var canScrollY = scroll.scrollHeight > scroll.clientHeight;\n if (!(dx && canScrollX || dy && canScrollY)) { return }\n\n // Webkit browsers on OS X abort momentum scrolls when the target\n // of the scroll event is removed from the scrollable element.\n // This hack (see related code in patchDisplay) makes sure the\n // element is kept around.\n if (dy && mac && webkit) {\n outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) {\n for (var i = 0; i < view.length; i++) {\n if (view[i].node == cur) {\n cm.display.currentWheelTarget = cur;\n break outer\n }\n }\n }\n }\n\n // On some browsers, horizontal scrolling will cause redraws to\n // happen before the gutter has been realigned, causing it to\n // wriggle around in a most unseemly way. When we have an\n // estimated pixels/delta value, we just handle horizontal\n // scrolling entirely here. It'll be slightly off from native, but\n // better than glitching out.\n if (dx && !gecko && !presto && pixelsPerUnit != null) {\n if (dy && canScrollY)\n { updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * pixelsPerUnit)); }\n setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * pixelsPerUnit));\n // Only prevent default scrolling if vertical scrolling is\n // actually possible. Otherwise, it causes vertical scroll\n // jitter on OSX trackpads when deltaX is small and deltaY\n // is large (issue #3579)\n if (!dy || (dy && canScrollY))\n { e_preventDefault(e); }\n display.wheelStartX = null; // Abort measurement, if in progress\n return\n }\n\n // 'Project' the visible viewport to cover the area that is being\n // scrolled into view (if we know enough to estimate it).\n if (dy && pixelsPerUnit != null) {\n var pixels = dy * pixelsPerUnit;\n var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight;\n if (pixels < 0) { top = Math.max(0, top + pixels - 50); }\n else { bot = Math.min(cm.doc.height, bot + pixels + 50); }\n updateDisplaySimple(cm, {top: top, bottom: bot});\n }\n\n if (wheelSamples < 20 && e.deltaMode !== 0) {\n if (display.wheelStartX == null) {\n display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop;\n display.wheelDX = dx; display.wheelDY = dy;\n setTimeout(function () {\n if (display.wheelStartX == null) { return }\n var movedX = scroll.scrollLeft - display.wheelStartX;\n var movedY = scroll.scrollTop - display.wheelStartY;\n var sample = (movedY && display.wheelDY && movedY / display.wheelDY) ||\n (movedX && display.wheelDX && movedX / display.wheelDX);\n display.wheelStartX = display.wheelStartY = null;\n if (!sample) { return }\n wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1);\n ++wheelSamples;\n }, 200);\n } else {\n display.wheelDX += dx; display.wheelDY += dy;\n }\n }\n }\n\n // Selection objects are immutable. A new one is created every time\n // the selection changes. A selection is one or more non-overlapping\n // (and non-touching) ranges, sorted, and an integer that indicates\n // which one is the primary selection (the one that's scrolled into\n // view, that getCursor returns, etc).\n var Selection = function(ranges, primIndex) {\n this.ranges = ranges;\n this.primIndex = primIndex;\n };\n\n Selection.prototype.primary = function () { return this.ranges[this.primIndex] };\n\n Selection.prototype.equals = function (other) {\n if (other == this) { return true }\n if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) { return false }\n for (var i = 0; i < this.ranges.length; i++) {\n var here = this.ranges[i], there = other.ranges[i];\n if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) { return false }\n }\n return true\n };\n\n Selection.prototype.deepCopy = function () {\n var out = [];\n for (var i = 0; i < this.ranges.length; i++)\n { out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head)); }\n return new Selection(out, this.primIndex)\n };\n\n Selection.prototype.somethingSelected = function () {\n for (var i = 0; i < this.ranges.length; i++)\n { if (!this.ranges[i].empty()) { return true } }\n return false\n };\n\n Selection.prototype.contains = function (pos, end) {\n if (!end) { end = pos; }\n for (var i = 0; i < this.ranges.length; i++) {\n var range = this.ranges[i];\n if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0)\n { return i }\n }\n return -1\n };\n\n var Range = function(anchor, head) {\n this.anchor = anchor; this.head = head;\n };\n\n Range.prototype.from = function () { return minPos(this.anchor, this.head) };\n Range.prototype.to = function () { return maxPos(this.anchor, this.head) };\n Range.prototype.empty = function () { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch };\n\n // Take an unsorted, potentially overlapping set of ranges, and\n // build a selection out of it. 'Consumes' ranges array (modifying\n // it).\n function normalizeSelection(cm, ranges, primIndex) {\n var mayTouch = cm && cm.options.selectionsMayTouch;\n var prim = ranges[primIndex];\n ranges.sort(function (a, b) { return cmp(a.from(), b.from()); });\n primIndex = indexOf(ranges, prim);\n for (var i = 1; i < ranges.length; i++) {\n var cur = ranges[i], prev = ranges[i - 1];\n var diff = cmp(prev.to(), cur.from());\n if (mayTouch && !cur.empty() ? diff > 0 : diff >= 0) {\n var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to());\n var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head;\n if (i <= primIndex) { --primIndex; }\n ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to));\n }\n }\n return new Selection(ranges, primIndex)\n }\n\n function simpleSelection(anchor, head) {\n return new Selection([new Range(anchor, head || anchor)], 0)\n }\n\n // Compute the position of the end of a change (its 'to' property\n // refers to the pre-change end).\n function changeEnd(change) {\n if (!change.text) { return change.to }\n return Pos(change.from.line + change.text.length - 1,\n lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0))\n }\n\n // Adjust a position to refer to the post-change position of the\n // same text, or the end of the change if the change covers it.\n function adjustForChange(pos, change) {\n if (cmp(pos, change.from) < 0) { return pos }\n if (cmp(pos, change.to) <= 0) { return changeEnd(change) }\n\n var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch;\n if (pos.line == change.to.line) { ch += changeEnd(change).ch - change.to.ch; }\n return Pos(line, ch)\n }\n\n function computeSelAfterChange(doc, change) {\n var out = [];\n for (var i = 0; i < doc.sel.ranges.length; i++) {\n var range = doc.sel.ranges[i];\n out.push(new Range(adjustForChange(range.anchor, change),\n adjustForChange(range.head, change)));\n }\n return normalizeSelection(doc.cm, out, doc.sel.primIndex)\n }\n\n function offsetPos(pos, old, nw) {\n if (pos.line == old.line)\n { return Pos(nw.line, pos.ch - old.ch + nw.ch) }\n else\n { return Pos(nw.line + (pos.line - old.line), pos.ch) }\n }\n\n // Used by replaceSelections to allow moving the selection to the\n // start or around the replaced test. Hint may be \"start\" or \"around\".\n function computeReplacedSel(doc, changes, hint) {\n var out = [];\n var oldPrev = Pos(doc.first, 0), newPrev = oldPrev;\n for (var i = 0; i < changes.length; i++) {\n var change = changes[i];\n var from = offsetPos(change.from, oldPrev, newPrev);\n var to = offsetPos(changeEnd(change), oldPrev, newPrev);\n oldPrev = change.to;\n newPrev = to;\n if (hint == \"around\") {\n var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0;\n out[i] = new Range(inv ? to : from, inv ? from : to);\n } else {\n out[i] = new Range(from, from);\n }\n }\n return new Selection(out, doc.sel.primIndex)\n }\n\n // Used to get the editor into a consistent state again when options change.\n\n function loadMode(cm) {\n cm.doc.mode = getMode(cm.options, cm.doc.modeOption);\n resetModeState(cm);\n }\n\n function resetModeState(cm) {\n cm.doc.iter(function (line) {\n if (line.stateAfter) { line.stateAfter = null; }\n if (line.styles) { line.styles = null; }\n });\n cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first;\n startWorker(cm, 100);\n cm.state.modeGen++;\n if (cm.curOp) { regChange(cm); }\n }\n\n // DOCUMENT DATA STRUCTURE\n\n // By default, updates that start and end at the beginning of a line\n // are treated specially, in order to make the association of line\n // widgets and marker elements with the text behave more intuitive.\n function isWholeLineUpdate(doc, change) {\n return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == \"\" &&\n (!doc.cm || doc.cm.options.wholeLineUpdateBefore)\n }\n\n // Perform a change on the document data structure.\n function updateDoc(doc, change, markedSpans, estimateHeight) {\n function spansFor(n) {return markedSpans ? markedSpans[n] : null}\n function update(line, text, spans) {\n updateLine(line, text, spans, estimateHeight);\n signalLater(line, \"change\", line, change);\n }\n function linesFor(start, end) {\n var result = [];\n for (var i = start; i < end; ++i)\n { result.push(new Line(text[i], spansFor(i), estimateHeight)); }\n return result\n }\n\n var from = change.from, to = change.to, text = change.text;\n var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line);\n var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line;\n\n // Adjust the line structure\n if (change.full) {\n doc.insert(0, linesFor(0, text.length));\n doc.remove(text.length, doc.size - text.length);\n } else if (isWholeLineUpdate(doc, change)) {\n // This is a whole-line replace. Treated specially to make\n // sure line objects move the way they are supposed to.\n var added = linesFor(0, text.length - 1);\n update(lastLine, lastLine.text, lastSpans);\n if (nlines) { doc.remove(from.line, nlines); }\n if (added.length) { doc.insert(from.line, added); }\n } else if (firstLine == lastLine) {\n if (text.length == 1) {\n update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans);\n } else {\n var added$1 = linesFor(1, text.length - 1);\n added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight));\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n doc.insert(from.line + 1, added$1);\n }\n } else if (text.length == 1) {\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0));\n doc.remove(from.line + 1, nlines);\n } else {\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans);\n var added$2 = linesFor(1, text.length - 1);\n if (nlines > 1) { doc.remove(from.line + 1, nlines - 1); }\n doc.insert(from.line + 1, added$2);\n }\n\n signalLater(doc, \"change\", doc, change);\n }\n\n // Call f for all linked documents.\n function linkedDocs(doc, f, sharedHistOnly) {\n function propagate(doc, skip, sharedHist) {\n if (doc.linked) { for (var i = 0; i < doc.linked.length; ++i) {\n var rel = doc.linked[i];\n if (rel.doc == skip) { continue }\n var shared = sharedHist && rel.sharedHist;\n if (sharedHistOnly && !shared) { continue }\n f(rel.doc, shared);\n propagate(rel.doc, doc, shared);\n } }\n }\n propagate(doc, null, true);\n }\n\n // Attach a document to an editor.\n function attachDoc(cm, doc) {\n if (doc.cm) { throw new Error(\"This document is already in use.\") }\n cm.doc = doc;\n doc.cm = cm;\n estimateLineHeights(cm);\n loadMode(cm);\n setDirectionClass(cm);\n cm.options.direction = doc.direction;\n if (!cm.options.lineWrapping) { findMaxLine(cm); }\n cm.options.mode = doc.modeOption;\n regChange(cm);\n }\n\n function setDirectionClass(cm) {\n (cm.doc.direction == \"rtl\" ? addClass : rmClass)(cm.display.lineDiv, \"CodeMirror-rtl\");\n }\n\n function directionChanged(cm) {\n runInOp(cm, function () {\n setDirectionClass(cm);\n regChange(cm);\n });\n }\n\n function History(prev) {\n // Arrays of change events and selections. Doing something adds an\n // event to done and clears undo. Undoing moves events from done\n // to undone, redoing moves them in the other direction.\n this.done = []; this.undone = [];\n this.undoDepth = prev ? prev.undoDepth : Infinity;\n // Used to track when changes can be merged into a single undo\n // event\n this.lastModTime = this.lastSelTime = 0;\n this.lastOp = this.lastSelOp = null;\n this.lastOrigin = this.lastSelOrigin = null;\n // Used by the isClean() method\n this.generation = this.maxGeneration = prev ? prev.maxGeneration : 1;\n }\n\n // Create a history change event from an updateDoc-style change\n // object.\n function historyChangeFromChange(doc, change) {\n var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)};\n attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);\n linkedDocs(doc, function (doc) { return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); }, true);\n return histChange\n }\n\n // Pop all selection events off the end of a history array. Stop at\n // a change event.\n function clearSelectionEvents(array) {\n while (array.length) {\n var last = lst(array);\n if (last.ranges) { array.pop(); }\n else { break }\n }\n }\n\n // Find the top change event in the history. Pop off selection\n // events that are in the way.\n function lastChangeEvent(hist, force) {\n if (force) {\n clearSelectionEvents(hist.done);\n return lst(hist.done)\n } else if (hist.done.length && !lst(hist.done).ranges) {\n return lst(hist.done)\n } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) {\n hist.done.pop();\n return lst(hist.done)\n }\n }\n\n // Register a change in the history. Merges changes that are within\n // a single operation, or are close together with an origin that\n // allows merging (starting with \"+\") into a single event.\n function addChangeToHistory(doc, change, selAfter, opId) {\n var hist = doc.history;\n hist.undone.length = 0;\n var time = +new Date, cur;\n var last;\n\n if ((hist.lastOp == opId ||\n hist.lastOrigin == change.origin && change.origin &&\n ((change.origin.charAt(0) == \"+\" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500)) ||\n change.origin.charAt(0) == \"*\")) &&\n (cur = lastChangeEvent(hist, hist.lastOp == opId))) {\n // Merge this change into the last event\n last = lst(cur.changes);\n if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) {\n // Optimized case for simple insertion -- don't want to add\n // new changesets for every character typed\n last.to = changeEnd(change);\n } else {\n // Add new sub-event\n cur.changes.push(historyChangeFromChange(doc, change));\n }\n } else {\n // Can not be merged, start a new event.\n var before = lst(hist.done);\n if (!before || !before.ranges)\n { pushSelectionToHistory(doc.sel, hist.done); }\n cur = {changes: [historyChangeFromChange(doc, change)],\n generation: hist.generation};\n hist.done.push(cur);\n while (hist.done.length > hist.undoDepth) {\n hist.done.shift();\n if (!hist.done[0].ranges) { hist.done.shift(); }\n }\n }\n hist.done.push(selAfter);\n hist.generation = ++hist.maxGeneration;\n hist.lastModTime = hist.lastSelTime = time;\n hist.lastOp = hist.lastSelOp = opId;\n hist.lastOrigin = hist.lastSelOrigin = change.origin;\n\n if (!last) { signal(doc, \"historyAdded\"); }\n }\n\n function selectionEventCanBeMerged(doc, origin, prev, sel) {\n var ch = origin.charAt(0);\n return ch == \"*\" ||\n ch == \"+\" &&\n prev.ranges.length == sel.ranges.length &&\n prev.somethingSelected() == sel.somethingSelected() &&\n new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500)\n }\n\n // Called whenever the selection changes, sets the new selection as\n // the pending selection in the history, and pushes the old pending\n // selection into the 'done' array when it was significantly\n // different (in number of selected ranges, emptiness, or time).\n function addSelectionToHistory(doc, sel, opId, options) {\n var hist = doc.history, origin = options && options.origin;\n\n // A new event is started when the previous origin does not match\n // the current, or the origins don't allow matching. Origins\n // starting with * are always merged, those starting with + are\n // merged when similar and close together in time.\n if (opId == hist.lastSelOp ||\n (origin && hist.lastSelOrigin == origin &&\n (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin ||\n selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))))\n { hist.done[hist.done.length - 1] = sel; }\n else\n { pushSelectionToHistory(sel, hist.done); }\n\n hist.lastSelTime = +new Date;\n hist.lastSelOrigin = origin;\n hist.lastSelOp = opId;\n if (options && options.clearRedo !== false)\n { clearSelectionEvents(hist.undone); }\n }\n\n function pushSelectionToHistory(sel, dest) {\n var top = lst(dest);\n if (!(top && top.ranges && top.equals(sel)))\n { dest.push(sel); }\n }\n\n // Used to store marked span information in the history.\n function attachLocalSpans(doc, change, from, to) {\n var existing = change[\"spans_\" + doc.id], n = 0;\n doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) {\n if (line.markedSpans)\n { (existing || (existing = change[\"spans_\" + doc.id] = {}))[n] = line.markedSpans; }\n ++n;\n });\n }\n\n // When un/re-doing restores text containing marked spans, those\n // that have been explicitly cleared should not be restored.\n function removeClearedSpans(spans) {\n if (!spans) { return null }\n var out;\n for (var i = 0; i < spans.length; ++i) {\n if (spans[i].marker.explicitlyCleared) { if (!out) { out = spans.slice(0, i); } }\n else if (out) { out.push(spans[i]); }\n }\n return !out ? spans : out.length ? out : null\n }\n\n // Retrieve and filter the old marked spans stored in a change event.\n function getOldSpans(doc, change) {\n var found = change[\"spans_\" + doc.id];\n if (!found) { return null }\n var nw = [];\n for (var i = 0; i < change.text.length; ++i)\n { nw.push(removeClearedSpans(found[i])); }\n return nw\n }\n\n // Used for un/re-doing changes from the history. Combines the\n // result of computing the existing spans with the set of spans that\n // existed in the history (so that deleting around a span and then\n // undoing brings back the span).\n function mergeOldSpans(doc, change) {\n var old = getOldSpans(doc, change);\n var stretched = stretchSpansOverChange(doc, change);\n if (!old) { return stretched }\n if (!stretched) { return old }\n\n for (var i = 0; i < old.length; ++i) {\n var oldCur = old[i], stretchCur = stretched[i];\n if (oldCur && stretchCur) {\n spans: for (var j = 0; j < stretchCur.length; ++j) {\n var span = stretchCur[j];\n for (var k = 0; k < oldCur.length; ++k)\n { if (oldCur[k].marker == span.marker) { continue spans } }\n oldCur.push(span);\n }\n } else if (stretchCur) {\n old[i] = stretchCur;\n }\n }\n return old\n }\n\n // Used both to provide a JSON-safe object in .getHistory, and, when\n // detaching a document, to split the history in two\n function copyHistoryArray(events, newGroup, instantiateSel) {\n var copy = [];\n for (var i = 0; i < events.length; ++i) {\n var event = events[i];\n if (event.ranges) {\n copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event);\n continue\n }\n var changes = event.changes, newChanges = [];\n copy.push({changes: newChanges});\n for (var j = 0; j < changes.length; ++j) {\n var change = changes[j], m = (void 0);\n newChanges.push({from: change.from, to: change.to, text: change.text});\n if (newGroup) { for (var prop in change) { if (m = prop.match(/^spans_(\\d+)$/)) {\n if (indexOf(newGroup, Number(m[1])) > -1) {\n lst(newChanges)[prop] = change[prop];\n delete change[prop];\n }\n } } }\n }\n }\n return copy\n }\n\n // The 'scroll' parameter given to many of these indicated whether\n // the new cursor position should be scrolled into view after\n // modifying the selection.\n\n // If shift is held or the extend flag is set, extends a range to\n // include a given position (and optionally a second position).\n // Otherwise, simply returns the range between the given positions.\n // Used for cursor motion and such.\n function extendRange(range, head, other, extend) {\n if (extend) {\n var anchor = range.anchor;\n if (other) {\n var posBefore = cmp(head, anchor) < 0;\n if (posBefore != (cmp(other, anchor) < 0)) {\n anchor = head;\n head = other;\n } else if (posBefore != (cmp(head, other) < 0)) {\n head = other;\n }\n }\n return new Range(anchor, head)\n } else {\n return new Range(other || head, head)\n }\n }\n\n // Extend the primary selection range, discard the rest.\n function extendSelection(doc, head, other, options, extend) {\n if (extend == null) { extend = doc.cm && (doc.cm.display.shift || doc.extend); }\n setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options);\n }\n\n // Extend all selections (pos is an array of selections with length\n // equal the number of selections)\n function extendSelections(doc, heads, options) {\n var out = [];\n var extend = doc.cm && (doc.cm.display.shift || doc.extend);\n for (var i = 0; i < doc.sel.ranges.length; i++)\n { out[i] = extendRange(doc.sel.ranges[i], heads[i], null, extend); }\n var newSel = normalizeSelection(doc.cm, out, doc.sel.primIndex);\n setSelection(doc, newSel, options);\n }\n\n // Updates a single range in the selection.\n function replaceOneSelection(doc, i, range, options) {\n var ranges = doc.sel.ranges.slice(0);\n ranges[i] = range;\n setSelection(doc, normalizeSelection(doc.cm, ranges, doc.sel.primIndex), options);\n }\n\n // Reset the selection to a single range.\n function setSimpleSelection(doc, anchor, head, options) {\n setSelection(doc, simpleSelection(anchor, head), options);\n }\n\n // Give beforeSelectionChange handlers a change to influence a\n // selection update.\n function filterSelectionChange(doc, sel, options) {\n var obj = {\n ranges: sel.ranges,\n update: function(ranges) {\n this.ranges = [];\n for (var i = 0; i < ranges.length; i++)\n { this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor),\n clipPos(doc, ranges[i].head)); }\n },\n origin: options && options.origin\n };\n signal(doc, \"beforeSelectionChange\", doc, obj);\n if (doc.cm) { signal(doc.cm, \"beforeSelectionChange\", doc.cm, obj); }\n if (obj.ranges != sel.ranges) { return normalizeSelection(doc.cm, obj.ranges, obj.ranges.length - 1) }\n else { return sel }\n }\n\n function setSelectionReplaceHistory(doc, sel, options) {\n var done = doc.history.done, last = lst(done);\n if (last && last.ranges) {\n done[done.length - 1] = sel;\n setSelectionNoUndo(doc, sel, options);\n } else {\n setSelection(doc, sel, options);\n }\n }\n\n // Set a new selection.\n function setSelection(doc, sel, options) {\n setSelectionNoUndo(doc, sel, options);\n addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options);\n }\n\n function setSelectionNoUndo(doc, sel, options) {\n if (hasHandler(doc, \"beforeSelectionChange\") || doc.cm && hasHandler(doc.cm, \"beforeSelectionChange\"))\n { sel = filterSelectionChange(doc, sel, options); }\n\n var bias = options && options.bias ||\n (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1);\n setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true));\n\n if (!(options && options.scroll === false) && doc.cm && doc.cm.getOption(\"readOnly\") != \"nocursor\")\n { ensureCursorVisible(doc.cm); }\n }\n\n function setSelectionInner(doc, sel) {\n if (sel.equals(doc.sel)) { return }\n\n doc.sel = sel;\n\n if (doc.cm) {\n doc.cm.curOp.updateInput = 1;\n doc.cm.curOp.selectionChanged = true;\n signalCursorActivity(doc.cm);\n }\n signalLater(doc, \"cursorActivity\", doc);\n }\n\n // Verify that the selection does not partially select any atomic\n // marked ranges.\n function reCheckSelection(doc) {\n setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false));\n }\n\n // Return a selection that does not partially select any atomic\n // ranges.\n function skipAtomicInSelection(doc, sel, bias, mayClear) {\n var out;\n for (var i = 0; i < sel.ranges.length; i++) {\n var range = sel.ranges[i];\n var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i];\n var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear);\n var newHead = range.head == range.anchor ? newAnchor : skipAtomic(doc, range.head, old && old.head, bias, mayClear);\n if (out || newAnchor != range.anchor || newHead != range.head) {\n if (!out) { out = sel.ranges.slice(0, i); }\n out[i] = new Range(newAnchor, newHead);\n }\n }\n return out ? normalizeSelection(doc.cm, out, sel.primIndex) : sel\n }\n\n function skipAtomicInner(doc, pos, oldPos, dir, mayClear) {\n var line = getLine(doc, pos.line);\n if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {\n var sp = line.markedSpans[i], m = sp.marker;\n\n // Determine if we should prevent the cursor being placed to the left/right of an atomic marker\n // Historically this was determined using the inclusiveLeft/Right option, but the new way to control it\n // is with selectLeft/Right\n var preventCursorLeft = (\"selectLeft\" in m) ? !m.selectLeft : m.inclusiveLeft;\n var preventCursorRight = (\"selectRight\" in m) ? !m.selectRight : m.inclusiveRight;\n\n if ((sp.from == null || (preventCursorLeft ? sp.from <= pos.ch : sp.from < pos.ch)) &&\n (sp.to == null || (preventCursorRight ? sp.to >= pos.ch : sp.to > pos.ch))) {\n if (mayClear) {\n signal(m, \"beforeCursorEnter\");\n if (m.explicitlyCleared) {\n if (!line.markedSpans) { break }\n else {--i; continue}\n }\n }\n if (!m.atomic) { continue }\n\n if (oldPos) {\n var near = m.find(dir < 0 ? 1 : -1), diff = (void 0);\n if (dir < 0 ? preventCursorRight : preventCursorLeft)\n { near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null); }\n if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0))\n { return skipAtomicInner(doc, near, pos, dir, mayClear) }\n }\n\n var far = m.find(dir < 0 ? -1 : 1);\n if (dir < 0 ? preventCursorLeft : preventCursorRight)\n { far = movePos(doc, far, dir, far.line == pos.line ? line : null); }\n return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null\n }\n } }\n return pos\n }\n\n // Ensure a given position is not inside an atomic range.\n function skipAtomic(doc, pos, oldPos, bias, mayClear) {\n var dir = bias || 1;\n var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) ||\n (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) ||\n skipAtomicInner(doc, pos, oldPos, -dir, mayClear) ||\n (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true));\n if (!found) {\n doc.cantEdit = true;\n return Pos(doc.first, 0)\n }\n return found\n }\n\n function movePos(doc, pos, dir, line) {\n if (dir < 0 && pos.ch == 0) {\n if (pos.line > doc.first) { return clipPos(doc, Pos(pos.line - 1)) }\n else { return null }\n } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) {\n if (pos.line < doc.first + doc.size - 1) { return Pos(pos.line + 1, 0) }\n else { return null }\n } else {\n return new Pos(pos.line, pos.ch + dir)\n }\n }\n\n function selectAll(cm) {\n cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);\n }\n\n // UPDATING\n\n // Allow \"beforeChange\" event handlers to influence a change\n function filterChange(doc, change, update) {\n var obj = {\n canceled: false,\n from: change.from,\n to: change.to,\n text: change.text,\n origin: change.origin,\n cancel: function () { return obj.canceled = true; }\n };\n if (update) { obj.update = function (from, to, text, origin) {\n if (from) { obj.from = clipPos(doc, from); }\n if (to) { obj.to = clipPos(doc, to); }\n if (text) { obj.text = text; }\n if (origin !== undefined) { obj.origin = origin; }\n }; }\n signal(doc, \"beforeChange\", doc, obj);\n if (doc.cm) { signal(doc.cm, \"beforeChange\", doc.cm, obj); }\n\n if (obj.canceled) {\n if (doc.cm) { doc.cm.curOp.updateInput = 2; }\n return null\n }\n return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}\n }\n\n // Apply a change to a document, and add it to the document's\n // history, and propagating it to all linked documents.\n function makeChange(doc, change, ignoreReadOnly) {\n if (doc.cm) {\n if (!doc.cm.curOp) { return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly) }\n if (doc.cm.state.suppressEdits) { return }\n }\n\n if (hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\")) {\n change = filterChange(doc, change, true);\n if (!change) { return }\n }\n\n // Possibly split or suppress the update based on the presence\n // of read-only spans in its range.\n var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to);\n if (split) {\n for (var i = split.length - 1; i >= 0; --i)\n { makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [\"\"] : change.text, origin: change.origin}); }\n } else {\n makeChangeInner(doc, change);\n }\n }\n\n function makeChangeInner(doc, change) {\n if (change.text.length == 1 && change.text[0] == \"\" && cmp(change.from, change.to) == 0) { return }\n var selAfter = computeSelAfterChange(doc, change);\n addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN);\n\n makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change));\n var rebased = [];\n\n linkedDocs(doc, function (doc, sharedHist) {\n if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n rebaseHist(doc.history, change);\n rebased.push(doc.history);\n }\n makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change));\n });\n }\n\n // Revert a change stored in a document's history.\n function makeChangeFromHistory(doc, type, allowSelectionOnly) {\n var suppress = doc.cm && doc.cm.state.suppressEdits;\n if (suppress && !allowSelectionOnly) { return }\n\n var hist = doc.history, event, selAfter = doc.sel;\n var source = type == \"undo\" ? hist.done : hist.undone, dest = type == \"undo\" ? hist.undone : hist.done;\n\n // Verify that there is a useable event (so that ctrl-z won't\n // needlessly clear selection events)\n var i = 0;\n for (; i < source.length; i++) {\n event = source[i];\n if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges)\n { break }\n }\n if (i == source.length) { return }\n hist.lastOrigin = hist.lastSelOrigin = null;\n\n for (;;) {\n event = source.pop();\n if (event.ranges) {\n pushSelectionToHistory(event, dest);\n if (allowSelectionOnly && !event.equals(doc.sel)) {\n setSelection(doc, event, {clearRedo: false});\n return\n }\n selAfter = event;\n } else if (suppress) {\n source.push(event);\n return\n } else { break }\n }\n\n // Build up a reverse change object to add to the opposite history\n // stack (redo when undoing, and vice versa).\n var antiChanges = [];\n pushSelectionToHistory(selAfter, dest);\n dest.push({changes: antiChanges, generation: hist.generation});\n hist.generation = event.generation || ++hist.maxGeneration;\n\n var filter = hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\");\n\n var loop = function ( i ) {\n var change = event.changes[i];\n change.origin = type;\n if (filter && !filterChange(doc, change, false)) {\n source.length = 0;\n return {}\n }\n\n antiChanges.push(historyChangeFromChange(doc, change));\n\n var after = i ? computeSelAfterChange(doc, change) : lst(source);\n makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change));\n if (!i && doc.cm) { doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); }\n var rebased = [];\n\n // Propagate to the linked documents\n linkedDocs(doc, function (doc, sharedHist) {\n if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n rebaseHist(doc.history, change);\n rebased.push(doc.history);\n }\n makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change));\n });\n };\n\n for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) {\n var returned = loop( i$1 );\n\n if ( returned ) return returned.v;\n }\n }\n\n // Sub-views need their line numbers shifted when text is added\n // above or below them in the parent document.\n function shiftDoc(doc, distance) {\n if (distance == 0) { return }\n doc.first += distance;\n doc.sel = new Selection(map(doc.sel.ranges, function (range) { return new Range(\n Pos(range.anchor.line + distance, range.anchor.ch),\n Pos(range.head.line + distance, range.head.ch)\n ); }), doc.sel.primIndex);\n if (doc.cm) {\n regChange(doc.cm, doc.first, doc.first - distance, distance);\n for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++)\n { regLineChange(doc.cm, l, \"gutter\"); }\n }\n }\n\n // More lower-level change function, handling only a single document\n // (not linked ones).\n function makeChangeSingleDoc(doc, change, selAfter, spans) {\n if (doc.cm && !doc.cm.curOp)\n { return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans) }\n\n if (change.to.line < doc.first) {\n shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line));\n return\n }\n if (change.from.line > doc.lastLine()) { return }\n\n // Clip the change to the size of this doc\n if (change.from.line < doc.first) {\n var shift = change.text.length - 1 - (doc.first - change.from.line);\n shiftDoc(doc, shift);\n change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch),\n text: [lst(change.text)], origin: change.origin};\n }\n var last = doc.lastLine();\n if (change.to.line > last) {\n change = {from: change.from, to: Pos(last, getLine(doc, last).text.length),\n text: [change.text[0]], origin: change.origin};\n }\n\n change.removed = getBetween(doc, change.from, change.to);\n\n if (!selAfter) { selAfter = computeSelAfterChange(doc, change); }\n if (doc.cm) { makeChangeSingleDocInEditor(doc.cm, change, spans); }\n else { updateDoc(doc, change, spans); }\n setSelectionNoUndo(doc, selAfter, sel_dontScroll);\n\n if (doc.cantEdit && skipAtomic(doc, Pos(doc.firstLine(), 0)))\n { doc.cantEdit = false; }\n }\n\n // Handle the interaction of a change to a document with the editor\n // that this document is part of.\n function makeChangeSingleDocInEditor(cm, change, spans) {\n var doc = cm.doc, display = cm.display, from = change.from, to = change.to;\n\n var recomputeMaxLength = false, checkWidthStart = from.line;\n if (!cm.options.lineWrapping) {\n checkWidthStart = lineNo(visualLine(getLine(doc, from.line)));\n doc.iter(checkWidthStart, to.line + 1, function (line) {\n if (line == display.maxLine) {\n recomputeMaxLength = true;\n return true\n }\n });\n }\n\n if (doc.sel.contains(change.from, change.to) > -1)\n { signalCursorActivity(cm); }\n\n updateDoc(doc, change, spans, estimateHeight(cm));\n\n if (!cm.options.lineWrapping) {\n doc.iter(checkWidthStart, from.line + change.text.length, function (line) {\n var len = lineLength(line);\n if (len > display.maxLineLength) {\n display.maxLine = line;\n display.maxLineLength = len;\n display.maxLineChanged = true;\n recomputeMaxLength = false;\n }\n });\n if (recomputeMaxLength) { cm.curOp.updateMaxLine = true; }\n }\n\n retreatFrontier(doc, from.line);\n startWorker(cm, 400);\n\n var lendiff = change.text.length - (to.line - from.line) - 1;\n // Remember that these lines changed, for updating the display\n if (change.full)\n { regChange(cm); }\n else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change))\n { regLineChange(cm, from.line, \"text\"); }\n else\n { regChange(cm, from.line, to.line + 1, lendiff); }\n\n var changesHandler = hasHandler(cm, \"changes\"), changeHandler = hasHandler(cm, \"change\");\n if (changeHandler || changesHandler) {\n var obj = {\n from: from, to: to,\n text: change.text,\n removed: change.removed,\n origin: change.origin\n };\n if (changeHandler) { signalLater(cm, \"change\", cm, obj); }\n if (changesHandler) { (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); }\n }\n cm.display.selForContextMenu = null;\n }\n\n function replaceRange(doc, code, from, to, origin) {\n var assign;\n\n if (!to) { to = from; }\n if (cmp(to, from) < 0) { (assign = [to, from], from = assign[0], to = assign[1]); }\n if (typeof code == \"string\") { code = doc.splitLines(code); }\n makeChange(doc, {from: from, to: to, text: code, origin: origin});\n }\n\n // Rebasing/resetting history to deal with externally-sourced changes\n\n function rebaseHistSelSingle(pos, from, to, diff) {\n if (to < pos.line) {\n pos.line += diff;\n } else if (from < pos.line) {\n pos.line = from;\n pos.ch = 0;\n }\n }\n\n // Tries to rebase an array of history events given a change in the\n // document. If the change touches the same lines as the event, the\n // event, and everything 'behind' it, is discarded. If the change is\n // before the event, the event's positions are updated. Uses a\n // copy-on-write scheme for the positions, to avoid having to\n // reallocate them all on every rebase, but also avoid problems with\n // shared position objects being unsafely updated.\n function rebaseHistArray(array, from, to, diff) {\n for (var i = 0; i < array.length; ++i) {\n var sub = array[i], ok = true;\n if (sub.ranges) {\n if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; }\n for (var j = 0; j < sub.ranges.length; j++) {\n rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff);\n rebaseHistSelSingle(sub.ranges[j].head, from, to, diff);\n }\n continue\n }\n for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) {\n var cur = sub.changes[j$1];\n if (to < cur.from.line) {\n cur.from = Pos(cur.from.line + diff, cur.from.ch);\n cur.to = Pos(cur.to.line + diff, cur.to.ch);\n } else if (from <= cur.to.line) {\n ok = false;\n break\n }\n }\n if (!ok) {\n array.splice(0, i + 1);\n i = 0;\n }\n }\n }\n\n function rebaseHist(hist, change) {\n var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1;\n rebaseHistArray(hist.done, from, to, diff);\n rebaseHistArray(hist.undone, from, to, diff);\n }\n\n // Utility for applying a change to a line by handle or number,\n // returning the number and optionally registering the line as\n // changed.\n function changeLine(doc, handle, changeType, op) {\n var no = handle, line = handle;\n if (typeof handle == \"number\") { line = getLine(doc, clipLine(doc, handle)); }\n else { no = lineNo(handle); }\n if (no == null) { return null }\n if (op(line, no) && doc.cm) { regLineChange(doc.cm, no, changeType); }\n return line\n }\n\n // The document is represented as a BTree consisting of leaves, with\n // chunk of lines in them, and branches, with up to ten leaves or\n // other branch nodes below them. The top node is always a branch\n // node, and is the document object itself (meaning it has\n // additional methods and properties).\n //\n // All nodes have parent links. The tree is used both to go from\n // line numbers to line objects, and to go from objects to numbers.\n // It also indexes by height, and is used to convert between height\n // and line object, and to find the total height of the document.\n //\n // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html\n\n function LeafChunk(lines) {\n this.lines = lines;\n this.parent = null;\n var height = 0;\n for (var i = 0; i < lines.length; ++i) {\n lines[i].parent = this;\n height += lines[i].height;\n }\n this.height = height;\n }\n\n LeafChunk.prototype = {\n chunkSize: function() { return this.lines.length },\n\n // Remove the n lines at offset 'at'.\n removeInner: function(at, n) {\n for (var i = at, e = at + n; i < e; ++i) {\n var line = this.lines[i];\n this.height -= line.height;\n cleanUpLine(line);\n signalLater(line, \"delete\");\n }\n this.lines.splice(at, n);\n },\n\n // Helper used to collapse a small branch into a single leaf.\n collapse: function(lines) {\n lines.push.apply(lines, this.lines);\n },\n\n // Insert the given array of lines at offset 'at', count them as\n // having the given height.\n insertInner: function(at, lines, height) {\n this.height += height;\n this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at));\n for (var i = 0; i < lines.length; ++i) { lines[i].parent = this; }\n },\n\n // Used to iterate over a part of the tree.\n iterN: function(at, n, op) {\n for (var e = at + n; at < e; ++at)\n { if (op(this.lines[at])) { return true } }\n }\n };\n\n function BranchChunk(children) {\n this.children = children;\n var size = 0, height = 0;\n for (var i = 0; i < children.length; ++i) {\n var ch = children[i];\n size += ch.chunkSize(); height += ch.height;\n ch.parent = this;\n }\n this.size = size;\n this.height = height;\n this.parent = null;\n }\n\n BranchChunk.prototype = {\n chunkSize: function() { return this.size },\n\n removeInner: function(at, n) {\n this.size -= n;\n for (var i = 0; i < this.children.length; ++i) {\n var child = this.children[i], sz = child.chunkSize();\n if (at < sz) {\n var rm = Math.min(n, sz - at), oldHeight = child.height;\n child.removeInner(at, rm);\n this.height -= oldHeight - child.height;\n if (sz == rm) { this.children.splice(i--, 1); child.parent = null; }\n if ((n -= rm) == 0) { break }\n at = 0;\n } else { at -= sz; }\n }\n // If the result is smaller than 25 lines, ensure that it is a\n // single leaf node.\n if (this.size - n < 25 &&\n (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) {\n var lines = [];\n this.collapse(lines);\n this.children = [new LeafChunk(lines)];\n this.children[0].parent = this;\n }\n },\n\n collapse: function(lines) {\n for (var i = 0; i < this.children.length; ++i) { this.children[i].collapse(lines); }\n },\n\n insertInner: function(at, lines, height) {\n this.size += lines.length;\n this.height += height;\n for (var i = 0; i < this.children.length; ++i) {\n var child = this.children[i], sz = child.chunkSize();\n if (at <= sz) {\n child.insertInner(at, lines, height);\n if (child.lines && child.lines.length > 50) {\n // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced.\n // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest.\n var remaining = child.lines.length % 25 + 25;\n for (var pos = remaining; pos < child.lines.length;) {\n var leaf = new LeafChunk(child.lines.slice(pos, pos += 25));\n child.height -= leaf.height;\n this.children.splice(++i, 0, leaf);\n leaf.parent = this;\n }\n child.lines = child.lines.slice(0, remaining);\n this.maybeSpill();\n }\n break\n }\n at -= sz;\n }\n },\n\n // When a node has grown, check whether it should be split.\n maybeSpill: function() {\n if (this.children.length <= 10) { return }\n var me = this;\n do {\n var spilled = me.children.splice(me.children.length - 5, 5);\n var sibling = new BranchChunk(spilled);\n if (!me.parent) { // Become the parent node\n var copy = new BranchChunk(me.children);\n copy.parent = me;\n me.children = [copy, sibling];\n me = copy;\n } else {\n me.size -= sibling.size;\n me.height -= sibling.height;\n var myIndex = indexOf(me.parent.children, me);\n me.parent.children.splice(myIndex + 1, 0, sibling);\n }\n sibling.parent = me.parent;\n } while (me.children.length > 10)\n me.parent.maybeSpill();\n },\n\n iterN: function(at, n, op) {\n for (var i = 0; i < this.children.length; ++i) {\n var child = this.children[i], sz = child.chunkSize();\n if (at < sz) {\n var used = Math.min(n, sz - at);\n if (child.iterN(at, used, op)) { return true }\n if ((n -= used) == 0) { break }\n at = 0;\n } else { at -= sz; }\n }\n }\n };\n\n // Line widgets are block elements displayed above or below a line.\n\n var LineWidget = function(doc, node, options) {\n if (options) { for (var opt in options) { if (options.hasOwnProperty(opt))\n { this[opt] = options[opt]; } } }\n this.doc = doc;\n this.node = node;\n };\n\n LineWidget.prototype.clear = function () {\n var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line);\n if (no == null || !ws) { return }\n for (var i = 0; i < ws.length; ++i) { if (ws[i] == this) { ws.splice(i--, 1); } }\n if (!ws.length) { line.widgets = null; }\n var height = widgetHeight(this);\n updateLineHeight(line, Math.max(0, line.height - height));\n if (cm) {\n runInOp(cm, function () {\n adjustScrollWhenAboveVisible(cm, line, -height);\n regLineChange(cm, no, \"widget\");\n });\n signalLater(cm, \"lineWidgetCleared\", cm, this, no);\n }\n };\n\n LineWidget.prototype.changed = function () {\n var this$1 = this;\n\n var oldH = this.height, cm = this.doc.cm, line = this.line;\n this.height = null;\n var diff = widgetHeight(this) - oldH;\n if (!diff) { return }\n if (!lineIsHidden(this.doc, line)) { updateLineHeight(line, line.height + diff); }\n if (cm) {\n runInOp(cm, function () {\n cm.curOp.forceUpdate = true;\n adjustScrollWhenAboveVisible(cm, line, diff);\n signalLater(cm, \"lineWidgetChanged\", cm, this$1, lineNo(line));\n });\n }\n };\n eventMixin(LineWidget);\n\n function adjustScrollWhenAboveVisible(cm, line, diff) {\n if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop))\n { addToScrollTop(cm, diff); }\n }\n\n function addLineWidget(doc, handle, node, options) {\n var widget = new LineWidget(doc, node, options);\n var cm = doc.cm;\n if (cm && widget.noHScroll) { cm.display.alignWidgets = true; }\n changeLine(doc, handle, \"widget\", function (line) {\n var widgets = line.widgets || (line.widgets = []);\n if (widget.insertAt == null) { widgets.push(widget); }\n else { widgets.splice(Math.min(widgets.length, Math.max(0, widget.insertAt)), 0, widget); }\n widget.line = line;\n if (cm && !lineIsHidden(doc, line)) {\n var aboveVisible = heightAtLine(line) < doc.scrollTop;\n updateLineHeight(line, line.height + widgetHeight(widget));\n if (aboveVisible) { addToScrollTop(cm, widget.height); }\n cm.curOp.forceUpdate = true;\n }\n return true\n });\n if (cm) { signalLater(cm, \"lineWidgetAdded\", cm, widget, typeof handle == \"number\" ? handle : lineNo(handle)); }\n return widget\n }\n\n // TEXTMARKERS\n\n // Created with markText and setBookmark methods. A TextMarker is a\n // handle that can be used to clear or find a marked position in the\n // document. Line objects hold arrays (markedSpans) containing\n // {from, to, marker} object pointing to such marker objects, and\n // indicating that such a marker is present on that line. Multiple\n // lines may point to the same marker when it spans across lines.\n // The spans will have null for their from/to properties when the\n // marker continues beyond the start/end of the line. Markers have\n // links back to the lines they currently touch.\n\n // Collapsed markers have unique ids, in order to be able to order\n // them, which is needed for uniquely determining an outer marker\n // when they overlap (they may nest, but not partially overlap).\n var nextMarkerId = 0;\n\n var TextMarker = function(doc, type) {\n this.lines = [];\n this.type = type;\n this.doc = doc;\n this.id = ++nextMarkerId;\n };\n\n // Clear the marker.\n TextMarker.prototype.clear = function () {\n if (this.explicitlyCleared) { return }\n var cm = this.doc.cm, withOp = cm && !cm.curOp;\n if (withOp) { startOperation(cm); }\n if (hasHandler(this, \"clear\")) {\n var found = this.find();\n if (found) { signalLater(this, \"clear\", found.from, found.to); }\n }\n var min = null, max = null;\n for (var i = 0; i < this.lines.length; ++i) {\n var line = this.lines[i];\n var span = getMarkedSpanFor(line.markedSpans, this);\n if (cm && !this.collapsed) { regLineChange(cm, lineNo(line), \"text\"); }\n else if (cm) {\n if (span.to != null) { max = lineNo(line); }\n if (span.from != null) { min = lineNo(line); }\n }\n line.markedSpans = removeMarkedSpan(line.markedSpans, span);\n if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm)\n { updateLineHeight(line, textHeight(cm.display)); }\n }\n if (cm && this.collapsed && !cm.options.lineWrapping) { for (var i$1 = 0; i$1 < this.lines.length; ++i$1) {\n var visual = visualLine(this.lines[i$1]), len = lineLength(visual);\n if (len > cm.display.maxLineLength) {\n cm.display.maxLine = visual;\n cm.display.maxLineLength = len;\n cm.display.maxLineChanged = true;\n }\n } }\n\n if (min != null && cm && this.collapsed) { regChange(cm, min, max + 1); }\n this.lines.length = 0;\n this.explicitlyCleared = true;\n if (this.atomic && this.doc.cantEdit) {\n this.doc.cantEdit = false;\n if (cm) { reCheckSelection(cm.doc); }\n }\n if (cm) { signalLater(cm, \"markerCleared\", cm, this, min, max); }\n if (withOp) { endOperation(cm); }\n if (this.parent) { this.parent.clear(); }\n };\n\n // Find the position of the marker in the document. Returns a {from,\n // to} object by default. Side can be passed to get a specific side\n // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the\n // Pos objects returned contain a line object, rather than a line\n // number (used to prevent looking up the same line twice).\n TextMarker.prototype.find = function (side, lineObj) {\n if (side == null && this.type == \"bookmark\") { side = 1; }\n var from, to;\n for (var i = 0; i < this.lines.length; ++i) {\n var line = this.lines[i];\n var span = getMarkedSpanFor(line.markedSpans, this);\n if (span.from != null) {\n from = Pos(lineObj ? line : lineNo(line), span.from);\n if (side == -1) { return from }\n }\n if (span.to != null) {\n to = Pos(lineObj ? line : lineNo(line), span.to);\n if (side == 1) { return to }\n }\n }\n return from && {from: from, to: to}\n };\n\n // Signals that the marker's widget changed, and surrounding layout\n // should be recomputed.\n TextMarker.prototype.changed = function () {\n var this$1 = this;\n\n var pos = this.find(-1, true), widget = this, cm = this.doc.cm;\n if (!pos || !cm) { return }\n runInOp(cm, function () {\n var line = pos.line, lineN = lineNo(pos.line);\n var view = findViewForLine(cm, lineN);\n if (view) {\n clearLineMeasurementCacheFor(view);\n cm.curOp.selectionChanged = cm.curOp.forceUpdate = true;\n }\n cm.curOp.updateMaxLine = true;\n if (!lineIsHidden(widget.doc, line) && widget.height != null) {\n var oldHeight = widget.height;\n widget.height = null;\n var dHeight = widgetHeight(widget) - oldHeight;\n if (dHeight)\n { updateLineHeight(line, line.height + dHeight); }\n }\n signalLater(cm, \"markerChanged\", cm, this$1);\n });\n };\n\n TextMarker.prototype.attachLine = function (line) {\n if (!this.lines.length && this.doc.cm) {\n var op = this.doc.cm.curOp;\n if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1)\n { (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); }\n }\n this.lines.push(line);\n };\n\n TextMarker.prototype.detachLine = function (line) {\n this.lines.splice(indexOf(this.lines, line), 1);\n if (!this.lines.length && this.doc.cm) {\n var op = this.doc.cm.curOp\n ;(op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this);\n }\n };\n eventMixin(TextMarker);\n\n // Create a marker, wire it up to the right lines, and\n function markText(doc, from, to, options, type) {\n // Shared markers (across linked documents) are handled separately\n // (markTextShared will call out to this again, once per\n // document).\n if (options && options.shared) { return markTextShared(doc, from, to, options, type) }\n // Ensure we are in an operation.\n if (doc.cm && !doc.cm.curOp) { return operation(doc.cm, markText)(doc, from, to, options, type) }\n\n var marker = new TextMarker(doc, type), diff = cmp(from, to);\n if (options) { copyObj(options, marker, false); }\n // Don't connect empty markers unless clearWhenEmpty is false\n if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false)\n { return marker }\n if (marker.replacedWith) {\n // Showing up as a widget implies collapsed (widget replaces text)\n marker.collapsed = true;\n marker.widgetNode = eltP(\"span\", [marker.replacedWith], \"CodeMirror-widget\");\n if (!options.handleMouseEvents) { marker.widgetNode.setAttribute(\"cm-ignore-events\", \"true\"); }\n if (options.insertLeft) { marker.widgetNode.insertLeft = true; }\n }\n if (marker.collapsed) {\n if (conflictingCollapsedRange(doc, from.line, from, to, marker) ||\n from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker))\n { throw new Error(\"Inserting collapsed marker partially overlapping an existing one\") }\n seeCollapsedSpans();\n }\n\n if (marker.addToHistory)\n { addChangeToHistory(doc, {from: from, to: to, origin: \"markText\"}, doc.sel, NaN); }\n\n var curLine = from.line, cm = doc.cm, updateMaxLine;\n doc.iter(curLine, to.line + 1, function (line) {\n if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine)\n { updateMaxLine = true; }\n if (marker.collapsed && curLine != from.line) { updateLineHeight(line, 0); }\n addMarkedSpan(line, new MarkedSpan(marker,\n curLine == from.line ? from.ch : null,\n curLine == to.line ? to.ch : null), doc.cm && doc.cm.curOp);\n ++curLine;\n });\n // lineIsHidden depends on the presence of the spans, so needs a second pass\n if (marker.collapsed) { doc.iter(from.line, to.line + 1, function (line) {\n if (lineIsHidden(doc, line)) { updateLineHeight(line, 0); }\n }); }\n\n if (marker.clearOnEnter) { on(marker, \"beforeCursorEnter\", function () { return marker.clear(); }); }\n\n if (marker.readOnly) {\n seeReadOnlySpans();\n if (doc.history.done.length || doc.history.undone.length)\n { doc.clearHistory(); }\n }\n if (marker.collapsed) {\n marker.id = ++nextMarkerId;\n marker.atomic = true;\n }\n if (cm) {\n // Sync editor state\n if (updateMaxLine) { cm.curOp.updateMaxLine = true; }\n if (marker.collapsed)\n { regChange(cm, from.line, to.line + 1); }\n else if (marker.className || marker.startStyle || marker.endStyle || marker.css ||\n marker.attributes || marker.title)\n { for (var i = from.line; i <= to.line; i++) { regLineChange(cm, i, \"text\"); } }\n if (marker.atomic) { reCheckSelection(cm.doc); }\n signalLater(cm, \"markerAdded\", cm, marker);\n }\n return marker\n }\n\n // SHARED TEXTMARKERS\n\n // A shared marker spans multiple linked documents. It is\n // implemented as a meta-marker-object controlling multiple normal\n // markers.\n var SharedTextMarker = function(markers, primary) {\n this.markers = markers;\n this.primary = primary;\n for (var i = 0; i < markers.length; ++i)\n { markers[i].parent = this; }\n };\n\n SharedTextMarker.prototype.clear = function () {\n if (this.explicitlyCleared) { return }\n this.explicitlyCleared = true;\n for (var i = 0; i < this.markers.length; ++i)\n { this.markers[i].clear(); }\n signalLater(this, \"clear\");\n };\n\n SharedTextMarker.prototype.find = function (side, lineObj) {\n return this.primary.find(side, lineObj)\n };\n eventMixin(SharedTextMarker);\n\n function markTextShared(doc, from, to, options, type) {\n options = copyObj(options);\n options.shared = false;\n var markers = [markText(doc, from, to, options, type)], primary = markers[0];\n var widget = options.widgetNode;\n linkedDocs(doc, function (doc) {\n if (widget) { options.widgetNode = widget.cloneNode(true); }\n markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type));\n for (var i = 0; i < doc.linked.length; ++i)\n { if (doc.linked[i].isParent) { return } }\n primary = lst(markers);\n });\n return new SharedTextMarker(markers, primary)\n }\n\n function findSharedMarkers(doc) {\n return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) { return m.parent; })\n }\n\n function copySharedMarkers(doc, markers) {\n for (var i = 0; i < markers.length; i++) {\n var marker = markers[i], pos = marker.find();\n var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to);\n if (cmp(mFrom, mTo)) {\n var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type);\n marker.markers.push(subMark);\n subMark.parent = marker;\n }\n }\n }\n\n function detachSharedMarkers(markers) {\n var loop = function ( i ) {\n var marker = markers[i], linked = [marker.primary.doc];\n linkedDocs(marker.primary.doc, function (d) { return linked.push(d); });\n for (var j = 0; j < marker.markers.length; j++) {\n var subMarker = marker.markers[j];\n if (indexOf(linked, subMarker.doc) == -1) {\n subMarker.parent = null;\n marker.markers.splice(j--, 1);\n }\n }\n };\n\n for (var i = 0; i < markers.length; i++) loop( i );\n }\n\n var nextDocId = 0;\n var Doc = function(text, mode, firstLine, lineSep, direction) {\n if (!(this instanceof Doc)) { return new Doc(text, mode, firstLine, lineSep, direction) }\n if (firstLine == null) { firstLine = 0; }\n\n BranchChunk.call(this, [new LeafChunk([new Line(\"\", null)])]);\n this.first = firstLine;\n this.scrollTop = this.scrollLeft = 0;\n this.cantEdit = false;\n this.cleanGeneration = 1;\n this.modeFrontier = this.highlightFrontier = firstLine;\n var start = Pos(firstLine, 0);\n this.sel = simpleSelection(start);\n this.history = new History(null);\n this.id = ++nextDocId;\n this.modeOption = mode;\n this.lineSep = lineSep;\n this.direction = (direction == \"rtl\") ? \"rtl\" : \"ltr\";\n this.extend = false;\n\n if (typeof text == \"string\") { text = this.splitLines(text); }\n updateDoc(this, {from: start, to: start, text: text});\n setSelection(this, simpleSelection(start), sel_dontScroll);\n };\n\n Doc.prototype = createObj(BranchChunk.prototype, {\n constructor: Doc,\n // Iterate over the document. Supports two forms -- with only one\n // argument, it calls that for each line in the document. With\n // three, it iterates over the range given by the first two (with\n // the second being non-inclusive).\n iter: function(from, to, op) {\n if (op) { this.iterN(from - this.first, to - from, op); }\n else { this.iterN(this.first, this.first + this.size, from); }\n },\n\n // Non-public interface for adding and removing lines.\n insert: function(at, lines) {\n var height = 0;\n for (var i = 0; i < lines.length; ++i) { height += lines[i].height; }\n this.insertInner(at - this.first, lines, height);\n },\n remove: function(at, n) { this.removeInner(at - this.first, n); },\n\n // From here, the methods are part of the public interface. Most\n // are also available from CodeMirror (editor) instances.\n\n getValue: function(lineSep) {\n var lines = getLines(this, this.first, this.first + this.size);\n if (lineSep === false) { return lines }\n return lines.join(lineSep || this.lineSeparator())\n },\n setValue: docMethodOp(function(code) {\n var top = Pos(this.first, 0), last = this.first + this.size - 1;\n makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length),\n text: this.splitLines(code), origin: \"setValue\", full: true}, true);\n if (this.cm) { scrollToCoords(this.cm, 0, 0); }\n setSelection(this, simpleSelection(top), sel_dontScroll);\n }),\n replaceRange: function(code, from, to, origin) {\n from = clipPos(this, from);\n to = to ? clipPos(this, to) : from;\n replaceRange(this, code, from, to, origin);\n },\n getRange: function(from, to, lineSep) {\n var lines = getBetween(this, clipPos(this, from), clipPos(this, to));\n if (lineSep === false) { return lines }\n if (lineSep === '') { return lines.join('') }\n return lines.join(lineSep || this.lineSeparator())\n },\n\n getLine: function(line) {var l = this.getLineHandle(line); return l && l.text},\n\n getLineHandle: function(line) {if (isLine(this, line)) { return getLine(this, line) }},\n getLineNumber: function(line) {return lineNo(line)},\n\n getLineHandleVisualStart: function(line) {\n if (typeof line == \"number\") { line = getLine(this, line); }\n return visualLine(line)\n },\n\n lineCount: function() {return this.size},\n firstLine: function() {return this.first},\n lastLine: function() {return this.first + this.size - 1},\n\n clipPos: function(pos) {return clipPos(this, pos)},\n\n getCursor: function(start) {\n var range = this.sel.primary(), pos;\n if (start == null || start == \"head\") { pos = range.head; }\n else if (start == \"anchor\") { pos = range.anchor; }\n else if (start == \"end\" || start == \"to\" || start === false) { pos = range.to(); }\n else { pos = range.from(); }\n return pos\n },\n listSelections: function() { return this.sel.ranges },\n somethingSelected: function() {return this.sel.somethingSelected()},\n\n setCursor: docMethodOp(function(line, ch, options) {\n setSimpleSelection(this, clipPos(this, typeof line == \"number\" ? Pos(line, ch || 0) : line), null, options);\n }),\n setSelection: docMethodOp(function(anchor, head, options) {\n setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options);\n }),\n extendSelection: docMethodOp(function(head, other, options) {\n extendSelection(this, clipPos(this, head), other && clipPos(this, other), options);\n }),\n extendSelections: docMethodOp(function(heads, options) {\n extendSelections(this, clipPosArray(this, heads), options);\n }),\n extendSelectionsBy: docMethodOp(function(f, options) {\n var heads = map(this.sel.ranges, f);\n extendSelections(this, clipPosArray(this, heads), options);\n }),\n setSelections: docMethodOp(function(ranges, primary, options) {\n if (!ranges.length) { return }\n var out = [];\n for (var i = 0; i < ranges.length; i++)\n { out[i] = new Range(clipPos(this, ranges[i].anchor),\n clipPos(this, ranges[i].head || ranges[i].anchor)); }\n if (primary == null) { primary = Math.min(ranges.length - 1, this.sel.primIndex); }\n setSelection(this, normalizeSelection(this.cm, out, primary), options);\n }),\n addSelection: docMethodOp(function(anchor, head, options) {\n var ranges = this.sel.ranges.slice(0);\n ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor)));\n setSelection(this, normalizeSelection(this.cm, ranges, ranges.length - 1), options);\n }),\n\n getSelection: function(lineSep) {\n var ranges = this.sel.ranges, lines;\n for (var i = 0; i < ranges.length; i++) {\n var sel = getBetween(this, ranges[i].from(), ranges[i].to());\n lines = lines ? lines.concat(sel) : sel;\n }\n if (lineSep === false) { return lines }\n else { return lines.join(lineSep || this.lineSeparator()) }\n },\n getSelections: function(lineSep) {\n var parts = [], ranges = this.sel.ranges;\n for (var i = 0; i < ranges.length; i++) {\n var sel = getBetween(this, ranges[i].from(), ranges[i].to());\n if (lineSep !== false) { sel = sel.join(lineSep || this.lineSeparator()); }\n parts[i] = sel;\n }\n return parts\n },\n replaceSelection: function(code, collapse, origin) {\n var dup = [];\n for (var i = 0; i < this.sel.ranges.length; i++)\n { dup[i] = code; }\n this.replaceSelections(dup, collapse, origin || \"+input\");\n },\n replaceSelections: docMethodOp(function(code, collapse, origin) {\n var changes = [], sel = this.sel;\n for (var i = 0; i < sel.ranges.length; i++) {\n var range = sel.ranges[i];\n changes[i] = {from: range.from(), to: range.to(), text: this.splitLines(code[i]), origin: origin};\n }\n var newSel = collapse && collapse != \"end\" && computeReplacedSel(this, changes, collapse);\n for (var i$1 = changes.length - 1; i$1 >= 0; i$1--)\n { makeChange(this, changes[i$1]); }\n if (newSel) { setSelectionReplaceHistory(this, newSel); }\n else if (this.cm) { ensureCursorVisible(this.cm); }\n }),\n undo: docMethodOp(function() {makeChangeFromHistory(this, \"undo\");}),\n redo: docMethodOp(function() {makeChangeFromHistory(this, \"redo\");}),\n undoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"undo\", true);}),\n redoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"redo\", true);}),\n\n setExtending: function(val) {this.extend = val;},\n getExtending: function() {return this.extend},\n\n historySize: function() {\n var hist = this.history, done = 0, undone = 0;\n for (var i = 0; i < hist.done.length; i++) { if (!hist.done[i].ranges) { ++done; } }\n for (var i$1 = 0; i$1 < hist.undone.length; i$1++) { if (!hist.undone[i$1].ranges) { ++undone; } }\n return {undo: done, redo: undone}\n },\n clearHistory: function() {\n var this$1 = this;\n\n this.history = new History(this.history);\n linkedDocs(this, function (doc) { return doc.history = this$1.history; }, true);\n },\n\n markClean: function() {\n this.cleanGeneration = this.changeGeneration(true);\n },\n changeGeneration: function(forceSplit) {\n if (forceSplit)\n { this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; }\n return this.history.generation\n },\n isClean: function (gen) {\n return this.history.generation == (gen || this.cleanGeneration)\n },\n\n getHistory: function() {\n return {done: copyHistoryArray(this.history.done),\n undone: copyHistoryArray(this.history.undone)}\n },\n setHistory: function(histData) {\n var hist = this.history = new History(this.history);\n hist.done = copyHistoryArray(histData.done.slice(0), null, true);\n hist.undone = copyHistoryArray(histData.undone.slice(0), null, true);\n },\n\n setGutterMarker: docMethodOp(function(line, gutterID, value) {\n return changeLine(this, line, \"gutter\", function (line) {\n var markers = line.gutterMarkers || (line.gutterMarkers = {});\n markers[gutterID] = value;\n if (!value && isEmpty(markers)) { line.gutterMarkers = null; }\n return true\n })\n }),\n\n clearGutter: docMethodOp(function(gutterID) {\n var this$1 = this;\n\n this.iter(function (line) {\n if (line.gutterMarkers && line.gutterMarkers[gutterID]) {\n changeLine(this$1, line, \"gutter\", function () {\n line.gutterMarkers[gutterID] = null;\n if (isEmpty(line.gutterMarkers)) { line.gutterMarkers = null; }\n return true\n });\n }\n });\n }),\n\n lineInfo: function(line) {\n var n;\n if (typeof line == \"number\") {\n if (!isLine(this, line)) { return null }\n n = line;\n line = getLine(this, line);\n if (!line) { return null }\n } else {\n n = lineNo(line);\n if (n == null) { return null }\n }\n return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers,\n textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass,\n widgets: line.widgets}\n },\n\n addLineClass: docMethodOp(function(handle, where, cls) {\n return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n var prop = where == \"text\" ? \"textClass\"\n : where == \"background\" ? \"bgClass\"\n : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n if (!line[prop]) { line[prop] = cls; }\n else if (classTest(cls).test(line[prop])) { return false }\n else { line[prop] += \" \" + cls; }\n return true\n })\n }),\n removeLineClass: docMethodOp(function(handle, where, cls) {\n return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n var prop = where == \"text\" ? \"textClass\"\n : where == \"background\" ? \"bgClass\"\n : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n var cur = line[prop];\n if (!cur) { return false }\n else if (cls == null) { line[prop] = null; }\n else {\n var found = cur.match(classTest(cls));\n if (!found) { return false }\n var end = found.index + found[0].length;\n line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? \"\" : \" \") + cur.slice(end) || null;\n }\n return true\n })\n }),\n\n addLineWidget: docMethodOp(function(handle, node, options) {\n return addLineWidget(this, handle, node, options)\n }),\n removeLineWidget: function(widget) { widget.clear(); },\n\n markText: function(from, to, options) {\n return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || \"range\")\n },\n setBookmark: function(pos, options) {\n var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options),\n insertLeft: options && options.insertLeft,\n clearWhenEmpty: false, shared: options && options.shared,\n handleMouseEvents: options && options.handleMouseEvents};\n pos = clipPos(this, pos);\n return markText(this, pos, pos, realOpts, \"bookmark\")\n },\n findMarksAt: function(pos) {\n pos = clipPos(this, pos);\n var markers = [], spans = getLine(this, pos.line).markedSpans;\n if (spans) { for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n if ((span.from == null || span.from <= pos.ch) &&\n (span.to == null || span.to >= pos.ch))\n { markers.push(span.marker.parent || span.marker); }\n } }\n return markers\n },\n findMarks: function(from, to, filter) {\n from = clipPos(this, from); to = clipPos(this, to);\n var found = [], lineNo = from.line;\n this.iter(from.line, to.line + 1, function (line) {\n var spans = line.markedSpans;\n if (spans) { for (var i = 0; i < spans.length; i++) {\n var span = spans[i];\n if (!(span.to != null && lineNo == from.line && from.ch >= span.to ||\n span.from == null && lineNo != from.line ||\n span.from != null && lineNo == to.line && span.from >= to.ch) &&\n (!filter || filter(span.marker)))\n { found.push(span.marker.parent || span.marker); }\n } }\n ++lineNo;\n });\n return found\n },\n getAllMarks: function() {\n var markers = [];\n this.iter(function (line) {\n var sps = line.markedSpans;\n if (sps) { for (var i = 0; i < sps.length; ++i)\n { if (sps[i].from != null) { markers.push(sps[i].marker); } } }\n });\n return markers\n },\n\n posFromIndex: function(off) {\n var ch, lineNo = this.first, sepSize = this.lineSeparator().length;\n this.iter(function (line) {\n var sz = line.text.length + sepSize;\n if (sz > off) { ch = off; return true }\n off -= sz;\n ++lineNo;\n });\n return clipPos(this, Pos(lineNo, ch))\n },\n indexFromPos: function (coords) {\n coords = clipPos(this, coords);\n var index = coords.ch;\n if (coords.line < this.first || coords.ch < 0) { return 0 }\n var sepSize = this.lineSeparator().length;\n this.iter(this.first, coords.line, function (line) { // iter aborts when callback returns a truthy value\n index += line.text.length + sepSize;\n });\n return index\n },\n\n copy: function(copyHistory) {\n var doc = new Doc(getLines(this, this.first, this.first + this.size),\n this.modeOption, this.first, this.lineSep, this.direction);\n doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft;\n doc.sel = this.sel;\n doc.extend = false;\n if (copyHistory) {\n doc.history.undoDepth = this.history.undoDepth;\n doc.setHistory(this.getHistory());\n }\n return doc\n },\n\n linkedDoc: function(options) {\n if (!options) { options = {}; }\n var from = this.first, to = this.first + this.size;\n if (options.from != null && options.from > from) { from = options.from; }\n if (options.to != null && options.to < to) { to = options.to; }\n var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction);\n if (options.sharedHist) { copy.history = this.history\n ; }(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist});\n copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}];\n copySharedMarkers(copy, findSharedMarkers(this));\n return copy\n },\n unlinkDoc: function(other) {\n if (other instanceof CodeMirror) { other = other.doc; }\n if (this.linked) { for (var i = 0; i < this.linked.length; ++i) {\n var link = this.linked[i];\n if (link.doc != other) { continue }\n this.linked.splice(i, 1);\n other.unlinkDoc(this);\n detachSharedMarkers(findSharedMarkers(this));\n break\n } }\n // If the histories were shared, split them again\n if (other.history == this.history) {\n var splitIds = [other.id];\n linkedDocs(other, function (doc) { return splitIds.push(doc.id); }, true);\n other.history = new History(null);\n other.history.done = copyHistoryArray(this.history.done, splitIds);\n other.history.undone = copyHistoryArray(this.history.undone, splitIds);\n }\n },\n iterLinkedDocs: function(f) {linkedDocs(this, f);},\n\n getMode: function() {return this.mode},\n getEditor: function() {return this.cm},\n\n splitLines: function(str) {\n if (this.lineSep) { return str.split(this.lineSep) }\n return splitLinesAuto(str)\n },\n lineSeparator: function() { return this.lineSep || \"\\n\" },\n\n setDirection: docMethodOp(function (dir) {\n if (dir != \"rtl\") { dir = \"ltr\"; }\n if (dir == this.direction) { return }\n this.direction = dir;\n this.iter(function (line) { return line.order = null; });\n if (this.cm) { directionChanged(this.cm); }\n })\n });\n\n // Public alias.\n Doc.prototype.eachLine = Doc.prototype.iter;\n\n // Kludge to work around strange IE behavior where it'll sometimes\n // re-fire a series of drag-related events right after the drop (#1551)\n var lastDrop = 0;\n\n function onDrop(e) {\n var cm = this;\n clearDragCursor(cm);\n if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e))\n { return }\n e_preventDefault(e);\n if (ie) { lastDrop = +new Date; }\n var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files;\n if (!pos || cm.isReadOnly()) { return }\n // Might be a file drop, in which case we simply extract the text\n // and insert it.\n if (files && files.length && window.FileReader && window.File) {\n var n = files.length, text = Array(n), read = 0;\n var markAsReadAndPasteIfAllFilesAreRead = function () {\n if (++read == n) {\n operation(cm, function () {\n pos = clipPos(cm.doc, pos);\n var change = {from: pos, to: pos,\n text: cm.doc.splitLines(\n text.filter(function (t) { return t != null; }).join(cm.doc.lineSeparator())),\n origin: \"paste\"};\n makeChange(cm.doc, change);\n setSelectionReplaceHistory(cm.doc, simpleSelection(clipPos(cm.doc, pos), clipPos(cm.doc, changeEnd(change))));\n })();\n }\n };\n var readTextFromFile = function (file, i) {\n if (cm.options.allowDropFileTypes &&\n indexOf(cm.options.allowDropFileTypes, file.type) == -1) {\n markAsReadAndPasteIfAllFilesAreRead();\n return\n }\n var reader = new FileReader;\n reader.onerror = function () { return markAsReadAndPasteIfAllFilesAreRead(); };\n reader.onload = function () {\n var content = reader.result;\n if (/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(content)) {\n markAsReadAndPasteIfAllFilesAreRead();\n return\n }\n text[i] = content;\n markAsReadAndPasteIfAllFilesAreRead();\n };\n reader.readAsText(file);\n };\n for (var i = 0; i < files.length; i++) { readTextFromFile(files[i], i); }\n } else { // Normal drop\n // Don't do a replace if the drop happened inside of the selected text.\n if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) {\n cm.state.draggingText(e);\n // Ensure the editor is re-focused\n setTimeout(function () { return cm.display.input.focus(); }, 20);\n return\n }\n try {\n var text$1 = e.dataTransfer.getData(\"Text\");\n if (text$1) {\n var selected;\n if (cm.state.draggingText && !cm.state.draggingText.copy)\n { selected = cm.listSelections(); }\n setSelectionNoUndo(cm.doc, simpleSelection(pos, pos));\n if (selected) { for (var i$1 = 0; i$1 < selected.length; ++i$1)\n { replaceRange(cm.doc, \"\", selected[i$1].anchor, selected[i$1].head, \"drag\"); } }\n cm.replaceSelection(text$1, \"around\", \"paste\");\n cm.display.input.focus();\n }\n }\n catch(e$1){}\n }\n }\n\n function onDragStart(cm, e) {\n if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return }\n if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { return }\n\n e.dataTransfer.setData(\"Text\", cm.getSelection());\n e.dataTransfer.effectAllowed = \"copyMove\";\n\n // Use dummy image instead of default browsers image.\n // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there.\n if (e.dataTransfer.setDragImage && !safari) {\n var img = elt(\"img\", null, null, \"position: fixed; left: 0; top: 0;\");\n img.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n if (presto) {\n img.width = img.height = 1;\n cm.display.wrapper.appendChild(img);\n // Force a relayout, or Opera won't use our image for some obscure reason\n img._top = img.offsetTop;\n }\n e.dataTransfer.setDragImage(img, 0, 0);\n if (presto) { img.parentNode.removeChild(img); }\n }\n }\n\n function onDragOver(cm, e) {\n var pos = posFromMouse(cm, e);\n if (!pos) { return }\n var frag = document.createDocumentFragment();\n drawSelectionCursor(cm, pos, frag);\n if (!cm.display.dragCursor) {\n cm.display.dragCursor = elt(\"div\", null, \"CodeMirror-cursors CodeMirror-dragcursors\");\n cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv);\n }\n removeChildrenAndAdd(cm.display.dragCursor, frag);\n }\n\n function clearDragCursor(cm) {\n if (cm.display.dragCursor) {\n cm.display.lineSpace.removeChild(cm.display.dragCursor);\n cm.display.dragCursor = null;\n }\n }\n\n // These must be handled carefully, because naively registering a\n // handler for each editor will cause the editors to never be\n // garbage collected.\n\n function forEachCodeMirror(f) {\n if (!document.getElementsByClassName) { return }\n var byClass = document.getElementsByClassName(\"CodeMirror\"), editors = [];\n for (var i = 0; i < byClass.length; i++) {\n var cm = byClass[i].CodeMirror;\n if (cm) { editors.push(cm); }\n }\n if (editors.length) { editors[0].operation(function () {\n for (var i = 0; i < editors.length; i++) { f(editors[i]); }\n }); }\n }\n\n var globalsRegistered = false;\n function ensureGlobalHandlers() {\n if (globalsRegistered) { return }\n registerGlobalHandlers();\n globalsRegistered = true;\n }\n function registerGlobalHandlers() {\n // When the window resizes, we need to refresh active editors.\n var resizeTimer;\n on(window, \"resize\", function () {\n if (resizeTimer == null) { resizeTimer = setTimeout(function () {\n resizeTimer = null;\n forEachCodeMirror(onResize);\n }, 100); }\n });\n // When the window loses focus, we want to show the editor as blurred\n on(window, \"blur\", function () { return forEachCodeMirror(onBlur); });\n }\n // Called when the window resizes\n function onResize(cm) {\n var d = cm.display;\n // Might be a text scaling operation, clear size caches.\n d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n d.scrollbarsClipped = false;\n cm.setSize();\n }\n\n var keyNames = {\n 3: \"Pause\", 8: \"Backspace\", 9: \"Tab\", 13: \"Enter\", 16: \"Shift\", 17: \"Ctrl\", 18: \"Alt\",\n 19: \"Pause\", 20: \"CapsLock\", 27: \"Esc\", 32: \"Space\", 33: \"PageUp\", 34: \"PageDown\", 35: \"End\",\n 36: \"Home\", 37: \"Left\", 38: \"Up\", 39: \"Right\", 40: \"Down\", 44: \"PrintScrn\", 45: \"Insert\",\n 46: \"Delete\", 59: \";\", 61: \"=\", 91: \"Mod\", 92: \"Mod\", 93: \"Mod\",\n 106: \"*\", 107: \"=\", 109: \"-\", 110: \".\", 111: \"/\", 145: \"ScrollLock\",\n 173: \"-\", 186: \";\", 187: \"=\", 188: \",\", 189: \"-\", 190: \".\", 191: \"/\", 192: \"`\", 219: \"[\", 220: \"\\\\\",\n 221: \"]\", 222: \"'\", 224: \"Mod\", 63232: \"Up\", 63233: \"Down\", 63234: \"Left\", 63235: \"Right\", 63272: \"Delete\",\n 63273: \"Home\", 63275: \"End\", 63276: \"PageUp\", 63277: \"PageDown\", 63302: \"Insert\"\n };\n\n // Number keys\n for (var i = 0; i < 10; i++) { keyNames[i + 48] = keyNames[i + 96] = String(i); }\n // Alphabetic keys\n for (var i$1 = 65; i$1 <= 90; i$1++) { keyNames[i$1] = String.fromCharCode(i$1); }\n // Function keys\n for (var i$2 = 1; i$2 <= 12; i$2++) { keyNames[i$2 + 111] = keyNames[i$2 + 63235] = \"F\" + i$2; }\n\n var keyMap = {};\n\n keyMap.basic = {\n \"Left\": \"goCharLeft\", \"Right\": \"goCharRight\", \"Up\": \"goLineUp\", \"Down\": \"goLineDown\",\n \"End\": \"goLineEnd\", \"Home\": \"goLineStartSmart\", \"PageUp\": \"goPageUp\", \"PageDown\": \"goPageDown\",\n \"Delete\": \"delCharAfter\", \"Backspace\": \"delCharBefore\", \"Shift-Backspace\": \"delCharBefore\",\n \"Tab\": \"defaultTab\", \"Shift-Tab\": \"indentAuto\",\n \"Enter\": \"newlineAndIndent\", \"Insert\": \"toggleOverwrite\",\n \"Esc\": \"singleSelection\"\n };\n // Note that the save and find-related commands aren't defined by\n // default. User code or addons can define them. Unknown commands\n // are simply ignored.\n keyMap.pcDefault = {\n \"Ctrl-A\": \"selectAll\", \"Ctrl-D\": \"deleteLine\", \"Ctrl-Z\": \"undo\", \"Shift-Ctrl-Z\": \"redo\", \"Ctrl-Y\": \"redo\",\n \"Ctrl-Home\": \"goDocStart\", \"Ctrl-End\": \"goDocEnd\", \"Ctrl-Up\": \"goLineUp\", \"Ctrl-Down\": \"goLineDown\",\n \"Ctrl-Left\": \"goGroupLeft\", \"Ctrl-Right\": \"goGroupRight\", \"Alt-Left\": \"goLineStart\", \"Alt-Right\": \"goLineEnd\",\n \"Ctrl-Backspace\": \"delGroupBefore\", \"Ctrl-Delete\": \"delGroupAfter\", \"Ctrl-S\": \"save\", \"Ctrl-F\": \"find\",\n \"Ctrl-G\": \"findNext\", \"Shift-Ctrl-G\": \"findPrev\", \"Shift-Ctrl-F\": \"replace\", \"Shift-Ctrl-R\": \"replaceAll\",\n \"Ctrl-[\": \"indentLess\", \"Ctrl-]\": \"indentMore\",\n \"Ctrl-U\": \"undoSelection\", \"Shift-Ctrl-U\": \"redoSelection\", \"Alt-U\": \"redoSelection\",\n \"fallthrough\": \"basic\"\n };\n // Very basic readline/emacs-style bindings, which are standard on Mac.\n keyMap.emacsy = {\n \"Ctrl-F\": \"goCharRight\", \"Ctrl-B\": \"goCharLeft\", \"Ctrl-P\": \"goLineUp\", \"Ctrl-N\": \"goLineDown\",\n \"Ctrl-A\": \"goLineStart\", \"Ctrl-E\": \"goLineEnd\", \"Ctrl-V\": \"goPageDown\", \"Shift-Ctrl-V\": \"goPageUp\",\n \"Ctrl-D\": \"delCharAfter\", \"Ctrl-H\": \"delCharBefore\", \"Alt-Backspace\": \"delWordBefore\", \"Ctrl-K\": \"killLine\",\n \"Ctrl-T\": \"transposeChars\", \"Ctrl-O\": \"openLine\"\n };\n keyMap.macDefault = {\n \"Cmd-A\": \"selectAll\", \"Cmd-D\": \"deleteLine\", \"Cmd-Z\": \"undo\", \"Shift-Cmd-Z\": \"redo\", \"Cmd-Y\": \"redo\",\n \"Cmd-Home\": \"goDocStart\", \"Cmd-Up\": \"goDocStart\", \"Cmd-End\": \"goDocEnd\", \"Cmd-Down\": \"goDocEnd\", \"Alt-Left\": \"goGroupLeft\",\n \"Alt-Right\": \"goGroupRight\", \"Cmd-Left\": \"goLineLeft\", \"Cmd-Right\": \"goLineRight\", \"Alt-Backspace\": \"delGroupBefore\",\n \"Ctrl-Alt-Backspace\": \"delGroupAfter\", \"Alt-Delete\": \"delGroupAfter\", \"Cmd-S\": \"save\", \"Cmd-F\": \"find\",\n \"Cmd-G\": \"findNext\", \"Shift-Cmd-G\": \"findPrev\", \"Cmd-Alt-F\": \"replace\", \"Shift-Cmd-Alt-F\": \"replaceAll\",\n \"Cmd-[\": \"indentLess\", \"Cmd-]\": \"indentMore\", \"Cmd-Backspace\": \"delWrappedLineLeft\", \"Cmd-Delete\": \"delWrappedLineRight\",\n \"Cmd-U\": \"undoSelection\", \"Shift-Cmd-U\": \"redoSelection\", \"Ctrl-Up\": \"goDocStart\", \"Ctrl-Down\": \"goDocEnd\",\n \"fallthrough\": [\"basic\", \"emacsy\"]\n };\n keyMap[\"default\"] = mac ? keyMap.macDefault : keyMap.pcDefault;\n\n // KEYMAP DISPATCH\n\n function normalizeKeyName(name) {\n var parts = name.split(/-(?!$)/);\n name = parts[parts.length - 1];\n var alt, ctrl, shift, cmd;\n for (var i = 0; i < parts.length - 1; i++) {\n var mod = parts[i];\n if (/^(cmd|meta|m)$/i.test(mod)) { cmd = true; }\n else if (/^a(lt)?$/i.test(mod)) { alt = true; }\n else if (/^(c|ctrl|control)$/i.test(mod)) { ctrl = true; }\n else if (/^s(hift)?$/i.test(mod)) { shift = true; }\n else { throw new Error(\"Unrecognized modifier name: \" + mod) }\n }\n if (alt) { name = \"Alt-\" + name; }\n if (ctrl) { name = \"Ctrl-\" + name; }\n if (cmd) { name = \"Cmd-\" + name; }\n if (shift) { name = \"Shift-\" + name; }\n return name\n }\n\n // This is a kludge to keep keymaps mostly working as raw objects\n // (backwards compatibility) while at the same time support features\n // like normalization and multi-stroke key bindings. It compiles a\n // new normalized keymap, and then updates the old object to reflect\n // this.\n function normalizeKeyMap(keymap) {\n var copy = {};\n for (var keyname in keymap) { if (keymap.hasOwnProperty(keyname)) {\n var value = keymap[keyname];\n if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { continue }\n if (value == \"...\") { delete keymap[keyname]; continue }\n\n var keys = map(keyname.split(\" \"), normalizeKeyName);\n for (var i = 0; i < keys.length; i++) {\n var val = (void 0), name = (void 0);\n if (i == keys.length - 1) {\n name = keys.join(\" \");\n val = value;\n } else {\n name = keys.slice(0, i + 1).join(\" \");\n val = \"...\";\n }\n var prev = copy[name];\n if (!prev) { copy[name] = val; }\n else if (prev != val) { throw new Error(\"Inconsistent bindings for \" + name) }\n }\n delete keymap[keyname];\n } }\n for (var prop in copy) { keymap[prop] = copy[prop]; }\n return keymap\n }\n\n function lookupKey(key, map, handle, context) {\n map = getKeyMap(map);\n var found = map.call ? map.call(key, context) : map[key];\n if (found === false) { return \"nothing\" }\n if (found === \"...\") { return \"multi\" }\n if (found != null && handle(found)) { return \"handled\" }\n\n if (map.fallthrough) {\n if (Object.prototype.toString.call(map.fallthrough) != \"[object Array]\")\n { return lookupKey(key, map.fallthrough, handle, context) }\n for (var i = 0; i < map.fallthrough.length; i++) {\n var result = lookupKey(key, map.fallthrough[i], handle, context);\n if (result) { return result }\n }\n }\n }\n\n // Modifier key presses don't count as 'real' key presses for the\n // purpose of keymap fallthrough.\n function isModifierKey(value) {\n var name = typeof value == \"string\" ? value : keyNames[value.keyCode];\n return name == \"Ctrl\" || name == \"Alt\" || name == \"Shift\" || name == \"Mod\"\n }\n\n function addModifierNames(name, event, noShift) {\n var base = name;\n if (event.altKey && base != \"Alt\") { name = \"Alt-\" + name; }\n if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != \"Ctrl\") { name = \"Ctrl-\" + name; }\n if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != \"Mod\") { name = \"Cmd-\" + name; }\n if (!noShift && event.shiftKey && base != \"Shift\") { name = \"Shift-\" + name; }\n return name\n }\n\n // Look up the name of a key as indicated by an event object.\n function keyName(event, noShift) {\n if (presto && event.keyCode == 34 && event[\"char\"]) { return false }\n var name = keyNames[event.keyCode];\n if (name == null || event.altGraphKey) { return false }\n // Ctrl-ScrollLock has keyCode 3, same as Ctrl-Pause,\n // so we'll use event.code when available (Chrome 48+, FF 38+, Safari 10.1+)\n if (event.keyCode == 3 && event.code) { name = event.code; }\n return addModifierNames(name, event, noShift)\n }\n\n function getKeyMap(val) {\n return typeof val == \"string\" ? keyMap[val] : val\n }\n\n // Helper for deleting text near the selection(s), used to implement\n // backspace, delete, and similar functionality.\n function deleteNearSelection(cm, compute) {\n var ranges = cm.doc.sel.ranges, kill = [];\n // Build up a set of ranges to kill first, merging overlapping\n // ranges.\n for (var i = 0; i < ranges.length; i++) {\n var toKill = compute(ranges[i]);\n while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) {\n var replaced = kill.pop();\n if (cmp(replaced.from, toKill.from) < 0) {\n toKill.from = replaced.from;\n break\n }\n }\n kill.push(toKill);\n }\n // Next, remove those actual ranges.\n runInOp(cm, function () {\n for (var i = kill.length - 1; i >= 0; i--)\n { replaceRange(cm.doc, \"\", kill[i].from, kill[i].to, \"+delete\"); }\n ensureCursorVisible(cm);\n });\n }\n\n function moveCharLogically(line, ch, dir) {\n var target = skipExtendingChars(line.text, ch + dir, dir);\n return target < 0 || target > line.text.length ? null : target\n }\n\n function moveLogically(line, start, dir) {\n var ch = moveCharLogically(line, start.ch, dir);\n return ch == null ? null : new Pos(start.line, ch, dir < 0 ? \"after\" : \"before\")\n }\n\n function endOfLine(visually, cm, lineObj, lineNo, dir) {\n if (visually) {\n if (cm.doc.direction == \"rtl\") { dir = -dir; }\n var order = getOrder(lineObj, cm.doc.direction);\n if (order) {\n var part = dir < 0 ? lst(order) : order[0];\n var moveInStorageOrder = (dir < 0) == (part.level == 1);\n var sticky = moveInStorageOrder ? \"after\" : \"before\";\n var ch;\n // With a wrapped rtl chunk (possibly spanning multiple bidi parts),\n // it could be that the last bidi part is not on the last visual line,\n // since visual lines contain content order-consecutive chunks.\n // Thus, in rtl, we are looking for the first (content-order) character\n // in the rtl chunk that is on the last line (that is, the same line\n // as the last (content-order) character).\n if (part.level > 0 || cm.doc.direction == \"rtl\") {\n var prep = prepareMeasureForLine(cm, lineObj);\n ch = dir < 0 ? lineObj.text.length - 1 : 0;\n var targetTop = measureCharPrepared(cm, prep, ch).top;\n ch = findFirst(function (ch) { return measureCharPrepared(cm, prep, ch).top == targetTop; }, (dir < 0) == (part.level == 1) ? part.from : part.to - 1, ch);\n if (sticky == \"before\") { ch = moveCharLogically(lineObj, ch, 1); }\n } else { ch = dir < 0 ? part.to : part.from; }\n return new Pos(lineNo, ch, sticky)\n }\n }\n return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? \"before\" : \"after\")\n }\n\n function moveVisually(cm, line, start, dir) {\n var bidi = getOrder(line, cm.doc.direction);\n if (!bidi) { return moveLogically(line, start, dir) }\n if (start.ch >= line.text.length) {\n start.ch = line.text.length;\n start.sticky = \"before\";\n } else if (start.ch <= 0) {\n start.ch = 0;\n start.sticky = \"after\";\n }\n var partPos = getBidiPartAt(bidi, start.ch, start.sticky), part = bidi[partPos];\n if (cm.doc.direction == \"ltr\" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) {\n // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines,\n // nothing interesting happens.\n return moveLogically(line, start, dir)\n }\n\n var mv = function (pos, dir) { return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir); };\n var prep;\n var getWrappedLineExtent = function (ch) {\n if (!cm.options.lineWrapping) { return {begin: 0, end: line.text.length} }\n prep = prep || prepareMeasureForLine(cm, line);\n return wrappedLineExtentChar(cm, line, prep, ch)\n };\n var wrappedLineExtent = getWrappedLineExtent(start.sticky == \"before\" ? mv(start, -1) : start.ch);\n\n if (cm.doc.direction == \"rtl\" || part.level == 1) {\n var moveInStorageOrder = (part.level == 1) == (dir < 0);\n var ch = mv(start, moveInStorageOrder ? 1 : -1);\n if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) {\n // Case 2: We move within an rtl part or in an rtl editor on the same visual line\n var sticky = moveInStorageOrder ? \"before\" : \"after\";\n return new Pos(start.line, ch, sticky)\n }\n }\n\n // Case 3: Could not move within this bidi part in this visual line, so leave\n // the current bidi part\n\n var searchInVisualLine = function (partPos, dir, wrappedLineExtent) {\n var getRes = function (ch, moveInStorageOrder) { return moveInStorageOrder\n ? new Pos(start.line, mv(ch, 1), \"before\")\n : new Pos(start.line, ch, \"after\"); };\n\n for (; partPos >= 0 && partPos < bidi.length; partPos += dir) {\n var part = bidi[partPos];\n var moveInStorageOrder = (dir > 0) == (part.level != 1);\n var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1);\n if (part.from <= ch && ch < part.to) { return getRes(ch, moveInStorageOrder) }\n ch = moveInStorageOrder ? part.from : mv(part.to, -1);\n if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) { return getRes(ch, moveInStorageOrder) }\n }\n };\n\n // Case 3a: Look for other bidi parts on the same visual line\n var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent);\n if (res) { return res }\n\n // Case 3b: Look for other bidi parts on the next visual line\n var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1);\n if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) {\n res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh));\n if (res) { return res }\n }\n\n // Case 4: Nowhere to move\n return null\n }\n\n // Commands are parameter-less actions that can be performed on an\n // editor, mostly used for keybindings.\n var commands = {\n selectAll: selectAll,\n singleSelection: function (cm) { return cm.setSelection(cm.getCursor(\"anchor\"), cm.getCursor(\"head\"), sel_dontScroll); },\n killLine: function (cm) { return deleteNearSelection(cm, function (range) {\n if (range.empty()) {\n var len = getLine(cm.doc, range.head.line).text.length;\n if (range.head.ch == len && range.head.line < cm.lastLine())\n { return {from: range.head, to: Pos(range.head.line + 1, 0)} }\n else\n { return {from: range.head, to: Pos(range.head.line, len)} }\n } else {\n return {from: range.from(), to: range.to()}\n }\n }); },\n deleteLine: function (cm) { return deleteNearSelection(cm, function (range) { return ({\n from: Pos(range.from().line, 0),\n to: clipPos(cm.doc, Pos(range.to().line + 1, 0))\n }); }); },\n delLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { return ({\n from: Pos(range.from().line, 0), to: range.from()\n }); }); },\n delWrappedLineLeft: function (cm) { return deleteNearSelection(cm, function (range) {\n var top = cm.charCoords(range.head, \"div\").top + 5;\n var leftPos = cm.coordsChar({left: 0, top: top}, \"div\");\n return {from: leftPos, to: range.from()}\n }); },\n delWrappedLineRight: function (cm) { return deleteNearSelection(cm, function (range) {\n var top = cm.charCoords(range.head, \"div\").top + 5;\n var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\");\n return {from: range.from(), to: rightPos }\n }); },\n undo: function (cm) { return cm.undo(); },\n redo: function (cm) { return cm.redo(); },\n undoSelection: function (cm) { return cm.undoSelection(); },\n redoSelection: function (cm) { return cm.redoSelection(); },\n goDocStart: function (cm) { return cm.extendSelection(Pos(cm.firstLine(), 0)); },\n goDocEnd: function (cm) { return cm.extendSelection(Pos(cm.lastLine())); },\n goLineStart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStart(cm, range.head.line); },\n {origin: \"+move\", bias: 1}\n ); },\n goLineStartSmart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStartSmart(cm, range.head); },\n {origin: \"+move\", bias: 1}\n ); },\n goLineEnd: function (cm) { return cm.extendSelectionsBy(function (range) { return lineEnd(cm, range.head.line); },\n {origin: \"+move\", bias: -1}\n ); },\n goLineRight: function (cm) { return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\")\n }, sel_move); },\n goLineLeft: function (cm) { return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n return cm.coordsChar({left: 0, top: top}, \"div\")\n }, sel_move); },\n goLineLeftSmart: function (cm) { return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n var pos = cm.coordsChar({left: 0, top: top}, \"div\");\n if (pos.ch < cm.getLine(pos.line).search(/\\S/)) { return lineStartSmart(cm, range.head) }\n return pos\n }, sel_move); },\n goLineUp: function (cm) { return cm.moveV(-1, \"line\"); },\n goLineDown: function (cm) { return cm.moveV(1, \"line\"); },\n goPageUp: function (cm) { return cm.moveV(-1, \"page\"); },\n goPageDown: function (cm) { return cm.moveV(1, \"page\"); },\n goCharLeft: function (cm) { return cm.moveH(-1, \"char\"); },\n goCharRight: function (cm) { return cm.moveH(1, \"char\"); },\n goColumnLeft: function (cm) { return cm.moveH(-1, \"column\"); },\n goColumnRight: function (cm) { return cm.moveH(1, \"column\"); },\n goWordLeft: function (cm) { return cm.moveH(-1, \"word\"); },\n goGroupRight: function (cm) { return cm.moveH(1, \"group\"); },\n goGroupLeft: function (cm) { return cm.moveH(-1, \"group\"); },\n goWordRight: function (cm) { return cm.moveH(1, \"word\"); },\n delCharBefore: function (cm) { return cm.deleteH(-1, \"codepoint\"); },\n delCharAfter: function (cm) { return cm.deleteH(1, \"char\"); },\n delWordBefore: function (cm) { return cm.deleteH(-1, \"word\"); },\n delWordAfter: function (cm) { return cm.deleteH(1, \"word\"); },\n delGroupBefore: function (cm) { return cm.deleteH(-1, \"group\"); },\n delGroupAfter: function (cm) { return cm.deleteH(1, \"group\"); },\n indentAuto: function (cm) { return cm.indentSelection(\"smart\"); },\n indentMore: function (cm) { return cm.indentSelection(\"add\"); },\n indentLess: function (cm) { return cm.indentSelection(\"subtract\"); },\n insertTab: function (cm) { return cm.replaceSelection(\"\\t\"); },\n insertSoftTab: function (cm) {\n var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize;\n for (var i = 0; i < ranges.length; i++) {\n var pos = ranges[i].from();\n var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize);\n spaces.push(spaceStr(tabSize - col % tabSize));\n }\n cm.replaceSelections(spaces);\n },\n defaultTab: function (cm) {\n if (cm.somethingSelected()) { cm.indentSelection(\"add\"); }\n else { cm.execCommand(\"insertTab\"); }\n },\n // Swap the two chars left and right of each selection's head.\n // Move cursor behind the two swapped characters afterwards.\n //\n // Doesn't consider line feeds a character.\n // Doesn't scan more than one line above to find a character.\n // Doesn't do anything on an empty line.\n // Doesn't do anything with non-empty selections.\n transposeChars: function (cm) { return runInOp(cm, function () {\n var ranges = cm.listSelections(), newSel = [];\n for (var i = 0; i < ranges.length; i++) {\n if (!ranges[i].empty()) { continue }\n var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text;\n if (line) {\n if (cur.ch == line.length) { cur = new Pos(cur.line, cur.ch - 1); }\n if (cur.ch > 0) {\n cur = new Pos(cur.line, cur.ch + 1);\n cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2),\n Pos(cur.line, cur.ch - 2), cur, \"+transpose\");\n } else if (cur.line > cm.doc.first) {\n var prev = getLine(cm.doc, cur.line - 1).text;\n if (prev) {\n cur = new Pos(cur.line, 1);\n cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() +\n prev.charAt(prev.length - 1),\n Pos(cur.line - 1, prev.length - 1), cur, \"+transpose\");\n }\n }\n }\n newSel.push(new Range(cur, cur));\n }\n cm.setSelections(newSel);\n }); },\n newlineAndIndent: function (cm) { return runInOp(cm, function () {\n var sels = cm.listSelections();\n for (var i = sels.length - 1; i >= 0; i--)\n { cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, \"+input\"); }\n sels = cm.listSelections();\n for (var i$1 = 0; i$1 < sels.length; i$1++)\n { cm.indentLine(sels[i$1].from().line, null, true); }\n ensureCursorVisible(cm);\n }); },\n openLine: function (cm) { return cm.replaceSelection(\"\\n\", \"start\"); },\n toggleOverwrite: function (cm) { return cm.toggleOverwrite(); }\n };\n\n\n function lineStart(cm, lineN) {\n var line = getLine(cm.doc, lineN);\n var visual = visualLine(line);\n if (visual != line) { lineN = lineNo(visual); }\n return endOfLine(true, cm, visual, lineN, 1)\n }\n function lineEnd(cm, lineN) {\n var line = getLine(cm.doc, lineN);\n var visual = visualLineEnd(line);\n if (visual != line) { lineN = lineNo(visual); }\n return endOfLine(true, cm, line, lineN, -1)\n }\n function lineStartSmart(cm, pos) {\n var start = lineStart(cm, pos.line);\n var line = getLine(cm.doc, start.line);\n var order = getOrder(line, cm.doc.direction);\n if (!order || order[0].level == 0) {\n var firstNonWS = Math.max(start.ch, line.text.search(/\\S/));\n var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch;\n return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky)\n }\n return start\n }\n\n // Run a handler that was bound to a key.\n function doHandleBinding(cm, bound, dropShift) {\n if (typeof bound == \"string\") {\n bound = commands[bound];\n if (!bound) { return false }\n }\n // Ensure previous input has been read, so that the handler sees a\n // consistent view of the document\n cm.display.input.ensurePolled();\n var prevShift = cm.display.shift, done = false;\n try {\n if (cm.isReadOnly()) { cm.state.suppressEdits = true; }\n if (dropShift) { cm.display.shift = false; }\n done = bound(cm) != Pass;\n } finally {\n cm.display.shift = prevShift;\n cm.state.suppressEdits = false;\n }\n return done\n }\n\n function lookupKeyForEditor(cm, name, handle) {\n for (var i = 0; i < cm.state.keyMaps.length; i++) {\n var result = lookupKey(name, cm.state.keyMaps[i], handle, cm);\n if (result) { return result }\n }\n return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm))\n || lookupKey(name, cm.options.keyMap, handle, cm)\n }\n\n // Note that, despite the name, this function is also used to check\n // for bound mouse clicks.\n\n var stopSeq = new Delayed;\n\n function dispatchKey(cm, name, e, handle) {\n var seq = cm.state.keySeq;\n if (seq) {\n if (isModifierKey(name)) { return \"handled\" }\n if (/\\'$/.test(name))\n { cm.state.keySeq = null; }\n else\n { stopSeq.set(50, function () {\n if (cm.state.keySeq == seq) {\n cm.state.keySeq = null;\n cm.display.input.reset();\n }\n }); }\n if (dispatchKeyInner(cm, seq + \" \" + name, e, handle)) { return true }\n }\n return dispatchKeyInner(cm, name, e, handle)\n }\n\n function dispatchKeyInner(cm, name, e, handle) {\n var result = lookupKeyForEditor(cm, name, handle);\n\n if (result == \"multi\")\n { cm.state.keySeq = name; }\n if (result == \"handled\")\n { signalLater(cm, \"keyHandled\", cm, name, e); }\n\n if (result == \"handled\" || result == \"multi\") {\n e_preventDefault(e);\n restartBlink(cm);\n }\n\n return !!result\n }\n\n // Handle a key from the keydown event.\n function handleKeyBinding(cm, e) {\n var name = keyName(e, true);\n if (!name) { return false }\n\n if (e.shiftKey && !cm.state.keySeq) {\n // First try to resolve full name (including 'Shift-'). Failing\n // that, see if there is a cursor-motion command (starting with\n // 'go') bound to the keyname without 'Shift-'.\n return dispatchKey(cm, \"Shift-\" + name, e, function (b) { return doHandleBinding(cm, b, true); })\n || dispatchKey(cm, name, e, function (b) {\n if (typeof b == \"string\" ? /^go[A-Z]/.test(b) : b.motion)\n { return doHandleBinding(cm, b) }\n })\n } else {\n return dispatchKey(cm, name, e, function (b) { return doHandleBinding(cm, b); })\n }\n }\n\n // Handle a key from the keypress event\n function handleCharBinding(cm, e, ch) {\n return dispatchKey(cm, \"'\" + ch + \"'\", e, function (b) { return doHandleBinding(cm, b, true); })\n }\n\n var lastStoppedKey = null;\n function onKeyDown(e) {\n var cm = this;\n if (e.target && e.target != cm.display.input.getField()) { return }\n cm.curOp.focus = activeElt(root(cm));\n if (signalDOMEvent(cm, e)) { return }\n // IE does strange things with escape.\n if (ie && ie_version < 11 && e.keyCode == 27) { e.returnValue = false; }\n var code = e.keyCode;\n cm.display.shift = code == 16 || e.shiftKey;\n var handled = handleKeyBinding(cm, e);\n if (presto) {\n lastStoppedKey = handled ? code : null;\n // Opera has no cut event... we try to at least catch the key combo\n if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey))\n { cm.replaceSelection(\"\", null, \"cut\"); }\n }\n if (gecko && !mac && !handled && code == 46 && e.shiftKey && !e.ctrlKey && document.execCommand)\n { document.execCommand(\"cut\"); }\n\n // Turn mouse into crosshair when Alt is held on Mac.\n if (code == 18 && !/\\bCodeMirror-crosshair\\b/.test(cm.display.lineDiv.className))\n { showCrossHair(cm); }\n }\n\n function showCrossHair(cm) {\n var lineDiv = cm.display.lineDiv;\n addClass(lineDiv, \"CodeMirror-crosshair\");\n\n function up(e) {\n if (e.keyCode == 18 || !e.altKey) {\n rmClass(lineDiv, \"CodeMirror-crosshair\");\n off(document, \"keyup\", up);\n off(document, \"mouseover\", up);\n }\n }\n on(document, \"keyup\", up);\n on(document, \"mouseover\", up);\n }\n\n function onKeyUp(e) {\n if (e.keyCode == 16) { this.doc.sel.shift = false; }\n signalDOMEvent(this, e);\n }\n\n function onKeyPress(e) {\n var cm = this;\n if (e.target && e.target != cm.display.input.getField()) { return }\n if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { return }\n var keyCode = e.keyCode, charCode = e.charCode;\n if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return}\n if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) { return }\n var ch = String.fromCharCode(charCode == null ? keyCode : charCode);\n // Some browsers fire keypress events for backspace\n if (ch == \"\\x08\") { return }\n if (handleCharBinding(cm, e, ch)) { return }\n cm.display.input.onKeyPress(e);\n }\n\n var DOUBLECLICK_DELAY = 400;\n\n var PastClick = function(time, pos, button) {\n this.time = time;\n this.pos = pos;\n this.button = button;\n };\n\n PastClick.prototype.compare = function (time, pos, button) {\n return this.time + DOUBLECLICK_DELAY > time &&\n cmp(pos, this.pos) == 0 && button == this.button\n };\n\n var lastClick, lastDoubleClick;\n function clickRepeat(pos, button) {\n var now = +new Date;\n if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) {\n lastClick = lastDoubleClick = null;\n return \"triple\"\n } else if (lastClick && lastClick.compare(now, pos, button)) {\n lastDoubleClick = new PastClick(now, pos, button);\n lastClick = null;\n return \"double\"\n } else {\n lastClick = new PastClick(now, pos, button);\n lastDoubleClick = null;\n return \"single\"\n }\n }\n\n // A mouse down can be a single click, double click, triple click,\n // start of selection drag, start of text drag, new cursor\n // (ctrl-click), rectangle drag (alt-drag), or xwin\n // middle-click-paste. Or it might be a click on something we should\n // not interfere with, such as a scrollbar or widget.\n function onMouseDown(e) {\n var cm = this, display = cm.display;\n if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { return }\n display.input.ensurePolled();\n display.shift = e.shiftKey;\n\n if (eventInWidget(display, e)) {\n if (!webkit) {\n // Briefly turn off draggability, to allow widgets to do\n // normal dragging things.\n display.scroller.draggable = false;\n setTimeout(function () { return display.scroller.draggable = true; }, 100);\n }\n return\n }\n if (clickInGutter(cm, e)) { return }\n var pos = posFromMouse(cm, e), button = e_button(e), repeat = pos ? clickRepeat(pos, button) : \"single\";\n win(cm).focus();\n\n // #3261: make sure, that we're not starting a second selection\n if (button == 1 && cm.state.selectingText)\n { cm.state.selectingText(e); }\n\n if (pos && handleMappedButton(cm, button, pos, repeat, e)) { return }\n\n if (button == 1) {\n if (pos) { leftButtonDown(cm, pos, repeat, e); }\n else if (e_target(e) == display.scroller) { e_preventDefault(e); }\n } else if (button == 2) {\n if (pos) { extendSelection(cm.doc, pos); }\n setTimeout(function () { return display.input.focus(); }, 20);\n } else if (button == 3) {\n if (captureRightClick) { cm.display.input.onContextMenu(e); }\n else { delayBlurEvent(cm); }\n }\n }\n\n function handleMappedButton(cm, button, pos, repeat, event) {\n var name = \"Click\";\n if (repeat == \"double\") { name = \"Double\" + name; }\n else if (repeat == \"triple\") { name = \"Triple\" + name; }\n name = (button == 1 ? \"Left\" : button == 2 ? \"Middle\" : \"Right\") + name;\n\n return dispatchKey(cm, addModifierNames(name, event), event, function (bound) {\n if (typeof bound == \"string\") { bound = commands[bound]; }\n if (!bound) { return false }\n var done = false;\n try {\n if (cm.isReadOnly()) { cm.state.suppressEdits = true; }\n done = bound(cm, pos) != Pass;\n } finally {\n cm.state.suppressEdits = false;\n }\n return done\n })\n }\n\n function configureMouse(cm, repeat, event) {\n var option = cm.getOption(\"configureMouse\");\n var value = option ? option(cm, repeat, event) : {};\n if (value.unit == null) {\n var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey;\n value.unit = rect ? \"rectangle\" : repeat == \"single\" ? \"char\" : repeat == \"double\" ? \"word\" : \"line\";\n }\n if (value.extend == null || cm.doc.extend) { value.extend = cm.doc.extend || event.shiftKey; }\n if (value.addNew == null) { value.addNew = mac ? event.metaKey : event.ctrlKey; }\n if (value.moveOnDrag == null) { value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey); }\n return value\n }\n\n function leftButtonDown(cm, pos, repeat, event) {\n if (ie) { setTimeout(bind(ensureFocus, cm), 0); }\n else { cm.curOp.focus = activeElt(root(cm)); }\n\n var behavior = configureMouse(cm, repeat, event);\n\n var sel = cm.doc.sel, contained;\n if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() &&\n repeat == \"single\" && (contained = sel.contains(pos)) > -1 &&\n (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) &&\n (cmp(contained.to(), pos) > 0 || pos.xRel < 0))\n { leftButtonStartDrag(cm, event, pos, behavior); }\n else\n { leftButtonSelect(cm, event, pos, behavior); }\n }\n\n // Start a text drag. When it ends, see if any dragging actually\n // happen, and treat as a click if it didn't.\n function leftButtonStartDrag(cm, event, pos, behavior) {\n var display = cm.display, moved = false;\n var dragEnd = operation(cm, function (e) {\n if (webkit) { display.scroller.draggable = false; }\n cm.state.draggingText = false;\n if (cm.state.delayingBlurEvent) {\n if (cm.hasFocus()) { cm.state.delayingBlurEvent = false; }\n else { delayBlurEvent(cm); }\n }\n off(display.wrapper.ownerDocument, \"mouseup\", dragEnd);\n off(display.wrapper.ownerDocument, \"mousemove\", mouseMove);\n off(display.scroller, \"dragstart\", dragStart);\n off(display.scroller, \"drop\", dragEnd);\n if (!moved) {\n e_preventDefault(e);\n if (!behavior.addNew)\n { extendSelection(cm.doc, pos, null, null, behavior.extend); }\n // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081)\n if ((webkit && !safari) || ie && ie_version == 9)\n { setTimeout(function () {display.wrapper.ownerDocument.body.focus({preventScroll: true}); display.input.focus();}, 20); }\n else\n { display.input.focus(); }\n }\n });\n var mouseMove = function(e2) {\n moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10;\n };\n var dragStart = function () { return moved = true; };\n // Let the drag handler handle this.\n if (webkit) { display.scroller.draggable = true; }\n cm.state.draggingText = dragEnd;\n dragEnd.copy = !behavior.moveOnDrag;\n on(display.wrapper.ownerDocument, \"mouseup\", dragEnd);\n on(display.wrapper.ownerDocument, \"mousemove\", mouseMove);\n on(display.scroller, \"dragstart\", dragStart);\n on(display.scroller, \"drop\", dragEnd);\n\n cm.state.delayingBlurEvent = true;\n setTimeout(function () { return display.input.focus(); }, 20);\n // IE's approach to draggable\n if (display.scroller.dragDrop) { display.scroller.dragDrop(); }\n }\n\n function rangeForUnit(cm, pos, unit) {\n if (unit == \"char\") { return new Range(pos, pos) }\n if (unit == \"word\") { return cm.findWordAt(pos) }\n if (unit == \"line\") { return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))) }\n var result = unit(cm, pos);\n return new Range(result.from, result.to)\n }\n\n // Normal selection, as opposed to text dragging.\n function leftButtonSelect(cm, event, start, behavior) {\n if (ie) { delayBlurEvent(cm); }\n var display = cm.display, doc = cm.doc;\n e_preventDefault(event);\n\n var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges;\n if (behavior.addNew && !behavior.extend) {\n ourIndex = doc.sel.contains(start);\n if (ourIndex > -1)\n { ourRange = ranges[ourIndex]; }\n else\n { ourRange = new Range(start, start); }\n } else {\n ourRange = doc.sel.primary();\n ourIndex = doc.sel.primIndex;\n }\n\n if (behavior.unit == \"rectangle\") {\n if (!behavior.addNew) { ourRange = new Range(start, start); }\n start = posFromMouse(cm, event, true, true);\n ourIndex = -1;\n } else {\n var range = rangeForUnit(cm, start, behavior.unit);\n if (behavior.extend)\n { ourRange = extendRange(ourRange, range.anchor, range.head, behavior.extend); }\n else\n { ourRange = range; }\n }\n\n if (!behavior.addNew) {\n ourIndex = 0;\n setSelection(doc, new Selection([ourRange], 0), sel_mouse);\n startSel = doc.sel;\n } else if (ourIndex == -1) {\n ourIndex = ranges.length;\n setSelection(doc, normalizeSelection(cm, ranges.concat([ourRange]), ourIndex),\n {scroll: false, origin: \"*mouse\"});\n } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == \"char\" && !behavior.extend) {\n setSelection(doc, normalizeSelection(cm, ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0),\n {scroll: false, origin: \"*mouse\"});\n startSel = doc.sel;\n } else {\n replaceOneSelection(doc, ourIndex, ourRange, sel_mouse);\n }\n\n var lastPos = start;\n function extendTo(pos) {\n if (cmp(lastPos, pos) == 0) { return }\n lastPos = pos;\n\n if (behavior.unit == \"rectangle\") {\n var ranges = [], tabSize = cm.options.tabSize;\n var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize);\n var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize);\n var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol);\n for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line));\n line <= end; line++) {\n var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize);\n if (left == right)\n { ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); }\n else if (text.length > leftPos)\n { ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); }\n }\n if (!ranges.length) { ranges.push(new Range(start, start)); }\n setSelection(doc, normalizeSelection(cm, startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex),\n {origin: \"*mouse\", scroll: false});\n cm.scrollIntoView(pos);\n } else {\n var oldRange = ourRange;\n var range = rangeForUnit(cm, pos, behavior.unit);\n var anchor = oldRange.anchor, head;\n if (cmp(range.anchor, anchor) > 0) {\n head = range.head;\n anchor = minPos(oldRange.from(), range.anchor);\n } else {\n head = range.anchor;\n anchor = maxPos(oldRange.to(), range.head);\n }\n var ranges$1 = startSel.ranges.slice(0);\n ranges$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc, anchor), head));\n setSelection(doc, normalizeSelection(cm, ranges$1, ourIndex), sel_mouse);\n }\n }\n\n var editorSize = display.wrapper.getBoundingClientRect();\n // Used to ensure timeout re-tries don't fire when another extend\n // happened in the meantime (clearTimeout isn't reliable -- at\n // least on Chrome, the timeouts still happen even when cleared,\n // if the clear happens after their scheduled firing time).\n var counter = 0;\n\n function extend(e) {\n var curCount = ++counter;\n var cur = posFromMouse(cm, e, true, behavior.unit == \"rectangle\");\n if (!cur) { return }\n if (cmp(cur, lastPos) != 0) {\n cm.curOp.focus = activeElt(root(cm));\n extendTo(cur);\n var visible = visibleLines(display, doc);\n if (cur.line >= visible.to || cur.line < visible.from)\n { setTimeout(operation(cm, function () {if (counter == curCount) { extend(e); }}), 150); }\n } else {\n var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0;\n if (outside) { setTimeout(operation(cm, function () {\n if (counter != curCount) { return }\n display.scroller.scrollTop += outside;\n extend(e);\n }), 50); }\n }\n }\n\n function done(e) {\n cm.state.selectingText = false;\n counter = Infinity;\n // If e is null or undefined we interpret this as someone trying\n // to explicitly cancel the selection rather than the user\n // letting go of the mouse button.\n if (e) {\n e_preventDefault(e);\n display.input.focus();\n }\n off(display.wrapper.ownerDocument, \"mousemove\", move);\n off(display.wrapper.ownerDocument, \"mouseup\", up);\n doc.history.lastSelOrigin = null;\n }\n\n var move = operation(cm, function (e) {\n if (e.buttons === 0 || !e_button(e)) { done(e); }\n else { extend(e); }\n });\n var up = operation(cm, done);\n cm.state.selectingText = up;\n on(display.wrapper.ownerDocument, \"mousemove\", move);\n on(display.wrapper.ownerDocument, \"mouseup\", up);\n }\n\n // Used when mouse-selecting to adjust the anchor to the proper side\n // of a bidi jump depending on the visual position of the head.\n function bidiSimplify(cm, range) {\n var anchor = range.anchor;\n var head = range.head;\n var anchorLine = getLine(cm.doc, anchor.line);\n if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) { return range }\n var order = getOrder(anchorLine);\n if (!order) { return range }\n var index = getBidiPartAt(order, anchor.ch, anchor.sticky), part = order[index];\n if (part.from != anchor.ch && part.to != anchor.ch) { return range }\n var boundary = index + ((part.from == anchor.ch) == (part.level != 1) ? 0 : 1);\n if (boundary == 0 || boundary == order.length) { return range }\n\n // Compute the relative visual position of the head compared to the\n // anchor (<0 is to the left, >0 to the right)\n var leftSide;\n if (head.line != anchor.line) {\n leftSide = (head.line - anchor.line) * (cm.doc.direction == \"ltr\" ? 1 : -1) > 0;\n } else {\n var headIndex = getBidiPartAt(order, head.ch, head.sticky);\n var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1);\n if (headIndex == boundary - 1 || headIndex == boundary)\n { leftSide = dir < 0; }\n else\n { leftSide = dir > 0; }\n }\n\n var usePart = order[boundary + (leftSide ? -1 : 0)];\n var from = leftSide == (usePart.level == 1);\n var ch = from ? usePart.from : usePart.to, sticky = from ? \"after\" : \"before\";\n return anchor.ch == ch && anchor.sticky == sticky ? range : new Range(new Pos(anchor.line, ch, sticky), head)\n }\n\n\n // Determines whether an event happened in the gutter, and fires the\n // handlers for the corresponding event.\n function gutterEvent(cm, e, type, prevent) {\n var mX, mY;\n if (e.touches) {\n mX = e.touches[0].clientX;\n mY = e.touches[0].clientY;\n } else {\n try { mX = e.clientX; mY = e.clientY; }\n catch(e$1) { return false }\n }\n if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { return false }\n if (prevent) { e_preventDefault(e); }\n\n var display = cm.display;\n var lineBox = display.lineDiv.getBoundingClientRect();\n\n if (mY > lineBox.bottom || !hasHandler(cm, type)) { return e_defaultPrevented(e) }\n mY -= lineBox.top - display.viewOffset;\n\n for (var i = 0; i < cm.display.gutterSpecs.length; ++i) {\n var g = display.gutters.childNodes[i];\n if (g && g.getBoundingClientRect().right >= mX) {\n var line = lineAtHeight(cm.doc, mY);\n var gutter = cm.display.gutterSpecs[i];\n signal(cm, type, cm, line, gutter.className, e);\n return e_defaultPrevented(e)\n }\n }\n }\n\n function clickInGutter(cm, e) {\n return gutterEvent(cm, e, \"gutterClick\", true)\n }\n\n // CONTEXT MENU HANDLING\n\n // To make the context menu work, we need to briefly unhide the\n // textarea (making it as unobtrusive as possible) to let the\n // right-click take effect on it.\n function onContextMenu(cm, e) {\n if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { return }\n if (signalDOMEvent(cm, e, \"contextmenu\")) { return }\n if (!captureRightClick) { cm.display.input.onContextMenu(e); }\n }\n\n function contextMenuInGutter(cm, e) {\n if (!hasHandler(cm, \"gutterContextMenu\")) { return false }\n return gutterEvent(cm, e, \"gutterContextMenu\", false)\n }\n\n function themeChanged(cm) {\n cm.display.wrapper.className = cm.display.wrapper.className.replace(/\\s*cm-s-\\S+/g, \"\") +\n cm.options.theme.replace(/(^|\\s)\\s*/g, \" cm-s-\");\n clearCaches(cm);\n }\n\n var Init = {toString: function(){return \"CodeMirror.Init\"}};\n\n var defaults = {};\n var optionHandlers = {};\n\n function defineOptions(CodeMirror) {\n var optionHandlers = CodeMirror.optionHandlers;\n\n function option(name, deflt, handle, notOnInit) {\n CodeMirror.defaults[name] = deflt;\n if (handle) { optionHandlers[name] =\n notOnInit ? function (cm, val, old) {if (old != Init) { handle(cm, val, old); }} : handle; }\n }\n\n CodeMirror.defineOption = option;\n\n // Passed to option handlers when there is no old value.\n CodeMirror.Init = Init;\n\n // These two are, on init, called from the constructor because they\n // have to be initialized before the editor can start at all.\n option(\"value\", \"\", function (cm, val) { return cm.setValue(val); }, true);\n option(\"mode\", null, function (cm, val) {\n cm.doc.modeOption = val;\n loadMode(cm);\n }, true);\n\n option(\"indentUnit\", 2, loadMode, true);\n option(\"indentWithTabs\", false);\n option(\"smartIndent\", true);\n option(\"tabSize\", 4, function (cm) {\n resetModeState(cm);\n clearCaches(cm);\n regChange(cm);\n }, true);\n\n option(\"lineSeparator\", null, function (cm, val) {\n cm.doc.lineSep = val;\n if (!val) { return }\n var newBreaks = [], lineNo = cm.doc.first;\n cm.doc.iter(function (line) {\n for (var pos = 0;;) {\n var found = line.text.indexOf(val, pos);\n if (found == -1) { break }\n pos = found + val.length;\n newBreaks.push(Pos(lineNo, found));\n }\n lineNo++;\n });\n for (var i = newBreaks.length - 1; i >= 0; i--)\n { replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)); }\n });\n option(\"specialChars\", /[\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u200b\\u200e\\u200f\\u2028\\u2029\\u202d\\u202e\\u2066\\u2067\\u2069\\ufeff\\ufff9-\\ufffc]/g, function (cm, val, old) {\n cm.state.specialChars = new RegExp(val.source + (val.test(\"\\t\") ? \"\" : \"|\\t\"), \"g\");\n if (old != Init) { cm.refresh(); }\n });\n option(\"specialCharPlaceholder\", defaultSpecialCharPlaceholder, function (cm) { return cm.refresh(); }, true);\n option(\"electricChars\", true);\n option(\"inputStyle\", mobile ? \"contenteditable\" : \"textarea\", function () {\n throw new Error(\"inputStyle can not (yet) be changed in a running editor\") // FIXME\n }, true);\n option(\"spellcheck\", false, function (cm, val) { return cm.getInputField().spellcheck = val; }, true);\n option(\"autocorrect\", false, function (cm, val) { return cm.getInputField().autocorrect = val; }, true);\n option(\"autocapitalize\", false, function (cm, val) { return cm.getInputField().autocapitalize = val; }, true);\n option(\"rtlMoveVisually\", !windows);\n option(\"wholeLineUpdateBefore\", true);\n\n option(\"theme\", \"default\", function (cm) {\n themeChanged(cm);\n updateGutters(cm);\n }, true);\n option(\"keyMap\", \"default\", function (cm, val, old) {\n var next = getKeyMap(val);\n var prev = old != Init && getKeyMap(old);\n if (prev && prev.detach) { prev.detach(cm, next); }\n if (next.attach) { next.attach(cm, prev || null); }\n });\n option(\"extraKeys\", null);\n option(\"configureMouse\", null);\n\n option(\"lineWrapping\", false, wrappingChanged, true);\n option(\"gutters\", [], function (cm, val) {\n cm.display.gutterSpecs = getGutters(val, cm.options.lineNumbers);\n updateGutters(cm);\n }, true);\n option(\"fixedGutter\", true, function (cm, val) {\n cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + \"px\" : \"0\";\n cm.refresh();\n }, true);\n option(\"coverGutterNextToScrollbar\", false, function (cm) { return updateScrollbars(cm); }, true);\n option(\"scrollbarStyle\", \"native\", function (cm) {\n initScrollbars(cm);\n updateScrollbars(cm);\n cm.display.scrollbars.setScrollTop(cm.doc.scrollTop);\n cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft);\n }, true);\n option(\"lineNumbers\", false, function (cm, val) {\n cm.display.gutterSpecs = getGutters(cm.options.gutters, val);\n updateGutters(cm);\n }, true);\n option(\"firstLineNumber\", 1, updateGutters, true);\n option(\"lineNumberFormatter\", function (integer) { return integer; }, updateGutters, true);\n option(\"showCursorWhenSelecting\", false, updateSelection, true);\n\n option(\"resetSelectionOnContextMenu\", true);\n option(\"lineWiseCopyCut\", true);\n option(\"pasteLinesPerSelection\", true);\n option(\"selectionsMayTouch\", false);\n\n option(\"readOnly\", false, function (cm, val) {\n if (val == \"nocursor\") {\n onBlur(cm);\n cm.display.input.blur();\n }\n cm.display.input.readOnlyChanged(val);\n });\n\n option(\"screenReaderLabel\", null, function (cm, val) {\n val = (val === '') ? null : val;\n cm.display.input.screenReaderLabelChanged(val);\n });\n\n option(\"disableInput\", false, function (cm, val) {if (!val) { cm.display.input.reset(); }}, true);\n option(\"dragDrop\", true, dragDropChanged);\n option(\"allowDropFileTypes\", null);\n\n option(\"cursorBlinkRate\", 530);\n option(\"cursorScrollMargin\", 0);\n option(\"cursorHeight\", 1, updateSelection, true);\n option(\"singleCursorHeightPerLine\", true, updateSelection, true);\n option(\"workTime\", 100);\n option(\"workDelay\", 100);\n option(\"flattenSpans\", true, resetModeState, true);\n option(\"addModeClass\", false, resetModeState, true);\n option(\"pollInterval\", 100);\n option(\"undoDepth\", 200, function (cm, val) { return cm.doc.history.undoDepth = val; });\n option(\"historyEventDelay\", 1250);\n option(\"viewportMargin\", 10, function (cm) { return cm.refresh(); }, true);\n option(\"maxHighlightLength\", 10000, resetModeState, true);\n option(\"moveInputWithCursor\", true, function (cm, val) {\n if (!val) { cm.display.input.resetPosition(); }\n });\n\n option(\"tabindex\", null, function (cm, val) { return cm.display.input.getField().tabIndex = val || \"\"; });\n option(\"autofocus\", null);\n option(\"direction\", \"ltr\", function (cm, val) { return cm.doc.setDirection(val); }, true);\n option(\"phrases\", null);\n }\n\n function dragDropChanged(cm, value, old) {\n var wasOn = old && old != Init;\n if (!value != !wasOn) {\n var funcs = cm.display.dragFunctions;\n var toggle = value ? on : off;\n toggle(cm.display.scroller, \"dragstart\", funcs.start);\n toggle(cm.display.scroller, \"dragenter\", funcs.enter);\n toggle(cm.display.scroller, \"dragover\", funcs.over);\n toggle(cm.display.scroller, \"dragleave\", funcs.leave);\n toggle(cm.display.scroller, \"drop\", funcs.drop);\n }\n }\n\n function wrappingChanged(cm) {\n if (cm.options.lineWrapping) {\n addClass(cm.display.wrapper, \"CodeMirror-wrap\");\n cm.display.sizer.style.minWidth = \"\";\n cm.display.sizerWidth = null;\n } else {\n rmClass(cm.display.wrapper, \"CodeMirror-wrap\");\n findMaxLine(cm);\n }\n estimateLineHeights(cm);\n regChange(cm);\n clearCaches(cm);\n setTimeout(function () { return updateScrollbars(cm); }, 100);\n }\n\n // A CodeMirror instance represents an editor. This is the object\n // that user code is usually dealing with.\n\n function CodeMirror(place, options) {\n var this$1 = this;\n\n if (!(this instanceof CodeMirror)) { return new CodeMirror(place, options) }\n\n this.options = options = options ? copyObj(options) : {};\n // Determine effective options based on given values and defaults.\n copyObj(defaults, options, false);\n\n var doc = options.value;\n if (typeof doc == \"string\") { doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction); }\n else if (options.mode) { doc.modeOption = options.mode; }\n this.doc = doc;\n\n var input = new CodeMirror.inputStyles[options.inputStyle](this);\n var display = this.display = new Display(place, doc, input, options);\n display.wrapper.CodeMirror = this;\n themeChanged(this);\n if (options.lineWrapping)\n { this.display.wrapper.className += \" CodeMirror-wrap\"; }\n initScrollbars(this);\n\n this.state = {\n keyMaps: [], // stores maps added by addKeyMap\n overlays: [], // highlighting overlays, as added by addOverlay\n modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info\n overwrite: false,\n delayingBlurEvent: false,\n focused: false,\n suppressEdits: false, // used to disable editing during key handlers when in readOnly mode\n pasteIncoming: -1, cutIncoming: -1, // help recognize paste/cut edits in input.poll\n selectingText: false,\n draggingText: false,\n highlight: new Delayed(), // stores highlight worker timeout\n keySeq: null, // Unfinished key sequence\n specialChars: null\n };\n\n if (options.autofocus && !mobile) { display.input.focus(); }\n\n // Override magic textarea content restore that IE sometimes does\n // on our hidden textarea on reload\n if (ie && ie_version < 11) { setTimeout(function () { return this$1.display.input.reset(true); }, 20); }\n\n registerEventHandlers(this);\n ensureGlobalHandlers();\n\n startOperation(this);\n this.curOp.forceUpdate = true;\n attachDoc(this, doc);\n\n if ((options.autofocus && !mobile) || this.hasFocus())\n { setTimeout(function () {\n if (this$1.hasFocus() && !this$1.state.focused) { onFocus(this$1); }\n }, 20); }\n else\n { onBlur(this); }\n\n for (var opt in optionHandlers) { if (optionHandlers.hasOwnProperty(opt))\n { optionHandlers[opt](this, options[opt], Init); } }\n maybeUpdateLineNumberWidth(this);\n if (options.finishInit) { options.finishInit(this); }\n for (var i = 0; i < initHooks.length; ++i) { initHooks[i](this); }\n endOperation(this);\n // Suppress optimizelegibility in Webkit, since it breaks text\n // measuring on line wrapping boundaries.\n if (webkit && options.lineWrapping &&\n getComputedStyle(display.lineDiv).textRendering == \"optimizelegibility\")\n { display.lineDiv.style.textRendering = \"auto\"; }\n }\n\n // The default configuration options.\n CodeMirror.defaults = defaults;\n // Functions to run when options are changed.\n CodeMirror.optionHandlers = optionHandlers;\n\n // Attach the necessary event handlers when initializing the editor\n function registerEventHandlers(cm) {\n var d = cm.display;\n on(d.scroller, \"mousedown\", operation(cm, onMouseDown));\n // Older IE's will not fire a second mousedown for a double click\n if (ie && ie_version < 11)\n { on(d.scroller, \"dblclick\", operation(cm, function (e) {\n if (signalDOMEvent(cm, e)) { return }\n var pos = posFromMouse(cm, e);\n if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { return }\n e_preventDefault(e);\n var word = cm.findWordAt(pos);\n extendSelection(cm.doc, word.anchor, word.head);\n })); }\n else\n { on(d.scroller, \"dblclick\", function (e) { return signalDOMEvent(cm, e) || e_preventDefault(e); }); }\n // Some browsers fire contextmenu *after* opening the menu, at\n // which point we can't mess with it anymore. Context menu is\n // handled in onMouseDown for these browsers.\n on(d.scroller, \"contextmenu\", function (e) { return onContextMenu(cm, e); });\n on(d.input.getField(), \"contextmenu\", function (e) {\n if (!d.scroller.contains(e.target)) { onContextMenu(cm, e); }\n });\n\n // Used to suppress mouse event handling when a touch happens\n var touchFinished, prevTouch = {end: 0};\n function finishTouch() {\n if (d.activeTouch) {\n touchFinished = setTimeout(function () { return d.activeTouch = null; }, 1000);\n prevTouch = d.activeTouch;\n prevTouch.end = +new Date;\n }\n }\n function isMouseLikeTouchEvent(e) {\n if (e.touches.length != 1) { return false }\n var touch = e.touches[0];\n return touch.radiusX <= 1 && touch.radiusY <= 1\n }\n function farAway(touch, other) {\n if (other.left == null) { return true }\n var dx = other.left - touch.left, dy = other.top - touch.top;\n return dx * dx + dy * dy > 20 * 20\n }\n on(d.scroller, \"touchstart\", function (e) {\n if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) {\n d.input.ensurePolled();\n clearTimeout(touchFinished);\n var now = +new Date;\n d.activeTouch = {start: now, moved: false,\n prev: now - prevTouch.end <= 300 ? prevTouch : null};\n if (e.touches.length == 1) {\n d.activeTouch.left = e.touches[0].pageX;\n d.activeTouch.top = e.touches[0].pageY;\n }\n }\n });\n on(d.scroller, \"touchmove\", function () {\n if (d.activeTouch) { d.activeTouch.moved = true; }\n });\n on(d.scroller, \"touchend\", function (e) {\n var touch = d.activeTouch;\n if (touch && !eventInWidget(d, e) && touch.left != null &&\n !touch.moved && new Date - touch.start < 300) {\n var pos = cm.coordsChar(d.activeTouch, \"page\"), range;\n if (!touch.prev || farAway(touch, touch.prev)) // Single tap\n { range = new Range(pos, pos); }\n else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap\n { range = cm.findWordAt(pos); }\n else // Triple tap\n { range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); }\n cm.setSelection(range.anchor, range.head);\n cm.focus();\n e_preventDefault(e);\n }\n finishTouch();\n });\n on(d.scroller, \"touchcancel\", finishTouch);\n\n // Sync scrolling between fake scrollbars and real scrollable\n // area, ensure viewport is updated when scrolling.\n on(d.scroller, \"scroll\", function () {\n if (d.scroller.clientHeight) {\n updateScrollTop(cm, d.scroller.scrollTop);\n setScrollLeft(cm, d.scroller.scrollLeft, true);\n signal(cm, \"scroll\", cm);\n }\n });\n\n // Listen to wheel events in order to try and update the viewport on time.\n on(d.scroller, \"mousewheel\", function (e) { return onScrollWheel(cm, e); });\n on(d.scroller, \"DOMMouseScroll\", function (e) { return onScrollWheel(cm, e); });\n\n // Prevent wrapper from ever scrolling\n on(d.wrapper, \"scroll\", function () { return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; });\n\n d.dragFunctions = {\n enter: function (e) {if (!signalDOMEvent(cm, e)) { e_stop(e); }},\n over: function (e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e); }},\n start: function (e) { return onDragStart(cm, e); },\n drop: operation(cm, onDrop),\n leave: function (e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm); }}\n };\n\n var inp = d.input.getField();\n on(inp, \"keyup\", function (e) { return onKeyUp.call(cm, e); });\n on(inp, \"keydown\", operation(cm, onKeyDown));\n on(inp, \"keypress\", operation(cm, onKeyPress));\n on(inp, \"focus\", function (e) { return onFocus(cm, e); });\n on(inp, \"blur\", function (e) { return onBlur(cm, e); });\n }\n\n var initHooks = [];\n CodeMirror.defineInitHook = function (f) { return initHooks.push(f); };\n\n // Indent the given line. The how parameter can be \"smart\",\n // \"add\"/null, \"subtract\", or \"prev\". When aggressive is false\n // (typically set to true for forced single-line indents), empty\n // lines are not indented, and places where the mode returns Pass\n // are left alone.\n function indentLine(cm, n, how, aggressive) {\n var doc = cm.doc, state;\n if (how == null) { how = \"add\"; }\n if (how == \"smart\") {\n // Fall back to \"prev\" when the mode doesn't have an indentation\n // method.\n if (!doc.mode.indent) { how = \"prev\"; }\n else { state = getContextBefore(cm, n).state; }\n }\n\n var tabSize = cm.options.tabSize;\n var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize);\n if (line.stateAfter) { line.stateAfter = null; }\n var curSpaceString = line.text.match(/^\\s*/)[0], indentation;\n if (!aggressive && !/\\S/.test(line.text)) {\n indentation = 0;\n how = \"not\";\n } else if (how == \"smart\") {\n indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text);\n if (indentation == Pass || indentation > 150) {\n if (!aggressive) { return }\n how = \"prev\";\n }\n }\n if (how == \"prev\") {\n if (n > doc.first) { indentation = countColumn(getLine(doc, n-1).text, null, tabSize); }\n else { indentation = 0; }\n } else if (how == \"add\") {\n indentation = curSpace + cm.options.indentUnit;\n } else if (how == \"subtract\") {\n indentation = curSpace - cm.options.indentUnit;\n } else if (typeof how == \"number\") {\n indentation = curSpace + how;\n }\n indentation = Math.max(0, indentation);\n\n var indentString = \"\", pos = 0;\n if (cm.options.indentWithTabs)\n { for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += \"\\t\";} }\n if (pos < indentation) { indentString += spaceStr(indentation - pos); }\n\n if (indentString != curSpaceString) {\n replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), \"+input\");\n line.stateAfter = null;\n return true\n } else {\n // Ensure that, if the cursor was in the whitespace at the start\n // of the line, it is moved to the end of that space.\n for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) {\n var range = doc.sel.ranges[i$1];\n if (range.head.line == n && range.head.ch < curSpaceString.length) {\n var pos$1 = Pos(n, curSpaceString.length);\n replaceOneSelection(doc, i$1, new Range(pos$1, pos$1));\n break\n }\n }\n }\n }\n\n // This will be set to a {lineWise: bool, text: [string]} object, so\n // that, when pasting, we know what kind of selections the copied\n // text was made out of.\n var lastCopied = null;\n\n function setLastCopied(newLastCopied) {\n lastCopied = newLastCopied;\n }\n\n function applyTextInput(cm, inserted, deleted, sel, origin) {\n var doc = cm.doc;\n cm.display.shift = false;\n if (!sel) { sel = doc.sel; }\n\n var recent = +new Date - 200;\n var paste = origin == \"paste\" || cm.state.pasteIncoming > recent;\n var textLines = splitLinesAuto(inserted), multiPaste = null;\n // When pasting N lines into N selections, insert one line per selection\n if (paste && sel.ranges.length > 1) {\n if (lastCopied && lastCopied.text.join(\"\\n\") == inserted) {\n if (sel.ranges.length % lastCopied.text.length == 0) {\n multiPaste = [];\n for (var i = 0; i < lastCopied.text.length; i++)\n { multiPaste.push(doc.splitLines(lastCopied.text[i])); }\n }\n } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) {\n multiPaste = map(textLines, function (l) { return [l]; });\n }\n }\n\n var updateInput = cm.curOp.updateInput;\n // Normal behavior is to insert the new text into every selection\n for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) {\n var range = sel.ranges[i$1];\n var from = range.from(), to = range.to();\n if (range.empty()) {\n if (deleted && deleted > 0) // Handle deletion\n { from = Pos(from.line, from.ch - deleted); }\n else if (cm.state.overwrite && !paste) // Handle overwrite\n { to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); }\n else if (paste && lastCopied && lastCopied.lineWise && lastCopied.text.join(\"\\n\") == textLines.join(\"\\n\"))\n { from = to = Pos(from.line, 0); }\n }\n var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines,\n origin: origin || (paste ? \"paste\" : cm.state.cutIncoming > recent ? \"cut\" : \"+input\")};\n makeChange(cm.doc, changeEvent);\n signalLater(cm, \"inputRead\", cm, changeEvent);\n }\n if (inserted && !paste)\n { triggerElectric(cm, inserted); }\n\n ensureCursorVisible(cm);\n if (cm.curOp.updateInput < 2) { cm.curOp.updateInput = updateInput; }\n cm.curOp.typing = true;\n cm.state.pasteIncoming = cm.state.cutIncoming = -1;\n }\n\n function handlePaste(e, cm) {\n var pasted = e.clipboardData && e.clipboardData.getData(\"Text\");\n if (pasted) {\n e.preventDefault();\n if (!cm.isReadOnly() && !cm.options.disableInput && cm.hasFocus())\n { runInOp(cm, function () { return applyTextInput(cm, pasted, 0, null, \"paste\"); }); }\n return true\n }\n }\n\n function triggerElectric(cm, inserted) {\n // When an 'electric' character is inserted, immediately trigger a reindent\n if (!cm.options.electricChars || !cm.options.smartIndent) { return }\n var sel = cm.doc.sel;\n\n for (var i = sel.ranges.length - 1; i >= 0; i--) {\n var range = sel.ranges[i];\n if (range.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range.head.line)) { continue }\n var mode = cm.getModeAt(range.head);\n var indented = false;\n if (mode.electricChars) {\n for (var j = 0; j < mode.electricChars.length; j++)\n { if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) {\n indented = indentLine(cm, range.head.line, \"smart\");\n break\n } }\n } else if (mode.electricInput) {\n if (mode.electricInput.test(getLine(cm.doc, range.head.line).text.slice(0, range.head.ch)))\n { indented = indentLine(cm, range.head.line, \"smart\"); }\n }\n if (indented) { signalLater(cm, \"electricInput\", cm, range.head.line); }\n }\n }\n\n function copyableRanges(cm) {\n var text = [], ranges = [];\n for (var i = 0; i < cm.doc.sel.ranges.length; i++) {\n var line = cm.doc.sel.ranges[i].head.line;\n var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)};\n ranges.push(lineRange);\n text.push(cm.getRange(lineRange.anchor, lineRange.head));\n }\n return {text: text, ranges: ranges}\n }\n\n function disableBrowserMagic(field, spellcheck, autocorrect, autocapitalize) {\n field.setAttribute(\"autocorrect\", autocorrect ? \"on\" : \"off\");\n field.setAttribute(\"autocapitalize\", autocapitalize ? \"on\" : \"off\");\n field.setAttribute(\"spellcheck\", !!spellcheck);\n }\n\n function hiddenTextarea() {\n var te = elt(\"textarea\", null, null, \"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; min-height: 1em; outline: none\");\n var div = elt(\"div\", [te], null, \"overflow: hidden; position: relative; width: 3px; height: 0px;\");\n // The textarea is kept positioned near the cursor to prevent the\n // fact that it'll be scrolled into view on input from scrolling\n // our fake cursor out of view. On webkit, when wrap=off, paste is\n // very slow. So make the area wide instead.\n if (webkit) { te.style.width = \"1000px\"; }\n else { te.setAttribute(\"wrap\", \"off\"); }\n // If border: 0; -- iOS fails to open keyboard (issue #1287)\n if (ios) { te.style.border = \"1px solid black\"; }\n return div\n }\n\n // The publicly visible API. Note that methodOp(f) means\n // 'wrap f in an operation, performed on its `this` parameter'.\n\n // This is not the complete set of editor methods. Most of the\n // methods defined on the Doc type are also injected into\n // CodeMirror.prototype, for backwards compatibility and\n // convenience.\n\n function addEditorMethods(CodeMirror) {\n var optionHandlers = CodeMirror.optionHandlers;\n\n var helpers = CodeMirror.helpers = {};\n\n CodeMirror.prototype = {\n constructor: CodeMirror,\n focus: function(){win(this).focus(); this.display.input.focus();},\n\n setOption: function(option, value) {\n var options = this.options, old = options[option];\n if (options[option] == value && option != \"mode\") { return }\n options[option] = value;\n if (optionHandlers.hasOwnProperty(option))\n { operation(this, optionHandlers[option])(this, value, old); }\n signal(this, \"optionChange\", this, option);\n },\n\n getOption: function(option) {return this.options[option]},\n getDoc: function() {return this.doc},\n\n addKeyMap: function(map, bottom) {\n this.state.keyMaps[bottom ? \"push\" : \"unshift\"](getKeyMap(map));\n },\n removeKeyMap: function(map) {\n var maps = this.state.keyMaps;\n for (var i = 0; i < maps.length; ++i)\n { if (maps[i] == map || maps[i].name == map) {\n maps.splice(i, 1);\n return true\n } }\n },\n\n addOverlay: methodOp(function(spec, options) {\n var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec);\n if (mode.startState) { throw new Error(\"Overlays may not be stateful.\") }\n insertSorted(this.state.overlays,\n {mode: mode, modeSpec: spec, opaque: options && options.opaque,\n priority: (options && options.priority) || 0},\n function (overlay) { return overlay.priority; });\n this.state.modeGen++;\n regChange(this);\n }),\n removeOverlay: methodOp(function(spec) {\n var overlays = this.state.overlays;\n for (var i = 0; i < overlays.length; ++i) {\n var cur = overlays[i].modeSpec;\n if (cur == spec || typeof spec == \"string\" && cur.name == spec) {\n overlays.splice(i, 1);\n this.state.modeGen++;\n regChange(this);\n return\n }\n }\n }),\n\n indentLine: methodOp(function(n, dir, aggressive) {\n if (typeof dir != \"string\" && typeof dir != \"number\") {\n if (dir == null) { dir = this.options.smartIndent ? \"smart\" : \"prev\"; }\n else { dir = dir ? \"add\" : \"subtract\"; }\n }\n if (isLine(this.doc, n)) { indentLine(this, n, dir, aggressive); }\n }),\n indentSelection: methodOp(function(how) {\n var ranges = this.doc.sel.ranges, end = -1;\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n if (!range.empty()) {\n var from = range.from(), to = range.to();\n var start = Math.max(end, from.line);\n end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1;\n for (var j = start; j < end; ++j)\n { indentLine(this, j, how); }\n var newRanges = this.doc.sel.ranges;\n if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0)\n { replaceOneSelection(this.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); }\n } else if (range.head.line > end) {\n indentLine(this, range.head.line, how, true);\n end = range.head.line;\n if (i == this.doc.sel.primIndex) { ensureCursorVisible(this); }\n }\n }\n }),\n\n // Fetch the parser token for a given character. Useful for hacks\n // that want to inspect the mode state (say, for completion).\n getTokenAt: function(pos, precise) {\n return takeToken(this, pos, precise)\n },\n\n getLineTokens: function(line, precise) {\n return takeToken(this, Pos(line), precise, true)\n },\n\n getTokenTypeAt: function(pos) {\n pos = clipPos(this.doc, pos);\n var styles = getLineStyles(this, getLine(this.doc, pos.line));\n var before = 0, after = (styles.length - 1) / 2, ch = pos.ch;\n var type;\n if (ch == 0) { type = styles[2]; }\n else { for (;;) {\n var mid = (before + after) >> 1;\n if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { after = mid; }\n else if (styles[mid * 2 + 1] < ch) { before = mid + 1; }\n else { type = styles[mid * 2 + 2]; break }\n } }\n var cut = type ? type.indexOf(\"overlay \") : -1;\n return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1)\n },\n\n getModeAt: function(pos) {\n var mode = this.doc.mode;\n if (!mode.innerMode) { return mode }\n return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode\n },\n\n getHelper: function(pos, type) {\n return this.getHelpers(pos, type)[0]\n },\n\n getHelpers: function(pos, type) {\n var found = [];\n if (!helpers.hasOwnProperty(type)) { return found }\n var help = helpers[type], mode = this.getModeAt(pos);\n if (typeof mode[type] == \"string\") {\n if (help[mode[type]]) { found.push(help[mode[type]]); }\n } else if (mode[type]) {\n for (var i = 0; i < mode[type].length; i++) {\n var val = help[mode[type][i]];\n if (val) { found.push(val); }\n }\n } else if (mode.helperType && help[mode.helperType]) {\n found.push(help[mode.helperType]);\n } else if (help[mode.name]) {\n found.push(help[mode.name]);\n }\n for (var i$1 = 0; i$1 < help._global.length; i$1++) {\n var cur = help._global[i$1];\n if (cur.pred(mode, this) && indexOf(found, cur.val) == -1)\n { found.push(cur.val); }\n }\n return found\n },\n\n getStateAfter: function(line, precise) {\n var doc = this.doc;\n line = clipLine(doc, line == null ? doc.first + doc.size - 1: line);\n return getContextBefore(this, line + 1, precise).state\n },\n\n cursorCoords: function(start, mode) {\n var pos, range = this.doc.sel.primary();\n if (start == null) { pos = range.head; }\n else if (typeof start == \"object\") { pos = clipPos(this.doc, start); }\n else { pos = start ? range.from() : range.to(); }\n return cursorCoords(this, pos, mode || \"page\")\n },\n\n charCoords: function(pos, mode) {\n return charCoords(this, clipPos(this.doc, pos), mode || \"page\")\n },\n\n coordsChar: function(coords, mode) {\n coords = fromCoordSystem(this, coords, mode || \"page\");\n return coordsChar(this, coords.left, coords.top)\n },\n\n lineAtHeight: function(height, mode) {\n height = fromCoordSystem(this, {top: height, left: 0}, mode || \"page\").top;\n return lineAtHeight(this.doc, height + this.display.viewOffset)\n },\n heightAtLine: function(line, mode, includeWidgets) {\n var end = false, lineObj;\n if (typeof line == \"number\") {\n var last = this.doc.first + this.doc.size - 1;\n if (line < this.doc.first) { line = this.doc.first; }\n else if (line > last) { line = last; end = true; }\n lineObj = getLine(this.doc, line);\n } else {\n lineObj = line;\n }\n return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || \"page\", includeWidgets || end).top +\n (end ? this.doc.height - heightAtLine(lineObj) : 0)\n },\n\n defaultTextHeight: function() { return textHeight(this.display) },\n defaultCharWidth: function() { return charWidth(this.display) },\n\n getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo}},\n\n addWidget: function(pos, node, scroll, vert, horiz) {\n var display = this.display;\n pos = cursorCoords(this, clipPos(this.doc, pos));\n var top = pos.bottom, left = pos.left;\n node.style.position = \"absolute\";\n node.setAttribute(\"cm-ignore-events\", \"true\");\n this.display.input.setUneditable(node);\n display.sizer.appendChild(node);\n if (vert == \"over\") {\n top = pos.top;\n } else if (vert == \"above\" || vert == \"near\") {\n var vspace = Math.max(display.wrapper.clientHeight, this.doc.height),\n hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth);\n // Default to positioning above (if specified and possible); otherwise default to positioning below\n if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight)\n { top = pos.top - node.offsetHeight; }\n else if (pos.bottom + node.offsetHeight <= vspace)\n { top = pos.bottom; }\n if (left + node.offsetWidth > hspace)\n { left = hspace - node.offsetWidth; }\n }\n node.style.top = top + \"px\";\n node.style.left = node.style.right = \"\";\n if (horiz == \"right\") {\n left = display.sizer.clientWidth - node.offsetWidth;\n node.style.right = \"0px\";\n } else {\n if (horiz == \"left\") { left = 0; }\n else if (horiz == \"middle\") { left = (display.sizer.clientWidth - node.offsetWidth) / 2; }\n node.style.left = left + \"px\";\n }\n if (scroll)\n { scrollIntoView(this, {left: left, top: top, right: left + node.offsetWidth, bottom: top + node.offsetHeight}); }\n },\n\n triggerOnKeyDown: methodOp(onKeyDown),\n triggerOnKeyPress: methodOp(onKeyPress),\n triggerOnKeyUp: onKeyUp,\n triggerOnMouseDown: methodOp(onMouseDown),\n\n execCommand: function(cmd) {\n if (commands.hasOwnProperty(cmd))\n { return commands[cmd].call(null, this) }\n },\n\n triggerElectric: methodOp(function(text) { triggerElectric(this, text); }),\n\n findPosH: function(from, amount, unit, visually) {\n var dir = 1;\n if (amount < 0) { dir = -1; amount = -amount; }\n var cur = clipPos(this.doc, from);\n for (var i = 0; i < amount; ++i) {\n cur = findPosH(this.doc, cur, dir, unit, visually);\n if (cur.hitSide) { break }\n }\n return cur\n },\n\n moveH: methodOp(function(dir, unit) {\n var this$1 = this;\n\n this.extendSelectionsBy(function (range) {\n if (this$1.display.shift || this$1.doc.extend || range.empty())\n { return findPosH(this$1.doc, range.head, dir, unit, this$1.options.rtlMoveVisually) }\n else\n { return dir < 0 ? range.from() : range.to() }\n }, sel_move);\n }),\n\n deleteH: methodOp(function(dir, unit) {\n var sel = this.doc.sel, doc = this.doc;\n if (sel.somethingSelected())\n { doc.replaceSelection(\"\", null, \"+delete\"); }\n else\n { deleteNearSelection(this, function (range) {\n var other = findPosH(doc, range.head, dir, unit, false);\n return dir < 0 ? {from: other, to: range.head} : {from: range.head, to: other}\n }); }\n }),\n\n findPosV: function(from, amount, unit, goalColumn) {\n var dir = 1, x = goalColumn;\n if (amount < 0) { dir = -1; amount = -amount; }\n var cur = clipPos(this.doc, from);\n for (var i = 0; i < amount; ++i) {\n var coords = cursorCoords(this, cur, \"div\");\n if (x == null) { x = coords.left; }\n else { coords.left = x; }\n cur = findPosV(this, coords, dir, unit);\n if (cur.hitSide) { break }\n }\n return cur\n },\n\n moveV: methodOp(function(dir, unit) {\n var this$1 = this;\n\n var doc = this.doc, goals = [];\n var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected();\n doc.extendSelectionsBy(function (range) {\n if (collapse)\n { return dir < 0 ? range.from() : range.to() }\n var headPos = cursorCoords(this$1, range.head, \"div\");\n if (range.goalColumn != null) { headPos.left = range.goalColumn; }\n goals.push(headPos.left);\n var pos = findPosV(this$1, headPos, dir, unit);\n if (unit == \"page\" && range == doc.sel.primary())\n { addToScrollTop(this$1, charCoords(this$1, pos, \"div\").top - headPos.top); }\n return pos\n }, sel_move);\n if (goals.length) { for (var i = 0; i < doc.sel.ranges.length; i++)\n { doc.sel.ranges[i].goalColumn = goals[i]; } }\n }),\n\n // Find the word at the given position (as returned by coordsChar).\n findWordAt: function(pos) {\n var doc = this.doc, line = getLine(doc, pos.line).text;\n var start = pos.ch, end = pos.ch;\n if (line) {\n var helper = this.getHelper(pos, \"wordChars\");\n if ((pos.sticky == \"before\" || end == line.length) && start) { --start; } else { ++end; }\n var startChar = line.charAt(start);\n var check = isWordChar(startChar, helper)\n ? function (ch) { return isWordChar(ch, helper); }\n : /\\s/.test(startChar) ? function (ch) { return /\\s/.test(ch); }\n : function (ch) { return (!/\\s/.test(ch) && !isWordChar(ch)); };\n while (start > 0 && check(line.charAt(start - 1))) { --start; }\n while (end < line.length && check(line.charAt(end))) { ++end; }\n }\n return new Range(Pos(pos.line, start), Pos(pos.line, end))\n },\n\n toggleOverwrite: function(value) {\n if (value != null && value == this.state.overwrite) { return }\n if (this.state.overwrite = !this.state.overwrite)\n { addClass(this.display.cursorDiv, \"CodeMirror-overwrite\"); }\n else\n { rmClass(this.display.cursorDiv, \"CodeMirror-overwrite\"); }\n\n signal(this, \"overwriteToggle\", this, this.state.overwrite);\n },\n hasFocus: function() { return this.display.input.getField() == activeElt(root(this)) },\n isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit) },\n\n scrollTo: methodOp(function (x, y) { scrollToCoords(this, x, y); }),\n getScrollInfo: function() {\n var scroller = this.display.scroller;\n return {left: scroller.scrollLeft, top: scroller.scrollTop,\n height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight,\n width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth,\n clientHeight: displayHeight(this), clientWidth: displayWidth(this)}\n },\n\n scrollIntoView: methodOp(function(range, margin) {\n if (range == null) {\n range = {from: this.doc.sel.primary().head, to: null};\n if (margin == null) { margin = this.options.cursorScrollMargin; }\n } else if (typeof range == \"number\") {\n range = {from: Pos(range, 0), to: null};\n } else if (range.from == null) {\n range = {from: range, to: null};\n }\n if (!range.to) { range.to = range.from; }\n range.margin = margin || 0;\n\n if (range.from.line != null) {\n scrollToRange(this, range);\n } else {\n scrollToCoordsRange(this, range.from, range.to, range.margin);\n }\n }),\n\n setSize: methodOp(function(width, height) {\n var this$1 = this;\n\n var interpret = function (val) { return typeof val == \"number\" || /^\\d+$/.test(String(val)) ? val + \"px\" : val; };\n if (width != null) { this.display.wrapper.style.width = interpret(width); }\n if (height != null) { this.display.wrapper.style.height = interpret(height); }\n if (this.options.lineWrapping) { clearLineMeasurementCache(this); }\n var lineNo = this.display.viewFrom;\n this.doc.iter(lineNo, this.display.viewTo, function (line) {\n if (line.widgets) { for (var i = 0; i < line.widgets.length; i++)\n { if (line.widgets[i].noHScroll) { regLineChange(this$1, lineNo, \"widget\"); break } } }\n ++lineNo;\n });\n this.curOp.forceUpdate = true;\n signal(this, \"refresh\", this);\n }),\n\n operation: function(f){return runInOp(this, f)},\n startOperation: function(){return startOperation(this)},\n endOperation: function(){return endOperation(this)},\n\n refresh: methodOp(function() {\n var oldHeight = this.display.cachedTextHeight;\n regChange(this);\n this.curOp.forceUpdate = true;\n clearCaches(this);\n scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop);\n updateGutterSpace(this.display);\n if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5 || this.options.lineWrapping)\n { estimateLineHeights(this); }\n signal(this, \"refresh\", this);\n }),\n\n swapDoc: methodOp(function(doc) {\n var old = this.doc;\n old.cm = null;\n // Cancel the current text selection if any (#5821)\n if (this.state.selectingText) { this.state.selectingText(); }\n attachDoc(this, doc);\n clearCaches(this);\n this.display.input.reset();\n scrollToCoords(this, doc.scrollLeft, doc.scrollTop);\n this.curOp.forceScroll = true;\n signalLater(this, \"swapDoc\", this, old);\n return old\n }),\n\n phrase: function(phraseText) {\n var phrases = this.options.phrases;\n return phrases && Object.prototype.hasOwnProperty.call(phrases, phraseText) ? phrases[phraseText] : phraseText\n },\n\n getInputField: function(){return this.display.input.getField()},\n getWrapperElement: function(){return this.display.wrapper},\n getScrollerElement: function(){return this.display.scroller},\n getGutterElement: function(){return this.display.gutters}\n };\n eventMixin(CodeMirror);\n\n CodeMirror.registerHelper = function(type, name, value) {\n if (!helpers.hasOwnProperty(type)) { helpers[type] = CodeMirror[type] = {_global: []}; }\n helpers[type][name] = value;\n };\n CodeMirror.registerGlobalHelper = function(type, name, predicate, value) {\n CodeMirror.registerHelper(type, name, value);\n helpers[type]._global.push({pred: predicate, val: value});\n };\n }\n\n // Used for horizontal relative motion. Dir is -1 or 1 (left or\n // right), unit can be \"codepoint\", \"char\", \"column\" (like char, but\n // doesn't cross line boundaries), \"word\" (across next word), or\n // \"group\" (to the start of next group of word or\n // non-word-non-whitespace chars). The visually param controls\n // whether, in right-to-left text, direction 1 means to move towards\n // the next index in the string, or towards the character to the right\n // of the current position. The resulting position will have a\n // hitSide=true property if it reached the end of the document.\n function findPosH(doc, pos, dir, unit, visually) {\n var oldPos = pos;\n var origDir = dir;\n var lineObj = getLine(doc, pos.line);\n var lineDir = visually && doc.direction == \"rtl\" ? -dir : dir;\n function findNextLine() {\n var l = pos.line + lineDir;\n if (l < doc.first || l >= doc.first + doc.size) { return false }\n pos = new Pos(l, pos.ch, pos.sticky);\n return lineObj = getLine(doc, l)\n }\n function moveOnce(boundToLine) {\n var next;\n if (unit == \"codepoint\") {\n var ch = lineObj.text.charCodeAt(pos.ch + (dir > 0 ? 0 : -1));\n if (isNaN(ch)) {\n next = null;\n } else {\n var astral = dir > 0 ? ch >= 0xD800 && ch < 0xDC00 : ch >= 0xDC00 && ch < 0xDFFF;\n next = new Pos(pos.line, Math.max(0, Math.min(lineObj.text.length, pos.ch + dir * (astral ? 2 : 1))), -dir);\n }\n } else if (visually) {\n next = moveVisually(doc.cm, lineObj, pos, dir);\n } else {\n next = moveLogically(lineObj, pos, dir);\n }\n if (next == null) {\n if (!boundToLine && findNextLine())\n { pos = endOfLine(visually, doc.cm, lineObj, pos.line, lineDir); }\n else\n { return false }\n } else {\n pos = next;\n }\n return true\n }\n\n if (unit == \"char\" || unit == \"codepoint\") {\n moveOnce();\n } else if (unit == \"column\") {\n moveOnce(true);\n } else if (unit == \"word\" || unit == \"group\") {\n var sawType = null, group = unit == \"group\";\n var helper = doc.cm && doc.cm.getHelper(pos, \"wordChars\");\n for (var first = true;; first = false) {\n if (dir < 0 && !moveOnce(!first)) { break }\n var cur = lineObj.text.charAt(pos.ch) || \"\\n\";\n var type = isWordChar(cur, helper) ? \"w\"\n : group && cur == \"\\n\" ? \"n\"\n : !group || /\\s/.test(cur) ? null\n : \"p\";\n if (group && !first && !type) { type = \"s\"; }\n if (sawType && sawType != type) {\n if (dir < 0) {dir = 1; moveOnce(); pos.sticky = \"after\";}\n break\n }\n\n if (type) { sawType = type; }\n if (dir > 0 && !moveOnce(!first)) { break }\n }\n }\n var result = skipAtomic(doc, pos, oldPos, origDir, true);\n if (equalCursorPos(oldPos, result)) { result.hitSide = true; }\n return result\n }\n\n // For relative vertical movement. Dir may be -1 or 1. Unit can be\n // \"page\" or \"line\". The resulting position will have a hitSide=true\n // property if it reached the end of the document.\n function findPosV(cm, pos, dir, unit) {\n var doc = cm.doc, x = pos.left, y;\n if (unit == \"page\") {\n var pageSize = Math.min(cm.display.wrapper.clientHeight, win(cm).innerHeight || doc(cm).documentElement.clientHeight);\n var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3);\n y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount;\n\n } else if (unit == \"line\") {\n y = dir > 0 ? pos.bottom + 3 : pos.top - 3;\n }\n var target;\n for (;;) {\n target = coordsChar(cm, x, y);\n if (!target.outside) { break }\n if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break }\n y += dir * 5;\n }\n return target\n }\n\n // CONTENTEDITABLE INPUT STYLE\n\n var ContentEditableInput = function(cm) {\n this.cm = cm;\n this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null;\n this.polling = new Delayed();\n this.composing = null;\n this.gracePeriod = false;\n this.readDOMTimeout = null;\n };\n\n ContentEditableInput.prototype.init = function (display) {\n var this$1 = this;\n\n var input = this, cm = input.cm;\n var div = input.div = display.lineDiv;\n div.contentEditable = true;\n disableBrowserMagic(div, cm.options.spellcheck, cm.options.autocorrect, cm.options.autocapitalize);\n\n function belongsToInput(e) {\n for (var t = e.target; t; t = t.parentNode) {\n if (t == div) { return true }\n if (/\\bCodeMirror-(?:line)?widget\\b/.test(t.className)) { break }\n }\n return false\n }\n\n on(div, \"paste\", function (e) {\n if (!belongsToInput(e) || signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }\n // IE doesn't fire input events, so we schedule a read for the pasted content in this way\n if (ie_version <= 11) { setTimeout(operation(cm, function () { return this$1.updateFromDOM(); }), 20); }\n });\n\n on(div, \"compositionstart\", function (e) {\n this$1.composing = {data: e.data, done: false};\n });\n on(div, \"compositionupdate\", function (e) {\n if (!this$1.composing) { this$1.composing = {data: e.data, done: false}; }\n });\n on(div, \"compositionend\", function (e) {\n if (this$1.composing) {\n if (e.data != this$1.composing.data) { this$1.readFromDOMSoon(); }\n this$1.composing.done = true;\n }\n });\n\n on(div, \"touchstart\", function () { return input.forceCompositionEnd(); });\n\n on(div, \"input\", function () {\n if (!this$1.composing) { this$1.readFromDOMSoon(); }\n });\n\n function onCopyCut(e) {\n if (!belongsToInput(e) || signalDOMEvent(cm, e)) { return }\n if (cm.somethingSelected()) {\n setLastCopied({lineWise: false, text: cm.getSelections()});\n if (e.type == \"cut\") { cm.replaceSelection(\"\", null, \"cut\"); }\n } else if (!cm.options.lineWiseCopyCut) {\n return\n } else {\n var ranges = copyableRanges(cm);\n setLastCopied({lineWise: true, text: ranges.text});\n if (e.type == \"cut\") {\n cm.operation(function () {\n cm.setSelections(ranges.ranges, 0, sel_dontScroll);\n cm.replaceSelection(\"\", null, \"cut\");\n });\n }\n }\n if (e.clipboardData) {\n e.clipboardData.clearData();\n var content = lastCopied.text.join(\"\\n\");\n // iOS exposes the clipboard API, but seems to discard content inserted into it\n e.clipboardData.setData(\"Text\", content);\n if (e.clipboardData.getData(\"Text\") == content) {\n e.preventDefault();\n return\n }\n }\n // Old-fashioned briefly-focus-a-textarea hack\n var kludge = hiddenTextarea(), te = kludge.firstChild;\n disableBrowserMagic(te);\n cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild);\n te.value = lastCopied.text.join(\"\\n\");\n var hadFocus = activeElt(rootNode(div));\n selectInput(te);\n setTimeout(function () {\n cm.display.lineSpace.removeChild(kludge);\n hadFocus.focus();\n if (hadFocus == div) { input.showPrimarySelection(); }\n }, 50);\n }\n on(div, \"copy\", onCopyCut);\n on(div, \"cut\", onCopyCut);\n };\n\n ContentEditableInput.prototype.screenReaderLabelChanged = function (label) {\n // Label for screenreaders, accessibility\n if(label) {\n this.div.setAttribute('aria-label', label);\n } else {\n this.div.removeAttribute('aria-label');\n }\n };\n\n ContentEditableInput.prototype.prepareSelection = function () {\n var result = prepareSelection(this.cm, false);\n result.focus = activeElt(rootNode(this.div)) == this.div;\n return result\n };\n\n ContentEditableInput.prototype.showSelection = function (info, takeFocus) {\n if (!info || !this.cm.display.view.length) { return }\n if (info.focus || takeFocus) { this.showPrimarySelection(); }\n this.showMultipleSelections(info);\n };\n\n ContentEditableInput.prototype.getSelection = function () {\n return this.cm.display.wrapper.ownerDocument.getSelection()\n };\n\n ContentEditableInput.prototype.showPrimarySelection = function () {\n var sel = this.getSelection(), cm = this.cm, prim = cm.doc.sel.primary();\n var from = prim.from(), to = prim.to();\n\n if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) {\n sel.removeAllRanges();\n return\n }\n\n var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset);\n if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad &&\n cmp(minPos(curAnchor, curFocus), from) == 0 &&\n cmp(maxPos(curAnchor, curFocus), to) == 0)\n { return }\n\n var view = cm.display.view;\n var start = (from.line >= cm.display.viewFrom && posToDOM(cm, from)) ||\n {node: view[0].measure.map[2], offset: 0};\n var end = to.line < cm.display.viewTo && posToDOM(cm, to);\n if (!end) {\n var measure = view[view.length - 1].measure;\n var map = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map;\n end = {node: map[map.length - 1], offset: map[map.length - 2] - map[map.length - 3]};\n }\n\n if (!start || !end) {\n sel.removeAllRanges();\n return\n }\n\n var old = sel.rangeCount && sel.getRangeAt(0), rng;\n try { rng = range(start.node, start.offset, end.offset, end.node); }\n catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible\n if (rng) {\n if (!gecko && cm.state.focused) {\n sel.collapse(start.node, start.offset);\n if (!rng.collapsed) {\n sel.removeAllRanges();\n sel.addRange(rng);\n }\n } else {\n sel.removeAllRanges();\n sel.addRange(rng);\n }\n if (old && sel.anchorNode == null) { sel.addRange(old); }\n else if (gecko) { this.startGracePeriod(); }\n }\n this.rememberSelection();\n };\n\n ContentEditableInput.prototype.startGracePeriod = function () {\n var this$1 = this;\n\n clearTimeout(this.gracePeriod);\n this.gracePeriod = setTimeout(function () {\n this$1.gracePeriod = false;\n if (this$1.selectionChanged())\n { this$1.cm.operation(function () { return this$1.cm.curOp.selectionChanged = true; }); }\n }, 20);\n };\n\n ContentEditableInput.prototype.showMultipleSelections = function (info) {\n removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors);\n removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection);\n };\n\n ContentEditableInput.prototype.rememberSelection = function () {\n var sel = this.getSelection();\n this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset;\n this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset;\n };\n\n ContentEditableInput.prototype.selectionInEditor = function () {\n var sel = this.getSelection();\n if (!sel.rangeCount) { return false }\n var node = sel.getRangeAt(0).commonAncestorContainer;\n return contains(this.div, node)\n };\n\n ContentEditableInput.prototype.focus = function () {\n if (this.cm.options.readOnly != \"nocursor\") {\n if (!this.selectionInEditor() || activeElt(rootNode(this.div)) != this.div)\n { this.showSelection(this.prepareSelection(), true); }\n this.div.focus();\n }\n };\n ContentEditableInput.prototype.blur = function () { this.div.blur(); };\n ContentEditableInput.prototype.getField = function () { return this.div };\n\n ContentEditableInput.prototype.supportsTouch = function () { return true };\n\n ContentEditableInput.prototype.receivedFocus = function () {\n var this$1 = this;\n\n var input = this;\n if (this.selectionInEditor())\n { setTimeout(function () { return this$1.pollSelection(); }, 20); }\n else\n { runInOp(this.cm, function () { return input.cm.curOp.selectionChanged = true; }); }\n\n function poll() {\n if (input.cm.state.focused) {\n input.pollSelection();\n input.polling.set(input.cm.options.pollInterval, poll);\n }\n }\n this.polling.set(this.cm.options.pollInterval, poll);\n };\n\n ContentEditableInput.prototype.selectionChanged = function () {\n var sel = this.getSelection();\n return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset ||\n sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset\n };\n\n ContentEditableInput.prototype.pollSelection = function () {\n if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) { return }\n var sel = this.getSelection(), cm = this.cm;\n // On Android Chrome (version 56, at least), backspacing into an\n // uneditable block element will put the cursor in that element,\n // and then, because it's not editable, hide the virtual keyboard.\n // Because Android doesn't allow us to actually detect backspace\n // presses in a sane way, this code checks for when that happens\n // and simulates a backspace press in this case.\n if (android && chrome && this.cm.display.gutterSpecs.length && isInGutter(sel.anchorNode)) {\n this.cm.triggerOnKeyDown({type: \"keydown\", keyCode: 8, preventDefault: Math.abs});\n this.blur();\n this.focus();\n return\n }\n if (this.composing) { return }\n this.rememberSelection();\n var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n var head = domToPos(cm, sel.focusNode, sel.focusOffset);\n if (anchor && head) { runInOp(cm, function () {\n setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll);\n if (anchor.bad || head.bad) { cm.curOp.selectionChanged = true; }\n }); }\n };\n\n ContentEditableInput.prototype.pollContent = function () {\n if (this.readDOMTimeout != null) {\n clearTimeout(this.readDOMTimeout);\n this.readDOMTimeout = null;\n }\n\n var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary();\n var from = sel.from(), to = sel.to();\n if (from.ch == 0 && from.line > cm.firstLine())\n { from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length); }\n if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine())\n { to = Pos(to.line + 1, 0); }\n if (from.line < display.viewFrom || to.line > display.viewTo - 1) { return false }\n\n var fromIndex, fromLine, fromNode;\n if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) {\n fromLine = lineNo(display.view[0].line);\n fromNode = display.view[0].node;\n } else {\n fromLine = lineNo(display.view[fromIndex].line);\n fromNode = display.view[fromIndex - 1].node.nextSibling;\n }\n var toIndex = findViewIndex(cm, to.line);\n var toLine, toNode;\n if (toIndex == display.view.length - 1) {\n toLine = display.viewTo - 1;\n toNode = display.lineDiv.lastChild;\n } else {\n toLine = lineNo(display.view[toIndex + 1].line) - 1;\n toNode = display.view[toIndex + 1].node.previousSibling;\n }\n\n if (!fromNode) { return false }\n var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine));\n var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length));\n while (newText.length > 1 && oldText.length > 1) {\n if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; }\n else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; }\n else { break }\n }\n\n var cutFront = 0, cutEnd = 0;\n var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length);\n while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront))\n { ++cutFront; }\n var newBot = lst(newText), oldBot = lst(oldText);\n var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0),\n oldBot.length - (oldText.length == 1 ? cutFront : 0));\n while (cutEnd < maxCutEnd &&\n newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1))\n { ++cutEnd; }\n // Try to move start of change to start of selection if ambiguous\n if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) {\n while (cutFront && cutFront > from.ch &&\n newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) {\n cutFront--;\n cutEnd++;\n }\n }\n\n newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\\u200b+/, \"\");\n newText[0] = newText[0].slice(cutFront).replace(/\\u200b+$/, \"\");\n\n var chFrom = Pos(fromLine, cutFront);\n var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0);\n if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) {\n replaceRange(cm.doc, newText, chFrom, chTo, \"+input\");\n return true\n }\n };\n\n ContentEditableInput.prototype.ensurePolled = function () {\n this.forceCompositionEnd();\n };\n ContentEditableInput.prototype.reset = function () {\n this.forceCompositionEnd();\n };\n ContentEditableInput.prototype.forceCompositionEnd = function () {\n if (!this.composing) { return }\n clearTimeout(this.readDOMTimeout);\n this.composing = null;\n this.updateFromDOM();\n this.div.blur();\n this.div.focus();\n };\n ContentEditableInput.prototype.readFromDOMSoon = function () {\n var this$1 = this;\n\n if (this.readDOMTimeout != null) { return }\n this.readDOMTimeout = setTimeout(function () {\n this$1.readDOMTimeout = null;\n if (this$1.composing) {\n if (this$1.composing.done) { this$1.composing = null; }\n else { return }\n }\n this$1.updateFromDOM();\n }, 80);\n };\n\n ContentEditableInput.prototype.updateFromDOM = function () {\n var this$1 = this;\n\n if (this.cm.isReadOnly() || !this.pollContent())\n { runInOp(this.cm, function () { return regChange(this$1.cm); }); }\n };\n\n ContentEditableInput.prototype.setUneditable = function (node) {\n node.contentEditable = \"false\";\n };\n\n ContentEditableInput.prototype.onKeyPress = function (e) {\n if (e.charCode == 0 || this.composing) { return }\n e.preventDefault();\n if (!this.cm.isReadOnly())\n { operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); }\n };\n\n ContentEditableInput.prototype.readOnlyChanged = function (val) {\n this.div.contentEditable = String(val != \"nocursor\");\n };\n\n ContentEditableInput.prototype.onContextMenu = function () {};\n ContentEditableInput.prototype.resetPosition = function () {};\n\n ContentEditableInput.prototype.needsContentAttribute = true;\n\n function posToDOM(cm, pos) {\n var view = findViewForLine(cm, pos.line);\n if (!view || view.hidden) { return null }\n var line = getLine(cm.doc, pos.line);\n var info = mapFromLineView(view, line, pos.line);\n\n var order = getOrder(line, cm.doc.direction), side = \"left\";\n if (order) {\n var partPos = getBidiPartAt(order, pos.ch);\n side = partPos % 2 ? \"right\" : \"left\";\n }\n var result = nodeAndOffsetInLineMap(info.map, pos.ch, side);\n result.offset = result.collapse == \"right\" ? result.end : result.start;\n return result\n }\n\n function isInGutter(node) {\n for (var scan = node; scan; scan = scan.parentNode)\n { if (/CodeMirror-gutter-wrapper/.test(scan.className)) { return true } }\n return false\n }\n\n function badPos(pos, bad) { if (bad) { pos.bad = true; } return pos }\n\n function domTextBetween(cm, from, to, fromLine, toLine) {\n var text = \"\", closing = false, lineSep = cm.doc.lineSeparator(), extraLinebreak = false;\n function recognizeMarker(id) { return function (marker) { return marker.id == id; } }\n function close() {\n if (closing) {\n text += lineSep;\n if (extraLinebreak) { text += lineSep; }\n closing = extraLinebreak = false;\n }\n }\n function addText(str) {\n if (str) {\n close();\n text += str;\n }\n }\n function walk(node) {\n if (node.nodeType == 1) {\n var cmText = node.getAttribute(\"cm-text\");\n if (cmText) {\n addText(cmText);\n return\n }\n var markerID = node.getAttribute(\"cm-marker\"), range;\n if (markerID) {\n var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID));\n if (found.length && (range = found[0].find(0)))\n { addText(getBetween(cm.doc, range.from, range.to).join(lineSep)); }\n return\n }\n if (node.getAttribute(\"contenteditable\") == \"false\") { return }\n var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName);\n if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) { return }\n\n if (isBlock) { close(); }\n for (var i = 0; i < node.childNodes.length; i++)\n { walk(node.childNodes[i]); }\n\n if (/^(pre|p)$/i.test(node.nodeName)) { extraLinebreak = true; }\n if (isBlock) { closing = true; }\n } else if (node.nodeType == 3) {\n addText(node.nodeValue.replace(/\\u200b/g, \"\").replace(/\\u00a0/g, \" \"));\n }\n }\n for (;;) {\n walk(from);\n if (from == to) { break }\n from = from.nextSibling;\n extraLinebreak = false;\n }\n return text\n }\n\n function domToPos(cm, node, offset) {\n var lineNode;\n if (node == cm.display.lineDiv) {\n lineNode = cm.display.lineDiv.childNodes[offset];\n if (!lineNode) { return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true) }\n node = null; offset = 0;\n } else {\n for (lineNode = node;; lineNode = lineNode.parentNode) {\n if (!lineNode || lineNode == cm.display.lineDiv) { return null }\n if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { break }\n }\n }\n for (var i = 0; i < cm.display.view.length; i++) {\n var lineView = cm.display.view[i];\n if (lineView.node == lineNode)\n { return locateNodeInLineView(lineView, node, offset) }\n }\n }\n\n function locateNodeInLineView(lineView, node, offset) {\n var wrapper = lineView.text.firstChild, bad = false;\n if (!node || !contains(wrapper, node)) { return badPos(Pos(lineNo(lineView.line), 0), true) }\n if (node == wrapper) {\n bad = true;\n node = wrapper.childNodes[offset];\n offset = 0;\n if (!node) {\n var line = lineView.rest ? lst(lineView.rest) : lineView.line;\n return badPos(Pos(lineNo(line), line.text.length), bad)\n }\n }\n\n var textNode = node.nodeType == 3 ? node : null, topNode = node;\n if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) {\n textNode = node.firstChild;\n if (offset) { offset = textNode.nodeValue.length; }\n }\n while (topNode.parentNode != wrapper) { topNode = topNode.parentNode; }\n var measure = lineView.measure, maps = measure.maps;\n\n function find(textNode, topNode, offset) {\n for (var i = -1; i < (maps ? maps.length : 0); i++) {\n var map = i < 0 ? measure.map : maps[i];\n for (var j = 0; j < map.length; j += 3) {\n var curNode = map[j + 2];\n if (curNode == textNode || curNode == topNode) {\n var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]);\n var ch = map[j] + offset;\n if (offset < 0 || curNode != textNode) { ch = map[j + (offset ? 1 : 0)]; }\n return Pos(line, ch)\n }\n }\n }\n }\n var found = find(textNode, topNode, offset);\n if (found) { return badPos(found, bad) }\n\n // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems\n for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) {\n found = find(after, after.firstChild, 0);\n if (found)\n { return badPos(Pos(found.line, found.ch - dist), bad) }\n else\n { dist += after.textContent.length; }\n }\n for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) {\n found = find(before, before.firstChild, -1);\n if (found)\n { return badPos(Pos(found.line, found.ch + dist$1), bad) }\n else\n { dist$1 += before.textContent.length; }\n }\n }\n\n // TEXTAREA INPUT STYLE\n\n var TextareaInput = function(cm) {\n this.cm = cm;\n // See input.poll and input.reset\n this.prevInput = \"\";\n\n // Flag that indicates whether we expect input to appear real soon\n // now (after some event like 'keypress' or 'input') and are\n // polling intensively.\n this.pollingFast = false;\n // Self-resetting timeout for the poller\n this.polling = new Delayed();\n // Used to work around IE issue with selection being forgotten when focus moves away from textarea\n this.hasSelection = false;\n this.composing = null;\n this.resetting = false;\n };\n\n TextareaInput.prototype.init = function (display) {\n var this$1 = this;\n\n var input = this, cm = this.cm;\n this.createField(display);\n var te = this.textarea;\n\n display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild);\n\n // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore)\n if (ios) { te.style.width = \"0px\"; }\n\n on(te, \"input\", function () {\n if (ie && ie_version >= 9 && this$1.hasSelection) { this$1.hasSelection = null; }\n input.poll();\n });\n\n on(te, \"paste\", function (e) {\n if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }\n\n cm.state.pasteIncoming = +new Date;\n input.fastPoll();\n });\n\n function prepareCopyCut(e) {\n if (signalDOMEvent(cm, e)) { return }\n if (cm.somethingSelected()) {\n setLastCopied({lineWise: false, text: cm.getSelections()});\n } else if (!cm.options.lineWiseCopyCut) {\n return\n } else {\n var ranges = copyableRanges(cm);\n setLastCopied({lineWise: true, text: ranges.text});\n if (e.type == \"cut\") {\n cm.setSelections(ranges.ranges, null, sel_dontScroll);\n } else {\n input.prevInput = \"\";\n te.value = ranges.text.join(\"\\n\");\n selectInput(te);\n }\n }\n if (e.type == \"cut\") { cm.state.cutIncoming = +new Date; }\n }\n on(te, \"cut\", prepareCopyCut);\n on(te, \"copy\", prepareCopyCut);\n\n on(display.scroller, \"paste\", function (e) {\n if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { return }\n if (!te.dispatchEvent) {\n cm.state.pasteIncoming = +new Date;\n input.focus();\n return\n }\n\n // Pass the `paste` event to the textarea so it's handled by its event listener.\n var event = new Event(\"paste\");\n event.clipboardData = e.clipboardData;\n te.dispatchEvent(event);\n });\n\n // Prevent normal selection in the editor (we handle our own)\n on(display.lineSpace, \"selectstart\", function (e) {\n if (!eventInWidget(display, e)) { e_preventDefault(e); }\n });\n\n on(te, \"compositionstart\", function () {\n var start = cm.getCursor(\"from\");\n if (input.composing) { input.composing.range.clear(); }\n input.composing = {\n start: start,\n range: cm.markText(start, cm.getCursor(\"to\"), {className: \"CodeMirror-composing\"})\n };\n });\n on(te, \"compositionend\", function () {\n if (input.composing) {\n input.poll();\n input.composing.range.clear();\n input.composing = null;\n }\n });\n };\n\n TextareaInput.prototype.createField = function (_display) {\n // Wraps and hides input textarea\n this.wrapper = hiddenTextarea();\n // The semihidden textarea that is focused when the editor is\n // focused, and receives input.\n this.textarea = this.wrapper.firstChild;\n var opts = this.cm.options;\n disableBrowserMagic(this.textarea, opts.spellcheck, opts.autocorrect, opts.autocapitalize);\n };\n\n TextareaInput.prototype.screenReaderLabelChanged = function (label) {\n // Label for screenreaders, accessibility\n if(label) {\n this.textarea.setAttribute('aria-label', label);\n } else {\n this.textarea.removeAttribute('aria-label');\n }\n };\n\n TextareaInput.prototype.prepareSelection = function () {\n // Redraw the selection and/or cursor\n var cm = this.cm, display = cm.display, doc = cm.doc;\n var result = prepareSelection(cm);\n\n // Move the hidden textarea near the cursor to prevent scrolling artifacts\n if (cm.options.moveInputWithCursor) {\n var headPos = cursorCoords(cm, doc.sel.primary().head, \"div\");\n var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect();\n result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10,\n headPos.top + lineOff.top - wrapOff.top));\n result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10,\n headPos.left + lineOff.left - wrapOff.left));\n }\n\n return result\n };\n\n TextareaInput.prototype.showSelection = function (drawn) {\n var cm = this.cm, display = cm.display;\n removeChildrenAndAdd(display.cursorDiv, drawn.cursors);\n removeChildrenAndAdd(display.selectionDiv, drawn.selection);\n if (drawn.teTop != null) {\n this.wrapper.style.top = drawn.teTop + \"px\";\n this.wrapper.style.left = drawn.teLeft + \"px\";\n }\n };\n\n // Reset the input to correspond to the selection (or to be empty,\n // when not typing and nothing is selected)\n TextareaInput.prototype.reset = function (typing) {\n if (this.contextMenuPending || this.composing && typing) { return }\n var cm = this.cm;\n this.resetting = true;\n if (cm.somethingSelected()) {\n this.prevInput = \"\";\n var content = cm.getSelection();\n this.textarea.value = content;\n if (cm.state.focused) { selectInput(this.textarea); }\n if (ie && ie_version >= 9) { this.hasSelection = content; }\n } else if (!typing) {\n this.prevInput = this.textarea.value = \"\";\n if (ie && ie_version >= 9) { this.hasSelection = null; }\n }\n this.resetting = false;\n };\n\n TextareaInput.prototype.getField = function () { return this.textarea };\n\n TextareaInput.prototype.supportsTouch = function () { return false };\n\n TextareaInput.prototype.focus = function () {\n if (this.cm.options.readOnly != \"nocursor\" && (!mobile || activeElt(rootNode(this.textarea)) != this.textarea)) {\n try { this.textarea.focus(); }\n catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM\n }\n };\n\n TextareaInput.prototype.blur = function () { this.textarea.blur(); };\n\n TextareaInput.prototype.resetPosition = function () {\n this.wrapper.style.top = this.wrapper.style.left = 0;\n };\n\n TextareaInput.prototype.receivedFocus = function () { this.slowPoll(); };\n\n // Poll for input changes, using the normal rate of polling. This\n // runs as long as the editor is focused.\n TextareaInput.prototype.slowPoll = function () {\n var this$1 = this;\n\n if (this.pollingFast) { return }\n this.polling.set(this.cm.options.pollInterval, function () {\n this$1.poll();\n if (this$1.cm.state.focused) { this$1.slowPoll(); }\n });\n };\n\n // When an event has just come in that is likely to add or change\n // something in the input textarea, we poll faster, to ensure that\n // the change appears on the screen quickly.\n TextareaInput.prototype.fastPoll = function () {\n var missed = false, input = this;\n input.pollingFast = true;\n function p() {\n var changed = input.poll();\n if (!changed && !missed) {missed = true; input.polling.set(60, p);}\n else {input.pollingFast = false; input.slowPoll();}\n }\n input.polling.set(20, p);\n };\n\n // Read input from the textarea, and update the document to match.\n // When something is selected, it is present in the textarea, and\n // selected (unless it is huge, in which case a placeholder is\n // used). When nothing is selected, the cursor sits after previously\n // seen text (can be empty), which is stored in prevInput (we must\n // not reset the textarea when typing, because that breaks IME).\n TextareaInput.prototype.poll = function () {\n var this$1 = this;\n\n var cm = this.cm, input = this.textarea, prevInput = this.prevInput;\n // Since this is called a *lot*, try to bail out as cheaply as\n // possible when it is clear that nothing happened. hasSelection\n // will be the case when there is a lot of text in the textarea,\n // in which case reading its value would be expensive.\n if (this.contextMenuPending || this.resetting || !cm.state.focused ||\n (hasSelection(input) && !prevInput && !this.composing) ||\n cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq)\n { return false }\n\n var text = input.value;\n // If nothing changed, bail.\n if (text == prevInput && !cm.somethingSelected()) { return false }\n // Work around nonsensical selection resetting in IE9/10, and\n // inexplicable appearance of private area unicode characters on\n // some key combos in Mac (#2689).\n if (ie && ie_version >= 9 && this.hasSelection === text ||\n mac && /[\\uf700-\\uf7ff]/.test(text)) {\n cm.display.input.reset();\n return false\n }\n\n if (cm.doc.sel == cm.display.selForContextMenu) {\n var first = text.charCodeAt(0);\n if (first == 0x200b && !prevInput) { prevInput = \"\\u200b\"; }\n if (first == 0x21da) { this.reset(); return this.cm.execCommand(\"undo\") }\n }\n // Find the part of the input that is actually new\n var same = 0, l = Math.min(prevInput.length, text.length);\n while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { ++same; }\n\n runInOp(cm, function () {\n applyTextInput(cm, text.slice(same), prevInput.length - same,\n null, this$1.composing ? \"*compose\" : null);\n\n // Don't leave long text in the textarea, since it makes further polling slow\n if (text.length > 1000 || text.indexOf(\"\\n\") > -1) { input.value = this$1.prevInput = \"\"; }\n else { this$1.prevInput = text; }\n\n if (this$1.composing) {\n this$1.composing.range.clear();\n this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor(\"to\"),\n {className: \"CodeMirror-composing\"});\n }\n });\n return true\n };\n\n TextareaInput.prototype.ensurePolled = function () {\n if (this.pollingFast && this.poll()) { this.pollingFast = false; }\n };\n\n TextareaInput.prototype.onKeyPress = function () {\n if (ie && ie_version >= 9) { this.hasSelection = null; }\n this.fastPoll();\n };\n\n TextareaInput.prototype.onContextMenu = function (e) {\n var input = this, cm = input.cm, display = cm.display, te = input.textarea;\n if (input.contextMenuPending) { input.contextMenuPending(); }\n var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop;\n if (!pos || presto) { return } // Opera is difficult.\n\n // Reset the current text selection only if the click is done outside of the selection\n // and 'resetSelectionOnContextMenu' option is true.\n var reset = cm.options.resetSelectionOnContextMenu;\n if (reset && cm.doc.sel.contains(pos) == -1)\n { operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); }\n\n var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText;\n var wrapperBox = input.wrapper.offsetParent.getBoundingClientRect();\n input.wrapper.style.cssText = \"position: static\";\n te.style.cssText = \"position: absolute; width: 30px; height: 30px;\\n top: \" + (e.clientY - wrapperBox.top - 5) + \"px; left: \" + (e.clientX - wrapperBox.left - 5) + \"px;\\n z-index: 1000; background: \" + (ie ? \"rgba(255, 255, 255, .05)\" : \"transparent\") + \";\\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);\";\n var oldScrollY;\n if (webkit) { oldScrollY = te.ownerDocument.defaultView.scrollY; } // Work around Chrome issue (#2712)\n display.input.focus();\n if (webkit) { te.ownerDocument.defaultView.scrollTo(null, oldScrollY); }\n display.input.reset();\n // Adds \"Select all\" to context menu in FF\n if (!cm.somethingSelected()) { te.value = input.prevInput = \" \"; }\n input.contextMenuPending = rehide;\n display.selForContextMenu = cm.doc.sel;\n clearTimeout(display.detectingSelectAll);\n\n // Select-all will be greyed out if there's nothing to select, so\n // this adds a zero-width space so that we can later check whether\n // it got selected.\n function prepareSelectAllHack() {\n if (te.selectionStart != null) {\n var selected = cm.somethingSelected();\n var extval = \"\\u200b\" + (selected ? te.value : \"\");\n te.value = \"\\u21da\"; // Used to catch context-menu undo\n te.value = extval;\n input.prevInput = selected ? \"\" : \"\\u200b\";\n te.selectionStart = 1; te.selectionEnd = extval.length;\n // Re-set this, in case some other handler touched the\n // selection in the meantime.\n display.selForContextMenu = cm.doc.sel;\n }\n }\n function rehide() {\n if (input.contextMenuPending != rehide) { return }\n input.contextMenuPending = false;\n input.wrapper.style.cssText = oldWrapperCSS;\n te.style.cssText = oldCSS;\n if (ie && ie_version < 9) { display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); }\n\n // Try to detect the user choosing select-all\n if (te.selectionStart != null) {\n if (!ie || (ie && ie_version < 9)) { prepareSelectAllHack(); }\n var i = 0, poll = function () {\n if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 &&\n te.selectionEnd > 0 && input.prevInput == \"\\u200b\") {\n operation(cm, selectAll)(cm);\n } else if (i++ < 10) {\n display.detectingSelectAll = setTimeout(poll, 500);\n } else {\n display.selForContextMenu = null;\n display.input.reset();\n }\n };\n display.detectingSelectAll = setTimeout(poll, 200);\n }\n }\n\n if (ie && ie_version >= 9) { prepareSelectAllHack(); }\n if (captureRightClick) {\n e_stop(e);\n var mouseup = function () {\n off(window, \"mouseup\", mouseup);\n setTimeout(rehide, 20);\n };\n on(window, \"mouseup\", mouseup);\n } else {\n setTimeout(rehide, 50);\n }\n };\n\n TextareaInput.prototype.readOnlyChanged = function (val) {\n if (!val) { this.reset(); }\n this.textarea.disabled = val == \"nocursor\";\n this.textarea.readOnly = !!val;\n };\n\n TextareaInput.prototype.setUneditable = function () {};\n\n TextareaInput.prototype.needsContentAttribute = false;\n\n function fromTextArea(textarea, options) {\n options = options ? copyObj(options) : {};\n options.value = textarea.value;\n if (!options.tabindex && textarea.tabIndex)\n { options.tabindex = textarea.tabIndex; }\n if (!options.placeholder && textarea.placeholder)\n { options.placeholder = textarea.placeholder; }\n // Set autofocus to true if this textarea is focused, or if it has\n // autofocus and no other element is focused.\n if (options.autofocus == null) {\n var hasFocus = activeElt(rootNode(textarea));\n options.autofocus = hasFocus == textarea ||\n textarea.getAttribute(\"autofocus\") != null && hasFocus == document.body;\n }\n\n function save() {textarea.value = cm.getValue();}\n\n var realSubmit;\n if (textarea.form) {\n on(textarea.form, \"submit\", save);\n // Deplorable hack to make the submit method do the right thing.\n if (!options.leaveSubmitMethodAlone) {\n var form = textarea.form;\n realSubmit = form.submit;\n try {\n var wrappedSubmit = form.submit = function () {\n save();\n form.submit = realSubmit;\n form.submit();\n form.submit = wrappedSubmit;\n };\n } catch(e) {}\n }\n }\n\n options.finishInit = function (cm) {\n cm.save = save;\n cm.getTextArea = function () { return textarea; };\n cm.toTextArea = function () {\n cm.toTextArea = isNaN; // Prevent this from being ran twice\n save();\n textarea.parentNode.removeChild(cm.getWrapperElement());\n textarea.style.display = \"\";\n if (textarea.form) {\n off(textarea.form, \"submit\", save);\n if (!options.leaveSubmitMethodAlone && typeof textarea.form.submit == \"function\")\n { textarea.form.submit = realSubmit; }\n }\n };\n };\n\n textarea.style.display = \"none\";\n var cm = CodeMirror(function (node) { return textarea.parentNode.insertBefore(node, textarea.nextSibling); },\n options);\n return cm\n }\n\n function addLegacyProps(CodeMirror) {\n CodeMirror.off = off;\n CodeMirror.on = on;\n CodeMirror.wheelEventPixels = wheelEventPixels;\n CodeMirror.Doc = Doc;\n CodeMirror.splitLines = splitLinesAuto;\n CodeMirror.countColumn = countColumn;\n CodeMirror.findColumn = findColumn;\n CodeMirror.isWordChar = isWordCharBasic;\n CodeMirror.Pass = Pass;\n CodeMirror.signal = signal;\n CodeMirror.Line = Line;\n CodeMirror.changeEnd = changeEnd;\n CodeMirror.scrollbarModel = scrollbarModel;\n CodeMirror.Pos = Pos;\n CodeMirror.cmpPos = cmp;\n CodeMirror.modes = modes;\n CodeMirror.mimeModes = mimeModes;\n CodeMirror.resolveMode = resolveMode;\n CodeMirror.getMode = getMode;\n CodeMirror.modeExtensions = modeExtensions;\n CodeMirror.extendMode = extendMode;\n CodeMirror.copyState = copyState;\n CodeMirror.startState = startState;\n CodeMirror.innerMode = innerMode;\n CodeMirror.commands = commands;\n CodeMirror.keyMap = keyMap;\n CodeMirror.keyName = keyName;\n CodeMirror.isModifierKey = isModifierKey;\n CodeMirror.lookupKey = lookupKey;\n CodeMirror.normalizeKeyMap = normalizeKeyMap;\n CodeMirror.StringStream = StringStream;\n CodeMirror.SharedTextMarker = SharedTextMarker;\n CodeMirror.TextMarker = TextMarker;\n CodeMirror.LineWidget = LineWidget;\n CodeMirror.e_preventDefault = e_preventDefault;\n CodeMirror.e_stopPropagation = e_stopPropagation;\n CodeMirror.e_stop = e_stop;\n CodeMirror.addClass = addClass;\n CodeMirror.contains = contains;\n CodeMirror.rmClass = rmClass;\n CodeMirror.keyNames = keyNames;\n }\n\n // EDITOR CONSTRUCTOR\n\n defineOptions(CodeMirror);\n\n addEditorMethods(CodeMirror);\n\n // Set up methods on CodeMirror's prototype to redirect to the editor's document.\n var dontDelegate = \"iter insert remove copy getEditor constructor\".split(\" \");\n for (var prop in Doc.prototype) { if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0)\n { CodeMirror.prototype[prop] = (function(method) {\n return function() {return method.apply(this.doc, arguments)}\n })(Doc.prototype[prop]); } }\n\n eventMixin(Doc);\n CodeMirror.inputStyles = {\"textarea\": TextareaInput, \"contenteditable\": ContentEditableInput};\n\n // Extra arguments are stored as the mode's dependencies, which is\n // used by (legacy) mechanisms like loadmode.js to automatically\n // load a mode. (Preferred mechanism is the require/define calls.)\n CodeMirror.defineMode = function(name/*, mode, \u2026*/) {\n if (!CodeMirror.defaults.mode && name != \"null\") { CodeMirror.defaults.mode = name; }\n defineMode.apply(this, arguments);\n };\n\n CodeMirror.defineMIME = defineMIME;\n\n // Minimal default mode.\n CodeMirror.defineMode(\"null\", function () { return ({token: function (stream) { return stream.skipToEnd(); }}); });\n CodeMirror.defineMIME(\"text/plain\", \"null\");\n\n // EXTENSIONS\n\n CodeMirror.defineExtension = function (name, func) {\n CodeMirror.prototype[name] = func;\n };\n CodeMirror.defineDocExtension = function (name, func) {\n Doc.prototype[name] = func;\n };\n\n CodeMirror.fromTextArea = fromTextArea;\n\n addLegacyProps(CodeMirror);\n\n CodeMirror.version = \"5.65.18\";\n\n return CodeMirror;\n\n})));\n", "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n\n var listRE = /^(\\s*)(>[> ]*|[*+-] \\[[x ]\\]\\s|[*+-]\\s|(\\d+)([.)]))(\\s*)/,\n emptyListRE = /^(\\s*)(>[> ]*|[*+-] \\[[x ]\\]|[*+-]|(\\d+)[.)])(\\s*)$/,\n unorderedListRE = /[*+-]\\s/;\n\n CodeMirror.commands.newlineAndIndentContinueMarkdownList = function(cm) {\n if (cm.getOption(\"disableInput\")) return CodeMirror.Pass;\n var ranges = cm.listSelections(), replacements = [];\n for (var i = 0; i < ranges.length; i++) {\n var pos = ranges[i].head;\n\n // If we're not in Markdown mode, fall back to normal newlineAndIndent\n var eolState = cm.getStateAfter(pos.line);\n var inner = CodeMirror.innerMode(cm.getMode(), eolState);\n if (inner.mode.name !== \"markdown\" && inner.mode.helperType !== \"markdown\") {\n cm.execCommand(\"newlineAndIndent\");\n return;\n } else {\n eolState = inner.state;\n }\n\n var inList = eolState.list !== false;\n var inQuote = eolState.quote !== 0;\n\n var line = cm.getLine(pos.line), match = listRE.exec(line);\n var cursorBeforeBullet = /^\\s*$/.test(line.slice(0, pos.ch));\n if (!ranges[i].empty() || (!inList && !inQuote) || !match || cursorBeforeBullet) {\n cm.execCommand(\"newlineAndIndent\");\n return;\n }\n if (emptyListRE.test(line)) {\n var endOfQuote = inQuote && />\\s*$/.test(line)\n var endOfList = !/>\\s*$/.test(line)\n if (endOfQuote || endOfList) cm.replaceRange(\"\", {\n line: pos.line, ch: 0\n }, {\n line: pos.line, ch: pos.ch + 1\n });\n replacements[i] = \"\\n\";\n } else {\n var indent = match[1], after = match[5];\n var numbered = !(unorderedListRE.test(match[2]) || match[2].indexOf(\">\") >= 0);\n var bullet = numbered ? (parseInt(match[3], 10) + 1) + match[4] : match[2].replace(\"x\", \" \");\n replacements[i] = \"\\n\" + indent + bullet + after;\n\n if (numbered) incrementRemainingMarkdownListNumbers(cm, pos);\n }\n }\n\n cm.replaceSelections(replacements);\n };\n\n // Auto-updating Markdown list numbers when a new item is added to the\n // middle of a list\n function incrementRemainingMarkdownListNumbers(cm, pos) {\n var startLine = pos.line, lookAhead = 0, skipCount = 0;\n var startItem = listRE.exec(cm.getLine(startLine)), startIndent = startItem[1];\n\n do {\n lookAhead += 1;\n var nextLineNumber = startLine + lookAhead;\n var nextLine = cm.getLine(nextLineNumber), nextItem = listRE.exec(nextLine);\n\n if (nextItem) {\n var nextIndent = nextItem[1];\n var newNumber = (parseInt(startItem[3], 10) + lookAhead - skipCount);\n var nextNumber = (parseInt(nextItem[3], 10)), itemNumber = nextNumber;\n\n if (startIndent === nextIndent && !isNaN(nextNumber)) {\n if (newNumber === nextNumber) itemNumber = nextNumber + 1;\n if (newNumber > nextNumber) itemNumber = newNumber + 1;\n cm.replaceRange(\n nextLine.replace(listRE, nextIndent + itemNumber + nextItem[4] + nextItem[5]),\n {\n line: nextLineNumber, ch: 0\n }, {\n line: nextLineNumber, ch: nextLine.length\n });\n } else {\n if (startIndent.length > nextIndent.length) return;\n // This doesn't run if the next line immediately indents, as it is\n // not clear of the users intention (new indented item or same level)\n if ((startIndent.length < nextIndent.length) && (lookAhead === 1)) return;\n skipCount += 1;\n }\n }\n } while (nextItem);\n }\n});\n", "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\nvar CodeMirror = require('codemirror');\n\nCodeMirror.commands.tabAndIndentMarkdownList = function (cm) {\n var ranges = cm.listSelections();\n var pos = ranges[0].head;\n var eolState = cm.getStateAfter(pos.line);\n var inList = eolState.list !== false;\n\n if (inList) {\n cm.execCommand('indentMore');\n return;\n }\n\n if (cm.options.indentWithTabs) {\n cm.execCommand('insertTab');\n } else {\n var spaces = Array(cm.options.tabSize + 1).join(' ');\n cm.replaceSelection(spaces);\n }\n};\n\nCodeMirror.commands.shiftTabAndUnindentMarkdownList = function (cm) {\n var ranges = cm.listSelections();\n var pos = ranges[0].head;\n var eolState = cm.getStateAfter(pos.line);\n var inList = eolState.list !== false;\n\n if (inList) {\n cm.execCommand('indentLess');\n return;\n }\n\n if (cm.options.indentWithTabs) {\n cm.execCommand('insertTab');\n } else {\n var spaces = Array(cm.options.tabSize + 1).join(' ');\n cm.replaceSelection(spaces);\n }\n};\n", "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n\n CodeMirror.defineOption(\"fullScreen\", false, function(cm, val, old) {\n if (old == CodeMirror.Init) old = false;\n if (!old == !val) return;\n if (val) setFullscreen(cm);\n else setNormal(cm);\n });\n\n function setFullscreen(cm) {\n var wrap = cm.getWrapperElement();\n cm.state.fullScreenRestore = {scrollTop: window.pageYOffset, scrollLeft: window.pageXOffset,\n width: wrap.style.width, height: wrap.style.height};\n wrap.style.width = \"\";\n wrap.style.height = \"auto\";\n wrap.className += \" CodeMirror-fullscreen\";\n document.documentElement.style.overflow = \"hidden\";\n cm.refresh();\n }\n\n function setNormal(cm) {\n var wrap = cm.getWrapperElement();\n wrap.className = wrap.className.replace(/\\s*CodeMirror-fullscreen\\b/, \"\");\n document.documentElement.style.overflow = \"\";\n var info = cm.state.fullScreenRestore;\n wrap.style.width = info.width; wrap.style.height = info.height;\n window.scrollTo(info.scrollLeft, info.scrollTop);\n cm.refresh();\n }\n});\n", "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nvar htmlConfig = {\n autoSelfClosers: {'area': true, 'base': true, 'br': true, 'col': true, 'command': true,\n 'embed': true, 'frame': true, 'hr': true, 'img': true, 'input': true,\n 'keygen': true, 'link': true, 'meta': true, 'param': true, 'source': true,\n 'track': true, 'wbr': true, 'menuitem': true},\n implicitlyClosed: {'dd': true, 'li': true, 'optgroup': true, 'option': true, 'p': true,\n 'rp': true, 'rt': true, 'tbody': true, 'td': true, 'tfoot': true,\n 'th': true, 'tr': true},\n contextGrabbers: {\n 'dd': {'dd': true, 'dt': true},\n 'dt': {'dd': true, 'dt': true},\n 'li': {'li': true},\n 'option': {'option': true, 'optgroup': true},\n 'optgroup': {'optgroup': true},\n 'p': {'address': true, 'article': true, 'aside': true, 'blockquote': true, 'dir': true,\n 'div': true, 'dl': true, 'fieldset': true, 'footer': true, 'form': true,\n 'h1': true, 'h2': true, 'h3': true, 'h4': true, 'h5': true, 'h6': true,\n 'header': true, 'hgroup': true, 'hr': true, 'menu': true, 'nav': true, 'ol': true,\n 'p': true, 'pre': true, 'section': true, 'table': true, 'ul': true},\n 'rp': {'rp': true, 'rt': true},\n 'rt': {'rp': true, 'rt': true},\n 'tbody': {'tbody': true, 'tfoot': true},\n 'td': {'td': true, 'th': true},\n 'tfoot': {'tbody': true},\n 'th': {'td': true, 'th': true},\n 'thead': {'tbody': true, 'tfoot': true},\n 'tr': {'tr': true}\n },\n doNotIndent: {\"pre\": true},\n allowUnquoted: true,\n allowMissing: true,\n caseFold: true\n}\n\nvar xmlConfig = {\n autoSelfClosers: {},\n implicitlyClosed: {},\n contextGrabbers: {},\n doNotIndent: {},\n allowUnquoted: false,\n allowMissing: false,\n allowMissingTagName: false,\n caseFold: false\n}\n\nCodeMirror.defineMode(\"xml\", function(editorConf, config_) {\n var indentUnit = editorConf.indentUnit\n var config = {}\n var defaults = config_.htmlMode ? htmlConfig : xmlConfig\n for (var prop in defaults) config[prop] = defaults[prop]\n for (var prop in config_) config[prop] = config_[prop]\n\n // Return variables for tokenizers\n var type, setStyle;\n\n function inText(stream, state) {\n function chain(parser) {\n state.tokenize = parser;\n return parser(stream, state);\n }\n\n var ch = stream.next();\n if (ch == \"<\") {\n if (stream.eat(\"!\")) {\n if (stream.eat(\"[\")) {\n if (stream.match(\"CDATA[\")) return chain(inBlock(\"atom\", \"]]>\"));\n else return null;\n } else if (stream.match(\"--\")) {\n return chain(inBlock(\"comment\", \"-->\"));\n } else if (stream.match(\"DOCTYPE\", true, true)) {\n stream.eatWhile(/[\\w\\._\\-]/);\n return chain(doctype(1));\n } else {\n return null;\n }\n } else if (stream.eat(\"?\")) {\n stream.eatWhile(/[\\w\\._\\-]/);\n state.tokenize = inBlock(\"meta\", \"?>\");\n return \"meta\";\n } else {\n type = stream.eat(\"/\") ? \"closeTag\" : \"openTag\";\n state.tokenize = inTag;\n return \"tag bracket\";\n }\n } else if (ch == \"&\") {\n var ok;\n if (stream.eat(\"#\")) {\n if (stream.eat(\"x\")) {\n ok = stream.eatWhile(/[a-fA-F\\d]/) && stream.eat(\";\");\n } else {\n ok = stream.eatWhile(/[\\d]/) && stream.eat(\";\");\n }\n } else {\n ok = stream.eatWhile(/[\\w\\.\\-:]/) && stream.eat(\";\");\n }\n return ok ? \"atom\" : \"error\";\n } else {\n stream.eatWhile(/[^&<]/);\n return null;\n }\n }\n inText.isInText = true;\n\n function inTag(stream, state) {\n var ch = stream.next();\n if (ch == \">\" || (ch == \"/\" && stream.eat(\">\"))) {\n state.tokenize = inText;\n type = ch == \">\" ? \"endTag\" : \"selfcloseTag\";\n return \"tag bracket\";\n } else if (ch == \"=\") {\n type = \"equals\";\n return null;\n } else if (ch == \"<\") {\n state.tokenize = inText;\n state.state = baseState;\n state.tagName = state.tagStart = null;\n var next = state.tokenize(stream, state);\n return next ? next + \" tag error\" : \"tag error\";\n } else if (/[\\'\\\"]/.test(ch)) {\n state.tokenize = inAttribute(ch);\n state.stringStartCol = stream.column();\n return state.tokenize(stream, state);\n } else {\n stream.match(/^[^\\s\\u00a0=<>\\\"\\']*[^\\s\\u00a0=<>\\\"\\'\\/]/);\n return \"word\";\n }\n }\n\n function inAttribute(quote) {\n var closure = function(stream, state) {\n while (!stream.eol()) {\n if (stream.next() == quote) {\n state.tokenize = inTag;\n break;\n }\n }\n return \"string\";\n };\n closure.isInAttribute = true;\n return closure;\n }\n\n function inBlock(style, terminator) {\n return function(stream, state) {\n while (!stream.eol()) {\n if (stream.match(terminator)) {\n state.tokenize = inText;\n break;\n }\n stream.next();\n }\n return style;\n }\n }\n\n function doctype(depth) {\n return function(stream, state) {\n var ch;\n while ((ch = stream.next()) != null) {\n if (ch == \"<\") {\n state.tokenize = doctype(depth + 1);\n return state.tokenize(stream, state);\n } else if (ch == \">\") {\n if (depth == 1) {\n state.tokenize = inText;\n break;\n } else {\n state.tokenize = doctype(depth - 1);\n return state.tokenize(stream, state);\n }\n }\n }\n return \"meta\";\n };\n }\n\n function lower(tagName) {\n return tagName && tagName.toLowerCase();\n }\n\n function Context(state, tagName, startOfLine) {\n this.prev = state.context;\n this.tagName = tagName || \"\";\n this.indent = state.indented;\n this.startOfLine = startOfLine;\n if (config.doNotIndent.hasOwnProperty(tagName) || (state.context && state.context.noIndent))\n this.noIndent = true;\n }\n function popContext(state) {\n if (state.context) state.context = state.context.prev;\n }\n function maybePopContext(state, nextTagName) {\n var parentTagName;\n while (true) {\n if (!state.context) {\n return;\n }\n parentTagName = state.context.tagName;\n if (!config.contextGrabbers.hasOwnProperty(lower(parentTagName)) ||\n !config.contextGrabbers[lower(parentTagName)].hasOwnProperty(lower(nextTagName))) {\n return;\n }\n popContext(state);\n }\n }\n\n function baseState(type, stream, state) {\n if (type == \"openTag\") {\n state.tagStart = stream.column();\n return tagNameState;\n } else if (type == \"closeTag\") {\n return closeTagNameState;\n } else {\n return baseState;\n }\n }\n function tagNameState(type, stream, state) {\n if (type == \"word\") {\n state.tagName = stream.current();\n setStyle = \"tag\";\n return attrState;\n } else if (config.allowMissingTagName && type == \"endTag\") {\n setStyle = \"tag bracket\";\n return attrState(type, stream, state);\n } else {\n setStyle = \"error\";\n return tagNameState;\n }\n }\n function closeTagNameState(type, stream, state) {\n if (type == \"word\") {\n var tagName = stream.current();\n if (state.context && state.context.tagName != tagName &&\n config.implicitlyClosed.hasOwnProperty(lower(state.context.tagName)))\n popContext(state);\n if ((state.context && state.context.tagName == tagName) || config.matchClosing === false) {\n setStyle = \"tag\";\n return closeState;\n } else {\n setStyle = \"tag error\";\n return closeStateErr;\n }\n } else if (config.allowMissingTagName && type == \"endTag\") {\n setStyle = \"tag bracket\";\n return closeState(type, stream, state);\n } else {\n setStyle = \"error\";\n return closeStateErr;\n }\n }\n\n function closeState(type, _stream, state) {\n if (type != \"endTag\") {\n setStyle = \"error\";\n return closeState;\n }\n popContext(state);\n return baseState;\n }\n function closeStateErr(type, stream, state) {\n setStyle = \"error\";\n return closeState(type, stream, state);\n }\n\n function attrState(type, _stream, state) {\n if (type == \"word\") {\n setStyle = \"attribute\";\n return attrEqState;\n } else if (type == \"endTag\" || type == \"selfcloseTag\") {\n var tagName = state.tagName, tagStart = state.tagStart;\n state.tagName = state.tagStart = null;\n if (type == \"selfcloseTag\" ||\n config.autoSelfClosers.hasOwnProperty(lower(tagName))) {\n maybePopContext(state, tagName);\n } else {\n maybePopContext(state, tagName);\n state.context = new Context(state, tagName, tagStart == state.indented);\n }\n return baseState;\n }\n setStyle = \"error\";\n return attrState;\n }\n function attrEqState(type, stream, state) {\n if (type == \"equals\") return attrValueState;\n if (!config.allowMissing) setStyle = \"error\";\n return attrState(type, stream, state);\n }\n function attrValueState(type, stream, state) {\n if (type == \"string\") return attrContinuedState;\n if (type == \"word\" && config.allowUnquoted) {setStyle = \"string\"; return attrState;}\n setStyle = \"error\";\n return attrState(type, stream, state);\n }\n function attrContinuedState(type, stream, state) {\n if (type == \"string\") return attrContinuedState;\n return attrState(type, stream, state);\n }\n\n return {\n startState: function(baseIndent) {\n var state = {tokenize: inText,\n state: baseState,\n indented: baseIndent || 0,\n tagName: null, tagStart: null,\n context: null}\n if (baseIndent != null) state.baseIndent = baseIndent\n return state\n },\n\n token: function(stream, state) {\n if (!state.tagName && stream.sol())\n state.indented = stream.indentation();\n\n if (stream.eatSpace()) return null;\n type = null;\n var style = state.tokenize(stream, state);\n if ((style || type) && style != \"comment\") {\n setStyle = null;\n state.state = state.state(type || style, stream, state);\n if (setStyle)\n style = setStyle == \"error\" ? style + \" error\" : setStyle;\n }\n return style;\n },\n\n indent: function(state, textAfter, fullLine) {\n var context = state.context;\n // Indent multi-line strings (e.g. css).\n if (state.tokenize.isInAttribute) {\n if (state.tagStart == state.indented)\n return state.stringStartCol + 1;\n else\n return state.indented + indentUnit;\n }\n if (context && context.noIndent) return CodeMirror.Pass;\n if (state.tokenize != inTag && state.tokenize != inText)\n return fullLine ? fullLine.match(/^(\\s*)/)[0].length : 0;\n // Indent the starts of attribute names.\n if (state.tagName) {\n if (config.multilineTagIndentPastTag !== false)\n return state.tagStart + state.tagName.length + 2;\n else\n return state.tagStart + indentUnit * (config.multilineTagIndentFactor || 1);\n }\n if (config.alignCDATA && /<!\\[CDATA\\[/.test(textAfter)) return 0;\n var tagAfter = textAfter && /^<(\\/)?([\\w_:\\.-]*)/.exec(textAfter);\n if (tagAfter && tagAfter[1]) { // Closing tag spotted\n while (context) {\n if (context.tagName == tagAfter[2]) {\n context = context.prev;\n break;\n } else if (config.implicitlyClosed.hasOwnProperty(lower(context.tagName))) {\n context = context.prev;\n } else {\n break;\n }\n }\n } else if (tagAfter) { // Opening tag spotted\n while (context) {\n var grabbers = config.contextGrabbers[lower(context.tagName)];\n if (grabbers && grabbers.hasOwnProperty(lower(tagAfter[2])))\n context = context.prev;\n else\n break;\n }\n }\n while (context && context.prev && !context.startOfLine)\n context = context.prev;\n if (context) return context.indent + indentUnit;\n else return state.baseIndent || 0;\n },\n\n electricInput: /<\\/[\\s\\w:]+>$/,\n blockCommentStart: \"<!--\",\n blockCommentEnd: \"-->\",\n\n configuration: config.htmlMode ? \"html\" : \"xml\",\n helperType: config.htmlMode ? \"html\" : \"xml\",\n\n skipAttribute: function(state) {\n if (state.state == attrValueState)\n state.state = attrState\n },\n\n xmlCurrentTag: function(state) {\n return state.tagName ? {name: state.tagName, close: state.type == \"closeTag\"} : null\n },\n\n xmlCurrentContext: function(state) {\n var context = []\n for (var cx = state.context; cx; cx = cx.prev)\n context.push(cx.tagName)\n return context.reverse()\n }\n };\n});\n\nCodeMirror.defineMIME(\"text/xml\", \"xml\");\nCodeMirror.defineMIME(\"application/xml\", \"xml\");\nif (!CodeMirror.mimeModes.hasOwnProperty(\"text/html\"))\n CodeMirror.defineMIME(\"text/html\", {name: \"xml\", htmlMode: true});\n\n});\n", "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n\n CodeMirror.modeInfo = [\n {name: \"APL\", mime: \"text/apl\", mode: \"apl\", ext: [\"dyalog\", \"apl\"]},\n {name: \"PGP\", mimes: [\"application/pgp\", \"application/pgp-encrypted\", \"application/pgp-keys\", \"application/pgp-signature\"], mode: \"asciiarmor\", ext: [\"asc\", \"pgp\", \"sig\"]},\n {name: \"ASN.1\", mime: \"text/x-ttcn-asn\", mode: \"asn.1\", ext: [\"asn\", \"asn1\"]},\n {name: \"Asterisk\", mime: \"text/x-asterisk\", mode: \"asterisk\", file: /^extensions\\.conf$/i},\n {name: \"Brainfuck\", mime: \"text/x-brainfuck\", mode: \"brainfuck\", ext: [\"b\", \"bf\"]},\n {name: \"C\", mime: \"text/x-csrc\", mode: \"clike\", ext: [\"c\", \"h\", \"ino\"]},\n {name: \"C++\", mime: \"text/x-c++src\", mode: \"clike\", ext: [\"cpp\", \"c++\", \"cc\", \"cxx\", \"hpp\", \"h++\", \"hh\", \"hxx\"], alias: [\"cpp\"]},\n {name: \"Cobol\", mime: \"text/x-cobol\", mode: \"cobol\", ext: [\"cob\", \"cpy\", \"cbl\"]},\n {name: \"C#\", mime: \"text/x-csharp\", mode: \"clike\", ext: [\"cs\"], alias: [\"csharp\", \"cs\"]},\n {name: \"Clojure\", mime: \"text/x-clojure\", mode: \"clojure\", ext: [\"clj\", \"cljc\", \"cljx\"]},\n {name: \"ClojureScript\", mime: \"text/x-clojurescript\", mode: \"clojure\", ext: [\"cljs\"]},\n {name: \"Closure Stylesheets (GSS)\", mime: \"text/x-gss\", mode: \"css\", ext: [\"gss\"]},\n {name: \"CMake\", mime: \"text/x-cmake\", mode: \"cmake\", ext: [\"cmake\", \"cmake.in\"], file: /^CMakeLists\\.txt$/},\n {name: \"CoffeeScript\", mimes: [\"application/vnd.coffeescript\", \"text/coffeescript\", \"text/x-coffeescript\"], mode: \"coffeescript\", ext: [\"coffee\"], alias: [\"coffee\", \"coffee-script\"]},\n {name: \"Common Lisp\", mime: \"text/x-common-lisp\", mode: \"commonlisp\", ext: [\"cl\", \"lisp\", \"el\"], alias: [\"lisp\"]},\n {name: \"Cypher\", mime: \"application/x-cypher-query\", mode: \"cypher\", ext: [\"cyp\", \"cypher\"]},\n {name: \"Cython\", mime: \"text/x-cython\", mode: \"python\", ext: [\"pyx\", \"pxd\", \"pxi\"]},\n {name: \"Crystal\", mime: \"text/x-crystal\", mode: \"crystal\", ext: [\"cr\"]},\n {name: \"CSS\", mime: \"text/css\", mode: \"css\", ext: [\"css\"]},\n {name: \"CQL\", mime: \"text/x-cassandra\", mode: \"sql\", ext: [\"cql\"]},\n {name: \"D\", mime: \"text/x-d\", mode: \"d\", ext: [\"d\"]},\n {name: \"Dart\", mimes: [\"application/dart\", \"text/x-dart\"], mode: \"dart\", ext: [\"dart\"]},\n {name: \"diff\", mime: \"text/x-diff\", mode: \"diff\", ext: [\"diff\", \"patch\"]},\n {name: \"Django\", mime: \"text/x-django\", mode: \"django\"},\n {name: \"Dockerfile\", mime: \"text/x-dockerfile\", mode: \"dockerfile\", file: /^Dockerfile$/},\n {name: \"DTD\", mime: \"application/xml-dtd\", mode: \"dtd\", ext: [\"dtd\"]},\n {name: \"Dylan\", mime: \"text/x-dylan\", mode: \"dylan\", ext: [\"dylan\", \"dyl\", \"intr\"]},\n {name: \"EBNF\", mime: \"text/x-ebnf\", mode: \"ebnf\"},\n {name: \"ECL\", mime: \"text/x-ecl\", mode: \"ecl\", ext: [\"ecl\"]},\n {name: \"edn\", mime: \"application/edn\", mode: \"clojure\", ext: [\"edn\"]},\n {name: \"Eiffel\", mime: \"text/x-eiffel\", mode: \"eiffel\", ext: [\"e\"]},\n {name: \"Elm\", mime: \"text/x-elm\", mode: \"elm\", ext: [\"elm\"]},\n {name: \"Embedded JavaScript\", mime: \"application/x-ejs\", mode: \"htmlembedded\", ext: [\"ejs\"]},\n {name: \"Embedded Ruby\", mime: \"application/x-erb\", mode: \"htmlembedded\", ext: [\"erb\"]},\n {name: \"Erlang\", mime: \"text/x-erlang\", mode: \"erlang\", ext: [\"erl\"]},\n {name: \"Esper\", mime: \"text/x-esper\", mode: \"sql\"},\n {name: \"Factor\", mime: \"text/x-factor\", mode: \"factor\", ext: [\"factor\"]},\n {name: \"FCL\", mime: \"text/x-fcl\", mode: \"fcl\"},\n {name: \"Forth\", mime: \"text/x-forth\", mode: \"forth\", ext: [\"forth\", \"fth\", \"4th\"]},\n {name: \"Fortran\", mime: \"text/x-fortran\", mode: \"fortran\", ext: [\"f\", \"for\", \"f77\", \"f90\", \"f95\"]},\n {name: \"F#\", mime: \"text/x-fsharp\", mode: \"mllike\", ext: [\"fs\"], alias: [\"fsharp\"]},\n {name: \"Gas\", mime: \"text/x-gas\", mode: \"gas\", ext: [\"s\"]},\n {name: \"Gherkin\", mime: \"text/x-feature\", mode: \"gherkin\", ext: [\"feature\"]},\n {name: \"GitHub Flavored Markdown\", mime: \"text/x-gfm\", mode: \"gfm\", file: /^(readme|contributing|history)\\.md$/i},\n {name: \"Go\", mime: \"text/x-go\", mode: \"go\", ext: [\"go\"]},\n {name: \"Groovy\", mime: \"text/x-groovy\", mode: \"groovy\", ext: [\"groovy\", \"gradle\"], file: /^Jenkinsfile$/},\n {name: \"HAML\", mime: \"text/x-haml\", mode: \"haml\", ext: [\"haml\"]},\n {name: \"Haskell\", mime: \"text/x-haskell\", mode: \"haskell\", ext: [\"hs\"]},\n {name: \"Haskell (Literate)\", mime: \"text/x-literate-haskell\", mode: \"haskell-literate\", ext: [\"lhs\"]},\n {name: \"Haxe\", mime: \"text/x-haxe\", mode: \"haxe\", ext: [\"hx\"]},\n {name: \"HXML\", mime: \"text/x-hxml\", mode: \"haxe\", ext: [\"hxml\"]},\n {name: \"ASP.NET\", mime: \"application/x-aspx\", mode: \"htmlembedded\", ext: [\"aspx\"], alias: [\"asp\", \"aspx\"]},\n {name: \"HTML\", mime: \"text/html\", mode: \"htmlmixed\", ext: [\"html\", \"htm\", \"handlebars\", \"hbs\"], alias: [\"xhtml\"]},\n {name: \"HTTP\", mime: \"message/http\", mode: \"http\"},\n {name: \"IDL\", mime: \"text/x-idl\", mode: \"idl\", ext: [\"pro\"]},\n {name: \"Pug\", mime: \"text/x-pug\", mode: \"pug\", ext: [\"jade\", \"pug\"], alias: [\"jade\"]},\n {name: \"Java\", mime: \"text/x-java\", mode: \"clike\", ext: [\"java\"]},\n {name: \"Java Server Pages\", mime: \"application/x-jsp\", mode: \"htmlembedded\", ext: [\"jsp\"], alias: [\"jsp\"]},\n {name: \"JavaScript\", mimes: [\"text/javascript\", \"text/ecmascript\", \"application/javascript\", \"application/x-javascript\", \"application/ecmascript\"],\n mode: \"javascript\", ext: [\"js\"], alias: [\"ecmascript\", \"js\", \"node\"]},\n {name: \"JSON\", mimes: [\"application/json\", \"application/x-json\"], mode: \"javascript\", ext: [\"json\", \"map\"], alias: [\"json5\"]},\n {name: \"JSON-LD\", mime: \"application/ld+json\", mode: \"javascript\", ext: [\"jsonld\"], alias: [\"jsonld\"]},\n {name: \"JSX\", mime: \"text/jsx\", mode: \"jsx\", ext: [\"jsx\"]},\n {name: \"Jinja2\", mime: \"text/jinja2\", mode: \"jinja2\", ext: [\"j2\", \"jinja\", \"jinja2\"]},\n {name: \"Julia\", mime: \"text/x-julia\", mode: \"julia\", ext: [\"jl\"], alias: [\"jl\"]},\n {name: \"Kotlin\", mime: \"text/x-kotlin\", mode: \"clike\", ext: [\"kt\"]},\n {name: \"LESS\", mime: \"text/x-less\", mode: \"css\", ext: [\"less\"]},\n {name: \"LiveScript\", mime: \"text/x-livescript\", mode: \"livescript\", ext: [\"ls\"], alias: [\"ls\"]},\n {name: \"Lua\", mime: \"text/x-lua\", mode: \"lua\", ext: [\"lua\"]},\n {name: \"Markdown\", mime: \"text/x-markdown\", mode: \"markdown\", ext: [\"markdown\", \"md\", \"mkd\"]},\n {name: \"mIRC\", mime: \"text/mirc\", mode: \"mirc\"},\n {name: \"MariaDB SQL\", mime: \"text/x-mariadb\", mode: \"sql\"},\n {name: \"Mathematica\", mime: \"text/x-mathematica\", mode: \"mathematica\", ext: [\"m\", \"nb\", \"wl\", \"wls\"]},\n {name: \"Modelica\", mime: \"text/x-modelica\", mode: \"modelica\", ext: [\"mo\"]},\n {name: \"MUMPS\", mime: \"text/x-mumps\", mode: \"mumps\", ext: [\"mps\"]},\n {name: \"MS SQL\", mime: \"text/x-mssql\", mode: \"sql\"},\n {name: \"mbox\", mime: \"application/mbox\", mode: \"mbox\", ext: [\"mbox\"]},\n {name: \"MySQL\", mime: \"text/x-mysql\", mode: \"sql\"},\n {name: \"Nginx\", mime: \"text/x-nginx-conf\", mode: \"nginx\", file: /nginx.*\\.conf$/i},\n {name: \"NSIS\", mime: \"text/x-nsis\", mode: \"nsis\", ext: [\"nsh\", \"nsi\"]},\n {name: \"NTriples\", mimes: [\"application/n-triples\", \"application/n-quads\", \"text/n-triples\"],\n mode: \"ntriples\", ext: [\"nt\", \"nq\"]},\n {name: \"Objective-C\", mime: \"text/x-objectivec\", mode: \"clike\", ext: [\"m\"], alias: [\"objective-c\", \"objc\"]},\n {name: \"Objective-C++\", mime: \"text/x-objectivec++\", mode: \"clike\", ext: [\"mm\"], alias: [\"objective-c++\", \"objc++\"]},\n {name: \"OCaml\", mime: \"text/x-ocaml\", mode: \"mllike\", ext: [\"ml\", \"mli\", \"mll\", \"mly\"]},\n {name: \"Octave\", mime: \"text/x-octave\", mode: \"octave\", ext: [\"m\"]},\n {name: \"Oz\", mime: \"text/x-oz\", mode: \"oz\", ext: [\"oz\"]},\n {name: \"Pascal\", mime: \"text/x-pascal\", mode: \"pascal\", ext: [\"p\", \"pas\"]},\n {name: \"PEG.js\", mime: \"null\", mode: \"pegjs\", ext: [\"jsonld\"]},\n {name: \"Perl\", mime: \"text/x-perl\", mode: \"perl\", ext: [\"pl\", \"pm\"]},\n {name: \"PHP\", mimes: [\"text/x-php\", \"application/x-httpd-php\", \"application/x-httpd-php-open\"], mode: \"php\", ext: [\"php\", \"php3\", \"php4\", \"php5\", \"php7\", \"phtml\"]},\n {name: \"Pig\", mime: \"text/x-pig\", mode: \"pig\", ext: [\"pig\"]},\n {name: \"Plain Text\", mime: \"text/plain\", mode: \"null\", ext: [\"txt\", \"text\", \"conf\", \"def\", \"list\", \"log\"]},\n {name: \"PLSQL\", mime: \"text/x-plsql\", mode: \"sql\", ext: [\"pls\"]},\n {name: \"PostgreSQL\", mime: \"text/x-pgsql\", mode: \"sql\"},\n {name: \"PowerShell\", mime: \"application/x-powershell\", mode: \"powershell\", ext: [\"ps1\", \"psd1\", \"psm1\"]},\n {name: \"Properties files\", mime: \"text/x-properties\", mode: \"properties\", ext: [\"properties\", \"ini\", \"in\"], alias: [\"ini\", \"properties\"]},\n {name: \"ProtoBuf\", mime: \"text/x-protobuf\", mode: \"protobuf\", ext: [\"proto\"]},\n {name: \"Python\", mime: \"text/x-python\", mode: \"python\", ext: [\"BUILD\", \"bzl\", \"py\", \"pyw\"], file: /^(BUCK|BUILD)$/},\n {name: \"Puppet\", mime: \"text/x-puppet\", mode: \"puppet\", ext: [\"pp\"]},\n {name: \"Q\", mime: \"text/x-q\", mode: \"q\", ext: [\"q\"]},\n {name: \"R\", mime: \"text/x-rsrc\", mode: \"r\", ext: [\"r\", \"R\"], alias: [\"rscript\"]},\n {name: \"reStructuredText\", mime: \"text/x-rst\", mode: \"rst\", ext: [\"rst\"], alias: [\"rst\"]},\n {name: \"RPM Changes\", mime: \"text/x-rpm-changes\", mode: \"rpm\"},\n {name: \"RPM Spec\", mime: \"text/x-rpm-spec\", mode: \"rpm\", ext: [\"spec\"]},\n {name: \"Ruby\", mime: \"text/x-ruby\", mode: \"ruby\", ext: [\"rb\"], alias: [\"jruby\", \"macruby\", \"rake\", \"rb\", \"rbx\"]},\n {name: \"Rust\", mime: \"text/x-rustsrc\", mode: \"rust\", ext: [\"rs\"]},\n {name: \"SAS\", mime: \"text/x-sas\", mode: \"sas\", ext: [\"sas\"]},\n {name: \"Sass\", mime: \"text/x-sass\", mode: \"sass\", ext: [\"sass\"]},\n {name: \"Scala\", mime: \"text/x-scala\", mode: \"clike\", ext: [\"scala\"]},\n {name: \"Scheme\", mime: \"text/x-scheme\", mode: \"scheme\", ext: [\"scm\", \"ss\"]},\n {name: \"SCSS\", mime: \"text/x-scss\", mode: \"css\", ext: [\"scss\"]},\n {name: \"Shell\", mimes: [\"text/x-sh\", \"application/x-sh\"], mode: \"shell\", ext: [\"sh\", \"ksh\", \"bash\"], alias: [\"bash\", \"sh\", \"zsh\"], file: /^PKGBUILD$/},\n {name: \"Sieve\", mime: \"application/sieve\", mode: \"sieve\", ext: [\"siv\", \"sieve\"]},\n {name: \"Slim\", mimes: [\"text/x-slim\", \"application/x-slim\"], mode: \"slim\", ext: [\"slim\"]},\n {name: \"Smalltalk\", mime: \"text/x-stsrc\", mode: \"smalltalk\", ext: [\"st\"]},\n {name: \"Smarty\", mime: \"text/x-smarty\", mode: \"smarty\", ext: [\"tpl\"]},\n {name: \"Solr\", mime: \"text/x-solr\", mode: \"solr\"},\n {name: \"SML\", mime: \"text/x-sml\", mode: \"mllike\", ext: [\"sml\", \"sig\", \"fun\", \"smackspec\"]},\n {name: \"Soy\", mime: \"text/x-soy\", mode: \"soy\", ext: [\"soy\"], alias: [\"closure template\"]},\n {name: \"SPARQL\", mime: \"application/sparql-query\", mode: \"sparql\", ext: [\"rq\", \"sparql\"], alias: [\"sparul\"]},\n {name: \"Spreadsheet\", mime: \"text/x-spreadsheet\", mode: \"spreadsheet\", alias: [\"excel\", \"formula\"]},\n {name: \"SQL\", mime: \"text/x-sql\", mode: \"sql\", ext: [\"sql\"]},\n {name: \"SQLite\", mime: \"text/x-sqlite\", mode: \"sql\"},\n {name: \"Squirrel\", mime: \"text/x-squirrel\", mode: \"clike\", ext: [\"nut\"]},\n {name: \"Stylus\", mime: \"text/x-styl\", mode: \"stylus\", ext: [\"styl\"]},\n {name: \"Swift\", mime: \"text/x-swift\", mode: \"swift\", ext: [\"swift\"]},\n {name: \"sTeX\", mime: \"text/x-stex\", mode: \"stex\"},\n {name: \"LaTeX\", mime: \"text/x-latex\", mode: \"stex\", ext: [\"text\", \"ltx\", \"tex\"], alias: [\"tex\"]},\n {name: \"SystemVerilog\", mime: \"text/x-systemverilog\", mode: \"verilog\", ext: [\"v\", \"sv\", \"svh\"]},\n {name: \"Tcl\", mime: \"text/x-tcl\", mode: \"tcl\", ext: [\"tcl\"]},\n {name: \"Textile\", mime: \"text/x-textile\", mode: \"textile\", ext: [\"textile\"]},\n {name: \"TiddlyWiki\", mime: \"text/x-tiddlywiki\", mode: \"tiddlywiki\"},\n {name: \"Tiki wiki\", mime: \"text/tiki\", mode: \"tiki\"},\n {name: \"TOML\", mime: \"text/x-toml\", mode: \"toml\", ext: [\"toml\"]},\n {name: \"Tornado\", mime: \"text/x-tornado\", mode: \"tornado\"},\n {name: \"troff\", mime: \"text/troff\", mode: \"troff\", ext: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"]},\n {name: \"TTCN\", mime: \"text/x-ttcn\", mode: \"ttcn\", ext: [\"ttcn\", \"ttcn3\", \"ttcnpp\"]},\n {name: \"TTCN_CFG\", mime: \"text/x-ttcn-cfg\", mode: \"ttcn-cfg\", ext: [\"cfg\"]},\n {name: \"Turtle\", mime: \"text/turtle\", mode: \"turtle\", ext: [\"ttl\"]},\n {name: \"TypeScript\", mime: \"application/typescript\", mode: \"javascript\", ext: [\"ts\"], alias: [\"ts\"]},\n {name: \"TypeScript-JSX\", mime: \"text/typescript-jsx\", mode: \"jsx\", ext: [\"tsx\"], alias: [\"tsx\"]},\n {name: \"Twig\", mime: \"text/x-twig\", mode: \"twig\"},\n {name: \"Web IDL\", mime: \"text/x-webidl\", mode: \"webidl\", ext: [\"webidl\"]},\n {name: \"VB.NET\", mime: \"text/x-vb\", mode: \"vb\", ext: [\"vb\"]},\n {name: \"VBScript\", mime: \"text/vbscript\", mode: \"vbscript\", ext: [\"vbs\"]},\n {name: \"Velocity\", mime: \"text/velocity\", mode: \"velocity\", ext: [\"vtl\"]},\n {name: \"Verilog\", mime: \"text/x-verilog\", mode: \"verilog\", ext: [\"v\"]},\n {name: \"VHDL\", mime: \"text/x-vhdl\", mode: \"vhdl\", ext: [\"vhd\", \"vhdl\"]},\n {name: \"Vue.js Component\", mimes: [\"script/x-vue\", \"text/x-vue\"], mode: \"vue\", ext: [\"vue\"]},\n {name: \"XML\", mimes: [\"application/xml\", \"text/xml\"], mode: \"xml\", ext: [\"xml\", \"xsl\", \"xsd\", \"svg\"], alias: [\"rss\", \"wsdl\", \"xsd\"]},\n {name: \"XQuery\", mime: \"application/xquery\", mode: \"xquery\", ext: [\"xy\", \"xquery\"]},\n {name: \"Yacas\", mime: \"text/x-yacas\", mode: \"yacas\", ext: [\"ys\"]},\n {name: \"YAML\", mimes: [\"text/x-yaml\", \"text/yaml\"], mode: \"yaml\", ext: [\"yaml\", \"yml\"], alias: [\"yml\"]},\n {name: \"Z80\", mime: \"text/x-z80\", mode: \"z80\", ext: [\"z80\"]},\n {name: \"mscgen\", mime: \"text/x-mscgen\", mode: \"mscgen\", ext: [\"mscgen\", \"mscin\", \"msc\"]},\n {name: \"xu\", mime: \"text/x-xu\", mode: \"mscgen\", ext: [\"xu\"]},\n {name: \"msgenny\", mime: \"text/x-msgenny\", mode: \"mscgen\", ext: [\"msgenny\"]},\n {name: \"WebAssembly\", mime: \"text/webassembly\", mode: \"wast\", ext: [\"wat\", \"wast\"]},\n ];\n // Ensure all modes have a mime property for backwards compatibility\n for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n var info = CodeMirror.modeInfo[i];\n if (info.mimes) info.mime = info.mimes[0];\n }\n\n CodeMirror.findModeByMIME = function(mime) {\n mime = mime.toLowerCase();\n for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n var info = CodeMirror.modeInfo[i];\n if (info.mime == mime) return info;\n if (info.mimes) for (var j = 0; j < info.mimes.length; j++)\n if (info.mimes[j] == mime) return info;\n }\n if (/\\+xml$/.test(mime)) return CodeMirror.findModeByMIME(\"application/xml\")\n if (/\\+json$/.test(mime)) return CodeMirror.findModeByMIME(\"application/json\")\n };\n\n CodeMirror.findModeByExtension = function(ext) {\n ext = ext.toLowerCase();\n for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n var info = CodeMirror.modeInfo[i];\n if (info.ext) for (var j = 0; j < info.ext.length; j++)\n if (info.ext[j] == ext) return info;\n }\n };\n\n CodeMirror.findModeByFileName = function(filename) {\n for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n var info = CodeMirror.modeInfo[i];\n if (info.file && info.file.test(filename)) return info;\n }\n var dot = filename.lastIndexOf(\".\");\n var ext = dot > -1 && filename.substring(dot + 1, filename.length);\n if (ext) return CodeMirror.findModeByExtension(ext);\n };\n\n CodeMirror.findModeByName = function(name) {\n name = name.toLowerCase();\n for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n var info = CodeMirror.modeInfo[i];\n if (info.name.toLowerCase() == name) return info;\n if (info.alias) for (var j = 0; j < info.alias.length; j++)\n if (info.alias[j].toLowerCase() == name) return info;\n }\n };\n});\n", "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"), require(\"../xml/xml\"), require(\"../meta\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\", \"../xml/xml\", \"../meta\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode(\"markdown\", function(cmCfg, modeCfg) {\n\n var htmlMode = CodeMirror.getMode(cmCfg, \"text/html\");\n var htmlModeMissing = htmlMode.name == \"null\"\n\n function getMode(name) {\n if (CodeMirror.findModeByName) {\n var found = CodeMirror.findModeByName(name);\n if (found) name = found.mime || found.mimes[0];\n }\n var mode = CodeMirror.getMode(cmCfg, name);\n return mode.name == \"null\" ? null : mode;\n }\n\n // Should characters that affect highlighting be highlighted separate?\n // Does not include characters that will be output (such as `1.` and `-` for lists)\n if (modeCfg.highlightFormatting === undefined)\n modeCfg.highlightFormatting = false;\n\n // Maximum number of nested blockquotes. Set to 0 for infinite nesting.\n // Excess `>` will emit `error` token.\n if (modeCfg.maxBlockquoteDepth === undefined)\n modeCfg.maxBlockquoteDepth = 0;\n\n // Turn on task lists? (\"- [ ] \" and \"- [x] \")\n if (modeCfg.taskLists === undefined) modeCfg.taskLists = false;\n\n // Turn on strikethrough syntax\n if (modeCfg.strikethrough === undefined)\n modeCfg.strikethrough = false;\n\n if (modeCfg.emoji === undefined)\n modeCfg.emoji = false;\n\n if (modeCfg.fencedCodeBlockHighlighting === undefined)\n modeCfg.fencedCodeBlockHighlighting = true;\n\n if (modeCfg.fencedCodeBlockDefaultMode === undefined)\n modeCfg.fencedCodeBlockDefaultMode = 'text/plain';\n\n if (modeCfg.xml === undefined)\n modeCfg.xml = true;\n\n // Allow token types to be overridden by user-provided token types.\n if (modeCfg.tokenTypeOverrides === undefined)\n modeCfg.tokenTypeOverrides = {};\n\n var tokenTypes = {\n header: \"header\",\n code: \"comment\",\n quote: \"quote\",\n list1: \"variable-2\",\n list2: \"variable-3\",\n list3: \"keyword\",\n hr: \"hr\",\n image: \"image\",\n imageAltText: \"image-alt-text\",\n imageMarker: \"image-marker\",\n formatting: \"formatting\",\n linkInline: \"link\",\n linkEmail: \"link\",\n linkText: \"link\",\n linkHref: \"string\",\n em: \"em\",\n strong: \"strong\",\n strikethrough: \"strikethrough\",\n emoji: \"builtin\"\n };\n\n for (var tokenType in tokenTypes) {\n if (tokenTypes.hasOwnProperty(tokenType) && modeCfg.tokenTypeOverrides[tokenType]) {\n tokenTypes[tokenType] = modeCfg.tokenTypeOverrides[tokenType];\n }\n }\n\n var hrRE = /^([*\\-_])(?:\\s*\\1){2,}\\s*$/\n , listRE = /^(?:[*\\-+]|^[0-9]+([.)]))\\s+/\n , taskListRE = /^\\[(x| )\\](?=\\s)/i // Must follow listRE\n , atxHeaderRE = modeCfg.allowAtxHeaderWithoutSpace ? /^(#+)/ : /^(#+)(?: |$)/\n , setextHeaderRE = /^ {0,3}(?:\\={1,}|-{2,})\\s*$/\n , textRE = /^[^#!\\[\\]*_\\\\<>` \"'(~:]+/\n , fencedCodeRE = /^(~~~+|```+)[ \\t]*([\\w\\/+#-]*)[^\\n`]*$/\n , linkDefRE = /^\\s*\\[[^\\]]+?\\]:.*$/ // naive link-definition\n , punctuation = /[!\"#$%&'()*+,\\-.\\/:;<=>?@\\[\\\\\\]^_`{|}~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E42\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDF3C-\\uDF3E]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]/\n , expandedTab = \" \" // CommonMark specifies tab as 4 spaces\n\n function switchInline(stream, state, f) {\n state.f = state.inline = f;\n return f(stream, state);\n }\n\n function switchBlock(stream, state, f) {\n state.f = state.block = f;\n return f(stream, state);\n }\n\n function lineIsEmpty(line) {\n return !line || !/\\S/.test(line.string)\n }\n\n // Blocks\n\n function blankLine(state) {\n // Reset linkTitle state\n state.linkTitle = false;\n state.linkHref = false;\n state.linkText = false;\n // Reset EM state\n state.em = false;\n // Reset STRONG state\n state.strong = false;\n // Reset strikethrough state\n state.strikethrough = false;\n // Reset state.quote\n state.quote = 0;\n // Reset state.indentedCode\n state.indentedCode = false;\n if (state.f == htmlBlock) {\n var exit = htmlModeMissing\n if (!exit) {\n var inner = CodeMirror.innerMode(htmlMode, state.htmlState)\n exit = inner.mode.name == \"xml\" && inner.state.tagStart === null &&\n (!inner.state.context && inner.state.tokenize.isInText)\n }\n if (exit) {\n state.f = inlineNormal;\n state.block = blockNormal;\n state.htmlState = null;\n }\n }\n // Reset state.trailingSpace\n state.trailingSpace = 0;\n state.trailingSpaceNewLine = false;\n // Mark this line as blank\n state.prevLine = state.thisLine\n state.thisLine = {stream: null}\n return null;\n }\n\n function blockNormal(stream, state) {\n var firstTokenOnLine = stream.column() === state.indentation;\n var prevLineLineIsEmpty = lineIsEmpty(state.prevLine.stream);\n var prevLineIsIndentedCode = state.indentedCode;\n var prevLineIsHr = state.prevLine.hr;\n var prevLineIsList = state.list !== false;\n var maxNonCodeIndentation = (state.listStack[state.listStack.length - 1] || 0) + 3;\n\n state.indentedCode = false;\n\n var lineIndentation = state.indentation;\n // compute once per line (on first token)\n if (state.indentationDiff === null) {\n state.indentationDiff = state.indentation;\n if (prevLineIsList) {\n state.list = null;\n // While this list item's marker's indentation is less than the deepest\n // list item's content's indentation,pop the deepest list item\n // indentation off the stack, and update block indentation state\n while (lineIndentation < state.listStack[state.listStack.length - 1]) {\n state.listStack.pop();\n if (state.listStack.length) {\n state.indentation = state.listStack[state.listStack.length - 1];\n // less than the first list's indent -> the line is no longer a list\n } else {\n state.list = false;\n }\n }\n if (state.list !== false) {\n state.indentationDiff = lineIndentation - state.listStack[state.listStack.length - 1]\n }\n }\n }\n\n // not comprehensive (currently only for setext detection purposes)\n var allowsInlineContinuation = (\n !prevLineLineIsEmpty && !prevLineIsHr && !state.prevLine.header &&\n (!prevLineIsList || !prevLineIsIndentedCode) &&\n !state.prevLine.fencedCodeEnd\n );\n\n var isHr = (state.list === false || prevLineIsHr || prevLineLineIsEmpty) &&\n state.indentation <= maxNonCodeIndentation && stream.match(hrRE);\n\n var match = null;\n if (state.indentationDiff >= 4 && (prevLineIsIndentedCode || state.prevLine.fencedCodeEnd ||\n state.prevLine.header || prevLineLineIsEmpty)) {\n stream.skipToEnd();\n state.indentedCode = true;\n return tokenTypes.code;\n } else if (stream.eatSpace()) {\n return null;\n } else if (firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(atxHeaderRE)) && match[1].length <= 6) {\n state.quote = 0;\n state.header = match[1].length;\n state.thisLine.header = true;\n if (modeCfg.highlightFormatting) state.formatting = \"header\";\n state.f = state.inline;\n return getType(state);\n } else if (state.indentation <= maxNonCodeIndentation && stream.eat('>')) {\n state.quote = firstTokenOnLine ? 1 : state.quote + 1;\n if (modeCfg.highlightFormatting) state.formatting = \"quote\";\n stream.eatSpace();\n return getType(state);\n } else if (!isHr && !state.setext && firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(listRE))) {\n var listType = match[1] ? \"ol\" : \"ul\";\n\n state.indentation = lineIndentation + stream.current().length;\n state.list = true;\n state.quote = 0;\n\n // Add this list item's content's indentation to the stack\n state.listStack.push(state.indentation);\n // Reset inline styles which shouldn't propagate across list items\n state.em = false;\n state.strong = false;\n state.code = false;\n state.strikethrough = false;\n\n if (modeCfg.taskLists && stream.match(taskListRE, false)) {\n state.taskList = true;\n }\n state.f = state.inline;\n if (modeCfg.highlightFormatting) state.formatting = [\"list\", \"list-\" + listType];\n return getType(state);\n } else if (firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(fencedCodeRE, true))) {\n state.quote = 0;\n state.fencedEndRE = new RegExp(match[1] + \"+ *$\");\n // try switching mode\n state.localMode = modeCfg.fencedCodeBlockHighlighting && getMode(match[2] || modeCfg.fencedCodeBlockDefaultMode );\n if (state.localMode) state.localState = CodeMirror.startState(state.localMode);\n state.f = state.block = local;\n if (modeCfg.highlightFormatting) state.formatting = \"code-block\";\n state.code = -1\n return getType(state);\n // SETEXT has lowest block-scope precedence after HR, so check it after\n // the others (code, blockquote, list...)\n } else if (\n // if setext set, indicates line after ---/===\n state.setext || (\n // line before ---/===\n (!allowsInlineContinuation || !prevLineIsList) && !state.quote && state.list === false &&\n !state.code && !isHr && !linkDefRE.test(stream.string) &&\n (match = stream.lookAhead(1)) && (match = match.match(setextHeaderRE))\n )\n ) {\n if ( !state.setext ) {\n state.header = match[0].charAt(0) == '=' ? 1 : 2;\n state.setext = state.header;\n } else {\n state.header = state.setext;\n // has no effect on type so we can reset it now\n state.setext = 0;\n stream.skipToEnd();\n if (modeCfg.highlightFormatting) state.formatting = \"header\";\n }\n state.thisLine.header = true;\n state.f = state.inline;\n return getType(state);\n } else if (isHr) {\n stream.skipToEnd();\n state.hr = true;\n state.thisLine.hr = true;\n return tokenTypes.hr;\n } else if (stream.peek() === '[') {\n return switchInline(stream, state, footnoteLink);\n }\n\n return switchInline(stream, state, state.inline);\n }\n\n function htmlBlock(stream, state) {\n var style = htmlMode.token(stream, state.htmlState);\n if (!htmlModeMissing) {\n var inner = CodeMirror.innerMode(htmlMode, state.htmlState)\n if ((inner.mode.name == \"xml\" && inner.state.tagStart === null &&\n (!inner.state.context && inner.state.tokenize.isInText)) ||\n (state.md_inside && stream.current().indexOf(\">\") > -1)) {\n state.f = inlineNormal;\n state.block = blockNormal;\n state.htmlState = null;\n }\n }\n return style;\n }\n\n function local(stream, state) {\n var currListInd = state.listStack[state.listStack.length - 1] || 0;\n var hasExitedList = state.indentation < currListInd;\n var maxFencedEndInd = currListInd + 3;\n if (state.fencedEndRE && state.indentation <= maxFencedEndInd && (hasExitedList || stream.match(state.fencedEndRE))) {\n if (modeCfg.highlightFormatting) state.formatting = \"code-block\";\n var returnType;\n if (!hasExitedList) returnType = getType(state)\n state.localMode = state.localState = null;\n state.block = blockNormal;\n state.f = inlineNormal;\n state.fencedEndRE = null;\n state.code = 0\n state.thisLine.fencedCodeEnd = true;\n if (hasExitedList) return switchBlock(stream, state, state.block);\n return returnType;\n } else if (state.localMode) {\n return state.localMode.token(stream, state.localState);\n } else {\n stream.skipToEnd();\n return tokenTypes.code;\n }\n }\n\n // Inline\n function getType(state) {\n var styles = [];\n\n if (state.formatting) {\n styles.push(tokenTypes.formatting);\n\n if (typeof state.formatting === \"string\") state.formatting = [state.formatting];\n\n for (var i = 0; i < state.formatting.length; i++) {\n styles.push(tokenTypes.formatting + \"-\" + state.formatting[i]);\n\n if (state.formatting[i] === \"header\") {\n styles.push(tokenTypes.formatting + \"-\" + state.formatting[i] + \"-\" + state.header);\n }\n\n // Add `formatting-quote` and `formatting-quote-#` for blockquotes\n // Add `error` instead if the maximum blockquote nesting depth is passed\n if (state.formatting[i] === \"quote\") {\n if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) {\n styles.push(tokenTypes.formatting + \"-\" + state.formatting[i] + \"-\" + state.quote);\n } else {\n styles.push(\"error\");\n }\n }\n }\n }\n\n if (state.taskOpen) {\n styles.push(\"meta\");\n return styles.length ? styles.join(' ') : null;\n }\n if (state.taskClosed) {\n styles.push(\"property\");\n return styles.length ? styles.join(' ') : null;\n }\n\n if (state.linkHref) {\n styles.push(tokenTypes.linkHref, \"url\");\n } else { // Only apply inline styles to non-url text\n if (state.strong) { styles.push(tokenTypes.strong); }\n if (state.em) { styles.push(tokenTypes.em); }\n if (state.strikethrough) { styles.push(tokenTypes.strikethrough); }\n if (state.emoji) { styles.push(tokenTypes.emoji); }\n if (state.linkText) { styles.push(tokenTypes.linkText); }\n if (state.code) { styles.push(tokenTypes.code); }\n if (state.image) { styles.push(tokenTypes.image); }\n if (state.imageAltText) { styles.push(tokenTypes.imageAltText, \"link\"); }\n if (state.imageMarker) { styles.push(tokenTypes.imageMarker); }\n }\n\n if (state.header) { styles.push(tokenTypes.header, tokenTypes.header + \"-\" + state.header); }\n\n if (state.quote) {\n styles.push(tokenTypes.quote);\n\n // Add `quote-#` where the maximum for `#` is modeCfg.maxBlockquoteDepth\n if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) {\n styles.push(tokenTypes.quote + \"-\" + state.quote);\n } else {\n styles.push(tokenTypes.quote + \"-\" + modeCfg.maxBlockquoteDepth);\n }\n }\n\n if (state.list !== false) {\n var listMod = (state.listStack.length - 1) % 3;\n if (!listMod) {\n styles.push(tokenTypes.list1);\n } else if (listMod === 1) {\n styles.push(tokenTypes.list2);\n } else {\n styles.push(tokenTypes.list3);\n }\n }\n\n if (state.trailingSpaceNewLine) {\n styles.push(\"trailing-space-new-line\");\n } else if (state.trailingSpace) {\n styles.push(\"trailing-space-\" + (state.trailingSpace % 2 ? \"a\" : \"b\"));\n }\n\n return styles.length ? styles.join(' ') : null;\n }\n\n function handleText(stream, state) {\n if (stream.match(textRE, true)) {\n return getType(state);\n }\n return undefined;\n }\n\n function inlineNormal(stream, state) {\n var style = state.text(stream, state);\n if (typeof style !== 'undefined')\n return style;\n\n if (state.list) { // List marker (*, +, -, 1., etc)\n state.list = null;\n return getType(state);\n }\n\n if (state.taskList) {\n var taskOpen = stream.match(taskListRE, true)[1] === \" \";\n if (taskOpen) state.taskOpen = true;\n else state.taskClosed = true;\n if (modeCfg.highlightFormatting) state.formatting = \"task\";\n state.taskList = false;\n return getType(state);\n }\n\n state.taskOpen = false;\n state.taskClosed = false;\n\n if (state.header && stream.match(/^#+$/, true)) {\n if (modeCfg.highlightFormatting) state.formatting = \"header\";\n return getType(state);\n }\n\n var ch = stream.next();\n\n // Matches link titles present on next line\n if (state.linkTitle) {\n state.linkTitle = false;\n var matchCh = ch;\n if (ch === '(') {\n matchCh = ')';\n }\n matchCh = (matchCh+'').replace(/([.?*+^\\[\\]\\\\(){}|-])/g, \"\\\\$1\");\n var regex = '^\\\\s*(?:[^' + matchCh + '\\\\\\\\]+|\\\\\\\\\\\\\\\\|\\\\\\\\.)' + matchCh;\n if (stream.match(new RegExp(regex), true)) {\n return tokenTypes.linkHref;\n }\n }\n\n // If this block is changed, it may need to be updated in GFM mode\n if (ch === '`') {\n var previousFormatting = state.formatting;\n if (modeCfg.highlightFormatting) state.formatting = \"code\";\n stream.eatWhile('`');\n var count = stream.current().length\n if (state.code == 0 && (!state.quote || count == 1)) {\n state.code = count\n return getType(state)\n } else if (count == state.code) { // Must be exact\n var t = getType(state)\n state.code = 0\n return t\n } else {\n state.formatting = previousFormatting\n return getType(state)\n }\n } else if (state.code) {\n return getType(state);\n }\n\n if (ch === '\\\\') {\n stream.next();\n if (modeCfg.highlightFormatting) {\n var type = getType(state);\n var formattingEscape = tokenTypes.formatting + \"-escape\";\n return type ? type + \" \" + formattingEscape : formattingEscape;\n }\n }\n\n if (ch === '!' && stream.match(/\\[[^\\]]*\\] ?(?:\\(|\\[)/, false)) {\n state.imageMarker = true;\n state.image = true;\n if (modeCfg.highlightFormatting) state.formatting = \"image\";\n return getType(state);\n }\n\n if (ch === '[' && state.imageMarker && stream.match(/[^\\]]*\\](\\(.*?\\)| ?\\[.*?\\])/, false)) {\n state.imageMarker = false;\n state.imageAltText = true\n if (modeCfg.highlightFormatting) state.formatting = \"image\";\n return getType(state);\n }\n\n if (ch === ']' && state.imageAltText) {\n if (modeCfg.highlightFormatting) state.formatting = \"image\";\n var type = getType(state);\n state.imageAltText = false;\n state.image = false;\n state.inline = state.f = linkHref;\n return type;\n }\n\n if (ch === '[' && !state.image) {\n if (state.linkText && stream.match(/^.*?\\]/)) return getType(state)\n state.linkText = true;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n return getType(state);\n }\n\n if (ch === ']' && state.linkText) {\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var type = getType(state);\n state.linkText = false;\n state.inline = state.f = stream.match(/\\(.*?\\)| ?\\[.*?\\]/, false) ? linkHref : inlineNormal\n return type;\n }\n\n if (ch === '<' && stream.match(/^(https?|ftps?):\\/\\/(?:[^\\\\>]|\\\\.)+>/, false)) {\n state.f = state.inline = linkInline;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var type = getType(state);\n if (type){\n type += \" \";\n } else {\n type = \"\";\n }\n return type + tokenTypes.linkInline;\n }\n\n if (ch === '<' && stream.match(/^[^> \\\\]+@(?:[^\\\\>]|\\\\.)+>/, false)) {\n state.f = state.inline = linkInline;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var type = getType(state);\n if (type){\n type += \" \";\n } else {\n type = \"\";\n }\n return type + tokenTypes.linkEmail;\n }\n\n if (modeCfg.xml && ch === '<' && stream.match(/^(!--|\\?|!\\[CDATA\\[|[a-z][a-z0-9-]*(?:\\s+[a-z_:.\\-]+(?:\\s*=\\s*[^>]+)?)*\\s*(?:>|$))/i, false)) {\n var end = stream.string.indexOf(\">\", stream.pos);\n if (end != -1) {\n var atts = stream.string.substring(stream.start, end);\n if (/markdown\\s*=\\s*('|\"){0,1}1('|\"){0,1}/.test(atts)) state.md_inside = true;\n }\n stream.backUp(1);\n state.htmlState = CodeMirror.startState(htmlMode);\n return switchBlock(stream, state, htmlBlock);\n }\n\n if (modeCfg.xml && ch === '<' && stream.match(/^\\/\\w*?>/)) {\n state.md_inside = false;\n return \"tag\";\n } else if (ch === \"*\" || ch === \"_\") {\n var len = 1, before = stream.pos == 1 ? \" \" : stream.string.charAt(stream.pos - 2)\n while (len < 3 && stream.eat(ch)) len++\n var after = stream.peek() || \" \"\n // See http://spec.commonmark.org/0.27/#emphasis-and-strong-emphasis\n var leftFlanking = !/\\s/.test(after) && (!punctuation.test(after) || /\\s/.test(before) || punctuation.test(before))\n var rightFlanking = !/\\s/.test(before) && (!punctuation.test(before) || /\\s/.test(after) || punctuation.test(after))\n var setEm = null, setStrong = null\n if (len % 2) { // Em\n if (!state.em && leftFlanking && (ch === \"*\" || !rightFlanking || punctuation.test(before)))\n setEm = true\n else if (state.em == ch && rightFlanking && (ch === \"*\" || !leftFlanking || punctuation.test(after)))\n setEm = false\n }\n if (len > 1) { // Strong\n if (!state.strong && leftFlanking && (ch === \"*\" || !rightFlanking || punctuation.test(before)))\n setStrong = true\n else if (state.strong == ch && rightFlanking && (ch === \"*\" || !leftFlanking || punctuation.test(after)))\n setStrong = false\n }\n if (setStrong != null || setEm != null) {\n if (modeCfg.highlightFormatting) state.formatting = setEm == null ? \"strong\" : setStrong == null ? \"em\" : \"strong em\"\n if (setEm === true) state.em = ch\n if (setStrong === true) state.strong = ch\n var t = getType(state)\n if (setEm === false) state.em = false\n if (setStrong === false) state.strong = false\n return t\n }\n } else if (ch === ' ') {\n if (stream.eat('*') || stream.eat('_')) { // Probably surrounded by spaces\n if (stream.peek() === ' ') { // Surrounded by spaces, ignore\n return getType(state);\n } else { // Not surrounded by spaces, back up pointer\n stream.backUp(1);\n }\n }\n }\n\n if (modeCfg.strikethrough) {\n if (ch === '~' && stream.eatWhile(ch)) {\n if (state.strikethrough) {// Remove strikethrough\n if (modeCfg.highlightFormatting) state.formatting = \"strikethrough\";\n var t = getType(state);\n state.strikethrough = false;\n return t;\n } else if (stream.match(/^[^\\s]/, false)) {// Add strikethrough\n state.strikethrough = true;\n if (modeCfg.highlightFormatting) state.formatting = \"strikethrough\";\n return getType(state);\n }\n } else if (ch === ' ') {\n if (stream.match('~~', true)) { // Probably surrounded by space\n if (stream.peek() === ' ') { // Surrounded by spaces, ignore\n return getType(state);\n } else { // Not surrounded by spaces, back up pointer\n stream.backUp(2);\n }\n }\n }\n }\n\n if (modeCfg.emoji && ch === \":\" && stream.match(/^(?:[a-z_\\d+][a-z_\\d+-]*|\\-[a-z_\\d+][a-z_\\d+-]*):/)) {\n state.emoji = true;\n if (modeCfg.highlightFormatting) state.formatting = \"emoji\";\n var retType = getType(state);\n state.emoji = false;\n return retType;\n }\n\n if (ch === ' ') {\n if (stream.match(/^ +$/, false)) {\n state.trailingSpace++;\n } else if (state.trailingSpace) {\n state.trailingSpaceNewLine = true;\n }\n }\n\n return getType(state);\n }\n\n function linkInline(stream, state) {\n var ch = stream.next();\n\n if (ch === \">\") {\n state.f = state.inline = inlineNormal;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var type = getType(state);\n if (type){\n type += \" \";\n } else {\n type = \"\";\n }\n return type + tokenTypes.linkInline;\n }\n\n stream.match(/^[^>]+/, true);\n\n return tokenTypes.linkInline;\n }\n\n function linkHref(stream, state) {\n // Check if space, and return NULL if so (to avoid marking the space)\n if(stream.eatSpace()){\n return null;\n }\n var ch = stream.next();\n if (ch === '(' || ch === '[') {\n state.f = state.inline = getLinkHrefInside(ch === \"(\" ? \")\" : \"]\");\n if (modeCfg.highlightFormatting) state.formatting = \"link-string\";\n state.linkHref = true;\n return getType(state);\n }\n return 'error';\n }\n\n var linkRE = {\n \")\": /^(?:[^\\\\\\(\\)]|\\\\.|\\((?:[^\\\\\\(\\)]|\\\\.)*\\))*?(?=\\))/,\n \"]\": /^(?:[^\\\\\\[\\]]|\\\\.|\\[(?:[^\\\\\\[\\]]|\\\\.)*\\])*?(?=\\])/\n }\n\n function getLinkHrefInside(endChar) {\n return function(stream, state) {\n var ch = stream.next();\n\n if (ch === endChar) {\n state.f = state.inline = inlineNormal;\n if (modeCfg.highlightFormatting) state.formatting = \"link-string\";\n var returnState = getType(state);\n state.linkHref = false;\n return returnState;\n }\n\n stream.match(linkRE[endChar])\n state.linkHref = true;\n return getType(state);\n };\n }\n\n function footnoteLink(stream, state) {\n if (stream.match(/^([^\\]\\\\]|\\\\.)*\\]:/, false)) {\n state.f = footnoteLinkInside;\n stream.next(); // Consume [\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n state.linkText = true;\n return getType(state);\n }\n return switchInline(stream, state, inlineNormal);\n }\n\n function footnoteLinkInside(stream, state) {\n if (stream.match(']:', true)) {\n state.f = state.inline = footnoteUrl;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var returnType = getType(state);\n state.linkText = false;\n return returnType;\n }\n\n stream.match(/^([^\\]\\\\]|\\\\.)+/, true);\n\n return tokenTypes.linkText;\n }\n\n function footnoteUrl(stream, state) {\n // Check if space, and return NULL if so (to avoid marking the space)\n if(stream.eatSpace()){\n return null;\n }\n // Match URL\n stream.match(/^[^\\s]+/, true);\n // Check for link title\n if (stream.peek() === undefined) { // End of line, set flag to check next line\n state.linkTitle = true;\n } else { // More content on line, check if link title\n stream.match(/^(?:\\s+(?:\"(?:[^\"\\\\]|\\\\.)+\"|'(?:[^'\\\\]|\\\\.)+'|\\((?:[^)\\\\]|\\\\.)+\\)))?/, true);\n }\n state.f = state.inline = inlineNormal;\n return tokenTypes.linkHref + \" url\";\n }\n\n var mode = {\n startState: function() {\n return {\n f: blockNormal,\n\n prevLine: {stream: null},\n thisLine: {stream: null},\n\n block: blockNormal,\n htmlState: null,\n indentation: 0,\n\n inline: inlineNormal,\n text: handleText,\n\n formatting: false,\n linkText: false,\n linkHref: false,\n linkTitle: false,\n code: 0,\n em: false,\n strong: false,\n header: 0,\n setext: 0,\n hr: false,\n taskList: false,\n list: false,\n listStack: [],\n quote: 0,\n trailingSpace: 0,\n trailingSpaceNewLine: false,\n strikethrough: false,\n emoji: false,\n fencedEndRE: null\n };\n },\n\n copyState: function(s) {\n return {\n f: s.f,\n\n prevLine: s.prevLine,\n thisLine: s.thisLine,\n\n block: s.block,\n htmlState: s.htmlState && CodeMirror.copyState(htmlMode, s.htmlState),\n indentation: s.indentation,\n\n localMode: s.localMode,\n localState: s.localMode ? CodeMirror.copyState(s.localMode, s.localState) : null,\n\n inline: s.inline,\n text: s.text,\n formatting: false,\n linkText: s.linkText,\n linkTitle: s.linkTitle,\n linkHref: s.linkHref,\n code: s.code,\n em: s.em,\n strong: s.strong,\n strikethrough: s.strikethrough,\n emoji: s.emoji,\n header: s.header,\n setext: s.setext,\n hr: s.hr,\n taskList: s.taskList,\n list: s.list,\n listStack: s.listStack.slice(0),\n quote: s.quote,\n indentedCode: s.indentedCode,\n trailingSpace: s.trailingSpace,\n trailingSpaceNewLine: s.trailingSpaceNewLine,\n md_inside: s.md_inside,\n fencedEndRE: s.fencedEndRE\n };\n },\n\n token: function(stream, state) {\n\n // Reset state.formatting\n state.formatting = false;\n\n if (stream != state.thisLine.stream) {\n state.header = 0;\n state.hr = false;\n\n if (stream.match(/^\\s*$/, true)) {\n blankLine(state);\n return null;\n }\n\n state.prevLine = state.thisLine\n state.thisLine = {stream: stream}\n\n // Reset state.taskList\n state.taskList = false;\n\n // Reset state.trailingSpace\n state.trailingSpace = 0;\n state.trailingSpaceNewLine = false;\n\n if (!state.localState) {\n state.f = state.block;\n if (state.f != htmlBlock) {\n var indentation = stream.match(/^\\s*/, true)[0].replace(/\\t/g, expandedTab).length;\n state.indentation = indentation;\n state.indentationDiff = null;\n if (indentation > 0) return null;\n }\n }\n }\n return state.f(stream, state);\n },\n\n innerMode: function(state) {\n if (state.block == htmlBlock) return {state: state.htmlState, mode: htmlMode};\n if (state.localState) return {state: state.localState, mode: state.localMode};\n return {state: state, mode: mode};\n },\n\n indent: function(state, textAfter, line) {\n if (state.block == htmlBlock && htmlMode.indent) return htmlMode.indent(state.htmlState, textAfter, line)\n if (state.localState && state.localMode.indent) return state.localMode.indent(state.localState, textAfter, line)\n return CodeMirror.Pass\n },\n\n blankLine: blankLine,\n\n getType: getType,\n\n blockCommentStart: \"<!--\",\n blockCommentEnd: \"-->\",\n closeBrackets: \"()[]{}''\\\"\\\"``\",\n fold: \"markdown\"\n };\n return mode;\n}, \"xml\");\n\nCodeMirror.defineMIME(\"text/markdown\", \"markdown\");\n\nCodeMirror.defineMIME(\"text/x-markdown\", \"markdown\");\n\n});\n", "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n// Utility function that allows modes to be combined. The mode given\n// as the base argument takes care of most of the normal mode\n// functionality, but a second (typically simple) mode is used, which\n// can override the style of text. Both modes get to parse all of the\n// text, but when both assign a non-null style to a piece of code, the\n// overlay wins, unless the combine argument was true and not overridden,\n// or state.overlay.combineTokens was true, in which case the styles are\n// combined.\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.overlayMode = function(base, overlay, combine) {\n return {\n startState: function() {\n return {\n base: CodeMirror.startState(base),\n overlay: CodeMirror.startState(overlay),\n basePos: 0, baseCur: null,\n overlayPos: 0, overlayCur: null,\n streamSeen: null\n };\n },\n copyState: function(state) {\n return {\n base: CodeMirror.copyState(base, state.base),\n overlay: CodeMirror.copyState(overlay, state.overlay),\n basePos: state.basePos, baseCur: null,\n overlayPos: state.overlayPos, overlayCur: null\n };\n },\n\n token: function(stream, state) {\n if (stream != state.streamSeen ||\n Math.min(state.basePos, state.overlayPos) < stream.start) {\n state.streamSeen = stream;\n state.basePos = state.overlayPos = stream.start;\n }\n\n if (stream.start == state.basePos) {\n state.baseCur = base.token(stream, state.base);\n state.basePos = stream.pos;\n }\n if (stream.start == state.overlayPos) {\n stream.pos = stream.start;\n state.overlayCur = overlay.token(stream, state.overlay);\n state.overlayPos = stream.pos;\n }\n stream.pos = Math.min(state.basePos, state.overlayPos);\n\n // state.overlay.combineTokens always takes precedence over combine,\n // unless set to null\n if (state.overlayCur == null) return state.baseCur;\n else if (state.baseCur != null &&\n state.overlay.combineTokens ||\n combine && state.overlay.combineTokens == null)\n return state.baseCur + \" \" + state.overlayCur;\n else return state.overlayCur;\n },\n\n indent: base.indent && function(state, textAfter, line) {\n return base.indent(state.base, textAfter, line);\n },\n electricChars: base.electricChars,\n\n innerMode: function(state) { return {state: state.base, mode: base}; },\n\n blankLine: function(state) {\n var baseToken, overlayToken;\n if (base.blankLine) baseToken = base.blankLine(state.base);\n if (overlay.blankLine) overlayToken = overlay.blankLine(state.overlay);\n\n return overlayToken == null ?\n baseToken :\n (combine && baseToken != null ? baseToken + \" \" + overlayToken : overlayToken);\n }\n };\n};\n\n});\n", "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n CodeMirror.defineOption(\"placeholder\", \"\", function(cm, val, old) {\n var prev = old && old != CodeMirror.Init;\n if (val && !prev) {\n cm.on(\"blur\", onBlur);\n cm.on(\"change\", onChange);\n cm.on(\"swapDoc\", onChange);\n CodeMirror.on(cm.getInputField(), \"compositionupdate\", cm.state.placeholderCompose = function() { onComposition(cm) })\n onChange(cm);\n } else if (!val && prev) {\n cm.off(\"blur\", onBlur);\n cm.off(\"change\", onChange);\n cm.off(\"swapDoc\", onChange);\n CodeMirror.off(cm.getInputField(), \"compositionupdate\", cm.state.placeholderCompose)\n clearPlaceholder(cm);\n var wrapper = cm.getWrapperElement();\n wrapper.className = wrapper.className.replace(\" CodeMirror-empty\", \"\");\n }\n\n if (val && !cm.hasFocus()) onBlur(cm);\n });\n\n function clearPlaceholder(cm) {\n if (cm.state.placeholder) {\n cm.state.placeholder.parentNode.removeChild(cm.state.placeholder);\n cm.state.placeholder = null;\n }\n }\n function setPlaceholder(cm) {\n clearPlaceholder(cm);\n var elt = cm.state.placeholder = document.createElement(\"pre\");\n elt.style.cssText = \"height: 0; overflow: visible\";\n elt.style.direction = cm.getOption(\"direction\");\n elt.className = \"CodeMirror-placeholder CodeMirror-line-like\";\n var placeHolder = cm.getOption(\"placeholder\")\n if (typeof placeHolder == \"string\") placeHolder = document.createTextNode(placeHolder)\n elt.appendChild(placeHolder)\n cm.display.lineSpace.insertBefore(elt, cm.display.lineSpace.firstChild);\n }\n\n function onComposition(cm) {\n setTimeout(function() {\n var empty = false\n if (cm.lineCount() == 1) {\n var input = cm.getInputField()\n empty = input.nodeName == \"TEXTAREA\" ? !cm.getLine(0).length\n : !/[^\\u200b]/.test(input.querySelector(\".CodeMirror-line\").textContent)\n }\n if (empty) setPlaceholder(cm)\n else clearPlaceholder(cm)\n }, 20)\n }\n\n function onBlur(cm) {\n if (isEmpty(cm)) setPlaceholder(cm);\n }\n function onChange(cm) {\n var wrapper = cm.getWrapperElement(), empty = isEmpty(cm);\n wrapper.className = wrapper.className.replace(\" CodeMirror-empty\", \"\") + (empty ? \" CodeMirror-empty\" : \"\");\n\n if (empty) setPlaceholder(cm);\n else clearPlaceholder(cm);\n }\n\n function isEmpty(cm) {\n return (cm.lineCount() === 1) && (cm.getLine(0) === \"\");\n }\n});\n", "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"))\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod)\n else // Plain browser env\n mod(CodeMirror)\n})(function(CodeMirror) {\n \"use strict\"\n\n CodeMirror.defineOption(\"autoRefresh\", false, function(cm, val) {\n if (cm.state.autoRefresh) {\n stopListening(cm, cm.state.autoRefresh)\n cm.state.autoRefresh = null\n }\n if (val && cm.display.wrapper.offsetHeight == 0)\n startListening(cm, cm.state.autoRefresh = {delay: val.delay || 250})\n })\n\n function startListening(cm, state) {\n function check() {\n if (cm.display.wrapper.offsetHeight) {\n stopListening(cm, state)\n if (cm.display.lastWrapHeight != cm.display.wrapper.clientHeight)\n cm.refresh()\n } else {\n state.timeout = setTimeout(check, state.delay)\n }\n }\n state.timeout = setTimeout(check, state.delay)\n state.hurry = function() {\n clearTimeout(state.timeout)\n state.timeout = setTimeout(check, 50)\n }\n CodeMirror.on(window, \"mouseup\", state.hurry)\n CodeMirror.on(window, \"keyup\", state.hurry)\n }\n\n function stopListening(_cm, state) {\n clearTimeout(state.timeout)\n CodeMirror.off(window, \"mouseup\", state.hurry)\n CodeMirror.off(window, \"keyup\", state.hurry)\n }\n});\n", "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n// Because sometimes you need to mark the selected *text*.\n//\n// Adds an option 'styleSelectedText' which, when enabled, gives\n// selected text the CSS class given as option value, or\n// \"CodeMirror-selectedtext\" when the value is not a string.\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n\n CodeMirror.defineOption(\"styleSelectedText\", false, function(cm, val, old) {\n var prev = old && old != CodeMirror.Init;\n if (val && !prev) {\n cm.state.markedSelection = [];\n cm.state.markedSelectionStyle = typeof val == \"string\" ? val : \"CodeMirror-selectedtext\";\n reset(cm);\n cm.on(\"cursorActivity\", onCursorActivity);\n cm.on(\"change\", onChange);\n } else if (!val && prev) {\n cm.off(\"cursorActivity\", onCursorActivity);\n cm.off(\"change\", onChange);\n clear(cm);\n cm.state.markedSelection = cm.state.markedSelectionStyle = null;\n }\n });\n\n function onCursorActivity(cm) {\n if (cm.state.markedSelection)\n cm.operation(function() { update(cm); });\n }\n\n function onChange(cm) {\n if (cm.state.markedSelection && cm.state.markedSelection.length)\n cm.operation(function() { clear(cm); });\n }\n\n var CHUNK_SIZE = 8;\n var Pos = CodeMirror.Pos;\n var cmp = CodeMirror.cmpPos;\n\n function coverRange(cm, from, to, addAt) {\n if (cmp(from, to) == 0) return;\n var array = cm.state.markedSelection;\n var cls = cm.state.markedSelectionStyle;\n for (var line = from.line;;) {\n var start = line == from.line ? from : Pos(line, 0);\n var endLine = line + CHUNK_SIZE, atEnd = endLine >= to.line;\n var end = atEnd ? to : Pos(endLine, 0);\n var mark = cm.markText(start, end, {className: cls});\n if (addAt == null) array.push(mark);\n else array.splice(addAt++, 0, mark);\n if (atEnd) break;\n line = endLine;\n }\n }\n\n function clear(cm) {\n var array = cm.state.markedSelection;\n for (var i = 0; i < array.length; ++i) array[i].clear();\n array.length = 0;\n }\n\n function reset(cm) {\n clear(cm);\n var ranges = cm.listSelections();\n for (var i = 0; i < ranges.length; i++)\n coverRange(cm, ranges[i].from(), ranges[i].to());\n }\n\n function update(cm) {\n if (!cm.somethingSelected()) return clear(cm);\n if (cm.listSelections().length > 1) return reset(cm);\n\n var from = cm.getCursor(\"start\"), to = cm.getCursor(\"end\");\n\n var array = cm.state.markedSelection;\n if (!array.length) return coverRange(cm, from, to);\n\n var coverStart = array[0].find(), coverEnd = array[array.length - 1].find();\n if (!coverStart || !coverEnd || to.line - from.line <= CHUNK_SIZE ||\n cmp(from, coverEnd.to) >= 0 || cmp(to, coverStart.from) <= 0)\n return reset(cm);\n\n while (cmp(from, coverStart.from) > 0) {\n array.shift().clear();\n coverStart = array[0].find();\n }\n if (cmp(from, coverStart.from) < 0) {\n if (coverStart.to.line - from.line < CHUNK_SIZE) {\n array.shift().clear();\n coverRange(cm, from, coverStart.to, 0);\n } else {\n coverRange(cm, from, coverStart.from, 0);\n }\n }\n\n while (cmp(to, coverEnd.to) < 0) {\n array.pop().clear();\n coverEnd = array[array.length - 1].find();\n }\n if (cmp(to, coverEnd.to) > 0) {\n if (to.line - coverEnd.from.line < CHUNK_SIZE) {\n array.pop().clear();\n coverRange(cm, coverEnd.from, to);\n } else {\n coverRange(cm, coverEnd.to, to);\n }\n }\n }\n});\n", "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"))\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod)\n else // Plain browser env\n mod(CodeMirror)\n})(function(CodeMirror) {\n \"use strict\"\n var Pos = CodeMirror.Pos\n\n function regexpFlags(regexp) {\n var flags = regexp.flags\n return flags != null ? flags : (regexp.ignoreCase ? \"i\" : \"\")\n + (regexp.global ? \"g\" : \"\")\n + (regexp.multiline ? \"m\" : \"\")\n }\n\n function ensureFlags(regexp, flags) {\n var current = regexpFlags(regexp), target = current\n for (var i = 0; i < flags.length; i++) if (target.indexOf(flags.charAt(i)) == -1)\n target += flags.charAt(i)\n return current == target ? regexp : new RegExp(regexp.source, target)\n }\n\n function maybeMultiline(regexp) {\n return /\\\\s|\\\\n|\\n|\\\\W|\\\\D|\\[\\^/.test(regexp.source)\n }\n\n function searchRegexpForward(doc, regexp, start) {\n regexp = ensureFlags(regexp, \"g\")\n for (var line = start.line, ch = start.ch, last = doc.lastLine(); line <= last; line++, ch = 0) {\n regexp.lastIndex = ch\n var string = doc.getLine(line), match = regexp.exec(string)\n if (match)\n return {from: Pos(line, match.index),\n to: Pos(line, match.index + match[0].length),\n match: match}\n }\n }\n\n function searchRegexpForwardMultiline(doc, regexp, start) {\n if (!maybeMultiline(regexp)) return searchRegexpForward(doc, regexp, start)\n\n regexp = ensureFlags(regexp, \"gm\")\n var string, chunk = 1\n for (var line = start.line, last = doc.lastLine(); line <= last;) {\n // This grows the search buffer in exponentially-sized chunks\n // between matches, so that nearby matches are fast and don't\n // require concatenating the whole document (in case we're\n // searching for something that has tons of matches), but at the\n // same time, the amount of retries is limited.\n for (var i = 0; i < chunk; i++) {\n if (line > last) break\n var curLine = doc.getLine(line++)\n string = string == null ? curLine : string + \"\\n\" + curLine\n }\n chunk = chunk * 2\n regexp.lastIndex = start.ch\n var match = regexp.exec(string)\n if (match) {\n var before = string.slice(0, match.index).split(\"\\n\"), inside = match[0].split(\"\\n\")\n var startLine = start.line + before.length - 1, startCh = before[before.length - 1].length\n return {from: Pos(startLine, startCh),\n to: Pos(startLine + inside.length - 1,\n inside.length == 1 ? startCh + inside[0].length : inside[inside.length - 1].length),\n match: match}\n }\n }\n }\n\n function lastMatchIn(string, regexp, endMargin) {\n var match, from = 0\n while (from <= string.length) {\n regexp.lastIndex = from\n var newMatch = regexp.exec(string)\n if (!newMatch) break\n var end = newMatch.index + newMatch[0].length\n if (end > string.length - endMargin) break\n if (!match || end > match.index + match[0].length)\n match = newMatch\n from = newMatch.index + 1\n }\n return match\n }\n\n function searchRegexpBackward(doc, regexp, start) {\n regexp = ensureFlags(regexp, \"g\")\n for (var line = start.line, ch = start.ch, first = doc.firstLine(); line >= first; line--, ch = -1) {\n var string = doc.getLine(line)\n var match = lastMatchIn(string, regexp, ch < 0 ? 0 : string.length - ch)\n if (match)\n return {from: Pos(line, match.index),\n to: Pos(line, match.index + match[0].length),\n match: match}\n }\n }\n\n function searchRegexpBackwardMultiline(doc, regexp, start) {\n if (!maybeMultiline(regexp)) return searchRegexpBackward(doc, regexp, start)\n regexp = ensureFlags(regexp, \"gm\")\n var string, chunkSize = 1, endMargin = doc.getLine(start.line).length - start.ch\n for (var line = start.line, first = doc.firstLine(); line >= first;) {\n for (var i = 0; i < chunkSize && line >= first; i++) {\n var curLine = doc.getLine(line--)\n string = string == null ? curLine : curLine + \"\\n\" + string\n }\n chunkSize *= 2\n\n var match = lastMatchIn(string, regexp, endMargin)\n if (match) {\n var before = string.slice(0, match.index).split(\"\\n\"), inside = match[0].split(\"\\n\")\n var startLine = line + before.length, startCh = before[before.length - 1].length\n return {from: Pos(startLine, startCh),\n to: Pos(startLine + inside.length - 1,\n inside.length == 1 ? startCh + inside[0].length : inside[inside.length - 1].length),\n match: match}\n }\n }\n }\n\n var doFold, noFold\n if (String.prototype.normalize) {\n doFold = function(str) { return str.normalize(\"NFD\").toLowerCase() }\n noFold = function(str) { return str.normalize(\"NFD\") }\n } else {\n doFold = function(str) { return str.toLowerCase() }\n noFold = function(str) { return str }\n }\n\n // Maps a position in a case-folded line back to a position in the original line\n // (compensating for codepoints increasing in number during folding)\n function adjustPos(orig, folded, pos, foldFunc) {\n if (orig.length == folded.length) return pos\n for (var min = 0, max = pos + Math.max(0, orig.length - folded.length);;) {\n if (min == max) return min\n var mid = (min + max) >> 1\n var len = foldFunc(orig.slice(0, mid)).length\n if (len == pos) return mid\n else if (len > pos) max = mid\n else min = mid + 1\n }\n }\n\n function searchStringForward(doc, query, start, caseFold) {\n // Empty string would match anything and never progress, so we\n // define it to match nothing instead.\n if (!query.length) return null\n var fold = caseFold ? doFold : noFold\n var lines = fold(query).split(/\\r|\\n\\r?/)\n\n search: for (var line = start.line, ch = start.ch, last = doc.lastLine() + 1 - lines.length; line <= last; line++, ch = 0) {\n var orig = doc.getLine(line).slice(ch), string = fold(orig)\n if (lines.length == 1) {\n var found = string.indexOf(lines[0])\n if (found == -1) continue search\n var start = adjustPos(orig, string, found, fold) + ch\n return {from: Pos(line, adjustPos(orig, string, found, fold) + ch),\n to: Pos(line, adjustPos(orig, string, found + lines[0].length, fold) + ch)}\n } else {\n var cutFrom = string.length - lines[0].length\n if (string.slice(cutFrom) != lines[0]) continue search\n for (var i = 1; i < lines.length - 1; i++)\n if (fold(doc.getLine(line + i)) != lines[i]) continue search\n var end = doc.getLine(line + lines.length - 1), endString = fold(end), lastLine = lines[lines.length - 1]\n if (endString.slice(0, lastLine.length) != lastLine) continue search\n return {from: Pos(line, adjustPos(orig, string, cutFrom, fold) + ch),\n to: Pos(line + lines.length - 1, adjustPos(end, endString, lastLine.length, fold))}\n }\n }\n }\n\n function searchStringBackward(doc, query, start, caseFold) {\n if (!query.length) return null\n var fold = caseFold ? doFold : noFold\n var lines = fold(query).split(/\\r|\\n\\r?/)\n\n search: for (var line = start.line, ch = start.ch, first = doc.firstLine() - 1 + lines.length; line >= first; line--, ch = -1) {\n var orig = doc.getLine(line)\n if (ch > -1) orig = orig.slice(0, ch)\n var string = fold(orig)\n if (lines.length == 1) {\n var found = string.lastIndexOf(lines[0])\n if (found == -1) continue search\n return {from: Pos(line, adjustPos(orig, string, found, fold)),\n to: Pos(line, adjustPos(orig, string, found + lines[0].length, fold))}\n } else {\n var lastLine = lines[lines.length - 1]\n if (string.slice(0, lastLine.length) != lastLine) continue search\n for (var i = 1, start = line - lines.length + 1; i < lines.length - 1; i++)\n if (fold(doc.getLine(start + i)) != lines[i]) continue search\n var top = doc.getLine(line + 1 - lines.length), topString = fold(top)\n if (topString.slice(topString.length - lines[0].length) != lines[0]) continue search\n return {from: Pos(line + 1 - lines.length, adjustPos(top, topString, top.length - lines[0].length, fold)),\n to: Pos(line, adjustPos(orig, string, lastLine.length, fold))}\n }\n }\n }\n\n function SearchCursor(doc, query, pos, options) {\n this.atOccurrence = false\n this.afterEmptyMatch = false\n this.doc = doc\n pos = pos ? doc.clipPos(pos) : Pos(0, 0)\n this.pos = {from: pos, to: pos}\n\n var caseFold\n if (typeof options == \"object\") {\n caseFold = options.caseFold\n } else { // Backwards compat for when caseFold was the 4th argument\n caseFold = options\n options = null\n }\n\n if (typeof query == \"string\") {\n if (caseFold == null) caseFold = false\n this.matches = function(reverse, pos) {\n return (reverse ? searchStringBackward : searchStringForward)(doc, query, pos, caseFold)\n }\n } else {\n query = ensureFlags(query, \"gm\")\n if (!options || options.multiline !== false)\n this.matches = function(reverse, pos) {\n return (reverse ? searchRegexpBackwardMultiline : searchRegexpForwardMultiline)(doc, query, pos)\n }\n else\n this.matches = function(reverse, pos) {\n return (reverse ? searchRegexpBackward : searchRegexpForward)(doc, query, pos)\n }\n }\n }\n\n SearchCursor.prototype = {\n findNext: function() {return this.find(false)},\n findPrevious: function() {return this.find(true)},\n\n find: function(reverse) {\n var head = this.doc.clipPos(reverse ? this.pos.from : this.pos.to);\n if (this.afterEmptyMatch && this.atOccurrence) {\n // do not return the same 0 width match twice\n head = Pos(head.line, head.ch)\n if (reverse) {\n head.ch--;\n if (head.ch < 0) {\n head.line--;\n head.ch = (this.doc.getLine(head.line) || \"\").length;\n }\n } else {\n head.ch++;\n if (head.ch > (this.doc.getLine(head.line) || \"\").length) {\n head.ch = 0;\n head.line++;\n }\n }\n if (CodeMirror.cmpPos(head, this.doc.clipPos(head)) != 0) {\n return this.atOccurrence = false\n }\n }\n var result = this.matches(reverse, head)\n this.afterEmptyMatch = result && CodeMirror.cmpPos(result.from, result.to) == 0\n\n if (result) {\n this.pos = result\n this.atOccurrence = true\n return this.pos.match || true\n } else {\n var end = Pos(reverse ? this.doc.firstLine() : this.doc.lastLine() + 1, 0)\n this.pos = {from: end, to: end}\n return this.atOccurrence = false\n }\n },\n\n from: function() {if (this.atOccurrence) return this.pos.from},\n to: function() {if (this.atOccurrence) return this.pos.to},\n\n replace: function(newText, origin) {\n if (!this.atOccurrence) return\n var lines = CodeMirror.splitLines(newText)\n this.doc.replaceRange(lines, this.pos.from, this.pos.to, origin)\n this.pos.to = Pos(this.pos.from.line + lines.length - 1,\n lines[lines.length - 1].length + (lines.length == 1 ? this.pos.from.ch : 0))\n }\n }\n\n CodeMirror.defineExtension(\"getSearchCursor\", function(query, pos, caseFold) {\n return new SearchCursor(this.doc, query, pos, caseFold)\n })\n CodeMirror.defineDocExtension(\"getSearchCursor\", function(query, pos, caseFold) {\n return new SearchCursor(this, query, pos, caseFold)\n })\n\n CodeMirror.defineExtension(\"selectMatches\", function(query, caseFold) {\n var ranges = []\n var cur = this.getSearchCursor(query, this.getCursor(\"from\"), caseFold)\n while (cur.findNext()) {\n if (CodeMirror.cmpPos(cur.to(), this.getCursor(\"to\")) > 0) break\n ranges.push({anchor: cur.from(), head: cur.to()})\n }\n if (ranges.length)\n this.setSelections(ranges, 0)\n })\n});\n", "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"), require(\"../markdown/markdown\"), require(\"../../addon/mode/overlay\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\", \"../markdown/markdown\", \"../../addon/mode/overlay\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nvar urlRE = /^((?:(?:aaas?|about|acap|adiumxtra|af[ps]|aim|apt|attachment|aw|beshare|bitcoin|bolo|callto|cap|chrome(?:-extension)?|cid|coap|com-eventbrite-attendee|content|crid|cvs|data|dav|dict|dlna-(?:playcontainer|playsingle)|dns|doi|dtn|dvb|ed2k|facetime|feed|file|finger|fish|ftp|geo|gg|git|gizmoproject|go|gopher|gtalk|h323|hcp|https?|iax|icap|icon|im|imap|info|ipn|ipp|irc[6s]?|iris(?:\\.beep|\\.lwz|\\.xpc|\\.xpcs)?|itms|jar|javascript|jms|keyparc|lastfm|ldaps?|magnet|mailto|maps|market|message|mid|mms|ms-help|msnim|msrps?|mtqp|mumble|mupdate|mvn|news|nfs|nih?|nntp|notes|oid|opaquelocktoken|palm|paparazzi|platform|pop|pres|proxy|psyc|query|res(?:ource)?|rmi|rsync|rtmp|rtsp|secondlife|service|session|sftp|sgn|shttp|sieve|sips?|skype|sm[bs]|snmp|soap\\.beeps?|soldat|spotify|ssh|steam|svn|tag|teamspeak|tel(?:net)?|tftp|things|thismessage|tip|tn3270|tv|udp|unreal|urn|ut2004|vemmi|ventrilo|view-source|webcal|wss?|wtai|wyciwyg|xcon(?:-userid)?|xfire|xmlrpc\\.beeps?|xmpp|xri|ymsgr|z39\\.50[rs]?):(?:\\/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}\\/)(?:[^\\s()<>]|\\([^\\s()<>]*\\))+(?:\\([^\\s()<>]*\\)|[^\\s`*!()\\[\\]{};:'\".,<>?\u00AB\u00BB\u201C\u201D\u2018\u2019]))/i\n\nCodeMirror.defineMode(\"gfm\", function(config, modeConfig) {\n var codeDepth = 0;\n function blankLine(state) {\n state.code = false;\n return null;\n }\n var gfmOverlay = {\n startState: function() {\n return {\n code: false,\n codeBlock: false,\n ateSpace: false\n };\n },\n copyState: function(s) {\n return {\n code: s.code,\n codeBlock: s.codeBlock,\n ateSpace: s.ateSpace\n };\n },\n token: function(stream, state) {\n state.combineTokens = null;\n\n // Hack to prevent formatting override inside code blocks (block and inline)\n if (state.codeBlock) {\n if (stream.match(/^```+/)) {\n state.codeBlock = false;\n return null;\n }\n stream.skipToEnd();\n return null;\n }\n if (stream.sol()) {\n state.code = false;\n }\n if (stream.sol() && stream.match(/^```+/)) {\n stream.skipToEnd();\n state.codeBlock = true;\n return null;\n }\n // If this block is changed, it may need to be updated in Markdown mode\n if (stream.peek() === '`') {\n stream.next();\n var before = stream.pos;\n stream.eatWhile('`');\n var difference = 1 + stream.pos - before;\n if (!state.code) {\n codeDepth = difference;\n state.code = true;\n } else {\n if (difference === codeDepth) { // Must be exact\n state.code = false;\n }\n }\n return null;\n } else if (state.code) {\n stream.next();\n return null;\n }\n // Check if space. If so, links can be formatted later on\n if (stream.eatSpace()) {\n state.ateSpace = true;\n return null;\n }\n if (stream.sol() || state.ateSpace) {\n state.ateSpace = false;\n if (modeConfig.gitHubSpice !== false) {\n if(stream.match(/^(?:[a-zA-Z0-9\\-_]+\\/)?(?:[a-zA-Z0-9\\-_]+@)?(?=.{0,6}\\d)(?:[a-f0-9]{7,40}\\b)/)) {\n // User/Project@SHA\n // User@SHA\n // SHA\n state.combineTokens = true;\n return \"link\";\n } else if (stream.match(/^(?:[a-zA-Z0-9\\-_]+\\/)?(?:[a-zA-Z0-9\\-_]+)?#[0-9]+\\b/)) {\n // User/Project#Num\n // User#Num\n // #Num\n state.combineTokens = true;\n return \"link\";\n }\n }\n }\n if (stream.match(urlRE) &&\n stream.string.slice(stream.start - 2, stream.start) != \"](\" &&\n (stream.start == 0 || /\\W/.test(stream.string.charAt(stream.start - 1)))) {\n // URLs\n // Taken from http://daringfireball.net/2010/07/improved_regex_for_matching_urls\n // And then (issue #1160) simplified to make it not crash the Chrome Regexp engine\n // And then limited url schemes to the CommonMark list, so foo:bar isn't matched as a URL\n state.combineTokens = true;\n return \"link\";\n }\n stream.next();\n return null;\n },\n blankLine: blankLine\n };\n\n var markdownConfig = {\n taskLists: true,\n strikethrough: true,\n emoji: true\n };\n for (var attr in modeConfig) {\n markdownConfig[attr] = modeConfig[attr];\n }\n markdownConfig.name = \"markdown\";\n return CodeMirror.overlayMode(CodeMirror.getMode(config, markdownConfig), gfmOverlay);\n\n}, \"markdown\");\n\n CodeMirror.defineMIME(\"text/x-gfm\", \"gfm\");\n});\n", "/* globals chrome: false */\n/* globals __dirname: false */\n/* globals require: false */\n/* globals Buffer: false */\n/* globals module: false */\n\n/**\n * Typo is a JavaScript implementation of a spellchecker using hunspell-style \n * dictionaries.\n */\n\nvar Typo;\n\n(function () {\n\"use strict\";\n\n/**\n * Typo constructor.\n *\n * @param {String} [dictionary] The locale code of the dictionary being used. e.g.,\n * \"en_US\". This is only used to auto-load dictionaries.\n * @param {String} [affData] The data from the dictionary's .aff file. If omitted\n * and Typo.js is being used in a Chrome extension, the .aff\n * file will be loaded automatically from\n * lib/typo/dictionaries/[dictionary]/[dictionary].aff\n * In other environments, it will be loaded from\n * [settings.dictionaryPath]/dictionaries/[dictionary]/[dictionary].aff\n * @param {String} [wordsData] The data from the dictionary's .dic file. If omitted\n * and Typo.js is being used in a Chrome extension, the .dic\n * file will be loaded automatically from\n * lib/typo/dictionaries/[dictionary]/[dictionary].dic\n * In other environments, it will be loaded from\n * [settings.dictionaryPath]/dictionaries/[dictionary]/[dictionary].dic\n * @param {Object} [settings] Constructor settings. Available properties are:\n * {String} [dictionaryPath]: path to load dictionary from in non-chrome\n * environment.\n * {Object} [flags]: flag information.\n * {Boolean} [asyncLoad]: If true, affData and wordsData will be loaded\n * asynchronously.\n * {Function} [loadedCallback]: Called when both affData and wordsData\n * have been loaded. Only used if asyncLoad is set to true. The parameter\n * is the instantiated Typo object.\n *\n * @returns {Typo} A Typo object.\n */\n\nTypo = function (dictionary, affData, wordsData, settings) {\n\tsettings = settings || {};\n\n\tthis.dictionary = null;\n\t\n\tthis.rules = {};\n\tthis.dictionaryTable = {};\n\t\n\tthis.compoundRules = [];\n\tthis.compoundRuleCodes = {};\n\t\n\tthis.replacementTable = [];\n\t\n\tthis.flags = settings.flags || {}; \n\t\n\tthis.memoized = {};\n\n\tthis.loaded = false;\n\t\n\tvar self = this;\n\t\n\tvar path;\n\t\n\t// Loop-control variables.\n\tvar i, j, _len, _jlen;\n\t\n\tif (dictionary) {\n\t\tself.dictionary = dictionary;\n\t\t\n\t\t// If the data is preloaded, just setup the Typo object.\n\t\tif (affData && wordsData) {\n\t\t\tsetup();\n\t\t}\n\t\t// Loading data for Chrome extentions.\n\t\telse if (typeof window !== 'undefined' && 'chrome' in window && 'extension' in window.chrome && 'getURL' in window.chrome.extension) {\n\t\t\tif (settings.dictionaryPath) {\n\t\t\t\tpath = settings.dictionaryPath;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tpath = \"typo/dictionaries\";\n\t\t\t}\n\t\t\t\n\t\t\tif (!affData) readDataFile(chrome.extension.getURL(path + \"/\" + dictionary + \"/\" + dictionary + \".aff\"), setAffData);\n\t\t\tif (!wordsData) readDataFile(chrome.extension.getURL(path + \"/\" + dictionary + \"/\" + dictionary + \".dic\"), setWordsData);\n\t\t}\n\t\telse {\n\t\t\tif (settings.dictionaryPath) {\n\t\t\t\tpath = settings.dictionaryPath;\n\t\t\t}\n\t\t\telse if (typeof __dirname !== 'undefined') {\n\t\t\t\tpath = __dirname + '/dictionaries';\n\t\t\t}\n\t\t\telse {\n\t\t\t\tpath = './dictionaries';\n\t\t\t}\n\t\t\t\n\t\t\tif (!affData) readDataFile(path + \"/\" + dictionary + \"/\" + dictionary + \".aff\", setAffData);\n\t\t\tif (!wordsData) readDataFile(path + \"/\" + dictionary + \"/\" + dictionary + \".dic\", setWordsData);\n\t\t}\n\t}\n\t\n\tfunction readDataFile(url, setFunc) {\n\t\tvar response = self._readFile(url, null, settings.asyncLoad);\n\t\t\n\t\tif (settings.asyncLoad) {\n\t\t\tresponse.then(function(data) {\n\t\t\t\tsetFunc(data);\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tsetFunc(response);\n\t\t}\n\t}\n\n\tfunction setAffData(data) {\n\t\taffData = data;\n\n\t\tif (wordsData) {\n\t\t\tsetup();\n\t\t}\n\t}\n\n\tfunction setWordsData(data) {\n\t\twordsData = data;\n\n\t\tif (affData) {\n\t\t\tsetup();\n\t\t}\n\t}\n\n\tfunction setup() {\n\t\tself.rules = self._parseAFF(affData);\n\t\t\n\t\t// Save the rule codes that are used in compound rules.\n\t\tself.compoundRuleCodes = {};\n\t\t\n\t\tfor (i = 0, _len = self.compoundRules.length; i < _len; i++) {\n\t\t\tvar rule = self.compoundRules[i];\n\t\t\t\n\t\t\tfor (j = 0, _jlen = rule.length; j < _jlen; j++) {\n\t\t\t\tself.compoundRuleCodes[rule[j]] = [];\n\t\t\t}\n\t\t}\n\t\t\n\t\t// If we add this ONLYINCOMPOUND flag to self.compoundRuleCodes, then _parseDIC\n\t\t// will do the work of saving the list of words that are compound-only.\n\t\tif (\"ONLYINCOMPOUND\" in self.flags) {\n\t\t\tself.compoundRuleCodes[self.flags.ONLYINCOMPOUND] = [];\n\t\t}\n\t\t\n\t\tself.dictionaryTable = self._parseDIC(wordsData);\n\t\t\n\t\t// Get rid of any codes from the compound rule codes that are never used \n\t\t// (or that were special regex characters). Not especially necessary... \n\t\tfor (i in self.compoundRuleCodes) {\n\t\t\tif (self.compoundRuleCodes[i].length === 0) {\n\t\t\t\tdelete self.compoundRuleCodes[i];\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Build the full regular expressions for each compound rule.\n\t\t// I have a feeling (but no confirmation yet) that this method of \n\t\t// testing for compound words is probably slow.\n\t\tfor (i = 0, _len = self.compoundRules.length; i < _len; i++) {\n\t\t\tvar ruleText = self.compoundRules[i];\n\t\t\t\n\t\t\tvar expressionText = \"\";\n\t\t\t\n\t\t\tfor (j = 0, _jlen = ruleText.length; j < _jlen; j++) {\n\t\t\t\tvar character = ruleText[j];\n\t\t\t\t\n\t\t\t\tif (character in self.compoundRuleCodes) {\n\t\t\t\t\texpressionText += \"(\" + self.compoundRuleCodes[character].join(\"|\") + \")\";\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\texpressionText += character;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tself.compoundRules[i] = new RegExp(expressionText, \"i\");\n\t\t}\n\t\t\n\t\tself.loaded = true;\n\t\t\n\t\tif (settings.asyncLoad && settings.loadedCallback) {\n\t\t\tsettings.loadedCallback(self);\n\t\t}\n\t}\n\t\n\treturn this;\n};\n\nTypo.prototype = {\n\t/**\n\t * Loads a Typo instance from a hash of all of the Typo properties.\n\t *\n\t * @param object obj A hash of Typo properties, probably gotten from a JSON.parse(JSON.stringify(typo_instance)).\n\t */\n\t\n\tload : function (obj) {\n\t\tfor (var i in obj) {\n\t\t\tif (obj.hasOwnProperty(i)) {\n\t\t\t\tthis[i] = obj[i];\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * Read the contents of a file.\n\t * \n\t * @param {String} path The path (relative) to the file.\n\t * @param {String} [charset=\"ISO8859-1\"] The expected charset of the file\n\t * @param {Boolean} async If true, the file will be read asynchronously. For node.js this does nothing, all\n\t * files are read synchronously.\n\t * @returns {String} The file data if async is false, otherwise a promise object. If running node.js, the data is\n\t * always returned.\n\t */\n\t\n\t_readFile : function (path, charset, async) {\n\t\tcharset = charset || \"utf8\";\n\t\t\n\t\tif (typeof XMLHttpRequest !== 'undefined') {\n\t\t\tvar promise;\n\t\t\tvar req = new XMLHttpRequest();\n\t\t\treq.open(\"GET\", path, async);\n\t\t\t\n\t\t\tif (async) {\n\t\t\t\tpromise = new Promise(function(resolve, reject) {\n\t\t\t\t\treq.onload = function() {\n\t\t\t\t\t\tif (req.status === 200) {\n\t\t\t\t\t\t\tresolve(req.responseText);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treject(req.statusText);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t\n\t\t\t\t\treq.onerror = function() {\n\t\t\t\t\t\treject(req.statusText);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\n\t\t\tif (req.overrideMimeType)\n\t\t\t\treq.overrideMimeType(\"text/plain; charset=\" + charset);\n\t\t\n\t\t\treq.send(null);\n\t\t\t\n\t\t\treturn async ? promise : req.responseText;\n\t\t}\n\t\telse if (typeof require !== 'undefined') {\n\t\t\t// Node.js\n\t\t\tvar fs = require(\"fs\");\n\t\t\t\n\t\t\ttry {\n\t\t\t\tif (fs.existsSync(path)) {\n\t\t\t\t\treturn fs.readFileSync(path, charset);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tconsole.log(\"Path \" + path + \" does not exist.\");\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tconsole.log(e);\n\t\t\t\treturn '';\n\t\t\t}\n\t\t}\n\t},\n\t\n\t/**\n\t * Parse the rules out from a .aff file.\n\t *\n\t * @param {String} data The contents of the affix file.\n\t * @returns object The rules from the file.\n\t */\n\t\n\t_parseAFF : function (data) {\n\t\tvar rules = {};\n\t\t\n\t\tvar line, subline, numEntries, lineParts;\n\t\tvar i, j, _len, _jlen;\n\t\t\n\t\tvar lines = data.split(/\\r?\\n/);\n\t\t\n\t\tfor (i = 0, _len = lines.length; i < _len; i++) {\n\t\t\t// Remove comment lines\n\t\t\tline = this._removeAffixComments(lines[i]);\n\t\t\tline = line.trim();\n\t\t\t\n\t\t\tif ( ! line ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t\n\t\t\tvar definitionParts = line.split(/\\s+/);\n\t\t\t\n\t\t\tvar ruleType = definitionParts[0];\n\t\t\t\n\t\t\tif (ruleType == \"PFX\" || ruleType == \"SFX\") {\n\t\t\t\tvar ruleCode = definitionParts[1];\n\t\t\t\tvar combineable = definitionParts[2];\n\t\t\t\tnumEntries = parseInt(definitionParts[3], 10);\n\t\t\t\t\n\t\t\t\tvar entries = [];\n\t\t\t\t\n\t\t\t\tfor (j = i + 1, _jlen = i + 1 + numEntries; j < _jlen; j++) {\n\t\t\t\t\tsubline = lines[j];\n\t\t\t\t\t\n\t\t\t\t\tlineParts = subline.split(/\\s+/);\n\t\t\t\t\tvar charactersToRemove = lineParts[2];\n\t\t\t\t\t\n\t\t\t\t\tvar additionParts = lineParts[3].split(\"/\");\n\t\t\t\t\t\n\t\t\t\t\tvar charactersToAdd = additionParts[0];\n\t\t\t\t\tif (charactersToAdd === \"0\") charactersToAdd = \"\";\n\t\t\t\t\t\n\t\t\t\t\tvar continuationClasses = this.parseRuleCodes(additionParts[1]);\n\t\t\t\t\t\n\t\t\t\t\tvar regexToMatch = lineParts[4];\n\t\t\t\t\t\n\t\t\t\t\tvar entry = {};\n\t\t\t\t\tentry.add = charactersToAdd;\n\t\t\t\t\t\n\t\t\t\t\tif (continuationClasses.length > 0) entry.continuationClasses = continuationClasses;\n\t\t\t\t\t\n\t\t\t\t\tif (regexToMatch !== \".\") {\n\t\t\t\t\t\tif (ruleType === \"SFX\") {\n\t\t\t\t\t\t\tentry.match = new RegExp(regexToMatch + \"$\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tentry.match = new RegExp(\"^\" + regexToMatch);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (charactersToRemove != \"0\") {\n\t\t\t\t\t\tif (ruleType === \"SFX\") {\n\t\t\t\t\t\t\tentry.remove = new RegExp(charactersToRemove + \"$\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tentry.remove = charactersToRemove;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tentries.push(entry);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\trules[ruleCode] = { \"type\" : ruleType, \"combineable\" : (combineable == \"Y\"), \"entries\" : entries };\n\t\t\t\t\n\t\t\t\ti += numEntries;\n\t\t\t}\n\t\t\telse if (ruleType === \"COMPOUNDRULE\") {\n\t\t\t\tnumEntries = parseInt(definitionParts[1], 10);\n\t\t\t\t\n\t\t\t\tfor (j = i + 1, _jlen = i + 1 + numEntries; j < _jlen; j++) {\n\t\t\t\t\tline = lines[j];\n\t\t\t\t\t\n\t\t\t\t\tlineParts = line.split(/\\s+/);\n\t\t\t\t\tthis.compoundRules.push(lineParts[1]);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\ti += numEntries;\n\t\t\t}\n\t\t\telse if (ruleType === \"REP\") {\n\t\t\t\tlineParts = line.split(/\\s+/);\n\t\t\t\t\n\t\t\t\tif (lineParts.length === 3) {\n\t\t\t\t\tthis.replacementTable.push([ lineParts[1], lineParts[2] ]);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// ONLYINCOMPOUND\n\t\t\t\t// COMPOUNDMIN\n\t\t\t\t// FLAG\n\t\t\t\t// KEEPCASE\n\t\t\t\t// NEEDAFFIX\n\t\t\t\t\n\t\t\t\tthis.flags[ruleType] = definitionParts[1];\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn rules;\n\t},\n\t\n\t/**\n\t * Removes comments.\n\t *\n\t * @param {String} data A line from an affix file.\n\t * @return {String} The cleaned-up line.\n\t */\n\t\n\t_removeAffixComments : function (line) {\n\t\t// This used to remove any string starting with '#' up to the end of the line,\n\t\t// but some COMPOUNDRULE definitions include '#' as part of the rule.\n\t\t// So, only remove lines that begin with a comment, optionally preceded by whitespace.\n\t\tif ( line.match( /^\\s*#/, \"\" ) ) {\n\t\t\treturn '';\n\t\t}\n\t\t\n\t\treturn line;\n\t},\n\t\n\t/**\n\t * Parses the words out from the .dic file.\n\t *\n\t * @param {String} data The data from the dictionary file.\n\t * @returns object The lookup table containing all of the words and\n\t * word forms from the dictionary.\n\t */\n\t\n\t_parseDIC : function (data) {\n\t\tdata = this._removeDicComments(data);\n\t\t\n\t\tvar lines = data.split(/\\r?\\n/);\n\t\tvar dictionaryTable = {};\n\t\t\n\t\tfunction addWord(word, rules) {\n\t\t\t// Some dictionaries will list the same word multiple times with different rule sets.\n\t\t\tif (!dictionaryTable.hasOwnProperty(word)) {\n\t\t\t\tdictionaryTable[word] = null;\n\t\t\t}\n\t\t\t\n\t\t\tif (rules.length > 0) {\n\t\t\t\tif (dictionaryTable[word] === null) {\n\t\t\t\t\tdictionaryTable[word] = [];\n\t\t\t\t}\n\n\t\t\t\tdictionaryTable[word].push(rules);\n\t\t\t}\n\t\t}\n\t\t\n\t\t// The first line is the number of words in the dictionary.\n\t\tfor (var i = 1, _len = lines.length; i < _len; i++) {\n\t\t\tvar line = lines[i];\n\t\t\t\n\t\t\tif (!line) {\n\t\t\t\t// Ignore empty lines.\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar parts = line.split(\"/\", 2);\n\t\t\t\n\t\t\tvar word = parts[0];\n\n\t\t\t// Now for each affix rule, generate that form of the word.\n\t\t\tif (parts.length > 1) {\n\t\t\t\tvar ruleCodesArray = this.parseRuleCodes(parts[1]);\n\t\t\t\t\n\t\t\t\t// Save the ruleCodes for compound word situations.\n\t\t\t\tif (!(\"NEEDAFFIX\" in this.flags) || ruleCodesArray.indexOf(this.flags.NEEDAFFIX) == -1) {\n\t\t\t\t\taddWord(word, ruleCodesArray);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfor (var j = 0, _jlen = ruleCodesArray.length; j < _jlen; j++) {\n\t\t\t\t\tvar code = ruleCodesArray[j];\n\t\t\t\t\t\n\t\t\t\t\tvar rule = this.rules[code];\n\t\t\t\t\t\n\t\t\t\t\tif (rule) {\n\t\t\t\t\t\tvar newWords = this._applyRule(word, rule);\n\t\t\t\t\t\t\n\t\t\t\t\t\tfor (var ii = 0, _iilen = newWords.length; ii < _iilen; ii++) {\n\t\t\t\t\t\t\tvar newWord = newWords[ii];\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\taddWord(newWord, []);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (rule.combineable) {\n\t\t\t\t\t\t\t\tfor (var k = j + 1; k < _jlen; k++) {\n\t\t\t\t\t\t\t\t\tvar combineCode = ruleCodesArray[k];\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tvar combineRule = this.rules[combineCode];\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tif (combineRule) {\n\t\t\t\t\t\t\t\t\t\tif (combineRule.combineable && (rule.type != combineRule.type)) {\n\t\t\t\t\t\t\t\t\t\t\tvar otherNewWords = this._applyRule(newWord, combineRule);\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tfor (var iii = 0, _iiilen = otherNewWords.length; iii < _iiilen; iii++) {\n\t\t\t\t\t\t\t\t\t\t\t\tvar otherNewWord = otherNewWords[iii];\n\t\t\t\t\t\t\t\t\t\t\t\taddWord(otherNewWord, []);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (code in this.compoundRuleCodes) {\n\t\t\t\t\t\tthis.compoundRuleCodes[code].push(word);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\taddWord(word.trim(), []);\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn dictionaryTable;\n\t},\n\t\n\t\n\t/**\n\t * Removes comment lines and then cleans up blank lines and trailing whitespace.\n\t *\n\t * @param {String} data The data from a .dic file.\n\t * @return {String} The cleaned-up data.\n\t */\n\t\n\t_removeDicComments : function (data) {\n\t\t// I can't find any official documentation on it, but at least the de_DE\n\t\t// dictionary uses tab-indented lines as comments.\n\t\t\n\t\t// Remove comments\n\t\tdata = data.replace(/^\\t.*$/mg, \"\");\n\t\t\n\t\treturn data;\n\t},\n\t\n\tparseRuleCodes : function (textCodes) {\n\t\tif (!textCodes) {\n\t\t\treturn [];\n\t\t}\n\t\telse if (!(\"FLAG\" in this.flags)) {\n\t\t\t// The flag symbols are single characters\n\t\t\treturn textCodes.split(\"\");\n\t\t}\n\t\telse if (this.flags.FLAG === \"long\") {\n\t\t\t// The flag symbols are two characters long.\n\t\t\tvar flags = [];\n\t\t\t\n\t\t\tfor (var i = 0, _len = textCodes.length; i < _len; i += 2) {\n\t\t\t\tflags.push(textCodes.substr(i, 2));\n\t\t\t}\n\t\t\t\n\t\t\treturn flags;\n\t\t}\n\t\telse if (this.flags.FLAG === \"num\") {\n\t\t\t// The flag symbols are a CSV list of numbers.\n\t\t\treturn textCodes.split(\",\");\n\t\t}\n\t\telse if (this.flags.FLAG === \"UTF-8\") {\n\t\t\t// The flags are single UTF-8 characters.\n\t\t\t// @see https://github.com/cfinke/Typo.js/issues/57\n\t\t\treturn Array.from(textCodes);\n\t\t}\n\t\telse {\n\t\t\t// It's possible that this fallback case will not work for all FLAG values,\n\t\t\t// but I think it's more likely to work than not returning anything at all.\n\t\t\treturn textCodes.split(\"\");\n\t\t}\n\t},\n\t\n\t/**\n\t * Applies an affix rule to a word.\n\t *\n\t * @param {String} word The base word.\n\t * @param {Object} rule The affix rule.\n\t * @returns {String[]} The new words generated by the rule.\n\t */\n\t\n\t_applyRule : function (word, rule) {\n\t\tvar entries = rule.entries;\n\t\tvar newWords = [];\n\t\t\n\t\tfor (var i = 0, _len = entries.length; i < _len; i++) {\n\t\t\tvar entry = entries[i];\n\t\t\t\n\t\t\tif (!entry.match || word.match(entry.match)) {\n\t\t\t\tvar newWord = word;\n\t\t\t\t\n\t\t\t\tif (entry.remove) {\n\t\t\t\t\tnewWord = newWord.replace(entry.remove, \"\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (rule.type === \"SFX\") {\n\t\t\t\t\tnewWord = newWord + entry.add;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tnewWord = entry.add + newWord;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tnewWords.push(newWord);\n\t\t\t\t\n\t\t\t\tif (\"continuationClasses\" in entry) {\n\t\t\t\t\tfor (var j = 0, _jlen = entry.continuationClasses.length; j < _jlen; j++) {\n\t\t\t\t\t\tvar continuationRule = this.rules[entry.continuationClasses[j]];\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (continuationRule) {\n\t\t\t\t\t\t\tnewWords = newWords.concat(this._applyRule(newWord, continuationRule));\n\t\t\t\t\t\t}\n\t\t\t\t\t\t/*\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// This shouldn't happen, but it does, at least in the de_DE dictionary.\n\t\t\t\t\t\t\t// I think the author mistakenly supplied lower-case rule codes instead \n\t\t\t\t\t\t\t// of upper-case.\n\t\t\t\t\t\t}\n\t\t\t\t\t\t*/\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn newWords;\n\t},\n\t\n\t/**\n\t * Checks whether a word or a capitalization variant exists in the current dictionary.\n\t * The word is trimmed and several variations of capitalizations are checked.\n\t * If you want to check a word without any changes made to it, call checkExact()\n\t *\n\t * @see http://blog.stevenlevithan.com/archives/faster-trim-javascript re:trimming function\n\t *\n\t * @param {String} aWord The word to check.\n\t * @returns {Boolean}\n\t */\n\t\n\tcheck : function (aWord) {\n\t\tif (!this.loaded) {\n\t\t\tthrow \"Dictionary not loaded.\";\n\t\t}\n\t\t\n\t\tif (!aWord) {\n\t\t\treturn false;\n\t\t}\n\t\t\n\t\t// Remove leading and trailing whitespace\n\t\tvar trimmedWord = aWord.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n\t\t\n\t\tif (this.checkExact(trimmedWord)) {\n\t\t\treturn true;\n\t\t}\n\t\t\n\t\t// The exact word is not in the dictionary.\n\t\tif (trimmedWord.toUpperCase() === trimmedWord) {\n\t\t\t// The word was supplied in all uppercase.\n\t\t\t// Check for a capitalized form of the word.\n\t\t\tvar capitalizedWord = trimmedWord[0] + trimmedWord.substring(1).toLowerCase();\n\t\t\t\n\t\t\tif (this.hasFlag(capitalizedWord, \"KEEPCASE\")) {\n\t\t\t\t// Capitalization variants are not allowed for this word.\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t\n\t\t\tif (this.checkExact(capitalizedWord)) {\n\t\t\t\t// The all-caps word is a capitalized word spelled correctly.\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (this.checkExact(trimmedWord.toLowerCase())) {\n\t\t\t\t// The all-caps is a lowercase word spelled correctly.\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\tvar uncapitalizedWord = trimmedWord[0].toLowerCase() + trimmedWord.substring(1);\n\t\t\n\t\tif (uncapitalizedWord !== trimmedWord) {\n\t\t\tif (this.hasFlag(uncapitalizedWord, \"KEEPCASE\")) {\n\t\t\t\t// Capitalization variants are not allowed for this word.\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t\n\t\t\t// Check for an uncapitalized form\n\t\t\tif (this.checkExact(uncapitalizedWord)) {\n\t\t\t\t// The word is spelled correctly but with the first letter capitalized.\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t},\n\t\n\t/**\n\t * Checks whether a word exists in the current dictionary.\n\t *\n\t * @param {String} word The word to check.\n\t * @returns {Boolean}\n\t */\n\t\n\tcheckExact : function (word) {\n\t\tif (!this.loaded) {\n\t\t\tthrow \"Dictionary not loaded.\";\n\t\t}\n\n\t\tvar ruleCodes = this.dictionaryTable[word];\n\t\t\n\t\tvar i, _len;\n\t\t\n\t\tif (typeof ruleCodes === 'undefined') {\n\t\t\t// Check if this might be a compound word.\n\t\t\tif (\"COMPOUNDMIN\" in this.flags && word.length >= this.flags.COMPOUNDMIN) {\n\t\t\t\tfor (i = 0, _len = this.compoundRules.length; i < _len; i++) {\n\t\t\t\t\tif (word.match(this.compoundRules[i])) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (ruleCodes === null) {\n\t\t\t// a null (but not undefined) value for an entry in the dictionary table\n\t\t\t// means that the word is in the dictionary but has no flags.\n\t\t\treturn true;\n\t\t}\n\t\telse if (typeof ruleCodes === 'object') { // this.dictionary['hasOwnProperty'] will be a function.\n\t\t\tfor (i = 0, _len = ruleCodes.length; i < _len; i++) {\n\t\t\t\tif (!this.hasFlag(word, \"ONLYINCOMPOUND\", ruleCodes[i])) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\t\n\t/**\n\t * Looks up whether a given word is flagged with a given flag.\n\t *\n\t * @param {String} word The word in question.\n\t * @param {String} flag The flag in question.\n\t * @return {Boolean}\n\t */\n\t \n\thasFlag : function (word, flag, wordFlags) {\n\t\tif (!this.loaded) {\n\t\t\tthrow \"Dictionary not loaded.\";\n\t\t}\n\n\t\tif (flag in this.flags) {\n\t\t\tif (typeof wordFlags === 'undefined') {\n\t\t\t\twordFlags = Array.prototype.concat.apply([], this.dictionaryTable[word]);\n\t\t\t}\n\t\t\t\n\t\t\tif (wordFlags && wordFlags.indexOf(this.flags[flag]) !== -1) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t},\n\t\n\t/**\n\t * Returns a list of suggestions for a misspelled word.\n\t *\n\t * @see http://www.norvig.com/spell-correct.html for the basis of this suggestor.\n\t * This suggestor is primitive, but it works.\n\t *\n\t * @param {String} word The misspelling.\n\t * @param {Number} [limit=5] The maximum number of suggestions to return.\n\t * @returns {String[]} The array of suggestions.\n\t */\n\t\n\talphabet : \"\",\n\t\n\tsuggest : function (word, limit) {\n\t\tif (!this.loaded) {\n\t\t\tthrow \"Dictionary not loaded.\";\n\t\t}\n\n\t\tlimit = limit || 5;\n\n\t\tif (this.memoized.hasOwnProperty(word)) {\n\t\t\tvar memoizedLimit = this.memoized[word]['limit'];\n\n\t\t\t// Only return the cached list if it's big enough or if there weren't enough suggestions\n\t\t\t// to fill a smaller limit.\n\t\t\tif (limit <= memoizedLimit || this.memoized[word]['suggestions'].length < memoizedLimit) {\n\t\t\t\treturn this.memoized[word]['suggestions'].slice(0, limit);\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (this.check(word)) return [];\n\t\t\n\t\t// Check the replacement table.\n\t\tfor (var i = 0, _len = this.replacementTable.length; i < _len; i++) {\n\t\t\tvar replacementEntry = this.replacementTable[i];\n\t\t\t\n\t\t\tif (word.indexOf(replacementEntry[0]) !== -1) {\n\t\t\t\tvar correctedWord = word.replace(replacementEntry[0], replacementEntry[1]);\n\t\t\t\t\n\t\t\t\tif (this.check(correctedWord)) {\n\t\t\t\t\treturn [ correctedWord ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (!this.alphabet) {\n\t\t\t// Use the English alphabet as the default. Problematic, but backwards-compatible.\n\t\t\tthis.alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n\t\t\t\n\t\t\t// Any characters defined in the affix file as substitutions can go in the alphabet too.\n\t\t\t// Note that dictionaries do not include the entire alphabet in the TRY flag when it's there.\n\t\t\t// For example, Q is not in the default English TRY list; that's why having the default\n\t\t\t// alphabet above is useful.\n\t\t\tif ( 'TRY' in this.flags ) {\n\t\t\t\tthis.alphabet += this.flags['TRY'];\n\t\t\t}\n\t\t\t\n\t\t\t// Plus any additional characters specifically defined as being allowed in words.\n\t\t\tif ( 'WORDCHARS' in this.flags ) {\n\t\t\t\tthis.alphabet += this.flags['WORDCHARS'];\n\t\t\t}\n\t\t\t\n\t\t\t// Remove any duplicates.\n\t\t\tvar alphaArray = this.alphabet.split(\"\");\n\t\t\talphaArray.sort();\n\n\t\t\tvar alphaHash = {};\n\t\t\tfor ( var i = 0; i < alphaArray.length; i++ ) {\n\t\t\t\talphaHash[ alphaArray[i] ] = true;\n\t\t\t}\n\t\t\t\n\t\t\tthis.alphabet = '';\n\t\t\t\n\t\t\tfor ( var i in alphaHash ) {\n\t\t\t\tthis.alphabet += i;\n\t\t\t}\n\t\t}\n\t\t\n\t\tvar self = this;\n\n\t\t/**\n\t\t * Returns a hash keyed by all of the strings that can be made by making a single edit to the word (or words in) `words`\n\t\t * The value of each entry is the number of unique ways that the resulting word can be made.\n\t\t *\n\t\t * @arg mixed words Either a hash keyed by words or a string word to operate on.\n\t\t * @arg bool known_only Whether this function should ignore strings that are not in the dictionary.\n\t\t */\n\t\tfunction edits1(words, known_only) {\n\t\t\tvar rv = {};\n\t\t\t\n\t\t\tvar i, j, _iilen, _len, _jlen, _edit;\n\n\t\t\tvar alphabetLength = self.alphabet.length;\n\t\t\t\n\t\t\tif (typeof words == 'string') {\n\t\t\t\tvar word = words;\n\t\t\t\twords = {};\n\t\t\t\twords[word] = true;\n\t\t\t}\n\n\t\t\tfor (var word in words) {\n\t\t\t\tfor (i = 0, _len = word.length + 1; i < _len; i++) {\n\t\t\t\t\tvar s = [ word.substring(0, i), word.substring(i) ];\n\t\t\t\t\n\t\t\t\t\t// Remove a letter.\n\t\t\t\t\tif (s[1]) {\n\t\t\t\t\t\t_edit = s[0] + s[1].substring(1);\n\n\t\t\t\t\t\tif (!known_only || self.check(_edit)) {\n\t\t\t\t\t\t\tif (!(_edit in rv)) {\n\t\t\t\t\t\t\t\trv[_edit] = 1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\trv[_edit] += 1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// Transpose letters\n\t\t\t\t\t// Eliminate transpositions of identical letters\n\t\t\t\t\tif (s[1].length > 1 && s[1][1] !== s[1][0]) {\n\t\t\t\t\t\t_edit = s[0] + s[1][1] + s[1][0] + s[1].substring(2);\n\n\t\t\t\t\t\tif (!known_only || self.check(_edit)) {\n\t\t\t\t\t\t\tif (!(_edit in rv)) {\n\t\t\t\t\t\t\t\trv[_edit] = 1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\trv[_edit] += 1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (s[1]) {\n\t\t\t\t\t\t// Replace a letter with another letter.\n\n\t\t\t\t\t\tvar lettercase = (s[1].substring(0,1).toUpperCase() === s[1].substring(0,1)) ? 'uppercase' : 'lowercase';\n\n\t\t\t\t\t\tfor (j = 0; j < alphabetLength; j++) {\n\t\t\t\t\t\t\tvar replacementLetter = self.alphabet[j];\n\n\t\t\t\t\t\t\t// Set the case of the replacement letter to the same as the letter being replaced.\n\t\t\t\t\t\t\tif ( 'uppercase' === lettercase ) {\n\t\t\t\t\t\t\t\treplacementLetter = replacementLetter.toUpperCase();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Eliminate replacement of a letter by itself\n\t\t\t\t\t\t\tif (replacementLetter != s[1].substring(0,1)){\n\t\t\t\t\t\t\t\t_edit = s[0] + replacementLetter + s[1].substring(1);\n\n\t\t\t\t\t\t\t\tif (!known_only || self.check(_edit)) {\n\t\t\t\t\t\t\t\t\tif (!(_edit in rv)) {\n\t\t\t\t\t\t\t\t\t\trv[_edit] = 1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\trv[_edit] += 1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (s[1]) {\n\t\t\t\t\t\t// Add a letter between each letter.\n\t\t\t\t\t\tfor (j = 0; j < alphabetLength; j++) {\n\t\t\t\t\t\t\t// If the letters on each side are capitalized, capitalize the replacement.\n\t\t\t\t\t\t\tvar lettercase = (s[0].substring(-1).toUpperCase() === s[0].substring(-1) && s[1].substring(0,1).toUpperCase() === s[1].substring(0,1)) ? 'uppercase' : 'lowercase';\n\n\t\t\t\t\t\t\tvar replacementLetter = self.alphabet[j];\n\n\t\t\t\t\t\t\tif ( 'uppercase' === lettercase ) {\n\t\t\t\t\t\t\t\treplacementLetter = replacementLetter.toUpperCase();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t_edit = s[0] + replacementLetter + s[1];\n\n\t\t\t\t\t\t\tif (!known_only || self.check(_edit)) {\n\t\t\t\t\t\t\t\tif (!(_edit in rv)) {\n\t\t\t\t\t\t\t\t\trv[_edit] = 1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\trv[_edit] += 1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\treturn rv;\n\t\t}\n\n\t\tfunction correct(word) {\n\t\t\t// Get the edit-distance-1 and edit-distance-2 forms of this word.\n\t\t\tvar ed1 = edits1(word);\n\t\t\tvar ed2 = edits1(ed1, true);\n\t\t\t\n\t\t\t// Sort the edits based on how many different ways they were created.\n\t\t\tvar weighted_corrections = ed2;\n\t\t\t\n\t\t\tfor (var ed1word in ed1) {\n\t\t\t\tif (!self.check(ed1word)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (ed1word in weighted_corrections) {\n\t\t\t\t\tweighted_corrections[ed1word] += ed1[ed1word];\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tweighted_corrections[ed1word] = ed1[ed1word];\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tvar i, _len;\n\n\t\t\tvar sorted_corrections = [];\n\t\t\t\n\t\t\tfor (i in weighted_corrections) {\n\t\t\t\tif (weighted_corrections.hasOwnProperty(i)) {\n\t\t\t\t\tsorted_corrections.push([ i, weighted_corrections[i] ]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction sorter(a, b) {\n\t\t\t\tvar a_val = a[1];\n\t\t\t\tvar b_val = b[1];\n\t\t\t\tif (a_val < b_val) {\n\t\t\t\t\treturn -1;\n\t\t\t\t} else if (a_val > b_val) {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\t\t\t\t// @todo If a and b are equally weighted, add our own weight based on something like the key locations on this language's default keyboard.\n\t\t\t\treturn b[0].localeCompare(a[0]);\n\t\t\t}\n\t\t\t\n\t\t\tsorted_corrections.sort(sorter).reverse();\n\n\t\t\tvar rv = [];\n\n\t\t\tvar capitalization_scheme = \"lowercase\";\n\t\t\t\n\t\t\tif (word.toUpperCase() === word) {\n\t\t\t\tcapitalization_scheme = \"uppercase\";\n\t\t\t}\n\t\t\telse if (word.substr(0, 1).toUpperCase() + word.substr(1).toLowerCase() === word) {\n\t\t\t\tcapitalization_scheme = \"capitalized\";\n\t\t\t}\n\t\t\t\n\t\t\tvar working_limit = limit;\n\n\t\t\tfor (i = 0; i < Math.min(working_limit, sorted_corrections.length); i++) {\n\t\t\t\tif (\"uppercase\" === capitalization_scheme) {\n\t\t\t\t\tsorted_corrections[i][0] = sorted_corrections[i][0].toUpperCase();\n\t\t\t\t}\n\t\t\t\telse if (\"capitalized\" === capitalization_scheme) {\n\t\t\t\t\tsorted_corrections[i][0] = sorted_corrections[i][0].substr(0, 1).toUpperCase() + sorted_corrections[i][0].substr(1);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (!self.hasFlag(sorted_corrections[i][0], \"NOSUGGEST\") && rv.indexOf(sorted_corrections[i][0]) == -1) {\n\t\t\t\t\trv.push(sorted_corrections[i][0]);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// If one of the corrections is not eligible as a suggestion , make sure we still return the right number of suggestions.\n\t\t\t\t\tworking_limit++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn rv;\n\t\t}\n\t\t\n\t\tthis.memoized[word] = {\n\t\t\t'suggestions': correct(word),\n\t\t\t'limit': limit\n\t\t};\n\n\t\treturn this.memoized[word]['suggestions'];\n\t}\n};\n})();\n\n// Support for use as a node.js module.\nif (typeof module !== 'undefined') {\n\tmodule.exports = Typo;\n}\n", "// Use strict mode (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode)\n\"use strict\";\n\n\n// Requires\nvar Typo = require(\"typo-js\");\n\n\n// Create function\nfunction CodeMirrorSpellChecker(options) {\n\t// Initialize\n\toptions = options || {};\n\n\n\t// Verify\n\tif(typeof options.codeMirrorInstance !== \"function\" || typeof options.codeMirrorInstance.defineMode !== \"function\") {\n\t\tconsole.log(\"CodeMirror Spell Checker: You must provide an instance of CodeMirror via the option `codeMirrorInstance`\");\n\t\treturn;\n\t}\n\n\n\t// Because some browsers don't support this functionality yet\n\tif(!String.prototype.includes) {\n\t\tString.prototype.includes = function() {\n\t\t\t\"use strict\";\n\t\t\treturn String.prototype.indexOf.apply(this, arguments) !== -1;\n\t\t};\n\t}\n\n\n\t// Define the new mode\n\toptions.codeMirrorInstance.defineMode(\"spell-checker\", function(config) {\n\t\t// Load AFF/DIC data\n\t\tif(!CodeMirrorSpellChecker.aff_loading) {\n\t\t\tCodeMirrorSpellChecker.aff_loading = true;\n\t\t\tvar xhr_aff = new XMLHttpRequest();\n\t\t\txhr_aff.open(\"GET\", \"https://cdn.jsdelivr.net/codemirror.spell-checker/latest/en_US.aff\", true);\n\t\t\txhr_aff.onload = function() {\n\t\t\t\tif(xhr_aff.readyState === 4 && xhr_aff.status === 200) {\n\t\t\t\t\tCodeMirrorSpellChecker.aff_data = xhr_aff.responseText;\n\t\t\t\t\tCodeMirrorSpellChecker.num_loaded++;\n\n\t\t\t\t\tif(CodeMirrorSpellChecker.num_loaded == 2) {\n\t\t\t\t\t\tCodeMirrorSpellChecker.typo = new Typo(\"en_US\", CodeMirrorSpellChecker.aff_data, CodeMirrorSpellChecker.dic_data, {\n\t\t\t\t\t\t\tplatform: \"any\"\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\txhr_aff.send(null);\n\t\t}\n\n\t\tif(!CodeMirrorSpellChecker.dic_loading) {\n\t\t\tCodeMirrorSpellChecker.dic_loading = true;\n\t\t\tvar xhr_dic = new XMLHttpRequest();\n\t\t\txhr_dic.open(\"GET\", \"https://cdn.jsdelivr.net/codemirror.spell-checker/latest/en_US.dic\", true);\n\t\t\txhr_dic.onload = function() {\n\t\t\t\tif(xhr_dic.readyState === 4 && xhr_dic.status === 200) {\n\t\t\t\t\tCodeMirrorSpellChecker.dic_data = xhr_dic.responseText;\n\t\t\t\t\tCodeMirrorSpellChecker.num_loaded++;\n\n\t\t\t\t\tif(CodeMirrorSpellChecker.num_loaded == 2) {\n\t\t\t\t\t\tCodeMirrorSpellChecker.typo = new Typo(\"en_US\", CodeMirrorSpellChecker.aff_data, CodeMirrorSpellChecker.dic_data, {\n\t\t\t\t\t\t\tplatform: \"any\"\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\txhr_dic.send(null);\n\t\t}\n\n\n\t\t// Define what separates a word\n\t\tvar rx_word = \"!\\\"#$%&()*+,-./:;<=>?@[\\\\]^_`{|}~ \";\n\n\n\t\t// Create the overlay and such\n\t\tvar overlay = {\n\t\t\ttoken: function(stream) {\n\t\t\t\tvar ch = stream.peek();\n\t\t\t\tvar word = \"\";\n\n\t\t\t\tif(rx_word.includes(ch)) {\n\t\t\t\t\tstream.next();\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\twhile((ch = stream.peek()) != null && !rx_word.includes(ch)) {\n\t\t\t\t\tword += ch;\n\t\t\t\t\tstream.next();\n\t\t\t\t}\n\n\t\t\t\tif(CodeMirrorSpellChecker.typo && !CodeMirrorSpellChecker.typo.check(word))\n\t\t\t\t\treturn \"spell-error\"; // CSS class: cm-spell-error\n\n\t\t\t\treturn null;\n\t\t\t}\n\t\t};\n\n\t\tvar mode = options.codeMirrorInstance.getMode(\n\t\t\tconfig, config.backdrop || \"text/plain\"\n\t\t);\n\n\t\treturn options.codeMirrorInstance.overlayMode(mode, overlay, true);\n\t});\n}\n\n\n// Initialize data globally to reduce memory consumption\nCodeMirrorSpellChecker.num_loaded = 0;\nCodeMirrorSpellChecker.aff_loading = false;\nCodeMirrorSpellChecker.dic_loading = false;\nCodeMirrorSpellChecker.aff_data = \"\";\nCodeMirrorSpellChecker.dic_data = \"\";\nCodeMirrorSpellChecker.typo;\n\n\n// Export\nmodule.exports = CodeMirrorSpellChecker;", "/**\n * marked v4.3.0 - a markdown parser\n * Copyright (c) 2011-2023, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\n'use strict';\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);\n }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nfunction _createForOfIteratorHelperLoose(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n if (it) return (it = it.call(o)).next.bind(it);\n if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n var i = 0;\n return function () {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n };\n }\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _toPrimitive(input, hint) {\n if (typeof input !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (typeof res !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}\nfunction _toPropertyKey(arg) {\n var key = _toPrimitive(arg, \"string\");\n return typeof key === \"symbol\" ? key : String(key);\n}\n\nfunction getDefaults() {\n return {\n async: false,\n baseUrl: null,\n breaks: false,\n extensions: null,\n gfm: true,\n headerIds: true,\n headerPrefix: '',\n highlight: null,\n hooks: null,\n langPrefix: 'language-',\n mangle: true,\n pedantic: false,\n renderer: null,\n sanitize: false,\n sanitizer: null,\n silent: false,\n smartypants: false,\n tokenizer: null,\n walkTokens: null,\n xhtml: false\n };\n}\nexports.defaults = getDefaults();\nfunction changeDefaults(newDefaults) {\n exports.defaults = newDefaults;\n}\n\n/**\n * Helpers\n */\nvar escapeTest = /[&<>\"']/;\nvar escapeReplace = new RegExp(escapeTest.source, 'g');\nvar escapeTestNoEncode = /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/;\nvar escapeReplaceNoEncode = new RegExp(escapeTestNoEncode.source, 'g');\nvar escapeReplacements = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n};\nvar getEscapeReplacement = function getEscapeReplacement(ch) {\n return escapeReplacements[ch];\n};\nfunction escape(html, encode) {\n if (encode) {\n if (escapeTest.test(html)) {\n return html.replace(escapeReplace, getEscapeReplacement);\n }\n } else {\n if (escapeTestNoEncode.test(html)) {\n return html.replace(escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n return html;\n}\nvar unescapeTest = /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig;\n\n/**\n * @param {string} html\n */\nfunction unescape(html) {\n // explicitly match decimal, hex, and named HTML entities\n return html.replace(unescapeTest, function (_, n) {\n n = n.toLowerCase();\n if (n === 'colon') return ':';\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x' ? String.fromCharCode(parseInt(n.substring(2), 16)) : String.fromCharCode(+n.substring(1));\n }\n return '';\n });\n}\nvar caret = /(^|[^\\[])\\^/g;\n\n/**\n * @param {string | RegExp} regex\n * @param {string} opt\n */\nfunction edit(regex, opt) {\n regex = typeof regex === 'string' ? regex : regex.source;\n opt = opt || '';\n var obj = {\n replace: function replace(name, val) {\n val = val.source || val;\n val = val.replace(caret, '$1');\n regex = regex.replace(name, val);\n return obj;\n },\n getRegex: function getRegex() {\n return new RegExp(regex, opt);\n }\n };\n return obj;\n}\nvar nonWordAndColonTest = /[^\\w:]/g;\nvar originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;\n\n/**\n * @param {boolean} sanitize\n * @param {string} base\n * @param {string} href\n */\nfunction cleanUrl(sanitize, base, href) {\n if (sanitize) {\n var prot;\n try {\n prot = decodeURIComponent(unescape(href)).replace(nonWordAndColonTest, '').toLowerCase();\n } catch (e) {\n return null;\n }\n if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {\n return null;\n }\n }\n if (base && !originIndependentUrl.test(href)) {\n href = resolveUrl(base, href);\n }\n try {\n href = encodeURI(href).replace(/%25/g, '%');\n } catch (e) {\n return null;\n }\n return href;\n}\nvar baseUrls = {};\nvar justDomain = /^[^:]+:\\/*[^/]*$/;\nvar protocol = /^([^:]+:)[\\s\\S]*$/;\nvar domain = /^([^:]+:\\/*[^/]*)[\\s\\S]*$/;\n\n/**\n * @param {string} base\n * @param {string} href\n */\nfunction resolveUrl(base, href) {\n if (!baseUrls[' ' + base]) {\n // we can ignore everything in base after the last slash of its path component,\n // but we might need to add _that_\n // https://tools.ietf.org/html/rfc3986#section-3\n if (justDomain.test(base)) {\n baseUrls[' ' + base] = base + '/';\n } else {\n baseUrls[' ' + base] = rtrim(base, '/', true);\n }\n }\n base = baseUrls[' ' + base];\n var relativeBase = base.indexOf(':') === -1;\n if (href.substring(0, 2) === '//') {\n if (relativeBase) {\n return href;\n }\n return base.replace(protocol, '$1') + href;\n } else if (href.charAt(0) === '/') {\n if (relativeBase) {\n return href;\n }\n return base.replace(domain, '$1') + href;\n } else {\n return base + href;\n }\n}\nvar noopTest = {\n exec: function noopTest() {}\n};\nfunction splitCells(tableRow, count) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n var row = tableRow.replace(/\\|/g, function (match, offset, str) {\n var escaped = false,\n curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\') {\n escaped = !escaped;\n }\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n } else {\n // add space before unescaped |\n return ' |';\n }\n }),\n cells = row.split(/ \\|/);\n var i = 0;\n\n // First/last cell in a row cannot be empty if it has no leading/trailing pipe\n if (!cells[0].trim()) {\n cells.shift();\n }\n if (cells.length > 0 && !cells[cells.length - 1].trim()) {\n cells.pop();\n }\n if (cells.length > count) {\n cells.splice(count);\n } else {\n while (cells.length < count) {\n cells.push('');\n }\n }\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(/\\\\\\|/g, '|');\n }\n return cells;\n}\n\n/**\n * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n * /c*$/ is vulnerable to REDOS.\n *\n * @param {string} str\n * @param {string} c\n * @param {boolean} invert Remove suffix of non-c chars instead. Default falsey.\n */\nfunction rtrim(str, c, invert) {\n var l = str.length;\n if (l === 0) {\n return '';\n }\n\n // Length of suffix matching the invert condition.\n var suffLen = 0;\n\n // Step left until we fail to match the invert condition.\n while (suffLen < l) {\n var currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n } else if (currChar !== c && invert) {\n suffLen++;\n } else {\n break;\n }\n }\n return str.slice(0, l - suffLen);\n}\nfunction findClosingBracket(str, b) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n var l = str.length;\n var level = 0,\n i = 0;\n for (; i < l; i++) {\n if (str[i] === '\\\\') {\n i++;\n } else if (str[i] === b[0]) {\n level++;\n } else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n return -1;\n}\nfunction checkSanitizeDeprecation(opt) {\n if (opt && opt.sanitize && !opt.silent) {\n console.warn('marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options');\n }\n}\n\n// copied from https://stackoverflow.com/a/5450113/806777\n/**\n * @param {string} pattern\n * @param {number} count\n */\nfunction repeatString(pattern, count) {\n if (count < 1) {\n return '';\n }\n var result = '';\n while (count > 1) {\n if (count & 1) {\n result += pattern;\n }\n count >>= 1;\n pattern += pattern;\n }\n return result + pattern;\n}\n\nfunction outputLink(cap, link, raw, lexer) {\n var href = link.href;\n var title = link.title ? escape(link.title) : null;\n var text = cap[1].replace(/\\\\([\\[\\]])/g, '$1');\n if (cap[0].charAt(0) !== '!') {\n lexer.state.inLink = true;\n var token = {\n type: 'link',\n raw: raw,\n href: href,\n title: title,\n text: text,\n tokens: lexer.inlineTokens(text)\n };\n lexer.state.inLink = false;\n return token;\n }\n return {\n type: 'image',\n raw: raw,\n href: href,\n title: title,\n text: escape(text)\n };\n}\nfunction indentCodeCompensation(raw, text) {\n var matchIndentToCode = raw.match(/^(\\s+)(?:```)/);\n if (matchIndentToCode === null) {\n return text;\n }\n var indentToCode = matchIndentToCode[1];\n return text.split('\\n').map(function (node) {\n var matchIndentInNode = node.match(/^\\s+/);\n if (matchIndentInNode === null) {\n return node;\n }\n var indentInNode = matchIndentInNode[0];\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n return node;\n }).join('\\n');\n}\n\n/**\n * Tokenizer\n */\nvar Tokenizer = /*#__PURE__*/function () {\n function Tokenizer(options) {\n this.options = options || exports.defaults;\n }\n var _proto = Tokenizer.prototype;\n _proto.space = function space(src) {\n var cap = this.rules.block.newline.exec(src);\n if (cap && cap[0].length > 0) {\n return {\n type: 'space',\n raw: cap[0]\n };\n }\n };\n _proto.code = function code(src) {\n var cap = this.rules.block.code.exec(src);\n if (cap) {\n var text = cap[0].replace(/^ {1,4}/gm, '');\n return {\n type: 'code',\n raw: cap[0],\n codeBlockStyle: 'indented',\n text: !this.options.pedantic ? rtrim(text, '\\n') : text\n };\n }\n };\n _proto.fences = function fences(src) {\n var cap = this.rules.block.fences.exec(src);\n if (cap) {\n var raw = cap[0];\n var text = indentCodeCompensation(raw, cap[3] || '');\n return {\n type: 'code',\n raw: raw,\n lang: cap[2] ? cap[2].trim().replace(this.rules.inline._escapes, '$1') : cap[2],\n text: text\n };\n }\n };\n _proto.heading = function heading(src) {\n var cap = this.rules.block.heading.exec(src);\n if (cap) {\n var text = cap[2].trim();\n\n // remove trailing #s\n if (/#$/.test(text)) {\n var trimmed = rtrim(text, '#');\n if (this.options.pedantic) {\n text = trimmed.trim();\n } else if (!trimmed || / $/.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[1].length,\n text: text,\n tokens: this.lexer.inline(text)\n };\n }\n };\n _proto.hr = function hr(src) {\n var cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: 'hr',\n raw: cap[0]\n };\n }\n };\n _proto.blockquote = function blockquote(src) {\n var cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n var text = cap[0].replace(/^ *>[ \\t]?/gm, '');\n var top = this.lexer.state.top;\n this.lexer.state.top = true;\n var tokens = this.lexer.blockTokens(text);\n this.lexer.state.top = top;\n return {\n type: 'blockquote',\n raw: cap[0],\n tokens: tokens,\n text: text\n };\n }\n };\n _proto.list = function list(src) {\n var cap = this.rules.block.list.exec(src);\n if (cap) {\n var raw, istask, ischecked, indent, i, blankLine, endsWithBlankLine, line, nextLine, rawLine, itemContents, endEarly;\n var bull = cap[1].trim();\n var isordered = bull.length > 1;\n var list = {\n type: 'list',\n raw: '',\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: []\n };\n bull = isordered ? \"\\\\d{1,9}\\\\\" + bull.slice(-1) : \"\\\\\" + bull;\n if (this.options.pedantic) {\n bull = isordered ? bull : '[*+-]';\n }\n\n // Get next list item\n var itemRegex = new RegExp(\"^( {0,3}\" + bull + \")((?:[\\t ][^\\\\n]*)?(?:\\\\n|$))\");\n\n // Check if current bullet point can start a new List Item\n while (src) {\n endEarly = false;\n if (!(cap = itemRegex.exec(src))) {\n break;\n }\n if (this.rules.block.hr.test(src)) {\n // End list if bullet was actually HR (possibly move into itemRegex?)\n break;\n }\n raw = cap[0];\n src = src.substring(raw.length);\n line = cap[2].split('\\n', 1)[0].replace(/^\\t+/, function (t) {\n return ' '.repeat(3 * t.length);\n });\n nextLine = src.split('\\n', 1)[0];\n if (this.options.pedantic) {\n indent = 2;\n itemContents = line.trimLeft();\n } else {\n indent = cap[2].search(/[^ ]/); // Find first non-space char\n indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent\n itemContents = line.slice(indent);\n indent += cap[1].length;\n }\n blankLine = false;\n if (!line && /^ *$/.test(nextLine)) {\n // Items begin with at most one blank line\n raw += nextLine + '\\n';\n src = src.substring(nextLine.length + 1);\n endEarly = true;\n }\n if (!endEarly) {\n var nextBulletRegex = new RegExp(\"^ {0,\" + Math.min(3, indent - 1) + \"}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \\t][^\\\\n]*)?(?:\\\\n|$))\");\n var hrRegex = new RegExp(\"^ {0,\" + Math.min(3, indent - 1) + \"}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)\");\n var fencesBeginRegex = new RegExp(\"^ {0,\" + Math.min(3, indent - 1) + \"}(?:```|~~~)\");\n var headingBeginRegex = new RegExp(\"^ {0,\" + Math.min(3, indent - 1) + \"}#\");\n\n // Check if following lines should be included in List Item\n while (src) {\n rawLine = src.split('\\n', 1)[0];\n nextLine = rawLine;\n\n // Re-align to follow commonmark nesting rules\n if (this.options.pedantic) {\n nextLine = nextLine.replace(/^ {1,4}(?=( {4})*[^ ])/g, ' ');\n }\n\n // End list item if found code fences\n if (fencesBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of new heading\n if (headingBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of new bullet\n if (nextBulletRegex.test(nextLine)) {\n break;\n }\n\n // Horizontal rule found\n if (hrRegex.test(src)) {\n break;\n }\n if (nextLine.search(/[^ ]/) >= indent || !nextLine.trim()) {\n // Dedent if possible\n itemContents += '\\n' + nextLine.slice(indent);\n } else {\n // not enough indentation\n if (blankLine) {\n break;\n }\n\n // paragraph continuation unless last line was a different block level element\n if (line.search(/[^ ]/) >= 4) {\n // indented code block\n break;\n }\n if (fencesBeginRegex.test(line)) {\n break;\n }\n if (headingBeginRegex.test(line)) {\n break;\n }\n if (hrRegex.test(line)) {\n break;\n }\n itemContents += '\\n' + nextLine;\n }\n if (!blankLine && !nextLine.trim()) {\n // Check if current line is blank\n blankLine = true;\n }\n raw += rawLine + '\\n';\n src = src.substring(rawLine.length + 1);\n line = nextLine.slice(indent);\n }\n }\n if (!list.loose) {\n // If the previous item ended with a blank line, the list is loose\n if (endsWithBlankLine) {\n list.loose = true;\n } else if (/\\n *\\n *$/.test(raw)) {\n endsWithBlankLine = true;\n }\n }\n\n // Check for task list items\n if (this.options.gfm) {\n istask = /^\\[[ xX]\\] /.exec(itemContents);\n if (istask) {\n ischecked = istask[0] !== '[ ] ';\n itemContents = itemContents.replace(/^\\[[ xX]\\] +/, '');\n }\n }\n list.items.push({\n type: 'list_item',\n raw: raw,\n task: !!istask,\n checked: ischecked,\n loose: false,\n text: itemContents\n });\n list.raw += raw;\n }\n\n // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic\n list.items[list.items.length - 1].raw = raw.trimRight();\n list.items[list.items.length - 1].text = itemContents.trimRight();\n list.raw = list.raw.trimRight();\n var l = list.items.length;\n\n // Item child tokens handled here at end because we needed to have the final item to trim it first\n for (i = 0; i < l; i++) {\n this.lexer.state.top = false;\n list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []);\n if (!list.loose) {\n // Check if list should be loose\n var spacers = list.items[i].tokens.filter(function (t) {\n return t.type === 'space';\n });\n var hasMultipleLineBreaks = spacers.length > 0 && spacers.some(function (t) {\n return /\\n.*\\n/.test(t.raw);\n });\n list.loose = hasMultipleLineBreaks;\n }\n }\n\n // Set all items to loose if list is loose\n if (list.loose) {\n for (i = 0; i < l; i++) {\n list.items[i].loose = true;\n }\n }\n return list;\n }\n };\n _proto.html = function html(src) {\n var cap = this.rules.block.html.exec(src);\n if (cap) {\n var token = {\n type: 'html',\n raw: cap[0],\n pre: !this.options.sanitizer && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),\n text: cap[0]\n };\n if (this.options.sanitize) {\n var text = this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0]);\n token.type = 'paragraph';\n token.text = text;\n token.tokens = this.lexer.inline(text);\n }\n return token;\n }\n };\n _proto.def = function def(src) {\n var cap = this.rules.block.def.exec(src);\n if (cap) {\n var tag = cap[1].toLowerCase().replace(/\\s+/g, ' ');\n var href = cap[2] ? cap[2].replace(/^<(.*)>$/, '$1').replace(this.rules.inline._escapes, '$1') : '';\n var title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline._escapes, '$1') : cap[3];\n return {\n type: 'def',\n tag: tag,\n raw: cap[0],\n href: href,\n title: title\n };\n }\n };\n _proto.table = function table(src) {\n var cap = this.rules.block.table.exec(src);\n if (cap) {\n var item = {\n type: 'table',\n header: splitCells(cap[1]).map(function (c) {\n return {\n text: c\n };\n }),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n rows: cap[3] && cap[3].trim() ? cap[3].replace(/\\n[ \\t]*$/, '').split('\\n') : []\n };\n if (item.header.length === item.align.length) {\n item.raw = cap[0];\n var l = item.align.length;\n var i, j, k, row;\n for (i = 0; i < l; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n l = item.rows.length;\n for (i = 0; i < l; i++) {\n item.rows[i] = splitCells(item.rows[i], item.header.length).map(function (c) {\n return {\n text: c\n };\n });\n }\n\n // parse child tokens inside headers and cells\n\n // header child tokens\n l = item.header.length;\n for (j = 0; j < l; j++) {\n item.header[j].tokens = this.lexer.inline(item.header[j].text);\n }\n\n // cell child tokens\n l = item.rows.length;\n for (j = 0; j < l; j++) {\n row = item.rows[j];\n for (k = 0; k < row.length; k++) {\n row[k].tokens = this.lexer.inline(row[k].text);\n }\n }\n return item;\n }\n }\n };\n _proto.lheading = function lheading(src) {\n var cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1],\n tokens: this.lexer.inline(cap[1])\n };\n }\n };\n _proto.paragraph = function paragraph(src) {\n var cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n var text = cap[1].charAt(cap[1].length - 1) === '\\n' ? cap[1].slice(0, -1) : cap[1];\n return {\n type: 'paragraph',\n raw: cap[0],\n text: text,\n tokens: this.lexer.inline(text)\n };\n }\n };\n _proto.text = function text(src) {\n var cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n tokens: this.lexer.inline(cap[0])\n };\n }\n };\n _proto.escape = function escape$1(src) {\n var cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: escape(cap[1])\n };\n }\n };\n _proto.tag = function tag(src) {\n var cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!this.lexer.state.inLink && /^<a /i.test(cap[0])) {\n this.lexer.state.inLink = true;\n } else if (this.lexer.state.inLink && /^<\\/a>/i.test(cap[0])) {\n this.lexer.state.inLink = false;\n }\n if (!this.lexer.state.inRawBlock && /^<(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n this.lexer.state.inRawBlock = true;\n } else if (this.lexer.state.inRawBlock && /^<\\/(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n this.lexer.state.inRawBlock = false;\n }\n return {\n type: this.options.sanitize ? 'text' : 'html',\n raw: cap[0],\n inLink: this.lexer.state.inLink,\n inRawBlock: this.lexer.state.inRawBlock,\n text: this.options.sanitize ? this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0]) : cap[0]\n };\n }\n };\n _proto.link = function link(src) {\n var cap = this.rules.inline.link.exec(src);\n if (cap) {\n var trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && /^</.test(trimmedUrl)) {\n // commonmark requires matching angle brackets\n if (!/>$/.test(trimmedUrl)) {\n return;\n }\n\n // ending angle bracket cannot be escaped\n var rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\\\');\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n } else {\n // find closing parenthesis\n var lastParenIndex = findClosingBracket(cap[2], '()');\n if (lastParenIndex > -1) {\n var start = cap[0].indexOf('!') === 0 ? 5 : 4;\n var linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n var href = cap[2];\n var title = '';\n if (this.options.pedantic) {\n // split pedantic href and title\n var link = /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(href);\n if (link) {\n href = link[1];\n title = link[3];\n }\n } else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n href = href.trim();\n if (/^</.test(href)) {\n if (this.options.pedantic && !/>$/.test(trimmedUrl)) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n } else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline._escapes, '$1') : href,\n title: title ? title.replace(this.rules.inline._escapes, '$1') : title\n }, cap[0], this.lexer);\n }\n };\n _proto.reflink = function reflink(src, links) {\n var cap;\n if ((cap = this.rules.inline.reflink.exec(src)) || (cap = this.rules.inline.nolink.exec(src))) {\n var link = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n link = links[link.toLowerCase()];\n if (!link) {\n var text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text: text\n };\n }\n return outputLink(cap, link, cap[0], this.lexer);\n }\n };\n _proto.emStrong = function emStrong(src, maskedSrc, prevChar) {\n if (prevChar === void 0) {\n prevChar = '';\n }\n var match = this.rules.inline.emStrong.lDelim.exec(src);\n if (!match) return;\n\n // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n if (match[3] && prevChar.match(/(?:[0-9A-Za-z\\xAA\\xB2\\xB3\\xB5\\xB9\\xBA\\xBC-\\xBE\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u0660-\\u0669\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07C0-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0966-\\u096F\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09E6-\\u09F1\\u09F4-\\u09F9\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A6F\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AE6-\\u0AEF\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B66-\\u0B6F\\u0B71-\\u0B77\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0BE6-\\u0BF2\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C66-\\u0C6F\\u0C78-\\u0C7E\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D58-\\u0D61\\u0D66-\\u0D78\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DE6-\\u0DEF\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F20-\\u0F33\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F-\\u1049\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u1090-\\u1099\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1369-\\u137C\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u17E0-\\u17E9\\u17F0-\\u17F9\\u1810-\\u1819\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19DA\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B50-\\u1B59\\u1B83-\\u1BA0\\u1BAE-\\u1BE5\\u1C00-\\u1C23\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2070\\u2071\\u2074-\\u2079\\u207F-\\u2089\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2150-\\u2189\\u2460-\\u249B\\u24EA-\\u24FF\\u2776-\\u2793\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2CFD\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u3192-\\u3195\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3220-\\u3229\\u3248-\\u324F\\u3251-\\u325F\\u3280-\\u3289\\u32B1-\\u32BF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA830-\\uA835\\uA840-\\uA873\\uA882-\\uA8B3\\uA8D0-\\uA8D9\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA900-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF-\\uA9D9\\uA9E0-\\uA9E4\\uA9E6-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD07-\\uDD33\\uDD40-\\uDD78\\uDD8A\\uDD8B\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDEE1-\\uDEFB\\uDF00-\\uDF23\\uDF2D-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC58-\\uDC76\\uDC79-\\uDC9E\\uDCA7-\\uDCAF\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDCFB-\\uDD1B\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBC-\\uDDCF\\uDDD2-\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE40-\\uDE48\\uDE60-\\uDE7E\\uDE80-\\uDE9F\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDEEB-\\uDEEF\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF58-\\uDF72\\uDF78-\\uDF91\\uDFA9-\\uDFAF]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDCFA-\\uDD23\\uDD30-\\uDD39\\uDE60-\\uDE7E\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF27\\uDF30-\\uDF45\\uDF51-\\uDF54\\uDF70-\\uDF81\\uDFB0-\\uDFCB\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC52-\\uDC6F\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD03-\\uDD26\\uDD36-\\uDD3F\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDD0-\\uDDDA\\uDDDC\\uDDE1-\\uDDF4\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDEF0-\\uDEF9\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC50-\\uDC59\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEAA\\uDEB8\\uDEC0-\\uDEC9\\uDF00-\\uDF1A\\uDF30-\\uDF3B\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCF2\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDD50-\\uDD59\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC50-\\uDC6C\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD50-\\uDD59\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDDA0-\\uDDA9\\uDEE0-\\uDEF2\\uDFB0\\uDFC0-\\uDFD4]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDE70-\\uDEBE\\uDEC0-\\uDEC9\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF5B-\\uDF61\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE96\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD834[\\uDEE0-\\uDEF3\\uDF60-\\uDF78]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD40-\\uDD49\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB\\uDEF0-\\uDEF9]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDCC7-\\uDCCF\\uDD00-\\uDD43\\uDD4B\\uDD50-\\uDD59]|\\uD83B[\\uDC71-\\uDCAB\\uDCAD-\\uDCAF\\uDCB1-\\uDCB4\\uDD01-\\uDD2D\\uDD2F-\\uDD3D\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD83C[\\uDD00-\\uDD0C]|\\uD83E[\\uDFF0-\\uDFF9]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])/)) return;\n var nextChar = match[1] || match[2] || '';\n if (!nextChar || nextChar && (prevChar === '' || this.rules.inline.punctuation.exec(prevChar))) {\n var lLength = match[0].length - 1;\n var rDelim,\n rLength,\n delimTotal = lLength,\n midDelimTotal = 0;\n var endReg = match[0][0] === '*' ? this.rules.inline.emStrong.rDelimAst : this.rules.inline.emStrong.rDelimUnd;\n endReg.lastIndex = 0;\n\n // Clip maskedSrc to same section of string as src (move to lexer?)\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n if (!rDelim) continue; // skip single * in __abc*abc__\n\n rLength = rDelim.length;\n if (match[3] || match[4]) {\n // found another Left Delim\n delimTotal += rLength;\n continue;\n } else if (match[5] || match[6]) {\n // either Left or Right Delim\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue; // CommonMark Emphasis Rules 9-10\n }\n }\n\n delimTotal -= rLength;\n if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n\n // Remove extra characters. *a*** -> *a*\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n var raw = src.slice(0, lLength + match.index + (match[0].length - rDelim.length) + rLength);\n\n // Create `em` if smallest delimiter has odd char count. *a***\n if (Math.min(lLength, rLength) % 2) {\n var _text = raw.slice(1, -1);\n return {\n type: 'em',\n raw: raw,\n text: _text,\n tokens: this.lexer.inlineTokens(_text)\n };\n }\n\n // Create 'strong' if smallest delimiter has even char count. **a***\n var text = raw.slice(2, -2);\n return {\n type: 'strong',\n raw: raw,\n text: text,\n tokens: this.lexer.inlineTokens(text)\n };\n }\n }\n };\n _proto.codespan = function codespan(src) {\n var cap = this.rules.inline.code.exec(src);\n if (cap) {\n var text = cap[2].replace(/\\n/g, ' ');\n var hasNonSpaceChars = /[^ ]/.test(text);\n var hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n text = escape(text, true);\n return {\n type: 'codespan',\n raw: cap[0],\n text: text\n };\n }\n };\n _proto.br = function br(src) {\n var cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: 'br',\n raw: cap[0]\n };\n }\n };\n _proto.del = function del(src) {\n var cap = this.rules.inline.del.exec(src);\n if (cap) {\n return {\n type: 'del',\n raw: cap[0],\n text: cap[2],\n tokens: this.lexer.inlineTokens(cap[2])\n };\n }\n };\n _proto.autolink = function autolink(src, mangle) {\n var cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n var text, href;\n if (cap[2] === '@') {\n text = escape(this.options.mangle ? mangle(cap[1]) : cap[1]);\n href = 'mailto:' + text;\n } else {\n text = escape(cap[1]);\n href = text;\n }\n return {\n type: 'link',\n raw: cap[0],\n text: text,\n href: href,\n tokens: [{\n type: 'text',\n raw: text,\n text: text\n }]\n };\n }\n };\n _proto.url = function url(src, mangle) {\n var cap;\n if (cap = this.rules.inline.url.exec(src)) {\n var text, href;\n if (cap[2] === '@') {\n text = escape(this.options.mangle ? mangle(cap[0]) : cap[0]);\n href = 'mailto:' + text;\n } else {\n // do extended autolink path validation\n var prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])[0];\n } while (prevCapZero !== cap[0]);\n text = escape(cap[0]);\n if (cap[1] === 'www.') {\n href = 'http://' + cap[0];\n } else {\n href = cap[0];\n }\n }\n return {\n type: 'link',\n raw: cap[0],\n text: text,\n href: href,\n tokens: [{\n type: 'text',\n raw: text,\n text: text\n }]\n };\n }\n };\n _proto.inlineText = function inlineText(src, smartypants) {\n var cap = this.rules.inline.text.exec(src);\n if (cap) {\n var text;\n if (this.lexer.state.inRawBlock) {\n text = this.options.sanitize ? this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0]) : cap[0];\n } else {\n text = escape(this.options.smartypants ? smartypants(cap[0]) : cap[0]);\n }\n return {\n type: 'text',\n raw: cap[0],\n text: text\n };\n }\n };\n return Tokenizer;\n}();\n\n/**\n * Block-Level Grammar\n */\nvar block = {\n newline: /^(?: *(?:\\n|$))+/,\n code: /^( {4}[^\\n]+(?:\\n(?: *(?:\\n|$))*)?)+/,\n fences: /^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/,\n hr: /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/,\n heading: /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,\n blockquote: /^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/,\n list: /^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/,\n html: '^ {0,3}(?:' // optional indentation\n + '<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n + '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n + '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n + '|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)' // (4)\n + '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)' // (5)\n + '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (6)\n + '|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (7) open tag\n + '|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (7) closing tag\n + ')',\n def: /^ {0,3}\\[(label)\\]: *(?:\\n *)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n *)?| *\\n *)(title))? *(?:\\n+|$)/,\n table: noopTest,\n lheading: /^((?:.|\\n(?!\\n))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n // regex template, placeholders will be replaced according to different paragraph\n // interruption rules of commonmark and the original markdown spec:\n _paragraph: /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/,\n text: /^[^\\n]+/\n};\nblock._label = /(?!\\s*\\])(?:\\\\.|[^\\[\\]\\\\])+/;\nblock._title = /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/;\nblock.def = edit(block.def).replace('label', block._label).replace('title', block._title).getRegex();\nblock.bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nblock.listItemStart = edit(/^( *)(bull) */).replace('bull', block.bullet).getRegex();\nblock.list = edit(block.list).replace(/bull/g, block.bullet).replace('hr', '\\\\n+(?=\\\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$))').replace('def', '\\\\n+(?=' + block.def.source + ')').getRegex();\nblock._tag = 'address|article|aside|base|basefont|blockquote|body|caption' + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption' + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe' + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option' + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr' + '|track|ul';\nblock._comment = /<!--(?!-?>)[\\s\\S]*?(?:-->|$)/;\nblock.html = edit(block.html, 'i').replace('comment', block._comment).replace('tag', block._tag).replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/).getRegex();\nblock.paragraph = edit(block._paragraph).replace('hr', block.hr).replace('heading', ' {0,3}#{1,6} ').replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs\n.replace('|table', '').replace('blockquote', ' {0,3}>').replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n').replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n.replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)').replace('tag', block._tag) // pars can be interrupted by type (6) html blocks\n.getRegex();\nblock.blockquote = edit(block.blockquote).replace('paragraph', block.paragraph).getRegex();\n\n/**\n * Normal Block Grammar\n */\n\nblock.normal = _extends({}, block);\n\n/**\n * GFM Block Grammar\n */\n\nblock.gfm = _extends({}, block.normal, {\n table: '^ *([^\\\\n ].*\\\\|.*)\\\\n' // Header\n + ' {0,3}(?:\\\\| *)?(:?-+:? *(?:\\\\| *:?-+:? *)*)(?:\\\\| *)?' // Align\n + '(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)' // Cells\n});\n\nblock.gfm.table = edit(block.gfm.table).replace('hr', block.hr).replace('heading', ' {0,3}#{1,6} ').replace('blockquote', ' {0,3}>').replace('code', ' {4}[^\\\\n]').replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n').replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n.replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)').replace('tag', block._tag) // tables can be interrupted by type (6) html blocks\n.getRegex();\nblock.gfm.paragraph = edit(block._paragraph).replace('hr', block.hr).replace('heading', ' {0,3}#{1,6} ').replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs\n.replace('table', block.gfm.table) // interrupt paragraphs with table\n.replace('blockquote', ' {0,3}>').replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n').replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n.replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)').replace('tag', block._tag) // pars can be interrupted by type (6) html blocks\n.getRegex();\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\n\nblock.pedantic = _extends({}, block.normal, {\n html: edit('^ *(?:comment *(?:\\\\n|\\\\s*$)' + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))').replace('comment', block._comment).replace(/tag/g, '(?!(?:' + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub' + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)' + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b').getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest,\n // fences not supported\n lheading: /^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n paragraph: edit(block.normal._paragraph).replace('hr', block.hr).replace('heading', ' *#{1,6} *[^\\n]').replace('lheading', block.lheading).replace('blockquote', ' {0,3}>').replace('|fences', '').replace('|list', '').replace('|html', '').getRegex()\n});\n\n/**\n * Inline-Level Grammar\n */\nvar inline = {\n escape: /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,\n autolink: /^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/,\n url: noopTest,\n tag: '^comment' + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>',\n // CDATA section\n link: /^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/,\n reflink: /^!?\\[(label)\\]\\[(ref)\\]/,\n nolink: /^!?\\[(ref)\\](?:\\[\\])?/,\n reflinkSearch: 'reflink|nolink(?!\\\\()',\n emStrong: {\n lDelim: /^(?:\\*+(?:([punct_])|[^\\s*]))|^_+(?:([punct*])|([^\\s_]))/,\n // (1) and (2) can only be a Right Delimiter. (3) and (4) can only be Left. (5) and (6) can be either Left or Right.\n // () Skip orphan inside strong () Consume to delim (1) #*** (2) a***#, a*** (3) #***a, ***a (4) ***# (5) #***# (6) a***a\n rDelimAst: /^(?:[^_*\\\\]|\\\\.)*?\\_\\_(?:[^_*\\\\]|\\\\.)*?\\*(?:[^_*\\\\]|\\\\.)*?(?=\\_\\_)|(?:[^*\\\\]|\\\\.)+(?=[^*])|[punct_](\\*+)(?=[\\s]|$)|(?:[^punct*_\\s\\\\]|\\\\.)(\\*+)(?=[punct_\\s]|$)|[punct_\\s](\\*+)(?=[^punct*_\\s])|[\\s](\\*+)(?=[punct_])|[punct_](\\*+)(?=[punct_])|(?:[^punct*_\\s\\\\]|\\\\.)(\\*+)(?=[^punct*_\\s])/,\n rDelimUnd: /^(?:[^_*\\\\]|\\\\.)*?\\*\\*(?:[^_*\\\\]|\\\\.)*?\\_(?:[^_*\\\\]|\\\\.)*?(?=\\*\\*)|(?:[^_\\\\]|\\\\.)+(?=[^_])|[punct*](\\_+)(?=[\\s]|$)|(?:[^punct*_\\s\\\\]|\\\\.)(\\_+)(?=[punct*\\s]|$)|[punct*\\s](\\_+)(?=[^punct*_\\s])|[\\s](\\_+)(?=[punct*])|[punct*](\\_+)(?=[punct*])/ // ^- Not allowed for _\n },\n\n code: /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,\n br: /^( {2,}|\\\\)\\n(?!\\s*$)/,\n del: noopTest,\n text: /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,\n punctuation: /^([\\spunctuation])/\n};\n\n// list of punctuation marks from CommonMark spec\n// without * and _ to handle the different emphasis markers * and _\ninline._punctuation = '!\"#$%&\\'()+\\\\-.,/:;<=>?@\\\\[\\\\]`^{|}~';\ninline.punctuation = edit(inline.punctuation).replace(/punctuation/g, inline._punctuation).getRegex();\n\n// sequences em should skip over [title](link), `code`, <html>\ninline.blockSkip = /\\[[^\\]]*?\\]\\([^\\)]*?\\)|`[^`]*?`|<[^>]*?>/g;\n// lookbehind is not available on Safari as of version 16\n// inline.escapedEmSt = /(?<=(?:^|[^\\\\)(?:\\\\[^])*)\\\\[*_]/g;\ninline.escapedEmSt = /(?:^|[^\\\\])(?:\\\\\\\\)*\\\\[*_]/g;\ninline._comment = edit(block._comment).replace('(?:-->|$)', '-->').getRegex();\ninline.emStrong.lDelim = edit(inline.emStrong.lDelim).replace(/punct/g, inline._punctuation).getRegex();\ninline.emStrong.rDelimAst = edit(inline.emStrong.rDelimAst, 'g').replace(/punct/g, inline._punctuation).getRegex();\ninline.emStrong.rDelimUnd = edit(inline.emStrong.rDelimUnd, 'g').replace(/punct/g, inline._punctuation).getRegex();\ninline._escapes = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/g;\ninline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;\ninline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;\ninline.autolink = edit(inline.autolink).replace('scheme', inline._scheme).replace('email', inline._email).getRegex();\ninline._attribute = /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/;\ninline.tag = edit(inline.tag).replace('comment', inline._comment).replace('attribute', inline._attribute).getRegex();\ninline._label = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\ninline._href = /<(?:\\\\.|[^\\n<>\\\\])+>|[^\\s\\x00-\\x1f]*/;\ninline._title = /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/;\ninline.link = edit(inline.link).replace('label', inline._label).replace('href', inline._href).replace('title', inline._title).getRegex();\ninline.reflink = edit(inline.reflink).replace('label', inline._label).replace('ref', block._label).getRegex();\ninline.nolink = edit(inline.nolink).replace('ref', block._label).getRegex();\ninline.reflinkSearch = edit(inline.reflinkSearch, 'g').replace('reflink', inline.reflink).replace('nolink', inline.nolink).getRegex();\n\n/**\n * Normal Inline Grammar\n */\n\ninline.normal = _extends({}, inline);\n\n/**\n * Pedantic Inline Grammar\n */\n\ninline.pedantic = _extends({}, inline.normal, {\n strong: {\n start: /^__|\\*\\*/,\n middle: /^__(?=\\S)([\\s\\S]*?\\S)__(?!_)|^\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*(?!\\*)/,\n endAst: /\\*\\*(?!\\*)/g,\n endUnd: /__(?!_)/g\n },\n em: {\n start: /^_|\\*/,\n middle: /^()\\*(?=\\S)([\\s\\S]*?\\S)\\*(?!\\*)|^_(?=\\S)([\\s\\S]*?\\S)_(?!_)/,\n endAst: /\\*(?!\\*)/g,\n endUnd: /_(?!_)/g\n },\n link: edit(/^!?\\[(label)\\]\\((.*?)\\)/).replace('label', inline._label).getRegex(),\n reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/).replace('label', inline._label).getRegex()\n});\n\n/**\n * GFM Inline Grammar\n */\n\ninline.gfm = _extends({}, inline.normal, {\n escape: edit(inline.escape).replace('])', '~|])').getRegex(),\n _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,\n url: /^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/,\n _backpedal: /(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])([\\s\\S]*?[^\\s~])\\1(?=[^~]|$)/,\n text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/\n});\ninline.gfm.url = edit(inline.gfm.url, 'i').replace('email', inline.gfm._extended_email).getRegex();\n/**\n * GFM + Line Breaks Inline Grammar\n */\n\ninline.breaks = _extends({}, inline.gfm, {\n br: edit(inline.br).replace('{2,}', '*').getRegex(),\n text: edit(inline.gfm.text).replace('\\\\b_', '\\\\b_| {2,}\\\\n').replace(/\\{2,\\}/g, '*').getRegex()\n});\n\n/**\n * smartypants text replacement\n * @param {string} text\n */\nfunction smartypants(text) {\n return text\n // em-dashes\n .replace(/---/g, \"\\u2014\")\n // en-dashes\n .replace(/--/g, \"\\u2013\")\n // opening singles\n .replace(/(^|[-\\u2014/(\\[{\"\\s])'/g, \"$1\\u2018\")\n // closing singles & apostrophes\n .replace(/'/g, \"\\u2019\")\n // opening doubles\n .replace(/(^|[-\\u2014/(\\[{\\u2018\\s])\"/g, \"$1\\u201C\")\n // closing doubles\n .replace(/\"/g, \"\\u201D\")\n // ellipses\n .replace(/\\.{3}/g, \"\\u2026\");\n}\n\n/**\n * mangle email addresses\n * @param {string} text\n */\nfunction mangle(text) {\n var out = '',\n i,\n ch;\n var l = text.length;\n for (i = 0; i < l; i++) {\n ch = text.charCodeAt(i);\n if (Math.random() > 0.5) {\n ch = 'x' + ch.toString(16);\n }\n out += '&#' + ch + ';';\n }\n return out;\n}\n\n/**\n * Block Lexer\n */\nvar Lexer = /*#__PURE__*/function () {\n function Lexer(options) {\n this.tokens = [];\n this.tokens.links = Object.create(null);\n this.options = options || exports.defaults;\n this.options.tokenizer = this.options.tokenizer || new Tokenizer();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n this.tokenizer.lexer = this;\n this.inlineQueue = [];\n this.state = {\n inLink: false,\n inRawBlock: false,\n top: true\n };\n var rules = {\n block: block.normal,\n inline: inline.normal\n };\n if (this.options.pedantic) {\n rules.block = block.pedantic;\n rules.inline = inline.pedantic;\n } else if (this.options.gfm) {\n rules.block = block.gfm;\n if (this.options.breaks) {\n rules.inline = inline.breaks;\n } else {\n rules.inline = inline.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n\n /**\n * Expose Rules\n */\n /**\n * Static Lex Method\n */\n Lexer.lex = function lex(src, options) {\n var lexer = new Lexer(options);\n return lexer.lex(src);\n }\n\n /**\n * Static Lex Inline Method\n */;\n Lexer.lexInline = function lexInline(src, options) {\n var lexer = new Lexer(options);\n return lexer.inlineTokens(src);\n }\n\n /**\n * Preprocessing\n */;\n var _proto = Lexer.prototype;\n _proto.lex = function lex(src) {\n src = src.replace(/\\r\\n|\\r/g, '\\n');\n this.blockTokens(src, this.tokens);\n var next;\n while (next = this.inlineQueue.shift()) {\n this.inlineTokens(next.src, next.tokens);\n }\n return this.tokens;\n }\n\n /**\n * Lexing\n */;\n _proto.blockTokens = function blockTokens(src, tokens) {\n var _this = this;\n if (tokens === void 0) {\n tokens = [];\n }\n if (this.options.pedantic) {\n src = src.replace(/\\t/g, ' ').replace(/^ +$/gm, '');\n } else {\n src = src.replace(/^( *)(\\t+)/gm, function (_, leading, tabs) {\n return leading + ' '.repeat(tabs.length);\n });\n }\n var token, lastToken, cutSrc, lastParagraphClipped;\n while (src) {\n if (this.options.extensions && this.options.extensions.block && this.options.extensions.block.some(function (extTokenizer) {\n if (token = extTokenizer.call({\n lexer: _this\n }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n if (token.raw.length === 1 && tokens.length > 0) {\n // if there's a single \\n as a spacer, it's terminating the last line,\n // so move it there so that we don't get unecessary paragraph tags\n tokens[tokens.length - 1].raw += '\\n';\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // code\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n // An indented code block cannot interrupt a paragraph.\n if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // fences\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // heading\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // hr\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // blockquote\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // list\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // html\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // def\n if (token = this.tokenizer.def(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.raw;\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n } else if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title\n };\n }\n continue;\n }\n\n // table (gfm)\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // lheading\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // top-level paragraph\n // prevent paragraph consuming extensions by clipping 'src' to extension start\n cutSrc = src;\n if (this.options.extensions && this.options.extensions.startBlock) {\n (function () {\n var startIndex = Infinity;\n var tempSrc = src.slice(1);\n var tempStart = void 0;\n _this.options.extensions.startBlock.forEach(function (getStartIndex) {\n tempStart = getStartIndex.call({\n lexer: this\n }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n })();\n }\n if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n lastToken = tokens[tokens.length - 1];\n if (lastParagraphClipped && lastToken.type === 'paragraph') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n } else {\n tokens.push(token);\n }\n lastParagraphClipped = cutSrc.length !== src.length;\n src = src.substring(token.raw.length);\n continue;\n }\n\n // text\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n if (src) {\n var errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n this.state.top = true;\n return tokens;\n };\n _proto.inline = function inline(src, tokens) {\n if (tokens === void 0) {\n tokens = [];\n }\n this.inlineQueue.push({\n src: src,\n tokens: tokens\n });\n return tokens;\n }\n\n /**\n * Lexing/Compiling\n */;\n _proto.inlineTokens = function inlineTokens(src, tokens) {\n var _this2 = this;\n if (tokens === void 0) {\n tokens = [];\n }\n var token, lastToken, cutSrc;\n\n // String with links masked to avoid interference with em and strong\n var maskedSrc = src;\n var match;\n var keepPrevChar, prevChar;\n\n // Mask out reflinks\n if (this.tokens.links) {\n var links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n // Mask out other blocks\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n\n // Mask out escaped em & strong delimiters\n while ((match = this.tokenizer.rules.inline.escapedEmSt.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index + match[0].length - 2) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);\n this.tokenizer.rules.inline.escapedEmSt.lastIndex--;\n }\n while (src) {\n if (!keepPrevChar) {\n prevChar = '';\n }\n keepPrevChar = false;\n\n // extensions\n if (this.options.extensions && this.options.extensions.inline && this.options.extensions.inline.some(function (extTokenizer) {\n if (token = extTokenizer.call({\n lexer: _this2\n }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n\n // escape\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // tag\n if (token = this.tokenizer.tag(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // link\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // reflink, nolink\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // em & strong\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // code\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // br\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // del (gfm)\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // autolink\n if (token = this.tokenizer.autolink(src, mangle)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // url (gfm)\n if (!this.state.inLink && (token = this.tokenizer.url(src, mangle))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n // prevent inlineText consuming extensions by clipping 'src' to extension start\n cutSrc = src;\n if (this.options.extensions && this.options.extensions.startInline) {\n (function () {\n var startIndex = Infinity;\n var tempSrc = src.slice(1);\n var tempStart = void 0;\n _this2.options.extensions.startInline.forEach(function (getStartIndex) {\n tempStart = getStartIndex.call({\n lexer: this\n }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n })();\n }\n if (token = this.tokenizer.inlineText(cutSrc, smartypants)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== '_') {\n // Track prevChar before string of ____ started\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n if (src) {\n var errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n return tokens;\n };\n _createClass(Lexer, null, [{\n key: \"rules\",\n get: function get() {\n return {\n block: block,\n inline: inline\n };\n }\n }]);\n return Lexer;\n}();\n\n/**\n * Renderer\n */\nvar Renderer = /*#__PURE__*/function () {\n function Renderer(options) {\n this.options = options || exports.defaults;\n }\n var _proto = Renderer.prototype;\n _proto.code = function code(_code, infostring, escaped) {\n var lang = (infostring || '').match(/\\S*/)[0];\n if (this.options.highlight) {\n var out = this.options.highlight(_code, lang);\n if (out != null && out !== _code) {\n escaped = true;\n _code = out;\n }\n }\n _code = _code.replace(/\\n$/, '') + '\\n';\n if (!lang) {\n return '<pre><code>' + (escaped ? _code : escape(_code, true)) + '</code></pre>\\n';\n }\n return '<pre><code class=\"' + this.options.langPrefix + escape(lang) + '\">' + (escaped ? _code : escape(_code, true)) + '</code></pre>\\n';\n }\n\n /**\n * @param {string} quote\n */;\n _proto.blockquote = function blockquote(quote) {\n return \"<blockquote>\\n\" + quote + \"</blockquote>\\n\";\n };\n _proto.html = function html(_html) {\n return _html;\n }\n\n /**\n * @param {string} text\n * @param {string} level\n * @param {string} raw\n * @param {any} slugger\n */;\n _proto.heading = function heading(text, level, raw, slugger) {\n if (this.options.headerIds) {\n var id = this.options.headerPrefix + slugger.slug(raw);\n return \"<h\" + level + \" id=\\\"\" + id + \"\\\">\" + text + \"</h\" + level + \">\\n\";\n }\n\n // ignore IDs\n return \"<h\" + level + \">\" + text + \"</h\" + level + \">\\n\";\n };\n _proto.hr = function hr() {\n return this.options.xhtml ? '<hr/>\\n' : '<hr>\\n';\n };\n _proto.list = function list(body, ordered, start) {\n var type = ordered ? 'ol' : 'ul',\n startatt = ordered && start !== 1 ? ' start=\"' + start + '\"' : '';\n return '<' + type + startatt + '>\\n' + body + '</' + type + '>\\n';\n }\n\n /**\n * @param {string} text\n */;\n _proto.listitem = function listitem(text) {\n return \"<li>\" + text + \"</li>\\n\";\n };\n _proto.checkbox = function checkbox(checked) {\n return '<input ' + (checked ? 'checked=\"\" ' : '') + 'disabled=\"\" type=\"checkbox\"' + (this.options.xhtml ? ' /' : '') + '> ';\n }\n\n /**\n * @param {string} text\n */;\n _proto.paragraph = function paragraph(text) {\n return \"<p>\" + text + \"</p>\\n\";\n }\n\n /**\n * @param {string} header\n * @param {string} body\n */;\n _proto.table = function table(header, body) {\n if (body) body = \"<tbody>\" + body + \"</tbody>\";\n return '<table>\\n' + '<thead>\\n' + header + '</thead>\\n' + body + '</table>\\n';\n }\n\n /**\n * @param {string} content\n */;\n _proto.tablerow = function tablerow(content) {\n return \"<tr>\\n\" + content + \"</tr>\\n\";\n };\n _proto.tablecell = function tablecell(content, flags) {\n var type = flags.header ? 'th' : 'td';\n var tag = flags.align ? \"<\" + type + \" align=\\\"\" + flags.align + \"\\\">\" : \"<\" + type + \">\";\n return tag + content + (\"</\" + type + \">\\n\");\n }\n\n /**\n * span level renderer\n * @param {string} text\n */;\n _proto.strong = function strong(text) {\n return \"<strong>\" + text + \"</strong>\";\n }\n\n /**\n * @param {string} text\n */;\n _proto.em = function em(text) {\n return \"<em>\" + text + \"</em>\";\n }\n\n /**\n * @param {string} text\n */;\n _proto.codespan = function codespan(text) {\n return \"<code>\" + text + \"</code>\";\n };\n _proto.br = function br() {\n return this.options.xhtml ? '<br/>' : '<br>';\n }\n\n /**\n * @param {string} text\n */;\n _proto.del = function del(text) {\n return \"<del>\" + text + \"</del>\";\n }\n\n /**\n * @param {string} href\n * @param {string} title\n * @param {string} text\n */;\n _proto.link = function link(href, title, text) {\n href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);\n if (href === null) {\n return text;\n }\n var out = '<a href=\"' + href + '\"';\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n out += '>' + text + '</a>';\n return out;\n }\n\n /**\n * @param {string} href\n * @param {string} title\n * @param {string} text\n */;\n _proto.image = function image(href, title, text) {\n href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);\n if (href === null) {\n return text;\n }\n var out = \"<img src=\\\"\" + href + \"\\\" alt=\\\"\" + text + \"\\\"\";\n if (title) {\n out += \" title=\\\"\" + title + \"\\\"\";\n }\n out += this.options.xhtml ? '/>' : '>';\n return out;\n };\n _proto.text = function text(_text) {\n return _text;\n };\n return Renderer;\n}();\n\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\nvar TextRenderer = /*#__PURE__*/function () {\n function TextRenderer() {}\n var _proto = TextRenderer.prototype;\n // no need for block level renderers\n _proto.strong = function strong(text) {\n return text;\n };\n _proto.em = function em(text) {\n return text;\n };\n _proto.codespan = function codespan(text) {\n return text;\n };\n _proto.del = function del(text) {\n return text;\n };\n _proto.html = function html(text) {\n return text;\n };\n _proto.text = function text(_text) {\n return _text;\n };\n _proto.link = function link(href, title, text) {\n return '' + text;\n };\n _proto.image = function image(href, title, text) {\n return '' + text;\n };\n _proto.br = function br() {\n return '';\n };\n return TextRenderer;\n}();\n\n/**\n * Slugger generates header id\n */\nvar Slugger = /*#__PURE__*/function () {\n function Slugger() {\n this.seen = {};\n }\n\n /**\n * @param {string} value\n */\n var _proto = Slugger.prototype;\n _proto.serialize = function serialize(value) {\n return value.toLowerCase().trim()\n // remove html tags\n .replace(/<[!\\/a-z].*?>/ig, '')\n // remove unwanted chars\n .replace(/[\\u2000-\\u206F\\u2E00-\\u2E7F\\\\'!\"#$%&()*+,./:;<=>?@[\\]^`{|}~]/g, '').replace(/\\s/g, '-');\n }\n\n /**\n * Finds the next safe (unique) slug to use\n * @param {string} originalSlug\n * @param {boolean} isDryRun\n */;\n _proto.getNextSafeSlug = function getNextSafeSlug(originalSlug, isDryRun) {\n var slug = originalSlug;\n var occurenceAccumulator = 0;\n if (this.seen.hasOwnProperty(slug)) {\n occurenceAccumulator = this.seen[originalSlug];\n do {\n occurenceAccumulator++;\n slug = originalSlug + '-' + occurenceAccumulator;\n } while (this.seen.hasOwnProperty(slug));\n }\n if (!isDryRun) {\n this.seen[originalSlug] = occurenceAccumulator;\n this.seen[slug] = 0;\n }\n return slug;\n }\n\n /**\n * Convert string to unique id\n * @param {object} [options]\n * @param {boolean} [options.dryrun] Generates the next unique slug without\n * updating the internal accumulator.\n */;\n _proto.slug = function slug(value, options) {\n if (options === void 0) {\n options = {};\n }\n var slug = this.serialize(value);\n return this.getNextSafeSlug(slug, options.dryrun);\n };\n return Slugger;\n}();\n\n/**\n * Parsing & Compiling\n */\nvar Parser = /*#__PURE__*/function () {\n function Parser(options) {\n this.options = options || exports.defaults;\n this.options.renderer = this.options.renderer || new Renderer();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.textRenderer = new TextRenderer();\n this.slugger = new Slugger();\n }\n\n /**\n * Static Parse Method\n */\n Parser.parse = function parse(tokens, options) {\n var parser = new Parser(options);\n return parser.parse(tokens);\n }\n\n /**\n * Static Parse Inline Method\n */;\n Parser.parseInline = function parseInline(tokens, options) {\n var parser = new Parser(options);\n return parser.parseInline(tokens);\n }\n\n /**\n * Parse Loop\n */;\n var _proto = Parser.prototype;\n _proto.parse = function parse(tokens, top) {\n if (top === void 0) {\n top = true;\n }\n var out = '',\n i,\n j,\n k,\n l2,\n l3,\n row,\n cell,\n header,\n body,\n token,\n ordered,\n start,\n loose,\n itemBody,\n item,\n checked,\n task,\n checkbox,\n ret;\n var l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n\n // Run any renderer extensions\n if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {\n ret = this.options.extensions.renderers[token.type].call({\n parser: this\n }, token);\n if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'paragraph', 'text'].includes(token.type)) {\n out += ret || '';\n continue;\n }\n }\n switch (token.type) {\n case 'space':\n {\n continue;\n }\n case 'hr':\n {\n out += this.renderer.hr();\n continue;\n }\n case 'heading':\n {\n out += this.renderer.heading(this.parseInline(token.tokens), token.depth, unescape(this.parseInline(token.tokens, this.textRenderer)), this.slugger);\n continue;\n }\n case 'code':\n {\n out += this.renderer.code(token.text, token.lang, token.escaped);\n continue;\n }\n case 'table':\n {\n header = '';\n\n // header\n cell = '';\n l2 = token.header.length;\n for (j = 0; j < l2; j++) {\n cell += this.renderer.tablecell(this.parseInline(token.header[j].tokens), {\n header: true,\n align: token.align[j]\n });\n }\n header += this.renderer.tablerow(cell);\n body = '';\n l2 = token.rows.length;\n for (j = 0; j < l2; j++) {\n row = token.rows[j];\n cell = '';\n l3 = row.length;\n for (k = 0; k < l3; k++) {\n cell += this.renderer.tablecell(this.parseInline(row[k].tokens), {\n header: false,\n align: token.align[k]\n });\n }\n body += this.renderer.tablerow(cell);\n }\n out += this.renderer.table(header, body);\n continue;\n }\n case 'blockquote':\n {\n body = this.parse(token.tokens);\n out += this.renderer.blockquote(body);\n continue;\n }\n case 'list':\n {\n ordered = token.ordered;\n start = token.start;\n loose = token.loose;\n l2 = token.items.length;\n body = '';\n for (j = 0; j < l2; j++) {\n item = token.items[j];\n checked = item.checked;\n task = item.task;\n itemBody = '';\n if (item.task) {\n checkbox = this.renderer.checkbox(checked);\n if (loose) {\n if (item.tokens.length > 0 && item.tokens[0].type === 'paragraph') {\n item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;\n }\n } else {\n item.tokens.unshift({\n type: 'text',\n text: checkbox\n });\n }\n } else {\n itemBody += checkbox;\n }\n }\n itemBody += this.parse(item.tokens, loose);\n body += this.renderer.listitem(itemBody, task, checked);\n }\n out += this.renderer.list(body, ordered, start);\n continue;\n }\n case 'html':\n {\n // TODO parse inline content if parameter markdown=1\n out += this.renderer.html(token.text);\n continue;\n }\n case 'paragraph':\n {\n out += this.renderer.paragraph(this.parseInline(token.tokens));\n continue;\n }\n case 'text':\n {\n body = token.tokens ? this.parseInline(token.tokens) : token.text;\n while (i + 1 < l && tokens[i + 1].type === 'text') {\n token = tokens[++i];\n body += '\\n' + (token.tokens ? this.parseInline(token.tokens) : token.text);\n }\n out += top ? this.renderer.paragraph(body) : body;\n continue;\n }\n default:\n {\n var errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n\n /**\n * Parse Inline Tokens\n */;\n _proto.parseInline = function parseInline(tokens, renderer) {\n renderer = renderer || this.renderer;\n var out = '',\n i,\n token,\n ret;\n var l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n\n // Run any renderer extensions\n if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {\n ret = this.options.extensions.renderers[token.type].call({\n parser: this\n }, token);\n if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(token.type)) {\n out += ret || '';\n continue;\n }\n }\n switch (token.type) {\n case 'escape':\n {\n out += renderer.text(token.text);\n break;\n }\n case 'html':\n {\n out += renderer.html(token.text);\n break;\n }\n case 'link':\n {\n out += renderer.link(token.href, token.title, this.parseInline(token.tokens, renderer));\n break;\n }\n case 'image':\n {\n out += renderer.image(token.href, token.title, token.text);\n break;\n }\n case 'strong':\n {\n out += renderer.strong(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'em':\n {\n out += renderer.em(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'codespan':\n {\n out += renderer.codespan(token.text);\n break;\n }\n case 'br':\n {\n out += renderer.br();\n break;\n }\n case 'del':\n {\n out += renderer.del(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'text':\n {\n out += renderer.text(token.text);\n break;\n }\n default:\n {\n var errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n };\n return Parser;\n}();\n\nvar Hooks = /*#__PURE__*/function () {\n function Hooks(options) {\n this.options = options || exports.defaults;\n }\n var _proto = Hooks.prototype;\n /**\n * Process markdown before marked\n */\n _proto.preprocess = function preprocess(markdown) {\n return markdown;\n }\n\n /**\n * Process HTML after marked is finished\n */;\n _proto.postprocess = function postprocess(html) {\n return html;\n };\n return Hooks;\n}();\nHooks.passThroughHooks = new Set(['preprocess', 'postprocess']);\n\nfunction onError(silent, async, callback) {\n return function (e) {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if (silent) {\n var msg = '<p>An error occurred:</p><pre>' + escape(e.message + '', true) + '</pre>';\n if (async) {\n return Promise.resolve(msg);\n }\n if (callback) {\n callback(null, msg);\n return;\n }\n return msg;\n }\n if (async) {\n return Promise.reject(e);\n }\n if (callback) {\n callback(e);\n return;\n }\n throw e;\n };\n}\nfunction parseMarkdown(lexer, parser) {\n return function (src, opt, callback) {\n if (typeof opt === 'function') {\n callback = opt;\n opt = null;\n }\n var origOpt = _extends({}, opt);\n opt = _extends({}, marked.defaults, origOpt);\n var throwError = onError(opt.silent, opt.async, callback);\n\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n return throwError(new Error('marked(): input parameter is undefined or null'));\n }\n if (typeof src !== 'string') {\n return throwError(new Error('marked(): input parameter is of type ' + Object.prototype.toString.call(src) + ', string expected'));\n }\n checkSanitizeDeprecation(opt);\n if (opt.hooks) {\n opt.hooks.options = opt;\n }\n if (callback) {\n var highlight = opt.highlight;\n var tokens;\n try {\n if (opt.hooks) {\n src = opt.hooks.preprocess(src);\n }\n tokens = lexer(src, opt);\n } catch (e) {\n return throwError(e);\n }\n var done = function done(err) {\n var out;\n if (!err) {\n try {\n if (opt.walkTokens) {\n marked.walkTokens(tokens, opt.walkTokens);\n }\n out = parser(tokens, opt);\n if (opt.hooks) {\n out = opt.hooks.postprocess(out);\n }\n } catch (e) {\n err = e;\n }\n }\n opt.highlight = highlight;\n return err ? throwError(err) : callback(null, out);\n };\n if (!highlight || highlight.length < 3) {\n return done();\n }\n delete opt.highlight;\n if (!tokens.length) return done();\n var pending = 0;\n marked.walkTokens(tokens, function (token) {\n if (token.type === 'code') {\n pending++;\n setTimeout(function () {\n highlight(token.text, token.lang, function (err, code) {\n if (err) {\n return done(err);\n }\n if (code != null && code !== token.text) {\n token.text = code;\n token.escaped = true;\n }\n pending--;\n if (pending === 0) {\n done();\n }\n });\n }, 0);\n }\n });\n if (pending === 0) {\n done();\n }\n return;\n }\n if (opt.async) {\n return Promise.resolve(opt.hooks ? opt.hooks.preprocess(src) : src).then(function (src) {\n return lexer(src, opt);\n }).then(function (tokens) {\n return opt.walkTokens ? Promise.all(marked.walkTokens(tokens, opt.walkTokens)).then(function () {\n return tokens;\n }) : tokens;\n }).then(function (tokens) {\n return parser(tokens, opt);\n }).then(function (html) {\n return opt.hooks ? opt.hooks.postprocess(html) : html;\n })[\"catch\"](throwError);\n }\n try {\n if (opt.hooks) {\n src = opt.hooks.preprocess(src);\n }\n var _tokens = lexer(src, opt);\n if (opt.walkTokens) {\n marked.walkTokens(_tokens, opt.walkTokens);\n }\n var html = parser(_tokens, opt);\n if (opt.hooks) {\n html = opt.hooks.postprocess(html);\n }\n return html;\n } catch (e) {\n return throwError(e);\n }\n };\n}\n\n/**\n * Marked\n */\nfunction marked(src, opt, callback) {\n return parseMarkdown(Lexer.lex, Parser.parse)(src, opt, callback);\n}\n\n/**\n * Options\n */\n\nmarked.options = marked.setOptions = function (opt) {\n marked.defaults = _extends({}, marked.defaults, opt);\n changeDefaults(marked.defaults);\n return marked;\n};\nmarked.getDefaults = getDefaults;\nmarked.defaults = exports.defaults;\n\n/**\n * Use Extension\n */\n\nmarked.use = function () {\n var extensions = marked.defaults.extensions || {\n renderers: {},\n childTokens: {}\n };\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n args.forEach(function (pack) {\n // copy options to new object\n var opts = _extends({}, pack);\n\n // set async to true if it was set to true before\n opts.async = marked.defaults.async || opts.async || false;\n\n // ==-- Parse \"addon\" extensions --== //\n if (pack.extensions) {\n pack.extensions.forEach(function (ext) {\n if (!ext.name) {\n throw new Error('extension name required');\n }\n if (ext.renderer) {\n // Renderer extensions\n var prevRenderer = extensions.renderers[ext.name];\n if (prevRenderer) {\n // Replace extension with func to run new extension but fall back if false\n extensions.renderers[ext.name] = function () {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n var ret = ext.renderer.apply(this, args);\n if (ret === false) {\n ret = prevRenderer.apply(this, args);\n }\n return ret;\n };\n } else {\n extensions.renderers[ext.name] = ext.renderer;\n }\n }\n if (ext.tokenizer) {\n // Tokenizer Extensions\n if (!ext.level || ext.level !== 'block' && ext.level !== 'inline') {\n throw new Error(\"extension level must be 'block' or 'inline'\");\n }\n if (extensions[ext.level]) {\n extensions[ext.level].unshift(ext.tokenizer);\n } else {\n extensions[ext.level] = [ext.tokenizer];\n }\n if (ext.start) {\n // Function to check for start of token\n if (ext.level === 'block') {\n if (extensions.startBlock) {\n extensions.startBlock.push(ext.start);\n } else {\n extensions.startBlock = [ext.start];\n }\n } else if (ext.level === 'inline') {\n if (extensions.startInline) {\n extensions.startInline.push(ext.start);\n } else {\n extensions.startInline = [ext.start];\n }\n }\n }\n }\n if (ext.childTokens) {\n // Child tokens to be visited by walkTokens\n extensions.childTokens[ext.name] = ext.childTokens;\n }\n });\n opts.extensions = extensions;\n }\n\n // ==-- Parse \"overwrite\" extensions --== //\n if (pack.renderer) {\n (function () {\n var renderer = marked.defaults.renderer || new Renderer();\n var _loop = function _loop(prop) {\n var prevRenderer = renderer[prop];\n // Replace renderer with func to run extension, but fall back if false\n renderer[prop] = function () {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n var ret = pack.renderer[prop].apply(renderer, args);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n return ret;\n };\n };\n for (var prop in pack.renderer) {\n _loop(prop);\n }\n opts.renderer = renderer;\n })();\n }\n if (pack.tokenizer) {\n (function () {\n var tokenizer = marked.defaults.tokenizer || new Tokenizer();\n var _loop2 = function _loop2(prop) {\n var prevTokenizer = tokenizer[prop];\n // Replace tokenizer with func to run extension, but fall back if false\n tokenizer[prop] = function () {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n var ret = pack.tokenizer[prop].apply(tokenizer, args);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n return ret;\n };\n };\n for (var prop in pack.tokenizer) {\n _loop2(prop);\n }\n opts.tokenizer = tokenizer;\n })();\n }\n\n // ==-- Parse Hooks extensions --== //\n if (pack.hooks) {\n (function () {\n var hooks = marked.defaults.hooks || new Hooks();\n var _loop3 = function _loop3(prop) {\n var prevHook = hooks[prop];\n if (Hooks.passThroughHooks.has(prop)) {\n hooks[prop] = function (arg) {\n if (marked.defaults.async) {\n return Promise.resolve(pack.hooks[prop].call(hooks, arg)).then(function (ret) {\n return prevHook.call(hooks, ret);\n });\n }\n var ret = pack.hooks[prop].call(hooks, arg);\n return prevHook.call(hooks, ret);\n };\n } else {\n hooks[prop] = function () {\n for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n args[_key5] = arguments[_key5];\n }\n var ret = pack.hooks[prop].apply(hooks, args);\n if (ret === false) {\n ret = prevHook.apply(hooks, args);\n }\n return ret;\n };\n }\n };\n for (var prop in pack.hooks) {\n _loop3(prop);\n }\n opts.hooks = hooks;\n })();\n }\n\n // ==-- Parse WalkTokens extensions --== //\n if (pack.walkTokens) {\n var _walkTokens = marked.defaults.walkTokens;\n opts.walkTokens = function (token) {\n var values = [];\n values.push(pack.walkTokens.call(this, token));\n if (_walkTokens) {\n values = values.concat(_walkTokens.call(this, token));\n }\n return values;\n };\n }\n marked.setOptions(opts);\n });\n};\n\n/**\n * Run callback for every token\n */\n\nmarked.walkTokens = function (tokens, callback) {\n var values = [];\n var _loop4 = function _loop4() {\n var token = _step.value;\n values = values.concat(callback.call(marked, token));\n switch (token.type) {\n case 'table':\n {\n for (var _iterator2 = _createForOfIteratorHelperLoose(token.header), _step2; !(_step2 = _iterator2()).done;) {\n var cell = _step2.value;\n values = values.concat(marked.walkTokens(cell.tokens, callback));\n }\n for (var _iterator3 = _createForOfIteratorHelperLoose(token.rows), _step3; !(_step3 = _iterator3()).done;) {\n var row = _step3.value;\n for (var _iterator4 = _createForOfIteratorHelperLoose(row), _step4; !(_step4 = _iterator4()).done;) {\n var _cell = _step4.value;\n values = values.concat(marked.walkTokens(_cell.tokens, callback));\n }\n }\n break;\n }\n case 'list':\n {\n values = values.concat(marked.walkTokens(token.items, callback));\n break;\n }\n default:\n {\n if (marked.defaults.extensions && marked.defaults.extensions.childTokens && marked.defaults.extensions.childTokens[token.type]) {\n // Walk any extensions\n marked.defaults.extensions.childTokens[token.type].forEach(function (childTokens) {\n values = values.concat(marked.walkTokens(token[childTokens], callback));\n });\n } else if (token.tokens) {\n values = values.concat(marked.walkTokens(token.tokens, callback));\n }\n }\n }\n };\n for (var _iterator = _createForOfIteratorHelperLoose(tokens), _step; !(_step = _iterator()).done;) {\n _loop4();\n }\n return values;\n};\n\n/**\n * Parse Inline\n * @param {string} src\n */\nmarked.parseInline = parseMarkdown(Lexer.lexInline, Parser.parseInline);\n\n/**\n * Expose\n */\nmarked.Parser = Parser;\nmarked.parser = Parser.parse;\nmarked.Renderer = Renderer;\nmarked.TextRenderer = TextRenderer;\nmarked.Lexer = Lexer;\nmarked.lexer = Lexer.lex;\nmarked.Tokenizer = Tokenizer;\nmarked.Slugger = Slugger;\nmarked.Hooks = Hooks;\nmarked.parse = marked;\nvar options = marked.options;\nvar setOptions = marked.setOptions;\nvar use = marked.use;\nvar walkTokens = marked.walkTokens;\nvar parseInline = marked.parseInline;\nvar parse = marked;\nvar parser = Parser.parse;\nvar lexer = Lexer.lex;\n\nexports.Hooks = Hooks;\nexports.Lexer = Lexer;\nexports.Parser = Parser;\nexports.Renderer = Renderer;\nexports.Slugger = Slugger;\nexports.TextRenderer = TextRenderer;\nexports.Tokenizer = Tokenizer;\nexports.getDefaults = getDefaults;\nexports.lexer = lexer;\nexports.marked = marked;\nexports.options = options;\nexports.parse = parse;\nexports.parseInline = parseInline;\nexports.parser = parser;\nexports.setOptions = setOptions;\nexports.use = use;\nexports.walkTokens = walkTokens;\n", "'use strict';\nvar CodeMirror = require('codemirror');\nrequire('codemirror/addon/edit/continuelist.js');\nrequire('./codemirror/tablist');\nrequire('codemirror/addon/display/fullscreen.js');\nrequire('codemirror/mode/markdown/markdown.js');\nrequire('codemirror/addon/mode/overlay.js');\nrequire('codemirror/addon/display/placeholder.js');\nrequire('codemirror/addon/display/autorefresh.js');\nrequire('codemirror/addon/selection/mark-selection.js');\nrequire('codemirror/addon/search/searchcursor.js');\nrequire('codemirror/mode/gfm/gfm.js');\nrequire('codemirror/mode/xml/xml.js');\nvar CodeMirrorSpellChecker = require('codemirror-spell-checker');\nvar marked = require('marked').marked;\n\n\n// Some variables\nvar isMac = /Mac/.test(navigator.platform);\nvar anchorToExternalRegex = new RegExp(/(<a.*?https?:\\/\\/.*?[^a]>)+?/g);\n\n// Mapping of actions that can be bound to keyboard shortcuts or toolbar buttons\nvar bindings = {\n 'toggleBold': toggleBold,\n 'toggleItalic': toggleItalic,\n 'drawLink': drawLink,\n 'toggleHeadingSmaller': toggleHeadingSmaller,\n 'toggleHeadingBigger': toggleHeadingBigger,\n 'drawImage': drawImage,\n 'toggleBlockquote': toggleBlockquote,\n 'toggleOrderedList': toggleOrderedList,\n 'toggleUnorderedList': toggleUnorderedList,\n 'toggleCodeBlock': toggleCodeBlock,\n 'togglePreview': togglePreview,\n 'toggleStrikethrough': toggleStrikethrough,\n 'toggleHeading1': toggleHeading1,\n 'toggleHeading2': toggleHeading2,\n 'toggleHeading3': toggleHeading3,\n 'toggleHeading4': toggleHeading4,\n 'toggleHeading5': toggleHeading5,\n 'toggleHeading6': toggleHeading6,\n 'cleanBlock': cleanBlock,\n 'drawTable': drawTable,\n 'drawHorizontalRule': drawHorizontalRule,\n 'undo': undo,\n 'redo': redo,\n 'toggleSideBySide': toggleSideBySide,\n 'toggleFullScreen': toggleFullScreen,\n};\n\nvar shortcuts = {\n 'toggleBold': 'Cmd-B',\n 'toggleItalic': 'Cmd-I',\n 'drawLink': 'Cmd-K',\n 'toggleHeadingSmaller': 'Cmd-H',\n 'toggleHeadingBigger': 'Shift-Cmd-H',\n 'toggleHeading1': 'Ctrl+Alt+1',\n 'toggleHeading2': 'Ctrl+Alt+2',\n 'toggleHeading3': 'Ctrl+Alt+3',\n 'toggleHeading4': 'Ctrl+Alt+4',\n 'toggleHeading5': 'Ctrl+Alt+5',\n 'toggleHeading6': 'Ctrl+Alt+6',\n 'cleanBlock': 'Cmd-E',\n 'drawImage': 'Cmd-Alt-I',\n 'toggleBlockquote': 'Cmd-\\'',\n 'toggleOrderedList': 'Cmd-Alt-L',\n 'toggleUnorderedList': 'Cmd-L',\n 'toggleCodeBlock': 'Cmd-Alt-C',\n 'togglePreview': 'Cmd-P',\n 'toggleSideBySide': 'F9',\n 'toggleFullScreen': 'F11',\n};\n\nvar getBindingName = function (f) {\n for (var key in bindings) {\n if (bindings[key] === f) {\n return key;\n }\n }\n return null;\n};\n\nvar isMobile = function () {\n var check = false;\n (function (a) {\n if (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(a.substr(0, 4))) check = true;\n })(navigator.userAgent || navigator.vendor || window.opera);\n return check;\n};\n\n/**\n * Modify HTML to add 'target=\"_blank\"' to links so they open in new tabs by default.\n * @param {string} htmlText - HTML to be modified.\n * @return {string} The modified HTML text.\n */\nfunction addAnchorTargetBlank(htmlText) {\n var match;\n while ((match = anchorToExternalRegex.exec(htmlText)) !== null) {\n // With only one capture group in the RegExp, we can safely take the first index from the match.\n var linkString = match[0];\n\n if (linkString.indexOf('target=') === -1) {\n var fixedLinkString = linkString.replace(/>$/, ' target=\"_blank\">');\n htmlText = htmlText.replace(linkString, fixedLinkString);\n }\n }\n return htmlText;\n}\n\n/**\n * Modify HTML to remove the list-style when rendering checkboxes.\n * @param {string} htmlText - HTML to be modified.\n * @return {string} The modified HTML text.\n */\nfunction removeListStyleWhenCheckbox(htmlText) {\n\n var parser = new DOMParser();\n var htmlDoc = parser.parseFromString(htmlText, 'text/html');\n var listItems = htmlDoc.getElementsByTagName('li');\n\n for (var i = 0; i < listItems.length; i++) {\n var listItem = listItems[i];\n\n for (var j = 0; j < listItem.children.length; j++) {\n var listItemChild = listItem.children[j];\n\n if (listItemChild instanceof HTMLInputElement && listItemChild.type === 'checkbox') {\n // From Github: margin: 0 .2em .25em -1.6em;\n listItem.style.marginLeft = '-1.5em';\n listItem.style.listStyleType = 'none';\n }\n }\n }\n\n return htmlDoc.documentElement.innerHTML;\n}\n\n/**\n * Fix shortcut. Mac use Command, others use Ctrl.\n */\nfunction fixShortcut(name) {\n if (isMac) {\n name = name.replace('Ctrl', 'Cmd');\n } else {\n name = name.replace('Cmd', 'Ctrl');\n }\n return name;\n}\n\n/**\n * Create dropdown block\n */\nfunction createToolbarDropdown(options, enableTooltips, shortcuts, parent) {\n var el = createToolbarButton(options, false, enableTooltips, shortcuts, 'button', parent);\n el.classList.add('easymde-dropdown');\n\n el.onclick = function () {\n el.focus();\n };\n\n var content = document.createElement('div');\n content.className = 'easymde-dropdown-content';\n for (var childrenIndex = 0; childrenIndex < options.children.length; childrenIndex++) {\n\n var child = options.children[childrenIndex];\n var childElement;\n\n if (typeof child === 'string' && child in toolbarBuiltInButtons) {\n childElement = createToolbarButton(toolbarBuiltInButtons[child], true, enableTooltips, shortcuts, 'button', parent);\n } else {\n childElement = createToolbarButton(child, true, enableTooltips, shortcuts, 'button', parent);\n }\n\n childElement.addEventListener('click', function (e) { e.stopPropagation(); }, false);\n content.appendChild(childElement);\n }\n el.appendChild(content);\n return el;\n}\n\n/**\n * Create button element for toolbar.\n */\nfunction createToolbarButton(options, enableActions, enableTooltips, shortcuts, markup, parent) {\n options = options || {};\n var el = document.createElement(markup);\n\n // Add 'custom' attributes as early as possible, so that 'official' attributes will never be overwritten.\n if (options.attributes) {\n for (var attribute in options.attributes) {\n if (Object.prototype.hasOwnProperty.call(options.attributes, attribute)) {\n el.setAttribute(attribute, options.attributes[attribute]);\n }\n }\n }\n\n var classNamePrefix = parent.options.toolbarButtonClassPrefix ? parent.options.toolbarButtonClassPrefix + '-' : '';\n el.className = classNamePrefix + options.name;\n el.setAttribute('type', markup);\n enableTooltips = (enableTooltips == undefined) ? true : enableTooltips;\n\n if (options.text) {\n el.innerText = options.text;\n }\n\n // Properly handle custom shortcuts\n if (options.name && options.name in shortcuts) {\n bindings[options.name] = options.action;\n }\n\n if (options.title && enableTooltips) {\n el.title = createTooltip(options.title, options.action, shortcuts);\n\n if (isMac) {\n el.title = el.title.replace('Ctrl', '\u2318');\n el.title = el.title.replace('Alt', '\u2325');\n }\n }\n\n if (options.title) {\n el.setAttribute('aria-label', options.title);\n }\n\n if (options.noDisable) {\n el.classList.add('no-disable');\n }\n\n if (options.noMobile) {\n el.classList.add('no-mobile');\n }\n\n // Prevent errors if there is no class name in custom options\n var classNameParts = [];\n if (typeof options.className !== 'undefined') {\n classNameParts = options.className.split(' ');\n }\n\n // Provide backwards compatibility with simple-markdown-editor by adding custom classes to the button.\n var iconClasses = [];\n for (var classNameIndex = 0; classNameIndex < classNameParts.length; classNameIndex++) {\n var classNamePart = classNameParts[classNameIndex];\n // Split icon classes from the button.\n // Regex will detect \"fa\", \"fas\", \"fa-something\" and \"fa-some-icon-1\", but not \"fanfare\".\n if (classNamePart.match(/^fa([srlb]|(-[\\w-]*)|$)/)) {\n iconClasses.push(classNamePart);\n } else {\n el.classList.add(classNamePart);\n }\n }\n\n el.tabIndex = -1;\n\n if (iconClasses.length > 0) {\n // Create icon element and append as a child to the button\n var icon = document.createElement('i');\n for (var iconClassIndex = 0; iconClassIndex < iconClasses.length; iconClassIndex++) {\n var iconClass = iconClasses[iconClassIndex];\n icon.classList.add(iconClass);\n }\n el.appendChild(icon);\n }\n\n // If there is a custom icon markup set, use that\n if (typeof options.icon !== 'undefined') {\n el.innerHTML = options.icon;\n }\n\n if (options.action && enableActions) {\n if (typeof options.action === 'function') {\n el.onclick = function (e) {\n e.preventDefault();\n options.action(parent);\n };\n } else if (typeof options.action === 'string') {\n el.onclick = function (e) {\n e.preventDefault();\n window.open(options.action, '_blank');\n };\n }\n }\n\n return el;\n}\n\nfunction createSep() {\n var el = document.createElement('i');\n el.className = 'separator';\n el.innerHTML = '|';\n return el;\n}\n\nfunction createTooltip(title, action, shortcuts) {\n var actionName;\n var tooltip = title;\n\n if (action) {\n actionName = getBindingName(action);\n if (shortcuts[actionName]) {\n tooltip += ' (' + fixShortcut(shortcuts[actionName]) + ')';\n }\n }\n\n return tooltip;\n}\n\n/**\n * The state of CodeMirror at the given position.\n */\nfunction getState(cm, pos) {\n pos = pos || cm.getCursor('start');\n var stat = cm.getTokenAt(pos);\n if (!stat.type) return {};\n\n var types = stat.type.split(' ');\n\n var ret = {},\n data, text;\n for (var i = 0; i < types.length; i++) {\n data = types[i];\n if (data === 'strong') {\n ret.bold = true;\n } else if (data === 'variable-2') {\n text = cm.getLine(pos.line);\n if (/^\\s*\\d+\\.\\s/.test(text)) {\n ret['ordered-list'] = true;\n } else {\n ret['unordered-list'] = true;\n }\n } else if (data === 'atom') {\n ret.quote = true;\n } else if (data === 'em') {\n ret.italic = true;\n } else if (data === 'quote') {\n ret.quote = true;\n } else if (data === 'strikethrough') {\n ret.strikethrough = true;\n } else if (data === 'comment') {\n ret.code = true;\n } else if (data === 'link' && !ret.image) {\n ret.link = true;\n } else if (data === 'image') {\n ret.image = true;\n } else if (data.match(/^header(-[1-6])?$/)) {\n ret[data.replace('header', 'heading')] = true;\n }\n }\n return ret;\n}\n\n\n// Saved overflow setting\nvar saved_overflow = '';\n\n/**\n * Toggle full screen of the editor.\n * @param {EasyMDE} editor\n */\nfunction toggleFullScreen(editor) {\n // Set fullscreen\n var cm = editor.codemirror;\n cm.setOption('fullScreen', !cm.getOption('fullScreen'));\n\n\n // Prevent scrolling on body during fullscreen active\n if (cm.getOption('fullScreen')) {\n saved_overflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = saved_overflow;\n }\n\n var wrapper = cm.getWrapperElement();\n var sidebyside = wrapper.nextSibling;\n\n if (sidebyside.classList.contains('editor-preview-active-side')) {\n if (editor.options.sideBySideFullscreen === false) {\n // if side-by-side not-fullscreen ok, apply classes as needed\n var easyMDEContainer = wrapper.parentNode;\n if (cm.getOption('fullScreen')) {\n easyMDEContainer.classList.remove('sided--no-fullscreen');\n } else {\n easyMDEContainer.classList.add('sided--no-fullscreen');\n }\n } else {\n toggleSideBySide(editor);\n }\n }\n\n if (editor.options.onToggleFullScreen) {\n editor.options.onToggleFullScreen(cm.getOption('fullScreen') || false);\n }\n\n // Remove or set maxHeight\n if (typeof editor.options.maxHeight !== 'undefined') {\n if (cm.getOption('fullScreen')) {\n cm.getScrollerElement().style.removeProperty('height');\n sidebyside.style.removeProperty('height');\n } else {\n cm.getScrollerElement().style.height = editor.options.maxHeight;\n editor.setPreviewMaxHeight();\n }\n }\n\n // Update toolbar class\n editor.toolbar_div.classList.toggle('fullscreen');\n\n // Update toolbar button\n if (editor.toolbarElements && editor.toolbarElements.fullscreen) {\n var toolbarButton = editor.toolbarElements.fullscreen;\n toolbarButton.classList.toggle('active');\n }\n}\n\n\n/**\n * Action for toggling bold.\n * @param {EasyMDE} editor\n */\nfunction toggleBold(editor) {\n _toggleBlock(editor, 'bold', editor.options.blockStyles.bold);\n}\n\n\n/**\n * Action for toggling italic.\n * @param {EasyMDE} editor\n */\nfunction toggleItalic(editor) {\n _toggleBlock(editor, 'italic', editor.options.blockStyles.italic);\n}\n\n\n/**\n * Action for toggling strikethrough.\n * @param {EasyMDE} editor\n */\nfunction toggleStrikethrough(editor) {\n _toggleBlock(editor, 'strikethrough', '~~');\n}\n\n/**\n * Action for toggling code block.\n * @param {EasyMDE} editor\n */\nfunction toggleCodeBlock(editor) {\n var fenceCharsToInsert = editor.options.blockStyles.code;\n\n function fencing_line(line) {\n /* return true, if this is a ``` or ~~~ line */\n if (typeof line !== 'object') {\n throw 'fencing_line() takes a \\'line\\' object (not a line number, or line text). Got: ' + typeof line + ': ' + line;\n }\n return line.styles && line.styles[2] && line.styles[2].indexOf('formatting-code-block') !== -1;\n }\n\n function token_state(token) {\n // base goes an extra level deep when mode backdrops are used, e.g. spellchecker on\n return token.state.base.base || token.state.base;\n }\n\n function code_type(cm, line_num, line, firstTok, lastTok) {\n /*\n * Return \"single\", \"indented\", \"fenced\" or false\n *\n * cm and line_num are required. Others are optional for efficiency\n * To check in the middle of a line, pass in firstTok yourself.\n */\n line = line || cm.getLineHandle(line_num);\n firstTok = firstTok || cm.getTokenAt({\n line: line_num,\n ch: 1,\n });\n lastTok = lastTok || (!!line.text && cm.getTokenAt({\n line: line_num,\n ch: line.text.length - 1,\n }));\n var types = firstTok.type ? firstTok.type.split(' ') : [];\n if (lastTok && token_state(lastTok).indentedCode) {\n // have to check last char, since first chars of first line aren\"t marked as indented\n return 'indented';\n } else if (types.indexOf('comment') === -1) {\n // has to be after \"indented\" check, since first chars of first indented line aren\"t marked as such\n return false;\n } else if (token_state(firstTok).fencedChars || token_state(lastTok).fencedChars || fencing_line(line)) {\n return 'fenced';\n } else {\n return 'single';\n }\n }\n\n function insertFencingAtSelection(cm, cur_start, cur_end, fenceCharsToInsert) {\n var start_line_sel = cur_start.line + 1,\n end_line_sel = cur_end.line + 1,\n sel_multi = cur_start.line !== cur_end.line,\n repl_start = fenceCharsToInsert + '\\n',\n repl_end = '\\n' + fenceCharsToInsert;\n if (sel_multi) {\n end_line_sel++;\n }\n // handle last char including \\n or not\n if (sel_multi && cur_end.ch === 0) {\n repl_end = fenceCharsToInsert + '\\n';\n end_line_sel--;\n }\n _replaceSelection(cm, false, [repl_start, repl_end]);\n cm.setSelection({\n line: start_line_sel,\n ch: 0,\n }, {\n line: end_line_sel,\n ch: 0,\n });\n }\n\n var cm = editor.codemirror,\n cur_start = cm.getCursor('start'),\n cur_end = cm.getCursor('end'),\n tok = cm.getTokenAt({\n line: cur_start.line,\n ch: cur_start.ch || 1,\n }), // avoid ch 0 which is a cursor pos but not token\n line = cm.getLineHandle(cur_start.line),\n is_code = code_type(cm, cur_start.line, line, tok);\n var block_start, block_end, lineCount;\n\n if (is_code === 'single') {\n // similar to some EasyMDE _toggleBlock logic\n var start = line.text.slice(0, cur_start.ch).replace('`', ''),\n end = line.text.slice(cur_start.ch).replace('`', '');\n cm.replaceRange(start + end, {\n line: cur_start.line,\n ch: 0,\n }, {\n line: cur_start.line,\n ch: 99999999999999,\n });\n cur_start.ch--;\n if (cur_start !== cur_end) {\n cur_end.ch--;\n }\n cm.setSelection(cur_start, cur_end);\n cm.focus();\n } else if (is_code === 'fenced') {\n if (cur_start.line !== cur_end.line || cur_start.ch !== cur_end.ch) {\n // use selection\n\n // find the fenced line so we know what type it is (tilde, backticks, number of them)\n for (block_start = cur_start.line; block_start >= 0; block_start--) {\n line = cm.getLineHandle(block_start);\n if (fencing_line(line)) {\n break;\n }\n }\n var fencedTok = cm.getTokenAt({\n line: block_start,\n ch: 1,\n });\n var fence_chars = token_state(fencedTok).fencedChars;\n var start_text, start_line;\n var end_text, end_line;\n // check for selection going up against fenced lines, in which case we don't want to add more fencing\n if (fencing_line(cm.getLineHandle(cur_start.line))) {\n start_text = '';\n start_line = cur_start.line;\n } else if (fencing_line(cm.getLineHandle(cur_start.line - 1))) {\n start_text = '';\n start_line = cur_start.line - 1;\n } else {\n start_text = fence_chars + '\\n';\n start_line = cur_start.line;\n }\n if (fencing_line(cm.getLineHandle(cur_end.line))) {\n end_text = '';\n end_line = cur_end.line;\n if (cur_end.ch === 0) {\n end_line += 1;\n }\n } else if (cur_end.ch !== 0 && fencing_line(cm.getLineHandle(cur_end.line + 1))) {\n end_text = '';\n end_line = cur_end.line + 1;\n } else {\n end_text = fence_chars + '\\n';\n end_line = cur_end.line + 1;\n }\n if (cur_end.ch === 0) {\n // full last line selected, putting cursor at beginning of next\n end_line -= 1;\n }\n cm.operation(function () {\n // end line first, so that line numbers don't change\n cm.replaceRange(end_text, {\n line: end_line,\n ch: 0,\n }, {\n line: end_line + (end_text ? 0 : 1),\n ch: 0,\n });\n cm.replaceRange(start_text, {\n line: start_line,\n ch: 0,\n }, {\n line: start_line + (start_text ? 0 : 1),\n ch: 0,\n });\n });\n cm.setSelection({\n line: start_line + (start_text ? 1 : 0),\n ch: 0,\n }, {\n line: end_line + (start_text ? 1 : -1),\n ch: 0,\n });\n cm.focus();\n } else {\n // no selection, search for ends of this fenced block\n var search_from = cur_start.line;\n if (fencing_line(cm.getLineHandle(cur_start.line))) { // gets a little tricky if cursor is right on a fenced line\n if (code_type(cm, cur_start.line + 1) === 'fenced') {\n block_start = cur_start.line;\n search_from = cur_start.line + 1; // for searching for \"end\"\n } else {\n block_end = cur_start.line;\n search_from = cur_start.line - 1; // for searching for \"start\"\n }\n }\n if (block_start === undefined) {\n for (block_start = search_from; block_start >= 0; block_start--) {\n line = cm.getLineHandle(block_start);\n if (fencing_line(line)) {\n break;\n }\n }\n }\n if (block_end === undefined) {\n lineCount = cm.lineCount();\n for (block_end = search_from; block_end < lineCount; block_end++) {\n line = cm.getLineHandle(block_end);\n if (fencing_line(line)) {\n break;\n }\n }\n }\n cm.operation(function () {\n cm.replaceRange('', {\n line: block_start,\n ch: 0,\n }, {\n line: block_start + 1,\n ch: 0,\n });\n cm.replaceRange('', {\n line: block_end - 1,\n ch: 0,\n }, {\n line: block_end,\n ch: 0,\n });\n });\n cm.focus();\n }\n } else if (is_code === 'indented') {\n if (cur_start.line !== cur_end.line || cur_start.ch !== cur_end.ch) {\n // use selection\n block_start = cur_start.line;\n block_end = cur_end.line;\n if (cur_end.ch === 0) {\n block_end--;\n }\n } else {\n // no selection, search for ends of this indented block\n for (block_start = cur_start.line; block_start >= 0; block_start--) {\n line = cm.getLineHandle(block_start);\n if (line.text.match(/^\\s*$/)) {\n // empty or all whitespace - keep going\n continue;\n } else {\n if (code_type(cm, block_start, line) !== 'indented') {\n block_start += 1;\n break;\n }\n }\n }\n lineCount = cm.lineCount();\n for (block_end = cur_start.line; block_end < lineCount; block_end++) {\n line = cm.getLineHandle(block_end);\n if (line.text.match(/^\\s*$/)) {\n // empty or all whitespace - keep going\n continue;\n } else {\n if (code_type(cm, block_end, line) !== 'indented') {\n block_end -= 1;\n break;\n }\n }\n }\n }\n // if we are going to un-indent based on a selected set of lines, and the next line is indented too, we need to\n // insert a blank line so that the next line(s) continue to be indented code\n var next_line = cm.getLineHandle(block_end + 1),\n next_line_last_tok = next_line && cm.getTokenAt({\n line: block_end + 1,\n ch: next_line.text.length - 1,\n }),\n next_line_indented = next_line_last_tok && token_state(next_line_last_tok).indentedCode;\n if (next_line_indented) {\n cm.replaceRange('\\n', {\n line: block_end + 1,\n ch: 0,\n });\n }\n\n for (var i = block_start; i <= block_end; i++) {\n cm.indentLine(i, 'subtract'); // TODO: this doesn't get tracked in the history, so can't be undone :(\n }\n cm.focus();\n } else {\n // insert code formatting\n var no_sel_and_starting_of_line = (cur_start.line === cur_end.line && cur_start.ch === cur_end.ch && cur_start.ch === 0);\n var sel_multi = cur_start.line !== cur_end.line;\n if (no_sel_and_starting_of_line || sel_multi) {\n insertFencingAtSelection(cm, cur_start, cur_end, fenceCharsToInsert);\n } else {\n _replaceSelection(cm, false, ['`', '`']);\n }\n }\n}\n\n/**\n * Action for toggling blockquote.\n */\nfunction toggleBlockquote(editor) {\n _toggleLine(editor.codemirror, 'quote');\n}\n\n/**\n * Action for toggling heading size: normal -> h1 -> h2 -> h3 -> h4 -> h5 -> h6 -> normal\n */\nfunction toggleHeadingSmaller(editor) {\n _toggleHeading(editor.codemirror, 'smaller');\n}\n\n/**\n * Action for toggling heading size: normal -> h6 -> h5 -> h4 -> h3 -> h2 -> h1 -> normal\n */\nfunction toggleHeadingBigger(editor) {\n _toggleHeading(editor.codemirror, 'bigger');\n}\n\n/**\n * Action for toggling heading size 1\n */\nfunction toggleHeading1(editor) {\n _toggleHeading(editor.codemirror, undefined, 1);\n}\n\n/**\n * Action for toggling heading size 2\n */\nfunction toggleHeading2(editor) {\n _toggleHeading(editor.codemirror, undefined, 2);\n}\n\n/**\n * Action for toggling heading size 3\n */\nfunction toggleHeading3(editor) {\n _toggleHeading(editor.codemirror, undefined, 3);\n}\n\n/**\n * Action for toggling heading size 4\n */\nfunction toggleHeading4(editor) {\n _toggleHeading(editor.codemirror, undefined, 4);\n}\n\n/**\n * Action for toggling heading size 5\n */\nfunction toggleHeading5(editor) {\n _toggleHeading(editor.codemirror, undefined, 5);\n}\n\n/**\n * Action for toggling heading size 6\n */\nfunction toggleHeading6(editor) {\n _toggleHeading(editor.codemirror, undefined, 6);\n}\n\n\n/**\n * Action for toggling ul.\n */\nfunction toggleUnorderedList(editor) {\n var cm = editor.codemirror;\n\n var listStyle = '*'; // Default\n if (['-', '+', '*'].includes(editor.options.unorderedListStyle)) {\n listStyle = editor.options.unorderedListStyle;\n }\n\n _toggleLine(cm, 'unordered-list', listStyle);\n}\n\n\n/**\n * Action for toggling ol.\n */\nfunction toggleOrderedList(editor) {\n _toggleLine(editor.codemirror, 'ordered-list');\n}\n\n/**\n * Action for clean block (remove headline, list, blockquote code, markers)\n */\nfunction cleanBlock(editor) {\n _cleanBlock(editor.codemirror);\n}\n\n/**\n * Action for drawing a link.\n * @param {EasyMDE} editor\n */\nfunction drawLink(editor) {\n var options = editor.options;\n var url = 'https://';\n if (options.promptURLs) {\n var result = prompt(options.promptTexts.link, url);\n if (!result) {\n return false;\n }\n url = escapePromptURL(result);\n }\n _toggleLink(editor, 'link', options.insertTexts.link, url);\n}\n\n/**\n * Action for drawing an img.\n * @param {EasyMDE} editor\n */\nfunction drawImage(editor) {\n var options = editor.options;\n var url = 'https://';\n if (options.promptURLs) {\n var result = prompt(options.promptTexts.image, url);\n if (!result) {\n return false;\n }\n url = escapePromptURL(result);\n }\n _toggleLink(editor, 'image', options.insertTexts.image, url);\n}\n\n/**\n * Encode and escape URLs to prevent breaking up rendered Markdown links.\n * @param {string} url The url of the link or image\n */\nfunction escapePromptURL(url) {\n return encodeURI(url).replace(/([\\\\()])/g, '\\\\$1');\n}\n\n/**\n * Action for opening the browse-file window to upload an image to a server.\n * @param {EasyMDE} editor The EasyMDE object\n */\nfunction drawUploadedImage(editor) {\n // TODO: Draw the image template with a fake url? ie: ''\n editor.openBrowseFileWindow();\n}\n\n/**\n * Action executed after an image have been successfully imported on the server.\n * @param {EasyMDE} editor The EasyMDE object\n * @param {string} url The url of the uploaded image\n */\nfunction afterImageUploaded(editor, url) {\n var cm = editor.codemirror;\n var stat = getState(cm);\n var options = editor.options;\n var imageName = url.substr(url.lastIndexOf('/') + 1);\n var ext = imageName.substring(imageName.lastIndexOf('.') + 1).replace(/\\?.*$/, '').toLowerCase();\n\n // Check if media is an image\n if (['png', 'jpg', 'jpeg', 'gif', 'svg', 'apng', 'avif', 'webp'].includes(ext)) {\n _replaceSelection(cm, stat.image, options.insertTexts.uploadedImage, url);\n } else {\n var text_link = options.insertTexts.link;\n text_link[0] = '[' + imageName;\n _replaceSelection(cm, stat.link, text_link, url);\n }\n\n // show uploaded image filename for 1000ms\n editor.updateStatusBar('upload-image', editor.options.imageTexts.sbOnUploaded.replace('#image_name#', imageName));\n setTimeout(function () {\n editor.updateStatusBar('upload-image', editor.options.imageTexts.sbInit);\n }, 1000);\n}\n\n/**\n * Action for drawing a table.\n * @param {EasyMDE} editor\n */\nfunction drawTable(editor) {\n var cm = editor.codemirror;\n var stat = getState(cm);\n var options = editor.options;\n _replaceSelection(cm, stat.table, options.insertTexts.table);\n}\n\n/**\n * Action for drawing a horizontal rule.\n * @param {EasyMDE} editor\n */\nfunction drawHorizontalRule(editor) {\n var cm = editor.codemirror;\n var stat = getState(cm);\n var options = editor.options;\n _replaceSelection(cm, stat.image, options.insertTexts.horizontalRule);\n}\n\n\n/**\n * Undo action.\n * @param {EasyMDE} editor\n */\nfunction undo(editor) {\n var cm = editor.codemirror;\n cm.undo();\n cm.focus();\n}\n\n\n/**\n * Redo action.\n * @param {EasyMDE} editor\n */\nfunction redo(editor) {\n var cm = editor.codemirror;\n cm.redo();\n cm.focus();\n}\n\n\n/**\n * Toggle side by side preview\n * @param {EasyMDE} editor\n */\nfunction toggleSideBySide(editor) {\n var cm = editor.codemirror;\n var wrapper = cm.getWrapperElement();\n var preview = wrapper.nextSibling;\n var toolbarButton = editor.toolbarElements && editor.toolbarElements['side-by-side'];\n var useSideBySideListener = false;\n\n var easyMDEContainer = wrapper.parentNode;\n\n if (preview.classList.contains('editor-preview-active-side')) {\n if (editor.options.sideBySideFullscreen === false) {\n // if side-by-side not-fullscreen ok, remove classes when hiding side\n easyMDEContainer.classList.remove('sided--no-fullscreen');\n }\n preview.classList.remove('editor-preview-active-side');\n if (toolbarButton) toolbarButton.classList.remove('active');\n wrapper.classList.remove('CodeMirror-sided');\n } else {\n // When the preview button is clicked for the first time,\n // give some time for the transition from editor.css to fire and the view to slide from right to left,\n // instead of just appearing.\n setTimeout(function () {\n if (!cm.getOption('fullScreen')) {\n if (editor.options.sideBySideFullscreen === false) {\n // if side-by-side not-fullscreen ok, add classes when not fullscreen and showing side\n easyMDEContainer.classList.add('sided--no-fullscreen');\n } else {\n toggleFullScreen(editor);\n }\n }\n preview.classList.add('editor-preview-active-side');\n }, 1);\n if (toolbarButton) toolbarButton.classList.add('active');\n wrapper.classList.add('CodeMirror-sided');\n useSideBySideListener = true;\n }\n\n // Hide normal preview if active\n var previewNormal = wrapper.lastChild;\n if (previewNormal.classList.contains('editor-preview-active')) {\n previewNormal.classList.remove('editor-preview-active');\n var toolbar = editor.toolbarElements.preview;\n var toolbar_div = editor.toolbar_div;\n toolbar.classList.remove('active');\n toolbar_div.classList.remove('disabled-for-preview');\n }\n\n var sideBySideRenderingFunction = function () {\n var newValue = editor.options.previewRender(editor.value(), preview);\n if (newValue != null) {\n preview.innerHTML = newValue;\n }\n };\n\n if (!cm.sideBySideRenderingFunction) {\n cm.sideBySideRenderingFunction = sideBySideRenderingFunction;\n }\n\n if (useSideBySideListener) {\n var newValue = editor.options.previewRender(editor.value(), preview);\n if (newValue != null) {\n preview.innerHTML = newValue;\n }\n cm.on('update', cm.sideBySideRenderingFunction);\n } else {\n cm.off('update', cm.sideBySideRenderingFunction);\n }\n\n // Refresh to fix selection being off (#309)\n cm.refresh();\n}\n\n\n/**\n * Preview action.\n * @param {EasyMDE} editor\n */\nfunction togglePreview(editor) {\n var cm = editor.codemirror;\n var wrapper = cm.getWrapperElement();\n var toolbar_div = editor.toolbar_div;\n var toolbar = editor.options.toolbar ? editor.toolbarElements.preview : false;\n var preview = wrapper.lastChild;\n\n // Turn off side by side if needed\n var sidebyside = cm.getWrapperElement().nextSibling;\n if (sidebyside.classList.contains('editor-preview-active-side'))\n toggleSideBySide(editor);\n\n if (!preview || !preview.classList.contains('editor-preview-full')) {\n\n preview = document.createElement('div');\n preview.className = 'editor-preview-full';\n\n if (editor.options.previewClass) {\n\n if (Array.isArray(editor.options.previewClass)) {\n for (var i = 0; i < editor.options.previewClass.length; i++) {\n preview.classList.add(editor.options.previewClass[i]);\n }\n\n } else if (typeof editor.options.previewClass === 'string') {\n preview.classList.add(editor.options.previewClass);\n }\n }\n\n wrapper.appendChild(preview);\n }\n\n if (preview.classList.contains('editor-preview-active')) {\n preview.classList.remove('editor-preview-active');\n if (toolbar) {\n toolbar.classList.remove('active');\n toolbar_div.classList.remove('disabled-for-preview');\n }\n } else {\n // When the preview button is clicked for the first time,\n // give some time for the transition from editor.css to fire and the view to slide from right to left,\n // instead of just appearing.\n setTimeout(function () {\n preview.classList.add('editor-preview-active');\n }, 1);\n if (toolbar) {\n toolbar.classList.add('active');\n toolbar_div.classList.add('disabled-for-preview');\n }\n }\n\n var preview_result = editor.options.previewRender(editor.value(), preview);\n if (preview_result !== null) {\n preview.innerHTML = preview_result;\n }\n\n}\n\nfunction _replaceSelection(cm, active, startEnd, url) {\n if (cm.getWrapperElement().lastChild.classList.contains('editor-preview-active'))\n return;\n\n var text;\n var start = startEnd[0];\n var end = startEnd[1];\n var startPoint = {},\n endPoint = {};\n Object.assign(startPoint, cm.getCursor('start'));\n Object.assign(endPoint, cm.getCursor('end'));\n if (url) {\n start = start.replace('#url#', url); // url is in start for upload-image\n end = end.replace('#url#', url);\n }\n if (active) {\n text = cm.getLine(startPoint.line);\n start = text.slice(0, startPoint.ch);\n end = text.slice(startPoint.ch);\n cm.replaceRange(start + end, {\n line: startPoint.line,\n ch: 0,\n });\n } else {\n text = cm.getSelection();\n cm.replaceSelection(start + text + end);\n\n startPoint.ch += start.length;\n if (startPoint !== endPoint) {\n endPoint.ch += start.length;\n }\n }\n cm.setSelection(startPoint, endPoint);\n cm.focus();\n}\n\n\nfunction _toggleHeading(cm, direction, size) {\n if (cm.getWrapperElement().lastChild.classList.contains('editor-preview-active'))\n return;\n\n var startPoint = cm.getCursor('start');\n var endPoint = cm.getCursor('end');\n for (var i = startPoint.line; i <= endPoint.line; i++) {\n (function (i) {\n var text = cm.getLine(i);\n var currHeadingLevel = text.search(/[^#]/);\n\n if (direction !== undefined) {\n if (currHeadingLevel <= 0) {\n if (direction == 'bigger') {\n text = '###### ' + text;\n } else {\n text = '# ' + text;\n }\n } else if (currHeadingLevel == 6 && direction == 'smaller') {\n text = text.substr(7);\n } else if (currHeadingLevel == 1 && direction == 'bigger') {\n text = text.substr(2);\n } else {\n if (direction == 'bigger') {\n text = text.substr(1);\n } else {\n text = '#' + text;\n }\n }\n } else {\n if (currHeadingLevel <= 0) {\n text = '#'.repeat(size) + ' ' + text;\n } else if (currHeadingLevel == size) {\n text = text.substr(currHeadingLevel + 1);\n } else {\n text = '#'.repeat(size) + ' ' + text.substr(currHeadingLevel + 1);\n }\n }\n\n cm.replaceRange(text, {\n line: i,\n ch: 0,\n }, {\n line: i,\n ch: 99999999999999,\n });\n })(i);\n }\n cm.focus();\n}\n\n\nfunction _toggleLine(cm, name, liststyle) {\n if (cm.getWrapperElement().lastChild.classList.contains('editor-preview-active'))\n return;\n\n var listRegexp = /^(\\s*)(\\*|-|\\+|\\d*\\.)(\\s+)/;\n var whitespacesRegexp = /^\\s*/;\n\n var stat = getState(cm);\n var startPoint = cm.getCursor('start');\n var endPoint = cm.getCursor('end');\n var repl = {\n 'quote': /^(\\s*)>\\s+/,\n 'unordered-list': listRegexp,\n 'ordered-list': listRegexp,\n };\n\n var _getChar = function (name, i) {\n var map = {\n 'quote': '>',\n 'unordered-list': liststyle,\n 'ordered-list': '%%i.',\n };\n\n return map[name].replace('%%i', i);\n };\n\n var _checkChar = function (name, char) {\n var map = {\n 'quote': '>',\n 'unordered-list': '\\\\' + liststyle,\n 'ordered-list': '\\\\d+.',\n };\n var rt = new RegExp(map[name]);\n\n return char && rt.test(char);\n };\n\n var _toggle = function (name, text, untoggleOnly) {\n var arr = listRegexp.exec(text);\n var char = _getChar(name, line);\n if (arr !== null) {\n if (_checkChar(name, arr[2])) {\n char = '';\n }\n text = arr[1] + char + arr[3] + text.replace(whitespacesRegexp, '').replace(repl[name], '$1');\n } else if (untoggleOnly == false) {\n text = char + ' ' + text;\n }\n return text;\n };\n\n var line = 1;\n for (var i = startPoint.line; i <= endPoint.line; i++) {\n (function (i) {\n var text = cm.getLine(i);\n if (stat[name]) {\n text = text.replace(repl[name], '$1');\n } else {\n // If we're toggling unordered-list formatting, check if the current line\n // is part of an ordered-list, and if so, untoggle that first.\n // Workaround for https://github.com/Ionaru/easy-markdown-editor/issues/92\n if (name == 'unordered-list') {\n text = _toggle('ordered-list', text, true);\n }\n text = _toggle(name, text, false);\n line += 1;\n }\n cm.replaceRange(text, {\n line: i,\n ch: 0,\n }, {\n line: i,\n ch: 99999999999999,\n });\n })(i);\n }\n cm.focus();\n}\n\n/**\n * @param {EasyMDE} editor\n * @param {'link' | 'image'} type\n * @param {string} startEnd\n * @param {string} url\n */\nfunction _toggleLink(editor, type, startEnd, url) {\n if (!editor.codemirror || editor.isPreviewActive()) {\n return;\n }\n\n var cm = editor.codemirror;\n var stat = getState(cm);\n var active = stat[type];\n if (!active) {\n _replaceSelection(cm, active, startEnd, url);\n return;\n }\n\n var startPoint = cm.getCursor('start');\n var endPoint = cm.getCursor('end');\n var text = cm.getLine(startPoint.line);\n var start = text.slice(0, startPoint.ch);\n var end = text.slice(startPoint.ch);\n\n if (type == 'link') {\n start = start.replace(/(.*)[^!]\\[/, '$1');\n } else if (type == 'image') {\n start = start.replace(/(.*)!\\[$/, '$1');\n }\n end = end.replace(/]\\(.*?\\)/, '');\n\n cm.replaceRange(start + end, {\n line: startPoint.line,\n ch: 0,\n }, {\n line: startPoint.line,\n ch: 99999999999999,\n });\n\n startPoint.ch -= startEnd[0].length;\n if (startPoint !== endPoint) {\n endPoint.ch -= startEnd[0].length;\n }\n cm.setSelection(startPoint, endPoint);\n cm.focus();\n}\n\n/**\n * @param {EasyMDE} editor\n */\nfunction _toggleBlock(editor, type, start_chars, end_chars) {\n if (!editor.codemirror || editor.isPreviewActive()) {\n return;\n }\n\n end_chars = (typeof end_chars === 'undefined') ? start_chars : end_chars;\n var cm = editor.codemirror;\n var stat = getState(cm);\n\n var text;\n var start = start_chars;\n var end = end_chars;\n\n var startPoint = cm.getCursor('start');\n var endPoint = cm.getCursor('end');\n\n if (stat[type]) {\n text = cm.getLine(startPoint.line);\n start = text.slice(0, startPoint.ch);\n end = text.slice(startPoint.ch);\n if (type == 'bold') {\n start = start.replace(/(\\*\\*|__)(?![\\s\\S]*(\\*\\*|__))/, '');\n end = end.replace(/(\\*\\*|__)/, '');\n } else if (type == 'italic') {\n start = start.replace(/(\\*|_)(?![\\s\\S]*(\\*|_))/, '');\n end = end.replace(/(\\*|_)/, '');\n } else if (type == 'strikethrough') {\n start = start.replace(/(\\*\\*|~~)(?![\\s\\S]*(\\*\\*|~~))/, '');\n end = end.replace(/(\\*\\*|~~)/, '');\n }\n cm.replaceRange(start + end, {\n line: startPoint.line,\n ch: 0,\n }, {\n line: startPoint.line,\n ch: 99999999999999,\n });\n\n if (type == 'bold' || type == 'strikethrough') {\n startPoint.ch -= 2;\n if (startPoint !== endPoint) {\n endPoint.ch -= 2;\n }\n } else if (type == 'italic') {\n startPoint.ch -= 1;\n if (startPoint !== endPoint) {\n endPoint.ch -= 1;\n }\n }\n } else {\n text = cm.getSelection();\n if (type == 'bold') {\n text = text.split('**').join('');\n text = text.split('__').join('');\n } else if (type == 'italic') {\n text = text.split('*').join('');\n text = text.split('_').join('');\n } else if (type == 'strikethrough') {\n text = text.split('~~').join('');\n }\n cm.replaceSelection(start + text + end);\n\n startPoint.ch += start_chars.length;\n endPoint.ch = startPoint.ch + text.length;\n }\n\n cm.setSelection(startPoint, endPoint);\n cm.focus();\n}\n\nfunction _cleanBlock(cm) {\n if (cm.getWrapperElement().lastChild.classList.contains('editor-preview-active'))\n return;\n\n var startPoint = cm.getCursor('start');\n var endPoint = cm.getCursor('end');\n var text;\n\n for (var line = startPoint.line; line <= endPoint.line; line++) {\n text = cm.getLine(line);\n text = text.replace(/^[ ]*([# ]+|\\*|-|[> ]+|[0-9]+(.|\\)))[ ]*/, '');\n\n cm.replaceRange(text, {\n line: line,\n ch: 0,\n }, {\n line: line,\n ch: 99999999999999,\n });\n }\n}\n\n/**\n * Convert a number of bytes to a human-readable file size. If you desire\n * to add a space between the value and the unit, you need to add this space\n * to the given units.\n * @param bytes {number} A number of bytes, as integer. Ex: 421137\n * @param units {number[]} An array of human-readable units, ie. [' B', ' K', ' MB']\n * @returns string A human-readable file size. Ex: '412 KB'\n */\nfunction humanFileSize(bytes, units) {\n if (Math.abs(bytes) < 1024) {\n return '' + bytes + units[0];\n }\n var u = 0;\n do {\n bytes /= 1024;\n ++u;\n } while (Math.abs(bytes) >= 1024 && u < units.length);\n return '' + bytes.toFixed(1) + units[u];\n}\n\n// Merge the properties of one object into another.\nfunction _mergeProperties(target, source) {\n for (var property in source) {\n if (Object.prototype.hasOwnProperty.call(source, property)) {\n if (source[property] instanceof Array) {\n target[property] = source[property].concat(target[property] instanceof Array ? target[property] : []);\n } else if (\n source[property] !== null &&\n typeof source[property] === 'object' &&\n source[property].constructor === Object\n ) {\n target[property] = _mergeProperties(target[property] || {}, source[property]);\n } else {\n target[property] = source[property];\n }\n }\n }\n\n return target;\n}\n\n// Merge an arbitrary number of objects into one.\nfunction extend(target) {\n for (var i = 1; i < arguments.length; i++) {\n target = _mergeProperties(target, arguments[i]);\n }\n\n return target;\n}\n\n/* The right word count in respect for CJK. */\nfunction wordCount(data) {\n var pattern = /[a-zA-Z0-9_\\u00A0-\\u02AF\\u0392-\\u03c9\\u0410-\\u04F9]+|[\\u4E00-\\u9FFF\\u3400-\\u4dbf\\uf900-\\ufaff\\u3040-\\u309f\\uac00-\\ud7af]+/g;\n var m = data.match(pattern);\n var count = 0;\n if (m === null) return count;\n for (var i = 0; i < m.length; i++) {\n if (m[i].charCodeAt(0) >= 0x4E00) {\n count += m[i].length;\n } else {\n count += 1;\n }\n }\n return count;\n}\n\nvar iconClassMap = {\n 'bold': 'fa fa-bold',\n 'italic': 'fa fa-italic',\n 'strikethrough': 'fa fa-strikethrough',\n 'heading': 'fa fa-header fa-heading',\n 'heading-smaller': 'fa fa-header fa-heading header-smaller',\n 'heading-bigger': 'fa fa-header fa-heading header-bigger',\n 'heading-1': 'fa fa-header fa-heading header-1',\n 'heading-2': 'fa fa-header fa-heading header-2',\n 'heading-3': 'fa fa-header fa-heading header-3',\n 'code': 'fa fa-code',\n 'quote': 'fa fa-quote-left',\n 'ordered-list': 'fa fa-list-ol',\n 'unordered-list': 'fa fa-list-ul',\n 'clean-block': 'fa fa-eraser',\n 'link': 'fa fa-link',\n 'image': 'fa fa-image',\n 'upload-image': 'fa fa-image',\n 'table': 'fa fa-table',\n 'horizontal-rule': 'fa fa-minus',\n 'preview': 'fa fa-eye',\n 'side-by-side': 'fa fa-columns',\n 'fullscreen': 'fa fa-arrows-alt',\n 'guide': 'fa fa-question-circle',\n 'undo': 'fa fa-undo',\n 'redo': 'fa fa-repeat fa-redo',\n};\n\nvar toolbarBuiltInButtons = {\n 'bold': {\n name: 'bold',\n action: toggleBold,\n className: iconClassMap['bold'],\n title: 'Bold',\n default: true,\n },\n 'italic': {\n name: 'italic',\n action: toggleItalic,\n className: iconClassMap['italic'],\n title: 'Italic',\n default: true,\n },\n 'strikethrough': {\n name: 'strikethrough',\n action: toggleStrikethrough,\n className: iconClassMap['strikethrough'],\n title: 'Strikethrough',\n },\n 'heading': {\n name: 'heading',\n action: toggleHeadingSmaller,\n className: iconClassMap['heading'],\n title: 'Heading',\n default: true,\n },\n 'heading-smaller': {\n name: 'heading-smaller',\n action: toggleHeadingSmaller,\n className: iconClassMap['heading-smaller'],\n title: 'Smaller Heading',\n },\n 'heading-bigger': {\n name: 'heading-bigger',\n action: toggleHeadingBigger,\n className: iconClassMap['heading-bigger'],\n title: 'Bigger Heading',\n },\n 'heading-1': {\n name: 'heading-1',\n action: toggleHeading1,\n className: iconClassMap['heading-1'],\n title: 'Big Heading',\n },\n 'heading-2': {\n name: 'heading-2',\n action: toggleHeading2,\n className: iconClassMap['heading-2'],\n title: 'Medium Heading',\n },\n 'heading-3': {\n name: 'heading-3',\n action: toggleHeading3,\n className: iconClassMap['heading-3'],\n title: 'Small Heading',\n },\n 'separator-1': {\n name: 'separator-1',\n },\n 'code': {\n name: 'code',\n action: toggleCodeBlock,\n className: iconClassMap['code'],\n title: 'Code',\n },\n 'quote': {\n name: 'quote',\n action: toggleBlockquote,\n className: iconClassMap['quote'],\n title: 'Quote',\n default: true,\n },\n 'unordered-list': {\n name: 'unordered-list',\n action: toggleUnorderedList,\n className: iconClassMap['unordered-list'],\n title: 'Generic List',\n default: true,\n },\n 'ordered-list': {\n name: 'ordered-list',\n action: toggleOrderedList,\n className: iconClassMap['ordered-list'],\n title: 'Numbered List',\n default: true,\n },\n 'clean-block': {\n name: 'clean-block',\n action: cleanBlock,\n className: iconClassMap['clean-block'],\n title: 'Clean block',\n },\n 'separator-2': {\n name: 'separator-2',\n },\n 'link': {\n name: 'link',\n action: drawLink,\n className: iconClassMap['link'],\n title: 'Create Link',\n default: true,\n },\n 'image': {\n name: 'image',\n action: drawImage,\n className: iconClassMap['image'],\n title: 'Insert Image',\n default: true,\n },\n 'upload-image': {\n name: 'upload-image',\n action: drawUploadedImage,\n className: iconClassMap['upload-image'],\n title: 'Import an image',\n },\n 'table': {\n name: 'table',\n action: drawTable,\n className: iconClassMap['table'],\n title: 'Insert Table',\n },\n 'horizontal-rule': {\n name: 'horizontal-rule',\n action: drawHorizontalRule,\n className: iconClassMap['horizontal-rule'],\n title: 'Insert Horizontal Line',\n },\n 'separator-3': {\n name: 'separator-3',\n },\n 'preview': {\n name: 'preview',\n action: togglePreview,\n className: iconClassMap['preview'],\n noDisable: true,\n title: 'Toggle Preview',\n default: true,\n },\n 'side-by-side': {\n name: 'side-by-side',\n action: toggleSideBySide,\n className: iconClassMap['side-by-side'],\n noDisable: true,\n noMobile: true,\n title: 'Toggle Side by Side',\n default: true,\n },\n 'fullscreen': {\n name: 'fullscreen',\n action: toggleFullScreen,\n className: iconClassMap['fullscreen'],\n noDisable: true,\n noMobile: true,\n title: 'Toggle Fullscreen',\n default: true,\n },\n 'separator-4': {\n name: 'separator-4',\n },\n 'guide': {\n name: 'guide',\n action: 'https://www.markdownguide.org/basic-syntax/',\n className: iconClassMap['guide'],\n noDisable: true,\n title: 'Markdown Guide',\n default: true,\n },\n 'separator-5': {\n name: 'separator-5',\n },\n 'undo': {\n name: 'undo',\n action: undo,\n className: iconClassMap['undo'],\n noDisable: true,\n title: 'Undo',\n },\n 'redo': {\n name: 'redo',\n action: redo,\n className: iconClassMap['redo'],\n noDisable: true,\n title: 'Redo',\n },\n};\n\nvar insertTexts = {\n link: ['[', '](#url#)'],\n image: [''],\n uploadedImage: ['', ''],\n // uploadedImage: ['\\n', ''], // TODO: New line insertion doesn't work here.\n table: ['', '\\n\\n| Column 1 | Column 2 | Column 3 |\\n| -------- | -------- | -------- |\\n| Text | Text | Text |\\n\\n'],\n horizontalRule: ['', '\\n\\n-----\\n\\n'],\n};\n\nvar promptTexts = {\n link: 'URL for the link:',\n image: 'URL of the image:',\n};\n\nvar timeFormat = {\n locale: 'en-US',\n format: {\n hour: '2-digit',\n minute: '2-digit',\n },\n};\n\nvar blockStyles = {\n 'bold': '**',\n 'code': '```',\n 'italic': '*',\n};\n\n/**\n * Texts displayed to the user (mainly on the status bar) for the import image\n * feature. Can be used for customization or internationalization.\n */\nvar imageTexts = {\n sbInit: 'Attach files by drag and dropping or pasting from clipboard.',\n sbOnDragEnter: 'Drop image to upload it.',\n sbOnDrop: 'Uploading image #images_names#...',\n sbProgress: 'Uploading #file_name#: #progress#%',\n sbOnUploaded: 'Uploaded #image_name#',\n sizeUnits: ' B, KB, MB',\n};\n\n/**\n * Errors displayed to the user, using the `errorCallback` option. Can be used for\n * customization or internationalization.\n */\nvar errorMessages = {\n noFileGiven: 'You must select a file.',\n typeNotAllowed: 'This image type is not allowed.',\n fileTooLarge: 'Image #image_name# is too big (#image_size#).\\n' +\n 'Maximum file size is #image_max_size#.',\n importError: 'Something went wrong when uploading the image #image_name#.',\n};\n\n/**\n * Interface of EasyMDE.\n */\nfunction EasyMDE(options) {\n // Handle options parameter\n options = options || {};\n\n // Used later to refer to it\"s parent\n options.parent = this;\n\n // Check if Font Awesome needs to be auto downloaded\n var autoDownloadFA = true;\n\n if (options.autoDownloadFontAwesome === false) {\n autoDownloadFA = false;\n }\n\n if (options.autoDownloadFontAwesome !== true) {\n var styleSheets = document.styleSheets;\n for (var i = 0; i < styleSheets.length; i++) {\n if (!styleSheets[i].href)\n continue;\n\n if (styleSheets[i].href.indexOf('//maxcdn.bootstrapcdn.com/font-awesome/') > -1) {\n autoDownloadFA = false;\n }\n }\n }\n\n if (autoDownloadFA) {\n var link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = 'https://maxcdn.bootstrapcdn.com/font-awesome/latest/css/font-awesome.min.css';\n document.getElementsByTagName('head')[0].appendChild(link);\n }\n\n\n // Find the textarea to use\n if (options.element) {\n this.element = options.element;\n } else if (options.element === null) {\n // This means that the element option was specified, but no element was found\n console.log('EasyMDE: Error. No element was found.');\n return;\n }\n\n\n // Handle toolbar\n if (options.toolbar === undefined) {\n // Initialize\n options.toolbar = [];\n\n\n // Loop over the built in buttons, to get the preferred order\n for (var key in toolbarBuiltInButtons) {\n if (Object.prototype.hasOwnProperty.call(toolbarBuiltInButtons, key)) {\n if (key.indexOf('separator-') != -1) {\n options.toolbar.push('|');\n }\n\n if (toolbarBuiltInButtons[key].default === true || (options.showIcons && options.showIcons.constructor === Array && options.showIcons.indexOf(key) != -1)) {\n options.toolbar.push(key);\n }\n }\n }\n }\n\n // Editor preview styling class.\n if (!Object.prototype.hasOwnProperty.call(options, 'previewClass')) {\n options.previewClass = 'editor-preview';\n }\n\n // Handle status bar\n if (!Object.prototype.hasOwnProperty.call(options, 'status')) {\n options.status = ['autosave', 'lines', 'words', 'cursor'];\n\n if (options.uploadImage) {\n options.status.unshift('upload-image');\n }\n }\n\n\n // Add default preview rendering function\n if (!options.previewRender) {\n options.previewRender = function (plainText) {\n // Note: \"this\" refers to the options object\n return this.parent.markdown(plainText);\n };\n }\n\n\n // Set default options for parsing config\n options.parsingConfig = extend({\n highlightFormatting: true, // needed for toggleCodeBlock to detect types of code\n }, options.parsingConfig || {});\n\n\n // Merging the insertTexts, with the given options\n options.insertTexts = extend({}, insertTexts, options.insertTexts || {});\n\n\n // Merging the promptTexts, with the given options\n options.promptTexts = extend({}, promptTexts, options.promptTexts || {});\n\n\n // Merging the blockStyles, with the given options\n options.blockStyles = extend({}, blockStyles, options.blockStyles || {});\n\n\n if (options.autosave != undefined) {\n // Merging the Autosave timeFormat, with the given options\n options.autosave.timeFormat = extend({}, timeFormat, options.autosave.timeFormat || {});\n }\n\n options.iconClassMap = extend({}, iconClassMap, options.iconClassMap || {});\n\n // Merging the shortcuts, with the given options\n options.shortcuts = extend({}, shortcuts, options.shortcuts || {});\n\n options.maxHeight = options.maxHeight || undefined;\n\n options.direction = options.direction || 'ltr';\n\n if (typeof options.maxHeight !== 'undefined') {\n // Min and max height are equal if maxHeight is set\n options.minHeight = options.maxHeight;\n } else {\n options.minHeight = options.minHeight || '300px';\n }\n\n options.errorCallback = options.errorCallback || function (errorMessage) {\n alert(errorMessage);\n };\n\n // Import-image default configuration\n options.uploadImage = options.uploadImage || false;\n options.imageMaxSize = options.imageMaxSize || 2097152; // 1024 * 1024 * 2\n options.imageAccept = options.imageAccept || 'image/png, image/jpeg, image/gif, image/avif';\n options.imageTexts = extend({}, imageTexts, options.imageTexts || {});\n options.errorMessages = extend({}, errorMessages, options.errorMessages || {});\n options.imagePathAbsolute = options.imagePathAbsolute || false;\n options.imageCSRFName = options.imageCSRFName || 'csrfmiddlewaretoken';\n options.imageCSRFHeader = options.imageCSRFHeader || false;\n\n\n // Change unique_id to uniqueId for backwards compatibility\n if (options.autosave != undefined && options.autosave.unique_id != undefined && options.autosave.unique_id != '')\n options.autosave.uniqueId = options.autosave.unique_id;\n\n // If overlay mode is specified and combine is not provided, default it to true\n if (options.overlayMode && options.overlayMode.combine === undefined) {\n options.overlayMode.combine = true;\n }\n\n // Update this options\n this.options = options;\n\n\n // Auto render\n this.render();\n\n\n // The codemirror component is only available after rendering\n // so, the setter for the initialValue can only run after\n // the element has been rendered\n if (options.initialValue && (!this.options.autosave || this.options.autosave.foundSavedValue !== true)) {\n this.value(options.initialValue);\n }\n\n if (options.uploadImage) {\n var self = this;\n\n this.codemirror.on('dragenter', function (cm, event) {\n self.updateStatusBar('upload-image', self.options.imageTexts.sbOnDragEnter);\n event.stopPropagation();\n event.preventDefault();\n });\n this.codemirror.on('dragend', function (cm, event) {\n self.updateStatusBar('upload-image', self.options.imageTexts.sbInit);\n event.stopPropagation();\n event.preventDefault();\n });\n this.codemirror.on('dragleave', function (cm, event) {\n self.updateStatusBar('upload-image', self.options.imageTexts.sbInit);\n event.stopPropagation();\n event.preventDefault();\n });\n\n this.codemirror.on('dragover', function (cm, event) {\n self.updateStatusBar('upload-image', self.options.imageTexts.sbOnDragEnter);\n event.stopPropagation();\n event.preventDefault();\n });\n\n this.codemirror.on('drop', function (cm, event) {\n event.stopPropagation();\n event.preventDefault();\n if (options.imageUploadFunction) {\n self.uploadImagesUsingCustomFunction(options.imageUploadFunction, event.dataTransfer.files);\n } else {\n self.uploadImages(event.dataTransfer.files);\n }\n });\n\n this.codemirror.on('paste', function (cm, event) {\n if (options.imageUploadFunction) {\n self.uploadImagesUsingCustomFunction(options.imageUploadFunction, event.clipboardData.files);\n } else {\n self.uploadImages(event.clipboardData.files);\n }\n });\n }\n}\n\n/**\n * Upload asynchronously a list of images to a server.\n *\n * Can be triggered by:\n * - drag&drop;\n * - copy-paste;\n * - the browse-file window (opened when the user clicks on the *upload-image* icon).\n * @param {FileList} files The files to upload the the server.\n * @param [onSuccess] {function} see EasyMDE.prototype.uploadImage\n * @param [onError] {function} see EasyMDE.prototype.uploadImage\n */\nEasyMDE.prototype.uploadImages = function (files, onSuccess, onError) {\n if (files.length === 0) {\n return;\n }\n var names = [];\n for (var i = 0; i < files.length; i++) {\n names.push(files[i].name);\n this.uploadImage(files[i], onSuccess, onError);\n }\n this.updateStatusBar('upload-image', this.options.imageTexts.sbOnDrop.replace('#images_names#', names.join(', ')));\n};\n\n/**\n * Upload asynchronously a list of images to a server.\n *\n * Can be triggered by:\n * - drag&drop;\n * - copy-paste;\n * - the browse-file window (opened when the user clicks on the *upload-image* icon).\n * @param imageUploadFunction {Function} The custom function to upload the image passed in options.\n * @param {FileList} files The files to upload the the server.\n */\nEasyMDE.prototype.uploadImagesUsingCustomFunction = function (imageUploadFunction, files) {\n if (files.length === 0) {\n return;\n }\n var names = [];\n for (var i = 0; i < files.length; i++) {\n names.push(files[i].name);\n this.uploadImageUsingCustomFunction(imageUploadFunction, files[i]);\n }\n this.updateStatusBar('upload-image', this.options.imageTexts.sbOnDrop.replace('#images_names#', names.join(', ')));\n};\n\n/**\n * Update an item in the status bar.\n * @param itemName {string} The name of the item to update (ie. 'upload-image', 'autosave', etc.).\n * @param content {string} the new content of the item to write in the status bar.\n */\nEasyMDE.prototype.updateStatusBar = function (itemName, content) {\n if (!this.gui.statusbar) {\n return;\n }\n\n var matchingClasses = this.gui.statusbar.getElementsByClassName(itemName);\n if (matchingClasses.length === 1) {\n this.gui.statusbar.getElementsByClassName(itemName)[0].textContent = content;\n } else if (matchingClasses.length === 0) {\n console.log('EasyMDE: status bar item ' + itemName + ' was not found.');\n } else {\n console.log('EasyMDE: Several status bar items named ' + itemName + ' was found.');\n }\n};\n\n/**\n * Default markdown render.\n */\nEasyMDE.prototype.markdown = function (text) {\n if (marked) {\n // Initialize\n var markedOptions;\n if (this.options && this.options.renderingConfig && this.options.renderingConfig.markedOptions) {\n markedOptions = this.options.renderingConfig.markedOptions;\n } else {\n markedOptions = {};\n }\n\n // Update options\n if (this.options && this.options.renderingConfig && this.options.renderingConfig.singleLineBreaks === false) {\n markedOptions.breaks = false;\n } else {\n markedOptions.breaks = true;\n }\n\n if (this.options && this.options.renderingConfig && this.options.renderingConfig.codeSyntaxHighlighting === true) {\n\n /* Get HLJS from config or window */\n var hljs = this.options.renderingConfig.hljs || window.hljs;\n\n /* Check if HLJS loaded */\n if (hljs) {\n markedOptions.highlight = function (code, language) {\n if (language && hljs.getLanguage(language)) {\n return hljs.highlight(language, code).value;\n } else {\n return hljs.highlightAuto(code).value;\n }\n };\n }\n }\n\n // Set options\n marked.setOptions(markedOptions);\n\n // Convert the markdown to HTML\n var htmlText = marked.parse(text);\n\n // Sanitize HTML\n if (this.options.renderingConfig && typeof this.options.renderingConfig.sanitizerFunction === 'function') {\n htmlText = this.options.renderingConfig.sanitizerFunction.call(this, htmlText);\n }\n\n // Edit the HTML anchors to add 'target=\"_blank\"' by default.\n htmlText = addAnchorTargetBlank(htmlText);\n\n // Remove list-style when rendering checkboxes\n htmlText = removeListStyleWhenCheckbox(htmlText);\n\n return htmlText;\n }\n};\n\n/**\n * Render editor to the given element.\n */\nEasyMDE.prototype.render = function (el) {\n if (!el) {\n el = this.element || document.getElementsByTagName('textarea')[0];\n }\n\n if (this._rendered && this._rendered === el) {\n // Already rendered.\n return;\n }\n\n this.element = el;\n var options = this.options;\n\n var self = this;\n var keyMaps = {};\n\n for (var key in options.shortcuts) {\n // null stands for \"do not bind this command\"\n if (options.shortcuts[key] !== null && bindings[key] !== null) {\n (function (key) {\n keyMaps[fixShortcut(options.shortcuts[key])] = function () {\n var action = bindings[key];\n if (typeof action === 'function') {\n action(self);\n } else if (typeof action === 'string') {\n window.open(action, '_blank');\n }\n };\n })(key);\n }\n }\n\n keyMaps['Enter'] = 'newlineAndIndentContinueMarkdownList';\n keyMaps['Tab'] = 'tabAndIndentMarkdownList';\n keyMaps['Shift-Tab'] = 'shiftTabAndUnindentMarkdownList';\n keyMaps['Esc'] = function (cm) {\n if (cm.getOption('fullScreen')) toggleFullScreen(self);\n };\n\n this.documentOnKeyDown = function (e) {\n e = e || window.event;\n\n if (e.keyCode == 27) {\n if (self.codemirror.getOption('fullScreen')) toggleFullScreen(self);\n }\n };\n document.addEventListener('keydown', this.documentOnKeyDown, false);\n\n var mode, backdrop;\n\n // CodeMirror overlay mode\n if (options.overlayMode) {\n CodeMirror.defineMode('overlay-mode', function (config) {\n return CodeMirror.overlayMode(CodeMirror.getMode(config, options.spellChecker !== false ? 'spell-checker' : 'gfm'), options.overlayMode.mode, options.overlayMode.combine);\n });\n\n mode = 'overlay-mode';\n backdrop = options.parsingConfig;\n backdrop.gitHubSpice = false;\n } else {\n mode = options.parsingConfig;\n mode.name = 'gfm';\n mode.gitHubSpice = false;\n }\n if (options.spellChecker !== false) {\n mode = 'spell-checker';\n backdrop = options.parsingConfig;\n backdrop.name = 'gfm';\n backdrop.gitHubSpice = false;\n\n if (typeof options.spellChecker === 'function') {\n options.spellChecker({\n codeMirrorInstance: CodeMirror,\n });\n } else {\n CodeMirrorSpellChecker({\n codeMirrorInstance: CodeMirror,\n });\n }\n }\n\n // eslint-disable-next-line no-unused-vars\n function configureMouse(cm, repeat, event) {\n return {\n addNew: false,\n };\n }\n\n this.codemirror = CodeMirror.fromTextArea(el, {\n mode: mode,\n backdrop: backdrop,\n theme: (options.theme != undefined) ? options.theme : 'easymde',\n tabSize: (options.tabSize != undefined) ? options.tabSize : 2,\n indentUnit: (options.tabSize != undefined) ? options.tabSize : 2,\n indentWithTabs: (options.indentWithTabs === false) ? false : true,\n lineNumbers: (options.lineNumbers === true) ? true : false,\n autofocus: (options.autofocus === true) ? true : false,\n extraKeys: keyMaps,\n direction: options.direction,\n lineWrapping: (options.lineWrapping === false) ? false : true,\n allowDropFileTypes: ['text/plain'],\n placeholder: options.placeholder || el.getAttribute('placeholder') || '',\n styleSelectedText: (options.styleSelectedText != undefined) ? options.styleSelectedText : !isMobile(),\n scrollbarStyle: (options.scrollbarStyle != undefined) ? options.scrollbarStyle : 'native',\n configureMouse: configureMouse,\n inputStyle: (options.inputStyle != undefined) ? options.inputStyle : isMobile() ? 'contenteditable' : 'textarea',\n spellcheck: (options.nativeSpellcheck != undefined) ? options.nativeSpellcheck : true,\n autoRefresh: (options.autoRefresh != undefined) ? options.autoRefresh : false,\n });\n\n this.codemirror.getScrollerElement().style.minHeight = options.minHeight;\n\n if (typeof options.maxHeight !== 'undefined') {\n this.codemirror.getScrollerElement().style.height = options.maxHeight;\n }\n\n if (options.forceSync === true) {\n var cm = this.codemirror;\n cm.on('change', function () {\n cm.save();\n });\n }\n\n this.gui = {};\n\n // Wrap Codemirror with container before create toolbar, etc,\n // to use with sideBySideFullscreen option.\n var easyMDEContainer = document.createElement('div');\n easyMDEContainer.classList.add('EasyMDEContainer');\n easyMDEContainer.setAttribute('role', 'application');\n var cmWrapper = this.codemirror.getWrapperElement();\n cmWrapper.parentNode.insertBefore(easyMDEContainer, cmWrapper);\n easyMDEContainer.appendChild(cmWrapper);\n\n if (options.toolbar !== false) {\n this.gui.toolbar = this.createToolbar();\n }\n if (options.status !== false) {\n this.gui.statusbar = this.createStatusbar();\n }\n if (options.autosave != undefined && options.autosave.enabled === true) {\n this.autosave(); // use to load localstorage content\n this.codemirror.on('change', function () {\n clearTimeout(self._autosave_timeout);\n self._autosave_timeout = setTimeout(function () {\n self.autosave();\n }, self.options.autosave.submit_delay || self.options.autosave.delay || 1000);\n });\n }\n\n function calcHeight(naturalWidth, naturalHeight) {\n var height;\n var viewportWidth = window.getComputedStyle(document.querySelector('.CodeMirror-sizer')).width.replace('px', '');\n if (naturalWidth < viewportWidth) {\n height = naturalHeight + 'px';\n } else {\n height = (naturalHeight / naturalWidth * 100) + '%';\n }\n return height;\n }\n\n var _vm = this;\n\n\n function assignImageBlockAttributes(parentEl, img) {\n parentEl.setAttribute('data-img-src', img.url);\n parentEl.setAttribute('style', '--bg-image:url(' + img.url + ');--width:' + img.naturalWidth + 'px;--height:' + calcHeight(img.naturalWidth, img.naturalHeight));\n _vm.codemirror.setSize();\n }\n\n function handleImages() {\n if (!options.previewImagesInEditor) {\n return;\n }\n\n easyMDEContainer.querySelectorAll('.cm-image-marker').forEach(function (e) {\n var parentEl = e.parentElement;\n if (!parentEl.innerText.match(/^!\\[.*?\\]\\(.*\\)/g)) {\n // if img pasted on the same line with other text, don't preview, preview only images on separate line\n return;\n }\n if (!parentEl.hasAttribute('data-img-src')) {\n var srcAttr = parentEl.innerText.match('\\\\((.*)\\\\)'); // might require better parsing according to markdown spec\n if (!window.EMDEimagesCache) {\n window.EMDEimagesCache = {};\n }\n\n if (srcAttr && srcAttr.length >= 2) {\n var keySrc = srcAttr[1];\n\n if (options.imagesPreviewHandler) {\n var newSrc = options.imagesPreviewHandler(srcAttr[1]);\n // defensive check making sure the handler provided by the user returns a string\n if (typeof newSrc === 'string') {\n keySrc = newSrc;\n }\n }\n\n if (!window.EMDEimagesCache[keySrc]) {\n var img = document.createElement('img');\n img.onload = function () {\n window.EMDEimagesCache[keySrc] = {\n naturalWidth: img.naturalWidth,\n naturalHeight: img.naturalHeight,\n url: keySrc,\n };\n assignImageBlockAttributes(parentEl, window.EMDEimagesCache[keySrc]);\n };\n img.src = keySrc;\n } else {\n assignImageBlockAttributes(parentEl, window.EMDEimagesCache[keySrc]);\n }\n }\n }\n });\n }\n\n this.codemirror.on('update', function () {\n handleImages();\n });\n\n this.gui.sideBySide = this.createSideBySide();\n this._rendered = this.element;\n\n if (options.autofocus === true || el.autofocus) {\n this.codemirror.focus();\n }\n\n // Fixes CodeMirror bug (#344)\n var temp_cm = this.codemirror;\n setTimeout(function () {\n temp_cm.refresh();\n }.bind(temp_cm), 0);\n};\n\nEasyMDE.prototype.cleanup = function () {\n document.removeEventListener('keydown', this.documentOnKeyDown);\n};\n\n// Safari, in Private Browsing Mode, looks like it supports localStorage but all calls to setItem throw QuotaExceededError. We're going to detect this and set a variable accordingly.\nfunction isLocalStorageAvailable() {\n if (typeof localStorage === 'object') {\n try {\n localStorage.setItem('smde_localStorage', 1);\n localStorage.removeItem('smde_localStorage');\n } catch (e) {\n return false;\n }\n } else {\n return false;\n }\n\n return true;\n}\n\nEasyMDE.prototype.autosave = function () {\n if (isLocalStorageAvailable()) {\n var easyMDE = this;\n\n if (this.options.autosave.uniqueId == undefined || this.options.autosave.uniqueId == '') {\n console.log('EasyMDE: You must set a uniqueId to use the autosave feature');\n return;\n }\n\n if (this.options.autosave.binded !== true) {\n if (easyMDE.element.form != null && easyMDE.element.form != undefined) {\n easyMDE.element.form.addEventListener('submit', function () {\n clearTimeout(easyMDE.autosaveTimeoutId);\n easyMDE.autosaveTimeoutId = undefined;\n\n localStorage.removeItem('smde_' + easyMDE.options.autosave.uniqueId);\n });\n }\n\n this.options.autosave.binded = true;\n }\n\n if (this.options.autosave.loaded !== true) {\n if (typeof localStorage.getItem('smde_' + this.options.autosave.uniqueId) == 'string' && localStorage.getItem('smde_' + this.options.autosave.uniqueId) != '') {\n this.codemirror.setValue(localStorage.getItem('smde_' + this.options.autosave.uniqueId));\n this.options.autosave.foundSavedValue = true;\n }\n\n this.options.autosave.loaded = true;\n }\n\n var value = easyMDE.value();\n if (value !== '') {\n localStorage.setItem('smde_' + this.options.autosave.uniqueId, value);\n } else {\n localStorage.removeItem('smde_' + this.options.autosave.uniqueId);\n }\n\n var el = document.getElementById('autosaved');\n if (el != null && el != undefined && el != '') {\n var d = new Date();\n var dd = new Intl.DateTimeFormat([this.options.autosave.timeFormat.locale, 'en-US'], this.options.autosave.timeFormat.format).format(d);\n var save = this.options.autosave.text == undefined ? 'Autosaved: ' : this.options.autosave.text;\n\n el.innerHTML = save + dd;\n }\n } else {\n console.log('EasyMDE: localStorage not available, cannot autosave');\n }\n};\n\nEasyMDE.prototype.clearAutosavedValue = function () {\n if (isLocalStorageAvailable()) {\n if (this.options.autosave == undefined || this.options.autosave.uniqueId == undefined || this.options.autosave.uniqueId == '') {\n console.log('EasyMDE: You must set a uniqueId to clear the autosave value');\n return;\n }\n\n localStorage.removeItem('smde_' + this.options.autosave.uniqueId);\n } else {\n console.log('EasyMDE: localStorage not available, cannot autosave');\n }\n};\n\n/**\n * Open the browse-file window to upload an image to a server.\n * @param [onSuccess] {function} see EasyMDE.prototype.uploadImage\n * @param [onError] {function} see EasyMDE.prototype.uploadImage\n */\nEasyMDE.prototype.openBrowseFileWindow = function (onSuccess, onError) {\n var self = this;\n var imageInput = this.gui.toolbar.getElementsByClassName('imageInput')[0];\n imageInput.click(); //dispatchEvent(new MouseEvent('click')); // replaced with click() for IE11 compatibility.\n function onChange(event) {\n if (self.options.imageUploadFunction) {\n self.uploadImagesUsingCustomFunction(self.options.imageUploadFunction, event.target.files);\n } else {\n self.uploadImages(event.target.files, onSuccess, onError);\n }\n imageInput.removeEventListener('change', onChange);\n }\n\n imageInput.addEventListener('change', onChange);\n};\n\n/**\n * Upload an image to the server.\n *\n * @param file {File} The image to upload, as a HTML5 File object (https://developer.mozilla.org/en-US/docs/Web/API/File)\n * @param [onSuccess] {function} A callback function to execute after the image has been successfully uploaded, with one parameter:\n * - url (string): The URL of the uploaded image.\n * @param [onError] {function} A callback function to execute when the image upload fails, with one parameter:\n * - error (string): the detailed error to display to the user (based on messages from options.errorMessages).\n */\nEasyMDE.prototype.uploadImage = function (file, onSuccess, onError) {\n var self = this;\n onSuccess = onSuccess || function onSuccess(imageUrl) {\n afterImageUploaded(self, imageUrl);\n };\n\n function onErrorSup(errorMessage) {\n // show error on status bar and reset after 10000ms\n self.updateStatusBar('upload-image', errorMessage);\n\n setTimeout(function () {\n self.updateStatusBar('upload-image', self.options.imageTexts.sbInit);\n }, 10000);\n\n // run custom error handler\n if (onError && typeof onError === 'function') {\n onError(errorMessage);\n }\n // run error handler from options, this alerts the message.\n self.options.errorCallback(errorMessage);\n }\n\n function fillErrorMessage(errorMessage) {\n var units = self.options.imageTexts.sizeUnits.split(',');\n return errorMessage\n .replace('#image_name#', file.name)\n .replace('#image_size#', humanFileSize(file.size, units))\n .replace('#image_max_size#', humanFileSize(self.options.imageMaxSize, units));\n }\n\n if (file.size > this.options.imageMaxSize) {\n onErrorSup(fillErrorMessage(this.options.errorMessages.fileTooLarge));\n return;\n }\n\n var formData = new FormData();\n formData.append('image', file);\n\n // insert CSRF body token if provided in config.\n if (self.options.imageCSRFToken && !self.options.imageCSRFHeader) {\n formData.append(self.options.imageCSRFName, self.options.imageCSRFToken);\n }\n\n var request = new XMLHttpRequest();\n request.upload.onprogress = function (event) {\n if (event.lengthComputable) {\n var progress = '' + Math.round((event.loaded * 100) / event.total);\n self.updateStatusBar('upload-image', self.options.imageTexts.sbProgress.replace('#file_name#', file.name).replace('#progress#', progress));\n }\n };\n request.open('POST', this.options.imageUploadEndpoint);\n\n // insert CSRF header token if provided in config.\n if (self.options.imageCSRFToken && self.options.imageCSRFHeader) {\n request.setRequestHeader(self.options.imageCSRFName, self.options.imageCSRFToken);\n }\n\n request.onload = function () {\n try {\n var response = JSON.parse(this.responseText);\n } catch (error) {\n console.error('EasyMDE: The server did not return a valid json.');\n onErrorSup(fillErrorMessage(self.options.errorMessages.importError));\n return;\n }\n if (this.status === 200 && response && !response.error && response.data && response.data.filePath) {\n onSuccess((self.options.imagePathAbsolute ? '' : (window.location.origin + '/')) + response.data.filePath);\n } else {\n if (response.error && response.error in self.options.errorMessages) { // preformatted error message\n onErrorSup(fillErrorMessage(self.options.errorMessages[response.error]));\n } else if (response.error) { // server side generated error message\n onErrorSup(fillErrorMessage(response.error));\n } else { //unknown error\n console.error('EasyMDE: Received an unexpected response after uploading the image.'\n + this.status + ' (' + this.statusText + ')');\n onErrorSup(fillErrorMessage(self.options.errorMessages.importError));\n }\n }\n };\n\n request.onerror = function (event) {\n console.error('EasyMDE: An unexpected error occurred when trying to upload the image.'\n + event.target.status + ' (' + event.target.statusText + ')');\n onErrorSup(self.options.errorMessages.importError);\n };\n\n request.send(formData);\n\n};\n\n/**\n * Upload an image to the server using a custom upload function.\n *\n * @param imageUploadFunction {Function} The custom function to upload the image passed in options\n * @param file {File} The image to upload, as a HTML5 File object (https://developer.mozilla.org/en-US/docs/Web/API/File).\n */\nEasyMDE.prototype.uploadImageUsingCustomFunction = function (imageUploadFunction, file) {\n var self = this;\n\n function onSuccess(imageUrl) {\n afterImageUploaded(self, imageUrl);\n }\n\n function onError(errorMessage) {\n var filledErrorMessage = fillErrorMessage(errorMessage);\n // show error on status bar and reset after 10000ms\n self.updateStatusBar('upload-image', filledErrorMessage);\n\n setTimeout(function () {\n self.updateStatusBar('upload-image', self.options.imageTexts.sbInit);\n }, 10000);\n\n // run error handler from options, this alerts the message.\n self.options.errorCallback(filledErrorMessage);\n }\n\n function fillErrorMessage(errorMessage) {\n var units = self.options.imageTexts.sizeUnits.split(',');\n return errorMessage\n .replace('#image_name#', file.name)\n .replace('#image_size#', humanFileSize(file.size, units))\n .replace('#image_max_size#', humanFileSize(self.options.imageMaxSize, units));\n }\n\n imageUploadFunction.apply(this, [file, onSuccess, onError]);\n};\n\nEasyMDE.prototype.setPreviewMaxHeight = function () {\n var cm = this.codemirror;\n var wrapper = cm.getWrapperElement();\n var preview = wrapper.nextSibling;\n\n // Calc preview max height\n var paddingTop = parseInt(window.getComputedStyle(wrapper).paddingTop);\n var borderTopWidth = parseInt(window.getComputedStyle(wrapper).borderTopWidth);\n var optionsMaxHeight = parseInt(this.options.maxHeight);\n var wrapperMaxHeight = optionsMaxHeight + paddingTop * 2 + borderTopWidth * 2;\n var previewMaxHeight = wrapperMaxHeight.toString() + 'px';\n\n preview.style.height = previewMaxHeight;\n};\n\nEasyMDE.prototype.createSideBySide = function () {\n var cm = this.codemirror;\n var wrapper = cm.getWrapperElement();\n var preview = wrapper.nextSibling;\n\n if (!preview || !preview.classList.contains('editor-preview-side')) {\n preview = document.createElement('div');\n preview.className = 'editor-preview-side';\n\n if (this.options.previewClass) {\n\n if (Array.isArray(this.options.previewClass)) {\n for (var i = 0; i < this.options.previewClass.length; i++) {\n preview.classList.add(this.options.previewClass[i]);\n }\n\n } else if (typeof this.options.previewClass === 'string') {\n preview.classList.add(this.options.previewClass);\n }\n }\n\n wrapper.parentNode.insertBefore(preview, wrapper.nextSibling);\n }\n\n if (typeof this.options.maxHeight !== 'undefined') {\n this.setPreviewMaxHeight();\n }\n\n if (this.options.syncSideBySidePreviewScroll === false) return preview;\n // Syncs scroll editor -> preview\n var cScroll = false;\n var pScroll = false;\n cm.on('scroll', function (v) {\n if (cScroll) {\n cScroll = false;\n return;\n }\n pScroll = true;\n var height = v.getScrollInfo().height - v.getScrollInfo().clientHeight;\n var ratio = parseFloat(v.getScrollInfo().top) / height;\n var move = (preview.scrollHeight - preview.clientHeight) * ratio;\n preview.scrollTop = move;\n });\n\n // Syncs scroll preview -> editor\n preview.onscroll = function () {\n if (pScroll) {\n pScroll = false;\n return;\n }\n cScroll = true;\n var height = preview.scrollHeight - preview.clientHeight;\n var ratio = parseFloat(preview.scrollTop) / height;\n var move = (cm.getScrollInfo().height - cm.getScrollInfo().clientHeight) * ratio;\n cm.scrollTo(0, move);\n };\n return preview;\n};\n\nEasyMDE.prototype.createToolbar = function (items) {\n items = items || this.options.toolbar;\n\n if (!items || items.length === 0) {\n return;\n }\n var i;\n for (i = 0; i < items.length; i++) {\n if (toolbarBuiltInButtons[items[i]] != undefined) {\n items[i] = toolbarBuiltInButtons[items[i]];\n }\n }\n\n var bar = document.createElement('div');\n bar.className = 'editor-toolbar';\n bar.setAttribute('role', 'toolbar');\n\n var self = this;\n\n var toolbarData = {};\n self.toolbar = items;\n\n for (i = 0; i < items.length; i++) {\n if (items[i].name == 'guide' && self.options.toolbarGuideIcon === false)\n continue;\n\n if (self.options.hideIcons && self.options.hideIcons.indexOf(items[i].name) != -1)\n continue;\n\n // Fullscreen does not work well on mobile devices (even tablets)\n // In the future, hopefully this can be resolved\n if ((items[i].name == 'fullscreen' || items[i].name == 'side-by-side') && isMobile())\n continue;\n\n\n // Don't include trailing separators\n if (items[i] === '|') {\n var nonSeparatorIconsFollow = false;\n\n for (var x = (i + 1); x < items.length; x++) {\n if (items[x] !== '|' && (!self.options.hideIcons || self.options.hideIcons.indexOf(items[x].name) == -1)) {\n nonSeparatorIconsFollow = true;\n }\n }\n\n if (!nonSeparatorIconsFollow)\n continue;\n }\n\n\n // Create the icon and append to the toolbar\n (function (item) {\n var el;\n if (item === '|') {\n el = createSep();\n } else if (item.children) {\n el = createToolbarDropdown(item, self.options.toolbarTips, self.options.shortcuts, self);\n } else {\n el = createToolbarButton(item, true, self.options.toolbarTips, self.options.shortcuts, 'button', self);\n }\n\n\n toolbarData[item.name || item] = el;\n bar.appendChild(el);\n\n // Create the input element (ie. <input type='file'>), used among\n // with the 'import-image' icon to open the browse-file window.\n if (item.name === 'upload-image') {\n var imageInput = document.createElement('input');\n imageInput.className = 'imageInput';\n imageInput.type = 'file';\n imageInput.multiple = true;\n imageInput.name = 'image';\n imageInput.accept = self.options.imageAccept;\n imageInput.style.display = 'none';\n imageInput.style.opacity = 0;\n bar.appendChild(imageInput);\n }\n })(items[i]);\n }\n\n self.toolbar_div = bar;\n self.toolbarElements = toolbarData;\n\n var cm = this.codemirror;\n cm.on('cursorActivity', function () {\n var stat = getState(cm);\n\n for (var key in toolbarData) {\n (function (key) {\n var el = toolbarData[key];\n if (stat[key]) {\n el.classList.add('active');\n } else if (key != 'fullscreen' && key != 'side-by-side') {\n el.classList.remove('active');\n }\n })(key);\n }\n });\n\n var cmWrapper = cm.getWrapperElement();\n cmWrapper.parentNode.insertBefore(bar, cmWrapper);\n return bar;\n};\n\nEasyMDE.prototype.createStatusbar = function (status) {\n // Initialize\n status = status || this.options.status;\n var options = this.options;\n var cm = this.codemirror;\n\n // Make sure the status variable is valid\n if (!status || status.length === 0) {\n return;\n }\n\n // Set up the built-in items\n var items = [];\n var i, onUpdate, onActivity, defaultValue;\n\n for (i = 0; i < status.length; i++) {\n // Reset some values\n onUpdate = undefined;\n onActivity = undefined;\n defaultValue = undefined;\n\n\n // Handle if custom or not\n if (typeof status[i] === 'object') {\n items.push({\n className: status[i].className,\n defaultValue: status[i].defaultValue,\n onUpdate: status[i].onUpdate,\n onActivity: status[i].onActivity,\n });\n } else {\n var name = status[i];\n\n if (name === 'words') {\n defaultValue = function (el) {\n el.innerHTML = wordCount(cm.getValue());\n };\n onUpdate = function (el) {\n el.innerHTML = wordCount(cm.getValue());\n };\n } else if (name === 'lines') {\n defaultValue = function (el) {\n el.innerHTML = cm.lineCount();\n };\n onUpdate = function (el) {\n el.innerHTML = cm.lineCount();\n };\n } else if (name === 'cursor') {\n defaultValue = function (el) {\n el.innerHTML = '1:1';\n };\n onActivity = function (el) {\n var pos = cm.getCursor();\n var posLine = pos.line + 1;\n var posColumn = pos.ch + 1;\n el.innerHTML = posLine + ':' + posColumn;\n };\n } else if (name === 'autosave') {\n defaultValue = function (el) {\n if (options.autosave != undefined && options.autosave.enabled === true) {\n el.setAttribute('id', 'autosaved');\n }\n };\n } else if (name === 'upload-image') {\n defaultValue = function (el) {\n el.innerHTML = options.imageTexts.sbInit;\n };\n }\n\n items.push({\n className: name,\n defaultValue: defaultValue,\n onUpdate: onUpdate,\n onActivity: onActivity,\n });\n }\n }\n\n\n // Create element for the status bar\n var bar = document.createElement('div');\n bar.className = 'editor-statusbar';\n\n\n // Create a new span for each item\n for (i = 0; i < items.length; i++) {\n // Store in temporary variable\n var item = items[i];\n\n\n // Create span element\n var el = document.createElement('span');\n el.className = item.className;\n\n\n // Ensure the defaultValue is a function\n if (typeof item.defaultValue === 'function') {\n item.defaultValue(el);\n }\n\n\n // Ensure the onUpdate is a function\n if (typeof item.onUpdate === 'function') {\n // Create a closure around the span of the current action, then execute the onUpdate handler\n this.codemirror.on('update', (function (el, item) {\n return function () {\n item.onUpdate(el);\n };\n }(el, item)));\n }\n if (typeof item.onActivity === 'function') {\n // Create a closure around the span of the current action, then execute the onActivity handler\n this.codemirror.on('cursorActivity', (function (el, item) {\n return function () {\n item.onActivity(el);\n };\n }(el, item)));\n }\n\n\n // Append the item to the status bar\n bar.appendChild(el);\n }\n\n\n // Insert the status bar into the DOM\n var cmWrapper = this.codemirror.getWrapperElement();\n cmWrapper.parentNode.insertBefore(bar, cmWrapper.nextSibling);\n return bar;\n};\n\n/**\n * Get or set the text content.\n */\nEasyMDE.prototype.value = function (val) {\n var cm = this.codemirror;\n if (val === undefined) {\n return cm.getValue();\n } else {\n cm.getDoc().setValue(val);\n if (this.isPreviewActive()) {\n var wrapper = cm.getWrapperElement();\n var preview = wrapper.lastChild;\n var preview_result = this.options.previewRender(val, preview);\n if (preview_result !== null) {\n preview.innerHTML = preview_result;\n }\n\n }\n return this;\n }\n};\n\n\n/**\n * Bind static methods for exports.\n */\nEasyMDE.toggleBold = toggleBold;\nEasyMDE.toggleItalic = toggleItalic;\nEasyMDE.toggleStrikethrough = toggleStrikethrough;\nEasyMDE.toggleBlockquote = toggleBlockquote;\nEasyMDE.toggleHeadingSmaller = toggleHeadingSmaller;\nEasyMDE.toggleHeadingBigger = toggleHeadingBigger;\nEasyMDE.toggleHeading1 = toggleHeading1;\nEasyMDE.toggleHeading2 = toggleHeading2;\nEasyMDE.toggleHeading3 = toggleHeading3;\nEasyMDE.toggleHeading4 = toggleHeading4;\nEasyMDE.toggleHeading5 = toggleHeading5;\nEasyMDE.toggleHeading6 = toggleHeading6;\nEasyMDE.toggleCodeBlock = toggleCodeBlock;\nEasyMDE.toggleUnorderedList = toggleUnorderedList;\nEasyMDE.toggleOrderedList = toggleOrderedList;\nEasyMDE.cleanBlock = cleanBlock;\nEasyMDE.drawLink = drawLink;\nEasyMDE.drawImage = drawImage;\nEasyMDE.drawUploadedImage = drawUploadedImage;\nEasyMDE.drawTable = drawTable;\nEasyMDE.drawHorizontalRule = drawHorizontalRule;\nEasyMDE.undo = undo;\nEasyMDE.redo = redo;\nEasyMDE.togglePreview = togglePreview;\nEasyMDE.toggleSideBySide = toggleSideBySide;\nEasyMDE.toggleFullScreen = toggleFullScreen;\n\n/**\n * Bind instance methods for exports.\n */\nEasyMDE.prototype.toggleBold = function () {\n toggleBold(this);\n};\nEasyMDE.prototype.toggleItalic = function () {\n toggleItalic(this);\n};\nEasyMDE.prototype.toggleStrikethrough = function () {\n toggleStrikethrough(this);\n};\nEasyMDE.prototype.toggleBlockquote = function () {\n toggleBlockquote(this);\n};\nEasyMDE.prototype.toggleHeadingSmaller = function () {\n toggleHeadingSmaller(this);\n};\nEasyMDE.prototype.toggleHeadingBigger = function () {\n toggleHeadingBigger(this);\n};\nEasyMDE.prototype.toggleHeading1 = function () {\n toggleHeading1(this);\n};\nEasyMDE.prototype.toggleHeading2 = function () {\n toggleHeading2(this);\n};\nEasyMDE.prototype.toggleHeading3 = function () {\n toggleHeading3(this);\n};\nEasyMDE.prototype.toggleHeading4 = function () {\n toggleHeading4(this);\n};\nEasyMDE.prototype.toggleHeading5 = function () {\n toggleHeading5(this);\n};\nEasyMDE.prototype.toggleHeading6 = function () {\n toggleHeading6(this);\n};\nEasyMDE.prototype.toggleCodeBlock = function () {\n toggleCodeBlock(this);\n};\nEasyMDE.prototype.toggleUnorderedList = function () {\n toggleUnorderedList(this);\n};\nEasyMDE.prototype.toggleOrderedList = function () {\n toggleOrderedList(this);\n};\nEasyMDE.prototype.cleanBlock = function () {\n cleanBlock(this);\n};\nEasyMDE.prototype.drawLink = function () {\n drawLink(this);\n};\nEasyMDE.prototype.drawImage = function () {\n drawImage(this);\n};\nEasyMDE.prototype.drawUploadedImage = function () {\n drawUploadedImage(this);\n};\nEasyMDE.prototype.drawTable = function () {\n drawTable(this);\n};\nEasyMDE.prototype.drawHorizontalRule = function () {\n drawHorizontalRule(this);\n};\nEasyMDE.prototype.undo = function () {\n undo(this);\n};\nEasyMDE.prototype.redo = function () {\n redo(this);\n};\nEasyMDE.prototype.togglePreview = function () {\n togglePreview(this);\n};\nEasyMDE.prototype.toggleSideBySide = function () {\n toggleSideBySide(this);\n};\nEasyMDE.prototype.toggleFullScreen = function () {\n toggleFullScreen(this);\n};\n\nEasyMDE.prototype.isPreviewActive = function () {\n var cm = this.codemirror;\n var wrapper = cm.getWrapperElement();\n var preview = wrapper.lastChild;\n\n return preview.classList.contains('editor-preview-active');\n};\n\nEasyMDE.prototype.isSideBySideActive = function () {\n var cm = this.codemirror;\n var wrapper = cm.getWrapperElement();\n var preview = wrapper.nextSibling;\n\n return preview.classList.contains('editor-preview-active-side');\n};\n\nEasyMDE.prototype.isFullscreenActive = function () {\n var cm = this.codemirror;\n\n return cm.getOption('fullScreen');\n};\n\nEasyMDE.prototype.getState = function () {\n var cm = this.codemirror;\n\n return getState(cm);\n};\n\nEasyMDE.prototype.toTextArea = function () {\n var cm = this.codemirror;\n var wrapper = cm.getWrapperElement();\n var easyMDEContainer = wrapper.parentNode;\n\n if (easyMDEContainer) {\n if (this.gui.toolbar) {\n easyMDEContainer.removeChild(this.gui.toolbar);\n }\n if (this.gui.statusbar) {\n easyMDEContainer.removeChild(this.gui.statusbar);\n }\n if (this.gui.sideBySide) {\n easyMDEContainer.removeChild(this.gui.sideBySide);\n }\n }\n\n // Unwrap easyMDEcontainer before codemirror toTextArea() call\n easyMDEContainer.parentNode.insertBefore(wrapper, easyMDEContainer);\n easyMDEContainer.remove();\n\n cm.toTextArea();\n\n if (this.autosaveTimeoutId) {\n clearTimeout(this.autosaveTimeoutId);\n this.autosaveTimeoutId = undefined;\n this.clearAutosavedValue();\n }\n};\n\nmodule.exports = EasyMDE;\n", "(function(factory) {\r\n if (typeof define === \"function\" && define.amd) {\r\n // AMD. Register as an anonymous module.\r\n define([], factory);\r\n } else if (typeof exports === \"object\") {\r\n // Node/CommonJS\r\n module.exports = factory();\r\n } else {\r\n // Browser globals\r\n window.wNumb = factory();\r\n }\r\n})(function() {\r\n \"use strict\";\r\n\r\n var FormatOptions = [\r\n \"decimals\",\r\n \"thousand\",\r\n \"mark\",\r\n \"prefix\",\r\n \"suffix\",\r\n \"encoder\",\r\n \"decoder\",\r\n \"negativeBefore\",\r\n \"negative\",\r\n \"edit\",\r\n \"undo\"\r\n ];\r\n\r\n // General\r\n\r\n // Reverse a string\r\n function strReverse(a) {\r\n return a\r\n .split(\"\")\r\n .reverse()\r\n .join(\"\");\r\n }\r\n\r\n // Check if a string starts with a specified prefix.\r\n function strStartsWith(input, match) {\r\n return input.substring(0, match.length) === match;\r\n }\r\n\r\n // Check is a string ends in a specified suffix.\r\n function strEndsWith(input, match) {\r\n return input.slice(-1 * match.length) === match;\r\n }\r\n\r\n // Throw an error if formatting options are incompatible.\r\n function throwEqualError(F, a, b) {\r\n if ((F[a] || F[b]) && F[a] === F[b]) {\r\n throw new Error(a);\r\n }\r\n }\r\n\r\n // Check if a number is finite and not NaN\r\n function isValidNumber(input) {\r\n return typeof input === \"number\" && isFinite(input);\r\n }\r\n\r\n // Provide rounding-accurate toFixed method.\r\n // Borrowed: http://stackoverflow.com/a/21323330/775265\r\n function toFixed(value, exp) {\r\n value = value.toString().split(\"e\");\r\n value = Math.round(+(value[0] + \"e\" + (value[1] ? +value[1] + exp : exp)));\r\n value = value.toString().split(\"e\");\r\n return (+(value[0] + \"e\" + (value[1] ? +value[1] - exp : -exp))).toFixed(exp);\r\n }\r\n\r\n // Formatting\r\n\r\n // Accept a number as input, output formatted string.\r\n function formatTo(\r\n decimals,\r\n thousand,\r\n mark,\r\n prefix,\r\n suffix,\r\n encoder,\r\n decoder,\r\n negativeBefore,\r\n negative,\r\n edit,\r\n undo,\r\n input\r\n ) {\r\n var originalInput = input,\r\n inputIsNegative,\r\n inputPieces,\r\n inputBase,\r\n inputDecimals = \"\",\r\n output = \"\";\r\n\r\n // Apply user encoder to the input.\r\n // Expected outcome: number.\r\n if (encoder) {\r\n input = encoder(input);\r\n }\r\n\r\n // Stop if no valid number was provided, the number is infinite or NaN.\r\n if (!isValidNumber(input)) {\r\n return false;\r\n }\r\n\r\n // Rounding away decimals might cause a value of -0\r\n // when using very small ranges. Remove those cases.\r\n if (decimals !== false && parseFloat(input.toFixed(decimals)) === 0) {\r\n input = 0;\r\n }\r\n\r\n // Formatting is done on absolute numbers,\r\n // decorated by an optional negative symbol.\r\n if (input < 0) {\r\n inputIsNegative = true;\r\n input = Math.abs(input);\r\n }\r\n\r\n // Reduce the number of decimals to the specified option.\r\n if (decimals !== false) {\r\n input = toFixed(input, decimals);\r\n }\r\n\r\n // Transform the number into a string, so it can be split.\r\n input = input.toString();\r\n\r\n // Break the number on the decimal separator.\r\n if (input.indexOf(\".\") !== -1) {\r\n inputPieces = input.split(\".\");\r\n\r\n inputBase = inputPieces[0];\r\n\r\n if (mark) {\r\n inputDecimals = mark + inputPieces[1];\r\n }\r\n } else {\r\n // If it isn't split, the entire number will do.\r\n inputBase = input;\r\n }\r\n\r\n // Group numbers in sets of three.\r\n if (thousand) {\r\n inputBase = strReverse(inputBase).match(/.{1,3}/g);\r\n inputBase = strReverse(inputBase.join(strReverse(thousand)));\r\n }\r\n\r\n // If the number is negative, prefix with negation symbol.\r\n if (inputIsNegative && negativeBefore) {\r\n output += negativeBefore;\r\n }\r\n\r\n // Prefix the number\r\n if (prefix) {\r\n output += prefix;\r\n }\r\n\r\n // Normal negative option comes after the prefix. Defaults to '-'.\r\n if (inputIsNegative && negative) {\r\n output += negative;\r\n }\r\n\r\n // Append the actual number.\r\n output += inputBase;\r\n output += inputDecimals;\r\n\r\n // Apply the suffix.\r\n if (suffix) {\r\n output += suffix;\r\n }\r\n\r\n // Run the output through a user-specified post-formatter.\r\n if (edit) {\r\n output = edit(output, originalInput);\r\n }\r\n\r\n // All done.\r\n return output;\r\n }\r\n\r\n // Accept a sting as input, output decoded number.\r\n function formatFrom(\r\n decimals,\r\n thousand,\r\n mark,\r\n prefix,\r\n suffix,\r\n encoder,\r\n decoder,\r\n negativeBefore,\r\n negative,\r\n edit,\r\n undo,\r\n input\r\n ) {\r\n var originalInput = input,\r\n inputIsNegative,\r\n output = \"\";\r\n\r\n // User defined pre-decoder. Result must be a non empty string.\r\n if (undo) {\r\n input = undo(input);\r\n }\r\n\r\n // Test the input. Can't be empty.\r\n if (!input || typeof input !== \"string\") {\r\n return false;\r\n }\r\n\r\n // If the string starts with the negativeBefore value: remove it.\r\n // Remember is was there, the number is negative.\r\n if (negativeBefore && strStartsWith(input, negativeBefore)) {\r\n input = input.replace(negativeBefore, \"\");\r\n inputIsNegative = true;\r\n }\r\n\r\n // Repeat the same procedure for the prefix.\r\n if (prefix && strStartsWith(input, prefix)) {\r\n input = input.replace(prefix, \"\");\r\n }\r\n\r\n // And again for negative.\r\n if (negative && strStartsWith(input, negative)) {\r\n input = input.replace(negative, \"\");\r\n inputIsNegative = true;\r\n }\r\n\r\n // Remove the suffix.\r\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/slice\r\n if (suffix && strEndsWith(input, suffix)) {\r\n input = input.slice(0, -1 * suffix.length);\r\n }\r\n\r\n // Remove the thousand grouping.\r\n if (thousand) {\r\n input = input.split(thousand).join(\"\");\r\n }\r\n\r\n // Set the decimal separator back to period.\r\n if (mark) {\r\n input = input.replace(mark, \".\");\r\n }\r\n\r\n // Prepend the negative symbol.\r\n if (inputIsNegative) {\r\n output += \"-\";\r\n }\r\n\r\n // Add the number\r\n output += input;\r\n\r\n // Trim all non-numeric characters (allow '.' and '-');\r\n output = output.replace(/[^0-9\\.\\-.]/g, \"\");\r\n\r\n // The value contains no parse-able number.\r\n if (output === \"\") {\r\n return false;\r\n }\r\n\r\n // Covert to number.\r\n output = Number(output);\r\n\r\n // Run the user-specified post-decoder.\r\n if (decoder) {\r\n output = decoder(output);\r\n }\r\n\r\n // Check is the output is valid, otherwise: return false.\r\n if (!isValidNumber(output)) {\r\n return false;\r\n }\r\n\r\n return output;\r\n }\r\n\r\n // Framework\r\n\r\n // Validate formatting options\r\n function validate(inputOptions) {\r\n var i,\r\n optionName,\r\n optionValue,\r\n filteredOptions = {};\r\n\r\n if (inputOptions[\"suffix\"] === undefined) {\r\n inputOptions[\"suffix\"] = inputOptions[\"postfix\"];\r\n }\r\n\r\n for (i = 0; i < FormatOptions.length; i += 1) {\r\n optionName = FormatOptions[i];\r\n optionValue = inputOptions[optionName];\r\n\r\n if (optionValue === undefined) {\r\n // Only default if negativeBefore isn't set.\r\n if (optionName === \"negative\" && !filteredOptions.negativeBefore) {\r\n filteredOptions[optionName] = \"-\";\r\n // Don't set a default for mark when 'thousand' is set.\r\n } else if (optionName === \"mark\" && filteredOptions.thousand !== \".\") {\r\n filteredOptions[optionName] = \".\";\r\n } else {\r\n filteredOptions[optionName] = false;\r\n }\r\n\r\n // Floating points in JS are stable up to 7 decimals.\r\n } else if (optionName === \"decimals\") {\r\n if (optionValue >= 0 && optionValue < 8) {\r\n filteredOptions[optionName] = optionValue;\r\n } else {\r\n throw new Error(optionName);\r\n }\r\n\r\n // These options, when provided, must be functions.\r\n } else if (\r\n optionName === \"encoder\" ||\r\n optionName === \"decoder\" ||\r\n optionName === \"edit\" ||\r\n optionName === \"undo\"\r\n ) {\r\n if (typeof optionValue === \"function\") {\r\n filteredOptions[optionName] = optionValue;\r\n } else {\r\n throw new Error(optionName);\r\n }\r\n\r\n // Other options are strings.\r\n } else {\r\n if (typeof optionValue === \"string\") {\r\n filteredOptions[optionName] = optionValue;\r\n } else {\r\n throw new Error(optionName);\r\n }\r\n }\r\n }\r\n\r\n // Some values can't be extracted from a\r\n // string if certain combinations are present.\r\n throwEqualError(filteredOptions, \"mark\", \"thousand\");\r\n throwEqualError(filteredOptions, \"prefix\", \"negative\");\r\n throwEqualError(filteredOptions, \"prefix\", \"negativeBefore\");\r\n\r\n return filteredOptions;\r\n }\r\n\r\n // Pass all options as function arguments\r\n function passAll(options, method, input) {\r\n var i,\r\n args = [];\r\n\r\n // Add all options in order of FormatOptions\r\n for (i = 0; i < FormatOptions.length; i += 1) {\r\n args.push(options[FormatOptions[i]]);\r\n }\r\n\r\n // Append the input, then call the method, presenting all\r\n // options as arguments.\r\n args.push(input);\r\n return method.apply(\"\", args);\r\n }\r\n\r\n function wNumb(options) {\r\n if (!(this instanceof wNumb)) {\r\n return new wNumb(options);\r\n }\r\n\r\n if (typeof options !== \"object\") {\r\n return;\r\n }\r\n\r\n options = validate(options);\r\n\r\n // Call 'formatTo' with proper arguments.\r\n this.to = function(input) {\r\n return passAll(options, formatTo, input);\r\n };\r\n\r\n // Call 'formatFrom' with proper arguments.\r\n this.from = function(input) {\r\n return passAll(options, formatFrom, input);\r\n };\r\n }\r\n\r\n return wNumb;\r\n});\r\n", "/* inter-cyrillic-ext-400-normal*/\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url('./files/inter-cyrillic-ext-400-normal.woff2') format('woff2'), url('./files/inter-all-400-normal.woff') format('woff');\n unicode-range: U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;\n}\n/* inter-cyrillic-400-normal*/\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url('./files/inter-cyrillic-400-normal.woff2') format('woff2'), url('./files/inter-all-400-normal.woff') format('woff');\n unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;\n}\n/* inter-greek-ext-400-normal*/\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url('./files/inter-greek-ext-400-normal.woff2') format('woff2'), url('./files/inter-all-400-normal.woff') format('woff');\n unicode-range: U+1F00-1FFF;\n}\n/* inter-greek-400-normal*/\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url('./files/inter-greek-400-normal.woff2') format('woff2'), url('./files/inter-all-400-normal.woff') format('woff');\n unicode-range: U+0370-03FF;\n}\n/* inter-vietnamese-400-normal*/\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url('./files/inter-vietnamese-400-normal.woff2') format('woff2'), url('./files/inter-all-400-normal.woff') format('woff');\n unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB;\n}\n/* inter-latin-ext-400-normal*/\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url('./files/inter-latin-ext-400-normal.woff2') format('woff2'), url('./files/inter-all-400-normal.woff') format('woff');\n unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;\n}\n/* inter-latin-400-normal*/\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url('./files/inter-latin-400-normal.woff2') format('woff2'), url('./files/inter-all-400-normal.woff') format('woff');\n unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;\n}\n", "/* raleway-cyrillic-ext-400-normal*/\n@font-face {\n font-family: 'Raleway';\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url('./files/raleway-cyrillic-ext-400-normal.woff2') format('woff2'), url('./files/raleway-all-400-normal.woff') format('woff');\n unicode-range: U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;\n}\n/* raleway-cyrillic-400-normal*/\n@font-face {\n font-family: 'Raleway';\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url('./files/raleway-cyrillic-400-normal.woff2') format('woff2'), url('./files/raleway-all-400-normal.woff') format('woff');\n unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;\n}\n/* raleway-vietnamese-400-normal*/\n@font-face {\n font-family: 'Raleway';\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url('./files/raleway-vietnamese-400-normal.woff2') format('woff2'), url('./files/raleway-all-400-normal.woff') format('woff');\n unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB;\n}\n/* raleway-latin-ext-400-normal*/\n@font-face {\n font-family: 'Raleway';\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url('./files/raleway-latin-ext-400-normal.woff2') format('woff2'), url('./files/raleway-all-400-normal.woff') format('woff');\n unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;\n}\n/* raleway-latin-400-normal*/\n@font-face {\n font-family: 'Raleway';\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url('./files/raleway-latin-400-normal.woff2') format('woff2'), url('./files/raleway-all-400-normal.woff') format('woff');\n unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;\n}\n", "export * from \"./enums.js\";\nexport * from \"./modifiers/index.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport { popperGenerator, detectOverflow, createPopper as createPopperBase } from \"./createPopper.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper } from \"./popper.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\";", "export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];", "export default function getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}", "export default function getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}", "import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };", "import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};", "import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n return placement.split('-')[0];\n}", "export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;", "export default function getUAString() {\n var uaData = navigator.userAgentData;\n\n if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n return uaData.brands.map(function (item) {\n return item.brand + \"/\" + item.version;\n }).join(' ');\n }\n\n return navigator.userAgent;\n}", "import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}", "import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n\n var clientRect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (includeScale && isHTMLElement(element)) {\n scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n }\n\n var _ref = isElement(element) ? getWindow(element) : window,\n visualViewport = _ref.visualViewport;\n\n var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n var width = clientRect.width / scaleX;\n var height = clientRect.height / scaleY;\n return {\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x,\n x: x,\n y: y\n };\n}", "import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}", "import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}", "import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}", "import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}", "import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}", "import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}", "import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = /firefox/i.test(getUAString());\n var isIE = /Trident/i.test(getUAString());\n\n if (isIE && isHTMLElement(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = getComputedStyle(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = getParentNode(element);\n\n if (isShadowRoot(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}", "export default function getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}", "import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n var v = within(min, value, max);\n return v > max ? max : v;\n}", "export default function getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}", "import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n return Object.assign({}, getFreshSideObject(), paddingObject);\n}", "export default function expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}", "import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};", "export default function getVariation(placement) {\n return placement.split('-')[1];\n}", "import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n var x = _ref.x,\n y = _ref.y;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: round(x * dpr) / dpr || 0,\n y: round(y * dpr) / dpr || 0\n };\n}\n\nexport function mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets,\n isFixed = _ref2.isFixed;\n var _offsets$x = offsets.x,\n x = _offsets$x === void 0 ? 0 : _offsets$x,\n _offsets$y = offsets.y,\n y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref3.x;\n y = _ref3.y;\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n\n if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === top || (placement === left || placement === right) && variation === end) {\n sideY = bottom;\n var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left || (placement === top || placement === bottom) && variation === end) {\n sideX = right;\n var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n x: x,\n y: y\n }, getWindow(popper)) : {\n x: x,\n y: y\n };\n\n x = _ref4.x;\n y = _ref4.y;\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n var state = _ref5.state,\n options = _ref5.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n variation: getVariation(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration,\n isFixed: state.options.strategy === 'fixed'\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};", "import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n};", "var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}", "var hash = {\n start: 'end',\n end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}", "import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}", "import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If <html> has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on <html>\n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}", "import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n var layoutViewport = isLayoutViewport();\n\n if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}", "import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}", "import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}", "import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}", "import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}", "export default function rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}", "import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}", "import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}", "import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$strategy = _options.strategy,\n strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n var referenceClientRect = getBoundingClientRect(state.elements.reference);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}", "import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements;\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}", "import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases \u2013 research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};", "import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n};", "import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};", "import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};", "export default function getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}", "import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n mainAxis: tetherOffsetValue,\n altAxis: tetherOffsetValue\n } : Object.assign({\n mainAxis: 0,\n altAxis: 0\n }, tetherOffsetValue);\n var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var _offsetModifierState$;\n\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = offset + overflow[mainSide];\n var max = offset - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = offset + maxOffset - offsetModifierValue;\n var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _offsetModifierState$2;\n\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _len = altAxis === 'y' ? 'height' : 'width';\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};", "export default function getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}", "import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}", "import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = round(rect.width) / element.offsetWidth || 1;\n var scaleY = round(rect.height) / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}", "import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nexport default function orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}", "export default function debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}", "export default function mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}", "import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nexport function popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n });\n runModifierEffects();\n return instance.update();\n },\n // Sync update \u2013 it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update \u2013 it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref) {\n var name = _ref.name,\n _ref$options = _ref.options,\n options = _ref$options === void 0 ? {} : _ref$options,\n effect = _ref.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };", "import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };", "import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";", "/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map()\n\nexport default {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map())\n }\n\n const instanceMap = elementMap.get(element)\n\n // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)\n return\n }\n\n instanceMap.set(key, instance)\n },\n\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null\n }\n\n return null\n },\n\n remove(element, key) {\n if (!elementMap.has(element)) {\n return\n }\n\n const instanceMap = elementMap.get(element)\n\n instanceMap.delete(key)\n\n // free up element references if there are no instances left for an element\n if (instanceMap.size === 0) {\n elementMap.delete(element)\n }\n }\n}\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1_000_000\nconst MILLISECONDS_MULTIPLIER = 1000\nconst TRANSITION_END = 'transitionend'\n\n/**\n * Properly escape IDs selectors to handle weird IDs\n * @param {string} selector\n * @returns {string}\n */\nconst parseSelector = selector => {\n if (selector && window.CSS && window.CSS.escape) {\n // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n selector = selector.replace(/#([^\\s\"#']+)/g, (match, id) => `#${CSS.escape(id)}`)\n }\n\n return selector\n}\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = object => {\n if (object === null || object === undefined) {\n return `${object}`\n }\n\n return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\n/**\n * Public Util API\n */\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID)\n } while (document.getElementById(prefix))\n\n return prefix\n}\n\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let { transitionDuration, transitionDelay } = window.getComputedStyle(element)\n\n const floatTransitionDuration = Number.parseFloat(transitionDuration)\n const floatTransitionDelay = Number.parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n}\n\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END))\n}\n\nconst isElement = object => {\n if (!object || typeof object !== 'object') {\n return false\n }\n\n if (typeof object.jquery !== 'undefined') {\n object = object[0]\n }\n\n return typeof object.nodeType !== 'undefined'\n}\n\nconst getElement = object => {\n // it's a jQuery object or a node element\n if (isElement(object)) {\n return object.jquery ? object[0] : object\n }\n\n if (typeof object === 'string' && object.length > 0) {\n return document.querySelector(parseSelector(object))\n }\n\n return null\n}\n\nconst isVisible = element => {\n if (!isElement(element) || element.getClientRects().length === 0) {\n return false\n }\n\n const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'\n // Handle `details` element as its content may falsie appear visible when it is closed\n const closedDetails = element.closest('details:not([open])')\n\n if (!closedDetails) {\n return elementIsVisible\n }\n\n if (closedDetails !== element) {\n const summary = element.closest('summary')\n if (summary && summary.parentNode !== closedDetails) {\n return false\n }\n\n if (summary === null) {\n return false\n }\n }\n\n return elementIsVisible\n}\n\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true\n }\n\n if (element.classList.contains('disabled')) {\n return true\n }\n\n if (typeof element.disabled !== 'undefined') {\n return element.disabled\n }\n\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'\n}\n\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return findShadowRoot(element.parentNode)\n}\n\nconst noop = () => {}\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n element.offsetHeight // eslint-disable-line no-unused-expressions\n}\n\nconst getjQuery = () => {\n if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return window.jQuery\n }\n\n return null\n}\n\nconst DOMContentLoadedCallbacks = []\n\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n // add listener on the first call when the document is in loading state\n if (!DOMContentLoadedCallbacks.length) {\n document.addEventListener('DOMContentLoaded', () => {\n for (const callback of DOMContentLoadedCallbacks) {\n callback()\n }\n })\n }\n\n DOMContentLoadedCallbacks.push(callback)\n } else {\n callback()\n }\n}\n\nconst isRTL = () => document.documentElement.dir === 'rtl'\n\nconst defineJQueryPlugin = plugin => {\n onDOMContentLoaded(() => {\n const $ = getjQuery()\n /* istanbul ignore if */\n if ($) {\n const name = plugin.NAME\n const JQUERY_NO_CONFLICT = $.fn[name]\n $.fn[name] = plugin.jQueryInterface\n $.fn[name].Constructor = plugin\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT\n return plugin.jQueryInterface\n }\n }\n })\n}\n\nconst execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue\n}\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n if (!waitForTransition) {\n execute(callback)\n return\n }\n\n const durationPadding = 5\n const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding\n\n let called = false\n\n const handler = ({ target }) => {\n if (target !== transitionElement) {\n return\n }\n\n called = true\n transitionElement.removeEventListener(TRANSITION_END, handler)\n execute(callback)\n }\n\n transitionElement.addEventListener(TRANSITION_END, handler)\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(transitionElement)\n }\n }, emulatedDuration)\n}\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list The list of elements\n * @param activeElement The active element\n * @param shouldGetNext Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n const listLength = list.length\n let index = list.indexOf(activeElement)\n\n // if the element does not exist in the list return an element\n // depending on the direction and if cycle is allowed\n if (index === -1) {\n return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0]\n }\n\n index += shouldGetNext ? 1 : -1\n\n if (isCycleAllowed) {\n index = (index + listLength) % listLength\n }\n\n return list[Math.max(0, Math.min(index, listLength - 1))]\n}\n\nexport {\n defineJQueryPlugin,\n execute,\n executeAfterTransition,\n findShadowRoot,\n getElement,\n getjQuery,\n getNextActiveElement,\n getTransitionDurationFromElement,\n getUID,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop,\n onDOMContentLoaded,\n parseSelector,\n reflow,\n triggerTransitionEnd,\n toType\n}\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index.js'\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/\nconst stripNameRegex = /\\..*/\nconst stripUidRegex = /::\\d+$/\nconst eventRegistry = {} // Events storage\nlet uidEvent = 1\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n}\n\nconst nativeEvents = new Set([\n 'click',\n 'dblclick',\n 'mouseup',\n 'mousedown',\n 'contextmenu',\n 'mousewheel',\n 'DOMMouseScroll',\n 'mouseover',\n 'mouseout',\n 'mousemove',\n 'selectstart',\n 'selectend',\n 'keydown',\n 'keypress',\n 'keyup',\n 'orientationchange',\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel',\n 'pointerdown',\n 'pointermove',\n 'pointerup',\n 'pointerleave',\n 'pointercancel',\n 'gesturestart',\n 'gesturechange',\n 'gestureend',\n 'focus',\n 'blur',\n 'change',\n 'reset',\n 'select',\n 'submit',\n 'focusin',\n 'focusout',\n 'load',\n 'unload',\n 'beforeunload',\n 'resize',\n 'move',\n 'DOMContentLoaded',\n 'readystatechange',\n 'error',\n 'abort',\n 'scroll'\n])\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++\n}\n\nfunction getElementEvents(element) {\n const uid = makeEventUid(element)\n\n element.uidEvent = uid\n eventRegistry[uid] = eventRegistry[uid] || {}\n\n return eventRegistry[uid]\n}\n\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n hydrateObj(event, { delegateTarget: element })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn)\n }\n\n return fn.apply(element, [event])\n }\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector)\n\n for (let { target } = event; target && target !== this; target = target.parentNode) {\n for (const domElement of domElements) {\n if (domElement !== target) {\n continue\n }\n\n hydrateObj(event, { delegateTarget: target })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, selector, fn)\n }\n\n return fn.apply(target, [event])\n }\n }\n }\n}\n\nfunction findHandler(events, callable, delegationSelector = null) {\n return Object.values(events)\n .find(event => event.callable === callable && event.delegationSelector === delegationSelector)\n}\n\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n const isDelegated = typeof handler === 'string'\n // TODO: tooltip passes `false` instead of selector, so we need to check\n const callable = isDelegated ? delegationFunction : (handler || delegationFunction)\n let typeEvent = getTypeEvent(originalTypeEvent)\n\n if (!nativeEvents.has(typeEvent)) {\n typeEvent = originalTypeEvent\n }\n\n return [isDelegated, callable, typeEvent]\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n\n // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n if (originalTypeEvent in customEvents) {\n const wrapFunction = fn => {\n return function (event) {\n if (!event.relatedTarget || (event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget))) {\n return fn.call(this, event)\n }\n }\n }\n\n callable = wrapFunction(callable)\n }\n\n const events = getElementEvents(element)\n const handlers = events[typeEvent] || (events[typeEvent] = {})\n const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null)\n\n if (previousFunction) {\n previousFunction.oneOff = previousFunction.oneOff && oneOff\n\n return\n }\n\n const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''))\n const fn = isDelegated ?\n bootstrapDelegationHandler(element, handler, callable) :\n bootstrapHandler(element, callable)\n\n fn.delegationSelector = isDelegated ? handler : null\n fn.callable = callable\n fn.oneOff = oneOff\n fn.uidEvent = uid\n handlers[uid] = fn\n\n element.addEventListener(typeEvent, fn, isDelegated)\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector)\n\n if (!fn) {\n return\n }\n\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector))\n delete events[typeEvent][fn.uidEvent]\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {}\n\n for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n if (handlerKey.includes(namespace)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n}\n\nfunction getTypeEvent(event) {\n // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n event = event.replace(stripNameRegex, '')\n return customEvents[event] || event\n}\n\nconst EventHandler = {\n on(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, false)\n },\n\n one(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, true)\n },\n\n off(element, originalTypeEvent, handler, delegationFunction) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n const inNamespace = typeEvent !== originalTypeEvent\n const events = getElementEvents(element)\n const storeElementEvent = events[typeEvent] || {}\n const isNamespace = originalTypeEvent.startsWith('.')\n\n if (typeof callable !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!Object.keys(storeElementEvent).length) {\n return\n }\n\n removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null)\n return\n }\n\n if (isNamespace) {\n for (const elementEvent of Object.keys(events)) {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1))\n }\n }\n\n for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n const handlerKey = keyHandlers.replace(stripUidRegex, '')\n\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n },\n\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null\n }\n\n const $ = getjQuery()\n const typeEvent = getTypeEvent(event)\n const inNamespace = event !== typeEvent\n\n let jQueryEvent = null\n let bubbles = true\n let nativeDispatch = true\n let defaultPrevented = false\n\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args)\n\n $(element).trigger(jQueryEvent)\n bubbles = !jQueryEvent.isPropagationStopped()\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped()\n defaultPrevented = jQueryEvent.isDefaultPrevented()\n }\n\n const evt = hydrateObj(new Event(event, { bubbles, cancelable: true }), args)\n\n if (defaultPrevented) {\n evt.preventDefault()\n }\n\n if (nativeDispatch) {\n element.dispatchEvent(evt)\n }\n\n if (evt.defaultPrevented && jQueryEvent) {\n jQueryEvent.preventDefault()\n }\n\n return evt\n }\n}\n\nfunction hydrateObj(obj, meta = {}) {\n for (const [key, value] of Object.entries(meta)) {\n try {\n obj[key] = value\n } catch {\n Object.defineProperty(obj, key, {\n configurable: true,\n get() {\n return value\n }\n })\n }\n }\n\n return obj\n}\n\nexport default EventHandler\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n if (value === 'true') {\n return true\n }\n\n if (value === 'false') {\n return false\n }\n\n if (value === Number(value).toString()) {\n return Number(value)\n }\n\n if (value === '' || value === 'null') {\n return null\n }\n\n if (typeof value !== 'string') {\n return value\n }\n\n try {\n return JSON.parse(decodeURIComponent(value))\n } catch {\n return value\n }\n}\n\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`)\n}\n\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value)\n },\n\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`)\n },\n\n getDataAttributes(element) {\n if (!element) {\n return {}\n }\n\n const attributes = {}\n const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'))\n\n for (const key of bsKeys) {\n let pureKey = key.replace(/^bs/, '')\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length)\n attributes[pureKey] = normalizeData(element.dataset[key])\n }\n\n return attributes\n },\n\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`))\n }\n}\n\nexport default Manipulator\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Manipulator from '../dom/manipulator.js'\nimport { isElement, toType } from './index.js'\n\n/**\n * Class definition\n */\n\nclass Config {\n // Getters\n static get Default() {\n return {}\n }\n\n static get DefaultType() {\n return {}\n }\n\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!')\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n return config\n }\n\n _mergeConfigObj(config, element) {\n const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {} // try to parse\n\n return {\n ...this.constructor.Default,\n ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n ...(typeof config === 'object' ? config : {})\n }\n }\n\n _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n for (const [property, expectedTypes] of Object.entries(configTypes)) {\n const value = config[property]\n const valueType = isElement(value) ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(\n `${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n )\n }\n }\n }\n}\n\nexport default Config\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data.js'\nimport EventHandler from './dom/event-handler.js'\nimport Config from './util/config.js'\nimport { executeAfterTransition, getElement } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.3'\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n constructor(element, config) {\n super()\n\n element = getElement(element)\n if (!element) {\n return\n }\n\n this._element = element\n this._config = this._getConfig(config)\n\n Data.set(this._element, this.constructor.DATA_KEY, this)\n }\n\n // Public\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY)\n EventHandler.off(this._element, this.constructor.EVENT_KEY)\n\n for (const propertyName of Object.getOwnPropertyNames(this)) {\n this[propertyName] = null\n }\n }\n\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated)\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config, this._element)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n // Static\n static getInstance(element) {\n return Data.get(getElement(element), this.DATA_KEY)\n }\n\n static getOrCreateInstance(element, config = {}) {\n return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n }\n\n static get VERSION() {\n return VERSION\n }\n\n static get DATA_KEY() {\n return `bs.${this.NAME}`\n }\n\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`\n }\n\n static eventName(name) {\n return `${name}${this.EVENT_KEY}`\n }\n}\n\nexport default BaseComponent\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isDisabled, isVisible, parseSelector } from '../util/index.js'\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target')\n\n if (!selector || selector === '#') {\n let hrefAttribute = element.getAttribute('href')\n\n // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n if (!hrefAttribute || (!hrefAttribute.includes('#') && !hrefAttribute.startsWith('.'))) {\n return null\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n hrefAttribute = `#${hrefAttribute.split('#')[1]}`\n }\n\n selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null\n }\n\n return selector ? selector.split(',').map(sel => parseSelector(sel)).join(',') : null\n}\n\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector))\n },\n\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector)\n },\n\n children(element, selector) {\n return [].concat(...element.children).filter(child => child.matches(selector))\n },\n\n parents(element, selector) {\n const parents = []\n let ancestor = element.parentNode.closest(selector)\n\n while (ancestor) {\n parents.push(ancestor)\n ancestor = ancestor.parentNode.closest(selector)\n }\n\n return parents\n },\n\n prev(element, selector) {\n let previous = element.previousElementSibling\n\n while (previous) {\n if (previous.matches(selector)) {\n return [previous]\n }\n\n previous = previous.previousElementSibling\n }\n\n return []\n },\n // TODO: this is now unused; remove later along with prev()\n next(element, selector) {\n let next = element.nextElementSibling\n\n while (next) {\n if (next.matches(selector)) {\n return [next]\n }\n\n next = next.nextElementSibling\n }\n\n return []\n },\n\n focusableChildren(element) {\n const focusables = [\n 'a',\n 'button',\n 'input',\n 'textarea',\n 'select',\n 'details',\n '[tabindex]',\n '[contenteditable=\"true\"]'\n ].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',')\n\n return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el))\n },\n\n getSelectorFromElement(element) {\n const selector = getSelector(element)\n\n if (selector) {\n return SelectorEngine.findOne(selector) ? selector : null\n }\n\n return null\n },\n\n getElementFromSelector(element) {\n const selector = getSelector(element)\n\n return selector ? SelectorEngine.findOne(selector) : null\n },\n\n getMultipleElementsFromSelector(element) {\n const selector = getSelector(element)\n\n return selector ? SelectorEngine.find(selector) : []\n }\n}\n\nexport default SelectorEngine\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport { isDisabled } from './index.js'\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n const clickEvent = `click.dismiss${component.EVENT_KEY}`\n const name = component.NAME\n\n EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`)\n const instance = component.getOrCreateInstance(target)\n\n // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n instance[method]()\n })\n}\n\nexport {\n enableDismissTrigger\n}\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'alert'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE)\n\n if (closeEvent.defaultPrevented) {\n return\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n const isAnimated = this._element.classList.contains(CLASS_NAME_FADE)\n this._queueCallback(() => this._destroyElement(), this._element, isAnimated)\n }\n\n // Private\n _destroyElement() {\n this._element.remove()\n EventHandler.trigger(this._element, EVENT_CLOSED)\n this.dispose()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Alert.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close')\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert)\n\nexport default Alert\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'button'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"button\"]'\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE))\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Button.getOrCreateInstance(this)\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {\n event.preventDefault()\n\n const button = event.target.closest(SELECTOR_DATA_TOGGLE)\n const data = Button.getOrCreateInstance(button)\n\n data.toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button)\n\nexport default Button\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport Config from './config.js'\nimport { execute } from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'swipe'\nconst EVENT_KEY = '.bs.swipe'\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst POINTER_TYPE_TOUCH = 'touch'\nconst POINTER_TYPE_PEN = 'pen'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n endCallback: null,\n leftCallback: null,\n rightCallback: null\n}\n\nconst DefaultType = {\n endCallback: '(function|null)',\n leftCallback: '(function|null)',\n rightCallback: '(function|null)'\n}\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n constructor(element, config) {\n super()\n this._element = element\n\n if (!element || !Swipe.isSupported()) {\n return\n }\n\n this._config = this._getConfig(config)\n this._deltaX = 0\n this._supportPointerEvents = Boolean(window.PointerEvent)\n this._initEvents()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n dispose() {\n EventHandler.off(this._element, EVENT_KEY)\n }\n\n // Private\n _start(event) {\n if (!this._supportPointerEvents) {\n this._deltaX = event.touches[0].clientX\n\n return\n }\n\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX\n }\n }\n\n _end(event) {\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX - this._deltaX\n }\n\n this._handleSwipe()\n execute(this._config.endCallback)\n }\n\n _move(event) {\n this._deltaX = event.touches && event.touches.length > 1 ?\n 0 :\n event.touches[0].clientX - this._deltaX\n }\n\n _handleSwipe() {\n const absDeltaX = Math.abs(this._deltaX)\n\n if (absDeltaX <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltaX / this._deltaX\n\n this._deltaX = 0\n\n if (!direction) {\n return\n }\n\n execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback)\n }\n\n _initEvents() {\n if (this._supportPointerEvents) {\n EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event))\n EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event))\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n } else {\n EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event))\n EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event))\n EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event))\n }\n }\n\n _eventIsPointerPenTouch(event) {\n return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)\n }\n\n // Static\n static isSupported() {\n return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n }\n}\n\nexport default Swipe\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n defineJQueryPlugin,\n getNextActiveElement,\n isRTL,\n isVisible,\n reflow,\n triggerTransitionEnd\n} from './util/index.js'\nimport Swipe from './util/swipe.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'carousel'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next'\nconst ORDER_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_END = 'carousel-item-end'\nconst CLASS_NAME_START = 'carousel-item-start'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]'\n\nconst KEY_TO_DIRECTION = {\n [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n}\n\nconst Default = {\n interval: 5000,\n keyboard: true,\n pause: 'hover',\n ride: false,\n touch: true,\n wrap: true\n}\n\nconst DefaultType = {\n interval: '(number|boolean)', // TODO:v6 remove boolean support\n keyboard: 'boolean',\n pause: '(string|boolean)',\n ride: '(boolean|string)',\n touch: 'boolean',\n wrap: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._interval = null\n this._activeElement = null\n this._isSliding = false\n this.touchTimeout = null\n this._swipeHelper = null\n\n this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element)\n this._addEventListeners()\n\n if (this._config.ride === CLASS_NAME_CAROUSEL) {\n this.cycle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n next() {\n this._slide(ORDER_NEXT)\n }\n\n nextWhenVisible() {\n // FIXME TODO use `document.visibilityState`\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && isVisible(this._element)) {\n this.next()\n }\n }\n\n prev() {\n this._slide(ORDER_PREV)\n }\n\n pause() {\n if (this._isSliding) {\n triggerTransitionEnd(this._element)\n }\n\n this._clearInterval()\n }\n\n cycle() {\n this._clearInterval()\n this._updateInterval()\n\n this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval)\n }\n\n _maybeEnableCycle() {\n if (!this._config.ride) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.cycle())\n return\n }\n\n this.cycle()\n }\n\n to(index) {\n const items = this._getItems()\n if (index > items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.to(index))\n return\n }\n\n const activeIndex = this._getItemIndex(this._getActive())\n if (activeIndex === index) {\n return\n }\n\n const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV\n\n this._slide(order, items[index])\n }\n\n dispose() {\n if (this._swipeHelper) {\n this._swipeHelper.dispose()\n }\n\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n config.defaultInterval = config.interval\n return config\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n EventHandler.on(this._element, EVENT_MOUSEENTER, () => this.pause())\n EventHandler.on(this._element, EVENT_MOUSELEAVE, () => this._maybeEnableCycle())\n }\n\n if (this._config.touch && Swipe.isSupported()) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault())\n }\n\n const endCallBack = () => {\n if (this._config.pause !== 'hover') {\n return\n }\n\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n\n this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n\n const swipeConfig = {\n leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n endCallback: endCallBack\n }\n\n this._swipeHelper = new Swipe(this._element, swipeConfig)\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n const direction = KEY_TO_DIRECTION[event.key]\n if (direction) {\n event.preventDefault()\n this._slide(this._directionToOrder(direction))\n }\n }\n\n _getItemIndex(element) {\n return this._getItems().indexOf(element)\n }\n\n _setActiveIndicatorElement(index) {\n if (!this._indicatorsElement) {\n return\n }\n\n const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement)\n\n activeIndicator.classList.remove(CLASS_NAME_ACTIVE)\n activeIndicator.removeAttribute('aria-current')\n\n const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement)\n\n if (newActiveIndicator) {\n newActiveIndicator.classList.add(CLASS_NAME_ACTIVE)\n newActiveIndicator.setAttribute('aria-current', 'true')\n }\n }\n\n _updateInterval() {\n const element = this._activeElement || this._getActive()\n\n if (!element) {\n return\n }\n\n const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10)\n\n this._config.interval = elementInterval || this._config.defaultInterval\n }\n\n _slide(order, element = null) {\n if (this._isSliding) {\n return\n }\n\n const activeElement = this._getActive()\n const isNext = order === ORDER_NEXT\n const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap)\n\n if (nextElement === activeElement) {\n return\n }\n\n const nextElementIndex = this._getItemIndex(nextElement)\n\n const triggerEvent = eventName => {\n return EventHandler.trigger(this._element, eventName, {\n relatedTarget: nextElement,\n direction: this._orderToDirection(order),\n from: this._getItemIndex(activeElement),\n to: nextElementIndex\n })\n }\n\n const slideEvent = triggerEvent(EVENT_SLIDE)\n\n if (slideEvent.defaultPrevented) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n // TODO: change tests that use empty divs to avoid this check\n return\n }\n\n const isCycling = Boolean(this._interval)\n this.pause()\n\n this._isSliding = true\n\n this._setActiveIndicatorElement(nextElementIndex)\n this._activeElement = nextElement\n\n const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END\n const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV\n\n nextElement.classList.add(orderClassName)\n\n reflow(nextElement)\n\n activeElement.classList.add(directionalClassName)\n nextElement.classList.add(directionalClassName)\n\n const completeCallBack = () => {\n nextElement.classList.remove(directionalClassName, orderClassName)\n nextElement.classList.add(CLASS_NAME_ACTIVE)\n\n activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName)\n\n this._isSliding = false\n\n triggerEvent(EVENT_SLID)\n }\n\n this._queueCallback(completeCallBack, activeElement, this._isAnimated())\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_SLIDE)\n }\n\n _getActive() {\n return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n }\n\n _getItems() {\n return SelectorEngine.find(SELECTOR_ITEM, this._element)\n }\n\n _clearInterval() {\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n }\n\n _directionToOrder(direction) {\n if (isRTL()) {\n return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT\n }\n\n return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV\n }\n\n _orderToDirection(order) {\n if (isRTL()) {\n return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT\n }\n\n return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Carousel.getOrCreateInstance(this, config)\n\n if (typeof config === 'number') {\n data.to(config)\n return\n }\n\n if (typeof config === 'string') {\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n event.preventDefault()\n\n const carousel = Carousel.getOrCreateInstance(target)\n const slideIndex = this.getAttribute('data-bs-slide-to')\n\n if (slideIndex) {\n carousel.to(slideIndex)\n carousel._maybeEnableCycle()\n return\n }\n\n if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n carousel.next()\n carousel._maybeEnableCycle()\n return\n }\n\n carousel.prev()\n carousel._maybeEnableCycle()\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE)\n\n for (const carousel of carousels) {\n Carousel.getOrCreateInstance(carousel)\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel)\n\nexport default Carousel\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n defineJQueryPlugin,\n getElement,\n reflow\n} from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'collapse'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal'\n\nconst WIDTH = 'width'\nconst HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"collapse\"]'\n\nconst Default = {\n parent: null,\n toggle: true\n}\n\nconst DefaultType = {\n parent: '(null|element)',\n toggle: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isTransitioning = false\n this._triggerArray = []\n\n const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n\n for (const elem of toggleList) {\n const selector = SelectorEngine.getSelectorFromElement(elem)\n const filterElement = SelectorEngine.find(selector)\n .filter(foundElement => foundElement === this._element)\n\n if (selector !== null && filterElement.length) {\n this._triggerArray.push(elem)\n }\n }\n\n this._initializeChildren()\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._triggerArray, this._isShown())\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n if (this._isShown()) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning || this._isShown()) {\n return\n }\n\n let activeChildren = []\n\n // find active children\n if (this._config.parent) {\n activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES)\n .filter(element => element !== this._element)\n .map(element => Collapse.getOrCreateInstance(element, { toggle: false }))\n }\n\n if (activeChildren.length && activeChildren[0]._isTransitioning) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n if (startEvent.defaultPrevented) {\n return\n }\n\n for (const activeInstance of activeChildren) {\n activeInstance.hide()\n }\n\n const dimension = this._getDimension()\n\n this._element.classList.remove(CLASS_NAME_COLLAPSE)\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n\n this._element.style[dimension] = 0\n\n this._addAriaAndCollapsedClass(this._triggerArray, true)\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n this._element.style[dimension] = ''\n\n EventHandler.trigger(this._element, EVENT_SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n\n this._queueCallback(complete, this._element, true)\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning || !this._isShown()) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n if (startEvent.defaultPrevented) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n for (const trigger of this._triggerArray) {\n const element = SelectorEngine.getElementFromSelector(trigger)\n\n if (element && !this._isShown(element)) {\n this._addAriaAndCollapsedClass([trigger], false)\n }\n }\n\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.style[dimension] = ''\n\n this._queueCallback(complete, this._element, true)\n }\n\n _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW)\n }\n\n // Private\n _configAfterMerge(config) {\n config.toggle = Boolean(config.toggle) // Coerce string values\n config.parent = getElement(config.parent)\n return config\n }\n\n _getDimension() {\n return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT\n }\n\n _initializeChildren() {\n if (!this._config.parent) {\n return\n }\n\n const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE)\n\n for (const element of children) {\n const selected = SelectorEngine.getElementFromSelector(element)\n\n if (selected) {\n this._addAriaAndCollapsedClass([element], this._isShown(selected))\n }\n }\n }\n\n _getFirstLevelChildren(selector) {\n const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent)\n // remove children if greater depth\n return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element))\n }\n\n _addAriaAndCollapsedClass(triggerArray, isOpen) {\n if (!triggerArray.length) {\n return\n }\n\n for (const element of triggerArray) {\n element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen)\n element.setAttribute('aria-expanded', isOpen)\n }\n }\n\n // Static\n static jQueryInterface(config) {\n const _config = {}\n if (typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n return this.each(function () {\n const data = Collapse.getOrCreateInstance(this, _config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n if (event.target.tagName === 'A' || (event.delegateTarget && event.delegateTarget.tagName === 'A')) {\n event.preventDefault()\n }\n\n for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {\n Collapse.getOrCreateInstance(element, { toggle: false }).toggle()\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse)\n\nexport default Collapse\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n defineJQueryPlugin,\n execute,\n getElement,\n getNextActiveElement,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop\n} from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'dropdown'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ESCAPE_KEY = 'Escape'\nconst TAB_KEY = 'Tab'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\nconst RIGHT_MOUSE_BUTTON = 2 // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPEND = 'dropend'\nconst CLASS_NAME_DROPSTART = 'dropstart'\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center'\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)'\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE}.${CLASS_NAME_SHOW}`\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR = '.navbar'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start'\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end'\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'\nconst PLACEMENT_TOPCENTER = 'top'\nconst PLACEMENT_BOTTOMCENTER = 'bottom'\n\nconst Default = {\n autoClose: true,\n boundary: 'clippingParents',\n display: 'dynamic',\n offset: [0, 2],\n popperConfig: null,\n reference: 'toggle'\n}\n\nconst DefaultType = {\n autoClose: '(boolean|string)',\n boundary: '(string|element)',\n display: 'string',\n offset: '(array|string|function)',\n popperConfig: '(null|object|function)',\n reference: '(string|element|object)'\n}\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._popper = null\n this._parent = this._element.parentNode // dropdown wrapper\n // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.prev(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.findOne(SELECTOR_MENU, this._parent)\n this._inNavbar = this._detectNavbar()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n return this._isShown() ? this.hide() : this.show()\n }\n\n show() {\n if (isDisabled(this._element) || this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._createPopper()\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n this._menu.classList.add(CLASS_NAME_SHOW)\n this._element.classList.add(CLASS_NAME_SHOW)\n EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget)\n }\n\n hide() {\n if (isDisabled(this._element) || !this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n this._completeHide(relatedTarget)\n }\n\n dispose() {\n if (this._popper) {\n this._popper.destroy()\n }\n\n super.dispose()\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Private\n _completeHide(relatedTarget) {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n this._menu.classList.remove(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOW)\n this._element.setAttribute('aria-expanded', 'false')\n Manipulator.removeDataAttribute(this._menu, 'popper')\n EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget)\n }\n\n _getConfig(config) {\n config = super._getConfig(config)\n\n if (typeof config.reference === 'object' && !isElement(config.reference) &&\n typeof config.reference.getBoundingClientRect !== 'function'\n ) {\n // Popper virtual elements require a getBoundingClientRect method\n throw new TypeError(`${NAME.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`)\n }\n\n return config\n }\n\n _createPopper() {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = this._parent\n } else if (isElement(this._config.reference)) {\n referenceElement = getElement(this._config.reference)\n } else if (typeof this._config.reference === 'object') {\n referenceElement = this._config.reference\n }\n\n const popperConfig = this._getPopperConfig()\n this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig)\n }\n\n _isShown() {\n return this._menu.classList.contains(CLASS_NAME_SHOW)\n }\n\n _getPlacement() {\n const parentDropdown = this._parent\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n return PLACEMENT_RIGHT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n return PLACEMENT_LEFT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n return PLACEMENT_TOPCENTER\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n return PLACEMENT_BOTTOMCENTER\n }\n\n // We need to trim the value because custom properties can also include spaces\n const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP\n }\n\n return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM\n }\n\n _detectNavbar() {\n return this._element.closest(SELECTOR_NAVBAR) !== null\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const defaultBsPopperConfig = {\n placement: this._getPlacement(),\n modifiers: [{\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }]\n }\n\n // Disable Popper if we have a static display or Dropdown is in Navbar\n if (this._inNavbar || this._config.display === 'static') {\n Manipulator.setDataAttribute(this._menu, 'popper', 'static') // TODO: v6 remove\n defaultBsPopperConfig.modifiers = [{\n name: 'applyStyles',\n enabled: false\n }]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n }\n }\n\n _selectMenuItem({ key, target }) {\n const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element))\n\n if (!items.length) {\n return\n }\n\n // if target isn't included in items (e.g. when expanding the dropdown)\n // allow cycling to get the last item in case key equals ARROW_UP_KEY\n getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Dropdown.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n\n static clearMenus(event) {\n if (event.button === RIGHT_MOUSE_BUTTON || (event.type === 'keyup' && event.key !== TAB_KEY)) {\n return\n }\n\n const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN)\n\n for (const toggle of openToggles) {\n const context = Dropdown.getInstance(toggle)\n if (!context || context._config.autoClose === false) {\n continue\n }\n\n const composedPath = event.composedPath()\n const isMenuTarget = composedPath.includes(context._menu)\n if (\n composedPath.includes(context._element) ||\n (context._config.autoClose === 'inside' && !isMenuTarget) ||\n (context._config.autoClose === 'outside' && isMenuTarget)\n ) {\n continue\n }\n\n // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n if (context._menu.contains(event.target) && ((event.type === 'keyup' && event.key === TAB_KEY) || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n continue\n }\n\n const relatedTarget = { relatedTarget: context._element }\n\n if (event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n context._completeHide(relatedTarget)\n }\n }\n\n static dataApiKeydownHandler(event) {\n // If not an UP | DOWN | ESCAPE key => not a dropdown command\n // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n const isInput = /input|textarea/i.test(event.target.tagName)\n const isEscapeEvent = event.key === ESCAPE_KEY\n const isUpOrDownEvent = [ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)\n\n if (!isUpOrDownEvent && !isEscapeEvent) {\n return\n }\n\n if (isInput && !isEscapeEvent) {\n return\n }\n\n event.preventDefault()\n\n // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ?\n this :\n (SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.next(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.findOne(SELECTOR_DATA_TOGGLE, event.delegateTarget.parentNode))\n\n const instance = Dropdown.getOrCreateInstance(getToggleButton)\n\n if (isUpOrDownEvent) {\n event.stopPropagation()\n instance.show()\n instance._selectMenuItem(event)\n return\n }\n\n if (instance._isShown()) { // else is escape and we check if it is shown\n event.stopPropagation()\n instance.hide()\n getToggleButton.focus()\n }\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n Dropdown.getOrCreateInstance(this).toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown)\n\nexport default Dropdown\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport Config from './config.js'\nimport {\n execute, executeAfterTransition, getElement, reflow\n} from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'backdrop'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME}`\n\nconst Default = {\n className: 'modal-backdrop',\n clickCallback: null,\n isAnimated: false,\n isVisible: true, // if false, we use the backdrop helper without adding any element to the dom\n rootElement: 'body' // give the choice to place backdrop under different elements\n}\n\nconst DefaultType = {\n className: 'string',\n clickCallback: '(function|null)',\n isAnimated: 'boolean',\n isVisible: 'boolean',\n rootElement: '(element|string)'\n}\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isAppended = false\n this._element = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n show(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._append()\n\n const element = this._getElement()\n if (this._config.isAnimated) {\n reflow(element)\n }\n\n element.classList.add(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n execute(callback)\n })\n }\n\n hide(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._getElement().classList.remove(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n this.dispose()\n execute(callback)\n })\n }\n\n dispose() {\n if (!this._isAppended) {\n return\n }\n\n EventHandler.off(this._element, EVENT_MOUSEDOWN)\n\n this._element.remove()\n this._isAppended = false\n }\n\n // Private\n _getElement() {\n if (!this._element) {\n const backdrop = document.createElement('div')\n backdrop.className = this._config.className\n if (this._config.isAnimated) {\n backdrop.classList.add(CLASS_NAME_FADE)\n }\n\n this._element = backdrop\n }\n\n return this._element\n }\n\n _configAfterMerge(config) {\n // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n config.rootElement = getElement(config.rootElement)\n return config\n }\n\n _append() {\n if (this._isAppended) {\n return\n }\n\n const element = this._getElement()\n this._config.rootElement.append(element)\n\n EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n execute(this._config.clickCallback)\n })\n\n this._isAppended = true\n }\n\n _emulateAnimation(callback) {\n executeAfterTransition(callback, this._getElement(), this._config.isAnimated)\n }\n}\n\nexport default Backdrop\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Config from './config.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'focustrap'\nconst DATA_KEY = 'bs.focustrap'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY}`\n\nconst TAB_KEY = 'Tab'\nconst TAB_NAV_FORWARD = 'forward'\nconst TAB_NAV_BACKWARD = 'backward'\n\nconst Default = {\n autofocus: true,\n trapElement: null // The element to trap focus inside of\n}\n\nconst DefaultType = {\n autofocus: 'boolean',\n trapElement: 'element'\n}\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isActive = false\n this._lastTabNavDirection = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n activate() {\n if (this._isActive) {\n return\n }\n\n if (this._config.autofocus) {\n this._config.trapElement.focus()\n }\n\n EventHandler.off(document, EVENT_KEY) // guard against infinite focus loop\n EventHandler.on(document, EVENT_FOCUSIN, event => this._handleFocusin(event))\n EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event))\n\n this._isActive = true\n }\n\n deactivate() {\n if (!this._isActive) {\n return\n }\n\n this._isActive = false\n EventHandler.off(document, EVENT_KEY)\n }\n\n // Private\n _handleFocusin(event) {\n const { trapElement } = this._config\n\n if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n return\n }\n\n const elements = SelectorEngine.focusableChildren(trapElement)\n\n if (elements.length === 0) {\n trapElement.focus()\n } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n elements[elements.length - 1].focus()\n } else {\n elements[0].focus()\n }\n }\n\n _handleKeydown(event) {\n if (event.key !== TAB_KEY) {\n return\n }\n\n this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD\n }\n}\n\nexport default FocusTrap\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Manipulator from '../dom/manipulator.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport { isElement } from './index.js'\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\nconst PROPERTY_PADDING = 'padding-right'\nconst PROPERTY_MARGIN = 'margin-right'\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n constructor() {\n this._element = document.body\n }\n\n // Public\n getWidth() {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = document.documentElement.clientWidth\n return Math.abs(window.innerWidth - documentWidth)\n }\n\n hide() {\n const width = this.getWidth()\n this._disableOverFlow()\n // give padding to element to balance the hidden scrollbar width\n this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width)\n }\n\n reset() {\n this._resetElementAttributes(this._element, 'overflow')\n this._resetElementAttributes(this._element, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN)\n }\n\n isOverflowing() {\n return this.getWidth() > 0\n }\n\n // Private\n _disableOverFlow() {\n this._saveInitialAttribute(this._element, 'overflow')\n this._element.style.overflow = 'hidden'\n }\n\n _setElementAttributes(selector, styleProperty, callback) {\n const scrollbarWidth = this.getWidth()\n const manipulationCallBack = element => {\n if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n return\n }\n\n this._saveInitialAttribute(element, styleProperty)\n const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty)\n element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _saveInitialAttribute(element, styleProperty) {\n const actualValue = element.style.getPropertyValue(styleProperty)\n if (actualValue) {\n Manipulator.setDataAttribute(element, styleProperty, actualValue)\n }\n }\n\n _resetElementAttributes(selector, styleProperty) {\n const manipulationCallBack = element => {\n const value = Manipulator.getDataAttribute(element, styleProperty)\n // We only want to remove the property if the value is `null`; the value can also be zero\n if (value === null) {\n element.style.removeProperty(styleProperty)\n return\n }\n\n Manipulator.removeDataAttribute(element, styleProperty)\n element.style.setProperty(styleProperty, value)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _applyManipulationCallback(selector, callBack) {\n if (isElement(selector)) {\n callBack(selector)\n return\n }\n\n for (const sel of SelectorEngine.find(selector, this._element)) {\n callBack(sel)\n }\n }\n}\n\nexport default ScrollBarHelper\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport Backdrop from './util/backdrop.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport FocusTrap from './util/focustrap.js'\nimport {\n defineJQueryPlugin, isRTL, isVisible, reflow\n} from './util/index.js'\nimport ScrollBarHelper from './util/scrollbar.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'modal'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst ESCAPE_KEY = 'Escape'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst OPEN_SELECTOR = '.modal.show'\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"modal\"]'\n\nconst Default = {\n backdrop: true,\n focus: true,\n keyboard: true\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n focus: 'boolean',\n keyboard: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element)\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._isShown = false\n this._isTransitioning = false\n this._scrollBar = new ScrollBarHelper()\n\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n relatedTarget\n })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._isTransitioning = true\n\n this._scrollBar.hide()\n\n document.body.classList.add(CLASS_NAME_OPEN)\n\n this._adjustDialog()\n\n this._backdrop.show(() => this._showElement(relatedTarget))\n }\n\n hide() {\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._isShown = false\n this._isTransitioning = true\n this._focustrap.deactivate()\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n this._queueCallback(() => this._hideModal(), this._element, this._isAnimated())\n }\n\n dispose() {\n EventHandler.off(window, EVENT_KEY)\n EventHandler.off(this._dialog, EVENT_KEY)\n\n this._backdrop.dispose()\n this._focustrap.deactivate()\n\n super.dispose()\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n _initializeBackDrop() {\n return new Backdrop({\n isVisible: Boolean(this._config.backdrop), // 'static' option will be translated to true, and booleans will keep their value,\n isAnimated: this._isAnimated()\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _showElement(relatedTarget) {\n // try to append dynamic modal\n if (!document.body.contains(this._element)) {\n document.body.append(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.scrollTop = 0\n\n const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog)\n if (modalBody) {\n modalBody.scrollTop = 0\n }\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_SHOW)\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._focustrap.activate()\n }\n\n this._isTransitioning = false\n EventHandler.trigger(this._element, EVENT_SHOWN, {\n relatedTarget\n })\n }\n\n this._queueCallback(transitionComplete, this._dialog, this._isAnimated())\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (this._config.keyboard) {\n this.hide()\n return\n }\n\n this._triggerBackdropTransition()\n })\n\n EventHandler.on(window, EVENT_RESIZE, () => {\n if (this._isShown && !this._isTransitioning) {\n this._adjustDialog()\n }\n })\n\n EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n if (this._element !== event.target || this._element !== event2.target) {\n return\n }\n\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition()\n return\n }\n\n if (this._config.backdrop) {\n this.hide()\n }\n })\n })\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._isTransitioning = false\n\n this._backdrop.hide(() => {\n document.body.classList.remove(CLASS_NAME_OPEN)\n this._resetAdjustments()\n this._scrollBar.reset()\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n })\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_FADE)\n }\n\n _triggerBackdropTransition() {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const initialOverflowY = this._element.style.overflowY\n // return if the following background transition hasn't yet completed\n if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n return\n }\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden'\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.style.overflowY = initialOverflowY\n }, this._dialog)\n }, this._dialog)\n\n this._element.focus()\n }\n\n /**\n * The following methods are used to handle overflowing modals\n */\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const scrollbarWidth = this._scrollBar.getWidth()\n const isBodyOverflowing = scrollbarWidth > 0\n\n if (isBodyOverflowing && !isModalOverflowing) {\n const property = isRTL() ? 'paddingLeft' : 'paddingRight'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n\n if (!isBodyOverflowing && isModalOverflowing) {\n const property = isRTL() ? 'paddingRight' : 'paddingLeft'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n // Static\n static jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n const data = Modal.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](relatedTarget)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n EventHandler.one(target, EVENT_SHOW, showEvent => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n if (isVisible(this)) {\n this.focus()\n }\n })\n })\n\n // avoid conflict when clicking modal toggler while another one is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen) {\n Modal.getInstance(alreadyOpen).hide()\n }\n\n const data = Modal.getOrCreateInstance(target)\n\n data.toggle(this)\n})\n\nenableDismissTrigger(Modal)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal)\n\nexport default Modal\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport Backdrop from './util/backdrop.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport FocusTrap from './util/focustrap.js'\nimport {\n defineJQueryPlugin,\n isDisabled,\n isVisible\n} from './util/index.js'\nimport ScrollBarHelper from './util/scrollbar.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'offcanvas'\nconst DATA_KEY = 'bs.offcanvas'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst ESCAPE_KEY = 'Escape'\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\nconst CLASS_NAME_HIDING = 'hiding'\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop'\nconst OPEN_SELECTOR = '.offcanvas.show'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"offcanvas\"]'\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n scroll: false\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n scroll: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isShown = false\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, { relatedTarget })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._backdrop.show()\n\n if (!this._config.scroll) {\n new ScrollBarHelper().hide()\n }\n\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.classList.add(CLASS_NAME_SHOWING)\n\n const completeCallBack = () => {\n if (!this._config.scroll || this._config.backdrop) {\n this._focustrap.activate()\n }\n\n this._element.classList.add(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOWING)\n EventHandler.trigger(this._element, EVENT_SHOWN, { relatedTarget })\n }\n\n this._queueCallback(completeCallBack, this._element, true)\n }\n\n hide() {\n if (!this._isShown) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._focustrap.deactivate()\n this._element.blur()\n this._isShown = false\n this._element.classList.add(CLASS_NAME_HIDING)\n this._backdrop.hide()\n\n const completeCallback = () => {\n this._element.classList.remove(CLASS_NAME_SHOW, CLASS_NAME_HIDING)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n\n if (!this._config.scroll) {\n new ScrollBarHelper().reset()\n }\n\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._queueCallback(completeCallback, this._element, true)\n }\n\n dispose() {\n this._backdrop.dispose()\n this._focustrap.deactivate()\n super.dispose()\n }\n\n // Private\n _initializeBackDrop() {\n const clickCallback = () => {\n if (this._config.backdrop === 'static') {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n return\n }\n\n this.hide()\n }\n\n // 'static' option will be translated to true, and booleans will keep their value\n const isVisible = Boolean(this._config.backdrop)\n\n return new Backdrop({\n className: CLASS_NAME_BACKDROP,\n isVisible,\n isAnimated: true,\n rootElement: this._element.parentNode,\n clickCallback: isVisible ? clickCallback : null\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (this._config.keyboard) {\n this.hide()\n return\n }\n\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n })\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Offcanvas.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n // focus on trigger when it is closed\n if (isVisible(this)) {\n this.focus()\n }\n })\n\n // avoid conflict when clicking a toggler of an offcanvas, while another is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen && alreadyOpen !== target) {\n Offcanvas.getInstance(alreadyOpen).hide()\n }\n\n const data = Offcanvas.getOrCreateInstance(target)\n data.toggle(this)\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n Offcanvas.getOrCreateInstance(selector).show()\n }\n})\n\nEventHandler.on(window, EVENT_RESIZE, () => {\n for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n if (getComputedStyle(element).position !== 'fixed') {\n Offcanvas.getOrCreateInstance(element).hide()\n }\n }\n})\n\nenableDismissTrigger(Offcanvas)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas)\n\nexport default Offcanvas\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n// js-docs-start allow-list\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\nexport const DefaultAllowlist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n dd: [],\n div: [],\n dl: [],\n dt: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n// js-docs-end allow-list\n\nconst uriAttributes = new Set([\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n])\n\n/**\n * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation\n * contexts.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38\n */\n// eslint-disable-next-line unicorn/better-regex\nconst SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i\n\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n const attributeName = attribute.nodeName.toLowerCase()\n\n if (allowedAttributeList.includes(attributeName)) {\n if (uriAttributes.has(attributeName)) {\n return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue))\n }\n\n return true\n }\n\n // Check if a regular expression validates the attribute.\n return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp)\n .some(regex => regex.test(attributeName))\n}\n\nexport function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n if (!unsafeHtml.length) {\n return unsafeHtml\n }\n\n if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n return sanitizeFunction(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'))\n\n for (const element of elements) {\n const elementName = element.nodeName.toLowerCase()\n\n if (!Object.keys(allowList).includes(elementName)) {\n element.remove()\n continue\n }\n\n const attributeList = [].concat(...element.attributes)\n const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || [])\n\n for (const attribute of attributeList) {\n if (!allowedAttribute(attribute, allowedAttributes)) {\n element.removeAttribute(attribute.nodeName)\n }\n }\n }\n\n return createdDocument.body.innerHTML\n}\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Config from './config.js'\nimport { DefaultAllowlist, sanitizeHtml } from './sanitizer.js'\nimport { execute, getElement, isElement } from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'TemplateFactory'\n\nconst Default = {\n allowList: DefaultAllowlist,\n content: {}, // { selector : text , selector2 : text2 , }\n extraClass: '',\n html: false,\n sanitize: true,\n sanitizeFn: null,\n template: '<div></div>'\n}\n\nconst DefaultType = {\n allowList: 'object',\n content: 'object',\n extraClass: '(string|function)',\n html: 'boolean',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n template: 'string'\n}\n\nconst DefaultContentType = {\n entry: '(string|element|function|null)',\n selector: '(string|element)'\n}\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n getContent() {\n return Object.values(this._config.content)\n .map(config => this._resolvePossibleFunction(config))\n .filter(Boolean)\n }\n\n hasContent() {\n return this.getContent().length > 0\n }\n\n changeContent(content) {\n this._checkContent(content)\n this._config.content = { ...this._config.content, ...content }\n return this\n }\n\n toHtml() {\n const templateWrapper = document.createElement('div')\n templateWrapper.innerHTML = this._maybeSanitize(this._config.template)\n\n for (const [selector, text] of Object.entries(this._config.content)) {\n this._setContent(templateWrapper, text, selector)\n }\n\n const template = templateWrapper.children[0]\n const extraClass = this._resolvePossibleFunction(this._config.extraClass)\n\n if (extraClass) {\n template.classList.add(...extraClass.split(' '))\n }\n\n return template\n }\n\n // Private\n _typeCheckConfig(config) {\n super._typeCheckConfig(config)\n this._checkContent(config.content)\n }\n\n _checkContent(arg) {\n for (const [selector, content] of Object.entries(arg)) {\n super._typeCheckConfig({ selector, entry: content }, DefaultContentType)\n }\n }\n\n _setContent(template, content, selector) {\n const templateElement = SelectorEngine.findOne(selector, template)\n\n if (!templateElement) {\n return\n }\n\n content = this._resolvePossibleFunction(content)\n\n if (!content) {\n templateElement.remove()\n return\n }\n\n if (isElement(content)) {\n this._putElementInTemplate(getElement(content), templateElement)\n return\n }\n\n if (this._config.html) {\n templateElement.innerHTML = this._maybeSanitize(content)\n return\n }\n\n templateElement.textContent = content\n }\n\n _maybeSanitize(arg) {\n return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg\n }\n\n _resolvePossibleFunction(arg) {\n return execute(arg, [this])\n }\n\n _putElementInTemplate(element, templateElement) {\n if (this._config.html) {\n templateElement.innerHTML = ''\n templateElement.append(element)\n return\n }\n\n templateElement.textContent = element.textContent\n }\n}\n\nexport default TemplateFactory\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport {\n defineJQueryPlugin, execute, findShadowRoot, getElement, getUID, isRTL, noop\n} from './util/index.js'\nimport { DefaultAllowlist } from './util/sanitizer.js'\nimport TemplateFactory from './util/template-factory.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'tooltip'\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn'])\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_MODAL = 'modal'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`\n\nconst EVENT_MODAL_HIDE = 'hide.bs.modal'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\nconst EVENT_HIDE = 'hide'\nconst EVENT_HIDDEN = 'hidden'\nconst EVENT_SHOW = 'show'\nconst EVENT_SHOWN = 'shown'\nconst EVENT_INSERTED = 'inserted'\nconst EVENT_CLICK = 'click'\nconst EVENT_FOCUSIN = 'focusin'\nconst EVENT_FOCUSOUT = 'focusout'\nconst EVENT_MOUSEENTER = 'mouseenter'\nconst EVENT_MOUSELEAVE = 'mouseleave'\n\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: isRTL() ? 'left' : 'right',\n BOTTOM: 'bottom',\n LEFT: isRTL() ? 'right' : 'left'\n}\n\nconst Default = {\n allowList: DefaultAllowlist,\n animation: true,\n boundary: 'clippingParents',\n container: false,\n customClass: '',\n delay: 0,\n fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n html: false,\n offset: [0, 6],\n placement: 'top',\n popperConfig: null,\n sanitize: true,\n sanitizeFn: null,\n selector: false,\n template: '<div class=\"tooltip\" role=\"tooltip\">' +\n '<div class=\"tooltip-arrow\"></div>' +\n '<div class=\"tooltip-inner\"></div>' +\n '</div>',\n title: '',\n trigger: 'hover focus'\n}\n\nconst DefaultType = {\n allowList: 'object',\n animation: 'boolean',\n boundary: '(string|element)',\n container: '(string|element|boolean)',\n customClass: '(string|function)',\n delay: '(number|object)',\n fallbackPlacements: 'array',\n html: 'boolean',\n offset: '(array|string|function)',\n placement: '(string|function)',\n popperConfig: '(null|object|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n selector: '(string|boolean)',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string'\n}\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)')\n }\n\n super(element, config)\n\n // Private\n this._isEnabled = true\n this._timeout = 0\n this._isHovered = null\n this._activeTrigger = {}\n this._popper = null\n this._templateFactory = null\n this._newContent = null\n\n // Protected\n this.tip = null\n\n this._setListeners()\n\n if (!this._config.selector) {\n this._fixTitle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle() {\n if (!this._isEnabled) {\n return\n }\n\n this._activeTrigger.click = !this._activeTrigger.click\n if (this._isShown()) {\n this._leave()\n return\n }\n\n this._enter()\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n\n if (this._element.getAttribute('data-bs-original-title')) {\n this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'))\n }\n\n this._disposePopper()\n super.dispose()\n }\n\n show() {\n if (this._element.style.display === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n if (!(this._isWithContent() && this._isEnabled)) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW))\n const shadowRoot = findShadowRoot(this._element)\n const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element)\n\n if (showEvent.defaultPrevented || !isInTheDom) {\n return\n }\n\n // TODO: v6 remove this or make it optional\n this._disposePopper()\n\n const tip = this._getTipElement()\n\n this._element.setAttribute('aria-describedby', tip.getAttribute('id'))\n\n const { container } = this._config\n\n if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n container.append(tip)\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED))\n }\n\n this._popper = this._createPopper(tip)\n\n tip.classList.add(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n const complete = () => {\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN))\n\n if (this._isHovered === false) {\n this._leave()\n }\n\n this._isHovered = false\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n hide() {\n if (!this._isShown()) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE))\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const tip = this._getTipElement()\n tip.classList.remove(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false\n this._activeTrigger[TRIGGER_FOCUS] = false\n this._activeTrigger[TRIGGER_HOVER] = false\n this._isHovered = null // it is a trick to support manual triggering\n\n const complete = () => {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n if (!this._isHovered) {\n this._disposePopper()\n }\n\n this._element.removeAttribute('aria-describedby')\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN))\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n update() {\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Protected\n _isWithContent() {\n return Boolean(this._getTitle())\n }\n\n _getTipElement() {\n if (!this.tip) {\n this.tip = this._createTipElement(this._newContent || this._getContentForTemplate())\n }\n\n return this.tip\n }\n\n _createTipElement(content) {\n const tip = this._getTemplateFactory(content).toHtml()\n\n // TODO: remove this check in v6\n if (!tip) {\n return null\n }\n\n tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW)\n // TODO: v6 the following can be achieved with CSS only\n tip.classList.add(`bs-${this.constructor.NAME}-auto`)\n\n const tipId = getUID(this.constructor.NAME).toString()\n\n tip.setAttribute('id', tipId)\n\n if (this._isAnimated()) {\n tip.classList.add(CLASS_NAME_FADE)\n }\n\n return tip\n }\n\n setContent(content) {\n this._newContent = content\n if (this._isShown()) {\n this._disposePopper()\n this.show()\n }\n }\n\n _getTemplateFactory(content) {\n if (this._templateFactory) {\n this._templateFactory.changeContent(content)\n } else {\n this._templateFactory = new TemplateFactory({\n ...this._config,\n // the `content` var has to be after `this._config`\n // to override config.content in case of popover\n content,\n extraClass: this._resolvePossibleFunction(this._config.customClass)\n })\n }\n\n return this._templateFactory\n }\n\n _getContentForTemplate() {\n return {\n [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n }\n }\n\n _getTitle() {\n return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title')\n }\n\n // Private\n _initializeOnDelegatedTarget(event) {\n return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig())\n }\n\n _isAnimated() {\n return this._config.animation || (this.tip && this.tip.classList.contains(CLASS_NAME_FADE))\n }\n\n _isShown() {\n return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW)\n }\n\n _createPopper(tip) {\n const placement = execute(this._config.placement, [this, tip, this._element])\n const attachment = AttachmentMap[placement.toUpperCase()]\n return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment))\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _resolvePossibleFunction(arg) {\n return execute(arg, [this._element])\n }\n\n _getPopperConfig(attachment) {\n const defaultBsPopperConfig = {\n placement: attachment,\n modifiers: [\n {\n name: 'flip',\n options: {\n fallbackPlacements: this._config.fallbackPlacements\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n },\n {\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'arrow',\n options: {\n element: `.${this.constructor.NAME}-arrow`\n }\n },\n {\n name: 'preSetPlacement',\n enabled: true,\n phase: 'beforeMain',\n fn: data => {\n // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n this._getTipElement().setAttribute('data-popper-placement', data.state.placement)\n }\n }\n ]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n }\n }\n\n _setListeners() {\n const triggers = this._config.trigger.split(' ')\n\n for (const trigger of triggers) {\n if (trigger === 'click') {\n EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK), this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context.toggle()\n })\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSEENTER) :\n this.constructor.eventName(EVENT_FOCUSIN)\n const eventOut = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSELEAVE) :\n this.constructor.eventName(EVENT_FOCUSOUT)\n\n EventHandler.on(this._element, eventIn, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true\n context._enter()\n })\n EventHandler.on(this._element, eventOut, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] =\n context._element.contains(event.relatedTarget)\n\n context._leave()\n })\n }\n }\n\n this._hideModalHandler = () => {\n if (this._element) {\n this.hide()\n }\n }\n\n EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n }\n\n _fixTitle() {\n const title = this._element.getAttribute('title')\n\n if (!title) {\n return\n }\n\n if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n this._element.setAttribute('aria-label', title)\n }\n\n this._element.setAttribute('data-bs-original-title', title) // DO NOT USE IT. Is only for backwards compatibility\n this._element.removeAttribute('title')\n }\n\n _enter() {\n if (this._isShown() || this._isHovered) {\n this._isHovered = true\n return\n }\n\n this._isHovered = true\n\n this._setTimeout(() => {\n if (this._isHovered) {\n this.show()\n }\n }, this._config.delay.show)\n }\n\n _leave() {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n this._isHovered = false\n\n this._setTimeout(() => {\n if (!this._isHovered) {\n this.hide()\n }\n }, this._config.delay.hide)\n }\n\n _setTimeout(handler, timeout) {\n clearTimeout(this._timeout)\n this._timeout = setTimeout(handler, timeout)\n }\n\n _isWithActiveTrigger() {\n return Object.values(this._activeTrigger).includes(true)\n }\n\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element)\n\n for (const dataAttribute of Object.keys(dataAttributes)) {\n if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n delete dataAttributes[dataAttribute]\n }\n }\n\n config = {\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n }\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n config.container = config.container === false ? document.body : getElement(config.container)\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n for (const [key, value] of Object.entries(this._config)) {\n if (this.constructor.Default[key] !== value) {\n config[key] = value\n }\n }\n\n config.selector = false\n config.trigger = 'manual'\n\n // In the future can be replaced with:\n // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n // `Object.fromEntries(keysWithDifferentValues)`\n return config\n }\n\n _disposePopper() {\n if (this._popper) {\n this._popper.destroy()\n this._popper = null\n }\n\n if (this.tip) {\n this.tip.remove()\n this.tip = null\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tooltip.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip)\n\nexport default Tooltip\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Tooltip from './tooltip.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'popover'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Default = {\n ...Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template: '<div class=\"popover\" role=\"tooltip\">' +\n '<div class=\"popover-arrow\"></div>' +\n '<h3 class=\"popover-header\"></h3>' +\n '<div class=\"popover-body\"></div>' +\n '</div>',\n trigger: 'click'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(null|string|element|function)'\n}\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Overrides\n _isWithContent() {\n return this._getTitle() || this._getContent()\n }\n\n // Private\n _getContentForTemplate() {\n return {\n [SELECTOR_TITLE]: this._getTitle(),\n [SELECTOR_CONTENT]: this._getContent()\n }\n }\n\n _getContent() {\n return this._resolvePossibleFunction(this._config.content)\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Popover.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover)\n\nexport default Popover\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n defineJQueryPlugin, getElement, isDisabled, isVisible\n} from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'scrollspy'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]'\nconst SELECTOR_TARGET_LINKS = '[href]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst Default = {\n offset: null, // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: '0px 0px -25%',\n smoothScroll: false,\n target: null,\n threshold: [0.1, 0.5, 1]\n}\n\nconst DefaultType = {\n offset: '(number|null)', // TODO v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: 'string',\n smoothScroll: 'boolean',\n target: 'element',\n threshold: 'array'\n}\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n // this._element is the observablesContainer and config.target the menu links wrapper\n this._targetLinks = new Map()\n this._observableSections = new Map()\n this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element\n this._activeTarget = null\n this._observer = null\n this._previousScrollData = {\n visibleEntryTop: 0,\n parentScrollTop: 0\n }\n this.refresh() // initialize\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n refresh() {\n this._initializeTargetsAndObservables()\n this._maybeEnableSmoothScroll()\n\n if (this._observer) {\n this._observer.disconnect()\n } else {\n this._observer = this._getNewObserver()\n }\n\n for (const section of this._observableSections.values()) {\n this._observer.observe(section)\n }\n }\n\n dispose() {\n this._observer.disconnect()\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n config.target = getElement(config.target) || document.body\n\n // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin\n\n if (typeof config.threshold === 'string') {\n config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value))\n }\n\n return config\n }\n\n _maybeEnableSmoothScroll() {\n if (!this._config.smoothScroll) {\n return\n }\n\n // unregister any previous listeners\n EventHandler.off(this._config.target, EVENT_CLICK)\n\n EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n const observableSection = this._observableSections.get(event.target.hash)\n if (observableSection) {\n event.preventDefault()\n const root = this._rootElement || window\n const height = observableSection.offsetTop - this._element.offsetTop\n if (root.scrollTo) {\n root.scrollTo({ top: height, behavior: 'smooth' })\n return\n }\n\n // Chrome 60 doesn't support `scrollTo`\n root.scrollTop = height\n }\n })\n }\n\n _getNewObserver() {\n const options = {\n root: this._rootElement,\n threshold: this._config.threshold,\n rootMargin: this._config.rootMargin\n }\n\n return new IntersectionObserver(entries => this._observerCallback(entries), options)\n }\n\n // The logic of selection\n _observerCallback(entries) {\n const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`)\n const activate = entry => {\n this._previousScrollData.visibleEntryTop = entry.target.offsetTop\n this._process(targetElement(entry))\n }\n\n const parentScrollTop = (this._rootElement || document.documentElement).scrollTop\n const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop\n this._previousScrollData.parentScrollTop = parentScrollTop\n\n for (const entry of entries) {\n if (!entry.isIntersecting) {\n this._activeTarget = null\n this._clearActiveClass(targetElement(entry))\n\n continue\n }\n\n const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop\n // if we are scrolling down, pick the bigger offsetTop\n if (userScrollsDown && entryIsLowerThanPrevious) {\n activate(entry)\n // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n if (!parentScrollTop) {\n return\n }\n\n continue\n }\n\n // if we are scrolling up, pick the smallest offsetTop\n if (!userScrollsDown && !entryIsLowerThanPrevious) {\n activate(entry)\n }\n }\n }\n\n _initializeTargetsAndObservables() {\n this._targetLinks = new Map()\n this._observableSections = new Map()\n\n const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target)\n\n for (const anchor of targetLinks) {\n // ensure that the anchor has an id and is not disabled\n if (!anchor.hash || isDisabled(anchor)) {\n continue\n }\n\n const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element)\n\n // ensure that the observableSection exists & is visible\n if (isVisible(observableSection)) {\n this._targetLinks.set(decodeURI(anchor.hash), anchor)\n this._observableSections.set(anchor.hash, observableSection)\n }\n }\n }\n\n _process(target) {\n if (this._activeTarget === target) {\n return\n }\n\n this._clearActiveClass(this._config.target)\n this._activeTarget = target\n target.classList.add(CLASS_NAME_ACTIVE)\n this._activateParents(target)\n\n EventHandler.trigger(this._element, EVENT_ACTIVATE, { relatedTarget: target })\n }\n\n _activateParents(target) {\n // Activate dropdown parents\n if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, target.closest(SELECTOR_DROPDOWN))\n .classList.add(CLASS_NAME_ACTIVE)\n return\n }\n\n for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n item.classList.add(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n _clearActiveClass(parent) {\n parent.classList.remove(CLASS_NAME_ACTIVE)\n\n const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE}`, parent)\n for (const node of activeNodes) {\n node.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = ScrollSpy.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n ScrollSpy.getOrCreateInstance(spy)\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(ScrollSpy)\n\nexport default ScrollSpy\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport { defineJQueryPlugin, getNextActiveElement, isDisabled } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'tab'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}`\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\nconst HOME_KEY = 'Home'\nconst END_KEY = 'End'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_DROPDOWN = 'dropdown'\n\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\nconst SELECTOR_DROPDOWN_MENU = '.dropdown-menu'\nconst NOT_SELECTOR_DROPDOWN_TOGGLE = `:not(${SELECTOR_DROPDOWN_TOGGLE})`\n\nconst SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\"tablist\"]'\nconst SELECTOR_OUTER = '.nav-item, .list-group-item'\nconst SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role=\"tab\"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]' // TODO: could only be `tab` in v6\nconst SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`\n\nconst SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle=\"tab\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"pill\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"list\"]`\n\n/**\n * Class definition\n */\n\nclass Tab extends BaseComponent {\n constructor(element) {\n super(element)\n this._parent = this._element.closest(SELECTOR_TAB_PANEL)\n\n if (!this._parent) {\n return\n // TODO: should throw exception in v6\n // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\n }\n\n // Set up initial aria attributes\n this._setInitialAttributes(this._parent, this._getChildren())\n\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n show() { // Shows this elem and deactivate the active sibling if exists\n const innerElem = this._element\n if (this._elemIsActive(innerElem)) {\n return\n }\n\n // Search for active tab on same parent to deactivate it\n const active = this._getActiveElem()\n\n const hideEvent = active ?\n EventHandler.trigger(active, EVENT_HIDE, { relatedTarget: innerElem }) :\n null\n\n const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW, { relatedTarget: active })\n\n if (showEvent.defaultPrevented || (hideEvent && hideEvent.defaultPrevented)) {\n return\n }\n\n this._deactivate(active, innerElem)\n this._activate(innerElem, active)\n }\n\n // Private\n _activate(element, relatedElem) {\n if (!element) {\n return\n }\n\n element.classList.add(CLASS_NAME_ACTIVE)\n\n this._activate(SelectorEngine.getElementFromSelector(element)) // Search and activate/show the proper section\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.add(CLASS_NAME_SHOW)\n return\n }\n\n element.removeAttribute('tabindex')\n element.setAttribute('aria-selected', true)\n this._toggleDropDown(element, true)\n EventHandler.trigger(element, EVENT_SHOWN, {\n relatedTarget: relatedElem\n })\n }\n\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n }\n\n _deactivate(element, relatedElem) {\n if (!element) {\n return\n }\n\n element.classList.remove(CLASS_NAME_ACTIVE)\n element.blur()\n\n this._deactivate(SelectorEngine.getElementFromSelector(element)) // Search and deactivate the shown section too\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.remove(CLASS_NAME_SHOW)\n return\n }\n\n element.setAttribute('aria-selected', false)\n element.setAttribute('tabindex', '-1')\n this._toggleDropDown(element, false)\n EventHandler.trigger(element, EVENT_HIDDEN, { relatedTarget: relatedElem })\n }\n\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n }\n\n _keydown(event) {\n if (!([ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY, HOME_KEY, END_KEY].includes(event.key))) {\n return\n }\n\n event.stopPropagation()// stopPropagation/preventDefault both added to support up/down keys without scrolling the page\n event.preventDefault()\n\n const children = this._getChildren().filter(element => !isDisabled(element))\n let nextActiveElement\n\n if ([HOME_KEY, END_KEY].includes(event.key)) {\n nextActiveElement = children[event.key === HOME_KEY ? 0 : children.length - 1]\n } else {\n const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key)\n nextActiveElement = getNextActiveElement(children, event.target, isNext, true)\n }\n\n if (nextActiveElement) {\n nextActiveElement.focus({ preventScroll: true })\n Tab.getOrCreateInstance(nextActiveElement).show()\n }\n }\n\n _getChildren() { // collection of inner elements\n return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent)\n }\n\n _getActiveElem() {\n return this._getChildren().find(child => this._elemIsActive(child)) || null\n }\n\n _setInitialAttributes(parent, children) {\n this._setAttributeIfNotExists(parent, 'role', 'tablist')\n\n for (const child of children) {\n this._setInitialAttributesOnChild(child)\n }\n }\n\n _setInitialAttributesOnChild(child) {\n child = this._getInnerElement(child)\n const isActive = this._elemIsActive(child)\n const outerElem = this._getOuterElement(child)\n child.setAttribute('aria-selected', isActive)\n\n if (outerElem !== child) {\n this._setAttributeIfNotExists(outerElem, 'role', 'presentation')\n }\n\n if (!isActive) {\n child.setAttribute('tabindex', '-1')\n }\n\n this._setAttributeIfNotExists(child, 'role', 'tab')\n\n // set attributes to the related panel too\n this._setInitialAttributesOnTargetPanel(child)\n }\n\n _setInitialAttributesOnTargetPanel(child) {\n const target = SelectorEngine.getElementFromSelector(child)\n\n if (!target) {\n return\n }\n\n this._setAttributeIfNotExists(target, 'role', 'tabpanel')\n\n if (child.id) {\n this._setAttributeIfNotExists(target, 'aria-labelledby', `${child.id}`)\n }\n }\n\n _toggleDropDown(element, open) {\n const outerElem = this._getOuterElement(element)\n if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\n return\n }\n\n const toggle = (selector, className) => {\n const element = SelectorEngine.findOne(selector, outerElem)\n if (element) {\n element.classList.toggle(className, open)\n }\n }\n\n toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE)\n toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW)\n outerElem.setAttribute('aria-expanded', open)\n }\n\n _setAttributeIfNotExists(element, attribute, value) {\n if (!element.hasAttribute(attribute)) {\n element.setAttribute(attribute, value)\n }\n }\n\n _elemIsActive(elem) {\n return elem.classList.contains(CLASS_NAME_ACTIVE)\n }\n\n // Try to get the inner element (usually the .nav-link)\n _getInnerElement(elem) {\n return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem)\n }\n\n // Try to get the outer element (usually the .nav-item)\n _getOuterElement(elem) {\n return elem.closest(SELECTOR_OUTER) || elem\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tab.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n Tab.getOrCreateInstance(this).show()\n})\n\n/**\n * Initialize on focus\n */\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {\n Tab.getOrCreateInstance(element)\n }\n})\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tab)\n\nexport default Tab\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport { defineJQueryPlugin, reflow } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'toast'\nconst DATA_KEY = 'bs.toast'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_HIDE = 'hide' // @deprecated - kept here only for backwards compatibility\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\n\nconst DefaultType = {\n animation: 'boolean',\n autohide: 'boolean',\n delay: 'number'\n}\n\nconst Default = {\n animation: true,\n autohide: true,\n delay: 5000\n}\n\n/**\n * Class definition\n */\n\nclass Toast extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._timeout = null\n this._hasMouseInteraction = false\n this._hasKeyboardInteraction = false\n this._setListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n show() {\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._clearTimeout()\n\n if (this._config.animation) {\n this._element.classList.add(CLASS_NAME_FADE)\n }\n\n const complete = () => {\n this._element.classList.remove(CLASS_NAME_SHOWING)\n EventHandler.trigger(this._element, EVENT_SHOWN)\n\n this._maybeScheduleHide()\n }\n\n this._element.classList.remove(CLASS_NAME_HIDE) // @deprecated\n reflow(this._element)\n this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING)\n\n this._queueCallback(complete, this._element, this._config.animation)\n }\n\n hide() {\n if (!this.isShown()) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const complete = () => {\n this._element.classList.add(CLASS_NAME_HIDE) // @deprecated\n this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.classList.add(CLASS_NAME_SHOWING)\n this._queueCallback(complete, this._element, this._config.animation)\n }\n\n dispose() {\n this._clearTimeout()\n\n if (this.isShown()) {\n this._element.classList.remove(CLASS_NAME_SHOW)\n }\n\n super.dispose()\n }\n\n isShown() {\n return this._element.classList.contains(CLASS_NAME_SHOW)\n }\n\n // Private\n\n _maybeScheduleHide() {\n if (!this._config.autohide) {\n return\n }\n\n if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n return\n }\n\n this._timeout = setTimeout(() => {\n this.hide()\n }, this._config.delay)\n }\n\n _onInteraction(event, isInteracting) {\n switch (event.type) {\n case 'mouseover':\n case 'mouseout': {\n this._hasMouseInteraction = isInteracting\n break\n }\n\n case 'focusin':\n case 'focusout': {\n this._hasKeyboardInteraction = isInteracting\n break\n }\n\n default: {\n break\n }\n }\n\n if (isInteracting) {\n this._clearTimeout()\n return\n }\n\n const nextElement = event.relatedTarget\n if (this._element === nextElement || this._element.contains(nextElement)) {\n return\n }\n\n this._maybeScheduleHide()\n }\n\n _setListeners() {\n EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true))\n EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false))\n EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true))\n EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false))\n }\n\n _clearTimeout() {\n clearTimeout(this._timeout)\n this._timeout = null\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Toast.getOrCreateInstance(this, config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Toast)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Toast)\n\nexport default Toast\n", "// Entry point for the build script in your package.json\nimport * as bootstrap from \"bootstrap\"\n\nimport * as ActiveStorage from \"@rails/activestorage\"\n//import \"./channels\" // https://github.com/xronos-ch/xronos.rails/issues/301\n\n// hotwire (turbo+stimulus)\nimport \"@hotwired/turbo-rails\"\nimport \"./controllers\"\n\n//fonts\nrequire(\"@fontsource/inter\")\nrequire(\"@fontsource/raleway\")\n\nActiveStorage.start()\n", "/*\nTurbo 7.3.0\nCopyright \u00A9 2023 37signals LLC\n */\n(function () {\n if (window.Reflect === undefined ||\n window.customElements === undefined ||\n window.customElements.polyfillWrapFlushCallback) {\n return;\n }\n const BuiltInHTMLElement = HTMLElement;\n const wrapperForTheName = {\n HTMLElement: function HTMLElement() {\n return Reflect.construct(BuiltInHTMLElement, [], this.constructor);\n },\n };\n window.HTMLElement = wrapperForTheName[\"HTMLElement\"];\n HTMLElement.prototype = BuiltInHTMLElement.prototype;\n HTMLElement.prototype.constructor = HTMLElement;\n Object.setPrototypeOf(HTMLElement, BuiltInHTMLElement);\n})();\n\n/**\n * The MIT License (MIT)\n * \n * Copyright (c) 2019 Javan Makhmali\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n(function(prototype) {\n if (typeof prototype.requestSubmit == \"function\") return\n\n prototype.requestSubmit = function(submitter) {\n if (submitter) {\n validateSubmitter(submitter, this);\n submitter.click();\n } else {\n submitter = document.createElement(\"input\");\n submitter.type = \"submit\";\n submitter.hidden = true;\n this.appendChild(submitter);\n submitter.click();\n this.removeChild(submitter);\n }\n };\n\n function validateSubmitter(submitter, form) {\n submitter instanceof HTMLElement || raise(TypeError, \"parameter 1 is not of type 'HTMLElement'\");\n submitter.type == \"submit\" || raise(TypeError, \"The specified element is not a submit button\");\n submitter.form == form || raise(DOMException, \"The specified element is not owned by this form element\", \"NotFoundError\");\n }\n\n function raise(errorConstructor, message, name) {\n throw new errorConstructor(\"Failed to execute 'requestSubmit' on 'HTMLFormElement': \" + message + \".\", name)\n }\n})(HTMLFormElement.prototype);\n\nconst submittersByForm = new WeakMap();\nfunction findSubmitterFromClickTarget(target) {\n const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n const candidate = element ? element.closest(\"input, button\") : null;\n return (candidate === null || candidate === void 0 ? void 0 : candidate.type) == \"submit\" ? candidate : null;\n}\nfunction clickCaptured(event) {\n const submitter = findSubmitterFromClickTarget(event.target);\n if (submitter && submitter.form) {\n submittersByForm.set(submitter.form, submitter);\n }\n}\n(function () {\n if (\"submitter\" in Event.prototype)\n return;\n let prototype = window.Event.prototype;\n if (\"SubmitEvent\" in window && /Apple Computer/.test(navigator.vendor)) {\n prototype = window.SubmitEvent.prototype;\n }\n else if (\"SubmitEvent\" in window) {\n return;\n }\n addEventListener(\"click\", clickCaptured, true);\n Object.defineProperty(prototype, \"submitter\", {\n get() {\n if (this.type == \"submit\" && this.target instanceof HTMLFormElement) {\n return submittersByForm.get(this.target);\n }\n },\n });\n})();\n\nvar FrameLoadingStyle;\n(function (FrameLoadingStyle) {\n FrameLoadingStyle[\"eager\"] = \"eager\";\n FrameLoadingStyle[\"lazy\"] = \"lazy\";\n})(FrameLoadingStyle || (FrameLoadingStyle = {}));\nclass FrameElement extends HTMLElement {\n static get observedAttributes() {\n return [\"disabled\", \"complete\", \"loading\", \"src\"];\n }\n constructor() {\n super();\n this.loaded = Promise.resolve();\n this.delegate = new FrameElement.delegateConstructor(this);\n }\n connectedCallback() {\n this.delegate.connect();\n }\n disconnectedCallback() {\n this.delegate.disconnect();\n }\n reload() {\n return this.delegate.sourceURLReloaded();\n }\n attributeChangedCallback(name) {\n if (name == \"loading\") {\n this.delegate.loadingStyleChanged();\n }\n else if (name == \"complete\") {\n this.delegate.completeChanged();\n }\n else if (name == \"src\") {\n this.delegate.sourceURLChanged();\n }\n else {\n this.delegate.disabledChanged();\n }\n }\n get src() {\n return this.getAttribute(\"src\");\n }\n set src(value) {\n if (value) {\n this.setAttribute(\"src\", value);\n }\n else {\n this.removeAttribute(\"src\");\n }\n }\n get loading() {\n return frameLoadingStyleFromString(this.getAttribute(\"loading\") || \"\");\n }\n set loading(value) {\n if (value) {\n this.setAttribute(\"loading\", value);\n }\n else {\n this.removeAttribute(\"loading\");\n }\n }\n get disabled() {\n return this.hasAttribute(\"disabled\");\n }\n set disabled(value) {\n if (value) {\n this.setAttribute(\"disabled\", \"\");\n }\n else {\n this.removeAttribute(\"disabled\");\n }\n }\n get autoscroll() {\n return this.hasAttribute(\"autoscroll\");\n }\n set autoscroll(value) {\n if (value) {\n this.setAttribute(\"autoscroll\", \"\");\n }\n else {\n this.removeAttribute(\"autoscroll\");\n }\n }\n get complete() {\n return !this.delegate.isLoading;\n }\n get isActive() {\n return this.ownerDocument === document && !this.isPreview;\n }\n get isPreview() {\n var _a, _b;\n return (_b = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.documentElement) === null || _b === void 0 ? void 0 : _b.hasAttribute(\"data-turbo-preview\");\n }\n}\nfunction frameLoadingStyleFromString(style) {\n switch (style.toLowerCase()) {\n case \"lazy\":\n return FrameLoadingStyle.lazy;\n default:\n return FrameLoadingStyle.eager;\n }\n}\n\nfunction expandURL(locatable) {\n return new URL(locatable.toString(), document.baseURI);\n}\nfunction getAnchor(url) {\n let anchorMatch;\n if (url.hash) {\n return url.hash.slice(1);\n }\n else if ((anchorMatch = url.href.match(/#(.*)$/))) {\n return anchorMatch[1];\n }\n}\nfunction getAction(form, submitter) {\n const action = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formaction\")) || form.getAttribute(\"action\") || form.action;\n return expandURL(action);\n}\nfunction getExtension(url) {\n return (getLastPathComponent(url).match(/\\.[^.]*$/) || [])[0] || \"\";\n}\nfunction isHTML(url) {\n return !!getExtension(url).match(/^(?:|\\.(?:htm|html|xhtml|php))$/);\n}\nfunction isPrefixedBy(baseURL, url) {\n const prefix = getPrefix(url);\n return baseURL.href === expandURL(prefix).href || baseURL.href.startsWith(prefix);\n}\nfunction locationIsVisitable(location, rootLocation) {\n return isPrefixedBy(location, rootLocation) && isHTML(location);\n}\nfunction getRequestURL(url) {\n const anchor = getAnchor(url);\n return anchor != null ? url.href.slice(0, -(anchor.length + 1)) : url.href;\n}\nfunction toCacheKey(url) {\n return getRequestURL(url);\n}\nfunction urlsAreEqual(left, right) {\n return expandURL(left).href == expandURL(right).href;\n}\nfunction getPathComponents(url) {\n return url.pathname.split(\"/\").slice(1);\n}\nfunction getLastPathComponent(url) {\n return getPathComponents(url).slice(-1)[0];\n}\nfunction getPrefix(url) {\n return addTrailingSlash(url.origin + url.pathname);\n}\nfunction addTrailingSlash(value) {\n return value.endsWith(\"/\") ? value : value + \"/\";\n}\n\nclass FetchResponse {\n constructor(response) {\n this.response = response;\n }\n get succeeded() {\n return this.response.ok;\n }\n get failed() {\n return !this.succeeded;\n }\n get clientError() {\n return this.statusCode >= 400 && this.statusCode <= 499;\n }\n get serverError() {\n return this.statusCode >= 500 && this.statusCode <= 599;\n }\n get redirected() {\n return this.response.redirected;\n }\n get location() {\n return expandURL(this.response.url);\n }\n get isHTML() {\n return this.contentType && this.contentType.match(/^(?:text\\/([^\\s;,]+\\b)?html|application\\/xhtml\\+xml)\\b/);\n }\n get statusCode() {\n return this.response.status;\n }\n get contentType() {\n return this.header(\"Content-Type\");\n }\n get responseText() {\n return this.response.clone().text();\n }\n get responseHTML() {\n if (this.isHTML) {\n return this.response.clone().text();\n }\n else {\n return Promise.resolve(undefined);\n }\n }\n header(name) {\n return this.response.headers.get(name);\n }\n}\n\nfunction activateScriptElement(element) {\n if (element.getAttribute(\"data-turbo-eval\") == \"false\") {\n return element;\n }\n else {\n const createdScriptElement = document.createElement(\"script\");\n const cspNonce = getMetaContent(\"csp-nonce\");\n if (cspNonce) {\n createdScriptElement.nonce = cspNonce;\n }\n createdScriptElement.textContent = element.textContent;\n createdScriptElement.async = false;\n copyElementAttributes(createdScriptElement, element);\n return createdScriptElement;\n }\n}\nfunction copyElementAttributes(destinationElement, sourceElement) {\n for (const { name, value } of sourceElement.attributes) {\n destinationElement.setAttribute(name, value);\n }\n}\nfunction createDocumentFragment(html) {\n const template = document.createElement(\"template\");\n template.innerHTML = html;\n return template.content;\n}\nfunction dispatch(eventName, { target, cancelable, detail } = {}) {\n const event = new CustomEvent(eventName, {\n cancelable,\n bubbles: true,\n composed: true,\n detail,\n });\n if (target && target.isConnected) {\n target.dispatchEvent(event);\n }\n else {\n document.documentElement.dispatchEvent(event);\n }\n return event;\n}\nfunction nextAnimationFrame() {\n return new Promise((resolve) => requestAnimationFrame(() => resolve()));\n}\nfunction nextEventLoopTick() {\n return new Promise((resolve) => setTimeout(() => resolve(), 0));\n}\nfunction nextMicrotask() {\n return Promise.resolve();\n}\nfunction parseHTMLDocument(html = \"\") {\n return new DOMParser().parseFromString(html, \"text/html\");\n}\nfunction unindent(strings, ...values) {\n const lines = interpolate(strings, values).replace(/^\\n/, \"\").split(\"\\n\");\n const match = lines[0].match(/^\\s+/);\n const indent = match ? match[0].length : 0;\n return lines.map((line) => line.slice(indent)).join(\"\\n\");\n}\nfunction interpolate(strings, values) {\n return strings.reduce((result, string, i) => {\n const value = values[i] == undefined ? \"\" : values[i];\n return result + string + value;\n }, \"\");\n}\nfunction uuid() {\n return Array.from({ length: 36 })\n .map((_, i) => {\n if (i == 8 || i == 13 || i == 18 || i == 23) {\n return \"-\";\n }\n else if (i == 14) {\n return \"4\";\n }\n else if (i == 19) {\n return (Math.floor(Math.random() * 4) + 8).toString(16);\n }\n else {\n return Math.floor(Math.random() * 15).toString(16);\n }\n })\n .join(\"\");\n}\nfunction getAttribute(attributeName, ...elements) {\n for (const value of elements.map((element) => element === null || element === void 0 ? void 0 : element.getAttribute(attributeName))) {\n if (typeof value == \"string\")\n return value;\n }\n return null;\n}\nfunction hasAttribute(attributeName, ...elements) {\n return elements.some((element) => element && element.hasAttribute(attributeName));\n}\nfunction markAsBusy(...elements) {\n for (const element of elements) {\n if (element.localName == \"turbo-frame\") {\n element.setAttribute(\"busy\", \"\");\n }\n element.setAttribute(\"aria-busy\", \"true\");\n }\n}\nfunction clearBusyState(...elements) {\n for (const element of elements) {\n if (element.localName == \"turbo-frame\") {\n element.removeAttribute(\"busy\");\n }\n element.removeAttribute(\"aria-busy\");\n }\n}\nfunction waitForLoad(element, timeoutInMilliseconds = 2000) {\n return new Promise((resolve) => {\n const onComplete = () => {\n element.removeEventListener(\"error\", onComplete);\n element.removeEventListener(\"load\", onComplete);\n resolve();\n };\n element.addEventListener(\"load\", onComplete, { once: true });\n element.addEventListener(\"error\", onComplete, { once: true });\n setTimeout(resolve, timeoutInMilliseconds);\n });\n}\nfunction getHistoryMethodForAction(action) {\n switch (action) {\n case \"replace\":\n return history.replaceState;\n case \"advance\":\n case \"restore\":\n return history.pushState;\n }\n}\nfunction isAction(action) {\n return action == \"advance\" || action == \"replace\" || action == \"restore\";\n}\nfunction getVisitAction(...elements) {\n const action = getAttribute(\"data-turbo-action\", ...elements);\n return isAction(action) ? action : null;\n}\nfunction getMetaElement(name) {\n return document.querySelector(`meta[name=\"${name}\"]`);\n}\nfunction getMetaContent(name) {\n const element = getMetaElement(name);\n return element && element.content;\n}\nfunction setMetaContent(name, content) {\n let element = getMetaElement(name);\n if (!element) {\n element = document.createElement(\"meta\");\n element.setAttribute(\"name\", name);\n document.head.appendChild(element);\n }\n element.setAttribute(\"content\", content);\n return element;\n}\nfunction findClosestRecursively(element, selector) {\n var _a;\n if (element instanceof Element) {\n return (element.closest(selector) ||\n findClosestRecursively(element.assignedSlot || ((_a = element.getRootNode()) === null || _a === void 0 ? void 0 : _a.host), selector));\n }\n}\n\nvar FetchMethod;\n(function (FetchMethod) {\n FetchMethod[FetchMethod[\"get\"] = 0] = \"get\";\n FetchMethod[FetchMethod[\"post\"] = 1] = \"post\";\n FetchMethod[FetchMethod[\"put\"] = 2] = \"put\";\n FetchMethod[FetchMethod[\"patch\"] = 3] = \"patch\";\n FetchMethod[FetchMethod[\"delete\"] = 4] = \"delete\";\n})(FetchMethod || (FetchMethod = {}));\nfunction fetchMethodFromString(method) {\n switch (method.toLowerCase()) {\n case \"get\":\n return FetchMethod.get;\n case \"post\":\n return FetchMethod.post;\n case \"put\":\n return FetchMethod.put;\n case \"patch\":\n return FetchMethod.patch;\n case \"delete\":\n return FetchMethod.delete;\n }\n}\nclass FetchRequest {\n constructor(delegate, method, location, body = new URLSearchParams(), target = null) {\n this.abortController = new AbortController();\n this.resolveRequestPromise = (_value) => { };\n this.delegate = delegate;\n this.method = method;\n this.headers = this.defaultHeaders;\n this.body = body;\n this.url = location;\n this.target = target;\n }\n get location() {\n return this.url;\n }\n get params() {\n return this.url.searchParams;\n }\n get entries() {\n return this.body ? Array.from(this.body.entries()) : [];\n }\n cancel() {\n this.abortController.abort();\n }\n async perform() {\n const { fetchOptions } = this;\n this.delegate.prepareRequest(this);\n await this.allowRequestToBeIntercepted(fetchOptions);\n try {\n this.delegate.requestStarted(this);\n const response = await fetch(this.url.href, fetchOptions);\n return await this.receive(response);\n }\n catch (error) {\n if (error.name !== \"AbortError\") {\n if (this.willDelegateErrorHandling(error)) {\n this.delegate.requestErrored(this, error);\n }\n throw error;\n }\n }\n finally {\n this.delegate.requestFinished(this);\n }\n }\n async receive(response) {\n const fetchResponse = new FetchResponse(response);\n const event = dispatch(\"turbo:before-fetch-response\", {\n cancelable: true,\n detail: { fetchResponse },\n target: this.target,\n });\n if (event.defaultPrevented) {\n this.delegate.requestPreventedHandlingResponse(this, fetchResponse);\n }\n else if (fetchResponse.succeeded) {\n this.delegate.requestSucceededWithResponse(this, fetchResponse);\n }\n else {\n this.delegate.requestFailedWithResponse(this, fetchResponse);\n }\n return fetchResponse;\n }\n get fetchOptions() {\n var _a;\n return {\n method: FetchMethod[this.method].toUpperCase(),\n credentials: \"same-origin\",\n headers: this.headers,\n redirect: \"follow\",\n body: this.isSafe ? null : this.body,\n signal: this.abortSignal,\n referrer: (_a = this.delegate.referrer) === null || _a === void 0 ? void 0 : _a.href,\n };\n }\n get defaultHeaders() {\n return {\n Accept: \"text/html, application/xhtml+xml\",\n };\n }\n get isSafe() {\n return this.method === FetchMethod.get;\n }\n get abortSignal() {\n return this.abortController.signal;\n }\n acceptResponseType(mimeType) {\n this.headers[\"Accept\"] = [mimeType, this.headers[\"Accept\"]].join(\", \");\n }\n async allowRequestToBeIntercepted(fetchOptions) {\n const requestInterception = new Promise((resolve) => (this.resolveRequestPromise = resolve));\n const event = dispatch(\"turbo:before-fetch-request\", {\n cancelable: true,\n detail: {\n fetchOptions,\n url: this.url,\n resume: this.resolveRequestPromise,\n },\n target: this.target,\n });\n if (event.defaultPrevented)\n await requestInterception;\n }\n willDelegateErrorHandling(error) {\n const event = dispatch(\"turbo:fetch-request-error\", {\n target: this.target,\n cancelable: true,\n detail: { request: this, error: error },\n });\n return !event.defaultPrevented;\n }\n}\n\nclass AppearanceObserver {\n constructor(delegate, element) {\n this.started = false;\n this.intersect = (entries) => {\n const lastEntry = entries.slice(-1)[0];\n if (lastEntry === null || lastEntry === void 0 ? void 0 : lastEntry.isIntersecting) {\n this.delegate.elementAppearedInViewport(this.element);\n }\n };\n this.delegate = delegate;\n this.element = element;\n this.intersectionObserver = new IntersectionObserver(this.intersect);\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.intersectionObserver.observe(this.element);\n }\n }\n stop() {\n if (this.started) {\n this.started = false;\n this.intersectionObserver.unobserve(this.element);\n }\n }\n}\n\nclass StreamMessage {\n static wrap(message) {\n if (typeof message == \"string\") {\n return new this(createDocumentFragment(message));\n }\n else {\n return message;\n }\n }\n constructor(fragment) {\n this.fragment = importStreamElements(fragment);\n }\n}\nStreamMessage.contentType = \"text/vnd.turbo-stream.html\";\nfunction importStreamElements(fragment) {\n for (const element of fragment.querySelectorAll(\"turbo-stream\")) {\n const streamElement = document.importNode(element, true);\n for (const inertScriptElement of streamElement.templateElement.content.querySelectorAll(\"script\")) {\n inertScriptElement.replaceWith(activateScriptElement(inertScriptElement));\n }\n element.replaceWith(streamElement);\n }\n return fragment;\n}\n\nvar FormSubmissionState;\n(function (FormSubmissionState) {\n FormSubmissionState[FormSubmissionState[\"initialized\"] = 0] = \"initialized\";\n FormSubmissionState[FormSubmissionState[\"requesting\"] = 1] = \"requesting\";\n FormSubmissionState[FormSubmissionState[\"waiting\"] = 2] = \"waiting\";\n FormSubmissionState[FormSubmissionState[\"receiving\"] = 3] = \"receiving\";\n FormSubmissionState[FormSubmissionState[\"stopping\"] = 4] = \"stopping\";\n FormSubmissionState[FormSubmissionState[\"stopped\"] = 5] = \"stopped\";\n})(FormSubmissionState || (FormSubmissionState = {}));\nvar FormEnctype;\n(function (FormEnctype) {\n FormEnctype[\"urlEncoded\"] = \"application/x-www-form-urlencoded\";\n FormEnctype[\"multipart\"] = \"multipart/form-data\";\n FormEnctype[\"plain\"] = \"text/plain\";\n})(FormEnctype || (FormEnctype = {}));\nfunction formEnctypeFromString(encoding) {\n switch (encoding.toLowerCase()) {\n case FormEnctype.multipart:\n return FormEnctype.multipart;\n case FormEnctype.plain:\n return FormEnctype.plain;\n default:\n return FormEnctype.urlEncoded;\n }\n}\nclass FormSubmission {\n static confirmMethod(message, _element, _submitter) {\n return Promise.resolve(confirm(message));\n }\n constructor(delegate, formElement, submitter, mustRedirect = false) {\n this.state = FormSubmissionState.initialized;\n this.delegate = delegate;\n this.formElement = formElement;\n this.submitter = submitter;\n this.formData = buildFormData(formElement, submitter);\n this.location = expandURL(this.action);\n if (this.method == FetchMethod.get) {\n mergeFormDataEntries(this.location, [...this.body.entries()]);\n }\n this.fetchRequest = new FetchRequest(this, this.method, this.location, this.body, this.formElement);\n this.mustRedirect = mustRedirect;\n }\n get method() {\n var _a;\n const method = ((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"formmethod\")) || this.formElement.getAttribute(\"method\") || \"\";\n return fetchMethodFromString(method.toLowerCase()) || FetchMethod.get;\n }\n get action() {\n var _a;\n const formElementAction = typeof this.formElement.action === \"string\" ? this.formElement.action : null;\n if ((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.hasAttribute(\"formaction\")) {\n return this.submitter.getAttribute(\"formaction\") || \"\";\n }\n else {\n return this.formElement.getAttribute(\"action\") || formElementAction || \"\";\n }\n }\n get body() {\n if (this.enctype == FormEnctype.urlEncoded || this.method == FetchMethod.get) {\n return new URLSearchParams(this.stringFormData);\n }\n else {\n return this.formData;\n }\n }\n get enctype() {\n var _a;\n return formEnctypeFromString(((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"formenctype\")) || this.formElement.enctype);\n }\n get isSafe() {\n return this.fetchRequest.isSafe;\n }\n get stringFormData() {\n return [...this.formData].reduce((entries, [name, value]) => {\n return entries.concat(typeof value == \"string\" ? [[name, value]] : []);\n }, []);\n }\n async start() {\n const { initialized, requesting } = FormSubmissionState;\n const confirmationMessage = getAttribute(\"data-turbo-confirm\", this.submitter, this.formElement);\n if (typeof confirmationMessage === \"string\") {\n const answer = await FormSubmission.confirmMethod(confirmationMessage, this.formElement, this.submitter);\n if (!answer) {\n return;\n }\n }\n if (this.state == initialized) {\n this.state = requesting;\n return this.fetchRequest.perform();\n }\n }\n stop() {\n const { stopping, stopped } = FormSubmissionState;\n if (this.state != stopping && this.state != stopped) {\n this.state = stopping;\n this.fetchRequest.cancel();\n return true;\n }\n }\n prepareRequest(request) {\n if (!request.isSafe) {\n const token = getCookieValue(getMetaContent(\"csrf-param\")) || getMetaContent(\"csrf-token\");\n if (token) {\n request.headers[\"X-CSRF-Token\"] = token;\n }\n }\n if (this.requestAcceptsTurboStreamResponse(request)) {\n request.acceptResponseType(StreamMessage.contentType);\n }\n }\n requestStarted(_request) {\n var _a;\n this.state = FormSubmissionState.waiting;\n (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.setAttribute(\"disabled\", \"\");\n this.setSubmitsWith();\n dispatch(\"turbo:submit-start\", {\n target: this.formElement,\n detail: { formSubmission: this },\n });\n this.delegate.formSubmissionStarted(this);\n }\n requestPreventedHandlingResponse(request, response) {\n this.result = { success: response.succeeded, fetchResponse: response };\n }\n requestSucceededWithResponse(request, response) {\n if (response.clientError || response.serverError) {\n this.delegate.formSubmissionFailedWithResponse(this, response);\n }\n else if (this.requestMustRedirect(request) && responseSucceededWithoutRedirect(response)) {\n const error = new Error(\"Form responses must redirect to another location\");\n this.delegate.formSubmissionErrored(this, error);\n }\n else {\n this.state = FormSubmissionState.receiving;\n this.result = { success: true, fetchResponse: response };\n this.delegate.formSubmissionSucceededWithResponse(this, response);\n }\n }\n requestFailedWithResponse(request, response) {\n this.result = { success: false, fetchResponse: response };\n this.delegate.formSubmissionFailedWithResponse(this, response);\n }\n requestErrored(request, error) {\n this.result = { success: false, error };\n this.delegate.formSubmissionErrored(this, error);\n }\n requestFinished(_request) {\n var _a;\n this.state = FormSubmissionState.stopped;\n (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.removeAttribute(\"disabled\");\n this.resetSubmitterText();\n dispatch(\"turbo:submit-end\", {\n target: this.formElement,\n detail: Object.assign({ formSubmission: this }, this.result),\n });\n this.delegate.formSubmissionFinished(this);\n }\n setSubmitsWith() {\n if (!this.submitter || !this.submitsWith)\n return;\n if (this.submitter.matches(\"button\")) {\n this.originalSubmitText = this.submitter.innerHTML;\n this.submitter.innerHTML = this.submitsWith;\n }\n else if (this.submitter.matches(\"input\")) {\n const input = this.submitter;\n this.originalSubmitText = input.value;\n input.value = this.submitsWith;\n }\n }\n resetSubmitterText() {\n if (!this.submitter || !this.originalSubmitText)\n return;\n if (this.submitter.matches(\"button\")) {\n this.submitter.innerHTML = this.originalSubmitText;\n }\n else if (this.submitter.matches(\"input\")) {\n const input = this.submitter;\n input.value = this.originalSubmitText;\n }\n }\n requestMustRedirect(request) {\n return !request.isSafe && this.mustRedirect;\n }\n requestAcceptsTurboStreamResponse(request) {\n return !request.isSafe || hasAttribute(\"data-turbo-stream\", this.submitter, this.formElement);\n }\n get submitsWith() {\n var _a;\n return (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"data-turbo-submits-with\");\n }\n}\nfunction buildFormData(formElement, submitter) {\n const formData = new FormData(formElement);\n const name = submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"name\");\n const value = submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"value\");\n if (name) {\n formData.append(name, value || \"\");\n }\n return formData;\n}\nfunction getCookieValue(cookieName) {\n if (cookieName != null) {\n const cookies = document.cookie ? document.cookie.split(\"; \") : [];\n const cookie = cookies.find((cookie) => cookie.startsWith(cookieName));\n if (cookie) {\n const value = cookie.split(\"=\").slice(1).join(\"=\");\n return value ? decodeURIComponent(value) : undefined;\n }\n }\n}\nfunction responseSucceededWithoutRedirect(response) {\n return response.statusCode == 200 && !response.redirected;\n}\nfunction mergeFormDataEntries(url, entries) {\n const searchParams = new URLSearchParams();\n for (const [name, value] of entries) {\n if (value instanceof File)\n continue;\n searchParams.append(name, value);\n }\n url.search = searchParams.toString();\n return url;\n}\n\nclass Snapshot {\n constructor(element) {\n this.element = element;\n }\n get activeElement() {\n return this.element.ownerDocument.activeElement;\n }\n get children() {\n return [...this.element.children];\n }\n hasAnchor(anchor) {\n return this.getElementForAnchor(anchor) != null;\n }\n getElementForAnchor(anchor) {\n return anchor ? this.element.querySelector(`[id='${anchor}'], a[name='${anchor}']`) : null;\n }\n get isConnected() {\n return this.element.isConnected;\n }\n get firstAutofocusableElement() {\n const inertDisabledOrHidden = \"[inert], :disabled, [hidden], details:not([open]), dialog:not([open])\";\n for (const element of this.element.querySelectorAll(\"[autofocus]\")) {\n if (element.closest(inertDisabledOrHidden) == null)\n return element;\n else\n continue;\n }\n return null;\n }\n get permanentElements() {\n return queryPermanentElementsAll(this.element);\n }\n getPermanentElementById(id) {\n return getPermanentElementById(this.element, id);\n }\n getPermanentElementMapForSnapshot(snapshot) {\n const permanentElementMap = {};\n for (const currentPermanentElement of this.permanentElements) {\n const { id } = currentPermanentElement;\n const newPermanentElement = snapshot.getPermanentElementById(id);\n if (newPermanentElement) {\n permanentElementMap[id] = [currentPermanentElement, newPermanentElement];\n }\n }\n return permanentElementMap;\n }\n}\nfunction getPermanentElementById(node, id) {\n return node.querySelector(`#${id}[data-turbo-permanent]`);\n}\nfunction queryPermanentElementsAll(node) {\n return node.querySelectorAll(\"[id][data-turbo-permanent]\");\n}\n\nclass FormSubmitObserver {\n constructor(delegate, eventTarget) {\n this.started = false;\n this.submitCaptured = () => {\n this.eventTarget.removeEventListener(\"submit\", this.submitBubbled, false);\n this.eventTarget.addEventListener(\"submit\", this.submitBubbled, false);\n };\n this.submitBubbled = ((event) => {\n if (!event.defaultPrevented) {\n const form = event.target instanceof HTMLFormElement ? event.target : undefined;\n const submitter = event.submitter || undefined;\n if (form &&\n submissionDoesNotDismissDialog(form, submitter) &&\n submissionDoesNotTargetIFrame(form, submitter) &&\n this.delegate.willSubmitForm(form, submitter)) {\n event.preventDefault();\n event.stopImmediatePropagation();\n this.delegate.formSubmitted(form, submitter);\n }\n }\n });\n this.delegate = delegate;\n this.eventTarget = eventTarget;\n }\n start() {\n if (!this.started) {\n this.eventTarget.addEventListener(\"submit\", this.submitCaptured, true);\n this.started = true;\n }\n }\n stop() {\n if (this.started) {\n this.eventTarget.removeEventListener(\"submit\", this.submitCaptured, true);\n this.started = false;\n }\n }\n}\nfunction submissionDoesNotDismissDialog(form, submitter) {\n const method = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formmethod\")) || form.getAttribute(\"method\");\n return method != \"dialog\";\n}\nfunction submissionDoesNotTargetIFrame(form, submitter) {\n if ((submitter === null || submitter === void 0 ? void 0 : submitter.hasAttribute(\"formtarget\")) || form.hasAttribute(\"target\")) {\n const target = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formtarget\")) || form.target;\n for (const element of document.getElementsByName(target)) {\n if (element instanceof HTMLIFrameElement)\n return false;\n }\n return true;\n }\n else {\n return true;\n }\n}\n\nclass View {\n constructor(delegate, element) {\n this.resolveRenderPromise = (_value) => { };\n this.resolveInterceptionPromise = (_value) => { };\n this.delegate = delegate;\n this.element = element;\n }\n scrollToAnchor(anchor) {\n const element = this.snapshot.getElementForAnchor(anchor);\n if (element) {\n this.scrollToElement(element);\n this.focusElement(element);\n }\n else {\n this.scrollToPosition({ x: 0, y: 0 });\n }\n }\n scrollToAnchorFromLocation(location) {\n this.scrollToAnchor(getAnchor(location));\n }\n scrollToElement(element) {\n element.scrollIntoView();\n }\n focusElement(element) {\n if (element instanceof HTMLElement) {\n if (element.hasAttribute(\"tabindex\")) {\n element.focus();\n }\n else {\n element.setAttribute(\"tabindex\", \"-1\");\n element.focus();\n element.removeAttribute(\"tabindex\");\n }\n }\n }\n scrollToPosition({ x, y }) {\n this.scrollRoot.scrollTo(x, y);\n }\n scrollToTop() {\n this.scrollToPosition({ x: 0, y: 0 });\n }\n get scrollRoot() {\n return window;\n }\n async render(renderer) {\n const { isPreview, shouldRender, newSnapshot: snapshot } = renderer;\n if (shouldRender) {\n try {\n this.renderPromise = new Promise((resolve) => (this.resolveRenderPromise = resolve));\n this.renderer = renderer;\n await this.prepareToRenderSnapshot(renderer);\n const renderInterception = new Promise((resolve) => (this.resolveInterceptionPromise = resolve));\n const options = { resume: this.resolveInterceptionPromise, render: this.renderer.renderElement };\n const immediateRender = this.delegate.allowsImmediateRender(snapshot, options);\n if (!immediateRender)\n await renderInterception;\n await this.renderSnapshot(renderer);\n this.delegate.viewRenderedSnapshot(snapshot, isPreview);\n this.delegate.preloadOnLoadLinksForView(this.element);\n this.finishRenderingSnapshot(renderer);\n }\n finally {\n delete this.renderer;\n this.resolveRenderPromise(undefined);\n delete this.renderPromise;\n }\n }\n else {\n this.invalidate(renderer.reloadReason);\n }\n }\n invalidate(reason) {\n this.delegate.viewInvalidated(reason);\n }\n async prepareToRenderSnapshot(renderer) {\n this.markAsPreview(renderer.isPreview);\n await renderer.prepareToRender();\n }\n markAsPreview(isPreview) {\n if (isPreview) {\n this.element.setAttribute(\"data-turbo-preview\", \"\");\n }\n else {\n this.element.removeAttribute(\"data-turbo-preview\");\n }\n }\n async renderSnapshot(renderer) {\n await renderer.render();\n }\n finishRenderingSnapshot(renderer) {\n renderer.finishRendering();\n }\n}\n\nclass FrameView extends View {\n missing() {\n this.element.innerHTML = `<strong class=\"turbo-frame-error\">Content missing</strong>`;\n }\n get snapshot() {\n return new Snapshot(this.element);\n }\n}\n\nclass LinkInterceptor {\n constructor(delegate, element) {\n this.clickBubbled = (event) => {\n if (this.respondsToEventTarget(event.target)) {\n this.clickEvent = event;\n }\n else {\n delete this.clickEvent;\n }\n };\n this.linkClicked = ((event) => {\n if (this.clickEvent && this.respondsToEventTarget(event.target) && event.target instanceof Element) {\n if (this.delegate.shouldInterceptLinkClick(event.target, event.detail.url, event.detail.originalEvent)) {\n this.clickEvent.preventDefault();\n event.preventDefault();\n this.delegate.linkClickIntercepted(event.target, event.detail.url, event.detail.originalEvent);\n }\n }\n delete this.clickEvent;\n });\n this.willVisit = ((_event) => {\n delete this.clickEvent;\n });\n this.delegate = delegate;\n this.element = element;\n }\n start() {\n this.element.addEventListener(\"click\", this.clickBubbled);\n document.addEventListener(\"turbo:click\", this.linkClicked);\n document.addEventListener(\"turbo:before-visit\", this.willVisit);\n }\n stop() {\n this.element.removeEventListener(\"click\", this.clickBubbled);\n document.removeEventListener(\"turbo:click\", this.linkClicked);\n document.removeEventListener(\"turbo:before-visit\", this.willVisit);\n }\n respondsToEventTarget(target) {\n const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n return element && element.closest(\"turbo-frame, html\") == this.element;\n }\n}\n\nclass LinkClickObserver {\n constructor(delegate, eventTarget) {\n this.started = false;\n this.clickCaptured = () => {\n this.eventTarget.removeEventListener(\"click\", this.clickBubbled, false);\n this.eventTarget.addEventListener(\"click\", this.clickBubbled, false);\n };\n this.clickBubbled = (event) => {\n if (event instanceof MouseEvent && this.clickEventIsSignificant(event)) {\n const target = (event.composedPath && event.composedPath()[0]) || event.target;\n const link = this.findLinkFromClickTarget(target);\n if (link && doesNotTargetIFrame(link)) {\n const location = this.getLocationForLink(link);\n if (this.delegate.willFollowLinkToLocation(link, location, event)) {\n event.preventDefault();\n this.delegate.followedLinkToLocation(link, location);\n }\n }\n }\n };\n this.delegate = delegate;\n this.eventTarget = eventTarget;\n }\n start() {\n if (!this.started) {\n this.eventTarget.addEventListener(\"click\", this.clickCaptured, true);\n this.started = true;\n }\n }\n stop() {\n if (this.started) {\n this.eventTarget.removeEventListener(\"click\", this.clickCaptured, true);\n this.started = false;\n }\n }\n clickEventIsSignificant(event) {\n return !((event.target && event.target.isContentEditable) ||\n event.defaultPrevented ||\n event.which > 1 ||\n event.altKey ||\n event.ctrlKey ||\n event.metaKey ||\n event.shiftKey);\n }\n findLinkFromClickTarget(target) {\n return findClosestRecursively(target, \"a[href]:not([target^=_]):not([download])\");\n }\n getLocationForLink(link) {\n return expandURL(link.getAttribute(\"href\") || \"\");\n }\n}\nfunction doesNotTargetIFrame(anchor) {\n if (anchor.hasAttribute(\"target\")) {\n for (const element of document.getElementsByName(anchor.target)) {\n if (element instanceof HTMLIFrameElement)\n return false;\n }\n return true;\n }\n else {\n return true;\n }\n}\n\nclass FormLinkClickObserver {\n constructor(delegate, element) {\n this.delegate = delegate;\n this.linkInterceptor = new LinkClickObserver(this, element);\n }\n start() {\n this.linkInterceptor.start();\n }\n stop() {\n this.linkInterceptor.stop();\n }\n willFollowLinkToLocation(link, location, originalEvent) {\n return (this.delegate.willSubmitFormLinkToLocation(link, location, originalEvent) &&\n link.hasAttribute(\"data-turbo-method\"));\n }\n followedLinkToLocation(link, location) {\n const form = document.createElement(\"form\");\n const type = \"hidden\";\n for (const [name, value] of location.searchParams) {\n form.append(Object.assign(document.createElement(\"input\"), { type, name, value }));\n }\n const action = Object.assign(location, { search: \"\" });\n form.setAttribute(\"data-turbo\", \"true\");\n form.setAttribute(\"action\", action.href);\n form.setAttribute(\"hidden\", \"\");\n const method = link.getAttribute(\"data-turbo-method\");\n if (method)\n form.setAttribute(\"method\", method);\n const turboFrame = link.getAttribute(\"data-turbo-frame\");\n if (turboFrame)\n form.setAttribute(\"data-turbo-frame\", turboFrame);\n const turboAction = getVisitAction(link);\n if (turboAction)\n form.setAttribute(\"data-turbo-action\", turboAction);\n const turboConfirm = link.getAttribute(\"data-turbo-confirm\");\n if (turboConfirm)\n form.setAttribute(\"data-turbo-confirm\", turboConfirm);\n const turboStream = link.hasAttribute(\"data-turbo-stream\");\n if (turboStream)\n form.setAttribute(\"data-turbo-stream\", \"\");\n this.delegate.submittedFormLinkToLocation(link, location, form);\n document.body.appendChild(form);\n form.addEventListener(\"turbo:submit-end\", () => form.remove(), { once: true });\n requestAnimationFrame(() => form.requestSubmit());\n }\n}\n\nclass Bardo {\n static async preservingPermanentElements(delegate, permanentElementMap, callback) {\n const bardo = new this(delegate, permanentElementMap);\n bardo.enter();\n await callback();\n bardo.leave();\n }\n constructor(delegate, permanentElementMap) {\n this.delegate = delegate;\n this.permanentElementMap = permanentElementMap;\n }\n enter() {\n for (const id in this.permanentElementMap) {\n const [currentPermanentElement, newPermanentElement] = this.permanentElementMap[id];\n this.delegate.enteringBardo(currentPermanentElement, newPermanentElement);\n this.replaceNewPermanentElementWithPlaceholder(newPermanentElement);\n }\n }\n leave() {\n for (const id in this.permanentElementMap) {\n const [currentPermanentElement] = this.permanentElementMap[id];\n this.replaceCurrentPermanentElementWithClone(currentPermanentElement);\n this.replacePlaceholderWithPermanentElement(currentPermanentElement);\n this.delegate.leavingBardo(currentPermanentElement);\n }\n }\n replaceNewPermanentElementWithPlaceholder(permanentElement) {\n const placeholder = createPlaceholderForPermanentElement(permanentElement);\n permanentElement.replaceWith(placeholder);\n }\n replaceCurrentPermanentElementWithClone(permanentElement) {\n const clone = permanentElement.cloneNode(true);\n permanentElement.replaceWith(clone);\n }\n replacePlaceholderWithPermanentElement(permanentElement) {\n const placeholder = this.getPlaceholderById(permanentElement.id);\n placeholder === null || placeholder === void 0 ? void 0 : placeholder.replaceWith(permanentElement);\n }\n getPlaceholderById(id) {\n return this.placeholders.find((element) => element.content == id);\n }\n get placeholders() {\n return [...document.querySelectorAll(\"meta[name=turbo-permanent-placeholder][content]\")];\n }\n}\nfunction createPlaceholderForPermanentElement(permanentElement) {\n const element = document.createElement(\"meta\");\n element.setAttribute(\"name\", \"turbo-permanent-placeholder\");\n element.setAttribute(\"content\", permanentElement.id);\n return element;\n}\n\nclass Renderer {\n constructor(currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n this.activeElement = null;\n this.currentSnapshot = currentSnapshot;\n this.newSnapshot = newSnapshot;\n this.isPreview = isPreview;\n this.willRender = willRender;\n this.renderElement = renderElement;\n this.promise = new Promise((resolve, reject) => (this.resolvingFunctions = { resolve, reject }));\n }\n get shouldRender() {\n return true;\n }\n get reloadReason() {\n return;\n }\n prepareToRender() {\n return;\n }\n finishRendering() {\n if (this.resolvingFunctions) {\n this.resolvingFunctions.resolve();\n delete this.resolvingFunctions;\n }\n }\n async preservingPermanentElements(callback) {\n await Bardo.preservingPermanentElements(this, this.permanentElementMap, callback);\n }\n focusFirstAutofocusableElement() {\n const element = this.connectedSnapshot.firstAutofocusableElement;\n if (elementIsFocusable(element)) {\n element.focus();\n }\n }\n enteringBardo(currentPermanentElement) {\n if (this.activeElement)\n return;\n if (currentPermanentElement.contains(this.currentSnapshot.activeElement)) {\n this.activeElement = this.currentSnapshot.activeElement;\n }\n }\n leavingBardo(currentPermanentElement) {\n if (currentPermanentElement.contains(this.activeElement) && this.activeElement instanceof HTMLElement) {\n this.activeElement.focus();\n this.activeElement = null;\n }\n }\n get connectedSnapshot() {\n return this.newSnapshot.isConnected ? this.newSnapshot : this.currentSnapshot;\n }\n get currentElement() {\n return this.currentSnapshot.element;\n }\n get newElement() {\n return this.newSnapshot.element;\n }\n get permanentElementMap() {\n return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot);\n }\n}\nfunction elementIsFocusable(element) {\n return element && typeof element.focus == \"function\";\n}\n\nclass FrameRenderer extends Renderer {\n static renderElement(currentElement, newElement) {\n var _a;\n const destinationRange = document.createRange();\n destinationRange.selectNodeContents(currentElement);\n destinationRange.deleteContents();\n const frameElement = newElement;\n const sourceRange = (_a = frameElement.ownerDocument) === null || _a === void 0 ? void 0 : _a.createRange();\n if (sourceRange) {\n sourceRange.selectNodeContents(frameElement);\n currentElement.appendChild(sourceRange.extractContents());\n }\n }\n constructor(delegate, currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n super(currentSnapshot, newSnapshot, renderElement, isPreview, willRender);\n this.delegate = delegate;\n }\n get shouldRender() {\n return true;\n }\n async render() {\n await nextAnimationFrame();\n this.preservingPermanentElements(() => {\n this.loadFrameElement();\n });\n this.scrollFrameIntoView();\n await nextAnimationFrame();\n this.focusFirstAutofocusableElement();\n await nextAnimationFrame();\n this.activateScriptElements();\n }\n loadFrameElement() {\n this.delegate.willRenderFrame(this.currentElement, this.newElement);\n this.renderElement(this.currentElement, this.newElement);\n }\n scrollFrameIntoView() {\n if (this.currentElement.autoscroll || this.newElement.autoscroll) {\n const element = this.currentElement.firstElementChild;\n const block = readScrollLogicalPosition(this.currentElement.getAttribute(\"data-autoscroll-block\"), \"end\");\n const behavior = readScrollBehavior(this.currentElement.getAttribute(\"data-autoscroll-behavior\"), \"auto\");\n if (element) {\n element.scrollIntoView({ block, behavior });\n return true;\n }\n }\n return false;\n }\n activateScriptElements() {\n for (const inertScriptElement of this.newScriptElements) {\n const activatedScriptElement = activateScriptElement(inertScriptElement);\n inertScriptElement.replaceWith(activatedScriptElement);\n }\n }\n get newScriptElements() {\n return this.currentElement.querySelectorAll(\"script\");\n }\n}\nfunction readScrollLogicalPosition(value, defaultValue) {\n if (value == \"end\" || value == \"start\" || value == \"center\" || value == \"nearest\") {\n return value;\n }\n else {\n return defaultValue;\n }\n}\nfunction readScrollBehavior(value, defaultValue) {\n if (value == \"auto\" || value == \"smooth\") {\n return value;\n }\n else {\n return defaultValue;\n }\n}\n\nclass ProgressBar {\n static get defaultCSS() {\n return unindent `\n .turbo-progress-bar {\n position: fixed;\n display: block;\n top: 0;\n left: 0;\n height: 3px;\n background: #0076ff;\n z-index: 2147483647;\n transition:\n width ${ProgressBar.animationDuration}ms ease-out,\n opacity ${ProgressBar.animationDuration / 2}ms ${ProgressBar.animationDuration / 2}ms ease-in;\n transform: translate3d(0, 0, 0);\n }\n `;\n }\n constructor() {\n this.hiding = false;\n this.value = 0;\n this.visible = false;\n this.trickle = () => {\n this.setValue(this.value + Math.random() / 100);\n };\n this.stylesheetElement = this.createStylesheetElement();\n this.progressElement = this.createProgressElement();\n this.installStylesheetElement();\n this.setValue(0);\n }\n show() {\n if (!this.visible) {\n this.visible = true;\n this.installProgressElement();\n this.startTrickling();\n }\n }\n hide() {\n if (this.visible && !this.hiding) {\n this.hiding = true;\n this.fadeProgressElement(() => {\n this.uninstallProgressElement();\n this.stopTrickling();\n this.visible = false;\n this.hiding = false;\n });\n }\n }\n setValue(value) {\n this.value = value;\n this.refresh();\n }\n installStylesheetElement() {\n document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n }\n installProgressElement() {\n this.progressElement.style.width = \"0\";\n this.progressElement.style.opacity = \"1\";\n document.documentElement.insertBefore(this.progressElement, document.body);\n this.refresh();\n }\n fadeProgressElement(callback) {\n this.progressElement.style.opacity = \"0\";\n setTimeout(callback, ProgressBar.animationDuration * 1.5);\n }\n uninstallProgressElement() {\n if (this.progressElement.parentNode) {\n document.documentElement.removeChild(this.progressElement);\n }\n }\n startTrickling() {\n if (!this.trickleInterval) {\n this.trickleInterval = window.setInterval(this.trickle, ProgressBar.animationDuration);\n }\n }\n stopTrickling() {\n window.clearInterval(this.trickleInterval);\n delete this.trickleInterval;\n }\n refresh() {\n requestAnimationFrame(() => {\n this.progressElement.style.width = `${10 + this.value * 90}%`;\n });\n }\n createStylesheetElement() {\n const element = document.createElement(\"style\");\n element.type = \"text/css\";\n element.textContent = ProgressBar.defaultCSS;\n if (this.cspNonce) {\n element.nonce = this.cspNonce;\n }\n return element;\n }\n createProgressElement() {\n const element = document.createElement(\"div\");\n element.className = \"turbo-progress-bar\";\n return element;\n }\n get cspNonce() {\n return getMetaContent(\"csp-nonce\");\n }\n}\nProgressBar.animationDuration = 300;\n\nclass HeadSnapshot extends Snapshot {\n constructor() {\n super(...arguments);\n this.detailsByOuterHTML = this.children\n .filter((element) => !elementIsNoscript(element))\n .map((element) => elementWithoutNonce(element))\n .reduce((result, element) => {\n const { outerHTML } = element;\n const details = outerHTML in result\n ? result[outerHTML]\n : {\n type: elementType(element),\n tracked: elementIsTracked(element),\n elements: [],\n };\n return Object.assign(Object.assign({}, result), { [outerHTML]: Object.assign(Object.assign({}, details), { elements: [...details.elements, element] }) });\n }, {});\n }\n get trackedElementSignature() {\n return Object.keys(this.detailsByOuterHTML)\n .filter((outerHTML) => this.detailsByOuterHTML[outerHTML].tracked)\n .join(\"\");\n }\n getScriptElementsNotInSnapshot(snapshot) {\n return this.getElementsMatchingTypeNotInSnapshot(\"script\", snapshot);\n }\n getStylesheetElementsNotInSnapshot(snapshot) {\n return this.getElementsMatchingTypeNotInSnapshot(\"stylesheet\", snapshot);\n }\n getElementsMatchingTypeNotInSnapshot(matchedType, snapshot) {\n return Object.keys(this.detailsByOuterHTML)\n .filter((outerHTML) => !(outerHTML in snapshot.detailsByOuterHTML))\n .map((outerHTML) => this.detailsByOuterHTML[outerHTML])\n .filter(({ type }) => type == matchedType)\n .map(({ elements: [element] }) => element);\n }\n get provisionalElements() {\n return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n const { type, tracked, elements } = this.detailsByOuterHTML[outerHTML];\n if (type == null && !tracked) {\n return [...result, ...elements];\n }\n else if (elements.length > 1) {\n return [...result, ...elements.slice(1)];\n }\n else {\n return result;\n }\n }, []);\n }\n getMetaValue(name) {\n const element = this.findMetaElementByName(name);\n return element ? element.getAttribute(\"content\") : null;\n }\n findMetaElementByName(name) {\n return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n const { elements: [element], } = this.detailsByOuterHTML[outerHTML];\n return elementIsMetaElementWithName(element, name) ? element : result;\n }, undefined);\n }\n}\nfunction elementType(element) {\n if (elementIsScript(element)) {\n return \"script\";\n }\n else if (elementIsStylesheet(element)) {\n return \"stylesheet\";\n }\n}\nfunction elementIsTracked(element) {\n return element.getAttribute(\"data-turbo-track\") == \"reload\";\n}\nfunction elementIsScript(element) {\n const tagName = element.localName;\n return tagName == \"script\";\n}\nfunction elementIsNoscript(element) {\n const tagName = element.localName;\n return tagName == \"noscript\";\n}\nfunction elementIsStylesheet(element) {\n const tagName = element.localName;\n return tagName == \"style\" || (tagName == \"link\" && element.getAttribute(\"rel\") == \"stylesheet\");\n}\nfunction elementIsMetaElementWithName(element, name) {\n const tagName = element.localName;\n return tagName == \"meta\" && element.getAttribute(\"name\") == name;\n}\nfunction elementWithoutNonce(element) {\n if (element.hasAttribute(\"nonce\")) {\n element.setAttribute(\"nonce\", \"\");\n }\n return element;\n}\n\nclass PageSnapshot extends Snapshot {\n static fromHTMLString(html = \"\") {\n return this.fromDocument(parseHTMLDocument(html));\n }\n static fromElement(element) {\n return this.fromDocument(element.ownerDocument);\n }\n static fromDocument({ head, body }) {\n return new this(body, new HeadSnapshot(head));\n }\n constructor(element, headSnapshot) {\n super(element);\n this.headSnapshot = headSnapshot;\n }\n clone() {\n const clonedElement = this.element.cloneNode(true);\n const selectElements = this.element.querySelectorAll(\"select\");\n const clonedSelectElements = clonedElement.querySelectorAll(\"select\");\n for (const [index, source] of selectElements.entries()) {\n const clone = clonedSelectElements[index];\n for (const option of clone.selectedOptions)\n option.selected = false;\n for (const option of source.selectedOptions)\n clone.options[option.index].selected = true;\n }\n for (const clonedPasswordInput of clonedElement.querySelectorAll('input[type=\"password\"]')) {\n clonedPasswordInput.value = \"\";\n }\n return new PageSnapshot(clonedElement, this.headSnapshot);\n }\n get headElement() {\n return this.headSnapshot.element;\n }\n get rootLocation() {\n var _a;\n const root = (_a = this.getSetting(\"root\")) !== null && _a !== void 0 ? _a : \"/\";\n return expandURL(root);\n }\n get cacheControlValue() {\n return this.getSetting(\"cache-control\");\n }\n get isPreviewable() {\n return this.cacheControlValue != \"no-preview\";\n }\n get isCacheable() {\n return this.cacheControlValue != \"no-cache\";\n }\n get isVisitable() {\n return this.getSetting(\"visit-control\") != \"reload\";\n }\n getSetting(name) {\n return this.headSnapshot.getMetaValue(`turbo-${name}`);\n }\n}\n\nvar TimingMetric;\n(function (TimingMetric) {\n TimingMetric[\"visitStart\"] = \"visitStart\";\n TimingMetric[\"requestStart\"] = \"requestStart\";\n TimingMetric[\"requestEnd\"] = \"requestEnd\";\n TimingMetric[\"visitEnd\"] = \"visitEnd\";\n})(TimingMetric || (TimingMetric = {}));\nvar VisitState;\n(function (VisitState) {\n VisitState[\"initialized\"] = \"initialized\";\n VisitState[\"started\"] = \"started\";\n VisitState[\"canceled\"] = \"canceled\";\n VisitState[\"failed\"] = \"failed\";\n VisitState[\"completed\"] = \"completed\";\n})(VisitState || (VisitState = {}));\nconst defaultOptions = {\n action: \"advance\",\n historyChanged: false,\n visitCachedSnapshot: () => { },\n willRender: true,\n updateHistory: true,\n shouldCacheSnapshot: true,\n acceptsStreamResponse: false,\n};\nvar SystemStatusCode;\n(function (SystemStatusCode) {\n SystemStatusCode[SystemStatusCode[\"networkFailure\"] = 0] = \"networkFailure\";\n SystemStatusCode[SystemStatusCode[\"timeoutFailure\"] = -1] = \"timeoutFailure\";\n SystemStatusCode[SystemStatusCode[\"contentTypeMismatch\"] = -2] = \"contentTypeMismatch\";\n})(SystemStatusCode || (SystemStatusCode = {}));\nclass Visit {\n constructor(delegate, location, restorationIdentifier, options = {}) {\n this.identifier = uuid();\n this.timingMetrics = {};\n this.followedRedirect = false;\n this.historyChanged = false;\n this.scrolled = false;\n this.shouldCacheSnapshot = true;\n this.acceptsStreamResponse = false;\n this.snapshotCached = false;\n this.state = VisitState.initialized;\n this.delegate = delegate;\n this.location = location;\n this.restorationIdentifier = restorationIdentifier || uuid();\n const { action, historyChanged, referrer, snapshot, snapshotHTML, response, visitCachedSnapshot, willRender, updateHistory, shouldCacheSnapshot, acceptsStreamResponse, } = Object.assign(Object.assign({}, defaultOptions), options);\n this.action = action;\n this.historyChanged = historyChanged;\n this.referrer = referrer;\n this.snapshot = snapshot;\n this.snapshotHTML = snapshotHTML;\n this.response = response;\n this.isSamePage = this.delegate.locationWithActionIsSamePage(this.location, this.action);\n this.visitCachedSnapshot = visitCachedSnapshot;\n this.willRender = willRender;\n this.updateHistory = updateHistory;\n this.scrolled = !willRender;\n this.shouldCacheSnapshot = shouldCacheSnapshot;\n this.acceptsStreamResponse = acceptsStreamResponse;\n }\n get adapter() {\n return this.delegate.adapter;\n }\n get view() {\n return this.delegate.view;\n }\n get history() {\n return this.delegate.history;\n }\n get restorationData() {\n return this.history.getRestorationDataForIdentifier(this.restorationIdentifier);\n }\n get silent() {\n return this.isSamePage;\n }\n start() {\n if (this.state == VisitState.initialized) {\n this.recordTimingMetric(TimingMetric.visitStart);\n this.state = VisitState.started;\n this.adapter.visitStarted(this);\n this.delegate.visitStarted(this);\n }\n }\n cancel() {\n if (this.state == VisitState.started) {\n if (this.request) {\n this.request.cancel();\n }\n this.cancelRender();\n this.state = VisitState.canceled;\n }\n }\n complete() {\n if (this.state == VisitState.started) {\n this.recordTimingMetric(TimingMetric.visitEnd);\n this.state = VisitState.completed;\n this.followRedirect();\n if (!this.followedRedirect) {\n this.adapter.visitCompleted(this);\n this.delegate.visitCompleted(this);\n }\n }\n }\n fail() {\n if (this.state == VisitState.started) {\n this.state = VisitState.failed;\n this.adapter.visitFailed(this);\n }\n }\n changeHistory() {\n var _a;\n if (!this.historyChanged && this.updateHistory) {\n const actionForHistory = this.location.href === ((_a = this.referrer) === null || _a === void 0 ? void 0 : _a.href) ? \"replace\" : this.action;\n const method = getHistoryMethodForAction(actionForHistory);\n this.history.update(method, this.location, this.restorationIdentifier);\n this.historyChanged = true;\n }\n }\n issueRequest() {\n if (this.hasPreloadedResponse()) {\n this.simulateRequest();\n }\n else if (this.shouldIssueRequest() && !this.request) {\n this.request = new FetchRequest(this, FetchMethod.get, this.location);\n this.request.perform();\n }\n }\n simulateRequest() {\n if (this.response) {\n this.startRequest();\n this.recordResponse();\n this.finishRequest();\n }\n }\n startRequest() {\n this.recordTimingMetric(TimingMetric.requestStart);\n this.adapter.visitRequestStarted(this);\n }\n recordResponse(response = this.response) {\n this.response = response;\n if (response) {\n const { statusCode } = response;\n if (isSuccessful(statusCode)) {\n this.adapter.visitRequestCompleted(this);\n }\n else {\n this.adapter.visitRequestFailedWithStatusCode(this, statusCode);\n }\n }\n }\n finishRequest() {\n this.recordTimingMetric(TimingMetric.requestEnd);\n this.adapter.visitRequestFinished(this);\n }\n loadResponse() {\n if (this.response) {\n const { statusCode, responseHTML } = this.response;\n this.render(async () => {\n if (this.shouldCacheSnapshot)\n this.cacheSnapshot();\n if (this.view.renderPromise)\n await this.view.renderPromise;\n if (isSuccessful(statusCode) && responseHTML != null) {\n await this.view.renderPage(PageSnapshot.fromHTMLString(responseHTML), false, this.willRender, this);\n this.performScroll();\n this.adapter.visitRendered(this);\n this.complete();\n }\n else {\n await this.view.renderError(PageSnapshot.fromHTMLString(responseHTML), this);\n this.adapter.visitRendered(this);\n this.fail();\n }\n });\n }\n }\n getCachedSnapshot() {\n const snapshot = this.view.getCachedSnapshotForLocation(this.location) || this.getPreloadedSnapshot();\n if (snapshot && (!getAnchor(this.location) || snapshot.hasAnchor(getAnchor(this.location)))) {\n if (this.action == \"restore\" || snapshot.isPreviewable) {\n return snapshot;\n }\n }\n }\n getPreloadedSnapshot() {\n if (this.snapshotHTML) {\n return PageSnapshot.fromHTMLString(this.snapshotHTML);\n }\n }\n hasCachedSnapshot() {\n return this.getCachedSnapshot() != null;\n }\n loadCachedSnapshot() {\n const snapshot = this.getCachedSnapshot();\n if (snapshot) {\n const isPreview = this.shouldIssueRequest();\n this.render(async () => {\n this.cacheSnapshot();\n if (this.isSamePage) {\n this.adapter.visitRendered(this);\n }\n else {\n if (this.view.renderPromise)\n await this.view.renderPromise;\n await this.view.renderPage(snapshot, isPreview, this.willRender, this);\n this.performScroll();\n this.adapter.visitRendered(this);\n if (!isPreview) {\n this.complete();\n }\n }\n });\n }\n }\n followRedirect() {\n var _a;\n if (this.redirectedToLocation && !this.followedRedirect && ((_a = this.response) === null || _a === void 0 ? void 0 : _a.redirected)) {\n this.adapter.visitProposedToLocation(this.redirectedToLocation, {\n action: \"replace\",\n response: this.response,\n shouldCacheSnapshot: false,\n willRender: false,\n });\n this.followedRedirect = true;\n }\n }\n goToSamePageAnchor() {\n if (this.isSamePage) {\n this.render(async () => {\n this.cacheSnapshot();\n this.performScroll();\n this.changeHistory();\n this.adapter.visitRendered(this);\n });\n }\n }\n prepareRequest(request) {\n if (this.acceptsStreamResponse) {\n request.acceptResponseType(StreamMessage.contentType);\n }\n }\n requestStarted() {\n this.startRequest();\n }\n requestPreventedHandlingResponse(_request, _response) { }\n async requestSucceededWithResponse(request, response) {\n const responseHTML = await response.responseHTML;\n const { redirected, statusCode } = response;\n if (responseHTML == undefined) {\n this.recordResponse({\n statusCode: SystemStatusCode.contentTypeMismatch,\n redirected,\n });\n }\n else {\n this.redirectedToLocation = response.redirected ? response.location : undefined;\n this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n }\n }\n async requestFailedWithResponse(request, response) {\n const responseHTML = await response.responseHTML;\n const { redirected, statusCode } = response;\n if (responseHTML == undefined) {\n this.recordResponse({\n statusCode: SystemStatusCode.contentTypeMismatch,\n redirected,\n });\n }\n else {\n this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n }\n }\n requestErrored(_request, _error) {\n this.recordResponse({\n statusCode: SystemStatusCode.networkFailure,\n redirected: false,\n });\n }\n requestFinished() {\n this.finishRequest();\n }\n performScroll() {\n if (!this.scrolled && !this.view.forceReloaded) {\n if (this.action == \"restore\") {\n this.scrollToRestoredPosition() || this.scrollToAnchor() || this.view.scrollToTop();\n }\n else {\n this.scrollToAnchor() || this.view.scrollToTop();\n }\n if (this.isSamePage) {\n this.delegate.visitScrolledToSamePageLocation(this.view.lastRenderedLocation, this.location);\n }\n this.scrolled = true;\n }\n }\n scrollToRestoredPosition() {\n const { scrollPosition } = this.restorationData;\n if (scrollPosition) {\n this.view.scrollToPosition(scrollPosition);\n return true;\n }\n }\n scrollToAnchor() {\n const anchor = getAnchor(this.location);\n if (anchor != null) {\n this.view.scrollToAnchor(anchor);\n return true;\n }\n }\n recordTimingMetric(metric) {\n this.timingMetrics[metric] = new Date().getTime();\n }\n getTimingMetrics() {\n return Object.assign({}, this.timingMetrics);\n }\n getHistoryMethodForAction(action) {\n switch (action) {\n case \"replace\":\n return history.replaceState;\n case \"advance\":\n case \"restore\":\n return history.pushState;\n }\n }\n hasPreloadedResponse() {\n return typeof this.response == \"object\";\n }\n shouldIssueRequest() {\n if (this.isSamePage) {\n return false;\n }\n else if (this.action == \"restore\") {\n return !this.hasCachedSnapshot();\n }\n else {\n return this.willRender;\n }\n }\n cacheSnapshot() {\n if (!this.snapshotCached) {\n this.view.cacheSnapshot(this.snapshot).then((snapshot) => snapshot && this.visitCachedSnapshot(snapshot));\n this.snapshotCached = true;\n }\n }\n async render(callback) {\n this.cancelRender();\n await new Promise((resolve) => {\n this.frame = requestAnimationFrame(() => resolve());\n });\n await callback();\n delete this.frame;\n }\n cancelRender() {\n if (this.frame) {\n cancelAnimationFrame(this.frame);\n delete this.frame;\n }\n }\n}\nfunction isSuccessful(statusCode) {\n return statusCode >= 200 && statusCode < 300;\n}\n\nclass BrowserAdapter {\n constructor(session) {\n this.progressBar = new ProgressBar();\n this.showProgressBar = () => {\n this.progressBar.show();\n };\n this.session = session;\n }\n visitProposedToLocation(location, options) {\n this.navigator.startVisit(location, (options === null || options === void 0 ? void 0 : options.restorationIdentifier) || uuid(), options);\n }\n visitStarted(visit) {\n this.location = visit.location;\n visit.loadCachedSnapshot();\n visit.issueRequest();\n visit.goToSamePageAnchor();\n }\n visitRequestStarted(visit) {\n this.progressBar.setValue(0);\n if (visit.hasCachedSnapshot() || visit.action != \"restore\") {\n this.showVisitProgressBarAfterDelay();\n }\n else {\n this.showProgressBar();\n }\n }\n visitRequestCompleted(visit) {\n visit.loadResponse();\n }\n visitRequestFailedWithStatusCode(visit, statusCode) {\n switch (statusCode) {\n case SystemStatusCode.networkFailure:\n case SystemStatusCode.timeoutFailure:\n case SystemStatusCode.contentTypeMismatch:\n return this.reload({\n reason: \"request_failed\",\n context: {\n statusCode,\n },\n });\n default:\n return visit.loadResponse();\n }\n }\n visitRequestFinished(_visit) {\n this.progressBar.setValue(1);\n this.hideVisitProgressBar();\n }\n visitCompleted(_visit) { }\n pageInvalidated(reason) {\n this.reload(reason);\n }\n visitFailed(_visit) { }\n visitRendered(_visit) { }\n formSubmissionStarted(_formSubmission) {\n this.progressBar.setValue(0);\n this.showFormProgressBarAfterDelay();\n }\n formSubmissionFinished(_formSubmission) {\n this.progressBar.setValue(1);\n this.hideFormProgressBar();\n }\n showVisitProgressBarAfterDelay() {\n this.visitProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n }\n hideVisitProgressBar() {\n this.progressBar.hide();\n if (this.visitProgressBarTimeout != null) {\n window.clearTimeout(this.visitProgressBarTimeout);\n delete this.visitProgressBarTimeout;\n }\n }\n showFormProgressBarAfterDelay() {\n if (this.formProgressBarTimeout == null) {\n this.formProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n }\n }\n hideFormProgressBar() {\n this.progressBar.hide();\n if (this.formProgressBarTimeout != null) {\n window.clearTimeout(this.formProgressBarTimeout);\n delete this.formProgressBarTimeout;\n }\n }\n reload(reason) {\n var _a;\n dispatch(\"turbo:reload\", { detail: reason });\n window.location.href = ((_a = this.location) === null || _a === void 0 ? void 0 : _a.toString()) || window.location.href;\n }\n get navigator() {\n return this.session.navigator;\n }\n}\n\nclass CacheObserver {\n constructor() {\n this.selector = \"[data-turbo-temporary]\";\n this.deprecatedSelector = \"[data-turbo-cache=false]\";\n this.started = false;\n this.removeTemporaryElements = ((_event) => {\n for (const element of this.temporaryElements) {\n element.remove();\n }\n });\n }\n start() {\n if (!this.started) {\n this.started = true;\n addEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n }\n }\n stop() {\n if (this.started) {\n this.started = false;\n removeEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n }\n }\n get temporaryElements() {\n return [...document.querySelectorAll(this.selector), ...this.temporaryElementsWithDeprecation];\n }\n get temporaryElementsWithDeprecation() {\n const elements = document.querySelectorAll(this.deprecatedSelector);\n if (elements.length) {\n console.warn(`The ${this.deprecatedSelector} selector is deprecated and will be removed in a future version. Use ${this.selector} instead.`);\n }\n return [...elements];\n }\n}\n\nclass FrameRedirector {\n constructor(session, element) {\n this.session = session;\n this.element = element;\n this.linkInterceptor = new LinkInterceptor(this, element);\n this.formSubmitObserver = new FormSubmitObserver(this, element);\n }\n start() {\n this.linkInterceptor.start();\n this.formSubmitObserver.start();\n }\n stop() {\n this.linkInterceptor.stop();\n this.formSubmitObserver.stop();\n }\n shouldInterceptLinkClick(element, _location, _event) {\n return this.shouldRedirect(element);\n }\n linkClickIntercepted(element, url, event) {\n const frame = this.findFrameElement(element);\n if (frame) {\n frame.delegate.linkClickIntercepted(element, url, event);\n }\n }\n willSubmitForm(element, submitter) {\n return (element.closest(\"turbo-frame\") == null &&\n this.shouldSubmit(element, submitter) &&\n this.shouldRedirect(element, submitter));\n }\n formSubmitted(element, submitter) {\n const frame = this.findFrameElement(element, submitter);\n if (frame) {\n frame.delegate.formSubmitted(element, submitter);\n }\n }\n shouldSubmit(form, submitter) {\n var _a;\n const action = getAction(form, submitter);\n const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n const rootLocation = expandURL((_a = meta === null || meta === void 0 ? void 0 : meta.content) !== null && _a !== void 0 ? _a : \"/\");\n return this.shouldRedirect(form, submitter) && locationIsVisitable(action, rootLocation);\n }\n shouldRedirect(element, submitter) {\n const isNavigatable = element instanceof HTMLFormElement\n ? this.session.submissionIsNavigatable(element, submitter)\n : this.session.elementIsNavigatable(element);\n if (isNavigatable) {\n const frame = this.findFrameElement(element, submitter);\n return frame ? frame != element.closest(\"turbo-frame\") : false;\n }\n else {\n return false;\n }\n }\n findFrameElement(element, submitter) {\n const id = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"data-turbo-frame\")) || element.getAttribute(\"data-turbo-frame\");\n if (id && id != \"_top\") {\n const frame = this.element.querySelector(`#${id}:not([disabled])`);\n if (frame instanceof FrameElement) {\n return frame;\n }\n }\n }\n}\n\nclass History {\n constructor(delegate) {\n this.restorationIdentifier = uuid();\n this.restorationData = {};\n this.started = false;\n this.pageLoaded = false;\n this.onPopState = (event) => {\n if (this.shouldHandlePopState()) {\n const { turbo } = event.state || {};\n if (turbo) {\n this.location = new URL(window.location.href);\n const { restorationIdentifier } = turbo;\n this.restorationIdentifier = restorationIdentifier;\n this.delegate.historyPoppedToLocationWithRestorationIdentifier(this.location, restorationIdentifier);\n }\n }\n };\n this.onPageLoad = async (_event) => {\n await nextMicrotask();\n this.pageLoaded = true;\n };\n this.delegate = delegate;\n }\n start() {\n if (!this.started) {\n addEventListener(\"popstate\", this.onPopState, false);\n addEventListener(\"load\", this.onPageLoad, false);\n this.started = true;\n this.replace(new URL(window.location.href));\n }\n }\n stop() {\n if (this.started) {\n removeEventListener(\"popstate\", this.onPopState, false);\n removeEventListener(\"load\", this.onPageLoad, false);\n this.started = false;\n }\n }\n push(location, restorationIdentifier) {\n this.update(history.pushState, location, restorationIdentifier);\n }\n replace(location, restorationIdentifier) {\n this.update(history.replaceState, location, restorationIdentifier);\n }\n update(method, location, restorationIdentifier = uuid()) {\n const state = { turbo: { restorationIdentifier } };\n method.call(history, state, \"\", location.href);\n this.location = location;\n this.restorationIdentifier = restorationIdentifier;\n }\n getRestorationDataForIdentifier(restorationIdentifier) {\n return this.restorationData[restorationIdentifier] || {};\n }\n updateRestorationData(additionalData) {\n const { restorationIdentifier } = this;\n const restorationData = this.restorationData[restorationIdentifier];\n this.restorationData[restorationIdentifier] = Object.assign(Object.assign({}, restorationData), additionalData);\n }\n assumeControlOfScrollRestoration() {\n var _a;\n if (!this.previousScrollRestoration) {\n this.previousScrollRestoration = (_a = history.scrollRestoration) !== null && _a !== void 0 ? _a : \"auto\";\n history.scrollRestoration = \"manual\";\n }\n }\n relinquishControlOfScrollRestoration() {\n if (this.previousScrollRestoration) {\n history.scrollRestoration = this.previousScrollRestoration;\n delete this.previousScrollRestoration;\n }\n }\n shouldHandlePopState() {\n return this.pageIsLoaded();\n }\n pageIsLoaded() {\n return this.pageLoaded || document.readyState == \"complete\";\n }\n}\n\nclass Navigator {\n constructor(delegate) {\n this.delegate = delegate;\n }\n proposeVisit(location, options = {}) {\n if (this.delegate.allowsVisitingLocationWithAction(location, options.action)) {\n if (locationIsVisitable(location, this.view.snapshot.rootLocation)) {\n this.delegate.visitProposedToLocation(location, options);\n }\n else {\n window.location.href = location.toString();\n }\n }\n }\n startVisit(locatable, restorationIdentifier, options = {}) {\n this.stop();\n this.currentVisit = new Visit(this, expandURL(locatable), restorationIdentifier, Object.assign({ referrer: this.location }, options));\n this.currentVisit.start();\n }\n submitForm(form, submitter) {\n this.stop();\n this.formSubmission = new FormSubmission(this, form, submitter, true);\n this.formSubmission.start();\n }\n stop() {\n if (this.formSubmission) {\n this.formSubmission.stop();\n delete this.formSubmission;\n }\n if (this.currentVisit) {\n this.currentVisit.cancel();\n delete this.currentVisit;\n }\n }\n get adapter() {\n return this.delegate.adapter;\n }\n get view() {\n return this.delegate.view;\n }\n get history() {\n return this.delegate.history;\n }\n formSubmissionStarted(formSubmission) {\n if (typeof this.adapter.formSubmissionStarted === \"function\") {\n this.adapter.formSubmissionStarted(formSubmission);\n }\n }\n async formSubmissionSucceededWithResponse(formSubmission, fetchResponse) {\n if (formSubmission == this.formSubmission) {\n const responseHTML = await fetchResponse.responseHTML;\n if (responseHTML) {\n const shouldCacheSnapshot = formSubmission.isSafe;\n if (!shouldCacheSnapshot) {\n this.view.clearSnapshotCache();\n }\n const { statusCode, redirected } = fetchResponse;\n const action = this.getActionForFormSubmission(formSubmission);\n const visitOptions = {\n action,\n shouldCacheSnapshot,\n response: { statusCode, responseHTML, redirected },\n };\n this.proposeVisit(fetchResponse.location, visitOptions);\n }\n }\n }\n async formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n const responseHTML = await fetchResponse.responseHTML;\n if (responseHTML) {\n const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n if (fetchResponse.serverError) {\n await this.view.renderError(snapshot, this.currentVisit);\n }\n else {\n await this.view.renderPage(snapshot, false, true, this.currentVisit);\n }\n this.view.scrollToTop();\n this.view.clearSnapshotCache();\n }\n }\n formSubmissionErrored(formSubmission, error) {\n console.error(error);\n }\n formSubmissionFinished(formSubmission) {\n if (typeof this.adapter.formSubmissionFinished === \"function\") {\n this.adapter.formSubmissionFinished(formSubmission);\n }\n }\n visitStarted(visit) {\n this.delegate.visitStarted(visit);\n }\n visitCompleted(visit) {\n this.delegate.visitCompleted(visit);\n }\n locationWithActionIsSamePage(location, action) {\n const anchor = getAnchor(location);\n const currentAnchor = getAnchor(this.view.lastRenderedLocation);\n const isRestorationToTop = action === \"restore\" && typeof anchor === \"undefined\";\n return (action !== \"replace\" &&\n getRequestURL(location) === getRequestURL(this.view.lastRenderedLocation) &&\n (isRestorationToTop || (anchor != null && anchor !== currentAnchor)));\n }\n visitScrolledToSamePageLocation(oldURL, newURL) {\n this.delegate.visitScrolledToSamePageLocation(oldURL, newURL);\n }\n get location() {\n return this.history.location;\n }\n get restorationIdentifier() {\n return this.history.restorationIdentifier;\n }\n getActionForFormSubmission({ submitter, formElement }) {\n return getVisitAction(submitter, formElement) || \"advance\";\n }\n}\n\nvar PageStage;\n(function (PageStage) {\n PageStage[PageStage[\"initial\"] = 0] = \"initial\";\n PageStage[PageStage[\"loading\"] = 1] = \"loading\";\n PageStage[PageStage[\"interactive\"] = 2] = \"interactive\";\n PageStage[PageStage[\"complete\"] = 3] = \"complete\";\n})(PageStage || (PageStage = {}));\nclass PageObserver {\n constructor(delegate) {\n this.stage = PageStage.initial;\n this.started = false;\n this.interpretReadyState = () => {\n const { readyState } = this;\n if (readyState == \"interactive\") {\n this.pageIsInteractive();\n }\n else if (readyState == \"complete\") {\n this.pageIsComplete();\n }\n };\n this.pageWillUnload = () => {\n this.delegate.pageWillUnload();\n };\n this.delegate = delegate;\n }\n start() {\n if (!this.started) {\n if (this.stage == PageStage.initial) {\n this.stage = PageStage.loading;\n }\n document.addEventListener(\"readystatechange\", this.interpretReadyState, false);\n addEventListener(\"pagehide\", this.pageWillUnload, false);\n this.started = true;\n }\n }\n stop() {\n if (this.started) {\n document.removeEventListener(\"readystatechange\", this.interpretReadyState, false);\n removeEventListener(\"pagehide\", this.pageWillUnload, false);\n this.started = false;\n }\n }\n pageIsInteractive() {\n if (this.stage == PageStage.loading) {\n this.stage = PageStage.interactive;\n this.delegate.pageBecameInteractive();\n }\n }\n pageIsComplete() {\n this.pageIsInteractive();\n if (this.stage == PageStage.interactive) {\n this.stage = PageStage.complete;\n this.delegate.pageLoaded();\n }\n }\n get readyState() {\n return document.readyState;\n }\n}\n\nclass ScrollObserver {\n constructor(delegate) {\n this.started = false;\n this.onScroll = () => {\n this.updatePosition({ x: window.pageXOffset, y: window.pageYOffset });\n };\n this.delegate = delegate;\n }\n start() {\n if (!this.started) {\n addEventListener(\"scroll\", this.onScroll, false);\n this.onScroll();\n this.started = true;\n }\n }\n stop() {\n if (this.started) {\n removeEventListener(\"scroll\", this.onScroll, false);\n this.started = false;\n }\n }\n updatePosition(position) {\n this.delegate.scrollPositionChanged(position);\n }\n}\n\nclass StreamMessageRenderer {\n render({ fragment }) {\n Bardo.preservingPermanentElements(this, getPermanentElementMapForFragment(fragment), () => document.documentElement.appendChild(fragment));\n }\n enteringBardo(currentPermanentElement, newPermanentElement) {\n newPermanentElement.replaceWith(currentPermanentElement.cloneNode(true));\n }\n leavingBardo() { }\n}\nfunction getPermanentElementMapForFragment(fragment) {\n const permanentElementsInDocument = queryPermanentElementsAll(document.documentElement);\n const permanentElementMap = {};\n for (const permanentElementInDocument of permanentElementsInDocument) {\n const { id } = permanentElementInDocument;\n for (const streamElement of fragment.querySelectorAll(\"turbo-stream\")) {\n const elementInStream = getPermanentElementById(streamElement.templateElement.content, id);\n if (elementInStream) {\n permanentElementMap[id] = [permanentElementInDocument, elementInStream];\n }\n }\n }\n return permanentElementMap;\n}\n\nclass StreamObserver {\n constructor(delegate) {\n this.sources = new Set();\n this.started = false;\n this.inspectFetchResponse = ((event) => {\n const response = fetchResponseFromEvent(event);\n if (response && fetchResponseIsStream(response)) {\n event.preventDefault();\n this.receiveMessageResponse(response);\n }\n });\n this.receiveMessageEvent = (event) => {\n if (this.started && typeof event.data == \"string\") {\n this.receiveMessageHTML(event.data);\n }\n };\n this.delegate = delegate;\n }\n start() {\n if (!this.started) {\n this.started = true;\n addEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n }\n }\n stop() {\n if (this.started) {\n this.started = false;\n removeEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n }\n }\n connectStreamSource(source) {\n if (!this.streamSourceIsConnected(source)) {\n this.sources.add(source);\n source.addEventListener(\"message\", this.receiveMessageEvent, false);\n }\n }\n disconnectStreamSource(source) {\n if (this.streamSourceIsConnected(source)) {\n this.sources.delete(source);\n source.removeEventListener(\"message\", this.receiveMessageEvent, false);\n }\n }\n streamSourceIsConnected(source) {\n return this.sources.has(source);\n }\n async receiveMessageResponse(response) {\n const html = await response.responseHTML;\n if (html) {\n this.receiveMessageHTML(html);\n }\n }\n receiveMessageHTML(html) {\n this.delegate.receivedMessageFromStream(StreamMessage.wrap(html));\n }\n}\nfunction fetchResponseFromEvent(event) {\n var _a;\n const fetchResponse = (_a = event.detail) === null || _a === void 0 ? void 0 : _a.fetchResponse;\n if (fetchResponse instanceof FetchResponse) {\n return fetchResponse;\n }\n}\nfunction fetchResponseIsStream(response) {\n var _a;\n const contentType = (_a = response.contentType) !== null && _a !== void 0 ? _a : \"\";\n return contentType.startsWith(StreamMessage.contentType);\n}\n\nclass ErrorRenderer extends Renderer {\n static renderElement(currentElement, newElement) {\n const { documentElement, body } = document;\n documentElement.replaceChild(newElement, body);\n }\n async render() {\n this.replaceHeadAndBody();\n this.activateScriptElements();\n }\n replaceHeadAndBody() {\n const { documentElement, head } = document;\n documentElement.replaceChild(this.newHead, head);\n this.renderElement(this.currentElement, this.newElement);\n }\n activateScriptElements() {\n for (const replaceableElement of this.scriptElements) {\n const parentNode = replaceableElement.parentNode;\n if (parentNode) {\n const element = activateScriptElement(replaceableElement);\n parentNode.replaceChild(element, replaceableElement);\n }\n }\n }\n get newHead() {\n return this.newSnapshot.headSnapshot.element;\n }\n get scriptElements() {\n return document.documentElement.querySelectorAll(\"script\");\n }\n}\n\nclass PageRenderer extends Renderer {\n static renderElement(currentElement, newElement) {\n if (document.body && newElement instanceof HTMLBodyElement) {\n document.body.replaceWith(newElement);\n }\n else {\n document.documentElement.appendChild(newElement);\n }\n }\n get shouldRender() {\n return this.newSnapshot.isVisitable && this.trackedElementsAreIdentical;\n }\n get reloadReason() {\n if (!this.newSnapshot.isVisitable) {\n return {\n reason: \"turbo_visit_control_is_reload\",\n };\n }\n if (!this.trackedElementsAreIdentical) {\n return {\n reason: \"tracked_element_mismatch\",\n };\n }\n }\n async prepareToRender() {\n await this.mergeHead();\n }\n async render() {\n if (this.willRender) {\n await this.replaceBody();\n }\n }\n finishRendering() {\n super.finishRendering();\n if (!this.isPreview) {\n this.focusFirstAutofocusableElement();\n }\n }\n get currentHeadSnapshot() {\n return this.currentSnapshot.headSnapshot;\n }\n get newHeadSnapshot() {\n return this.newSnapshot.headSnapshot;\n }\n get newElement() {\n return this.newSnapshot.element;\n }\n async mergeHead() {\n const mergedHeadElements = this.mergeProvisionalElements();\n const newStylesheetElements = this.copyNewHeadStylesheetElements();\n this.copyNewHeadScriptElements();\n await mergedHeadElements;\n await newStylesheetElements;\n }\n async replaceBody() {\n await this.preservingPermanentElements(async () => {\n this.activateNewBody();\n await this.assignNewBody();\n });\n }\n get trackedElementsAreIdentical() {\n return this.currentHeadSnapshot.trackedElementSignature == this.newHeadSnapshot.trackedElementSignature;\n }\n async copyNewHeadStylesheetElements() {\n const loadingElements = [];\n for (const element of this.newHeadStylesheetElements) {\n loadingElements.push(waitForLoad(element));\n document.head.appendChild(element);\n }\n await Promise.all(loadingElements);\n }\n copyNewHeadScriptElements() {\n for (const element of this.newHeadScriptElements) {\n document.head.appendChild(activateScriptElement(element));\n }\n }\n async mergeProvisionalElements() {\n const newHeadElements = [...this.newHeadProvisionalElements];\n for (const element of this.currentHeadProvisionalElements) {\n if (!this.isCurrentElementInElementList(element, newHeadElements)) {\n document.head.removeChild(element);\n }\n }\n for (const element of newHeadElements) {\n document.head.appendChild(element);\n }\n }\n isCurrentElementInElementList(element, elementList) {\n for (const [index, newElement] of elementList.entries()) {\n if (element.tagName == \"TITLE\") {\n if (newElement.tagName != \"TITLE\") {\n continue;\n }\n if (element.innerHTML == newElement.innerHTML) {\n elementList.splice(index, 1);\n return true;\n }\n }\n if (newElement.isEqualNode(element)) {\n elementList.splice(index, 1);\n return true;\n }\n }\n return false;\n }\n removeCurrentHeadProvisionalElements() {\n for (const element of this.currentHeadProvisionalElements) {\n document.head.removeChild(element);\n }\n }\n copyNewHeadProvisionalElements() {\n for (const element of this.newHeadProvisionalElements) {\n document.head.appendChild(element);\n }\n }\n activateNewBody() {\n document.adoptNode(this.newElement);\n this.activateNewBodyScriptElements();\n }\n activateNewBodyScriptElements() {\n for (const inertScriptElement of this.newBodyScriptElements) {\n const activatedScriptElement = activateScriptElement(inertScriptElement);\n inertScriptElement.replaceWith(activatedScriptElement);\n }\n }\n async assignNewBody() {\n await this.renderElement(this.currentElement, this.newElement);\n }\n get newHeadStylesheetElements() {\n return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot);\n }\n get newHeadScriptElements() {\n return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot);\n }\n get currentHeadProvisionalElements() {\n return this.currentHeadSnapshot.provisionalElements;\n }\n get newHeadProvisionalElements() {\n return this.newHeadSnapshot.provisionalElements;\n }\n get newBodyScriptElements() {\n return this.newElement.querySelectorAll(\"script\");\n }\n}\n\nclass SnapshotCache {\n constructor(size) {\n this.keys = [];\n this.snapshots = {};\n this.size = size;\n }\n has(location) {\n return toCacheKey(location) in this.snapshots;\n }\n get(location) {\n if (this.has(location)) {\n const snapshot = this.read(location);\n this.touch(location);\n return snapshot;\n }\n }\n put(location, snapshot) {\n this.write(location, snapshot);\n this.touch(location);\n return snapshot;\n }\n clear() {\n this.snapshots = {};\n }\n read(location) {\n return this.snapshots[toCacheKey(location)];\n }\n write(location, snapshot) {\n this.snapshots[toCacheKey(location)] = snapshot;\n }\n touch(location) {\n const key = toCacheKey(location);\n const index = this.keys.indexOf(key);\n if (index > -1)\n this.keys.splice(index, 1);\n this.keys.unshift(key);\n this.trim();\n }\n trim() {\n for (const key of this.keys.splice(this.size)) {\n delete this.snapshots[key];\n }\n }\n}\n\nclass PageView extends View {\n constructor() {\n super(...arguments);\n this.snapshotCache = new SnapshotCache(10);\n this.lastRenderedLocation = new URL(location.href);\n this.forceReloaded = false;\n }\n renderPage(snapshot, isPreview = false, willRender = true, visit) {\n const renderer = new PageRenderer(this.snapshot, snapshot, PageRenderer.renderElement, isPreview, willRender);\n if (!renderer.shouldRender) {\n this.forceReloaded = true;\n }\n else {\n visit === null || visit === void 0 ? void 0 : visit.changeHistory();\n }\n return this.render(renderer);\n }\n renderError(snapshot, visit) {\n visit === null || visit === void 0 ? void 0 : visit.changeHistory();\n const renderer = new ErrorRenderer(this.snapshot, snapshot, ErrorRenderer.renderElement, false);\n return this.render(renderer);\n }\n clearSnapshotCache() {\n this.snapshotCache.clear();\n }\n async cacheSnapshot(snapshot = this.snapshot) {\n if (snapshot.isCacheable) {\n this.delegate.viewWillCacheSnapshot();\n const { lastRenderedLocation: location } = this;\n await nextEventLoopTick();\n const cachedSnapshot = snapshot.clone();\n this.snapshotCache.put(location, cachedSnapshot);\n return cachedSnapshot;\n }\n }\n getCachedSnapshotForLocation(location) {\n return this.snapshotCache.get(location);\n }\n get snapshot() {\n return PageSnapshot.fromElement(this.element);\n }\n}\n\nclass Preloader {\n constructor(delegate) {\n this.selector = \"a[data-turbo-preload]\";\n this.delegate = delegate;\n }\n get snapshotCache() {\n return this.delegate.navigator.view.snapshotCache;\n }\n start() {\n if (document.readyState === \"loading\") {\n return document.addEventListener(\"DOMContentLoaded\", () => {\n this.preloadOnLoadLinksForView(document.body);\n });\n }\n else {\n this.preloadOnLoadLinksForView(document.body);\n }\n }\n preloadOnLoadLinksForView(element) {\n for (const link of element.querySelectorAll(this.selector)) {\n this.preloadURL(link);\n }\n }\n async preloadURL(link) {\n const location = new URL(link.href);\n if (this.snapshotCache.has(location)) {\n return;\n }\n try {\n const response = await fetch(location.toString(), { headers: { \"VND.PREFETCH\": \"true\", Accept: \"text/html\" } });\n const responseText = await response.text();\n const snapshot = PageSnapshot.fromHTMLString(responseText);\n this.snapshotCache.put(location, snapshot);\n }\n catch (_) {\n }\n }\n}\n\nclass Session {\n constructor() {\n this.navigator = new Navigator(this);\n this.history = new History(this);\n this.preloader = new Preloader(this);\n this.view = new PageView(this, document.documentElement);\n this.adapter = new BrowserAdapter(this);\n this.pageObserver = new PageObserver(this);\n this.cacheObserver = new CacheObserver();\n this.linkClickObserver = new LinkClickObserver(this, window);\n this.formSubmitObserver = new FormSubmitObserver(this, document);\n this.scrollObserver = new ScrollObserver(this);\n this.streamObserver = new StreamObserver(this);\n this.formLinkClickObserver = new FormLinkClickObserver(this, document.documentElement);\n this.frameRedirector = new FrameRedirector(this, document.documentElement);\n this.streamMessageRenderer = new StreamMessageRenderer();\n this.drive = true;\n this.enabled = true;\n this.progressBarDelay = 500;\n this.started = false;\n this.formMode = \"on\";\n }\n start() {\n if (!this.started) {\n this.pageObserver.start();\n this.cacheObserver.start();\n this.formLinkClickObserver.start();\n this.linkClickObserver.start();\n this.formSubmitObserver.start();\n this.scrollObserver.start();\n this.streamObserver.start();\n this.frameRedirector.start();\n this.history.start();\n this.preloader.start();\n this.started = true;\n this.enabled = true;\n }\n }\n disable() {\n this.enabled = false;\n }\n stop() {\n if (this.started) {\n this.pageObserver.stop();\n this.cacheObserver.stop();\n this.formLinkClickObserver.stop();\n this.linkClickObserver.stop();\n this.formSubmitObserver.stop();\n this.scrollObserver.stop();\n this.streamObserver.stop();\n this.frameRedirector.stop();\n this.history.stop();\n this.started = false;\n }\n }\n registerAdapter(adapter) {\n this.adapter = adapter;\n }\n visit(location, options = {}) {\n const frameElement = options.frame ? document.getElementById(options.frame) : null;\n if (frameElement instanceof FrameElement) {\n frameElement.src = location.toString();\n frameElement.loaded;\n }\n else {\n this.navigator.proposeVisit(expandURL(location), options);\n }\n }\n connectStreamSource(source) {\n this.streamObserver.connectStreamSource(source);\n }\n disconnectStreamSource(source) {\n this.streamObserver.disconnectStreamSource(source);\n }\n renderStreamMessage(message) {\n this.streamMessageRenderer.render(StreamMessage.wrap(message));\n }\n clearCache() {\n this.view.clearSnapshotCache();\n }\n setProgressBarDelay(delay) {\n this.progressBarDelay = delay;\n }\n setFormMode(mode) {\n this.formMode = mode;\n }\n get location() {\n return this.history.location;\n }\n get restorationIdentifier() {\n return this.history.restorationIdentifier;\n }\n historyPoppedToLocationWithRestorationIdentifier(location, restorationIdentifier) {\n if (this.enabled) {\n this.navigator.startVisit(location, restorationIdentifier, {\n action: \"restore\",\n historyChanged: true,\n });\n }\n else {\n this.adapter.pageInvalidated({\n reason: \"turbo_disabled\",\n });\n }\n }\n scrollPositionChanged(position) {\n this.history.updateRestorationData({ scrollPosition: position });\n }\n willSubmitFormLinkToLocation(link, location) {\n return this.elementIsNavigatable(link) && locationIsVisitable(location, this.snapshot.rootLocation);\n }\n submittedFormLinkToLocation() { }\n willFollowLinkToLocation(link, location, event) {\n return (this.elementIsNavigatable(link) &&\n locationIsVisitable(location, this.snapshot.rootLocation) &&\n this.applicationAllowsFollowingLinkToLocation(link, location, event));\n }\n followedLinkToLocation(link, location) {\n const action = this.getActionForLink(link);\n const acceptsStreamResponse = link.hasAttribute(\"data-turbo-stream\");\n this.visit(location.href, { action, acceptsStreamResponse });\n }\n allowsVisitingLocationWithAction(location, action) {\n return this.locationWithActionIsSamePage(location, action) || this.applicationAllowsVisitingLocation(location);\n }\n visitProposedToLocation(location, options) {\n extendURLWithDeprecatedProperties(location);\n this.adapter.visitProposedToLocation(location, options);\n }\n visitStarted(visit) {\n if (!visit.acceptsStreamResponse) {\n markAsBusy(document.documentElement);\n }\n extendURLWithDeprecatedProperties(visit.location);\n if (!visit.silent) {\n this.notifyApplicationAfterVisitingLocation(visit.location, visit.action);\n }\n }\n visitCompleted(visit) {\n clearBusyState(document.documentElement);\n this.notifyApplicationAfterPageLoad(visit.getTimingMetrics());\n }\n locationWithActionIsSamePage(location, action) {\n return this.navigator.locationWithActionIsSamePage(location, action);\n }\n visitScrolledToSamePageLocation(oldURL, newURL) {\n this.notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL);\n }\n willSubmitForm(form, submitter) {\n const action = getAction(form, submitter);\n return (this.submissionIsNavigatable(form, submitter) &&\n locationIsVisitable(expandURL(action), this.snapshot.rootLocation));\n }\n formSubmitted(form, submitter) {\n this.navigator.submitForm(form, submitter);\n }\n pageBecameInteractive() {\n this.view.lastRenderedLocation = this.location;\n this.notifyApplicationAfterPageLoad();\n }\n pageLoaded() {\n this.history.assumeControlOfScrollRestoration();\n }\n pageWillUnload() {\n this.history.relinquishControlOfScrollRestoration();\n }\n receivedMessageFromStream(message) {\n this.renderStreamMessage(message);\n }\n viewWillCacheSnapshot() {\n var _a;\n if (!((_a = this.navigator.currentVisit) === null || _a === void 0 ? void 0 : _a.silent)) {\n this.notifyApplicationBeforeCachingSnapshot();\n }\n }\n allowsImmediateRender({ element }, options) {\n const event = this.notifyApplicationBeforeRender(element, options);\n const { defaultPrevented, detail: { render }, } = event;\n if (this.view.renderer && render) {\n this.view.renderer.renderElement = render;\n }\n return !defaultPrevented;\n }\n viewRenderedSnapshot(_snapshot, _isPreview) {\n this.view.lastRenderedLocation = this.history.location;\n this.notifyApplicationAfterRender();\n }\n preloadOnLoadLinksForView(element) {\n this.preloader.preloadOnLoadLinksForView(element);\n }\n viewInvalidated(reason) {\n this.adapter.pageInvalidated(reason);\n }\n frameLoaded(frame) {\n this.notifyApplicationAfterFrameLoad(frame);\n }\n frameRendered(fetchResponse, frame) {\n this.notifyApplicationAfterFrameRender(fetchResponse, frame);\n }\n applicationAllowsFollowingLinkToLocation(link, location, ev) {\n const event = this.notifyApplicationAfterClickingLinkToLocation(link, location, ev);\n return !event.defaultPrevented;\n }\n applicationAllowsVisitingLocation(location) {\n const event = this.notifyApplicationBeforeVisitingLocation(location);\n return !event.defaultPrevented;\n }\n notifyApplicationAfterClickingLinkToLocation(link, location, event) {\n return dispatch(\"turbo:click\", {\n target: link,\n detail: { url: location.href, originalEvent: event },\n cancelable: true,\n });\n }\n notifyApplicationBeforeVisitingLocation(location) {\n return dispatch(\"turbo:before-visit\", {\n detail: { url: location.href },\n cancelable: true,\n });\n }\n notifyApplicationAfterVisitingLocation(location, action) {\n return dispatch(\"turbo:visit\", { detail: { url: location.href, action } });\n }\n notifyApplicationBeforeCachingSnapshot() {\n return dispatch(\"turbo:before-cache\");\n }\n notifyApplicationBeforeRender(newBody, options) {\n return dispatch(\"turbo:before-render\", {\n detail: Object.assign({ newBody }, options),\n cancelable: true,\n });\n }\n notifyApplicationAfterRender() {\n return dispatch(\"turbo:render\");\n }\n notifyApplicationAfterPageLoad(timing = {}) {\n return dispatch(\"turbo:load\", {\n detail: { url: this.location.href, timing },\n });\n }\n notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL) {\n dispatchEvent(new HashChangeEvent(\"hashchange\", {\n oldURL: oldURL.toString(),\n newURL: newURL.toString(),\n }));\n }\n notifyApplicationAfterFrameLoad(frame) {\n return dispatch(\"turbo:frame-load\", { target: frame });\n }\n notifyApplicationAfterFrameRender(fetchResponse, frame) {\n return dispatch(\"turbo:frame-render\", {\n detail: { fetchResponse },\n target: frame,\n cancelable: true,\n });\n }\n submissionIsNavigatable(form, submitter) {\n if (this.formMode == \"off\") {\n return false;\n }\n else {\n const submitterIsNavigatable = submitter ? this.elementIsNavigatable(submitter) : true;\n if (this.formMode == \"optin\") {\n return submitterIsNavigatable && form.closest('[data-turbo=\"true\"]') != null;\n }\n else {\n return submitterIsNavigatable && this.elementIsNavigatable(form);\n }\n }\n }\n elementIsNavigatable(element) {\n const container = findClosestRecursively(element, \"[data-turbo]\");\n const withinFrame = findClosestRecursively(element, \"turbo-frame\");\n if (this.drive || withinFrame) {\n if (container) {\n return container.getAttribute(\"data-turbo\") != \"false\";\n }\n else {\n return true;\n }\n }\n else {\n if (container) {\n return container.getAttribute(\"data-turbo\") == \"true\";\n }\n else {\n return false;\n }\n }\n }\n getActionForLink(link) {\n return getVisitAction(link) || \"advance\";\n }\n get snapshot() {\n return this.view.snapshot;\n }\n}\nfunction extendURLWithDeprecatedProperties(url) {\n Object.defineProperties(url, deprecatedLocationPropertyDescriptors);\n}\nconst deprecatedLocationPropertyDescriptors = {\n absoluteURL: {\n get() {\n return this.toString();\n },\n },\n};\n\nclass Cache {\n constructor(session) {\n this.session = session;\n }\n clear() {\n this.session.clearCache();\n }\n resetCacheControl() {\n this.setCacheControl(\"\");\n }\n exemptPageFromCache() {\n this.setCacheControl(\"no-cache\");\n }\n exemptPageFromPreview() {\n this.setCacheControl(\"no-preview\");\n }\n setCacheControl(value) {\n setMetaContent(\"turbo-cache-control\", value);\n }\n}\n\nconst StreamActions = {\n after() {\n this.targetElements.forEach((e) => { var _a; return (_a = e.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(this.templateContent, e.nextSibling); });\n },\n append() {\n this.removeDuplicateTargetChildren();\n this.targetElements.forEach((e) => e.append(this.templateContent));\n },\n before() {\n this.targetElements.forEach((e) => { var _a; return (_a = e.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(this.templateContent, e); });\n },\n prepend() {\n this.removeDuplicateTargetChildren();\n this.targetElements.forEach((e) => e.prepend(this.templateContent));\n },\n remove() {\n this.targetElements.forEach((e) => e.remove());\n },\n replace() {\n this.targetElements.forEach((e) => e.replaceWith(this.templateContent));\n },\n update() {\n this.targetElements.forEach((targetElement) => {\n targetElement.innerHTML = \"\";\n targetElement.append(this.templateContent);\n });\n },\n};\n\nconst session = new Session();\nconst cache = new Cache(session);\nconst { navigator: navigator$1 } = session;\nfunction start() {\n session.start();\n}\nfunction registerAdapter(adapter) {\n session.registerAdapter(adapter);\n}\nfunction visit(location, options) {\n session.visit(location, options);\n}\nfunction connectStreamSource(source) {\n session.connectStreamSource(source);\n}\nfunction disconnectStreamSource(source) {\n session.disconnectStreamSource(source);\n}\nfunction renderStreamMessage(message) {\n session.renderStreamMessage(message);\n}\nfunction clearCache() {\n console.warn(\"Please replace `Turbo.clearCache()` with `Turbo.cache.clear()`. The top-level function is deprecated and will be removed in a future version of Turbo.`\");\n session.clearCache();\n}\nfunction setProgressBarDelay(delay) {\n session.setProgressBarDelay(delay);\n}\nfunction setConfirmMethod(confirmMethod) {\n FormSubmission.confirmMethod = confirmMethod;\n}\nfunction setFormMode(mode) {\n session.setFormMode(mode);\n}\n\nvar Turbo = /*#__PURE__*/Object.freeze({\n __proto__: null,\n navigator: navigator$1,\n session: session,\n cache: cache,\n PageRenderer: PageRenderer,\n PageSnapshot: PageSnapshot,\n FrameRenderer: FrameRenderer,\n start: start,\n registerAdapter: registerAdapter,\n visit: visit,\n connectStreamSource: connectStreamSource,\n disconnectStreamSource: disconnectStreamSource,\n renderStreamMessage: renderStreamMessage,\n clearCache: clearCache,\n setProgressBarDelay: setProgressBarDelay,\n setConfirmMethod: setConfirmMethod,\n setFormMode: setFormMode,\n StreamActions: StreamActions\n});\n\nclass TurboFrameMissingError extends Error {\n}\n\nclass FrameController {\n constructor(element) {\n this.fetchResponseLoaded = (_fetchResponse) => { };\n this.currentFetchRequest = null;\n this.resolveVisitPromise = () => { };\n this.connected = false;\n this.hasBeenLoaded = false;\n this.ignoredAttributes = new Set();\n this.action = null;\n this.visitCachedSnapshot = ({ element }) => {\n const frame = element.querySelector(\"#\" + this.element.id);\n if (frame && this.previousFrameElement) {\n frame.replaceChildren(...this.previousFrameElement.children);\n }\n delete this.previousFrameElement;\n };\n this.element = element;\n this.view = new FrameView(this, this.element);\n this.appearanceObserver = new AppearanceObserver(this, this.element);\n this.formLinkClickObserver = new FormLinkClickObserver(this, this.element);\n this.linkInterceptor = new LinkInterceptor(this, this.element);\n this.restorationIdentifier = uuid();\n this.formSubmitObserver = new FormSubmitObserver(this, this.element);\n }\n connect() {\n if (!this.connected) {\n this.connected = true;\n if (this.loadingStyle == FrameLoadingStyle.lazy) {\n this.appearanceObserver.start();\n }\n else {\n this.loadSourceURL();\n }\n this.formLinkClickObserver.start();\n this.linkInterceptor.start();\n this.formSubmitObserver.start();\n }\n }\n disconnect() {\n if (this.connected) {\n this.connected = false;\n this.appearanceObserver.stop();\n this.formLinkClickObserver.stop();\n this.linkInterceptor.stop();\n this.formSubmitObserver.stop();\n }\n }\n disabledChanged() {\n if (this.loadingStyle == FrameLoadingStyle.eager) {\n this.loadSourceURL();\n }\n }\n sourceURLChanged() {\n if (this.isIgnoringChangesTo(\"src\"))\n return;\n if (this.element.isConnected) {\n this.complete = false;\n }\n if (this.loadingStyle == FrameLoadingStyle.eager || this.hasBeenLoaded) {\n this.loadSourceURL();\n }\n }\n sourceURLReloaded() {\n const { src } = this.element;\n this.ignoringChangesToAttribute(\"complete\", () => {\n this.element.removeAttribute(\"complete\");\n });\n this.element.src = null;\n this.element.src = src;\n return this.element.loaded;\n }\n completeChanged() {\n if (this.isIgnoringChangesTo(\"complete\"))\n return;\n this.loadSourceURL();\n }\n loadingStyleChanged() {\n if (this.loadingStyle == FrameLoadingStyle.lazy) {\n this.appearanceObserver.start();\n }\n else {\n this.appearanceObserver.stop();\n this.loadSourceURL();\n }\n }\n async loadSourceURL() {\n if (this.enabled && this.isActive && !this.complete && this.sourceURL) {\n this.element.loaded = this.visit(expandURL(this.sourceURL));\n this.appearanceObserver.stop();\n await this.element.loaded;\n this.hasBeenLoaded = true;\n }\n }\n async loadResponse(fetchResponse) {\n if (fetchResponse.redirected || (fetchResponse.succeeded && fetchResponse.isHTML)) {\n this.sourceURL = fetchResponse.response.url;\n }\n try {\n const html = await fetchResponse.responseHTML;\n if (html) {\n const document = parseHTMLDocument(html);\n const pageSnapshot = PageSnapshot.fromDocument(document);\n if (pageSnapshot.isVisitable) {\n await this.loadFrameResponse(fetchResponse, document);\n }\n else {\n await this.handleUnvisitableFrameResponse(fetchResponse);\n }\n }\n }\n finally {\n this.fetchResponseLoaded = () => { };\n }\n }\n elementAppearedInViewport(element) {\n this.proposeVisitIfNavigatedWithAction(element, element);\n this.loadSourceURL();\n }\n willSubmitFormLinkToLocation(link) {\n return this.shouldInterceptNavigation(link);\n }\n submittedFormLinkToLocation(link, _location, form) {\n const frame = this.findFrameElement(link);\n if (frame)\n form.setAttribute(\"data-turbo-frame\", frame.id);\n }\n shouldInterceptLinkClick(element, _location, _event) {\n return this.shouldInterceptNavigation(element);\n }\n linkClickIntercepted(element, location) {\n this.navigateFrame(element, location);\n }\n willSubmitForm(element, submitter) {\n return element.closest(\"turbo-frame\") == this.element && this.shouldInterceptNavigation(element, submitter);\n }\n formSubmitted(element, submitter) {\n if (this.formSubmission) {\n this.formSubmission.stop();\n }\n this.formSubmission = new FormSubmission(this, element, submitter);\n const { fetchRequest } = this.formSubmission;\n this.prepareRequest(fetchRequest);\n this.formSubmission.start();\n }\n prepareRequest(request) {\n var _a;\n request.headers[\"Turbo-Frame\"] = this.id;\n if ((_a = this.currentNavigationElement) === null || _a === void 0 ? void 0 : _a.hasAttribute(\"data-turbo-stream\")) {\n request.acceptResponseType(StreamMessage.contentType);\n }\n }\n requestStarted(_request) {\n markAsBusy(this.element);\n }\n requestPreventedHandlingResponse(_request, _response) {\n this.resolveVisitPromise();\n }\n async requestSucceededWithResponse(request, response) {\n await this.loadResponse(response);\n this.resolveVisitPromise();\n }\n async requestFailedWithResponse(request, response) {\n await this.loadResponse(response);\n this.resolveVisitPromise();\n }\n requestErrored(request, error) {\n console.error(error);\n this.resolveVisitPromise();\n }\n requestFinished(_request) {\n clearBusyState(this.element);\n }\n formSubmissionStarted({ formElement }) {\n markAsBusy(formElement, this.findFrameElement(formElement));\n }\n formSubmissionSucceededWithResponse(formSubmission, response) {\n const frame = this.findFrameElement(formSubmission.formElement, formSubmission.submitter);\n frame.delegate.proposeVisitIfNavigatedWithAction(frame, formSubmission.formElement, formSubmission.submitter);\n frame.delegate.loadResponse(response);\n if (!formSubmission.isSafe) {\n session.clearCache();\n }\n }\n formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n this.element.delegate.loadResponse(fetchResponse);\n session.clearCache();\n }\n formSubmissionErrored(formSubmission, error) {\n console.error(error);\n }\n formSubmissionFinished({ formElement }) {\n clearBusyState(formElement, this.findFrameElement(formElement));\n }\n allowsImmediateRender({ element: newFrame }, options) {\n const event = dispatch(\"turbo:before-frame-render\", {\n target: this.element,\n detail: Object.assign({ newFrame }, options),\n cancelable: true,\n });\n const { defaultPrevented, detail: { render }, } = event;\n if (this.view.renderer && render) {\n this.view.renderer.renderElement = render;\n }\n return !defaultPrevented;\n }\n viewRenderedSnapshot(_snapshot, _isPreview) { }\n preloadOnLoadLinksForView(element) {\n session.preloadOnLoadLinksForView(element);\n }\n viewInvalidated() { }\n willRenderFrame(currentElement, _newElement) {\n this.previousFrameElement = currentElement.cloneNode(true);\n }\n async loadFrameResponse(fetchResponse, document) {\n const newFrameElement = await this.extractForeignFrameElement(document.body);\n if (newFrameElement) {\n const snapshot = new Snapshot(newFrameElement);\n const renderer = new FrameRenderer(this, this.view.snapshot, snapshot, FrameRenderer.renderElement, false, false);\n if (this.view.renderPromise)\n await this.view.renderPromise;\n this.changeHistory();\n await this.view.render(renderer);\n this.complete = true;\n session.frameRendered(fetchResponse, this.element);\n session.frameLoaded(this.element);\n this.fetchResponseLoaded(fetchResponse);\n }\n else if (this.willHandleFrameMissingFromResponse(fetchResponse)) {\n this.handleFrameMissingFromResponse(fetchResponse);\n }\n }\n async visit(url) {\n var _a;\n const request = new FetchRequest(this, FetchMethod.get, url, new URLSearchParams(), this.element);\n (_a = this.currentFetchRequest) === null || _a === void 0 ? void 0 : _a.cancel();\n this.currentFetchRequest = request;\n return new Promise((resolve) => {\n this.resolveVisitPromise = () => {\n this.resolveVisitPromise = () => { };\n this.currentFetchRequest = null;\n resolve();\n };\n request.perform();\n });\n }\n navigateFrame(element, url, submitter) {\n const frame = this.findFrameElement(element, submitter);\n frame.delegate.proposeVisitIfNavigatedWithAction(frame, element, submitter);\n this.withCurrentNavigationElement(element, () => {\n frame.src = url;\n });\n }\n proposeVisitIfNavigatedWithAction(frame, element, submitter) {\n this.action = getVisitAction(submitter, element, frame);\n if (this.action) {\n const pageSnapshot = PageSnapshot.fromElement(frame).clone();\n const { visitCachedSnapshot } = frame.delegate;\n frame.delegate.fetchResponseLoaded = (fetchResponse) => {\n if (frame.src) {\n const { statusCode, redirected } = fetchResponse;\n const responseHTML = frame.ownerDocument.documentElement.outerHTML;\n const response = { statusCode, redirected, responseHTML };\n const options = {\n response,\n visitCachedSnapshot,\n willRender: false,\n updateHistory: false,\n restorationIdentifier: this.restorationIdentifier,\n snapshot: pageSnapshot,\n };\n if (this.action)\n options.action = this.action;\n session.visit(frame.src, options);\n }\n };\n }\n }\n changeHistory() {\n if (this.action) {\n const method = getHistoryMethodForAction(this.action);\n session.history.update(method, expandURL(this.element.src || \"\"), this.restorationIdentifier);\n }\n }\n async handleUnvisitableFrameResponse(fetchResponse) {\n console.warn(`The response (${fetchResponse.statusCode}) from <turbo-frame id=\"${this.element.id}\"> is performing a full page visit due to turbo-visit-control.`);\n await this.visitResponse(fetchResponse.response);\n }\n willHandleFrameMissingFromResponse(fetchResponse) {\n this.element.setAttribute(\"complete\", \"\");\n const response = fetchResponse.response;\n const visit = async (url, options = {}) => {\n if (url instanceof Response) {\n this.visitResponse(url);\n }\n else {\n session.visit(url, options);\n }\n };\n const event = dispatch(\"turbo:frame-missing\", {\n target: this.element,\n detail: { response, visit },\n cancelable: true,\n });\n return !event.defaultPrevented;\n }\n handleFrameMissingFromResponse(fetchResponse) {\n this.view.missing();\n this.throwFrameMissingError(fetchResponse);\n }\n throwFrameMissingError(fetchResponse) {\n const message = `The response (${fetchResponse.statusCode}) did not contain the expected <turbo-frame id=\"${this.element.id}\"> and will be ignored. To perform a full page visit instead, set turbo-visit-control to reload.`;\n throw new TurboFrameMissingError(message);\n }\n async visitResponse(response) {\n const wrapped = new FetchResponse(response);\n const responseHTML = await wrapped.responseHTML;\n const { location, redirected, statusCode } = wrapped;\n return session.visit(location, { response: { redirected, statusCode, responseHTML } });\n }\n findFrameElement(element, submitter) {\n var _a;\n const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n return (_a = getFrameElementById(id)) !== null && _a !== void 0 ? _a : this.element;\n }\n async extractForeignFrameElement(container) {\n let element;\n const id = CSS.escape(this.id);\n try {\n element = activateElement(container.querySelector(`turbo-frame#${id}`), this.sourceURL);\n if (element) {\n return element;\n }\n element = activateElement(container.querySelector(`turbo-frame[src][recurse~=${id}]`), this.sourceURL);\n if (element) {\n await element.loaded;\n return await this.extractForeignFrameElement(element);\n }\n }\n catch (error) {\n console.error(error);\n return new FrameElement();\n }\n return null;\n }\n formActionIsVisitable(form, submitter) {\n const action = getAction(form, submitter);\n return locationIsVisitable(expandURL(action), this.rootLocation);\n }\n shouldInterceptNavigation(element, submitter) {\n const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n if (element instanceof HTMLFormElement && !this.formActionIsVisitable(element, submitter)) {\n return false;\n }\n if (!this.enabled || id == \"_top\") {\n return false;\n }\n if (id) {\n const frameElement = getFrameElementById(id);\n if (frameElement) {\n return !frameElement.disabled;\n }\n }\n if (!session.elementIsNavigatable(element)) {\n return false;\n }\n if (submitter && !session.elementIsNavigatable(submitter)) {\n return false;\n }\n return true;\n }\n get id() {\n return this.element.id;\n }\n get enabled() {\n return !this.element.disabled;\n }\n get sourceURL() {\n if (this.element.src) {\n return this.element.src;\n }\n }\n set sourceURL(sourceURL) {\n this.ignoringChangesToAttribute(\"src\", () => {\n this.element.src = sourceURL !== null && sourceURL !== void 0 ? sourceURL : null;\n });\n }\n get loadingStyle() {\n return this.element.loading;\n }\n get isLoading() {\n return this.formSubmission !== undefined || this.resolveVisitPromise() !== undefined;\n }\n get complete() {\n return this.element.hasAttribute(\"complete\");\n }\n set complete(value) {\n this.ignoringChangesToAttribute(\"complete\", () => {\n if (value) {\n this.element.setAttribute(\"complete\", \"\");\n }\n else {\n this.element.removeAttribute(\"complete\");\n }\n });\n }\n get isActive() {\n return this.element.isActive && this.connected;\n }\n get rootLocation() {\n var _a;\n const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n const root = (_a = meta === null || meta === void 0 ? void 0 : meta.content) !== null && _a !== void 0 ? _a : \"/\";\n return expandURL(root);\n }\n isIgnoringChangesTo(attributeName) {\n return this.ignoredAttributes.has(attributeName);\n }\n ignoringChangesToAttribute(attributeName, callback) {\n this.ignoredAttributes.add(attributeName);\n callback();\n this.ignoredAttributes.delete(attributeName);\n }\n withCurrentNavigationElement(element, callback) {\n this.currentNavigationElement = element;\n callback();\n delete this.currentNavigationElement;\n }\n}\nfunction getFrameElementById(id) {\n if (id != null) {\n const element = document.getElementById(id);\n if (element instanceof FrameElement) {\n return element;\n }\n }\n}\nfunction activateElement(element, currentURL) {\n if (element) {\n const src = element.getAttribute(\"src\");\n if (src != null && currentURL != null && urlsAreEqual(src, currentURL)) {\n throw new Error(`Matching <turbo-frame id=\"${element.id}\"> element has a source URL which references itself`);\n }\n if (element.ownerDocument !== document) {\n element = document.importNode(element, true);\n }\n if (element instanceof FrameElement) {\n element.connectedCallback();\n element.disconnectedCallback();\n return element;\n }\n }\n}\n\nclass StreamElement extends HTMLElement {\n static async renderElement(newElement) {\n await newElement.performAction();\n }\n async connectedCallback() {\n try {\n await this.render();\n }\n catch (error) {\n console.error(error);\n }\n finally {\n this.disconnect();\n }\n }\n async render() {\n var _a;\n return ((_a = this.renderPromise) !== null && _a !== void 0 ? _a : (this.renderPromise = (async () => {\n const event = this.beforeRenderEvent;\n if (this.dispatchEvent(event)) {\n await nextAnimationFrame();\n await event.detail.render(this);\n }\n })()));\n }\n disconnect() {\n try {\n this.remove();\n }\n catch (_a) { }\n }\n removeDuplicateTargetChildren() {\n this.duplicateChildren.forEach((c) => c.remove());\n }\n get duplicateChildren() {\n var _a;\n const existingChildren = this.targetElements.flatMap((e) => [...e.children]).filter((c) => !!c.id);\n const newChildrenIds = [...(((_a = this.templateContent) === null || _a === void 0 ? void 0 : _a.children) || [])].filter((c) => !!c.id).map((c) => c.id);\n return existingChildren.filter((c) => newChildrenIds.includes(c.id));\n }\n get performAction() {\n if (this.action) {\n const actionFunction = StreamActions[this.action];\n if (actionFunction) {\n return actionFunction;\n }\n this.raise(\"unknown action\");\n }\n this.raise(\"action attribute is missing\");\n }\n get targetElements() {\n if (this.target) {\n return this.targetElementsById;\n }\n else if (this.targets) {\n return this.targetElementsByQuery;\n }\n else {\n this.raise(\"target or targets attribute is missing\");\n }\n }\n get templateContent() {\n return this.templateElement.content.cloneNode(true);\n }\n get templateElement() {\n if (this.firstElementChild === null) {\n const template = this.ownerDocument.createElement(\"template\");\n this.appendChild(template);\n return template;\n }\n else if (this.firstElementChild instanceof HTMLTemplateElement) {\n return this.firstElementChild;\n }\n this.raise(\"first child element must be a <template> element\");\n }\n get action() {\n return this.getAttribute(\"action\");\n }\n get target() {\n return this.getAttribute(\"target\");\n }\n get targets() {\n return this.getAttribute(\"targets\");\n }\n raise(message) {\n throw new Error(`${this.description}: ${message}`);\n }\n get description() {\n var _a, _b;\n return (_b = ((_a = this.outerHTML.match(/<[^>]+>/)) !== null && _a !== void 0 ? _a : [])[0]) !== null && _b !== void 0 ? _b : \"<turbo-stream>\";\n }\n get beforeRenderEvent() {\n return new CustomEvent(\"turbo:before-stream-render\", {\n bubbles: true,\n cancelable: true,\n detail: { newStream: this, render: StreamElement.renderElement },\n });\n }\n get targetElementsById() {\n var _a;\n const element = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.getElementById(this.target);\n if (element !== null) {\n return [element];\n }\n else {\n return [];\n }\n }\n get targetElementsByQuery() {\n var _a;\n const elements = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.querySelectorAll(this.targets);\n if (elements.length !== 0) {\n return Array.prototype.slice.call(elements);\n }\n else {\n return [];\n }\n }\n}\n\nclass StreamSourceElement extends HTMLElement {\n constructor() {\n super(...arguments);\n this.streamSource = null;\n }\n connectedCallback() {\n this.streamSource = this.src.match(/^ws{1,2}:/) ? new WebSocket(this.src) : new EventSource(this.src);\n connectStreamSource(this.streamSource);\n }\n disconnectedCallback() {\n if (this.streamSource) {\n disconnectStreamSource(this.streamSource);\n }\n }\n get src() {\n return this.getAttribute(\"src\") || \"\";\n }\n}\n\nFrameElement.delegateConstructor = FrameController;\nif (customElements.get(\"turbo-frame\") === undefined) {\n customElements.define(\"turbo-frame\", FrameElement);\n}\nif (customElements.get(\"turbo-stream\") === undefined) {\n customElements.define(\"turbo-stream\", StreamElement);\n}\nif (customElements.get(\"turbo-stream-source\") === undefined) {\n customElements.define(\"turbo-stream-source\", StreamSourceElement);\n}\n\n(() => {\n let element = document.currentScript;\n if (!element)\n return;\n if (element.hasAttribute(\"data-turbo-suppress-warning\"))\n return;\n element = element.parentElement;\n while (element) {\n if (element == document.body) {\n return console.warn(unindent `\n You are loading Turbo from a <script> element inside the <body> element. This is probably not what you meant to do!\n\n Load your application\u2019s JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change.\n\n For more information, see: https://turbo.hotwired.dev/handbook/building#working-with-script-elements\n\n \u2014\u2014\n Suppress this warning by adding a \"data-turbo-suppress-warning\" attribute to: %s\n `, element.outerHTML);\n }\n element = element.parentElement;\n }\n})();\n\nwindow.Turbo = Turbo;\nstart();\n\nexport { FrameElement, FrameLoadingStyle, FrameRenderer, PageRenderer, PageSnapshot, StreamActions, StreamElement, StreamSourceElement, cache, clearCache, connectStreamSource, disconnectStreamSource, navigator$1 as navigator, registerAdapter, renderStreamMessage, session, setConfirmMethod, setFormMode, setProgressBarDelay, start, visit };\n", "let consumer\n\nexport async function getConsumer() {\n return consumer || setConsumer(createConsumer().then(setConsumer))\n}\n\nexport function setConsumer(newConsumer) {\n return consumer = newConsumer\n}\n\nexport async function createConsumer() {\n const { createConsumer } = await import(/* webpackChunkName: \"actioncable\" */ \"@rails/actioncable/src\")\n return createConsumer()\n}\n\nexport async function subscribeTo(channel, mixin) {\n const { subscriptions } = await getConsumer()\n return subscriptions.create(channel, mixin)\n}\n", "// Based on https://github.com/nathan7/snakeize\n//\n// This software is released under the MIT license:\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\nexport default function walk (obj) {\n if (!obj || typeof obj !== 'object') return obj;\n if (obj instanceof Date || obj instanceof RegExp) return obj;\n if (Array.isArray(obj)) return obj.map(walk);\n return Object.keys(obj).reduce(function (acc, key) {\n var camel = key[0].toLowerCase() + key.slice(1).replace(/([A-Z]+)/g, function (m, x) {\n return '_' + x.toLowerCase();\n });\n acc[camel] = walk(obj[key]);\n return acc;\n }, {});\n};", "import { connectStreamSource, disconnectStreamSource } from \"@hotwired/turbo\"\nimport { subscribeTo } from \"./cable\"\nimport snakeize from \"./snakeize\"\n\nclass TurboCableStreamSourceElement extends HTMLElement {\n async connectedCallback() {\n connectStreamSource(this)\n this.subscription = await subscribeTo(this.channel, {\n received: this.dispatchMessageEvent.bind(this),\n connected: this.subscriptionConnected.bind(this),\n disconnected: this.subscriptionDisconnected.bind(this)\n })\n }\n\n disconnectedCallback() {\n disconnectStreamSource(this)\n if (this.subscription) this.subscription.unsubscribe()\n }\n\n dispatchMessageEvent(data) {\n const event = new MessageEvent(\"message\", { data })\n return this.dispatchEvent(event)\n }\n\n subscriptionConnected() {\n this.setAttribute(\"connected\", \"\")\n }\n\n subscriptionDisconnected() {\n this.removeAttribute(\"connected\")\n }\n\n get channel() {\n const channel = this.getAttribute(\"channel\")\n const signed_stream_name = this.getAttribute(\"signed-stream-name\")\n return { channel, signed_stream_name, ...snakeize({ ...this.dataset }) }\n }\n}\n\n\nif (customElements.get(\"turbo-cable-stream-source\") === undefined) {\n customElements.define(\"turbo-cable-stream-source\", TurboCableStreamSourceElement)\n}\n", "export function encodeMethodIntoRequestBody(event) {\n if (event.target instanceof HTMLFormElement) {\n const { target: form, detail: { fetchOptions } } = event\n\n form.addEventListener(\"turbo:submit-start\", ({ detail: { formSubmission: { submitter } } }) => {\n const body = isBodyInit(fetchOptions.body) ? fetchOptions.body : new URLSearchParams()\n const method = determineFetchMethod(submitter, body, form)\n\n if (!/get/i.test(method)) {\n if (/post/i.test(method)) {\n body.delete(\"_method\")\n } else {\n body.set(\"_method\", method)\n }\n\n fetchOptions.method = \"post\"\n }\n }, { once: true })\n }\n}\n\nfunction determineFetchMethod(submitter, body, form) {\n const formMethod = determineFormMethod(submitter)\n const overrideMethod = body.get(\"_method\")\n const method = form.getAttribute(\"method\") || \"get\"\n\n if (typeof formMethod == \"string\") {\n return formMethod\n } else if (typeof overrideMethod == \"string\") {\n return overrideMethod\n } else {\n return method\n }\n}\n\nfunction determineFormMethod(submitter) {\n if (submitter instanceof HTMLButtonElement || submitter instanceof HTMLInputElement) {\n if (submitter.hasAttribute(\"formmethod\")) {\n return submitter.formMethod\n } else {\n return null\n }\n } else {\n return null\n }\n}\n\nfunction isBodyInit(body) {\n return body instanceof FormData || body instanceof URLSearchParams\n}\n", "import \"./cable_stream_source_element\"\n\nimport * as Turbo from \"@hotwired/turbo\"\nexport { Turbo }\n\nimport * as cable from \"./cable\"\nexport { cable }\n\nimport { encodeMethodIntoRequestBody } from \"./fetch_requests\"\n\naddEventListener(\"turbo:before-fetch-request\", encodeMethodIntoRequestBody)\n", "/*\nStimulus 3.2.1\nCopyright \u00A9 2023 Basecamp, LLC\n */\nclass EventListener {\n constructor(eventTarget, eventName, eventOptions) {\n this.eventTarget = eventTarget;\n this.eventName = eventName;\n this.eventOptions = eventOptions;\n this.unorderedBindings = new Set();\n }\n connect() {\n this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);\n }\n disconnect() {\n this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);\n }\n bindingConnected(binding) {\n this.unorderedBindings.add(binding);\n }\n bindingDisconnected(binding) {\n this.unorderedBindings.delete(binding);\n }\n handleEvent(event) {\n const extendedEvent = extendEvent(event);\n for (const binding of this.bindings) {\n if (extendedEvent.immediatePropagationStopped) {\n break;\n }\n else {\n binding.handleEvent(extendedEvent);\n }\n }\n }\n hasBindings() {\n return this.unorderedBindings.size > 0;\n }\n get bindings() {\n return Array.from(this.unorderedBindings).sort((left, right) => {\n const leftIndex = left.index, rightIndex = right.index;\n return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n });\n }\n}\nfunction extendEvent(event) {\n if (\"immediatePropagationStopped\" in event) {\n return event;\n }\n else {\n const { stopImmediatePropagation } = event;\n return Object.assign(event, {\n immediatePropagationStopped: false,\n stopImmediatePropagation() {\n this.immediatePropagationStopped = true;\n stopImmediatePropagation.call(this);\n },\n });\n }\n}\n\nclass Dispatcher {\n constructor(application) {\n this.application = application;\n this.eventListenerMaps = new Map();\n this.started = false;\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.eventListeners.forEach((eventListener) => eventListener.connect());\n }\n }\n stop() {\n if (this.started) {\n this.started = false;\n this.eventListeners.forEach((eventListener) => eventListener.disconnect());\n }\n }\n get eventListeners() {\n return Array.from(this.eventListenerMaps.values()).reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n }\n bindingConnected(binding) {\n this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n }\n bindingDisconnected(binding, clearEventListeners = false) {\n this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n if (clearEventListeners)\n this.clearEventListenersForBinding(binding);\n }\n handleError(error, message, detail = {}) {\n this.application.handleError(error, `Error ${message}`, detail);\n }\n clearEventListenersForBinding(binding) {\n const eventListener = this.fetchEventListenerForBinding(binding);\n if (!eventListener.hasBindings()) {\n eventListener.disconnect();\n this.removeMappedEventListenerFor(binding);\n }\n }\n removeMappedEventListenerFor(binding) {\n const { eventTarget, eventName, eventOptions } = binding;\n const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n const cacheKey = this.cacheKey(eventName, eventOptions);\n eventListenerMap.delete(cacheKey);\n if (eventListenerMap.size == 0)\n this.eventListenerMaps.delete(eventTarget);\n }\n fetchEventListenerForBinding(binding) {\n const { eventTarget, eventName, eventOptions } = binding;\n return this.fetchEventListener(eventTarget, eventName, eventOptions);\n }\n fetchEventListener(eventTarget, eventName, eventOptions) {\n const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n const cacheKey = this.cacheKey(eventName, eventOptions);\n let eventListener = eventListenerMap.get(cacheKey);\n if (!eventListener) {\n eventListener = this.createEventListener(eventTarget, eventName, eventOptions);\n eventListenerMap.set(cacheKey, eventListener);\n }\n return eventListener;\n }\n createEventListener(eventTarget, eventName, eventOptions) {\n const eventListener = new EventListener(eventTarget, eventName, eventOptions);\n if (this.started) {\n eventListener.connect();\n }\n return eventListener;\n }\n fetchEventListenerMapForEventTarget(eventTarget) {\n let eventListenerMap = this.eventListenerMaps.get(eventTarget);\n if (!eventListenerMap) {\n eventListenerMap = new Map();\n this.eventListenerMaps.set(eventTarget, eventListenerMap);\n }\n return eventListenerMap;\n }\n cacheKey(eventName, eventOptions) {\n const parts = [eventName];\n Object.keys(eventOptions)\n .sort()\n .forEach((key) => {\n parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n });\n return parts.join(\":\");\n }\n}\n\nconst defaultActionDescriptorFilters = {\n stop({ event, value }) {\n if (value)\n event.stopPropagation();\n return true;\n },\n prevent({ event, value }) {\n if (value)\n event.preventDefault();\n return true;\n },\n self({ event, value, element }) {\n if (value) {\n return element === event.target;\n }\n else {\n return true;\n }\n },\n};\nconst descriptorPattern = /^(?:(?:([^.]+?)\\+)?(.+?)(?:\\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/;\nfunction parseActionDescriptorString(descriptorString) {\n const source = descriptorString.trim();\n const matches = source.match(descriptorPattern) || [];\n let eventName = matches[2];\n let keyFilter = matches[3];\n if (keyFilter && ![\"keydown\", \"keyup\", \"keypress\"].includes(eventName)) {\n eventName += `.${keyFilter}`;\n keyFilter = \"\";\n }\n return {\n eventTarget: parseEventTarget(matches[4]),\n eventName,\n eventOptions: matches[7] ? parseEventOptions(matches[7]) : {},\n identifier: matches[5],\n methodName: matches[6],\n keyFilter: matches[1] || keyFilter,\n };\n}\nfunction parseEventTarget(eventTargetName) {\n if (eventTargetName == \"window\") {\n return window;\n }\n else if (eventTargetName == \"document\") {\n return document;\n }\n}\nfunction parseEventOptions(eventOptions) {\n return eventOptions\n .split(\":\")\n .reduce((options, token) => Object.assign(options, { [token.replace(/^!/, \"\")]: !/^!/.test(token) }), {});\n}\nfunction stringifyEventTarget(eventTarget) {\n if (eventTarget == window) {\n return \"window\";\n }\n else if (eventTarget == document) {\n return \"document\";\n }\n}\n\nfunction camelize(value) {\n return value.replace(/(?:[_-])([a-z0-9])/g, (_, char) => char.toUpperCase());\n}\nfunction namespaceCamelize(value) {\n return camelize(value.replace(/--/g, \"-\").replace(/__/g, \"_\"));\n}\nfunction capitalize(value) {\n return value.charAt(0).toUpperCase() + value.slice(1);\n}\nfunction dasherize(value) {\n return value.replace(/([A-Z])/g, (_, char) => `-${char.toLowerCase()}`);\n}\nfunction tokenize(value) {\n return value.match(/[^\\s]+/g) || [];\n}\n\nfunction isSomething(object) {\n return object !== null && object !== undefined;\n}\nfunction hasProperty(object, property) {\n return Object.prototype.hasOwnProperty.call(object, property);\n}\n\nconst allModifiers = [\"meta\", \"ctrl\", \"alt\", \"shift\"];\nclass Action {\n constructor(element, index, descriptor, schema) {\n this.element = element;\n this.index = index;\n this.eventTarget = descriptor.eventTarget || element;\n this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n this.eventOptions = descriptor.eventOptions || {};\n this.identifier = descriptor.identifier || error(\"missing identifier\");\n this.methodName = descriptor.methodName || error(\"missing method name\");\n this.keyFilter = descriptor.keyFilter || \"\";\n this.schema = schema;\n }\n static forToken(token, schema) {\n return new this(token.element, token.index, parseActionDescriptorString(token.content), schema);\n }\n toString() {\n const eventFilter = this.keyFilter ? `.${this.keyFilter}` : \"\";\n const eventTarget = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n return `${this.eventName}${eventFilter}${eventTarget}->${this.identifier}#${this.methodName}`;\n }\n shouldIgnoreKeyboardEvent(event) {\n if (!this.keyFilter) {\n return false;\n }\n const filters = this.keyFilter.split(\"+\");\n if (this.keyFilterDissatisfied(event, filters)) {\n return true;\n }\n const standardFilter = filters.filter((key) => !allModifiers.includes(key))[0];\n if (!standardFilter) {\n return false;\n }\n if (!hasProperty(this.keyMappings, standardFilter)) {\n error(`contains unknown key filter: ${this.keyFilter}`);\n }\n return this.keyMappings[standardFilter].toLowerCase() !== event.key.toLowerCase();\n }\n shouldIgnoreMouseEvent(event) {\n if (!this.keyFilter) {\n return false;\n }\n const filters = [this.keyFilter];\n if (this.keyFilterDissatisfied(event, filters)) {\n return true;\n }\n return false;\n }\n get params() {\n const params = {};\n const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`, \"i\");\n for (const { name, value } of Array.from(this.element.attributes)) {\n const match = name.match(pattern);\n const key = match && match[1];\n if (key) {\n params[camelize(key)] = typecast(value);\n }\n }\n return params;\n }\n get eventTargetName() {\n return stringifyEventTarget(this.eventTarget);\n }\n get keyMappings() {\n return this.schema.keyMappings;\n }\n keyFilterDissatisfied(event, filters) {\n const [meta, ctrl, alt, shift] = allModifiers.map((modifier) => filters.includes(modifier));\n return event.metaKey !== meta || event.ctrlKey !== ctrl || event.altKey !== alt || event.shiftKey !== shift;\n }\n}\nconst defaultEventNames = {\n a: () => \"click\",\n button: () => \"click\",\n form: () => \"submit\",\n details: () => \"toggle\",\n input: (e) => (e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\"),\n select: () => \"change\",\n textarea: () => \"input\",\n};\nfunction getDefaultEventNameForElement(element) {\n const tagName = element.tagName.toLowerCase();\n if (tagName in defaultEventNames) {\n return defaultEventNames[tagName](element);\n }\n}\nfunction error(message) {\n throw new Error(message);\n}\nfunction typecast(value) {\n try {\n return JSON.parse(value);\n }\n catch (o_O) {\n return value;\n }\n}\n\nclass Binding {\n constructor(context, action) {\n this.context = context;\n this.action = action;\n }\n get index() {\n return this.action.index;\n }\n get eventTarget() {\n return this.action.eventTarget;\n }\n get eventOptions() {\n return this.action.eventOptions;\n }\n get identifier() {\n return this.context.identifier;\n }\n handleEvent(event) {\n const actionEvent = this.prepareActionEvent(event);\n if (this.willBeInvokedByEvent(event) && this.applyEventModifiers(actionEvent)) {\n this.invokeWithEvent(actionEvent);\n }\n }\n get eventName() {\n return this.action.eventName;\n }\n get method() {\n const method = this.controller[this.methodName];\n if (typeof method == \"function\") {\n return method;\n }\n throw new Error(`Action \"${this.action}\" references undefined method \"${this.methodName}\"`);\n }\n applyEventModifiers(event) {\n const { element } = this.action;\n const { actionDescriptorFilters } = this.context.application;\n const { controller } = this.context;\n let passes = true;\n for (const [name, value] of Object.entries(this.eventOptions)) {\n if (name in actionDescriptorFilters) {\n const filter = actionDescriptorFilters[name];\n passes = passes && filter({ name, value, event, element, controller });\n }\n else {\n continue;\n }\n }\n return passes;\n }\n prepareActionEvent(event) {\n return Object.assign(event, { params: this.action.params });\n }\n invokeWithEvent(event) {\n const { target, currentTarget } = event;\n try {\n this.method.call(this.controller, event);\n this.context.logDebugActivity(this.methodName, { event, target, currentTarget, action: this.methodName });\n }\n catch (error) {\n const { identifier, controller, element, index } = this;\n const detail = { identifier, controller, element, index, event };\n this.context.handleError(error, `invoking action \"${this.action}\"`, detail);\n }\n }\n willBeInvokedByEvent(event) {\n const eventTarget = event.target;\n if (event instanceof KeyboardEvent && this.action.shouldIgnoreKeyboardEvent(event)) {\n return false;\n }\n if (event instanceof MouseEvent && this.action.shouldIgnoreMouseEvent(event)) {\n return false;\n }\n if (this.element === eventTarget) {\n return true;\n }\n else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n return this.scope.containsElement(eventTarget);\n }\n else {\n return this.scope.containsElement(this.action.element);\n }\n }\n get controller() {\n return this.context.controller;\n }\n get methodName() {\n return this.action.methodName;\n }\n get element() {\n return this.scope.element;\n }\n get scope() {\n return this.context.scope;\n }\n}\n\nclass ElementObserver {\n constructor(element, delegate) {\n this.mutationObserverInit = { attributes: true, childList: true, subtree: true };\n this.element = element;\n this.started = false;\n this.delegate = delegate;\n this.elements = new Set();\n this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, this.mutationObserverInit);\n this.refresh();\n }\n }\n pause(callback) {\n if (this.started) {\n this.mutationObserver.disconnect();\n this.started = false;\n }\n callback();\n if (!this.started) {\n this.mutationObserver.observe(this.element, this.mutationObserverInit);\n this.started = true;\n }\n }\n stop() {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n }\n refresh() {\n if (this.started) {\n const matches = new Set(this.matchElementsInTree());\n for (const element of Array.from(this.elements)) {\n if (!matches.has(element)) {\n this.removeElement(element);\n }\n }\n for (const element of Array.from(matches)) {\n this.addElement(element);\n }\n }\n }\n processMutations(mutations) {\n if (this.started) {\n for (const mutation of mutations) {\n this.processMutation(mutation);\n }\n }\n }\n processMutation(mutation) {\n if (mutation.type == \"attributes\") {\n this.processAttributeChange(mutation.target, mutation.attributeName);\n }\n else if (mutation.type == \"childList\") {\n this.processRemovedNodes(mutation.removedNodes);\n this.processAddedNodes(mutation.addedNodes);\n }\n }\n processAttributeChange(element, attributeName) {\n if (this.elements.has(element)) {\n if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n this.delegate.elementAttributeChanged(element, attributeName);\n }\n else {\n this.removeElement(element);\n }\n }\n else if (this.matchElement(element)) {\n this.addElement(element);\n }\n }\n processRemovedNodes(nodes) {\n for (const node of Array.from(nodes)) {\n const element = this.elementFromNode(node);\n if (element) {\n this.processTree(element, this.removeElement);\n }\n }\n }\n processAddedNodes(nodes) {\n for (const node of Array.from(nodes)) {\n const element = this.elementFromNode(node);\n if (element && this.elementIsActive(element)) {\n this.processTree(element, this.addElement);\n }\n }\n }\n matchElement(element) {\n return this.delegate.matchElement(element);\n }\n matchElementsInTree(tree = this.element) {\n return this.delegate.matchElementsInTree(tree);\n }\n processTree(tree, processor) {\n for (const element of this.matchElementsInTree(tree)) {\n processor.call(this, element);\n }\n }\n elementFromNode(node) {\n if (node.nodeType == Node.ELEMENT_NODE) {\n return node;\n }\n }\n elementIsActive(element) {\n if (element.isConnected != this.element.isConnected) {\n return false;\n }\n else {\n return this.element.contains(element);\n }\n }\n addElement(element) {\n if (!this.elements.has(element)) {\n if (this.elementIsActive(element)) {\n this.elements.add(element);\n if (this.delegate.elementMatched) {\n this.delegate.elementMatched(element);\n }\n }\n }\n }\n removeElement(element) {\n if (this.elements.has(element)) {\n this.elements.delete(element);\n if (this.delegate.elementUnmatched) {\n this.delegate.elementUnmatched(element);\n }\n }\n }\n}\n\nclass AttributeObserver {\n constructor(element, attributeName, delegate) {\n this.attributeName = attributeName;\n this.delegate = delegate;\n this.elementObserver = new ElementObserver(element, this);\n }\n get element() {\n return this.elementObserver.element;\n }\n get selector() {\n return `[${this.attributeName}]`;\n }\n start() {\n this.elementObserver.start();\n }\n pause(callback) {\n this.elementObserver.pause(callback);\n }\n stop() {\n this.elementObserver.stop();\n }\n refresh() {\n this.elementObserver.refresh();\n }\n get started() {\n return this.elementObserver.started;\n }\n matchElement(element) {\n return element.hasAttribute(this.attributeName);\n }\n matchElementsInTree(tree) {\n const match = this.matchElement(tree) ? [tree] : [];\n const matches = Array.from(tree.querySelectorAll(this.selector));\n return match.concat(matches);\n }\n elementMatched(element) {\n if (this.delegate.elementMatchedAttribute) {\n this.delegate.elementMatchedAttribute(element, this.attributeName);\n }\n }\n elementUnmatched(element) {\n if (this.delegate.elementUnmatchedAttribute) {\n this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n }\n }\n elementAttributeChanged(element, attributeName) {\n if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n this.delegate.elementAttributeValueChanged(element, attributeName);\n }\n }\n}\n\nfunction add(map, key, value) {\n fetch(map, key).add(value);\n}\nfunction del(map, key, value) {\n fetch(map, key).delete(value);\n prune(map, key);\n}\nfunction fetch(map, key) {\n let values = map.get(key);\n if (!values) {\n values = new Set();\n map.set(key, values);\n }\n return values;\n}\nfunction prune(map, key) {\n const values = map.get(key);\n if (values != null && values.size == 0) {\n map.delete(key);\n }\n}\n\nclass Multimap {\n constructor() {\n this.valuesByKey = new Map();\n }\n get keys() {\n return Array.from(this.valuesByKey.keys());\n }\n get values() {\n const sets = Array.from(this.valuesByKey.values());\n return sets.reduce((values, set) => values.concat(Array.from(set)), []);\n }\n get size() {\n const sets = Array.from(this.valuesByKey.values());\n return sets.reduce((size, set) => size + set.size, 0);\n }\n add(key, value) {\n add(this.valuesByKey, key, value);\n }\n delete(key, value) {\n del(this.valuesByKey, key, value);\n }\n has(key, value) {\n const values = this.valuesByKey.get(key);\n return values != null && values.has(value);\n }\n hasKey(key) {\n return this.valuesByKey.has(key);\n }\n hasValue(value) {\n const sets = Array.from(this.valuesByKey.values());\n return sets.some((set) => set.has(value));\n }\n getValuesForKey(key) {\n const values = this.valuesByKey.get(key);\n return values ? Array.from(values) : [];\n }\n getKeysForValue(value) {\n return Array.from(this.valuesByKey)\n .filter(([_key, values]) => values.has(value))\n .map(([key, _values]) => key);\n }\n}\n\nclass IndexedMultimap extends Multimap {\n constructor() {\n super();\n this.keysByValue = new Map();\n }\n get values() {\n return Array.from(this.keysByValue.keys());\n }\n add(key, value) {\n super.add(key, value);\n add(this.keysByValue, value, key);\n }\n delete(key, value) {\n super.delete(key, value);\n del(this.keysByValue, value, key);\n }\n hasValue(value) {\n return this.keysByValue.has(value);\n }\n getKeysForValue(value) {\n const set = this.keysByValue.get(value);\n return set ? Array.from(set) : [];\n }\n}\n\nclass SelectorObserver {\n constructor(element, selector, delegate, details) {\n this._selector = selector;\n this.details = details;\n this.elementObserver = new ElementObserver(element, this);\n this.delegate = delegate;\n this.matchesByElement = new Multimap();\n }\n get started() {\n return this.elementObserver.started;\n }\n get selector() {\n return this._selector;\n }\n set selector(selector) {\n this._selector = selector;\n this.refresh();\n }\n start() {\n this.elementObserver.start();\n }\n pause(callback) {\n this.elementObserver.pause(callback);\n }\n stop() {\n this.elementObserver.stop();\n }\n refresh() {\n this.elementObserver.refresh();\n }\n get element() {\n return this.elementObserver.element;\n }\n matchElement(element) {\n const { selector } = this;\n if (selector) {\n const matches = element.matches(selector);\n if (this.delegate.selectorMatchElement) {\n return matches && this.delegate.selectorMatchElement(element, this.details);\n }\n return matches;\n }\n else {\n return false;\n }\n }\n matchElementsInTree(tree) {\n const { selector } = this;\n if (selector) {\n const match = this.matchElement(tree) ? [tree] : [];\n const matches = Array.from(tree.querySelectorAll(selector)).filter((match) => this.matchElement(match));\n return match.concat(matches);\n }\n else {\n return [];\n }\n }\n elementMatched(element) {\n const { selector } = this;\n if (selector) {\n this.selectorMatched(element, selector);\n }\n }\n elementUnmatched(element) {\n const selectors = this.matchesByElement.getKeysForValue(element);\n for (const selector of selectors) {\n this.selectorUnmatched(element, selector);\n }\n }\n elementAttributeChanged(element, _attributeName) {\n const { selector } = this;\n if (selector) {\n const matches = this.matchElement(element);\n const matchedBefore = this.matchesByElement.has(selector, element);\n if (matches && !matchedBefore) {\n this.selectorMatched(element, selector);\n }\n else if (!matches && matchedBefore) {\n this.selectorUnmatched(element, selector);\n }\n }\n }\n selectorMatched(element, selector) {\n this.delegate.selectorMatched(element, selector, this.details);\n this.matchesByElement.add(selector, element);\n }\n selectorUnmatched(element, selector) {\n this.delegate.selectorUnmatched(element, selector, this.details);\n this.matchesByElement.delete(selector, element);\n }\n}\n\nclass StringMapObserver {\n constructor(element, delegate) {\n this.element = element;\n this.delegate = delegate;\n this.started = false;\n this.stringMap = new Map();\n this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, { attributes: true, attributeOldValue: true });\n this.refresh();\n }\n }\n stop() {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n }\n refresh() {\n if (this.started) {\n for (const attributeName of this.knownAttributeNames) {\n this.refreshAttribute(attributeName, null);\n }\n }\n }\n processMutations(mutations) {\n if (this.started) {\n for (const mutation of mutations) {\n this.processMutation(mutation);\n }\n }\n }\n processMutation(mutation) {\n const attributeName = mutation.attributeName;\n if (attributeName) {\n this.refreshAttribute(attributeName, mutation.oldValue);\n }\n }\n refreshAttribute(attributeName, oldValue) {\n const key = this.delegate.getStringMapKeyForAttribute(attributeName);\n if (key != null) {\n if (!this.stringMap.has(attributeName)) {\n this.stringMapKeyAdded(key, attributeName);\n }\n const value = this.element.getAttribute(attributeName);\n if (this.stringMap.get(attributeName) != value) {\n this.stringMapValueChanged(value, key, oldValue);\n }\n if (value == null) {\n const oldValue = this.stringMap.get(attributeName);\n this.stringMap.delete(attributeName);\n if (oldValue)\n this.stringMapKeyRemoved(key, attributeName, oldValue);\n }\n else {\n this.stringMap.set(attributeName, value);\n }\n }\n }\n stringMapKeyAdded(key, attributeName) {\n if (this.delegate.stringMapKeyAdded) {\n this.delegate.stringMapKeyAdded(key, attributeName);\n }\n }\n stringMapValueChanged(value, key, oldValue) {\n if (this.delegate.stringMapValueChanged) {\n this.delegate.stringMapValueChanged(value, key, oldValue);\n }\n }\n stringMapKeyRemoved(key, attributeName, oldValue) {\n if (this.delegate.stringMapKeyRemoved) {\n this.delegate.stringMapKeyRemoved(key, attributeName, oldValue);\n }\n }\n get knownAttributeNames() {\n return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)));\n }\n get currentAttributeNames() {\n return Array.from(this.element.attributes).map((attribute) => attribute.name);\n }\n get recordedAttributeNames() {\n return Array.from(this.stringMap.keys());\n }\n}\n\nclass TokenListObserver {\n constructor(element, attributeName, delegate) {\n this.attributeObserver = new AttributeObserver(element, attributeName, this);\n this.delegate = delegate;\n this.tokensByElement = new Multimap();\n }\n get started() {\n return this.attributeObserver.started;\n }\n start() {\n this.attributeObserver.start();\n }\n pause(callback) {\n this.attributeObserver.pause(callback);\n }\n stop() {\n this.attributeObserver.stop();\n }\n refresh() {\n this.attributeObserver.refresh();\n }\n get element() {\n return this.attributeObserver.element;\n }\n get attributeName() {\n return this.attributeObserver.attributeName;\n }\n elementMatchedAttribute(element) {\n this.tokensMatched(this.readTokensForElement(element));\n }\n elementAttributeValueChanged(element) {\n const [unmatchedTokens, matchedTokens] = this.refreshTokensForElement(element);\n this.tokensUnmatched(unmatchedTokens);\n this.tokensMatched(matchedTokens);\n }\n elementUnmatchedAttribute(element) {\n this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n }\n tokensMatched(tokens) {\n tokens.forEach((token) => this.tokenMatched(token));\n }\n tokensUnmatched(tokens) {\n tokens.forEach((token) => this.tokenUnmatched(token));\n }\n tokenMatched(token) {\n this.delegate.tokenMatched(token);\n this.tokensByElement.add(token.element, token);\n }\n tokenUnmatched(token) {\n this.delegate.tokenUnmatched(token);\n this.tokensByElement.delete(token.element, token);\n }\n refreshTokensForElement(element) {\n const previousTokens = this.tokensByElement.getValuesForKey(element);\n const currentTokens = this.readTokensForElement(element);\n const firstDifferingIndex = zip(previousTokens, currentTokens).findIndex(([previousToken, currentToken]) => !tokensAreEqual(previousToken, currentToken));\n if (firstDifferingIndex == -1) {\n return [[], []];\n }\n else {\n return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n }\n }\n readTokensForElement(element) {\n const attributeName = this.attributeName;\n const tokenString = element.getAttribute(attributeName) || \"\";\n return parseTokenString(tokenString, element, attributeName);\n }\n}\nfunction parseTokenString(tokenString, element, attributeName) {\n return tokenString\n .trim()\n .split(/\\s+/)\n .filter((content) => content.length)\n .map((content, index) => ({ element, attributeName, content, index }));\n}\nfunction zip(left, right) {\n const length = Math.max(left.length, right.length);\n return Array.from({ length }, (_, index) => [left[index], right[index]]);\n}\nfunction tokensAreEqual(left, right) {\n return left && right && left.index == right.index && left.content == right.content;\n}\n\nclass ValueListObserver {\n constructor(element, attributeName, delegate) {\n this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n this.delegate = delegate;\n this.parseResultsByToken = new WeakMap();\n this.valuesByTokenByElement = new WeakMap();\n }\n get started() {\n return this.tokenListObserver.started;\n }\n start() {\n this.tokenListObserver.start();\n }\n stop() {\n this.tokenListObserver.stop();\n }\n refresh() {\n this.tokenListObserver.refresh();\n }\n get element() {\n return this.tokenListObserver.element;\n }\n get attributeName() {\n return this.tokenListObserver.attributeName;\n }\n tokenMatched(token) {\n const { element } = token;\n const { value } = this.fetchParseResultForToken(token);\n if (value) {\n this.fetchValuesByTokenForElement(element).set(token, value);\n this.delegate.elementMatchedValue(element, value);\n }\n }\n tokenUnmatched(token) {\n const { element } = token;\n const { value } = this.fetchParseResultForToken(token);\n if (value) {\n this.fetchValuesByTokenForElement(element).delete(token);\n this.delegate.elementUnmatchedValue(element, value);\n }\n }\n fetchParseResultForToken(token) {\n let parseResult = this.parseResultsByToken.get(token);\n if (!parseResult) {\n parseResult = this.parseToken(token);\n this.parseResultsByToken.set(token, parseResult);\n }\n return parseResult;\n }\n fetchValuesByTokenForElement(element) {\n let valuesByToken = this.valuesByTokenByElement.get(element);\n if (!valuesByToken) {\n valuesByToken = new Map();\n this.valuesByTokenByElement.set(element, valuesByToken);\n }\n return valuesByToken;\n }\n parseToken(token) {\n try {\n const value = this.delegate.parseValueForToken(token);\n return { value };\n }\n catch (error) {\n return { error };\n }\n }\n}\n\nclass BindingObserver {\n constructor(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.bindingsByAction = new Map();\n }\n start() {\n if (!this.valueListObserver) {\n this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n this.valueListObserver.start();\n }\n }\n stop() {\n if (this.valueListObserver) {\n this.valueListObserver.stop();\n delete this.valueListObserver;\n this.disconnectAllActions();\n }\n }\n get element() {\n return this.context.element;\n }\n get identifier() {\n return this.context.identifier;\n }\n get actionAttribute() {\n return this.schema.actionAttribute;\n }\n get schema() {\n return this.context.schema;\n }\n get bindings() {\n return Array.from(this.bindingsByAction.values());\n }\n connectAction(action) {\n const binding = new Binding(this.context, action);\n this.bindingsByAction.set(action, binding);\n this.delegate.bindingConnected(binding);\n }\n disconnectAction(action) {\n const binding = this.bindingsByAction.get(action);\n if (binding) {\n this.bindingsByAction.delete(action);\n this.delegate.bindingDisconnected(binding);\n }\n }\n disconnectAllActions() {\n this.bindings.forEach((binding) => this.delegate.bindingDisconnected(binding, true));\n this.bindingsByAction.clear();\n }\n parseValueForToken(token) {\n const action = Action.forToken(token, this.schema);\n if (action.identifier == this.identifier) {\n return action;\n }\n }\n elementMatchedValue(element, action) {\n this.connectAction(action);\n }\n elementUnmatchedValue(element, action) {\n this.disconnectAction(action);\n }\n}\n\nclass ValueObserver {\n constructor(context, receiver) {\n this.context = context;\n this.receiver = receiver;\n this.stringMapObserver = new StringMapObserver(this.element, this);\n this.valueDescriptorMap = this.controller.valueDescriptorMap;\n }\n start() {\n this.stringMapObserver.start();\n this.invokeChangedCallbacksForDefaultValues();\n }\n stop() {\n this.stringMapObserver.stop();\n }\n get element() {\n return this.context.element;\n }\n get controller() {\n return this.context.controller;\n }\n getStringMapKeyForAttribute(attributeName) {\n if (attributeName in this.valueDescriptorMap) {\n return this.valueDescriptorMap[attributeName].name;\n }\n }\n stringMapKeyAdded(key, attributeName) {\n const descriptor = this.valueDescriptorMap[attributeName];\n if (!this.hasValue(key)) {\n this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), descriptor.writer(descriptor.defaultValue));\n }\n }\n stringMapValueChanged(value, name, oldValue) {\n const descriptor = this.valueDescriptorNameMap[name];\n if (value === null)\n return;\n if (oldValue === null) {\n oldValue = descriptor.writer(descriptor.defaultValue);\n }\n this.invokeChangedCallback(name, value, oldValue);\n }\n stringMapKeyRemoved(key, attributeName, oldValue) {\n const descriptor = this.valueDescriptorNameMap[key];\n if (this.hasValue(key)) {\n this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), oldValue);\n }\n else {\n this.invokeChangedCallback(key, descriptor.writer(descriptor.defaultValue), oldValue);\n }\n }\n invokeChangedCallbacksForDefaultValues() {\n for (const { key, name, defaultValue, writer } of this.valueDescriptors) {\n if (defaultValue != undefined && !this.controller.data.has(key)) {\n this.invokeChangedCallback(name, writer(defaultValue), undefined);\n }\n }\n }\n invokeChangedCallback(name, rawValue, rawOldValue) {\n const changedMethodName = `${name}Changed`;\n const changedMethod = this.receiver[changedMethodName];\n if (typeof changedMethod == \"function\") {\n const descriptor = this.valueDescriptorNameMap[name];\n try {\n const value = descriptor.reader(rawValue);\n let oldValue = rawOldValue;\n if (rawOldValue) {\n oldValue = descriptor.reader(rawOldValue);\n }\n changedMethod.call(this.receiver, value, oldValue);\n }\n catch (error) {\n if (error instanceof TypeError) {\n error.message = `Stimulus Value \"${this.context.identifier}.${descriptor.name}\" - ${error.message}`;\n }\n throw error;\n }\n }\n }\n get valueDescriptors() {\n const { valueDescriptorMap } = this;\n return Object.keys(valueDescriptorMap).map((key) => valueDescriptorMap[key]);\n }\n get valueDescriptorNameMap() {\n const descriptors = {};\n Object.keys(this.valueDescriptorMap).forEach((key) => {\n const descriptor = this.valueDescriptorMap[key];\n descriptors[descriptor.name] = descriptor;\n });\n return descriptors;\n }\n hasValue(attributeName) {\n const descriptor = this.valueDescriptorNameMap[attributeName];\n const hasMethodName = `has${capitalize(descriptor.name)}`;\n return this.receiver[hasMethodName];\n }\n}\n\nclass TargetObserver {\n constructor(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.targetsByName = new Multimap();\n }\n start() {\n if (!this.tokenListObserver) {\n this.tokenListObserver = new TokenListObserver(this.element, this.attributeName, this);\n this.tokenListObserver.start();\n }\n }\n stop() {\n if (this.tokenListObserver) {\n this.disconnectAllTargets();\n this.tokenListObserver.stop();\n delete this.tokenListObserver;\n }\n }\n tokenMatched({ element, content: name }) {\n if (this.scope.containsElement(element)) {\n this.connectTarget(element, name);\n }\n }\n tokenUnmatched({ element, content: name }) {\n this.disconnectTarget(element, name);\n }\n connectTarget(element, name) {\n var _a;\n if (!this.targetsByName.has(name, element)) {\n this.targetsByName.add(name, element);\n (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetConnected(element, name));\n }\n }\n disconnectTarget(element, name) {\n var _a;\n if (this.targetsByName.has(name, element)) {\n this.targetsByName.delete(name, element);\n (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetDisconnected(element, name));\n }\n }\n disconnectAllTargets() {\n for (const name of this.targetsByName.keys) {\n for (const element of this.targetsByName.getValuesForKey(name)) {\n this.disconnectTarget(element, name);\n }\n }\n }\n get attributeName() {\n return `data-${this.context.identifier}-target`;\n }\n get element() {\n return this.context.element;\n }\n get scope() {\n return this.context.scope;\n }\n}\n\nfunction readInheritableStaticArrayValues(constructor, propertyName) {\n const ancestors = getAncestorsForConstructor(constructor);\n return Array.from(ancestors.reduce((values, constructor) => {\n getOwnStaticArrayValues(constructor, propertyName).forEach((name) => values.add(name));\n return values;\n }, new Set()));\n}\nfunction readInheritableStaticObjectPairs(constructor, propertyName) {\n const ancestors = getAncestorsForConstructor(constructor);\n return ancestors.reduce((pairs, constructor) => {\n pairs.push(...getOwnStaticObjectPairs(constructor, propertyName));\n return pairs;\n }, []);\n}\nfunction getAncestorsForConstructor(constructor) {\n const ancestors = [];\n while (constructor) {\n ancestors.push(constructor);\n constructor = Object.getPrototypeOf(constructor);\n }\n return ancestors.reverse();\n}\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n const definition = constructor[propertyName];\n return Array.isArray(definition) ? definition : [];\n}\nfunction getOwnStaticObjectPairs(constructor, propertyName) {\n const definition = constructor[propertyName];\n return definition ? Object.keys(definition).map((key) => [key, definition[key]]) : [];\n}\n\nclass OutletObserver {\n constructor(context, delegate) {\n this.started = false;\n this.context = context;\n this.delegate = delegate;\n this.outletsByName = new Multimap();\n this.outletElementsByName = new Multimap();\n this.selectorObserverMap = new Map();\n this.attributeObserverMap = new Map();\n }\n start() {\n if (!this.started) {\n this.outletDefinitions.forEach((outletName) => {\n this.setupSelectorObserverForOutlet(outletName);\n this.setupAttributeObserverForOutlet(outletName);\n });\n this.started = true;\n this.dependentContexts.forEach((context) => context.refresh());\n }\n }\n refresh() {\n this.selectorObserverMap.forEach((observer) => observer.refresh());\n this.attributeObserverMap.forEach((observer) => observer.refresh());\n }\n stop() {\n if (this.started) {\n this.started = false;\n this.disconnectAllOutlets();\n this.stopSelectorObservers();\n this.stopAttributeObservers();\n }\n }\n stopSelectorObservers() {\n if (this.selectorObserverMap.size > 0) {\n this.selectorObserverMap.forEach((observer) => observer.stop());\n this.selectorObserverMap.clear();\n }\n }\n stopAttributeObservers() {\n if (this.attributeObserverMap.size > 0) {\n this.attributeObserverMap.forEach((observer) => observer.stop());\n this.attributeObserverMap.clear();\n }\n }\n selectorMatched(element, _selector, { outletName }) {\n const outlet = this.getOutlet(element, outletName);\n if (outlet) {\n this.connectOutlet(outlet, element, outletName);\n }\n }\n selectorUnmatched(element, _selector, { outletName }) {\n const outlet = this.getOutletFromMap(element, outletName);\n if (outlet) {\n this.disconnectOutlet(outlet, element, outletName);\n }\n }\n selectorMatchElement(element, { outletName }) {\n const selector = this.selector(outletName);\n const hasOutlet = this.hasOutlet(element, outletName);\n const hasOutletController = element.matches(`[${this.schema.controllerAttribute}~=${outletName}]`);\n if (selector) {\n return hasOutlet && hasOutletController && element.matches(selector);\n }\n else {\n return false;\n }\n }\n elementMatchedAttribute(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n elementAttributeValueChanged(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n elementUnmatchedAttribute(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n connectOutlet(outlet, element, outletName) {\n var _a;\n if (!this.outletElementsByName.has(outletName, element)) {\n this.outletsByName.add(outletName, outlet);\n this.outletElementsByName.add(outletName, element);\n (_a = this.selectorObserverMap.get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletConnected(outlet, element, outletName));\n }\n }\n disconnectOutlet(outlet, element, outletName) {\n var _a;\n if (this.outletElementsByName.has(outletName, element)) {\n this.outletsByName.delete(outletName, outlet);\n this.outletElementsByName.delete(outletName, element);\n (_a = this.selectorObserverMap\n .get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletDisconnected(outlet, element, outletName));\n }\n }\n disconnectAllOutlets() {\n for (const outletName of this.outletElementsByName.keys) {\n for (const element of this.outletElementsByName.getValuesForKey(outletName)) {\n for (const outlet of this.outletsByName.getValuesForKey(outletName)) {\n this.disconnectOutlet(outlet, element, outletName);\n }\n }\n }\n }\n updateSelectorObserverForOutlet(outletName) {\n const observer = this.selectorObserverMap.get(outletName);\n if (observer) {\n observer.selector = this.selector(outletName);\n }\n }\n setupSelectorObserverForOutlet(outletName) {\n const selector = this.selector(outletName);\n const selectorObserver = new SelectorObserver(document.body, selector, this, { outletName });\n this.selectorObserverMap.set(outletName, selectorObserver);\n selectorObserver.start();\n }\n setupAttributeObserverForOutlet(outletName) {\n const attributeName = this.attributeNameForOutletName(outletName);\n const attributeObserver = new AttributeObserver(this.scope.element, attributeName, this);\n this.attributeObserverMap.set(outletName, attributeObserver);\n attributeObserver.start();\n }\n selector(outletName) {\n return this.scope.outlets.getSelectorForOutletName(outletName);\n }\n attributeNameForOutletName(outletName) {\n return this.scope.schema.outletAttributeForScope(this.identifier, outletName);\n }\n getOutletNameFromOutletAttributeName(attributeName) {\n return this.outletDefinitions.find((outletName) => this.attributeNameForOutletName(outletName) === attributeName);\n }\n get outletDependencies() {\n const dependencies = new Multimap();\n this.router.modules.forEach((module) => {\n const constructor = module.definition.controllerConstructor;\n const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n outlets.forEach((outlet) => dependencies.add(outlet, module.identifier));\n });\n return dependencies;\n }\n get outletDefinitions() {\n return this.outletDependencies.getKeysForValue(this.identifier);\n }\n get dependentControllerIdentifiers() {\n return this.outletDependencies.getValuesForKey(this.identifier);\n }\n get dependentContexts() {\n const identifiers = this.dependentControllerIdentifiers;\n return this.router.contexts.filter((context) => identifiers.includes(context.identifier));\n }\n hasOutlet(element, outletName) {\n return !!this.getOutlet(element, outletName) || !!this.getOutletFromMap(element, outletName);\n }\n getOutlet(element, outletName) {\n return this.application.getControllerForElementAndIdentifier(element, outletName);\n }\n getOutletFromMap(element, outletName) {\n return this.outletsByName.getValuesForKey(outletName).find((outlet) => outlet.element === element);\n }\n get scope() {\n return this.context.scope;\n }\n get schema() {\n return this.context.schema;\n }\n get identifier() {\n return this.context.identifier;\n }\n get application() {\n return this.context.application;\n }\n get router() {\n return this.application.router;\n }\n}\n\nclass Context {\n constructor(module, scope) {\n this.logDebugActivity = (functionName, detail = {}) => {\n const { identifier, controller, element } = this;\n detail = Object.assign({ identifier, controller, element }, detail);\n this.application.logDebugActivity(this.identifier, functionName, detail);\n };\n this.module = module;\n this.scope = scope;\n this.controller = new module.controllerConstructor(this);\n this.bindingObserver = new BindingObserver(this, this.dispatcher);\n this.valueObserver = new ValueObserver(this, this.controller);\n this.targetObserver = new TargetObserver(this, this);\n this.outletObserver = new OutletObserver(this, this);\n try {\n this.controller.initialize();\n this.logDebugActivity(\"initialize\");\n }\n catch (error) {\n this.handleError(error, \"initializing controller\");\n }\n }\n connect() {\n this.bindingObserver.start();\n this.valueObserver.start();\n this.targetObserver.start();\n this.outletObserver.start();\n try {\n this.controller.connect();\n this.logDebugActivity(\"connect\");\n }\n catch (error) {\n this.handleError(error, \"connecting controller\");\n }\n }\n refresh() {\n this.outletObserver.refresh();\n }\n disconnect() {\n try {\n this.controller.disconnect();\n this.logDebugActivity(\"disconnect\");\n }\n catch (error) {\n this.handleError(error, \"disconnecting controller\");\n }\n this.outletObserver.stop();\n this.targetObserver.stop();\n this.valueObserver.stop();\n this.bindingObserver.stop();\n }\n get application() {\n return this.module.application;\n }\n get identifier() {\n return this.module.identifier;\n }\n get schema() {\n return this.application.schema;\n }\n get dispatcher() {\n return this.application.dispatcher;\n }\n get element() {\n return this.scope.element;\n }\n get parentElement() {\n return this.element.parentElement;\n }\n handleError(error, message, detail = {}) {\n const { identifier, controller, element } = this;\n detail = Object.assign({ identifier, controller, element }, detail);\n this.application.handleError(error, `Error ${message}`, detail);\n }\n targetConnected(element, name) {\n this.invokeControllerMethod(`${name}TargetConnected`, element);\n }\n targetDisconnected(element, name) {\n this.invokeControllerMethod(`${name}TargetDisconnected`, element);\n }\n outletConnected(outlet, element, name) {\n this.invokeControllerMethod(`${namespaceCamelize(name)}OutletConnected`, outlet, element);\n }\n outletDisconnected(outlet, element, name) {\n this.invokeControllerMethod(`${namespaceCamelize(name)}OutletDisconnected`, outlet, element);\n }\n invokeControllerMethod(methodName, ...args) {\n const controller = this.controller;\n if (typeof controller[methodName] == \"function\") {\n controller[methodName](...args);\n }\n }\n}\n\nfunction bless(constructor) {\n return shadow(constructor, getBlessedProperties(constructor));\n}\nfunction shadow(constructor, properties) {\n const shadowConstructor = extend(constructor);\n const shadowProperties = getShadowProperties(constructor.prototype, properties);\n Object.defineProperties(shadowConstructor.prototype, shadowProperties);\n return shadowConstructor;\n}\nfunction getBlessedProperties(constructor) {\n const blessings = readInheritableStaticArrayValues(constructor, \"blessings\");\n return blessings.reduce((blessedProperties, blessing) => {\n const properties = blessing(constructor);\n for (const key in properties) {\n const descriptor = blessedProperties[key] || {};\n blessedProperties[key] = Object.assign(descriptor, properties[key]);\n }\n return blessedProperties;\n }, {});\n}\nfunction getShadowProperties(prototype, properties) {\n return getOwnKeys(properties).reduce((shadowProperties, key) => {\n const descriptor = getShadowedDescriptor(prototype, properties, key);\n if (descriptor) {\n Object.assign(shadowProperties, { [key]: descriptor });\n }\n return shadowProperties;\n }, {});\n}\nfunction getShadowedDescriptor(prototype, properties, key) {\n const shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key);\n const shadowedByValue = shadowingDescriptor && \"value\" in shadowingDescriptor;\n if (!shadowedByValue) {\n const descriptor = Object.getOwnPropertyDescriptor(properties, key).value;\n if (shadowingDescriptor) {\n descriptor.get = shadowingDescriptor.get || descriptor.get;\n descriptor.set = shadowingDescriptor.set || descriptor.set;\n }\n return descriptor;\n }\n}\nconst getOwnKeys = (() => {\n if (typeof Object.getOwnPropertySymbols == \"function\") {\n return (object) => [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)];\n }\n else {\n return Object.getOwnPropertyNames;\n }\n})();\nconst extend = (() => {\n function extendWithReflect(constructor) {\n function extended() {\n return Reflect.construct(constructor, arguments, new.target);\n }\n extended.prototype = Object.create(constructor.prototype, {\n constructor: { value: extended },\n });\n Reflect.setPrototypeOf(extended, constructor);\n return extended;\n }\n function testReflectExtension() {\n const a = function () {\n this.a.call(this);\n };\n const b = extendWithReflect(a);\n b.prototype.a = function () { };\n return new b();\n }\n try {\n testReflectExtension();\n return extendWithReflect;\n }\n catch (error) {\n return (constructor) => class extended extends constructor {\n };\n }\n})();\n\nfunction blessDefinition(definition) {\n return {\n identifier: definition.identifier,\n controllerConstructor: bless(definition.controllerConstructor),\n };\n}\n\nclass Module {\n constructor(application, definition) {\n this.application = application;\n this.definition = blessDefinition(definition);\n this.contextsByScope = new WeakMap();\n this.connectedContexts = new Set();\n }\n get identifier() {\n return this.definition.identifier;\n }\n get controllerConstructor() {\n return this.definition.controllerConstructor;\n }\n get contexts() {\n return Array.from(this.connectedContexts);\n }\n connectContextForScope(scope) {\n const context = this.fetchContextForScope(scope);\n this.connectedContexts.add(context);\n context.connect();\n }\n disconnectContextForScope(scope) {\n const context = this.contextsByScope.get(scope);\n if (context) {\n this.connectedContexts.delete(context);\n context.disconnect();\n }\n }\n fetchContextForScope(scope) {\n let context = this.contextsByScope.get(scope);\n if (!context) {\n context = new Context(this, scope);\n this.contextsByScope.set(scope, context);\n }\n return context;\n }\n}\n\nclass ClassMap {\n constructor(scope) {\n this.scope = scope;\n }\n has(name) {\n return this.data.has(this.getDataKey(name));\n }\n get(name) {\n return this.getAll(name)[0];\n }\n getAll(name) {\n const tokenString = this.data.get(this.getDataKey(name)) || \"\";\n return tokenize(tokenString);\n }\n getAttributeName(name) {\n return this.data.getAttributeNameForKey(this.getDataKey(name));\n }\n getDataKey(name) {\n return `${name}-class`;\n }\n get data() {\n return this.scope.data;\n }\n}\n\nclass DataMap {\n constructor(scope) {\n this.scope = scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get(key) {\n const name = this.getAttributeNameForKey(key);\n return this.element.getAttribute(name);\n }\n set(key, value) {\n const name = this.getAttributeNameForKey(key);\n this.element.setAttribute(name, value);\n return this.get(key);\n }\n has(key) {\n const name = this.getAttributeNameForKey(key);\n return this.element.hasAttribute(name);\n }\n delete(key) {\n if (this.has(key)) {\n const name = this.getAttributeNameForKey(key);\n this.element.removeAttribute(name);\n return true;\n }\n else {\n return false;\n }\n }\n getAttributeNameForKey(key) {\n return `data-${this.identifier}-${dasherize(key)}`;\n }\n}\n\nclass Guide {\n constructor(logger) {\n this.warnedKeysByObject = new WeakMap();\n this.logger = logger;\n }\n warn(object, key, message) {\n let warnedKeys = this.warnedKeysByObject.get(object);\n if (!warnedKeys) {\n warnedKeys = new Set();\n this.warnedKeysByObject.set(object, warnedKeys);\n }\n if (!warnedKeys.has(key)) {\n warnedKeys.add(key);\n this.logger.warn(message, object);\n }\n }\n}\n\nfunction attributeValueContainsToken(attributeName, token) {\n return `[${attributeName}~=\"${token}\"]`;\n}\n\nclass TargetSet {\n constructor(scope) {\n this.scope = scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get schema() {\n return this.scope.schema;\n }\n has(targetName) {\n return this.find(targetName) != null;\n }\n find(...targetNames) {\n return targetNames.reduce((target, targetName) => target || this.findTarget(targetName) || this.findLegacyTarget(targetName), undefined);\n }\n findAll(...targetNames) {\n return targetNames.reduce((targets, targetName) => [\n ...targets,\n ...this.findAllTargets(targetName),\n ...this.findAllLegacyTargets(targetName),\n ], []);\n }\n findTarget(targetName) {\n const selector = this.getSelectorForTargetName(targetName);\n return this.scope.findElement(selector);\n }\n findAllTargets(targetName) {\n const selector = this.getSelectorForTargetName(targetName);\n return this.scope.findAllElements(selector);\n }\n getSelectorForTargetName(targetName) {\n const attributeName = this.schema.targetAttributeForScope(this.identifier);\n return attributeValueContainsToken(attributeName, targetName);\n }\n findLegacyTarget(targetName) {\n const selector = this.getLegacySelectorForTargetName(targetName);\n return this.deprecate(this.scope.findElement(selector), targetName);\n }\n findAllLegacyTargets(targetName) {\n const selector = this.getLegacySelectorForTargetName(targetName);\n return this.scope.findAllElements(selector).map((element) => this.deprecate(element, targetName));\n }\n getLegacySelectorForTargetName(targetName) {\n const targetDescriptor = `${this.identifier}.${targetName}`;\n return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n }\n deprecate(element, targetName) {\n if (element) {\n const { identifier } = this;\n const attributeName = this.schema.targetAttribute;\n const revisedAttributeName = this.schema.targetAttributeForScope(identifier);\n this.guide.warn(element, `target:${targetName}`, `Please replace ${attributeName}=\"${identifier}.${targetName}\" with ${revisedAttributeName}=\"${targetName}\". ` +\n `The ${attributeName} attribute is deprecated and will be removed in a future version of Stimulus.`);\n }\n return element;\n }\n get guide() {\n return this.scope.guide;\n }\n}\n\nclass OutletSet {\n constructor(scope, controllerElement) {\n this.scope = scope;\n this.controllerElement = controllerElement;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get schema() {\n return this.scope.schema;\n }\n has(outletName) {\n return this.find(outletName) != null;\n }\n find(...outletNames) {\n return outletNames.reduce((outlet, outletName) => outlet || this.findOutlet(outletName), undefined);\n }\n findAll(...outletNames) {\n return outletNames.reduce((outlets, outletName) => [...outlets, ...this.findAllOutlets(outletName)], []);\n }\n getSelectorForOutletName(outletName) {\n const attributeName = this.schema.outletAttributeForScope(this.identifier, outletName);\n return this.controllerElement.getAttribute(attributeName);\n }\n findOutlet(outletName) {\n const selector = this.getSelectorForOutletName(outletName);\n if (selector)\n return this.findElement(selector, outletName);\n }\n findAllOutlets(outletName) {\n const selector = this.getSelectorForOutletName(outletName);\n return selector ? this.findAllElements(selector, outletName) : [];\n }\n findElement(selector, outletName) {\n const elements = this.scope.queryElements(selector);\n return elements.filter((element) => this.matchesElement(element, selector, outletName))[0];\n }\n findAllElements(selector, outletName) {\n const elements = this.scope.queryElements(selector);\n return elements.filter((element) => this.matchesElement(element, selector, outletName));\n }\n matchesElement(element, selector, outletName) {\n const controllerAttribute = element.getAttribute(this.scope.schema.controllerAttribute) || \"\";\n return element.matches(selector) && controllerAttribute.split(\" \").includes(outletName);\n }\n}\n\nclass Scope {\n constructor(schema, element, identifier, logger) {\n this.targets = new TargetSet(this);\n this.classes = new ClassMap(this);\n this.data = new DataMap(this);\n this.containsElement = (element) => {\n return element.closest(this.controllerSelector) === this.element;\n };\n this.schema = schema;\n this.element = element;\n this.identifier = identifier;\n this.guide = new Guide(logger);\n this.outlets = new OutletSet(this.documentScope, element);\n }\n findElement(selector) {\n return this.element.matches(selector) ? this.element : this.queryElements(selector).find(this.containsElement);\n }\n findAllElements(selector) {\n return [\n ...(this.element.matches(selector) ? [this.element] : []),\n ...this.queryElements(selector).filter(this.containsElement),\n ];\n }\n queryElements(selector) {\n return Array.from(this.element.querySelectorAll(selector));\n }\n get controllerSelector() {\n return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n }\n get isDocumentScope() {\n return this.element === document.documentElement;\n }\n get documentScope() {\n return this.isDocumentScope\n ? this\n : new Scope(this.schema, document.documentElement, this.identifier, this.guide.logger);\n }\n}\n\nclass ScopeObserver {\n constructor(element, schema, delegate) {\n this.element = element;\n this.schema = schema;\n this.delegate = delegate;\n this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n this.scopesByIdentifierByElement = new WeakMap();\n this.scopeReferenceCounts = new WeakMap();\n }\n start() {\n this.valueListObserver.start();\n }\n stop() {\n this.valueListObserver.stop();\n }\n get controllerAttribute() {\n return this.schema.controllerAttribute;\n }\n parseValueForToken(token) {\n const { element, content: identifier } = token;\n return this.parseValueForElementAndIdentifier(element, identifier);\n }\n parseValueForElementAndIdentifier(element, identifier) {\n const scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n let scope = scopesByIdentifier.get(identifier);\n if (!scope) {\n scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);\n scopesByIdentifier.set(identifier, scope);\n }\n return scope;\n }\n elementMatchedValue(element, value) {\n const referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n this.scopeReferenceCounts.set(value, referenceCount);\n if (referenceCount == 1) {\n this.delegate.scopeConnected(value);\n }\n }\n elementUnmatchedValue(element, value) {\n const referenceCount = this.scopeReferenceCounts.get(value);\n if (referenceCount) {\n this.scopeReferenceCounts.set(value, referenceCount - 1);\n if (referenceCount == 1) {\n this.delegate.scopeDisconnected(value);\n }\n }\n }\n fetchScopesByIdentifierForElement(element) {\n let scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n if (!scopesByIdentifier) {\n scopesByIdentifier = new Map();\n this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n }\n return scopesByIdentifier;\n }\n}\n\nclass Router {\n constructor(application) {\n this.application = application;\n this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n this.scopesByIdentifier = new Multimap();\n this.modulesByIdentifier = new Map();\n }\n get element() {\n return this.application.element;\n }\n get schema() {\n return this.application.schema;\n }\n get logger() {\n return this.application.logger;\n }\n get controllerAttribute() {\n return this.schema.controllerAttribute;\n }\n get modules() {\n return Array.from(this.modulesByIdentifier.values());\n }\n get contexts() {\n return this.modules.reduce((contexts, module) => contexts.concat(module.contexts), []);\n }\n start() {\n this.scopeObserver.start();\n }\n stop() {\n this.scopeObserver.stop();\n }\n loadDefinition(definition) {\n this.unloadIdentifier(definition.identifier);\n const module = new Module(this.application, definition);\n this.connectModule(module);\n const afterLoad = definition.controllerConstructor.afterLoad;\n if (afterLoad) {\n afterLoad.call(definition.controllerConstructor, definition.identifier, this.application);\n }\n }\n unloadIdentifier(identifier) {\n const module = this.modulesByIdentifier.get(identifier);\n if (module) {\n this.disconnectModule(module);\n }\n }\n getContextForElementAndIdentifier(element, identifier) {\n const module = this.modulesByIdentifier.get(identifier);\n if (module) {\n return module.contexts.find((context) => context.element == element);\n }\n }\n proposeToConnectScopeForElementAndIdentifier(element, identifier) {\n const scope = this.scopeObserver.parseValueForElementAndIdentifier(element, identifier);\n if (scope) {\n this.scopeObserver.elementMatchedValue(scope.element, scope);\n }\n else {\n console.error(`Couldn't find or create scope for identifier: \"${identifier}\" and element:`, element);\n }\n }\n handleError(error, message, detail) {\n this.application.handleError(error, message, detail);\n }\n createScopeForElementAndIdentifier(element, identifier) {\n return new Scope(this.schema, element, identifier, this.logger);\n }\n scopeConnected(scope) {\n this.scopesByIdentifier.add(scope.identifier, scope);\n const module = this.modulesByIdentifier.get(scope.identifier);\n if (module) {\n module.connectContextForScope(scope);\n }\n }\n scopeDisconnected(scope) {\n this.scopesByIdentifier.delete(scope.identifier, scope);\n const module = this.modulesByIdentifier.get(scope.identifier);\n if (module) {\n module.disconnectContextForScope(scope);\n }\n }\n connectModule(module) {\n this.modulesByIdentifier.set(module.identifier, module);\n const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach((scope) => module.connectContextForScope(scope));\n }\n disconnectModule(module) {\n this.modulesByIdentifier.delete(module.identifier);\n const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach((scope) => module.disconnectContextForScope(scope));\n }\n}\n\nconst defaultSchema = {\n controllerAttribute: \"data-controller\",\n actionAttribute: \"data-action\",\n targetAttribute: \"data-target\",\n targetAttributeForScope: (identifier) => `data-${identifier}-target`,\n outletAttributeForScope: (identifier, outlet) => `data-${identifier}-${outlet}-outlet`,\n keyMappings: Object.assign(Object.assign({ enter: \"Enter\", tab: \"Tab\", esc: \"Escape\", space: \" \", up: \"ArrowUp\", down: \"ArrowDown\", left: \"ArrowLeft\", right: \"ArrowRight\", home: \"Home\", end: \"End\", page_up: \"PageUp\", page_down: \"PageDown\" }, objectFromEntries(\"abcdefghijklmnopqrstuvwxyz\".split(\"\").map((c) => [c, c]))), objectFromEntries(\"0123456789\".split(\"\").map((n) => [n, n]))),\n};\nfunction objectFromEntries(array) {\n return array.reduce((memo, [k, v]) => (Object.assign(Object.assign({}, memo), { [k]: v })), {});\n}\n\nclass Application {\n constructor(element = document.documentElement, schema = defaultSchema) {\n this.logger = console;\n this.debug = false;\n this.logDebugActivity = (identifier, functionName, detail = {}) => {\n if (this.debug) {\n this.logFormattedMessage(identifier, functionName, detail);\n }\n };\n this.element = element;\n this.schema = schema;\n this.dispatcher = new Dispatcher(this);\n this.router = new Router(this);\n this.actionDescriptorFilters = Object.assign({}, defaultActionDescriptorFilters);\n }\n static start(element, schema) {\n const application = new this(element, schema);\n application.start();\n return application;\n }\n async start() {\n await domReady();\n this.logDebugActivity(\"application\", \"starting\");\n this.dispatcher.start();\n this.router.start();\n this.logDebugActivity(\"application\", \"start\");\n }\n stop() {\n this.logDebugActivity(\"application\", \"stopping\");\n this.dispatcher.stop();\n this.router.stop();\n this.logDebugActivity(\"application\", \"stop\");\n }\n register(identifier, controllerConstructor) {\n this.load({ identifier, controllerConstructor });\n }\n registerActionOption(name, filter) {\n this.actionDescriptorFilters[name] = filter;\n }\n load(head, ...rest) {\n const definitions = Array.isArray(head) ? head : [head, ...rest];\n definitions.forEach((definition) => {\n if (definition.controllerConstructor.shouldLoad) {\n this.router.loadDefinition(definition);\n }\n });\n }\n unload(head, ...rest) {\n const identifiers = Array.isArray(head) ? head : [head, ...rest];\n identifiers.forEach((identifier) => this.router.unloadIdentifier(identifier));\n }\n get controllers() {\n return this.router.contexts.map((context) => context.controller);\n }\n getControllerForElementAndIdentifier(element, identifier) {\n const context = this.router.getContextForElementAndIdentifier(element, identifier);\n return context ? context.controller : null;\n }\n handleError(error, message, detail) {\n var _a;\n this.logger.error(`%s\\n\\n%o\\n\\n%o`, message, error, detail);\n (_a = window.onerror) === null || _a === void 0 ? void 0 : _a.call(window, message, \"\", 0, 0, error);\n }\n logFormattedMessage(identifier, functionName, detail = {}) {\n detail = Object.assign({ application: this }, detail);\n this.logger.groupCollapsed(`${identifier} #${functionName}`);\n this.logger.log(\"details:\", Object.assign({}, detail));\n this.logger.groupEnd();\n }\n}\nfunction domReady() {\n return new Promise((resolve) => {\n if (document.readyState == \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", () => resolve());\n }\n else {\n resolve();\n }\n });\n}\n\nfunction ClassPropertiesBlessing(constructor) {\n const classes = readInheritableStaticArrayValues(constructor, \"classes\");\n return classes.reduce((properties, classDefinition) => {\n return Object.assign(properties, propertiesForClassDefinition(classDefinition));\n }, {});\n}\nfunction propertiesForClassDefinition(key) {\n return {\n [`${key}Class`]: {\n get() {\n const { classes } = this;\n if (classes.has(key)) {\n return classes.get(key);\n }\n else {\n const attribute = classes.getAttributeName(key);\n throw new Error(`Missing attribute \"${attribute}\"`);\n }\n },\n },\n [`${key}Classes`]: {\n get() {\n return this.classes.getAll(key);\n },\n },\n [`has${capitalize(key)}Class`]: {\n get() {\n return this.classes.has(key);\n },\n },\n };\n}\n\nfunction OutletPropertiesBlessing(constructor) {\n const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n return outlets.reduce((properties, outletDefinition) => {\n return Object.assign(properties, propertiesForOutletDefinition(outletDefinition));\n }, {});\n}\nfunction getOutletController(controller, element, identifier) {\n return controller.application.getControllerForElementAndIdentifier(element, identifier);\n}\nfunction getControllerAndEnsureConnectedScope(controller, element, outletName) {\n let outletController = getOutletController(controller, element, outletName);\n if (outletController)\n return outletController;\n controller.application.router.proposeToConnectScopeForElementAndIdentifier(element, outletName);\n outletController = getOutletController(controller, element, outletName);\n if (outletController)\n return outletController;\n}\nfunction propertiesForOutletDefinition(name) {\n const camelizedName = namespaceCamelize(name);\n return {\n [`${camelizedName}Outlet`]: {\n get() {\n const outletElement = this.outlets.find(name);\n const selector = this.outlets.getSelectorForOutletName(name);\n if (outletElement) {\n const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n if (outletController)\n return outletController;\n throw new Error(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`);\n }\n throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n },\n },\n [`${camelizedName}Outlets`]: {\n get() {\n const outlets = this.outlets.findAll(name);\n if (outlets.length > 0) {\n return outlets\n .map((outletElement) => {\n const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n if (outletController)\n return outletController;\n console.warn(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`, outletElement);\n })\n .filter((controller) => controller);\n }\n return [];\n },\n },\n [`${camelizedName}OutletElement`]: {\n get() {\n const outletElement = this.outlets.find(name);\n const selector = this.outlets.getSelectorForOutletName(name);\n if (outletElement) {\n return outletElement;\n }\n else {\n throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n }\n },\n },\n [`${camelizedName}OutletElements`]: {\n get() {\n return this.outlets.findAll(name);\n },\n },\n [`has${capitalize(camelizedName)}Outlet`]: {\n get() {\n return this.outlets.has(name);\n },\n },\n };\n}\n\nfunction TargetPropertiesBlessing(constructor) {\n const targets = readInheritableStaticArrayValues(constructor, \"targets\");\n return targets.reduce((properties, targetDefinition) => {\n return Object.assign(properties, propertiesForTargetDefinition(targetDefinition));\n }, {});\n}\nfunction propertiesForTargetDefinition(name) {\n return {\n [`${name}Target`]: {\n get() {\n const target = this.targets.find(name);\n if (target) {\n return target;\n }\n else {\n throw new Error(`Missing target element \"${name}\" for \"${this.identifier}\" controller`);\n }\n },\n },\n [`${name}Targets`]: {\n get() {\n return this.targets.findAll(name);\n },\n },\n [`has${capitalize(name)}Target`]: {\n get() {\n return this.targets.has(name);\n },\n },\n };\n}\n\nfunction ValuePropertiesBlessing(constructor) {\n const valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, \"values\");\n const propertyDescriptorMap = {\n valueDescriptorMap: {\n get() {\n return valueDefinitionPairs.reduce((result, valueDefinitionPair) => {\n const valueDescriptor = parseValueDefinitionPair(valueDefinitionPair, this.identifier);\n const attributeName = this.data.getAttributeNameForKey(valueDescriptor.key);\n return Object.assign(result, { [attributeName]: valueDescriptor });\n }, {});\n },\n },\n };\n return valueDefinitionPairs.reduce((properties, valueDefinitionPair) => {\n return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));\n }, propertyDescriptorMap);\n}\nfunction propertiesForValueDefinitionPair(valueDefinitionPair, controller) {\n const definition = parseValueDefinitionPair(valueDefinitionPair, controller);\n const { key, name, reader: read, writer: write } = definition;\n return {\n [name]: {\n get() {\n const value = this.data.get(key);\n if (value !== null) {\n return read(value);\n }\n else {\n return definition.defaultValue;\n }\n },\n set(value) {\n if (value === undefined) {\n this.data.delete(key);\n }\n else {\n this.data.set(key, write(value));\n }\n },\n },\n [`has${capitalize(name)}`]: {\n get() {\n return this.data.has(key) || definition.hasCustomDefaultValue;\n },\n },\n };\n}\nfunction parseValueDefinitionPair([token, typeDefinition], controller) {\n return valueDescriptorForTokenAndTypeDefinition({\n controller,\n token,\n typeDefinition,\n });\n}\nfunction parseValueTypeConstant(constant) {\n switch (constant) {\n case Array:\n return \"array\";\n case Boolean:\n return \"boolean\";\n case Number:\n return \"number\";\n case Object:\n return \"object\";\n case String:\n return \"string\";\n }\n}\nfunction parseValueTypeDefault(defaultValue) {\n switch (typeof defaultValue) {\n case \"boolean\":\n return \"boolean\";\n case \"number\":\n return \"number\";\n case \"string\":\n return \"string\";\n }\n if (Array.isArray(defaultValue))\n return \"array\";\n if (Object.prototype.toString.call(defaultValue) === \"[object Object]\")\n return \"object\";\n}\nfunction parseValueTypeObject(payload) {\n const { controller, token, typeObject } = payload;\n const hasType = isSomething(typeObject.type);\n const hasDefault = isSomething(typeObject.default);\n const fullObject = hasType && hasDefault;\n const onlyType = hasType && !hasDefault;\n const onlyDefault = !hasType && hasDefault;\n const typeFromObject = parseValueTypeConstant(typeObject.type);\n const typeFromDefaultValue = parseValueTypeDefault(payload.typeObject.default);\n if (onlyType)\n return typeFromObject;\n if (onlyDefault)\n return typeFromDefaultValue;\n if (typeFromObject !== typeFromDefaultValue) {\n const propertyPath = controller ? `${controller}.${token}` : token;\n throw new Error(`The specified default value for the Stimulus Value \"${propertyPath}\" must match the defined type \"${typeFromObject}\". The provided default value of \"${typeObject.default}\" is of type \"${typeFromDefaultValue}\".`);\n }\n if (fullObject)\n return typeFromObject;\n}\nfunction parseValueTypeDefinition(payload) {\n const { controller, token, typeDefinition } = payload;\n const typeObject = { controller, token, typeObject: typeDefinition };\n const typeFromObject = parseValueTypeObject(typeObject);\n const typeFromDefaultValue = parseValueTypeDefault(typeDefinition);\n const typeFromConstant = parseValueTypeConstant(typeDefinition);\n const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n if (type)\n return type;\n const propertyPath = controller ? `${controller}.${typeDefinition}` : token;\n throw new Error(`Unknown value type \"${propertyPath}\" for \"${token}\" value`);\n}\nfunction defaultValueForDefinition(typeDefinition) {\n const constant = parseValueTypeConstant(typeDefinition);\n if (constant)\n return defaultValuesByType[constant];\n const hasDefault = hasProperty(typeDefinition, \"default\");\n const hasType = hasProperty(typeDefinition, \"type\");\n const typeObject = typeDefinition;\n if (hasDefault)\n return typeObject.default;\n if (hasType) {\n const { type } = typeObject;\n const constantFromType = parseValueTypeConstant(type);\n if (constantFromType)\n return defaultValuesByType[constantFromType];\n }\n return typeDefinition;\n}\nfunction valueDescriptorForTokenAndTypeDefinition(payload) {\n const { token, typeDefinition } = payload;\n const key = `${dasherize(token)}-value`;\n const type = parseValueTypeDefinition(payload);\n return {\n type,\n key,\n name: camelize(key),\n get defaultValue() {\n return defaultValueForDefinition(typeDefinition);\n },\n get hasCustomDefaultValue() {\n return parseValueTypeDefault(typeDefinition) !== undefined;\n },\n reader: readers[type],\n writer: writers[type] || writers.default,\n };\n}\nconst defaultValuesByType = {\n get array() {\n return [];\n },\n boolean: false,\n number: 0,\n get object() {\n return {};\n },\n string: \"\",\n};\nconst readers = {\n array(value) {\n const array = JSON.parse(value);\n if (!Array.isArray(array)) {\n throw new TypeError(`expected value of type \"array\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(array)}\"`);\n }\n return array;\n },\n boolean(value) {\n return !(value == \"0\" || String(value).toLowerCase() == \"false\");\n },\n number(value) {\n return Number(value.replace(/_/g, \"\"));\n },\n object(value) {\n const object = JSON.parse(value);\n if (object === null || typeof object != \"object\" || Array.isArray(object)) {\n throw new TypeError(`expected value of type \"object\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(object)}\"`);\n }\n return object;\n },\n string(value) {\n return value;\n },\n};\nconst writers = {\n default: writeString,\n array: writeJSON,\n object: writeJSON,\n};\nfunction writeJSON(value) {\n return JSON.stringify(value);\n}\nfunction writeString(value) {\n return `${value}`;\n}\n\nclass Controller {\n constructor(context) {\n this.context = context;\n }\n static get shouldLoad() {\n return true;\n }\n static afterLoad(_identifier, _application) {\n return;\n }\n get application() {\n return this.context.application;\n }\n get scope() {\n return this.context.scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get targets() {\n return this.scope.targets;\n }\n get outlets() {\n return this.scope.outlets;\n }\n get classes() {\n return this.scope.classes;\n }\n get data() {\n return this.scope.data;\n }\n initialize() {\n }\n connect() {\n }\n disconnect() {\n }\n dispatch(eventName, { target = this.element, detail = {}, prefix = this.identifier, bubbles = true, cancelable = true, } = {}) {\n const type = prefix ? `${prefix}:${eventName}` : eventName;\n const event = new CustomEvent(type, { detail, bubbles, cancelable });\n target.dispatchEvent(event);\n return event;\n }\n}\nController.blessings = [\n ClassPropertiesBlessing,\n TargetPropertiesBlessing,\n ValuePropertiesBlessing,\n OutletPropertiesBlessing,\n];\nController.targets = [];\nController.outlets = [];\nController.values = {};\n\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, SelectorObserver, StringMapObserver, TokenListObserver, ValueListObserver, add, defaultSchema, del, fetch, prune };\n", "import { Application } from \"@hotwired/stimulus\"\n\nconst application = Application.start()\n\n// Configure Stimulus development experience\napplication.debug = false\nwindow.Stimulus = application\n\nexport { application }\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"article-editor\"\nexport default class extends Controller {\n\tstatic targets = [ \"title\", \"slug\" ]\n\tslugHasBeenTouched = false\n\n connect() {\n\t\tif (this.slugTarget.value != '') {\n\t\t\tthis.slugHasBeenTouched = true\n\t\t}\n\t\tthis.addSlugifyButton()\n }\n\n\tdisconnect() {\n\t\tthis.removeSlugifyButton()\n\t}\n\n\tinputTitle() {\n\t\tif (!this.slugHasBeenTouched) {\n\t\t\tthis.updateSlug()\n\t\t}\n\t}\n\n\ttouchSlug() {\n\t\tthis.slugHasBeenTouched = true\n\t}\n\n\tupdateSlug() {\n\t\tthis.slugTarget.value = this.slugify(this.titleTarget.value)\n\t}\n\n\t// https://www.30secondsofcode.org/js/s/slugify\n\tslugify(str) {\n\t\treturn str\n\t\t\t.toLowerCase()\n\t\t\t.trim()\n\t\t\t.replace(/[^\\w\\s-]/g, '')\n\t\t\t.replace(/[\\s_-]+/g, '-')\n\t\t\t.replace(/^-+|-+$/g, '')\n\t}\n\n\taddSlugifyButton() {\n\t\tlet slugifyBtn = document.createElement(\"button\")\n\t\tslugifyBtn.type = \"button\"\n\t\tslugifyBtn.title = \"Regenerate slug from title\"\n\t\tslugifyBtn.classList.add('btn')\n\t\tslugifyBtn.classList.add('btn-info')\n\t\tslugifyBtn.dataset.action = \"article-editor#updateSlug\"\n\t\tslugifyBtn.innerHTML = '<i class=\"bi-arrow-clockwise\"></i><span class=\"visually-hidden\">Regenerate slug</span>'\n\t\tthis.slugTarget.parentElement.append(slugifyBtn)\n\t}\n\n\tremoveSlugifyButton() {\n\t\t// TO DO\n\t}\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { Toast } from \"bootstrap\"\n\n// Connects to data-controller=\"flash\"\nexport default class extends Controller {\n connect() {\n\t var toast = new Toast(this.element)\n\t toast.show()\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"home-hero\"\nexport default class extends Controller {\n\tstatic targets = [ \"navbar\", \"search\" ]\n\n\tconnect() {\n\t\tthis.navbarTarget.classList.remove(\"sticky-top\")\n\t\tthis.navbarTarget.classList.add(\"fixed-top\")\n\n\t\tif (window.scrollY == 0) {\n\t\t\tthis.transparent()\n\t\t}\n\t}\n\n\tscroll() {\n\t\tif (window.scrollY > 0) {\n\t\t\tthis.opaque()\n\t\t}\n\t\telse {\n\t\t\tthis.transparent()\n\t\t}\n\t}\n\n\ttransparent() {\n\t\tthis.navbarTarget.classList.add(\"bg-transparent\")\n\t\tthis.navbarTarget.classList.remove(\"shadow\")\n\n\t\tthis.searchTarget.classList.add(\"visually-hidden\")\n\t}\n\n\topaque() {\n\t\tthis.navbarTarget.classList.remove(\"bg-transparent\")\n\t\tthis.navbarTarget.classList.add(\"shadow\")\n\n\t\tthis.searchTarget.classList.remove(\"visually-hidden\")\n\t}\n\n\tdisconnect() {\n\t\tthis.opaque()\n\t}\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport L from \"leaflet\"\nimport \"leaflet/dist/leaflet.css\"\nimport \"leaflet-providers\"\nimport \"leaflet-lasso\"\nimport Supercluster from 'supercluster';\n\n// Connects to data-controller=\"map\"\nexport default class extends Controller {\n\tstatic targets = [ \"container\", \"spinner\" ]\n\tstatic values = {\n\t\tbaseMap: String,\n\t\tmarkersData: Array,\n\t\tmarkersUrl: String,\n\t\tstyle: String\n\t}\n\n\n\tconnect() {\n\t\tvar bounds = new L.LatLngBounds(\n\t\t\tnew L.LatLng(-180, -180), \n\t\t\tnew L.LatLng(180, 180)\n\t\t)\n\n\t\t// Base maps\n\t\tvar physical = L.tileLayer.provider('CartoDB.PositronNoLabels')\n\t\tvar labelledPhysical = L.tileLayer.provider('CartoDB.Positron')\n\t\tvar imagery = L.tileLayer.provider('Esri.WorldImagery')\n\t\tvar baseMaps = {\n\t\t\t\"Map\": physical,\n\t\t\t\"Map with labels\": labelledPhysical,\n\t\t\t\"Imagery\": imagery\n\t\t};\n\n\t\tvar baseMap = physical\n\t\tif (this.hasBaseMapValue) {\n\t\t\tbaseMap = baseMaps[this.baseMapValue]\n\t\t}\n\n\t\t// Create map\n\t\tvar map = L.map(this.containerTarget, {\n\t\t\tminZoom: 3,\n\t\t\tmaxZoom: 17,\n\t\t\tmaxBounds: bounds,\n\t\t\tmaxBoundsViscosity: 0.75,\n\t\t\trenderer: L.canvas(),\n\t\t\tpreferCanvas: true,\n\t\t\tlayers: [baseMap]\n\t\t})\n\n\t\tthis.map = map;\n\n\t\t// Additional controls\n\t\tL.control.layers(baseMaps, null, \n\t\t\t{ collapsed: false }\n\t\t).addTo(this.map)\n\n\t\tL.control.scale({ imperial: false }).addTo(this.map);\n\n\t\tconst index = new Supercluster({\n\t\t\tradius: 60,\n\t\t\textent: 256,\n\t\t\tmaxZoom: 8\n\t\t});\n\n\t\tthis.index = index;\n\n\t\tvar markersLayer = L.geoJson(null, {\n\t\t\tpointToLayer: this.createClusterIcon\n\t\t});\n\n\t\tthis.markersLayer = markersLayer;\n\n\t\tthis.markersLayer.addTo(this.map);\n\n\t\t// Initial view\n\t\tthis.map.fitWorld();\n \n this.load()\n\n\t\tfunction update() {\n\t\t\tconst bounds = map.getBounds();\n\t\t\tmarkersLayer.clearLayers();\n\t\t\tmarkersLayer.addData(index.getClusters([bounds.getWest(), bounds.getSouth(), bounds.getEast(), bounds.getNorth()], map.getZoom()));\n\t\t}\n\n\t\tmap.on('moveend', function() {\n\t\t\tif (typeof index.points !== \"undefined\") {\n\t\t\t\tupdate()\n\t\t\t}\n\t\t});\n\n\t\tmarkersLayer.on('click', function (e) {\n\t\t\tvar extend = index.getClusterExpansionZoom(e.layer.feature.properties.cluster_id);\n\t\t\tif (!isNaN(extend)) {\n\t\t\t\tmap.flyTo(e.latlng, extend);\n\t\t\t}\n\t\t}) \n\t}\n\n\tload() {\n\t\tif (this.hasMarkersDataValue) {\n\t\t\tthis.loadMarkers()\n\t\t}\n\n\t\tif (this.hasMarkersUrlValue) {\n\t\t\tthis.loadRemoteMarkers()\n\t\t}\n\t}\n\n\tdisconnect() {\n\t\tthis.map.remove()\n\t}\n\n\tloadMarkers() {\n\t\tvar markers = this.markersDataValue\n\t\t\t.map(data =>\n\t\t\t\tL.circleMarker(\n\t\t\t\t\t[data.lat, data.lng], {\n\t\t\t\t\t\tcolor: 'black',\n\t\t\t\t\t\tfillColor: '#A44A3F',\n\t\t\t\t\t\tfillOpacity: 0.5,\n\t\t\t\t\t\tweight: 2,\n\t\t\t\t\t\tradius: 4,\n\t\t\t\t\t\tid: data.id\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t)\n\n\t\tif (this.hasStyleValue) {\n\t\t\tif (this.styleValue == \"show_site\") {\n\t\t\t\tmarkers = this.markersDataValue\n\t\t\t\t\t.map(data =>\n\t\t\t\t\t\tL.circle(\n\t\t\t\t\t\t\t[data.lat, data.lng], {\n\t\t\t\t\t\t\t\tcolor: '#b99555',\n\t\t\t\t\t\t\t\tfillColor: '#b99555',\n\t\t\t\t\t\t\t\tfillOpacity: 0.5,\n\t\t\t\t\t\t\t\tweight: 10,\n\t\t\t\t\t\t\t\tradius: 300,\n\t\t\t\t\t\t\t\tid: data.id\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\tmarkers = L.featureGroup(markers)\n\t\tmarkers.addTo(this.map)\n\t\tthis.map.fitBounds(markers.getBounds())\n\t}\n\n\tcreateClusterIcon(feature, latlng) {\n\t\tif (!feature.properties.cluster) return L.circleMarker(\n\t\t\tlatlng, {\n\t\t\t\tcolor: 'black',\n\t\t\t\tfillColor: '#A44A3F',\n\t\t\t\tfillOpacity: 0.5,\n\t\t\t\tweight: 2,\n\t\t\t\tradius: 4,\n\t\t\t\tid: feature.properties.id\n\t\t\t}).bindPopup(\n\t\t\t\t'<h5>' + feature.properties.name + '</h5>' + \n\t\t\t\t'<a class=\"btn btn-primary btn-sm\" style=\"color: #fff\" href=\"/sites/' + feature.properties.id + '\" target=\"_blank\">' +\n\t\t\t\t'Site details <i class=\"fa fa-external-link\"></i>' +\n\t\t\t\t'</a>' +\n\t\t\t\t//'<button class=\"btn btn-light btn-sm\" type=\"submit\" onclick=\"window.location=\\'' + '/table?utf8=\u2713&query_site=' + feature.properties.name + '\\';\">' +\n\t\t\t\t//\"<i class=\\'fa fa-filter\\'></i> Measurements\" +\n\t\t\t\t//\"</button>\"\n\t\t\t\t''\n\t\t\t);\n\n\t\tconst count = feature.properties.point_count;\n\t\tconst size =\n\t\t\tcount < 100 ? 'small' :\n\t\t\tcount < 1000 ? 'medium' : 'large';\n\t\tconst icon = L.divIcon({\n\t\t\thtml: `<div><span>${ feature.properties.point_count_abbreviated }</span></div>`,\n\t\t\tclassName: `marker-cluster marker-cluster-${ size}`,\n\t\t\ticonSize: L.point(40, 40)\n\t\t});\n\n\t\treturn L.marker(latlng, {icon});\n\t}\n\n\tloadRemoteMarkers() {\n\t\t// Construct URL to markers data\n\t\tvar markers_url = new URL(this.markersUrlValue)\n\t\tconsole.debug(\"Fetching map data from \" + markers_url.toString())\n\t\tthis.showSpinner()\n\n\t\t// Load markers\n\t\tvar data = fetch(markers_url, { headers: { 'Accept': 'application/geo+json' } })\n\t\t\t.then(response => response.json())\n\t\t\t.then(data => {\n\t\t\t\tif (data.length > 0) {\n this.index.load(data);\n const bounds = this.map.getBounds();\n this.markersLayer.addData(this.index.getClusters([bounds.getWest(), bounds.getSouth(), bounds.getEast(), bounds.getNorth()], this.map.getZoom())); //this.map.addLayer(index); \n\t\t\t\t}\n\t\t\t\tthis.hideSpinner()\n \n\t\t\t}\n)\n\t}\n\n\tshowSpinner() {\n\t\tthis.spinnerTarget.classList.remove(\"visually-hidden\")\n\t}\n\n\thideSpinner() {\n\t\tthis.spinnerTarget.classList.add(\"visually-hidden\")\n\t}\n}\n", "import * as L from 'leaflet';\nimport * as GeoJSON from 'geojson';\n\nexport class LassoPolygon extends L.Layer {\n readonly polyline: L.Polyline;\n readonly polygon: L.Polygon;\n\n constructor(latlngs: L.LatLngExpression[], options?: L.PolylineOptions) {\n super();\n\n this.polyline = L.polyline(latlngs, options);\n this.polygon = L.polygon(latlngs, { ...options, weight: 0 });\n }\n\n onAdd(map: L.Map): this {\n this.polyline.addTo(map);\n this.polygon.addTo(map);\n\n return this;\n }\n\n onRemove(): this {\n this.polyline.remove();\n this.polygon.remove();\n\n return this;\n }\n\n addLatLng(latlng: L.LatLngExpression): this {\n this.polyline.addLatLng(latlng);\n this.polygon.addLatLng(latlng);\n\n return this;\n }\n\n getLatLngs(): L.LatLng[] {\n return this.polygon.getLatLngs()[0] as L.LatLng[];\n }\n\n toGeoJSON(): GeoJSON.Feature<GeoJSON.Polygon> {\n return this.polygon.toGeoJSON() as GeoJSON.Feature<GeoJSON.Polygon>;\n }\n}", "/* @preserve\n* @terraformer/spatial - v2.1.1 - MIT\n* Copyright (c) 2012-2022 Environmental Systems Research Institute, Inc.\n* Tue Aug 02 2022 14:23:50 GMT-0700 (Pacific Daylight Time)\n*/\n/*\nInternal: Calculate an bounding box from an nested array of positions\n[\n [\n [ [lng, lat],[lng, lat],[lng, lat] ]\n ]\n [\n [lng, lat],[lng, lat],[lng, lat]\n ]\n [\n [lng, lat],[lng, lat],[lng, lat]\n ]\n]\n*/\nvar calculateBoundsFromNestedArrays = function calculateBoundsFromNestedArrays(array) {\n var x1 = null;\n var x2 = null;\n var y1 = null;\n var y2 = null;\n\n for (var i = 0; i < array.length; i++) {\n var inner = array[i];\n\n for (var j = 0; j < inner.length; j++) {\n var lonlat = inner[j];\n var lon = lonlat[0];\n var lat = lonlat[1];\n\n if (x1 === null) {\n x1 = lon;\n } else if (lon < x1) {\n x1 = lon;\n }\n\n if (x2 === null) {\n x2 = lon;\n } else if (lon > x2) {\n x2 = lon;\n }\n\n if (y1 === null) {\n y1 = lat;\n } else if (lat < y1) {\n y1 = lat;\n }\n\n if (y2 === null) {\n y2 = lat;\n } else if (lat > y2) {\n y2 = lat;\n }\n }\n }\n\n return [x1, y1, x2, y2];\n};\n/*\nInternal: Calculate a bounding box from an array of arrays of arrays\n[\n [ [lng, lat],[lng, lat],[lng, lat] ]\n [ [lng, lat],[lng, lat],[lng, lat] ]\n [ [lng, lat],[lng, lat],[lng, lat] ]\n]\n*/\n\n\nvar calculateBoundsFromNestedArrayOfArrays = function calculateBoundsFromNestedArrayOfArrays(array) {\n var x1 = null;\n var x2 = null;\n var y1 = null;\n var y2 = null;\n\n for (var i = 0; i < array.length; i++) {\n var inner = array[i]; // return calculateBoundsFromNestedArrays(inner); // more DRY?\n\n for (var j = 0; j < inner.length; j++) {\n var innerinner = inner[j];\n\n for (var k = 0; k < innerinner.length; k++) {\n var lonlat = innerinner[k];\n var lon = lonlat[0];\n var lat = lonlat[1];\n\n if (x1 === null) {\n x1 = lon;\n } else if (lon < x1) {\n x1 = lon;\n }\n\n if (x2 === null) {\n x2 = lon;\n } else if (lon > x2) {\n x2 = lon;\n }\n\n if (y1 === null) {\n y1 = lat;\n } else if (lat < y1) {\n y1 = lat;\n }\n\n if (y2 === null) {\n y2 = lat;\n } else if (lat > y2) {\n y2 = lat;\n }\n }\n }\n }\n\n return [x1, y1, x2, y2];\n};\n/*\nInternal: Calculate a bounding box from an array of positions\n[\n [lng, lat],[lng, lat],[lng, lat]\n]\n*/\n\n\nvar calculateBoundsFromArray = function calculateBoundsFromArray(array) {\n var x1 = null;\n var x2 = null;\n var y1 = null;\n var y2 = null;\n\n for (var i = 0; i < array.length; i++) {\n var lonlat = array[i];\n var lon = lonlat[0];\n var lat = lonlat[1];\n\n if (x1 === null) {\n x1 = lon;\n } else if (lon < x1) {\n x1 = lon;\n }\n\n if (x2 === null) {\n x2 = lon;\n } else if (lon > x2) {\n x2 = lon;\n }\n\n if (y1 === null) {\n y1 = lat;\n } else if (lat < y1) {\n y1 = lat;\n }\n\n if (y2 === null) {\n y2 = lat;\n } else if (lat > y2) {\n y2 = lat;\n }\n }\n\n return [x1, y1, x2, y2];\n};\n/*\nInternal: Calculate an bounding box for a feature collection\n*/\n\n\nvar calculateBoundsForFeatureCollection = function calculateBoundsForFeatureCollection(featureCollection) {\n var extents = [];\n\n for (var i = featureCollection.features.length - 1; i >= 0; i--) {\n var extent = calculateBounds(featureCollection.features[i].geometry);\n extents.push([extent[0], extent[1]]);\n extents.push([extent[2], extent[3]]);\n }\n\n return calculateBoundsFromArray(extents);\n};\n/*\nInternal: Calculate an bounding box for a geometry collection\n*/\n\n\nvar calculateBoundsForGeometryCollection = function calculateBoundsForGeometryCollection(geometryCollection) {\n var extents = [];\n\n for (var i = geometryCollection.geometries.length - 1; i >= 0; i--) {\n var extent = calculateBounds(geometryCollection.geometries[i]);\n extents.push([extent[0], extent[1]]);\n extents.push([extent[2], extent[3]]);\n }\n\n return calculateBoundsFromArray(extents);\n};\n\nvar calculateBounds = function calculateBounds(geojson) {\n if (geojson.type) {\n switch (geojson.type) {\n case 'Point':\n return [geojson.coordinates[0], geojson.coordinates[1], geojson.coordinates[0], geojson.coordinates[1]];\n\n case 'MultiPoint':\n return calculateBoundsFromArray(geojson.coordinates);\n\n case 'LineString':\n return calculateBoundsFromArray(geojson.coordinates);\n\n case 'MultiLineString':\n return calculateBoundsFromNestedArrays(geojson.coordinates);\n\n case 'Polygon':\n return calculateBoundsFromNestedArrays(geojson.coordinates);\n\n case 'MultiPolygon':\n return calculateBoundsFromNestedArrayOfArrays(geojson.coordinates);\n\n case 'Feature':\n return geojson.geometry ? calculateBounds(geojson.geometry) : null;\n\n case 'FeatureCollection':\n return calculateBoundsForFeatureCollection(geojson);\n\n case 'GeometryCollection':\n return calculateBoundsForGeometryCollection(geojson);\n\n default:\n throw new Error('Unknown type: ' + geojson.type);\n }\n }\n\n return null;\n};\n\nvar EARTH_RADIUS = 6378137;\nvar DEGREES_PER_RADIAN = 57.295779513082320;\nvar RADIANS_PER_DEGREE = 0.017453292519943;\nvar MercatorCRS = {\n type: 'link',\n properties: {\n href: 'http://spatialreference.org/ref/sr-org/6928/ogcwkt/',\n type: 'ogcwkt'\n }\n};\nvar GeographicCRS = {\n type: 'link',\n properties: {\n href: 'http://spatialreference.org/ref/epsg/4326/ogcwkt/',\n type: 'ogcwkt'\n }\n};\n\n/*\nInternal: Convert radians to degrees. Used by spatial reference converters.\n*/\n\nvar radToDeg = function radToDeg(rad) {\n return rad * DEGREES_PER_RADIAN;\n};\n/*\nInternal: Convert degrees to radians. Used by spatial reference converters.\n*/\n\nvar degToRad = function degToRad(deg) {\n return deg * RADIANS_PER_DEGREE;\n};\nvar positionToGeographic = function positionToGeographic(position) {\n var x = position[0];\n var y = position[1];\n return [radToDeg(x / EARTH_RADIUS) - Math.floor((radToDeg(x / EARTH_RADIUS) + 180) / 360) * 360, radToDeg(Math.PI / 2 - 2 * Math.atan(Math.exp(-1.0 * y / EARTH_RADIUS)))];\n};\nvar positionToMercator = function positionToMercator(position) {\n var lng = position[0];\n var lat = Math.max(Math.min(position[1], 89.99999), -89.99999);\n return [degToRad(lng) * EARTH_RADIUS, EARTH_RADIUS / 2.0 * Math.log((1.0 + Math.sin(degToRad(lat))) / (1.0 - Math.sin(degToRad(lat))))];\n};\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\n/* Copyright (c) 2012-2019 Environmental Systems Research Institute, Inc.\n * Apache-2.0 */\nvar isNumber = function isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n};\n\nvar edgeIntersectsEdge = function edgeIntersectsEdge(a1, a2, b1, b2) {\n var uaT = (b2[0] - b1[0]) * (a1[1] - b1[1]) - (b2[1] - b1[1]) * (a1[0] - b1[0]);\n var ubT = (a2[0] - a1[0]) * (a1[1] - b1[1]) - (a2[1] - a1[1]) * (a1[0] - b1[0]);\n var uB = (b2[1] - b1[1]) * (a2[0] - a1[0]) - (b2[0] - b1[0]) * (a2[1] - a1[1]);\n\n if (uB !== 0) {\n var ua = uaT / uB;\n var ub = ubT / uB;\n\n if (ua >= 0 && ua <= 1 && ub >= 0 && ub <= 1) {\n return true;\n }\n }\n\n return false;\n};\n\nvar arraysIntersectArrays = function arraysIntersectArrays(a, b) {\n if (isNumber(a[0][0])) {\n if (isNumber(b[0][0])) {\n for (var i = 0; i < a.length - 1; i++) {\n for (var j = 0; j < b.length - 1; j++) {\n if (edgeIntersectsEdge(a[i], a[i + 1], b[j], b[j + 1])) {\n return true;\n }\n }\n }\n } else {\n for (var k = 0; k < b.length; k++) {\n if (arraysIntersectArrays(a, b[k])) {\n return true;\n }\n }\n }\n } else {\n for (var l = 0; l < a.length; l++) {\n if (arraysIntersectArrays(a[l], b)) {\n return true;\n }\n }\n }\n\n return false;\n};\nvar coordinatesContainPoint = function coordinatesContainPoint(coordinates, point) {\n var contains = false;\n\n for (var i = -1, l = coordinates.length, j = l - 1; ++i < l; j = i) {\n if ((coordinates[i][1] <= point[1] && point[1] < coordinates[j][1] || coordinates[j][1] <= point[1] && point[1] < coordinates[i][1]) && point[0] < (coordinates[j][0] - coordinates[i][0]) * (point[1] - coordinates[i][1]) / (coordinates[j][1] - coordinates[i][1]) + coordinates[i][0]) {\n contains = !contains;\n }\n }\n\n return contains;\n};\nvar pointsEqual = function pointsEqual(a, b) {\n for (var i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n\n return true;\n};\n\n/*\nInternal: used for sorting\n*/\n\nvar compSort = function compSort(p1, p2) {\n if (p1[0] > p2[0]) {\n return -1;\n } else if (p1[0] < p2[0]) {\n return 1;\n } else if (p1[1] > p2[1]) {\n return -1;\n } else if (p1[1] < p2[1]) {\n return 1;\n } else {\n return 0;\n }\n};\n/*\n Internal: -1,0,1 comparison function\n */\n\nvar cmp = function cmp(a, b) {\n if (a < b) {\n return -1;\n } else if (a > b) {\n return 1;\n } else {\n return 0;\n }\n};\n/*\n Internal: used to determine turn\n */\n\n\nvar turn = function turn(p, q, r) {\n // Returns -1, 0, 1 if p,q,r forms a right, straight, or left turn.\n return cmp((q[0] - p[0]) * (r[1] - p[1]) - (r[0] - p[0]) * (q[1] - p[1]), 0);\n};\n/*\n Internal: used to determine euclidean distance between two points\n */\n\n\nvar euclideanDistance = function euclideanDistance(p, q) {\n // Returns the squared Euclidean distance between p and q.\n var dx = q[0] - p[0];\n var dy = q[1] - p[1];\n return dx * dx + dy * dy;\n};\n\nvar nextHullPoint = function nextHullPoint(points, p) {\n // Returns the next point on the convex hull in CCW from p.\n var q = p;\n\n for (var r in points) {\n var t = turn(p, q, points[r]);\n\n if (t === -1 || t === 0 && euclideanDistance(p, points[r]) > euclideanDistance(p, q)) {\n q = points[r];\n }\n }\n\n return q;\n};\n\nvar coordinateConvexHull = function coordinateConvexHull(points) {\n // implementation of the Jarvis March algorithm\n // adapted from http://tixxit.wordpress.com/2009/12/09/jarvis-march/\n if (points.length === 0) {\n return [];\n } else if (points.length === 1) {\n return points;\n } // Returns the points on the convex hull of points in CCW order.\n\n\n var hull = [points.sort(compSort)[0]];\n\n for (var p = 0; p < hull.length; p++) {\n var q = nextHullPoint(points, hull[p]);\n\n if (q !== hull[0]) {\n hull.push(q);\n }\n }\n\n return hull;\n};\n/*\nInternal: Returns a copy of coordinates for a closed polygon\n*/\n\nvar closedPolygon = function closedPolygon(coordinates) {\n var outer = [];\n\n for (var i = 0; i < coordinates.length; i++) {\n var inner = coordinates[i].slice();\n\n if (pointsEqual(inner[0], inner[inner.length - 1]) === false) {\n inner.push(inner[0]);\n }\n\n outer.push(inner);\n }\n\n return outer;\n};\n/*\nInternal: safe warning\n*/\n\nfunction warn() {\n var args = Array.prototype.slice.apply(arguments);\n\n if (typeof console !== 'undefined' && console.warn) {\n console.warn.apply(console, args);\n }\n}\n/*\nInternal: Loop over each array in a geojson object and apply a function to it. Used by spatial reference converters.\n*/\n\nvar eachPosition = function eachPosition(coordinates, func) {\n for (var i = 0; i < coordinates.length; i++) {\n // we found a number so lets convert the pair\n if (typeof coordinates[i][0] === 'number') {\n coordinates[i] = func(coordinates[i]);\n } // we found an coordinates array it again and run the function against it\n\n\n if (_typeof(coordinates[i]) === 'object') {\n coordinates[i] = eachPosition(coordinates[i], func);\n }\n }\n\n return coordinates;\n};\n/*\nApply a function agaist all positions in a geojson object. Used by spatial reference converters.\n*/\n\n\nvar applyConverter = function applyConverter(geojson, converter, noCrs) {\n if (geojson.type === 'Point') {\n geojson.coordinates = converter(geojson.coordinates);\n } else if (geojson.type === 'Feature') {\n geojson.geometry = applyConverter(geojson.geometry, converter, true);\n } else if (geojson.type === 'FeatureCollection') {\n for (var f = 0; f < geojson.features.length; f++) {\n geojson.features[f] = applyConverter(geojson.features[f], converter, true);\n }\n } else if (geojson.type === 'GeometryCollection') {\n for (var g = 0; g < geojson.geometries.length; g++) {\n geojson.geometries[g] = applyConverter(geojson.geometries[g], converter, true);\n }\n } else {\n geojson.coordinates = eachPosition(geojson.coordinates, converter);\n }\n\n if (!noCrs) {\n if (converter === positionToMercator) {\n geojson.crs = MercatorCRS;\n }\n }\n\n if (converter === positionToGeographic) {\n delete geojson.crs;\n }\n\n return geojson;\n};\nvar coordinatesEqual = function coordinatesEqual(a, b) {\n if (a.length !== b.length) {\n return false;\n }\n\n var na = a.slice().sort(compSort);\n var nb = b.slice().sort(compSort);\n\n for (var i = 0; i < na.length; i++) {\n if (na[i].length !== nb[i].length) {\n return false;\n }\n\n for (var j = 0; j < na.length; j++) {\n if (na[i][j] !== nb[i][j]) {\n return false;\n }\n }\n }\n\n return true;\n};\n\nvar convexHull = function convexHull(geojson) {\n var coordinates = [];\n var i;\n var j;\n\n if (geojson.type === 'Point') {\n return null;\n } else if (geojson.type === 'LineString' || geojson.type === 'MultiPoint') {\n if (geojson.coordinates && geojson.coordinates.length >= 3) {\n coordinates = geojson.coordinates;\n } else {\n return null;\n }\n } else if (geojson.type === 'Polygon' || geojson.type === 'MultiLineString') {\n if (geojson.coordinates && geojson.coordinates.length > 0) {\n for (i = 0; i < geojson.coordinates.length; i++) {\n coordinates = coordinates.concat(geojson.coordinates[i]);\n }\n\n if (coordinates.length < 3) {\n return null;\n }\n } else {\n return null;\n }\n } else if (geojson.type === 'MultiPolygon') {\n if (geojson.coordinates && geojson.coordinates.length > 0) {\n for (i = 0; i < geojson.coordinates.length; i++) {\n for (j = 0; j < geojson.coordinates[i].length; j++) {\n coordinates = coordinates.concat(geojson.coordinates[i][j]);\n }\n }\n\n if (coordinates.length < 3) {\n return null;\n }\n } else {\n return null;\n }\n } else if (geojson.type === 'Feature') {\n return convexHull(geojson.geometry);\n }\n\n return {\n type: 'Polygon',\n coordinates: closedPolygon([coordinateConvexHull(coordinates)])\n };\n};\nvar isConvex = function isConvex(points) {\n var ltz;\n\n for (var i = 0; i < points.length - 3; i++) {\n var p1 = points[i];\n var p2 = points[i + 1];\n var p3 = points[i + 2];\n var v = [p2[0] - p1[0], p2[1] - p1[1]]; // p3.x * v.y - p3.y * v.x + v.x * p1.y - v.y * p1.x\n\n var res = p3[0] * v[1] - p3[1] * v[0] + v[0] * p1[1] - v[1] * p1[0];\n\n if (i === 0) {\n if (res < 0) {\n ltz = true;\n } else {\n ltz = false;\n }\n } else {\n if (ltz && res > 0 || !ltz && res < 0) {\n return false;\n }\n }\n }\n\n return true;\n};\n\nvar polygonContainsPoint = function polygonContainsPoint(polygon, point) {\n if (polygon && polygon.length) {\n if (polygon.length === 1) {\n // polygon with no holes\n return coordinatesContainPoint(polygon[0], point);\n } else {\n // polygon with holes\n if (coordinatesContainPoint(polygon[0], point)) {\n for (var i = 1; i < polygon.length; i++) {\n if (coordinatesContainPoint(polygon[i], point)) {\n return false; // found in hole\n }\n }\n\n return true;\n } else {\n return false;\n }\n }\n } else {\n return false;\n }\n};\n\nvar within = function within(geoJSON, comparisonGeoJSON) {\n var coordinates, i, contains; // if we are passed a feature, use the polygon inside instead\n\n if (comparisonGeoJSON.type === 'Feature') {\n comparisonGeoJSON = comparisonGeoJSON.geometry;\n } // point.within(point) :: equality\n\n\n if (comparisonGeoJSON.type === 'Point') {\n if (geoJSON.type === 'Point') {\n return pointsEqual(geoJSON.coordinates, comparisonGeoJSON.coordinates);\n }\n } // point.within(multilinestring)\n\n\n if (comparisonGeoJSON.type === 'MultiLineString') {\n if (geoJSON.type === 'Point') {\n for (i = 0; i < geoJSON.coordinates.length; i++) {\n var linestring = {\n type: 'LineString',\n coordinates: comparisonGeoJSON.coordinates[i]\n };\n\n if (within(geoJSON, linestring)) {\n return true;\n }\n }\n }\n } // point.within(linestring), point.within(multipoint)\n\n\n if (comparisonGeoJSON.type === 'LineString' || comparisonGeoJSON.type === 'MultiPoint') {\n if (geoJSON.type === 'Point') {\n for (i = 0; i < comparisonGeoJSON.coordinates.length; i++) {\n if (geoJSON.coordinates.length !== comparisonGeoJSON.coordinates[i].length) {\n return false;\n }\n\n if (pointsEqual(geoJSON.coordinates, comparisonGeoJSON.coordinates[i])) {\n return true;\n }\n }\n }\n }\n\n if (comparisonGeoJSON.type === 'Polygon') {\n // polygon.within(polygon)\n if (geoJSON.type === 'Polygon') {\n // check for equal polygons\n if (comparisonGeoJSON.coordinates.length === geoJSON.coordinates.length) {\n for (i = 0; i < geoJSON.coordinates.length; i++) {\n if (coordinatesEqual(geoJSON.coordinates[i], comparisonGeoJSON.coordinates[i])) {\n return true;\n }\n }\n }\n\n if (geoJSON.coordinates.length && polygonContainsPoint(comparisonGeoJSON.coordinates, geoJSON.coordinates[0][0])) {\n return !arraysIntersectArrays(closedPolygon(geoJSON.coordinates), closedPolygon(comparisonGeoJSON.coordinates));\n } else {\n return false;\n } // point.within(polygon)\n\n } else if (geoJSON.type === 'Point') {\n return polygonContainsPoint(comparisonGeoJSON.coordinates, geoJSON.coordinates); // linestring/multipoint withing polygon\n } else if (geoJSON.type === 'LineString' || geoJSON.type === 'MultiPoint') {\n if (!geoJSON.coordinates || geoJSON.coordinates.length === 0) {\n return false;\n }\n\n for (i = 0; i < geoJSON.coordinates.length; i++) {\n if (polygonContainsPoint(comparisonGeoJSON.coordinates, geoJSON.coordinates[i]) === false) {\n return false;\n }\n }\n\n return true; // multilinestring.within(polygon)\n } else if (geoJSON.type === 'MultiLineString') {\n for (i = 0; i < geoJSON.coordinates.length; i++) {\n var ls = {\n type: 'LineString',\n coordinates: geoJSON.coordinates[i]\n };\n\n if (within(ls, comparisonGeoJSON) === false) {\n contains++;\n return false;\n }\n }\n\n return true; // multipolygon.within(polygon)\n } else if (geoJSON.type === 'MultiPolygon') {\n for (i = 0; i < geoJSON.coordinates.length; i++) {\n var p1 = {\n type: 'Polygon',\n coordinates: geoJSON.coordinates[i]\n };\n\n if (within(p1, comparisonGeoJSON) === false) {\n return false;\n }\n }\n\n return true;\n }\n }\n\n if (comparisonGeoJSON.type === 'MultiPolygon') {\n // point.within(multipolygon)\n if (geoJSON.type === 'Point') {\n if (comparisonGeoJSON.coordinates.length) {\n for (i = 0; i < comparisonGeoJSON.coordinates.length; i++) {\n coordinates = comparisonGeoJSON.coordinates[i];\n\n if (polygonContainsPoint(coordinates, geoJSON.coordinates) && arraysIntersectArrays([geoJSON.coordinates], comparisonGeoJSON.coordinates) === false) {\n return true;\n }\n }\n }\n\n return false; // polygon.within(multipolygon)\n } else if (geoJSON.type === 'Polygon') {\n for (i = 0; i < geoJSON.coordinates.length; i++) {\n if (comparisonGeoJSON.coordinates[i].length === geoJSON.coordinates.length) {\n for (var j = 0; j < geoJSON.coordinates.length; j++) {\n if (coordinatesEqual(geoJSON.coordinates[j], comparisonGeoJSON.coordinates[i][j])) {\n return true;\n }\n }\n }\n }\n\n if (arraysIntersectArrays(geoJSON.coordinates, comparisonGeoJSON.coordinates) === false) {\n if (comparisonGeoJSON.coordinates.length) {\n for (i = 0; i < comparisonGeoJSON.coordinates.length; i++) {\n coordinates = comparisonGeoJSON.coordinates[i];\n\n if (polygonContainsPoint(coordinates, geoJSON.coordinates[0][0]) === false) {\n contains = false;\n } else {\n contains = true;\n }\n }\n\n return contains;\n }\n } // linestring.within(multipolygon), multipoint.within(multipolygon)\n\n } else if (geoJSON.type === 'LineString' || geoJSON.type === 'MultiPoint') {\n for (i = 0; i < comparisonGeoJSON.coordinates.length; i++) {\n var poly = {\n type: 'Polygon',\n coordinates: comparisonGeoJSON.coordinates[i]\n };\n\n if (within(geoJSON, poly)) {\n return true;\n }\n\n return false;\n } // multilinestring.within(multipolygon)\n\n } else if (geoJSON.type === 'MultiLineString') {\n for (i = 0; i < geoJSON.coordinates.length; i++) {\n var _ls = {\n type: 'LineString',\n coordinates: geoJSON.coordinates[i]\n };\n\n if (within(_ls, comparisonGeoJSON) === false) {\n return false;\n }\n }\n\n return true; // multipolygon.within(multipolygon)\n } else if (geoJSON.type === 'MultiPolygon') {\n for (i = 0; i < comparisonGeoJSON.coordinates.length; i++) {\n var mpoly = {\n type: 'Polygon',\n coordinates: comparisonGeoJSON.coordinates[i]\n };\n\n if (within(geoJSON, mpoly) === false) {\n return false;\n }\n }\n\n return true;\n }\n } // default to false\n\n\n return false;\n};\n\nvar contains = function contains(geoJSON, comparisonGeoJSON) {\n return within(comparisonGeoJSON, geoJSON);\n};\n\nvar intersects = function intersects(geoJSON, comparisonGeoJSON) {\n // if we are passed a feature, use the polygon inside instead\n if (comparisonGeoJSON.type === 'Feature') {\n comparisonGeoJSON = comparisonGeoJSON.geometry;\n }\n\n if (within(geoJSON, comparisonGeoJSON) || within(comparisonGeoJSON, geoJSON)) {\n return true;\n }\n\n if (geoJSON.type === 'MultiPolygon' && multipolygonIntersection(geoJSON, comparisonGeoJSON)) {\n return true;\n }\n\n if (geoJSON.type !== 'Point' && geoJSON.type !== 'MultiPoint' && comparisonGeoJSON.type !== 'Point' && comparisonGeoJSON.type !== 'MultiPoint') {\n return arraysIntersectArrays(geoJSON.coordinates, comparisonGeoJSON.coordinates);\n } else if (geoJSON.type === 'Feature') {\n // in the case of a Feature, use the internal geometry for intersection\n var inner = geoJSON.geometry;\n return intersects(inner, comparisonGeoJSON);\n }\n\n warn('Type ' + geoJSON.type + ' to ' + comparisonGeoJSON.type + ' intersection is not supported by intersects');\n return false;\n};\n\nfunction multipolygonIntersection(geoJSON, comparisonGeoJSON) {\n return geoJSON.coordinates.some(function (coordinates) {\n var componentPolygon = {\n type: 'Polygon',\n coordinates: coordinates\n };\n return within(componentPolygon, comparisonGeoJSON) || within(comparisonGeoJSON, componentPolygon);\n });\n}\n\nvar VINCENTY = {\n a: 6378137,\n b: 6356752.3142,\n f: 1 / 298.257223563\n};\nvar toGeographic = function toGeographic(geojson) {\n return applyConverter(geojson, positionToGeographic);\n};\nvar toCircle = function toCircle(center, radius, interpolate) {\n var steps = interpolate || 64;\n var rad = radius || 250;\n\n if (!center || center.length < 2 || !rad || !steps) {\n throw new Error('Terraformer: missing parameter for Terraformer.Circle');\n }\n\n return {\n type: 'Feature',\n geometry: createGeodesicCircle(center, rad, steps),\n properties: {\n radius: rad,\n center: center,\n steps: steps\n }\n };\n};\n/* cribbed from\n http://stackoverflow.com/questions/24145205/writing-a-function-to-convert-a-circle-to-a-polygon-using-leaflet-js\n*/\n\nvar createGeodesicCircle = function createGeodesicCircle(center, radius, interpolate) {\n var steps = interpolate || 64;\n var polygon = {\n type: 'Polygon',\n coordinates: [[]]\n };\n var angle;\n\n for (var i = 0; i < steps; i++) {\n angle = i * 360 / steps;\n polygon.coordinates[0].push(destinationVincenty(center, angle, radius));\n }\n\n polygon.coordinates = closedPolygon(polygon.coordinates);\n return polygon;\n};\n\nvar destinationVincenty = function destinationVincenty(coords, brng, dist) {\n var cos2SigmaM, sinSigma, cosSigma, deltaSigma;\n var a = VINCENTY.a;\n var b = VINCENTY.b;\n var f = VINCENTY.f;\n var lon1 = coords[0];\n var lat1 = coords[1];\n var s = dist;\n var pi = Math.PI;\n var alpha1 = brng * pi / 180; // converts brng degrees to radius\n\n var sinAlpha1 = Math.sin(alpha1);\n var cosAlpha1 = Math.cos(alpha1);\n var tanU1 = (1 - f) * Math.tan(lat1 * pi / 180\n /* converts lat1 degrees to radius */\n );\n var cosU1 = 1 / Math.sqrt(1 + tanU1 * tanU1);\n var sinU1 = tanU1 * cosU1;\n var sigma1 = Math.atan2(tanU1, cosAlpha1);\n var sinAlpha = cosU1 * sinAlpha1;\n var cosSqAlpha = 1 - sinAlpha * sinAlpha;\n var uSq = cosSqAlpha * (a * a - b * b) / (b * b);\n var A = 1 + uSq / 16384 * (4096 + uSq * (-768 + uSq * (320 - 175 * uSq)));\n var B = uSq / 1024 * (256 + uSq * (-128 + uSq * (74 - 47 * uSq)));\n var sigma = s / (b * A);\n var sigmaP = 2 * Math.PI;\n\n while (Math.abs(sigma - sigmaP) > 1e-12) {\n cos2SigmaM = Math.cos(2 * sigma1 + sigma);\n sinSigma = Math.sin(sigma);\n cosSigma = Math.cos(sigma);\n deltaSigma = B * sinSigma * (cos2SigmaM + B / 4 * (cosSigma * (-1 + 2 * cos2SigmaM * cos2SigmaM) - B / 6 * cos2SigmaM * (-3 + 4 * sinSigma * sinSigma) * (-3 + 4 * cos2SigmaM * cos2SigmaM)));\n sigmaP = sigma;\n sigma = s / (b * A) + deltaSigma;\n }\n\n var tmp = sinU1 * sinSigma - cosU1 * cosSigma * cosAlpha1;\n var lat2 = Math.atan2(sinU1 * cosSigma + cosU1 * sinSigma * cosAlpha1, (1 - f) * Math.sqrt(sinAlpha * sinAlpha + tmp * tmp));\n var lambda = Math.atan2(sinSigma * sinAlpha1, cosU1 * cosSigma - sinU1 * sinSigma * cosAlpha1);\n var C = f / 16 * cosSqAlpha * (4 + f * (4 - 3 * cosSqAlpha));\n var lam = lambda - (1 - C) * f * sinAlpha * (sigma + C * sinSigma * (cos2SigmaM + C * cosSigma * (-1 + 2 * cos2SigmaM * cos2SigmaM)));\n var lamFunc = lon1 + lam * 180 / pi; // converts lam radius to degrees\n\n var lat2a = lat2 * 180 / pi; // converts lat2a radius to degrees\n\n return [lamFunc, lat2a];\n};\n\n/* Copyright (c) 2012-2019 Environmental Systems Research Institute, Inc.\n * Apache-2.0 */\n/**\n * Calculate the envelope surrounding the input.\n * @function\n * @param {object} GeoJSON - The input [GeoJSON](https://tools.ietf.org/html/rfc7946) Geometry, Feature, GeometryCollection or FeatureCollection.\n * @return {Object} Object in the form { x, y, w, h }.\n * ```js\n * import { calculateEnvelope } from \"@terraformer/spatial\"\n *\n * calculateEnvelope({\n * type: \"Point\",\n * coordinates: [ 100, 100 ]\n * })\n *\n * >> { x: 100, y: 100, w: 0, h: 0, }\n * ```\n */\n\nvar calculateEnvelope = function calculateEnvelope(geojson) {\n var bounds = calculateBounds(geojson);\n return {\n x: bounds[0],\n y: bounds[1],\n w: Math.abs(bounds[0] - bounds[2]),\n h: Math.abs(bounds[1] - bounds[3])\n };\n};\n/**\n * Reproject WGS84 (Lat/Lng) GeoJSON to Web Mercator.\n * @function\n * @param {object} GeoJSON - The input [GeoJSON](https://tools.ietf.org/html/rfc7946) Geometry, Feature, GeometryCollection or FeatureCollection.\n * @return {object} GeoJSON\n * ```js\n * import { toMercator } from \"@terraformer/spatial\"\n *\n * toMercator({\n * type: \"Point\",\n * coordinates: [ 45, 60 ]\n * })\n *\n * >> { type: \"Point\", coordinates: [ -13580978, 5621521 ], crs }\n * ```\n */\n\nvar toMercator = function toMercator(geojson) {\n return applyConverter(geojson, positionToMercator);\n};\n\nexport { GeographicCRS, MercatorCRS, applyConverter, calculateBounds, calculateEnvelope, contains, convexHull, intersects, isConvex, polygonContainsPoint, positionToGeographic, positionToMercator, toCircle, toGeographic, toMercator, within };\n", "import * as L from 'leaflet';\nimport * as GeoJSON from 'geojson';\nimport { calculateBounds, toCircle, contains, intersects } from '@terraformer/spatial';\n\nfunction geoJSONGeometryToBounds(geometry: GeoJSON.GeometryObject) {\n const bounds = calculateBounds(geometry);\n const leafletBounds = L.latLngBounds([bounds[1], bounds[0]], [bounds[3], bounds[2]]);\n return leafletBounds;\n}\n\nfunction getCircleMarkerRadius(circleMarker: L.CircleMarker, crs: L.CRS, zoom: number) {\n const latLng = circleMarker.getLatLng();\n const point = crs.latLngToPoint(latLng, zoom);\n const delta = circleMarker.getRadius() / Math.SQRT2;\n const topLeftPoint = L.point([point.x - delta, point.y - delta]);\n const topLeftLatLng = crs.pointToLatLng(topLeftPoint, zoom);\n const radius = crs.distance(latLng, topLeftLatLng);\n return radius;\n}\n\nfunction circleToGeoJSONGeometry(latLng: L.LatLng, radius: number) {\n return toCircle(L.GeoJSON.latLngToCoords(latLng), radius).geometry;\n}\n\nfunction layerToGeoJSONGeometry(layer: L.Layer, options: { zoom?: number, crs?: L.CRS } = {}): GeoJSON.Geometry | undefined {\n if (layer instanceof L.Circle) {\n const latLng = layer.getLatLng();\n const radius = layer.getRadius();\n return circleToGeoJSONGeometry(latLng, radius);\n } else if (layer instanceof L.CircleMarker) {\n if (options.zoom != undefined && options.crs != undefined) {\n const latLng = layer.getLatLng();\n const radius = getCircleMarkerRadius(layer, options.crs, options.zoom);\n return circleToGeoJSONGeometry(latLng, radius);\n } else {\n console.warn(\"Zoom and CRS is required for calculating CircleMarker polygon, falling back to center point only\");\n return layer.toGeoJSON().geometry;\n }\n } else if (layer instanceof L.Marker || layer instanceof L.Polyline) {\n return layer.toGeoJSON().geometry;\n } else {\n console.warn(\"Layer GeoJSON geometry is not available\", layer);\n return undefined;\n }\n}\n\nfunction polygonContains(polygon: GeoJSON.Polygon, layerGeometry: GeoJSON.GeometryObject) {\n return contains(polygon, layerGeometry);\n}\n\nfunction polygonIntersects(polygon: GeoJSON.Polygon, layerGeometry: GeoJSON.GeometryObject) {\n return layerGeometry.type === \"Point\" ?\n contains(polygon, layerGeometry) :\n intersects(polygon, layerGeometry);\n}\n\nexport function getLayersInPolygon(polygon: L.Polygon, layers: L.Layer[], options: { zoom?: number, crs?: L.CRS, intersect?: boolean } = {}) {\n const polygonGeometry = polygon.toGeoJSON().geometry as GeoJSON.Polygon;\n const polygonBounds = polygon.getBounds();\n\n const selectedLayers = layers.filter(layer => {\n // check bounds first (fast)\n let layerGeometry;\n let layerBounds;\n if (layer instanceof L.Polyline) {\n layerBounds = layer.getBounds();\n } else {\n layerGeometry = layerToGeoJSONGeometry(layer, options);\n if (layerGeometry) {\n layerBounds = geoJSONGeometryToBounds(layerGeometry);\n }\n }\n\n // some bounds may be invalid, for example for empty polylines\n if (!layerBounds || !layerBounds.isValid()) {\n return false;\n }\n\n const boundsResult = options.intersect ?\n polygonBounds.intersects(layerBounds) :\n polygonBounds.contains(layerBounds);\n if (!boundsResult) {\n return false;\n }\n\n // check full geometry (slow)\n if (!layerGeometry) {\n layerGeometry = layerToGeoJSONGeometry(layer, options);\n }\n if (!layerGeometry) {\n return false;\n }\n\n const geometryResult = options.intersect ?\n polygonIntersects(polygonGeometry, layerGeometry) :\n polygonContains(polygonGeometry, layerGeometry);\n return geometryResult;\n });\n \n return selectedLayers;\n}", "function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n", "import * as L from 'leaflet';\nimport { LassoPolygon } from './lasso-polygon';\nimport { getLayersInPolygon } from './calc';\nimport './lasso-handler.css';\n\nexport interface LassoHandlerOptions {\n polygon?: L.PolylineOptions,\n intersect?: boolean;\n}\n\ninterface LassoHandlerFinishedEventData {\n originalEvent: MouseEvent;\n latLngs: L.LatLng[];\n layers: L.Layer[];\n}\n\nexport type LassoHandlerFinishedEvent = L.LeafletEvent & LassoHandlerFinishedEventData;\n\nexport const ENABLED_EVENT = 'lasso.enabled';\nexport const DISABLED_EVENT = 'lasso.disabled';\nexport const FINISHED_EVENT = 'lasso.finished';\n\nexport const ACTIVE_CLASS = 'leaflet-lasso-active';\n\nexport class LassoHandler extends L.Handler {\n options: LassoHandlerOptions = {\n polygon: {\n color: '#00C3FF',\n weight: 2,\n },\n intersect: false,\n };\n\n private map: L.Map;\n\n private polygon?: LassoPolygon;\n\n private onMapMouseDownBound = this.onMapMouseDown.bind(this);\n private onDocumentMouseMoveBound = this.onDocumentMouseMove.bind(this);\n private onDocumentMouseUpBound = this.onDocumentMouseUp.bind(this);\n\n constructor(map: L.Map, options: LassoHandlerOptions = {}) {\n super(map);\n \n this.map = map;\n L.Util.setOptions(this, options);\n }\n\n setOptions(options: LassoHandlerOptions) {\n this.options = { ...this.options, ...options };\n }\n\n toggle() {\n if (this.enabled()) {\n this.disable();\n } else {\n this.enable();\n }\n }\n \n addHooks() {\n this.map.getPane('mapPane');\n this.map.getContainer().addEventListener('mousedown', this.onMapMouseDownBound);\n this.map.getContainer().addEventListener('touchstart', this.onMapMouseDownBound);\n \n const mapContainer = this.map.getContainer();\n mapContainer.classList.add(ACTIVE_CLASS);\n\n this.map.dragging.disable();\n this.map.fire(ENABLED_EVENT);\n }\n\n removeHooks() {\n if (this.polygon) {\n this.map.removeLayer(this.polygon);\n this.polygon = undefined;\n }\n\n this.map.getContainer().removeEventListener('mousedown', this.onMapMouseDownBound);\n this.map.getContainer().removeEventListener('touchstart', this.onMapMouseDownBound);\n document.removeEventListener('mousemove', this.onDocumentMouseMoveBound);\n document.removeEventListener('touchmove', this.onDocumentMouseMoveBound);\n document.removeEventListener('mouseup', this.onDocumentMouseUpBound);\n document.removeEventListener('touchend', this.onDocumentMouseUpBound);\n\n this.map.getContainer().classList.remove(ACTIVE_CLASS);\n document.body.classList.remove(ACTIVE_CLASS);\n\n this.map.dragging.enable();\n this.map.fire(DISABLED_EVENT);\n }\n\n private onMapMouseDown(event: Event) {\n event.stopPropagation();\n \n let event2 = this.eventToMouseEvent('down', event);\n if (!event2) {\n return;\n }\n\n // activate lasso only for left mouse button click\n if (event instanceof MouseEvent && !(event as any)._simulated && event.buttons !== 1) {\n this.disable();\n return;\n }\n\n // skip clicks on controls\n if ((event.target as HTMLElement).closest('.leaflet-control-container')) {\n return;\n }\n\n const latLng = this.map.mouseEventToLatLng(event2);\n this.polygon = new LassoPolygon([latLng], this.options.polygon).addTo(this.map);\n\n document.body.classList.add(ACTIVE_CLASS);\n\n document.addEventListener('mousemove', this.onDocumentMouseMoveBound);\n document.addEventListener('touchmove', this.onDocumentMouseMoveBound);\n document.addEventListener('mouseup', this.onDocumentMouseUpBound);\n document.addEventListener('touchend', this.onDocumentMouseUpBound);\n\n event.preventDefault();\n }\n\n private onDocumentMouseMove(event: Event) {\n event.stopPropagation();\n \n let event2 = this.eventToMouseEvent('move', event);\n if (!event2) {\n return;\n }\n\n if (!this.polygon) {\n return;\n }\n\n // keep lasso active only if left mouse button is hold\n if (event instanceof MouseEvent && !(event as any)._simulated && event.buttons !== 1) {\n // warning disabled as it causes confusion and the cause is unclear\n // console.warn('mouseup event was missed');\n this.finish(event);\n return;\n }\n\n const latLng = this.map.mouseEventToLatLng(event2);\n this.polygon.addLatLng(latLng);\n\n event.preventDefault();\n }\n\n private onDocumentMouseUp(event: MouseEvent | TouchEvent) {\n this.finish(event);\n event.stopPropagation();\n event.preventDefault();\n }\n\n private eventToMouseEvent(type: string, event: Event) {\n if (event instanceof MouseEvent) {\n return event;\n }\n if (event instanceof TouchEvent && event.touches.length === 1) {\n return new MouseEvent(type, {\n screenX: event.touches[0].screenX,\n screenY: event.touches[0].screenY,\n clientX: event.touches[0].clientX,\n clientY: event.touches[0].clientY,\n buttons: 1,\n });\n }\n }\n\n private finish(event: MouseEvent | TouchEvent) {\n if (!this.polygon) {\n return;\n }\n\n const layers: L.Layer[] = [];\n this.map.eachLayer(layer => {\n if (layer === this.polygon || layer === this.polygon!.polyline || layer === this.polygon!.polygon) {\n return;\n }\n\n if (L.MarkerCluster && layer instanceof L.MarkerCluster) {\n layers.push(...layer.getAllChildMarkers());\n } else if (layer instanceof L.Marker || layer instanceof L.Path) {\n layers.push(layer);\n }\n });\n\n const selectedFeatures = getLayersInPolygon(this.polygon.polygon, layers, {\n zoom: this.map.getZoom(),\n crs: this.map.options.crs,\n intersect: this.options.intersect,\n });\n\n this.map.fire(FINISHED_EVENT, {\n originalEvent: event,\n latLngs: this.polygon.getLatLngs(),\n layers: selectedFeatures,\n } as LassoHandlerFinishedEventData);\n\n this.disable();\n }\n}\n", "import * as L from 'leaflet';\nimport { LassoHandler, LassoHandlerOptions } from './lasso-handler';\nimport './lasso-control.css';\n\nexport interface LassoControlOptionsData {\n title?: string;\n}\n\nexport type LassoControlOptions = L.ControlOptions & LassoControlOptionsData & LassoHandlerOptions;\n\nexport class LassoControl extends L.Control {\n options: LassoControlOptions = {\n position: 'topright',\n title: 'Toggle Lasso'\n };\n\n private lasso?: LassoHandler;\n\n constructor(options: LassoControlOptions = {}) {\n super();\n\n L.Util.setOptions(this, options);\n }\n\n setOptions(options: LassoControlOptions) {\n this.options = { ...this.options, ...options };\n \n if (this.lasso) {\n this.lasso.setOptions(this.options);\n }\n }\n\n onAdd(map: L.Map) {\n this.lasso = new LassoHandler(map, this.options);\n\n const container = L.DomUtil.create('div', 'leaflet-bar leaflet-control') as HTMLDivElement;\n const button = L.DomUtil.create('a', 'leaflet-control-lasso', container) as HTMLAnchorElement;\n button.href = 'javascript:void(0)';\n button.title = this.options.title!;\n button.setAttribute('role', 'button');\n button.setAttribute('aria-label', button.title);\n\n L.DomEvent.addListener(button, 'click', this.toggle, this);\n L.DomEvent.disableClickPropagation(button);\n\n return container;\n }\n\n enabled() {\n if (!this.lasso) {\n return false;\n }\n return this.lasso.enabled();\n }\n\n enable() {\n if (!this.lasso) {\n return;\n }\n this.lasso.enable();\n }\n\n disable() {\n if (!this.lasso) {\n return;\n }\n this.lasso.disable();\n }\n\n toggle() {\n if (!this.lasso) {\n return;\n }\n this.lasso.toggle();\n }\n}\n", "import 'leaflet';\nimport { LassoHandler } from './lasso-handler';\nimport { LassoControl } from './lasso-control';\n\ndeclare module 'leaflet' {\n type Lasso = LassoHandler;\n let Lasso: typeof LassoHandler;\n\n let lasso: (...args: ConstructorParameters<typeof LassoHandler>) => LassoHandler;\n \n namespace Control {\n type Lasso = LassoControl;\n let Lasso: typeof LassoControl;\n }\n\n namespace control {\n let lasso: (...args: ConstructorParameters<typeof LassoControl>) => LassoControl;\n }\n}\n\nif (typeof window.L !== 'undefined') {\n window.L.Lasso = LassoHandler;\n window.L.lasso = (...args: ConstructorParameters<typeof LassoHandler>) => new LassoHandler(...args);\n\n window.L.Control.Lasso = LassoControl;\n window.L.control.lasso = (...args: ConstructorParameters<typeof LassoControl>) => new LassoControl(...args);\n}\n\nexport * from './lasso-handler';\nexport * from './lasso-control';", "\nexport default function sortKD(ids, coords, nodeSize, left, right, depth) {\n if (right - left <= nodeSize) return;\n\n const m = (left + right) >> 1;\n\n select(ids, coords, m, left, right, depth % 2);\n\n sortKD(ids, coords, nodeSize, left, m - 1, depth + 1);\n sortKD(ids, coords, nodeSize, m + 1, right, depth + 1);\n}\n\nfunction select(ids, coords, k, left, right, inc) {\n\n while (right > left) {\n if (right - left > 600) {\n const n = right - left + 1;\n const m = k - left + 1;\n const z = Math.log(n);\n const s = 0.5 * Math.exp(2 * z / 3);\n const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n select(ids, coords, k, newLeft, newRight, inc);\n }\n\n const t = coords[2 * k + inc];\n let i = left;\n let j = right;\n\n swapItem(ids, coords, left, k);\n if (coords[2 * right + inc] > t) swapItem(ids, coords, left, right);\n\n while (i < j) {\n swapItem(ids, coords, i, j);\n i++;\n j--;\n while (coords[2 * i + inc] < t) i++;\n while (coords[2 * j + inc] > t) j--;\n }\n\n if (coords[2 * left + inc] === t) swapItem(ids, coords, left, j);\n else {\n j++;\n swapItem(ids, coords, j, right);\n }\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n}\n\nfunction swapItem(ids, coords, i, j) {\n swap(ids, i, j);\n swap(coords, 2 * i, 2 * j);\n swap(coords, 2 * i + 1, 2 * j + 1);\n}\n\nfunction swap(arr, i, j) {\n const tmp = arr[i];\n arr[i] = arr[j];\n arr[j] = tmp;\n}\n", "\nexport default function range(ids, coords, minX, minY, maxX, maxY, nodeSize) {\n const stack = [0, ids.length - 1, 0];\n const result = [];\n let x, y;\n\n while (stack.length) {\n const axis = stack.pop();\n const right = stack.pop();\n const left = stack.pop();\n\n if (right - left <= nodeSize) {\n for (let i = left; i <= right; i++) {\n x = coords[2 * i];\n y = coords[2 * i + 1];\n if (x >= minX && x <= maxX && y >= minY && y <= maxY) result.push(ids[i]);\n }\n continue;\n }\n\n const m = Math.floor((left + right) / 2);\n\n x = coords[2 * m];\n y = coords[2 * m + 1];\n\n if (x >= minX && x <= maxX && y >= minY && y <= maxY) result.push(ids[m]);\n\n const nextAxis = (axis + 1) % 2;\n\n if (axis === 0 ? minX <= x : minY <= y) {\n stack.push(left);\n stack.push(m - 1);\n stack.push(nextAxis);\n }\n if (axis === 0 ? maxX >= x : maxY >= y) {\n stack.push(m + 1);\n stack.push(right);\n stack.push(nextAxis);\n }\n }\n\n return result;\n}\n", "\nexport default function within(ids, coords, qx, qy, r, nodeSize) {\n const stack = [0, ids.length - 1, 0];\n const result = [];\n const r2 = r * r;\n\n while (stack.length) {\n const axis = stack.pop();\n const right = stack.pop();\n const left = stack.pop();\n\n if (right - left <= nodeSize) {\n for (let i = left; i <= right; i++) {\n if (sqDist(coords[2 * i], coords[2 * i + 1], qx, qy) <= r2) result.push(ids[i]);\n }\n continue;\n }\n\n const m = Math.floor((left + right) / 2);\n\n const x = coords[2 * m];\n const y = coords[2 * m + 1];\n\n if (sqDist(x, y, qx, qy) <= r2) result.push(ids[m]);\n\n const nextAxis = (axis + 1) % 2;\n\n if (axis === 0 ? qx - r <= x : qy - r <= y) {\n stack.push(left);\n stack.push(m - 1);\n stack.push(nextAxis);\n }\n if (axis === 0 ? qx + r >= x : qy + r >= y) {\n stack.push(m + 1);\n stack.push(right);\n stack.push(nextAxis);\n }\n }\n\n return result;\n}\n\nfunction sqDist(ax, ay, bx, by) {\n const dx = ax - bx;\n const dy = ay - by;\n return dx * dx + dy * dy;\n}\n", "\nimport sort from './sort';\nimport range from './range';\nimport within from './within';\n\nconst defaultGetX = p => p[0];\nconst defaultGetY = p => p[1];\n\nexport default class KDBush {\n constructor(points, getX = defaultGetX, getY = defaultGetY, nodeSize = 64, ArrayType = Float64Array) {\n this.nodeSize = nodeSize;\n this.points = points;\n\n const IndexArrayType = points.length < 65536 ? Uint16Array : Uint32Array;\n\n const ids = this.ids = new IndexArrayType(points.length);\n const coords = this.coords = new ArrayType(points.length * 2);\n\n for (let i = 0; i < points.length; i++) {\n ids[i] = i;\n coords[2 * i] = getX(points[i]);\n coords[2 * i + 1] = getY(points[i]);\n }\n\n sort(ids, coords, nodeSize, 0, ids.length - 1, 0);\n }\n\n range(minX, minY, maxX, maxY) {\n return range(this.ids, this.coords, minX, minY, maxX, maxY, this.nodeSize);\n }\n\n within(x, y, r) {\n return within(this.ids, this.coords, x, y, r, this.nodeSize);\n }\n}\n", "\nimport KDBush from 'kdbush';\n\nconst defaultOptions = {\n minZoom: 0, // min zoom to generate clusters on\n maxZoom: 16, // max zoom level to cluster the points on\n minPoints: 2, // minimum points to form a cluster\n radius: 40, // cluster radius in pixels\n extent: 512, // tile extent (radius is calculated relative to it)\n nodeSize: 64, // size of the KD-tree leaf node, affects performance\n log: false, // whether to log timing info\n\n // whether to generate numeric ids for input features (in vector tiles)\n generateId: false,\n\n // a reduce function for calculating custom cluster properties\n reduce: null, // (accumulated, props) => { accumulated.sum += props.sum; }\n\n // properties to use for individual points when running the reducer\n map: props => props // props => ({sum: props.my_value})\n};\n\nconst fround = Math.fround || (tmp => ((x) => { tmp[0] = +x; return tmp[0]; }))(new Float32Array(1));\n\nexport default class Supercluster {\n constructor(options) {\n this.options = extend(Object.create(defaultOptions), options);\n this.trees = new Array(this.options.maxZoom + 1);\n }\n\n load(points) {\n const {log, minZoom, maxZoom, nodeSize} = this.options;\n\n if (log) console.time('total time');\n\n const timerId = `prepare ${ points.length } points`;\n if (log) console.time(timerId);\n\n this.points = points;\n\n // generate a cluster object for each point and index input points into a KD-tree\n let clusters = [];\n for (let i = 0; i < points.length; i++) {\n if (!points[i].geometry) continue;\n clusters.push(createPointCluster(points[i], i));\n }\n this.trees[maxZoom + 1] = new KDBush(clusters, getX, getY, nodeSize, Float32Array);\n\n if (log) console.timeEnd(timerId);\n\n // cluster points on max zoom, then cluster the results on previous zoom, etc.;\n // results in a cluster hierarchy across zoom levels\n for (let z = maxZoom; z >= minZoom; z--) {\n const now = +Date.now();\n\n // create a new set of clusters for the zoom and index them with a KD-tree\n clusters = this._cluster(clusters, z);\n this.trees[z] = new KDBush(clusters, getX, getY, nodeSize, Float32Array);\n\n if (log) console.log('z%d: %d clusters in %dms', z, clusters.length, +Date.now() - now);\n }\n\n if (log) console.timeEnd('total time');\n\n return this;\n }\n\n getClusters(bbox, zoom) {\n let minLng = ((bbox[0] + 180) % 360 + 360) % 360 - 180;\n const minLat = Math.max(-90, Math.min(90, bbox[1]));\n let maxLng = bbox[2] === 180 ? 180 : ((bbox[2] + 180) % 360 + 360) % 360 - 180;\n const maxLat = Math.max(-90, Math.min(90, bbox[3]));\n\n if (bbox[2] - bbox[0] >= 360) {\n minLng = -180;\n maxLng = 180;\n } else if (minLng > maxLng) {\n const easternHem = this.getClusters([minLng, minLat, 180, maxLat], zoom);\n const westernHem = this.getClusters([-180, minLat, maxLng, maxLat], zoom);\n return easternHem.concat(westernHem);\n }\n\n const tree = this.trees[this._limitZoom(zoom)];\n const ids = tree.range(lngX(minLng), latY(maxLat), lngX(maxLng), latY(minLat));\n const clusters = [];\n for (const id of ids) {\n const c = tree.points[id];\n clusters.push(c.numPoints ? getClusterJSON(c) : this.points[c.index]);\n }\n return clusters;\n }\n\n getChildren(clusterId) {\n const originId = this._getOriginId(clusterId);\n const originZoom = this._getOriginZoom(clusterId);\n const errorMsg = 'No cluster with the specified id.';\n\n const index = this.trees[originZoom];\n if (!index) throw new Error(errorMsg);\n\n const origin = index.points[originId];\n if (!origin) throw new Error(errorMsg);\n\n const r = this.options.radius / (this.options.extent * Math.pow(2, originZoom - 1));\n const ids = index.within(origin.x, origin.y, r);\n const children = [];\n for (const id of ids) {\n const c = index.points[id];\n if (c.parentId === clusterId) {\n children.push(c.numPoints ? getClusterJSON(c) : this.points[c.index]);\n }\n }\n\n if (children.length === 0) throw new Error(errorMsg);\n\n return children;\n }\n\n getLeaves(clusterId, limit, offset) {\n limit = limit || 10;\n offset = offset || 0;\n\n const leaves = [];\n this._appendLeaves(leaves, clusterId, limit, offset, 0);\n\n return leaves;\n }\n\n getTile(z, x, y) {\n const tree = this.trees[this._limitZoom(z)];\n const z2 = Math.pow(2, z);\n const {extent, radius} = this.options;\n const p = radius / extent;\n const top = (y - p) / z2;\n const bottom = (y + 1 + p) / z2;\n\n const tile = {\n features: []\n };\n\n this._addTileFeatures(\n tree.range((x - p) / z2, top, (x + 1 + p) / z2, bottom),\n tree.points, x, y, z2, tile);\n\n if (x === 0) {\n this._addTileFeatures(\n tree.range(1 - p / z2, top, 1, bottom),\n tree.points, z2, y, z2, tile);\n }\n if (x === z2 - 1) {\n this._addTileFeatures(\n tree.range(0, top, p / z2, bottom),\n tree.points, -1, y, z2, tile);\n }\n\n return tile.features.length ? tile : null;\n }\n\n getClusterExpansionZoom(clusterId) {\n let expansionZoom = this._getOriginZoom(clusterId) - 1;\n while (expansionZoom <= this.options.maxZoom) {\n const children = this.getChildren(clusterId);\n expansionZoom++;\n if (children.length !== 1) break;\n clusterId = children[0].properties.cluster_id;\n }\n return expansionZoom;\n }\n\n _appendLeaves(result, clusterId, limit, offset, skipped) {\n const children = this.getChildren(clusterId);\n\n for (const child of children) {\n const props = child.properties;\n\n if (props && props.cluster) {\n if (skipped + props.point_count <= offset) {\n // skip the whole cluster\n skipped += props.point_count;\n } else {\n // enter the cluster\n skipped = this._appendLeaves(result, props.cluster_id, limit, offset, skipped);\n // exit the cluster\n }\n } else if (skipped < offset) {\n // skip a single point\n skipped++;\n } else {\n // add a single point\n result.push(child);\n }\n if (result.length === limit) break;\n }\n\n return skipped;\n }\n\n _addTileFeatures(ids, points, x, y, z2, tile) {\n for (const i of ids) {\n const c = points[i];\n const isCluster = c.numPoints;\n\n let tags, px, py;\n if (isCluster) {\n tags = getClusterProperties(c);\n px = c.x;\n py = c.y;\n } else {\n const p = this.points[c.index];\n tags = p.properties;\n px = lngX(p.geometry.coordinates[0]);\n py = latY(p.geometry.coordinates[1]);\n }\n\n const f = {\n type: 1,\n geometry: [[\n Math.round(this.options.extent * (px * z2 - x)),\n Math.round(this.options.extent * (py * z2 - y))\n ]],\n tags\n };\n\n // assign id\n let id;\n if (isCluster) {\n id = c.id;\n } else if (this.options.generateId) {\n // optionally generate id\n id = c.index;\n } else if (this.points[c.index].id) {\n // keep id if already assigned\n id = this.points[c.index].id;\n }\n\n if (id !== undefined) f.id = id;\n\n tile.features.push(f);\n }\n }\n\n _limitZoom(z) {\n return Math.max(this.options.minZoom, Math.min(Math.floor(+z), this.options.maxZoom + 1));\n }\n\n _cluster(points, zoom) {\n const clusters = [];\n const {radius, extent, reduce, minPoints} = this.options;\n const r = radius / (extent * Math.pow(2, zoom));\n\n // loop through each point\n for (let i = 0; i < points.length; i++) {\n const p = points[i];\n // if we've already visited the point at this zoom level, skip it\n if (p.zoom <= zoom) continue;\n p.zoom = zoom;\n\n // find all nearby points\n const tree = this.trees[zoom + 1];\n const neighborIds = tree.within(p.x, p.y, r);\n\n const numPointsOrigin = p.numPoints || 1;\n let numPoints = numPointsOrigin;\n\n // count the number of points in a potential cluster\n for (const neighborId of neighborIds) {\n const b = tree.points[neighborId];\n // filter out neighbors that are already processed\n if (b.zoom > zoom) numPoints += b.numPoints || 1;\n }\n\n // if there were neighbors to merge, and there are enough points to form a cluster\n if (numPoints > numPointsOrigin && numPoints >= minPoints) {\n let wx = p.x * numPointsOrigin;\n let wy = p.y * numPointsOrigin;\n\n let clusterProperties = reduce && numPointsOrigin > 1 ? this._map(p, true) : null;\n\n // encode both zoom and point index on which the cluster originated -- offset by total length of features\n const id = (i << 5) + (zoom + 1) + this.points.length;\n\n for (const neighborId of neighborIds) {\n const b = tree.points[neighborId];\n\n if (b.zoom <= zoom) continue;\n b.zoom = zoom; // save the zoom (so it doesn't get processed twice)\n\n const numPoints2 = b.numPoints || 1;\n wx += b.x * numPoints2; // accumulate coordinates for calculating weighted center\n wy += b.y * numPoints2;\n\n b.parentId = id;\n\n if (reduce) {\n if (!clusterProperties) clusterProperties = this._map(p, true);\n reduce(clusterProperties, this._map(b));\n }\n }\n\n p.parentId = id;\n clusters.push(createCluster(wx / numPoints, wy / numPoints, id, numPoints, clusterProperties));\n\n } else { // left points as unclustered\n clusters.push(p);\n\n if (numPoints > 1) {\n for (const neighborId of neighborIds) {\n const b = tree.points[neighborId];\n if (b.zoom <= zoom) continue;\n b.zoom = zoom;\n clusters.push(b);\n }\n }\n }\n }\n\n return clusters;\n }\n\n // get index of the point from which the cluster originated\n _getOriginId(clusterId) {\n return (clusterId - this.points.length) >> 5;\n }\n\n // get zoom of the point from which the cluster originated\n _getOriginZoom(clusterId) {\n return (clusterId - this.points.length) % 32;\n }\n\n _map(point, clone) {\n if (point.numPoints) {\n return clone ? extend({}, point.properties) : point.properties;\n }\n const original = this.points[point.index].properties;\n const result = this.options.map(original);\n return clone && result === original ? extend({}, result) : result;\n }\n}\n\nfunction createCluster(x, y, id, numPoints, properties) {\n return {\n x: fround(x), // weighted cluster center; round for consistency with Float32Array index\n y: fround(y),\n zoom: Infinity, // the last zoom the cluster was processed at\n id, // encodes index of the first child of the cluster and its zoom level\n parentId: -1, // parent cluster id\n numPoints,\n properties\n };\n}\n\nfunction createPointCluster(p, id) {\n const [x, y] = p.geometry.coordinates;\n return {\n x: fround(lngX(x)), // projected point coordinates\n y: fround(latY(y)),\n zoom: Infinity, // the last zoom the point was processed at\n index: id, // index of the source feature in the original input array,\n parentId: -1 // parent cluster id\n };\n}\n\nfunction getClusterJSON(cluster) {\n return {\n type: 'Feature',\n id: cluster.id,\n properties: getClusterProperties(cluster),\n geometry: {\n type: 'Point',\n coordinates: [xLng(cluster.x), yLat(cluster.y)]\n }\n };\n}\n\nfunction getClusterProperties(cluster) {\n const count = cluster.numPoints;\n const abbrev =\n count >= 10000 ? `${Math.round(count / 1000) }k` :\n count >= 1000 ? `${Math.round(count / 100) / 10 }k` : count;\n return extend(extend({}, cluster.properties), {\n cluster: true,\n cluster_id: cluster.id,\n point_count: count,\n point_count_abbreviated: abbrev\n });\n}\n\n// longitude/latitude to spherical mercator in [0..1] range\nfunction lngX(lng) {\n return lng / 360 + 0.5;\n}\nfunction latY(lat) {\n const sin = Math.sin(lat * Math.PI / 180);\n const y = (0.5 - 0.25 * Math.log((1 + sin) / (1 - sin)) / Math.PI);\n return y < 0 ? 0 : y > 1 ? 1 : y;\n}\n\n// spherical mercator to longitude/latitude\nfunction xLng(x) {\n return (x - 0.5) * 360;\n}\nfunction yLat(y) {\n const y2 = (180 - y * 360) * Math.PI / 180;\n return 360 * Math.atan(Math.exp(y2)) / Math.PI - 90;\n}\n\nfunction extend(dest, src) {\n for (const id in src) dest[id] = src[id];\n return dest;\n}\n\nfunction getX(p) {\n return p.x;\n}\nfunction getY(p) {\n return p.y;\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nimport EasyMDE from \"easymde\" // https://github.com/Ionaru/easy-markdown-editor\nimport \"easymde/dist/easymde.min.css\"\n\n// Connects to data-controller=\"markdown-editor\"\nexport default class extends Controller {\n\t// this approach suggested by https://www.betterstimulus.com/integrating-libraries/lifecycle.html\n\tstatic targets = [ \"field\" ]\n\n connect() {\n\t\tthis.editor = new EasyMDE({\n\t\t\telement: this.fieldTarget,\n\t\t\tautoDownloadFontAwesome: false,\n\t\t\ticonClassMap: {\n\t\t\t\t'bold': 'bi-type-bold',\n\t\t\t\t'italic': 'bi-type-italic',\n\t\t\t\t'strikethrough': 'bi-type-strikethrough',\n\t\t\t\t'heading': 'bi-hash',\n\t\t\t\t'heading-smaller': 'header-smaller',\n\t\t\t\t'heading-bigger': 'header-bigger',\n\t\t\t\t'heading-1': 'bi-type-h1',\n\t\t\t\t'heading-2': 'bi-type-h2',\n\t\t\t\t'heading-3': 'bi-type-h3',\n\t\t\t\t'code': 'bi-braces',\n\t\t\t\t'quote': 'bi-quote',\n\t\t\t\t'ordered-list': 'bi-list-ol',\n\t\t\t\t'unordered-list': 'bi-list-ul',\n\t\t\t\t'clean-block': 'bi-eraser',\n\t\t\t\t'link': 'bi-link',\n\t\t\t\t'image': 'bi-image',\n\t\t\t\t'upload-image': 'bi-image',\n\t\t\t\t'table': 'bi-table',\n\t\t\t\t'horizontal-rule': 'bi-hr',\n\t\t\t\t'preview': 'bi-eye',\n\t\t\t\t'side-by-side': 'bi-layout-split',\n\t\t\t\t'fullscreen': 'bi-fullscreen',\n\t\t\t\t'guide': 'bi-question-circle',\n\t\t\t\t'undo': 'bi-arrow-counterclockwise',\n\t\t\t\t'redo': 'bi-arrow-clockwise',\n\t\t\t}\n\t\t})\n }\n\n\tdisconnect() {\n\t\tthis.editor.toTextArea()\n\t}\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { Modal } from \"bootstrap\"\n\n// Connects to data-controller=\"remote-modal\"\nexport default class extends Controller {\n\tconnect() {\n\t\tthis.modal = new Modal(this.element)\n\t\tthis.modal.show()\n\t}\n\n\thideBeforeRender(event) {\n\t\tif (this.isOpen()) {\n\t\t\tevent.preventDefault()\n\t\t\tthis.element.addEventListener('hidden.bs.modal', event.detail.resume)\n\t\t\tthis.modal.hide()\n\t\t}\n\t}\n\n\tisOpen() {\n\t\treturn this.element.classList.contains(\"show\")\n\t}\n}\n", "\"use strict\";\nexport var PipsMode;\n(function (PipsMode) {\n PipsMode[\"Range\"] = \"range\";\n PipsMode[\"Steps\"] = \"steps\";\n PipsMode[\"Positions\"] = \"positions\";\n PipsMode[\"Count\"] = \"count\";\n PipsMode[\"Values\"] = \"values\";\n})(PipsMode || (PipsMode = {}));\nexport var PipsType;\n(function (PipsType) {\n PipsType[PipsType[\"None\"] = -1] = \"None\";\n PipsType[PipsType[\"NoValue\"] = 0] = \"NoValue\";\n PipsType[PipsType[\"LargeValue\"] = 1] = \"LargeValue\";\n PipsType[PipsType[\"SmallValue\"] = 2] = \"SmallValue\";\n})(PipsType || (PipsType = {}));\n//region Helper Methods\nfunction isValidFormatter(entry) {\n return isValidPartialFormatter(entry) && typeof entry.from === \"function\";\n}\nfunction isValidPartialFormatter(entry) {\n // partial formatters only need a to function and not a from function\n return typeof entry === \"object\" && typeof entry.to === \"function\";\n}\nfunction removeElement(el) {\n el.parentElement.removeChild(el);\n}\nfunction isSet(value) {\n return value !== null && value !== undefined;\n}\n// Bindable version\nfunction preventDefault(e) {\n e.preventDefault();\n}\n// Removes duplicates from an array.\nfunction unique(array) {\n return array.filter(function (a) {\n return !this[a] ? (this[a] = true) : false;\n }, {});\n}\n// Round a value to the closest 'to'.\nfunction closest(value, to) {\n return Math.round(value / to) * to;\n}\n// Current position of an element relative to the document.\nfunction offset(elem, orientation) {\n var rect = elem.getBoundingClientRect();\n var doc = elem.ownerDocument;\n var docElem = doc.documentElement;\n var pageOffset = getPageOffset(doc);\n // getBoundingClientRect contains left scroll in Chrome on Android.\n // I haven't found a feature detection that proves this. Worst case\n // scenario on mis-match: the 'tap' feature on horizontal sliders breaks.\n if (/webkit.*Chrome.*Mobile/i.test(navigator.userAgent)) {\n pageOffset.x = 0;\n }\n return orientation ? rect.top + pageOffset.y - docElem.clientTop : rect.left + pageOffset.x - docElem.clientLeft;\n}\n// Checks whether a value is numerical.\nfunction isNumeric(a) {\n return typeof a === \"number\" && !isNaN(a) && isFinite(a);\n}\n// Sets a class and removes it after [duration] ms.\nfunction addClassFor(element, className, duration) {\n if (duration > 0) {\n addClass(element, className);\n setTimeout(function () {\n removeClass(element, className);\n }, duration);\n }\n}\n// Limits a value to 0 - 100\nfunction limit(a) {\n return Math.max(Math.min(a, 100), 0);\n}\n// Wraps a variable as an array, if it isn't one yet.\n// Note that an input array is returned by reference!\nfunction asArray(a) {\n return Array.isArray(a) ? a : [a];\n}\n// Counts decimals\nfunction countDecimals(numStr) {\n numStr = String(numStr);\n var pieces = numStr.split(\".\");\n return pieces.length > 1 ? pieces[1].length : 0;\n}\n// http://youmightnotneedjquery.com/#add_class\nfunction addClass(el, className) {\n if (el.classList && !/\\s/.test(className)) {\n el.classList.add(className);\n }\n else {\n el.className += \" \" + className;\n }\n}\n// http://youmightnotneedjquery.com/#remove_class\nfunction removeClass(el, className) {\n if (el.classList && !/\\s/.test(className)) {\n el.classList.remove(className);\n }\n else {\n el.className = el.className.replace(new RegExp(\"(^|\\\\b)\" + className.split(\" \").join(\"|\") + \"(\\\\b|$)\", \"gi\"), \" \");\n }\n}\n// https://plainjs.com/javascript/attributes/adding-removing-and-testing-for-classes-9/\nfunction hasClass(el, className) {\n return el.classList ? el.classList.contains(className) : new RegExp(\"\\\\b\" + className + \"\\\\b\").test(el.className);\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/Window/scrollY#Notes\nfunction getPageOffset(doc) {\n var supportPageOffset = window.pageXOffset !== undefined;\n var isCSS1Compat = (doc.compatMode || \"\") === \"CSS1Compat\";\n var x = supportPageOffset\n ? window.pageXOffset\n : isCSS1Compat\n ? doc.documentElement.scrollLeft\n : doc.body.scrollLeft;\n var y = supportPageOffset\n ? window.pageYOffset\n : isCSS1Compat\n ? doc.documentElement.scrollTop\n : doc.body.scrollTop;\n return {\n x: x,\n y: y,\n };\n}\n// we provide a function to compute constants instead\n// of accessing window.* as soon as the module needs it\n// so that we do not compute anything if not needed\nfunction getActions() {\n // Determine the events to bind. IE11 implements pointerEvents without\n // a prefix, which breaks compatibility with the IE10 implementation.\n return window.navigator.pointerEnabled\n ? {\n start: \"pointerdown\",\n move: \"pointermove\",\n end: \"pointerup\",\n }\n : window.navigator.msPointerEnabled\n ? {\n start: \"MSPointerDown\",\n move: \"MSPointerMove\",\n end: \"MSPointerUp\",\n }\n : {\n start: \"mousedown touchstart\",\n move: \"mousemove touchmove\",\n end: \"mouseup touchend\",\n };\n}\n// https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n// Issue #785\nfunction getSupportsPassive() {\n var supportsPassive = false;\n /* eslint-disable */\n try {\n var opts = Object.defineProperty({}, \"passive\", {\n get: function () {\n supportsPassive = true;\n },\n });\n // @ts-ignore\n window.addEventListener(\"test\", null, opts);\n }\n catch (e) { }\n /* eslint-enable */\n return supportsPassive;\n}\nfunction getSupportsTouchActionNone() {\n return window.CSS && CSS.supports && CSS.supports(\"touch-action\", \"none\");\n}\n//endregion\n//region Range Calculation\n// Determine the size of a sub-range in relation to a full range.\nfunction subRangeRatio(pa, pb) {\n return 100 / (pb - pa);\n}\n// (percentage) How many percent is this value of this range?\nfunction fromPercentage(range, value, startRange) {\n return (value * 100) / (range[startRange + 1] - range[startRange]);\n}\n// (percentage) Where is this value on this range?\nfunction toPercentage(range, value) {\n return fromPercentage(range, range[0] < 0 ? value + Math.abs(range[0]) : value - range[0], 0);\n}\n// (value) How much is this percentage on this range?\nfunction isPercentage(range, value) {\n return (value * (range[1] - range[0])) / 100 + range[0];\n}\nfunction getJ(value, arr) {\n var j = 1;\n while (value >= arr[j]) {\n j += 1;\n }\n return j;\n}\n// (percentage) Input a value, find where, on a scale of 0-100, it applies.\nfunction toStepping(xVal, xPct, value) {\n if (value >= xVal.slice(-1)[0]) {\n return 100;\n }\n var j = getJ(value, xVal);\n var va = xVal[j - 1];\n var vb = xVal[j];\n var pa = xPct[j - 1];\n var pb = xPct[j];\n return pa + toPercentage([va, vb], value) / subRangeRatio(pa, pb);\n}\n// (value) Input a percentage, find where it is on the specified range.\nfunction fromStepping(xVal, xPct, value) {\n // There is no range group that fits 100\n if (value >= 100) {\n return xVal.slice(-1)[0];\n }\n var j = getJ(value, xPct);\n var va = xVal[j - 1];\n var vb = xVal[j];\n var pa = xPct[j - 1];\n var pb = xPct[j];\n return isPercentage([va, vb], (value - pa) * subRangeRatio(pa, pb));\n}\n// (percentage) Get the step that applies at a certain value.\nfunction getStep(xPct, xSteps, snap, value) {\n if (value === 100) {\n return value;\n }\n var j = getJ(value, xPct);\n var a = xPct[j - 1];\n var b = xPct[j];\n // If 'snap' is set, steps are used as fixed points on the slider.\n if (snap) {\n // Find the closest position, a or b.\n if (value - a > (b - a) / 2) {\n return b;\n }\n return a;\n }\n if (!xSteps[j - 1]) {\n return value;\n }\n return xPct[j - 1] + closest(value - xPct[j - 1], xSteps[j - 1]);\n}\n//endregion\n//region Spectrum\nvar Spectrum = /** @class */ (function () {\n function Spectrum(entry, snap, singleStep) {\n this.xPct = [];\n this.xVal = [];\n this.xSteps = [];\n this.xNumSteps = [];\n this.xHighestCompleteStep = [];\n this.xSteps = [singleStep || false];\n this.xNumSteps = [false];\n this.snap = snap;\n var index;\n var ordered = [];\n // Map the object keys to an array.\n Object.keys(entry).forEach(function (index) {\n ordered.push([asArray(entry[index]), index]);\n });\n // Sort all entries by value (numeric sort).\n ordered.sort(function (a, b) {\n return a[0][0] - b[0][0];\n });\n // Convert all entries to subranges.\n for (index = 0; index < ordered.length; index++) {\n this.handleEntryPoint(ordered[index][1], ordered[index][0]);\n }\n // Store the actual step values.\n // xSteps is sorted in the same order as xPct and xVal.\n this.xNumSteps = this.xSteps.slice(0);\n // Convert all numeric steps to the percentage of the subrange they represent.\n for (index = 0; index < this.xNumSteps.length; index++) {\n this.handleStepPoint(index, this.xNumSteps[index]);\n }\n }\n Spectrum.prototype.getDistance = function (value) {\n var distances = [];\n for (var index = 0; index < this.xNumSteps.length - 1; index++) {\n distances[index] = fromPercentage(this.xVal, value, index);\n }\n return distances;\n };\n // Calculate the percentual distance over the whole scale of ranges.\n // direction: 0 = backwards / 1 = forwards\n Spectrum.prototype.getAbsoluteDistance = function (value, distances, direction) {\n var xPct_index = 0;\n // Calculate range where to start calculation\n if (value < this.xPct[this.xPct.length - 1]) {\n while (value > this.xPct[xPct_index + 1]) {\n xPct_index++;\n }\n }\n else if (value === this.xPct[this.xPct.length - 1]) {\n xPct_index = this.xPct.length - 2;\n }\n // If looking backwards and the value is exactly at a range separator then look one range further\n if (!direction && value === this.xPct[xPct_index + 1]) {\n xPct_index++;\n }\n if (distances === null) {\n distances = [];\n }\n var start_factor;\n var rest_factor = 1;\n var rest_rel_distance = distances[xPct_index];\n var range_pct = 0;\n var rel_range_distance = 0;\n var abs_distance_counter = 0;\n var range_counter = 0;\n // Calculate what part of the start range the value is\n if (direction) {\n start_factor = (value - this.xPct[xPct_index]) / (this.xPct[xPct_index + 1] - this.xPct[xPct_index]);\n }\n else {\n start_factor = (this.xPct[xPct_index + 1] - value) / (this.xPct[xPct_index + 1] - this.xPct[xPct_index]);\n }\n // Do until the complete distance across ranges is calculated\n while (rest_rel_distance > 0) {\n // Calculate the percentage of total range\n range_pct = this.xPct[xPct_index + 1 + range_counter] - this.xPct[xPct_index + range_counter];\n // Detect if the margin, padding or limit is larger then the current range and calculate\n if (distances[xPct_index + range_counter] * rest_factor + 100 - start_factor * 100 > 100) {\n // If larger then take the percentual distance of the whole range\n rel_range_distance = range_pct * start_factor;\n // Rest factor of relative percentual distance still to be calculated\n rest_factor = (rest_rel_distance - 100 * start_factor) / distances[xPct_index + range_counter];\n // Set start factor to 1 as for next range it does not apply.\n start_factor = 1;\n }\n else {\n // If smaller or equal then take the percentual distance of the calculate percentual part of that range\n rel_range_distance = ((distances[xPct_index + range_counter] * range_pct) / 100) * rest_factor;\n // No rest left as the rest fits in current range\n rest_factor = 0;\n }\n if (direction) {\n abs_distance_counter = abs_distance_counter - rel_range_distance;\n // Limit range to first range when distance becomes outside of minimum range\n if (this.xPct.length + range_counter >= 1) {\n range_counter--;\n }\n }\n else {\n abs_distance_counter = abs_distance_counter + rel_range_distance;\n // Limit range to last range when distance becomes outside of maximum range\n if (this.xPct.length - range_counter >= 1) {\n range_counter++;\n }\n }\n // Rest of relative percentual distance still to be calculated\n rest_rel_distance = distances[xPct_index + range_counter] * rest_factor;\n }\n return value + abs_distance_counter;\n };\n Spectrum.prototype.toStepping = function (value) {\n value = toStepping(this.xVal, this.xPct, value);\n return value;\n };\n Spectrum.prototype.fromStepping = function (value) {\n return fromStepping(this.xVal, this.xPct, value);\n };\n Spectrum.prototype.getStep = function (value) {\n value = getStep(this.xPct, this.xSteps, this.snap, value);\n return value;\n };\n Spectrum.prototype.getDefaultStep = function (value, isDown, size) {\n var j = getJ(value, this.xPct);\n // When at the top or stepping down, look at the previous sub-range\n if (value === 100 || (isDown && value === this.xPct[j - 1])) {\n j = Math.max(j - 1, 1);\n }\n return (this.xVal[j] - this.xVal[j - 1]) / size;\n };\n Spectrum.prototype.getNearbySteps = function (value) {\n var j = getJ(value, this.xPct);\n return {\n stepBefore: {\n startValue: this.xVal[j - 2],\n step: this.xNumSteps[j - 2],\n highestStep: this.xHighestCompleteStep[j - 2],\n },\n thisStep: {\n startValue: this.xVal[j - 1],\n step: this.xNumSteps[j - 1],\n highestStep: this.xHighestCompleteStep[j - 1],\n },\n stepAfter: {\n startValue: this.xVal[j],\n step: this.xNumSteps[j],\n highestStep: this.xHighestCompleteStep[j],\n },\n };\n };\n Spectrum.prototype.countStepDecimals = function () {\n var stepDecimals = this.xNumSteps.map(countDecimals);\n return Math.max.apply(null, stepDecimals);\n };\n Spectrum.prototype.hasNoSize = function () {\n return this.xVal[0] === this.xVal[this.xVal.length - 1];\n };\n // Outside testing\n Spectrum.prototype.convert = function (value) {\n return this.getStep(this.toStepping(value));\n };\n Spectrum.prototype.handleEntryPoint = function (index, value) {\n var percentage;\n // Covert min/max syntax to 0 and 100.\n if (index === \"min\") {\n percentage = 0;\n }\n else if (index === \"max\") {\n percentage = 100;\n }\n else {\n percentage = parseFloat(index);\n }\n // Check for correct input.\n if (!isNumeric(percentage) || !isNumeric(value[0])) {\n throw new Error(\"noUiSlider: 'range' value isn't numeric.\");\n }\n // Store values.\n this.xPct.push(percentage);\n this.xVal.push(value[0]);\n var value1 = Number(value[1]);\n // NaN will evaluate to false too, but to keep\n // logging clear, set step explicitly. Make sure\n // not to override the 'step' setting with false.\n if (!percentage) {\n if (!isNaN(value1)) {\n this.xSteps[0] = value1;\n }\n }\n else {\n this.xSteps.push(isNaN(value1) ? false : value1);\n }\n this.xHighestCompleteStep.push(0);\n };\n Spectrum.prototype.handleStepPoint = function (i, n) {\n // Ignore 'false' stepping.\n if (!n) {\n return;\n }\n // Step over zero-length ranges (#948);\n if (this.xVal[i] === this.xVal[i + 1]) {\n this.xSteps[i] = this.xHighestCompleteStep[i] = this.xVal[i];\n return;\n }\n // Factor to range ratio\n this.xSteps[i] =\n fromPercentage([this.xVal[i], this.xVal[i + 1]], n, 0) / subRangeRatio(this.xPct[i], this.xPct[i + 1]);\n var totalSteps = (this.xVal[i + 1] - this.xVal[i]) / this.xNumSteps[i];\n var highestStep = Math.ceil(Number(totalSteps.toFixed(3)) - 1);\n var step = this.xVal[i] + this.xNumSteps[i] * highestStep;\n this.xHighestCompleteStep[i] = step;\n };\n return Spectrum;\n}());\n//endregion\n//region Options\n/*\tEvery input option is tested and parsed. This will prevent\n endless validation in internal methods. These tests are\n structured with an item for every option available. An\n option can be marked as required by setting the 'r' flag.\n The testing function is provided with three arguments:\n - The provided value for the option;\n - A reference to the options object;\n - The name for the option;\n\n The testing function returns false when an error is detected,\n or true when everything is OK. It can also modify the option\n object, to make sure all values can be correctly looped elsewhere. */\n//region Defaults\nvar defaultFormatter = {\n to: function (value) {\n return value === undefined ? \"\" : value.toFixed(2);\n },\n from: Number,\n};\nvar cssClasses = {\n target: \"target\",\n base: \"base\",\n origin: \"origin\",\n handle: \"handle\",\n handleLower: \"handle-lower\",\n handleUpper: \"handle-upper\",\n touchArea: \"touch-area\",\n horizontal: \"horizontal\",\n vertical: \"vertical\",\n background: \"background\",\n connect: \"connect\",\n connects: \"connects\",\n ltr: \"ltr\",\n rtl: \"rtl\",\n textDirectionLtr: \"txt-dir-ltr\",\n textDirectionRtl: \"txt-dir-rtl\",\n draggable: \"draggable\",\n drag: \"state-drag\",\n tap: \"state-tap\",\n active: \"active\",\n tooltip: \"tooltip\",\n pips: \"pips\",\n pipsHorizontal: \"pips-horizontal\",\n pipsVertical: \"pips-vertical\",\n marker: \"marker\",\n markerHorizontal: \"marker-horizontal\",\n markerVertical: \"marker-vertical\",\n markerNormal: \"marker-normal\",\n markerLarge: \"marker-large\",\n markerSub: \"marker-sub\",\n value: \"value\",\n valueHorizontal: \"value-horizontal\",\n valueVertical: \"value-vertical\",\n valueNormal: \"value-normal\",\n valueLarge: \"value-large\",\n valueSub: \"value-sub\",\n};\n// Namespaces of internal event listeners\nvar INTERNAL_EVENT_NS = {\n tooltips: \".__tooltips\",\n aria: \".__aria\",\n};\n//endregion\nfunction testStep(parsed, entry) {\n if (!isNumeric(entry)) {\n throw new Error(\"noUiSlider: 'step' is not numeric.\");\n }\n // The step option can still be used to set stepping\n // for linear sliders. Overwritten if set in 'range'.\n parsed.singleStep = entry;\n}\nfunction testKeyboardPageMultiplier(parsed, entry) {\n if (!isNumeric(entry)) {\n throw new Error(\"noUiSlider: 'keyboardPageMultiplier' is not numeric.\");\n }\n parsed.keyboardPageMultiplier = entry;\n}\nfunction testKeyboardMultiplier(parsed, entry) {\n if (!isNumeric(entry)) {\n throw new Error(\"noUiSlider: 'keyboardMultiplier' is not numeric.\");\n }\n parsed.keyboardMultiplier = entry;\n}\nfunction testKeyboardDefaultStep(parsed, entry) {\n if (!isNumeric(entry)) {\n throw new Error(\"noUiSlider: 'keyboardDefaultStep' is not numeric.\");\n }\n parsed.keyboardDefaultStep = entry;\n}\nfunction testRange(parsed, entry) {\n // Filter incorrect input.\n if (typeof entry !== \"object\" || Array.isArray(entry)) {\n throw new Error(\"noUiSlider: 'range' is not an object.\");\n }\n // Catch missing start or end.\n if (entry.min === undefined || entry.max === undefined) {\n throw new Error(\"noUiSlider: Missing 'min' or 'max' in 'range'.\");\n }\n parsed.spectrum = new Spectrum(entry, parsed.snap || false, parsed.singleStep);\n}\nfunction testStart(parsed, entry) {\n entry = asArray(entry);\n // Validate input. Values aren't tested, as the public .val method\n // will always provide a valid location.\n if (!Array.isArray(entry) || !entry.length) {\n throw new Error(\"noUiSlider: 'start' option is incorrect.\");\n }\n // Store the number of handles.\n parsed.handles = entry.length;\n // When the slider is initialized, the .val method will\n // be called with the start options.\n parsed.start = entry;\n}\nfunction testSnap(parsed, entry) {\n if (typeof entry !== \"boolean\") {\n throw new Error(\"noUiSlider: 'snap' option must be a boolean.\");\n }\n // Enforce 100% stepping within subranges.\n parsed.snap = entry;\n}\nfunction testAnimate(parsed, entry) {\n if (typeof entry !== \"boolean\") {\n throw new Error(\"noUiSlider: 'animate' option must be a boolean.\");\n }\n // Enforce 100% stepping within subranges.\n parsed.animate = entry;\n}\nfunction testAnimationDuration(parsed, entry) {\n if (typeof entry !== \"number\") {\n throw new Error(\"noUiSlider: 'animationDuration' option must be a number.\");\n }\n parsed.animationDuration = entry;\n}\nfunction testConnect(parsed, entry) {\n var connect = [false];\n var i;\n // Map legacy options\n if (entry === \"lower\") {\n entry = [true, false];\n }\n else if (entry === \"upper\") {\n entry = [false, true];\n }\n // Handle boolean options\n if (entry === true || entry === false) {\n for (i = 1; i < parsed.handles; i++) {\n connect.push(entry);\n }\n connect.push(false);\n }\n // Reject invalid input\n else if (!Array.isArray(entry) || !entry.length || entry.length !== parsed.handles + 1) {\n throw new Error(\"noUiSlider: 'connect' option doesn't match handle count.\");\n }\n else {\n connect = entry;\n }\n parsed.connect = connect;\n}\nfunction testOrientation(parsed, entry) {\n // Set orientation to an a numerical value for easy\n // array selection.\n switch (entry) {\n case \"horizontal\":\n parsed.ort = 0;\n break;\n case \"vertical\":\n parsed.ort = 1;\n break;\n default:\n throw new Error(\"noUiSlider: 'orientation' option is invalid.\");\n }\n}\nfunction testMargin(parsed, entry) {\n if (!isNumeric(entry)) {\n throw new Error(\"noUiSlider: 'margin' option must be numeric.\");\n }\n // Issue #582\n if (entry === 0) {\n return;\n }\n parsed.margin = parsed.spectrum.getDistance(entry);\n}\nfunction testLimit(parsed, entry) {\n if (!isNumeric(entry)) {\n throw new Error(\"noUiSlider: 'limit' option must be numeric.\");\n }\n parsed.limit = parsed.spectrum.getDistance(entry);\n if (!parsed.limit || parsed.handles < 2) {\n throw new Error(\"noUiSlider: 'limit' option is only supported on linear sliders with 2 or more handles.\");\n }\n}\nfunction testPadding(parsed, entry) {\n var index;\n if (!isNumeric(entry) && !Array.isArray(entry)) {\n throw new Error(\"noUiSlider: 'padding' option must be numeric or array of exactly 2 numbers.\");\n }\n if (Array.isArray(entry) && !(entry.length === 2 || isNumeric(entry[0]) || isNumeric(entry[1]))) {\n throw new Error(\"noUiSlider: 'padding' option must be numeric or array of exactly 2 numbers.\");\n }\n if (entry === 0) {\n return;\n }\n if (!Array.isArray(entry)) {\n entry = [entry, entry];\n }\n // 'getDistance' returns false for invalid values.\n parsed.padding = [parsed.spectrum.getDistance(entry[0]), parsed.spectrum.getDistance(entry[1])];\n for (index = 0; index < parsed.spectrum.xNumSteps.length - 1; index++) {\n // last \"range\" can't contain step size as it is purely an endpoint.\n if (parsed.padding[0][index] < 0 || parsed.padding[1][index] < 0) {\n throw new Error(\"noUiSlider: 'padding' option must be a positive number(s).\");\n }\n }\n var totalPadding = entry[0] + entry[1];\n var firstValue = parsed.spectrum.xVal[0];\n var lastValue = parsed.spectrum.xVal[parsed.spectrum.xVal.length - 1];\n if (totalPadding / (lastValue - firstValue) > 1) {\n throw new Error(\"noUiSlider: 'padding' option must not exceed 100% of the range.\");\n }\n}\nfunction testDirection(parsed, entry) {\n // Set direction as a numerical value for easy parsing.\n // Invert connection for RTL sliders, so that the proper\n // handles get the connect/background classes.\n switch (entry) {\n case \"ltr\":\n parsed.dir = 0;\n break;\n case \"rtl\":\n parsed.dir = 1;\n break;\n default:\n throw new Error(\"noUiSlider: 'direction' option was not recognized.\");\n }\n}\nfunction testBehaviour(parsed, entry) {\n // Make sure the input is a string.\n if (typeof entry !== \"string\") {\n throw new Error(\"noUiSlider: 'behaviour' must be a string containing options.\");\n }\n // Check if the string contains any keywords.\n // None are required.\n var tap = entry.indexOf(\"tap\") >= 0;\n var drag = entry.indexOf(\"drag\") >= 0;\n var fixed = entry.indexOf(\"fixed\") >= 0;\n var snap = entry.indexOf(\"snap\") >= 0;\n var hover = entry.indexOf(\"hover\") >= 0;\n var unconstrained = entry.indexOf(\"unconstrained\") >= 0;\n var invertConnects = entry.indexOf(\"invert-connects\") >= 0;\n var dragAll = entry.indexOf(\"drag-all\") >= 0;\n var smoothSteps = entry.indexOf(\"smooth-steps\") >= 0;\n if (fixed) {\n if (parsed.handles !== 2) {\n throw new Error(\"noUiSlider: 'fixed' behaviour must be used with 2 handles\");\n }\n // Use margin to enforce fixed state\n testMargin(parsed, parsed.start[1] - parsed.start[0]);\n }\n if (invertConnects && parsed.handles !== 2) {\n throw new Error(\"noUiSlider: 'invert-connects' behaviour must be used with 2 handles\");\n }\n if (unconstrained && (parsed.margin || parsed.limit)) {\n throw new Error(\"noUiSlider: 'unconstrained' behaviour cannot be used with margin or limit\");\n }\n parsed.events = {\n tap: tap || snap,\n drag: drag,\n dragAll: dragAll,\n smoothSteps: smoothSteps,\n fixed: fixed,\n snap: snap,\n hover: hover,\n unconstrained: unconstrained,\n invertConnects: invertConnects,\n };\n}\nfunction testTooltips(parsed, entry) {\n if (entry === false) {\n return;\n }\n if (entry === true || isValidPartialFormatter(entry)) {\n parsed.tooltips = [];\n for (var i = 0; i < parsed.handles; i++) {\n parsed.tooltips.push(entry);\n }\n }\n else {\n entry = asArray(entry);\n if (entry.length !== parsed.handles) {\n throw new Error(\"noUiSlider: must pass a formatter for all handles.\");\n }\n entry.forEach(function (formatter) {\n if (typeof formatter !== \"boolean\" && !isValidPartialFormatter(formatter)) {\n throw new Error(\"noUiSlider: 'tooltips' must be passed a formatter or 'false'.\");\n }\n });\n parsed.tooltips = entry;\n }\n}\nfunction testHandleAttributes(parsed, entry) {\n if (entry.length !== parsed.handles) {\n throw new Error(\"noUiSlider: must pass a attributes for all handles.\");\n }\n parsed.handleAttributes = entry;\n}\nfunction testAriaFormat(parsed, entry) {\n if (!isValidPartialFormatter(entry)) {\n throw new Error(\"noUiSlider: 'ariaFormat' requires 'to' method.\");\n }\n parsed.ariaFormat = entry;\n}\nfunction testFormat(parsed, entry) {\n if (!isValidFormatter(entry)) {\n throw new Error(\"noUiSlider: 'format' requires 'to' and 'from' methods.\");\n }\n parsed.format = entry;\n}\nfunction testKeyboardSupport(parsed, entry) {\n if (typeof entry !== \"boolean\") {\n throw new Error(\"noUiSlider: 'keyboardSupport' option must be a boolean.\");\n }\n parsed.keyboardSupport = entry;\n}\nfunction testDocumentElement(parsed, entry) {\n // This is an advanced option. Passed values are used without validation.\n parsed.documentElement = entry;\n}\nfunction testCssPrefix(parsed, entry) {\n if (typeof entry !== \"string\" && entry !== false) {\n throw new Error(\"noUiSlider: 'cssPrefix' must be a string or `false`.\");\n }\n parsed.cssPrefix = entry;\n}\nfunction testCssClasses(parsed, entry) {\n if (typeof entry !== \"object\") {\n throw new Error(\"noUiSlider: 'cssClasses' must be an object.\");\n }\n if (typeof parsed.cssPrefix === \"string\") {\n parsed.cssClasses = {};\n Object.keys(entry).forEach(function (key) {\n parsed.cssClasses[key] = parsed.cssPrefix + entry[key];\n });\n }\n else {\n parsed.cssClasses = entry;\n }\n}\n// Test all developer settings and parse to assumption-safe values.\nfunction testOptions(options) {\n // To prove a fix for #537, freeze options here.\n // If the object is modified, an error will be thrown.\n // Object.freeze(options);\n var parsed = {\n margin: null,\n limit: null,\n padding: null,\n animate: true,\n animationDuration: 300,\n ariaFormat: defaultFormatter,\n format: defaultFormatter,\n };\n // Tests are executed in the order they are presented here.\n var tests = {\n step: { r: false, t: testStep },\n keyboardPageMultiplier: { r: false, t: testKeyboardPageMultiplier },\n keyboardMultiplier: { r: false, t: testKeyboardMultiplier },\n keyboardDefaultStep: { r: false, t: testKeyboardDefaultStep },\n start: { r: true, t: testStart },\n connect: { r: true, t: testConnect },\n direction: { r: true, t: testDirection },\n snap: { r: false, t: testSnap },\n animate: { r: false, t: testAnimate },\n animationDuration: { r: false, t: testAnimationDuration },\n range: { r: true, t: testRange },\n orientation: { r: false, t: testOrientation },\n margin: { r: false, t: testMargin },\n limit: { r: false, t: testLimit },\n padding: { r: false, t: testPadding },\n behaviour: { r: true, t: testBehaviour },\n ariaFormat: { r: false, t: testAriaFormat },\n format: { r: false, t: testFormat },\n tooltips: { r: false, t: testTooltips },\n keyboardSupport: { r: true, t: testKeyboardSupport },\n documentElement: { r: false, t: testDocumentElement },\n cssPrefix: { r: true, t: testCssPrefix },\n cssClasses: { r: true, t: testCssClasses },\n handleAttributes: { r: false, t: testHandleAttributes },\n };\n var defaults = {\n connect: false,\n direction: \"ltr\",\n behaviour: \"tap\",\n orientation: \"horizontal\",\n keyboardSupport: true,\n cssPrefix: \"noUi-\",\n cssClasses: cssClasses,\n keyboardPageMultiplier: 5,\n keyboardMultiplier: 1,\n keyboardDefaultStep: 10,\n };\n // AriaFormat defaults to regular format, if any.\n if (options.format && !options.ariaFormat) {\n options.ariaFormat = options.format;\n }\n // Run all options through a testing mechanism to ensure correct\n // input. It should be noted that options might get modified to\n // be handled properly. E.g. wrapping integers in arrays.\n Object.keys(tests).forEach(function (name) {\n // If the option isn't set, but it is required, throw an error.\n if (!isSet(options[name]) && defaults[name] === undefined) {\n if (tests[name].r) {\n throw new Error(\"noUiSlider: '\" + name + \"' is required.\");\n }\n return;\n }\n tests[name].t(parsed, !isSet(options[name]) ? defaults[name] : options[name]);\n });\n // Forward pips options\n parsed.pips = options.pips;\n // All recent browsers accept unprefixed transform.\n // We need -ms- for IE9 and -webkit- for older Android;\n // Assume use of -webkit- if unprefixed and -ms- are not supported.\n // https://caniuse.com/#feat=transforms2d\n var d = document.createElement(\"div\");\n var msPrefix = d.style.msTransform !== undefined;\n var noPrefix = d.style.transform !== undefined;\n parsed.transformRule = noPrefix ? \"transform\" : msPrefix ? \"msTransform\" : \"webkitTransform\";\n // Pips don't move, so we can place them using left/top.\n var styles = [\n [\"left\", \"top\"],\n [\"right\", \"bottom\"],\n ];\n parsed.style = styles[parsed.dir][parsed.ort];\n return parsed;\n}\n//endregion\nfunction scope(target, options, originalOptions) {\n var actions = getActions();\n var supportsTouchActionNone = getSupportsTouchActionNone();\n var supportsPassive = supportsTouchActionNone && getSupportsPassive();\n // All variables local to 'scope' are prefixed with 'scope_'\n // Slider DOM Nodes\n var scope_Target = target;\n var scope_Base;\n var scope_ConnectBase;\n var scope_Handles;\n var scope_Connects;\n var scope_Pips;\n var scope_Tooltips;\n // Slider state values\n var scope_Spectrum = options.spectrum;\n var scope_Values = [];\n var scope_Locations = [];\n var scope_HandleNumbers = [];\n var scope_ActiveHandlesCount = 0;\n var scope_Events = {};\n var scope_ConnectsInverted = false;\n // Document Nodes\n var scope_Document = target.ownerDocument;\n var scope_DocumentElement = options.documentElement || scope_Document.documentElement;\n var scope_Body = scope_Document.body;\n // For horizontal sliders in standard ltr documents,\n // make .noUi-origin overflow to the left so the document doesn't scroll.\n var scope_DirOffset = scope_Document.dir === \"rtl\" || options.ort === 1 ? 0 : 100;\n // Creates a node, adds it to target, returns the new node.\n function addNodeTo(addTarget, className) {\n var div = scope_Document.createElement(\"div\");\n if (className) {\n addClass(div, className);\n }\n addTarget.appendChild(div);\n return div;\n }\n // Append a origin to the base\n function addOrigin(base, handleNumber) {\n var origin = addNodeTo(base, options.cssClasses.origin);\n var handle = addNodeTo(origin, options.cssClasses.handle);\n addNodeTo(handle, options.cssClasses.touchArea);\n handle.setAttribute(\"data-handle\", String(handleNumber));\n if (options.keyboardSupport) {\n // https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex\n // 0 = focusable and reachable\n handle.setAttribute(\"tabindex\", \"0\");\n handle.addEventListener(\"keydown\", function (event) {\n return eventKeydown(event, handleNumber);\n });\n }\n if (options.handleAttributes !== undefined) {\n var attributes_1 = options.handleAttributes[handleNumber];\n Object.keys(attributes_1).forEach(function (attribute) {\n handle.setAttribute(attribute, attributes_1[attribute]);\n });\n }\n handle.setAttribute(\"role\", \"slider\");\n handle.setAttribute(\"aria-orientation\", options.ort ? \"vertical\" : \"horizontal\");\n if (handleNumber === 0) {\n addClass(handle, options.cssClasses.handleLower);\n }\n else if (handleNumber === options.handles - 1) {\n addClass(handle, options.cssClasses.handleUpper);\n }\n origin.handle = handle;\n return origin;\n }\n // Insert nodes for connect elements\n function addConnect(base, add) {\n if (!add) {\n return false;\n }\n return addNodeTo(base, options.cssClasses.connect);\n }\n // Add handles to the slider base.\n function addElements(connectOptions, base) {\n scope_ConnectBase = addNodeTo(base, options.cssClasses.connects);\n scope_Handles = [];\n scope_Connects = [];\n scope_Connects.push(addConnect(scope_ConnectBase, connectOptions[0]));\n // [::::O====O====O====]\n // connectOptions = [0, 1, 1, 1]\n for (var i = 0; i < options.handles; i++) {\n // Keep a list of all added handles.\n scope_Handles.push(addOrigin(base, i));\n scope_HandleNumbers[i] = i;\n scope_Connects.push(addConnect(scope_ConnectBase, connectOptions[i + 1]));\n }\n }\n // Initialize a single slider.\n function addSlider(addTarget) {\n // Apply classes and data to the target.\n addClass(addTarget, options.cssClasses.target);\n if (options.dir === 0) {\n addClass(addTarget, options.cssClasses.ltr);\n }\n else {\n addClass(addTarget, options.cssClasses.rtl);\n }\n if (options.ort === 0) {\n addClass(addTarget, options.cssClasses.horizontal);\n }\n else {\n addClass(addTarget, options.cssClasses.vertical);\n }\n var textDirection = getComputedStyle(addTarget).direction;\n if (textDirection === \"rtl\") {\n addClass(addTarget, options.cssClasses.textDirectionRtl);\n }\n else {\n addClass(addTarget, options.cssClasses.textDirectionLtr);\n }\n return addNodeTo(addTarget, options.cssClasses.base);\n }\n function addTooltip(handle, handleNumber) {\n if (!options.tooltips || !options.tooltips[handleNumber]) {\n return false;\n }\n return addNodeTo(handle.firstChild, options.cssClasses.tooltip);\n }\n function isSliderDisabled() {\n return scope_Target.hasAttribute(\"disabled\");\n }\n // Disable the slider dragging if any handle is disabled\n function isHandleDisabled(handleNumber) {\n var handleOrigin = scope_Handles[handleNumber];\n return handleOrigin.hasAttribute(\"disabled\");\n }\n function disable(handleNumber) {\n if (handleNumber !== null && handleNumber !== undefined) {\n scope_Handles[handleNumber].setAttribute(\"disabled\", \"\");\n scope_Handles[handleNumber].handle.removeAttribute(\"tabindex\");\n }\n else {\n scope_Target.setAttribute(\"disabled\", \"\");\n scope_Handles.forEach(function (handle) {\n handle.handle.removeAttribute(\"tabindex\");\n });\n }\n }\n function enable(handleNumber) {\n if (handleNumber !== null && handleNumber !== undefined) {\n scope_Handles[handleNumber].removeAttribute(\"disabled\");\n scope_Handles[handleNumber].handle.setAttribute(\"tabindex\", \"0\");\n }\n else {\n scope_Target.removeAttribute(\"disabled\");\n scope_Handles.forEach(function (handle) {\n handle.removeAttribute(\"disabled\");\n handle.handle.setAttribute(\"tabindex\", \"0\");\n });\n }\n }\n function removeTooltips() {\n if (scope_Tooltips) {\n removeEvent(\"update\" + INTERNAL_EVENT_NS.tooltips);\n scope_Tooltips.forEach(function (tooltip) {\n if (tooltip) {\n removeElement(tooltip);\n }\n });\n scope_Tooltips = null;\n }\n }\n // The tooltips option is a shorthand for using the 'update' event.\n function tooltips() {\n removeTooltips();\n // Tooltips are added with options.tooltips in original order.\n scope_Tooltips = scope_Handles.map(addTooltip);\n bindEvent(\"update\" + INTERNAL_EVENT_NS.tooltips, function (values, handleNumber, unencoded) {\n if (!scope_Tooltips || !options.tooltips) {\n return;\n }\n if (scope_Tooltips[handleNumber] === false) {\n return;\n }\n var formattedValue = values[handleNumber];\n if (options.tooltips[handleNumber] !== true) {\n formattedValue = options.tooltips[handleNumber].to(unencoded[handleNumber]);\n }\n scope_Tooltips[handleNumber].innerHTML = formattedValue;\n });\n }\n function aria() {\n removeEvent(\"update\" + INTERNAL_EVENT_NS.aria);\n bindEvent(\"update\" + INTERNAL_EVENT_NS.aria, function (values, handleNumber, unencoded, tap, positions) {\n // Update Aria Values for all handles, as a change in one changes min and max values for the next.\n scope_HandleNumbers.forEach(function (index) {\n var handle = scope_Handles[index];\n var min = checkHandlePosition(scope_Locations, index, 0, true, true, true);\n var max = checkHandlePosition(scope_Locations, index, 100, true, true, true);\n var now = positions[index];\n // Formatted value for display\n var text = String(options.ariaFormat.to(unencoded[index]));\n // Map to slider range values\n min = scope_Spectrum.fromStepping(min).toFixed(1);\n max = scope_Spectrum.fromStepping(max).toFixed(1);\n now = scope_Spectrum.fromStepping(now).toFixed(1);\n handle.children[0].setAttribute(\"aria-valuemin\", min);\n handle.children[0].setAttribute(\"aria-valuemax\", max);\n handle.children[0].setAttribute(\"aria-valuenow\", now);\n handle.children[0].setAttribute(\"aria-valuetext\", text);\n });\n });\n }\n function getGroup(pips) {\n // Use the range.\n if (pips.mode === PipsMode.Range || pips.mode === PipsMode.Steps) {\n return scope_Spectrum.xVal;\n }\n if (pips.mode === PipsMode.Count) {\n if (pips.values < 2) {\n throw new Error(\"noUiSlider: 'values' (>= 2) required for mode 'count'.\");\n }\n // Divide 0 - 100 in 'count' parts.\n var interval = pips.values - 1;\n var spread = 100 / interval;\n var values = [];\n // List these parts and have them handled as 'positions'.\n while (interval--) {\n values[interval] = interval * spread;\n }\n values.push(100);\n return mapToRange(values, pips.stepped);\n }\n if (pips.mode === PipsMode.Positions) {\n // Map all percentages to on-range values.\n return mapToRange(pips.values, pips.stepped);\n }\n if (pips.mode === PipsMode.Values) {\n // If the value must be stepped, it needs to be converted to a percentage first.\n if (pips.stepped) {\n return pips.values.map(function (value) {\n // Convert to percentage, apply step, return to value.\n return scope_Spectrum.fromStepping(scope_Spectrum.getStep(scope_Spectrum.toStepping(value)));\n });\n }\n // Otherwise, we can simply use the values.\n return pips.values;\n }\n return []; // pips.mode = never\n }\n function mapToRange(values, stepped) {\n return values.map(function (value) {\n return scope_Spectrum.fromStepping(stepped ? scope_Spectrum.getStep(value) : value);\n });\n }\n function generateSpread(pips) {\n function safeIncrement(value, increment) {\n // Avoid floating point variance by dropping the smallest decimal places.\n return Number((value + increment).toFixed(7));\n }\n var group = getGroup(pips);\n var indexes = {};\n var firstInRange = scope_Spectrum.xVal[0];\n var lastInRange = scope_Spectrum.xVal[scope_Spectrum.xVal.length - 1];\n var ignoreFirst = false;\n var ignoreLast = false;\n var prevPct = 0;\n // Create a copy of the group, sort it and filter away all duplicates.\n group = unique(group.slice().sort(function (a, b) {\n return a - b;\n }));\n // Make sure the range starts with the first element.\n if (group[0] !== firstInRange) {\n group.unshift(firstInRange);\n ignoreFirst = true;\n }\n // Likewise for the last one.\n if (group[group.length - 1] !== lastInRange) {\n group.push(lastInRange);\n ignoreLast = true;\n }\n group.forEach(function (current, index) {\n // Get the current step and the lower + upper positions.\n var step;\n var i;\n var q;\n var low = current;\n var high = group[index + 1];\n var newPct;\n var pctDifference;\n var pctPos;\n var type;\n var steps;\n var realSteps;\n var stepSize;\n var isSteps = pips.mode === PipsMode.Steps;\n // When using 'steps' mode, use the provided steps.\n // Otherwise, we'll step on to the next subrange.\n if (isSteps) {\n step = scope_Spectrum.xNumSteps[index];\n }\n // Default to a 'full' step.\n if (!step) {\n step = high - low;\n }\n // If high is undefined we are at the last subrange. Make sure it iterates once (#1088)\n if (high === undefined) {\n high = low;\n }\n // Make sure step isn't 0, which would cause an infinite loop (#654)\n step = Math.max(step, 0.0000001);\n // Find all steps in the subrange.\n for (i = low; i <= high; i = safeIncrement(i, step)) {\n // Get the percentage value for the current step,\n // calculate the size for the subrange.\n newPct = scope_Spectrum.toStepping(i);\n pctDifference = newPct - prevPct;\n steps = pctDifference / (pips.density || 1);\n realSteps = Math.round(steps);\n // This ratio represents the amount of percentage-space a point indicates.\n // For a density 1 the points/percentage = 1. For density 2, that percentage needs to be re-divided.\n // Round the percentage offset to an even number, then divide by two\n // to spread the offset on both sides of the range.\n stepSize = pctDifference / realSteps;\n // Divide all points evenly, adding the correct number to this subrange.\n // Run up to <= so that 100% gets a point, event if ignoreLast is set.\n for (q = 1; q <= realSteps; q += 1) {\n // The ratio between the rounded value and the actual size might be ~1% off.\n // Correct the percentage offset by the number of points\n // per subrange. density = 1 will result in 100 points on the\n // full range, 2 for 50, 4 for 25, etc.\n pctPos = prevPct + q * stepSize;\n indexes[pctPos.toFixed(5)] = [scope_Spectrum.fromStepping(pctPos), 0];\n }\n // Determine the point type.\n type = group.indexOf(i) > -1 ? PipsType.LargeValue : isSteps ? PipsType.SmallValue : PipsType.NoValue;\n // Enforce the 'ignoreFirst' option by overwriting the type for 0.\n if (!index && ignoreFirst && i !== high) {\n type = 0;\n }\n if (!(i === high && ignoreLast)) {\n // Mark the 'type' of this point. 0 = plain, 1 = real value, 2 = step value.\n indexes[newPct.toFixed(5)] = [i, type];\n }\n // Update the percentage count.\n prevPct = newPct;\n }\n });\n return indexes;\n }\n function addMarking(spread, filterFunc, formatter) {\n var _a, _b;\n var element = scope_Document.createElement(\"div\");\n var valueSizeClasses = (_a = {},\n _a[PipsType.None] = \"\",\n _a[PipsType.NoValue] = options.cssClasses.valueNormal,\n _a[PipsType.LargeValue] = options.cssClasses.valueLarge,\n _a[PipsType.SmallValue] = options.cssClasses.valueSub,\n _a);\n var markerSizeClasses = (_b = {},\n _b[PipsType.None] = \"\",\n _b[PipsType.NoValue] = options.cssClasses.markerNormal,\n _b[PipsType.LargeValue] = options.cssClasses.markerLarge,\n _b[PipsType.SmallValue] = options.cssClasses.markerSub,\n _b);\n var valueOrientationClasses = [options.cssClasses.valueHorizontal, options.cssClasses.valueVertical];\n var markerOrientationClasses = [options.cssClasses.markerHorizontal, options.cssClasses.markerVertical];\n addClass(element, options.cssClasses.pips);\n addClass(element, options.ort === 0 ? options.cssClasses.pipsHorizontal : options.cssClasses.pipsVertical);\n function getClasses(type, source) {\n var a = source === options.cssClasses.value;\n var orientationClasses = a ? valueOrientationClasses : markerOrientationClasses;\n var sizeClasses = a ? valueSizeClasses : markerSizeClasses;\n return source + \" \" + orientationClasses[options.ort] + \" \" + sizeClasses[type];\n }\n function addSpread(offset, value, type) {\n // Apply the filter function, if it is set.\n type = filterFunc ? filterFunc(value, type) : type;\n if (type === PipsType.None) {\n return;\n }\n // Add a marker for every point\n var node = addNodeTo(element, false);\n node.className = getClasses(type, options.cssClasses.marker);\n node.style[options.style] = offset + \"%\";\n // Values are only appended for points marked '1' or '2'.\n if (type > PipsType.NoValue) {\n node = addNodeTo(element, false);\n node.className = getClasses(type, options.cssClasses.value);\n node.setAttribute(\"data-value\", String(value));\n node.style[options.style] = offset + \"%\";\n node.innerHTML = String(formatter.to(value));\n }\n }\n // Append all points.\n Object.keys(spread).forEach(function (offset) {\n addSpread(offset, spread[offset][0], spread[offset][1]);\n });\n return element;\n }\n function removePips() {\n if (scope_Pips) {\n removeElement(scope_Pips);\n scope_Pips = null;\n }\n }\n function pips(pips) {\n // Fix #669\n removePips();\n var spread = generateSpread(pips);\n var filter = pips.filter;\n var format = pips.format || {\n to: function (value) {\n return String(Math.round(value));\n },\n };\n scope_Pips = scope_Target.appendChild(addMarking(spread, filter, format));\n return scope_Pips;\n }\n // Shorthand for base dimensions.\n function baseSize() {\n var rect = scope_Base.getBoundingClientRect();\n var alt = (\"offset\" + [\"Width\", \"Height\"][options.ort]);\n return options.ort === 0 ? rect.width || scope_Base[alt] : rect.height || scope_Base[alt];\n }\n // Handler for attaching events trough a proxy.\n function attachEvent(events, element, callback, data) {\n // This function can be used to 'filter' events to the slider.\n // element is a node, not a nodeList\n var method = function (event) {\n var e = fixEvent(event, data.pageOffset, data.target || element);\n // fixEvent returns false if this event has a different target\n // when handling (multi-) touch events;\n if (!e) {\n return false;\n }\n // doNotReject is passed by all end events to make sure released touches\n // are not rejected, leaving the slider \"stuck\" to the cursor;\n if (isSliderDisabled() && !data.doNotReject) {\n return false;\n }\n // Stop if an active 'tap' transition is taking place.\n if (hasClass(scope_Target, options.cssClasses.tap) && !data.doNotReject) {\n return false;\n }\n // Ignore right or middle clicks on start #454\n if (events === actions.start && e.buttons !== undefined && e.buttons > 1) {\n return false;\n }\n // Ignore right or middle clicks on start #454\n if (data.hover && e.buttons) {\n return false;\n }\n // 'supportsPassive' is only true if a browser also supports touch-action: none in CSS.\n // iOS safari does not, so it doesn't get to benefit from passive scrolling. iOS does support\n // touch-action: manipulation, but that allows panning, which breaks\n // sliders after zooming/on non-responsive pages.\n // See: https://bugs.webkit.org/show_bug.cgi?id=133112\n if (!supportsPassive) {\n e.preventDefault();\n }\n e.calcPoint = e.points[options.ort];\n // Call the event handler with the event [ and additional data ].\n callback(e, data);\n return;\n };\n var methods = [];\n // Bind a closure on the target for every event type.\n events.split(\" \").forEach(function (eventName) {\n element.addEventListener(eventName, method, supportsPassive ? { passive: true } : false);\n methods.push([eventName, method]);\n });\n return methods;\n }\n // Provide a clean event with standardized offset values.\n function fixEvent(e, pageOffset, eventTarget) {\n // Filter the event to register the type, which can be\n // touch, mouse or pointer. Offset changes need to be\n // made on an event specific basis.\n var touch = e.type.indexOf(\"touch\") === 0;\n var mouse = e.type.indexOf(\"mouse\") === 0;\n var pointer = e.type.indexOf(\"pointer\") === 0;\n var x = 0;\n var y = 0;\n // IE10 implemented pointer events with a prefix;\n if (e.type.indexOf(\"MSPointer\") === 0) {\n pointer = true;\n }\n // Erroneous events seem to be passed in occasionally on iOS/iPadOS after user finishes interacting with\n // the slider. They appear to be of type MouseEvent, yet they don't have usual properties set. Ignore\n // events that have no touches or buttons associated with them. (#1057, #1079, #1095)\n if (e.type === \"mousedown\" && !e.buttons && !e.touches) {\n return false;\n }\n // The only thing one handle should be concerned about is the touches that originated on top of it.\n if (touch) {\n // Returns true if a touch originated on the target.\n var isTouchOnTarget = function (checkTouch) {\n var target = checkTouch.target;\n return (target === eventTarget ||\n eventTarget.contains(target) ||\n (e.composed && e.composedPath().shift() === eventTarget));\n };\n // In the case of touchstart events, we need to make sure there is still no more than one\n // touch on the target so we look amongst all touches.\n if (e.type === \"touchstart\") {\n var targetTouches = Array.prototype.filter.call(e.touches, isTouchOnTarget);\n // Do not support more than one touch per handle.\n if (targetTouches.length > 1) {\n return false;\n }\n x = targetTouches[0].pageX;\n y = targetTouches[0].pageY;\n }\n else {\n // In the other cases, find on changedTouches is enough.\n var targetTouch = Array.prototype.find.call(e.changedTouches, isTouchOnTarget);\n // Cancel if the target touch has not moved.\n if (!targetTouch) {\n return false;\n }\n x = targetTouch.pageX;\n y = targetTouch.pageY;\n }\n }\n pageOffset = pageOffset || getPageOffset(scope_Document);\n if (mouse || pointer) {\n x = e.clientX + pageOffset.x;\n y = e.clientY + pageOffset.y;\n }\n e.pageOffset = pageOffset;\n e.points = [x, y];\n e.cursor = mouse || pointer; // Fix #435\n return e;\n }\n // Translate a coordinate in the document to a percentage on the slider\n function calcPointToPercentage(calcPoint) {\n var location = calcPoint - offset(scope_Base, options.ort);\n var proposal = (location * 100) / baseSize();\n // Clamp proposal between 0% and 100%\n // Out-of-bound coordinates may occur when .noUi-base pseudo-elements\n // are used (e.g. contained handles feature)\n proposal = limit(proposal);\n return options.dir ? 100 - proposal : proposal;\n }\n // Find handle closest to a certain percentage on the slider\n function getClosestHandle(clickedPosition) {\n var smallestDifference = 100;\n var handleNumber = false;\n scope_Handles.forEach(function (handle, index) {\n // Disabled handles are ignored\n if (isHandleDisabled(index)) {\n return;\n }\n var handlePosition = scope_Locations[index];\n var differenceWithThisHandle = Math.abs(handlePosition - clickedPosition);\n // Initial state\n var clickAtEdge = differenceWithThisHandle === 100 && smallestDifference === 100;\n // Difference with this handle is smaller than the previously checked handle\n var isCloser = differenceWithThisHandle < smallestDifference;\n var isCloserAfter = differenceWithThisHandle <= smallestDifference && clickedPosition > handlePosition;\n if (isCloser || isCloserAfter || clickAtEdge) {\n handleNumber = index;\n smallestDifference = differenceWithThisHandle;\n }\n });\n return handleNumber;\n }\n // Fire 'end' when a mouse or pen leaves the document.\n function documentLeave(event, data) {\n if (event.type === \"mouseout\" &&\n event.target.nodeName === \"HTML\" &&\n event.relatedTarget === null) {\n eventEnd(event, data);\n }\n }\n // Handle movement on document for handle and range drag.\n function eventMove(event, data) {\n // Fix #498\n // Check value of .buttons in 'start' to work around a bug in IE10 mobile (data.buttonsProperty).\n // https://connect.microsoft.com/IE/feedback/details/927005/mobile-ie10-windows-phone-buttons-property-of-pointermove-event-always-zero\n // IE9 has .buttons and .which zero on mousemove.\n // Firefox breaks the spec MDN defines.\n if (navigator.appVersion.indexOf(\"MSIE 9\") === -1 && event.buttons === 0 && data.buttonsProperty !== 0) {\n return eventEnd(event, data);\n }\n // Check if we are moving up or down\n var movement = (options.dir ? -1 : 1) * (event.calcPoint - data.startCalcPoint);\n // Convert the movement into a percentage of the slider width/height\n var proposal = (movement * 100) / data.baseSize;\n moveHandles(movement > 0, proposal, data.locations, data.handleNumbers, data.connect);\n }\n // Unbind move events on document, call callbacks.\n function eventEnd(event, data) {\n // The handle is no longer active, so remove the class.\n if (data.handle) {\n removeClass(data.handle, options.cssClasses.active);\n scope_ActiveHandlesCount -= 1;\n }\n // Unbind the move and end events, which are added on 'start'.\n data.listeners.forEach(function (c) {\n scope_DocumentElement.removeEventListener(c[0], c[1]);\n });\n if (scope_ActiveHandlesCount === 0) {\n // Remove dragging class.\n removeClass(scope_Target, options.cssClasses.drag);\n setZindex();\n // Remove cursor styles and text-selection events bound to the body.\n if (event.cursor) {\n scope_Body.style.cursor = \"\";\n scope_Body.removeEventListener(\"selectstart\", preventDefault);\n }\n }\n if (options.events.smoothSteps) {\n data.handleNumbers.forEach(function (handleNumber) {\n setHandle(handleNumber, scope_Locations[handleNumber], true, true, false, false);\n });\n data.handleNumbers.forEach(function (handleNumber) {\n fireEvent(\"update\", handleNumber);\n });\n }\n data.handleNumbers.forEach(function (handleNumber) {\n fireEvent(\"change\", handleNumber);\n fireEvent(\"set\", handleNumber);\n fireEvent(\"end\", handleNumber);\n });\n }\n // Bind move events on document.\n function eventStart(event, data) {\n // Ignore event if any handle is disabled\n if (data.handleNumbers.some(isHandleDisabled)) {\n return;\n }\n var handle;\n if (data.handleNumbers.length === 1) {\n var handleOrigin = scope_Handles[data.handleNumbers[0]];\n handle = handleOrigin.children[0];\n scope_ActiveHandlesCount += 1;\n // Mark the handle as 'active' so it can be styled.\n addClass(handle, options.cssClasses.active);\n }\n // A drag should never propagate up to the 'tap' event.\n event.stopPropagation();\n // Record the event listeners.\n var listeners = [];\n // Attach the move and end events.\n var moveEvent = attachEvent(actions.move, scope_DocumentElement, eventMove, {\n // The event target has changed so we need to propagate the original one so that we keep\n // relying on it to extract target touches.\n target: event.target,\n handle: handle,\n connect: data.connect,\n listeners: listeners,\n startCalcPoint: event.calcPoint,\n baseSize: baseSize(),\n pageOffset: event.pageOffset,\n handleNumbers: data.handleNumbers,\n buttonsProperty: event.buttons,\n locations: scope_Locations.slice(),\n });\n var endEvent = attachEvent(actions.end, scope_DocumentElement, eventEnd, {\n target: event.target,\n handle: handle,\n listeners: listeners,\n doNotReject: true,\n handleNumbers: data.handleNumbers,\n });\n var outEvent = attachEvent(\"mouseout\", scope_DocumentElement, documentLeave, {\n target: event.target,\n handle: handle,\n listeners: listeners,\n doNotReject: true,\n handleNumbers: data.handleNumbers,\n });\n // We want to make sure we pushed the listeners in the listener list rather than creating\n // a new one as it has already been passed to the event handlers.\n listeners.push.apply(listeners, moveEvent.concat(endEvent, outEvent));\n // Text selection isn't an issue on touch devices,\n // so adding cursor styles can be skipped.\n if (event.cursor) {\n // Prevent the 'I' cursor and extend the range-drag cursor.\n scope_Body.style.cursor = getComputedStyle(event.target).cursor;\n // Mark the target with a dragging state.\n if (scope_Handles.length > 1) {\n addClass(scope_Target, options.cssClasses.drag);\n }\n // Prevent text selection when dragging the handles.\n // In noUiSlider <= 9.2.0, this was handled by calling preventDefault on mouse/touch start/move,\n // which is scroll blocking. The selectstart event is supported by FireFox starting from version 52,\n // meaning the only holdout is iOS Safari. This doesn't matter: text selection isn't triggered there.\n // The 'cursor' flag is false.\n // See: http://caniuse.com/#search=selectstart\n scope_Body.addEventListener(\"selectstart\", preventDefault, false);\n }\n data.handleNumbers.forEach(function (handleNumber) {\n fireEvent(\"start\", handleNumber);\n });\n }\n // Move closest handle to tapped location.\n function eventTap(event) {\n // The tap event shouldn't propagate up\n event.stopPropagation();\n var proposal = calcPointToPercentage(event.calcPoint);\n var handleNumber = getClosestHandle(proposal);\n // Tackle the case that all handles are 'disabled'.\n if (handleNumber === false) {\n return;\n }\n // Flag the slider as it is now in a transitional state.\n // Transition takes a configurable amount of ms (default 300). Re-enable the slider after that.\n if (!options.events.snap) {\n addClassFor(scope_Target, options.cssClasses.tap, options.animationDuration);\n }\n setHandle(handleNumber, proposal, true, true);\n setZindex();\n fireEvent(\"slide\", handleNumber, true);\n fireEvent(\"update\", handleNumber, true);\n if (!options.events.snap) {\n fireEvent(\"change\", handleNumber, true);\n fireEvent(\"set\", handleNumber, true);\n }\n else {\n eventStart(event, { handleNumbers: [handleNumber] });\n }\n }\n // Fires a 'hover' event for a hovered mouse/pen position.\n function eventHover(event) {\n var proposal = calcPointToPercentage(event.calcPoint);\n var to = scope_Spectrum.getStep(proposal);\n var value = scope_Spectrum.fromStepping(to);\n Object.keys(scope_Events).forEach(function (targetEvent) {\n if (\"hover\" === targetEvent.split(\".\")[0]) {\n scope_Events[targetEvent].forEach(function (callback) {\n callback.call(scope_Self, value);\n });\n }\n });\n }\n // Handles keydown on focused handles\n // Don't move the document when pressing arrow keys on focused handles\n function eventKeydown(event, handleNumber) {\n if (isSliderDisabled() || isHandleDisabled(handleNumber)) {\n return false;\n }\n var horizontalKeys = [\"Left\", \"Right\"];\n var verticalKeys = [\"Down\", \"Up\"];\n var largeStepKeys = [\"PageDown\", \"PageUp\"];\n var edgeKeys = [\"Home\", \"End\"];\n if (options.dir && !options.ort) {\n // On an right-to-left slider, the left and right keys act inverted\n horizontalKeys.reverse();\n }\n else if (options.ort && !options.dir) {\n // On a top-to-bottom slider, the up and down keys act inverted\n verticalKeys.reverse();\n largeStepKeys.reverse();\n }\n // Strip \"Arrow\" for IE compatibility. https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key\n var key = event.key.replace(\"Arrow\", \"\");\n var isLargeDown = key === largeStepKeys[0];\n var isLargeUp = key === largeStepKeys[1];\n var isDown = key === verticalKeys[0] || key === horizontalKeys[0] || isLargeDown;\n var isUp = key === verticalKeys[1] || key === horizontalKeys[1] || isLargeUp;\n var isMin = key === edgeKeys[0];\n var isMax = key === edgeKeys[1];\n if (!isDown && !isUp && !isMin && !isMax) {\n return true;\n }\n event.preventDefault();\n var to;\n if (isUp || isDown) {\n var direction = isDown ? 0 : 1;\n var steps = getNextStepsForHandle(handleNumber);\n var step = steps[direction];\n // At the edge of a slider, do nothing\n if (step === null) {\n return false;\n }\n // No step set, use the default of 10% of the sub-range\n if (step === false) {\n step = scope_Spectrum.getDefaultStep(scope_Locations[handleNumber], isDown, options.keyboardDefaultStep);\n }\n if (isLargeUp || isLargeDown) {\n step *= options.keyboardPageMultiplier;\n }\n else {\n step *= options.keyboardMultiplier;\n }\n // Step over zero-length ranges (#948);\n step = Math.max(step, 0.0000001);\n // Decrement for down steps\n step = (isDown ? -1 : 1) * step;\n to = scope_Values[handleNumber] + step;\n }\n else if (isMax) {\n // End key\n to = options.spectrum.xVal[options.spectrum.xVal.length - 1];\n }\n else {\n // Home key\n to = options.spectrum.xVal[0];\n }\n setHandle(handleNumber, scope_Spectrum.toStepping(to), true, true);\n fireEvent(\"slide\", handleNumber);\n fireEvent(\"update\", handleNumber);\n fireEvent(\"change\", handleNumber);\n fireEvent(\"set\", handleNumber);\n return false;\n }\n // Attach events to several slider parts.\n function bindSliderEvents(behaviour) {\n // Attach the standard drag event to the handles.\n if (!behaviour.fixed) {\n scope_Handles.forEach(function (handle, index) {\n // These events are only bound to the visual handle\n // element, not the 'real' origin element.\n attachEvent(actions.start, handle.children[0], eventStart, {\n handleNumbers: [index],\n });\n });\n }\n // Attach the tap event to the slider base.\n if (behaviour.tap) {\n attachEvent(actions.start, scope_Base, eventTap, {});\n }\n // Fire hover events\n if (behaviour.hover) {\n attachEvent(actions.move, scope_Base, eventHover, {\n hover: true,\n });\n }\n // Make the range draggable.\n if (behaviour.drag) {\n scope_Connects.forEach(function (connect, index) {\n if (connect === false || index === 0 || index === scope_Connects.length - 1) {\n return;\n }\n var handleBefore = scope_Handles[index - 1];\n var handleAfter = scope_Handles[index];\n var eventHolders = [connect];\n var handlesToDrag = [handleBefore, handleAfter];\n var handleNumbersToDrag = [index - 1, index];\n addClass(connect, options.cssClasses.draggable);\n // When the range is fixed, the entire range can\n // be dragged by the handles. The handle in the first\n // origin will propagate the start event upward,\n // but it needs to be bound manually on the other.\n if (behaviour.fixed) {\n eventHolders.push(handleBefore.children[0]);\n eventHolders.push(handleAfter.children[0]);\n }\n if (behaviour.dragAll) {\n handlesToDrag = scope_Handles;\n handleNumbersToDrag = scope_HandleNumbers;\n }\n eventHolders.forEach(function (eventHolder) {\n attachEvent(actions.start, eventHolder, eventStart, {\n handles: handlesToDrag,\n handleNumbers: handleNumbersToDrag,\n connect: connect,\n });\n });\n });\n }\n }\n // Attach an event to this slider, possibly including a namespace\n function bindEvent(namespacedEvent, callback) {\n scope_Events[namespacedEvent] = scope_Events[namespacedEvent] || [];\n scope_Events[namespacedEvent].push(callback);\n // If the event bound is 'update,' fire it immediately for all handles.\n if (namespacedEvent.split(\".\")[0] === \"update\") {\n scope_Handles.forEach(function (a, index) {\n fireEvent(\"update\", index);\n });\n }\n }\n function isInternalNamespace(namespace) {\n return namespace === INTERNAL_EVENT_NS.aria || namespace === INTERNAL_EVENT_NS.tooltips;\n }\n // Undo attachment of event\n function removeEvent(namespacedEvent) {\n var event = namespacedEvent && namespacedEvent.split(\".\")[0];\n var namespace = event ? namespacedEvent.substring(event.length) : namespacedEvent;\n Object.keys(scope_Events).forEach(function (bind) {\n var tEvent = bind.split(\".\")[0];\n var tNamespace = bind.substring(tEvent.length);\n if ((!event || event === tEvent) && (!namespace || namespace === tNamespace)) {\n // only delete protected internal event if intentional\n if (!isInternalNamespace(tNamespace) || namespace === tNamespace) {\n delete scope_Events[bind];\n }\n }\n });\n }\n // External event handling\n function fireEvent(eventName, handleNumber, tap) {\n Object.keys(scope_Events).forEach(function (targetEvent) {\n var eventType = targetEvent.split(\".\")[0];\n if (eventName === eventType) {\n scope_Events[targetEvent].forEach(function (callback) {\n callback.call(\n // Use the slider public API as the scope ('this')\n scope_Self, \n // Return values as array, so arg_1[arg_2] is always valid.\n scope_Values.map(options.format.to), \n // Handle index, 0 or 1\n handleNumber, \n // Un-formatted slider values\n scope_Values.slice(), \n // Event is fired by tap, true or false\n tap || false, \n // Left offset of the handle, in relation to the slider\n scope_Locations.slice(), \n // add the slider public API to an accessible parameter when this is unavailable\n scope_Self);\n });\n }\n });\n }\n // Split out the handle positioning logic so the Move event can use it, too\n function checkHandlePosition(reference, handleNumber, to, lookBackward, lookForward, getValue, smoothSteps) {\n var distance;\n // For sliders with multiple handles, limit movement to the other handle.\n // Apply the margin option by adding it to the handle positions.\n if (scope_Handles.length > 1 && !options.events.unconstrained) {\n if (lookBackward && handleNumber > 0) {\n distance = scope_Spectrum.getAbsoluteDistance(reference[handleNumber - 1], options.margin, false);\n to = Math.max(to, distance);\n }\n if (lookForward && handleNumber < scope_Handles.length - 1) {\n distance = scope_Spectrum.getAbsoluteDistance(reference[handleNumber + 1], options.margin, true);\n to = Math.min(to, distance);\n }\n }\n // The limit option has the opposite effect, limiting handles to a\n // maximum distance from another. Limit must be > 0, as otherwise\n // handles would be unmovable.\n if (scope_Handles.length > 1 && options.limit) {\n if (lookBackward && handleNumber > 0) {\n distance = scope_Spectrum.getAbsoluteDistance(reference[handleNumber - 1], options.limit, false);\n to = Math.min(to, distance);\n }\n if (lookForward && handleNumber < scope_Handles.length - 1) {\n distance = scope_Spectrum.getAbsoluteDistance(reference[handleNumber + 1], options.limit, true);\n to = Math.max(to, distance);\n }\n }\n // The padding option keeps the handles a certain distance from the\n // edges of the slider. Padding must be > 0.\n if (options.padding) {\n if (handleNumber === 0) {\n distance = scope_Spectrum.getAbsoluteDistance(0, options.padding[0], false);\n to = Math.max(to, distance);\n }\n if (handleNumber === scope_Handles.length - 1) {\n distance = scope_Spectrum.getAbsoluteDistance(100, options.padding[1], true);\n to = Math.min(to, distance);\n }\n }\n if (!smoothSteps) {\n to = scope_Spectrum.getStep(to);\n }\n // Limit percentage to the 0 - 100 range\n to = limit(to);\n // Return false if handle can't move\n if (to === reference[handleNumber] && !getValue) {\n return false;\n }\n return to;\n }\n // Uses slider orientation to create CSS rules. a = base value;\n function inRuleOrder(v, a) {\n var o = options.ort;\n return (o ? a : v) + \", \" + (o ? v : a);\n }\n // Moves handle(s) by a percentage\n // (bool, % to move, [% where handle started, ...], [index in scope_Handles, ...])\n function moveHandles(upward, proposal, locations, handleNumbers, connect) {\n var proposals = locations.slice();\n // Store first handle now, so we still have it in case handleNumbers is reversed\n var firstHandle = handleNumbers[0];\n var smoothSteps = options.events.smoothSteps;\n var b = [!upward, upward];\n var f = [upward, !upward];\n // Copy handleNumbers so we don't change the dataset\n handleNumbers = handleNumbers.slice();\n // Check to see which handle is 'leading'.\n // If that one can't move the second can't either.\n if (upward) {\n handleNumbers.reverse();\n }\n // Step 1: get the maximum percentage that any of the handles can move\n if (handleNumbers.length > 1) {\n handleNumbers.forEach(function (handleNumber, o) {\n var to = checkHandlePosition(proposals, handleNumber, proposals[handleNumber] + proposal, b[o], f[o], false, smoothSteps);\n // Stop if one of the handles can't move.\n if (to === false) {\n proposal = 0;\n }\n else {\n proposal = to - proposals[handleNumber];\n proposals[handleNumber] = to;\n }\n });\n }\n // If using one handle, check backward AND forward\n else {\n b = f = [true];\n }\n var state = false;\n // Step 2: Try to set the handles with the found percentage\n handleNumbers.forEach(function (handleNumber, o) {\n state =\n setHandle(handleNumber, locations[handleNumber] + proposal, b[o], f[o], false, smoothSteps) || state;\n });\n // Step 3: If a handle moved, fire events\n if (state) {\n handleNumbers.forEach(function (handleNumber) {\n fireEvent(\"update\", handleNumber);\n fireEvent(\"slide\", handleNumber);\n });\n // If target is a connect, then fire drag event\n if (connect != undefined) {\n fireEvent(\"drag\", firstHandle);\n }\n }\n }\n // Takes a base value and an offset. This offset is used for the connect bar size.\n // In the initial design for this feature, the origin element was 1% wide.\n // Unfortunately, a rounding bug in Chrome makes it impossible to implement this feature\n // in this manner: https://bugs.chromium.org/p/chromium/issues/detail?id=798223\n function transformDirection(a, b) {\n return options.dir ? 100 - a - b : a;\n }\n // Updates scope_Locations and scope_Values, updates visual state\n function updateHandlePosition(handleNumber, to) {\n // Update locations.\n scope_Locations[handleNumber] = to;\n // Convert the value to the slider stepping/range.\n scope_Values[handleNumber] = scope_Spectrum.fromStepping(to);\n var translation = transformDirection(to, 0) - scope_DirOffset;\n var translateRule = \"translate(\" + inRuleOrder(translation + \"%\", \"0\") + \")\";\n scope_Handles[handleNumber].style[options.transformRule] = translateRule;\n // sanity check for at least 2 handles (e.g. during setup)\n if (options.events.invertConnects && scope_Locations.length > 1) {\n // check if handles passed each other, but don't match the ConnectsInverted state\n var handlesAreInOrder = scope_Locations.every(function (position, index, locations) {\n return index === 0 || position >= locations[index - 1];\n });\n if (scope_ConnectsInverted !== !handlesAreInOrder) {\n // invert connects when handles pass each other\n invertConnects();\n // invertConnects already updates all connect elements\n return;\n }\n }\n updateConnect(handleNumber);\n updateConnect(handleNumber + 1);\n if (scope_ConnectsInverted) {\n // When connects are inverted, we also have to update adjacent connects\n updateConnect(handleNumber - 1);\n updateConnect(handleNumber + 2);\n }\n }\n // Handles before the slider middle are stacked later = higher,\n // Handles after the middle later is lower\n // [[7] [8] .......... | .......... [5] [4]\n function setZindex() {\n scope_HandleNumbers.forEach(function (handleNumber) {\n var dir = scope_Locations[handleNumber] > 50 ? -1 : 1;\n var zIndex = 3 + (scope_Handles.length + dir * handleNumber);\n scope_Handles[handleNumber].style.zIndex = String(zIndex);\n });\n }\n // Test suggested values and apply margin, step.\n // if exactInput is true, don't run checkHandlePosition, then the handle can be placed in between steps (#436)\n function setHandle(handleNumber, to, lookBackward, lookForward, exactInput, smoothSteps) {\n if (!exactInput) {\n to = checkHandlePosition(scope_Locations, handleNumber, to, lookBackward, lookForward, false, smoothSteps);\n }\n if (to === false) {\n return false;\n }\n updateHandlePosition(handleNumber, to);\n return true;\n }\n // Updates style attribute for connect nodes\n function updateConnect(index) {\n // Skip connects set to false\n if (!scope_Connects[index]) {\n return;\n }\n // Create a copy of locations, so we can sort them for the local scope logic\n var locations = scope_Locations.slice();\n if (scope_ConnectsInverted) {\n locations.sort(function (a, b) {\n return a - b;\n });\n }\n var l = 0;\n var h = 100;\n if (index !== 0) {\n l = locations[index - 1];\n }\n if (index !== scope_Connects.length - 1) {\n h = locations[index];\n }\n // We use two rules:\n // 'translate' to change the left/top offset;\n // 'scale' to change the width of the element;\n // As the element has a width of 100%, a translation of 100% is equal to 100% of the parent (.noUi-base)\n var connectWidth = h - l;\n var translateRule = \"translate(\" + inRuleOrder(transformDirection(l, connectWidth) + \"%\", \"0\") + \")\";\n var scaleRule = \"scale(\" + inRuleOrder(connectWidth / 100, \"1\") + \")\";\n scope_Connects[index].style[options.transformRule] =\n translateRule + \" \" + scaleRule;\n }\n // Parses value passed to .set method. Returns current value if not parse-able.\n function resolveToValue(to, handleNumber) {\n // Setting with null indicates an 'ignore'.\n // Inputting 'false' is invalid.\n if (to === null || to === false || to === undefined) {\n return scope_Locations[handleNumber];\n }\n // If a formatted number was passed, attempt to decode it.\n if (typeof to === \"number\") {\n to = String(to);\n }\n to = options.format.from(to);\n if (to !== false) {\n to = scope_Spectrum.toStepping(to);\n }\n // If parsing the number failed, use the current value.\n if (to === false || isNaN(to)) {\n return scope_Locations[handleNumber];\n }\n return to;\n }\n // Set the slider value.\n function valueSet(input, fireSetEvent, exactInput) {\n var values = asArray(input);\n var isInit = scope_Locations[0] === undefined;\n // Event fires by default\n fireSetEvent = fireSetEvent === undefined ? true : fireSetEvent;\n // Animation is optional.\n // Make sure the initial values were set before using animated placement.\n if (options.animate && !isInit) {\n addClassFor(scope_Target, options.cssClasses.tap, options.animationDuration);\n }\n // First pass, without lookAhead but with lookBackward. Values are set from left to right.\n scope_HandleNumbers.forEach(function (handleNumber) {\n setHandle(handleNumber, resolveToValue(values[handleNumber], handleNumber), true, false, exactInput);\n });\n var i = scope_HandleNumbers.length === 1 ? 0 : 1;\n // Spread handles evenly across the slider if the range has no size (min=max)\n if (isInit && scope_Spectrum.hasNoSize()) {\n exactInput = true;\n scope_Locations[0] = 0;\n if (scope_HandleNumbers.length > 1) {\n var space_1 = 100 / (scope_HandleNumbers.length - 1);\n scope_HandleNumbers.forEach(function (handleNumber) {\n scope_Locations[handleNumber] = handleNumber * space_1;\n });\n }\n }\n // Secondary passes. Now that all base values are set, apply constraints.\n // Iterate all handles to ensure constraints are applied for the entire slider (Issue #1009)\n for (; i < scope_HandleNumbers.length; ++i) {\n scope_HandleNumbers.forEach(function (handleNumber) {\n setHandle(handleNumber, scope_Locations[handleNumber], true, true, exactInput);\n });\n }\n setZindex();\n scope_HandleNumbers.forEach(function (handleNumber) {\n fireEvent(\"update\", handleNumber);\n // Fire the event only for handles that received a new value, as per #579\n if (values[handleNumber] !== null && fireSetEvent) {\n fireEvent(\"set\", handleNumber);\n }\n });\n }\n // Reset slider to initial values\n function valueReset(fireSetEvent) {\n valueSet(options.start, fireSetEvent);\n }\n // Set value for a single handle\n function valueSetHandle(handleNumber, value, fireSetEvent, exactInput) {\n // Ensure numeric input\n handleNumber = Number(handleNumber);\n if (!(handleNumber >= 0 && handleNumber < scope_HandleNumbers.length)) {\n throw new Error(\"noUiSlider: invalid handle number, got: \" + handleNumber);\n }\n // Look both backward and forward, since we don't want this handle to \"push\" other handles (#960);\n // The exactInput argument can be used to ignore slider stepping (#436)\n setHandle(handleNumber, resolveToValue(value, handleNumber), true, true, exactInput);\n fireEvent(\"update\", handleNumber);\n if (fireSetEvent) {\n fireEvent(\"set\", handleNumber);\n }\n }\n // Get the slider value.\n function valueGet(unencoded) {\n if (unencoded === void 0) { unencoded = false; }\n if (unencoded) {\n // return a copy of the raw values\n return scope_Values.length === 1 ? scope_Values[0] : scope_Values.slice(0);\n }\n var values = scope_Values.map(options.format.to);\n // If only one handle is used, return a single value.\n if (values.length === 1) {\n return values[0];\n }\n return values;\n }\n // Removes classes from the root and empties it.\n function destroy() {\n // remove protected internal listeners\n removeEvent(INTERNAL_EVENT_NS.aria);\n removeEvent(INTERNAL_EVENT_NS.tooltips);\n Object.keys(options.cssClasses).forEach(function (key) {\n removeClass(scope_Target, options.cssClasses[key]);\n });\n while (scope_Target.firstChild) {\n scope_Target.removeChild(scope_Target.firstChild);\n }\n delete scope_Target.noUiSlider;\n }\n function getNextStepsForHandle(handleNumber) {\n var location = scope_Locations[handleNumber];\n var nearbySteps = scope_Spectrum.getNearbySteps(location);\n var value = scope_Values[handleNumber];\n var increment = nearbySteps.thisStep.step;\n var decrement = null;\n // If snapped, directly use defined step value\n if (options.snap) {\n return [\n value - nearbySteps.stepBefore.startValue || null,\n nearbySteps.stepAfter.startValue - value || null,\n ];\n }\n // If the next value in this step moves into the next step,\n // the increment is the start of the next step - the current value\n if (increment !== false) {\n if (value + increment > nearbySteps.stepAfter.startValue) {\n increment = nearbySteps.stepAfter.startValue - value;\n }\n }\n // If the value is beyond the starting point\n if (value > nearbySteps.thisStep.startValue) {\n decrement = nearbySteps.thisStep.step;\n }\n else if (nearbySteps.stepBefore.step === false) {\n decrement = false;\n }\n // If a handle is at the start of a step, it always steps back into the previous step first\n else {\n decrement = value - nearbySteps.stepBefore.highestStep;\n }\n // Now, if at the slider edges, there is no in/decrement\n if (location === 100) {\n increment = null;\n }\n else if (location === 0) {\n decrement = null;\n }\n // As per #391, the comparison for the decrement step can have some rounding issues.\n var stepDecimals = scope_Spectrum.countStepDecimals();\n // Round per #391\n if (increment !== null && increment !== false) {\n increment = Number(increment.toFixed(stepDecimals));\n }\n if (decrement !== null && decrement !== false) {\n decrement = Number(decrement.toFixed(stepDecimals));\n }\n return [decrement, increment];\n }\n // Get the current step size for the slider.\n function getNextSteps() {\n return scope_HandleNumbers.map(getNextStepsForHandle);\n }\n // Updatable: margin, limit, padding, step, range, animate, snap\n function updateOptions(optionsToUpdate, fireSetEvent) {\n // Spectrum is created using the range, snap, direction and step options.\n // 'snap' and 'step' can be updated.\n // If 'snap' and 'step' are not passed, they should remain unchanged.\n var v = valueGet();\n var updateAble = [\n \"margin\",\n \"limit\",\n \"padding\",\n \"range\",\n \"animate\",\n \"snap\",\n \"step\",\n \"format\",\n \"pips\",\n \"tooltips\",\n \"connect\",\n ];\n // Only change options that we're actually passed to update.\n updateAble.forEach(function (name) {\n // Check for undefined. null removes the value.\n if (optionsToUpdate[name] !== undefined) {\n originalOptions[name] = optionsToUpdate[name];\n }\n });\n var newOptions = testOptions(originalOptions);\n // Load new options into the slider state\n updateAble.forEach(function (name) {\n if (optionsToUpdate[name] !== undefined) {\n options[name] = newOptions[name];\n }\n });\n scope_Spectrum = newOptions.spectrum;\n // Limit, margin and padding depend on the spectrum but are stored outside of it. (#677)\n options.margin = newOptions.margin;\n options.limit = newOptions.limit;\n options.padding = newOptions.padding;\n // Update pips, removes existing.\n if (options.pips) {\n pips(options.pips);\n }\n else {\n removePips();\n }\n // Update tooltips, removes existing.\n if (options.tooltips) {\n tooltips();\n }\n else {\n removeTooltips();\n }\n // Invalidate the current positioning so valueSet forces an update.\n scope_Locations = [];\n valueSet(isSet(optionsToUpdate.start) ? optionsToUpdate.start : v, fireSetEvent);\n // Update connects only if it was set\n if (optionsToUpdate.connect) {\n updateConnectOption();\n }\n }\n function updateConnectOption() {\n // IE supported way of removing children including event handlers\n while (scope_ConnectBase.firstChild) {\n scope_ConnectBase.removeChild(scope_ConnectBase.firstChild);\n }\n // Adding new connects according to the new connect options\n for (var i = 0; i <= options.handles; i++) {\n scope_Connects[i] = addConnect(scope_ConnectBase, options.connect[i]);\n updateConnect(i);\n }\n // re-adding drag events for the new connect elements\n // to ignore the other events we have to negate the 'if (!behaviour.fixed)' check\n bindSliderEvents({ drag: options.events.drag, fixed: true });\n }\n // Invert options for connect handles\n function invertConnects() {\n scope_ConnectsInverted = !scope_ConnectsInverted;\n testConnect(options, \n // inverse the connect boolean array\n options.connect.map(function (b) { return !b; }));\n updateConnectOption();\n }\n // Initialization steps\n function setupSlider() {\n // Create the base element, initialize HTML and set classes.\n // Add handles and connect elements.\n scope_Base = addSlider(scope_Target);\n addElements(options.connect, scope_Base);\n // Attach user events.\n bindSliderEvents(options.events);\n // Use the public value method to set the start values.\n valueSet(options.start);\n if (options.pips) {\n pips(options.pips);\n }\n if (options.tooltips) {\n tooltips();\n }\n aria();\n }\n setupSlider();\n var scope_Self = {\n destroy: destroy,\n steps: getNextSteps,\n on: bindEvent,\n off: removeEvent,\n get: valueGet,\n set: valueSet,\n setHandle: valueSetHandle,\n reset: valueReset,\n disable: disable,\n enable: enable,\n // Exposed for unit testing, don't use this in your application.\n __moveHandles: function (upward, proposal, handleNumbers) {\n moveHandles(upward, proposal, scope_Locations, handleNumbers);\n },\n options: originalOptions,\n updateOptions: updateOptions,\n target: scope_Target,\n removePips: removePips,\n removeTooltips: removeTooltips,\n getPositions: function () {\n return scope_Locations.slice();\n },\n getTooltips: function () {\n return scope_Tooltips;\n },\n getOrigins: function () {\n return scope_Handles;\n },\n pips: pips, // Issue #594\n };\n return scope_Self;\n}\n// Run the standard initializer\nfunction initialize(target, originalOptions) {\n if (!target || !target.nodeName) {\n throw new Error(\"noUiSlider: create requires a single element, got: \" + target);\n }\n // Throw an error if the slider was already initialized.\n if (target.noUiSlider) {\n throw new Error(\"noUiSlider: Slider was already initialized.\");\n }\n // Test the options and create the slider environment;\n var options = testOptions(originalOptions);\n var api = scope(target, options, originalOptions);\n target.noUiSlider = api;\n return api;\n}\nexport { initialize as create };\nexport { cssClasses };\nexport default {\n // Exposed for unit testing, don't use this in your application.\n __spectrum: Spectrum,\n // A reference to the default classes, allows global changes.\n // Use the cssClasses option for changes to one slider.\n cssClasses: cssClasses,\n create: initialize,\n};\n", "import { Controller } from \"@hotwired/stimulus\"\nimport noUiSlider from \"nouislider\";\nimport \"nouislider/dist/nouislider.css\";\nimport wNumb from \"wnumb\";\n\n// Connects to data-controller=\"slider\"\nexport default class extends Controller {\n\tstatic targets = [ \"minInput\", \"maxInput\", \"slider\", \"noscript\" ]\n\tstatic values = {\n\t\tstep: Number,\n\t\tdirection: String,\n\t\tformatter: String,\n\t\trange: Object,\n\t\tdensity: Number\n\t}\n\n connect() {\n\t \n this.noscriptTarget.remove();\t\n\t \n\t\tthis.element.classList.add(\"has-slider\");\n\n\t\tvar minInput = this.minInputTarget;\n\t\tvar maxInput = this.maxInputTarget;\n\n\t\t// slider parameters\n\t\tvar step = (this.stepValue != 0 ? this.stepValue : 1);\n\t\tvar direction = (this.directionValue != '' ? this.directionValue : 'ltr');\n\t\tvar range = (this.hasRangeValue ? this.rangeValue : this.defaultRange());\n\t\tvar density = (this.densityValue != 0 ? this.densityValue : 1);\n\n\t\tthis.slider = noUiSlider.create(this.sliderTarget, {\n\t\t\tstart: [minInput.value, maxInput.value],\n\t\t\tconnect: true,\n\t\t\tstep: step,\n\t\t\tdirection: direction,\n\t\t\ttooltips: this.formatter(),\n\t\t\trange: range,\n\t\t\tpips: {\n\t\t\t\tmode: 'range',\n\t\t\t\tdensity: density,\n\t\t\t\tformat: this.formatter()\n\t\t\t}\n\t\t});\n\n\t\tthis.slider.on('update', function(values, handle) {\n\t\t\tminInput.value = values[0];\n\t\t\tmaxInput.value = values[1];\n\t\t})\n\t}\n\t\n\n\tdisconnect() {\n\t}\n\n\tformatter() {\n\t\tvar formatters = {\n\t\t\t\"integer\": wNumb({ decimal: 0 }),\n\t\t\t\"uncalBP\": wNumb({\n\t\t\t\tdecimal: 0,\n\t\t\t\tthousand: \" \"\n\t\t\t}),\n\t\t\t\"calBP\": wNumb({\n\t\t\t\tdecimal: 0,\n\t\t\t\tthousand: \" \"\n\t\t\t})\n\t\t}\n\t\treturn formatters[this.formatterValue];\n\t}\n\n\tdefaultRange() {\n\t\treturn { \n\t\t\t'min': Number(this.minInputTarget.min), \n\t\t\t'max': Number(this.minInputTarget.max) \n\t\t};\n\t}\n}\n", "/**\n * MicroEvent - to make any js object an event emitter\n *\n * - pure javascript - server compatible, browser compatible\n * - dont rely on the browser doms\n * - super simple - you get it immediatly, no mistery, no magic involved\n *\n * @author Jerome Etienne (https://github.com/jeromeetienne)\n */\n\ntype TCallback = (...args:any) => any;\n\n/**\n * Execute callback for each event in space separated list of event names\n *\n */\nfunction forEvents(events:string,callback:(event:string)=>any){\n\tevents.split(/\\s+/).forEach((event) =>{\n\t\tcallback(event);\n\t});\n}\n\nexport default class MicroEvent{\n\n\tpublic _events: {[key:string]:TCallback[]};\n\n\tconstructor(){\n\t\tthis._events = {};\n\t}\n\n\ton(events:string, fct:TCallback){\n\t\tforEvents(events,(event) => {\n\t\t\tconst event_array = this._events[event] || [];\n\t\t\tevent_array.push(fct);\n\t\t\tthis._events[event] = event_array;\n\t\t});\n\t}\n\n\toff(events:string, fct:TCallback){\n\t\tvar n = arguments.length;\n\t\tif( n === 0 ){\n\t\t\tthis._events = {};\n\t\t\treturn;\n\t\t}\n\n\t\tforEvents(events,(event) => {\n\n\t\t\tif (n === 1){\n\t\t\t\tdelete this._events[event];\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst event_array = this._events[event];\n\t\t\tif( event_array === undefined ) return;\n\n\t\t\tevent_array.splice(event_array.indexOf(fct), 1);\n\t\t\tthis._events[event] = event_array;\n\t\t});\n\t}\n\n\ttrigger(events:string, ...args:any){\n\t\tvar self = this;\n\n\t\tforEvents(events,(event) => {\n\t\t\tconst event_array = self._events[event];\n\t\t\tif( event_array === undefined ) return;\n\t\t\tevent_array.forEach(fct => {\n\t\t\t\tfct.apply(self, args );\n\t\t\t});\n\n\t\t});\n\t}\n};\n", "/**\n * microplugin.js\n * Copyright (c) 2013 Brian Reavis & contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n * @author Brian Reavis <brian@thirdroute.com>\n */\n\ntype TSettings = {\n\t[key:string]:any\n}\n\ntype TPlugins = {\n\tnames: string[],\n\tsettings: TSettings,\n\trequested: {[key:string]:boolean},\n\tloaded: {[key:string]:any}\n};\n\nexport type TPluginItem = {name:string,options:{}};\nexport type TPluginHash = {[key:string]:{}};\n\n\n\n\nexport default function MicroPlugin(Interface: any ){\n\n\tInterface.plugins = {};\n\n\treturn class extends Interface{\n\n\t\tpublic plugins:TPlugins = {\n\t\t\tnames : [],\n\t\t\tsettings : {},\n\t\t\trequested : {},\n\t\t\tloaded : {}\n\t\t};\n\n\t\t/**\n\t\t * Registers a plugin.\n\t\t *\n\t\t * @param {function} fn\n\t\t */\n\t\tstatic define(name:string, fn:(this:any,settings:TSettings)=>any){\n\t\t\tInterface.plugins[name] = {\n\t\t\t\t'name' : name,\n\t\t\t\t'fn' : fn\n\t\t\t};\n\t\t}\n\n\n\t\t/**\n\t\t * Initializes the listed plugins (with options).\n\t\t * Acceptable formats:\n\t\t *\n\t\t * List (without options):\n\t\t * ['a', 'b', 'c']\n\t\t *\n\t\t * List (with options):\n\t\t * [{'name': 'a', options: {}}, {'name': 'b', options: {}}]\n\t\t *\n\t\t * Hash (with options):\n\t\t * {'a': { ... }, 'b': { ... }, 'c': { ... }}\n\t\t *\n\t\t * @param {array|object} plugins\n\t\t */\n\t\tinitializePlugins(plugins:string[]|TPluginItem[]|TPluginHash) {\n\t\t\tvar key, name;\n\t\t\tconst self = this;\n\t\t\tconst queue:string[] = [];\n\n\t\t\tif (Array.isArray(plugins)) {\n\t\t\t\tplugins.forEach((plugin:string|TPluginItem)=>{\n\t\t\t\t\tif (typeof plugin === 'string') {\n\t\t\t\t\t\tqueue.push(plugin);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.plugins.settings[plugin.name] = plugin.options;\n\t\t\t\t\t\tqueue.push(plugin.name);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else if (plugins) {\n\t\t\t\tfor (key in plugins) {\n\t\t\t\t\tif (plugins.hasOwnProperty(key)) {\n\t\t\t\t\t\tself.plugins.settings[key] = plugins[key];\n\t\t\t\t\t\tqueue.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\twhile( name = queue.shift() ){\n\t\t\t\tself.require(name);\n\t\t\t}\n\t\t}\n\n\t\tloadPlugin(name:string) {\n\t\t\tvar self = this;\n\t\t\tvar plugins = self.plugins;\n\t\t\tvar plugin = Interface.plugins[name];\n\n\t\t\tif (!Interface.plugins.hasOwnProperty(name)) {\n\t\t\t\tthrow new Error('Unable to find \"' + name + '\" plugin');\n\t\t\t}\n\n\t\t\tplugins.requested[name] = true;\n\t\t\tplugins.loaded[name] = plugin.fn.apply(self, [self.plugins.settings[name] || {}]);\n\t\t\tplugins.names.push(name);\n\t\t}\n\n\t\t/**\n\t\t * Initializes a plugin.\n\t\t *\n\t\t */\n\t\trequire(name:string) {\n\t\t\tvar self = this;\n\t\t\tvar plugins = self.plugins;\n\n\t\t\tif (!self.plugins.loaded.hasOwnProperty(name)) {\n\t\t\t\tif (plugins.requested[name]) {\n\t\t\t\t\tthrow new Error('Plugin has circular dependency (\"' + name + '\")');\n\t\t\t\t}\n\t\t\t\tself.loadPlugin(name);\n\t\t\t}\n\n\t\t\treturn plugins.loaded[name];\n\t\t}\n\n\t};\n\n}\n", "/**\n * Convert array of strings to a regular expression\n *\tex ['ab','a'] => (?:ab|a)\n * \tex ['a','b'] => [ab]\n */\nexport const arrayToPattern = (chars: string[]): string => {\n\n\tchars = chars.filter( Boolean );\n\n\tif( chars.length < 2 ){\n\t\treturn chars[0] || '';\n\t}\n\n\treturn (maxValueLength(chars) == 1) ? '['+chars.join('')+']' : '(?:'+chars.join('|')+')';\n};\n\nexport const sequencePattern = (array: string[]): string => {\n\n\tif( !hasDuplicates(array) ){\n\t\treturn array.join('');\n\t}\n\n\tlet pattern = '';\n\tlet prev_char_count = 0;\n\n\tconst prev_pattern = ()=>{\n\t\tif( prev_char_count > 1 ){\n\t\t\tpattern += '{'+prev_char_count+'}';\n\t\t}\n\t}\n\n\tarray.forEach((char,i)=>{\n\n\t\tif( char === array[i-1] ){\n\t\t\tprev_char_count++;\n\t\t\treturn;\n\t\t}\n\n\t\tprev_pattern();\n\n\t\tpattern += char;\n\t\tprev_char_count = 1;\n\t});\n\n\tprev_pattern();\n\n\treturn pattern;\n\n}\n\n\n\n/**\n * Convert array of strings to a regular expression\n *\tex ['ab','a'] => (?:ab|a)\n * \tex ['a','b'] => [ab]\n */\nexport const setToPattern = (chars: Set<string>): string => {\n\tlet array = Array.from(chars);\n\treturn arrayToPattern(array);\n}\n\n\n\n/**\n * https://stackoverflow.com/questions/7376598/in-javascript-how-do-i-check-if-an-array-has-duplicate-values\n */\nexport const hasDuplicates = (array: any[]) => {\n return (new Set(array)).size !== array.length;\n}\n\n\n/**\n * https://stackoverflow.com/questions/63006601/why-does-u-throw-an-invalid-escape-error\n */\nexport const escape_regex = (str: string): string => {\n\treturn (str + '').replace(/([\\$\\(\\)\\*\\+\\.\\?\\[\\]\\^\\{\\|\\}\\\\])/gu, '\\\\$1');\n};\n\n/**\n * Return the max length of array values\n */\nexport const maxValueLength = (array: string[]) => {\n\treturn array.reduce( (longest, value) => Math.max(longest,unicodeLength(value)),0);\n}\n\n\nexport const unicodeLength = (str: string) => {\n\treturn Array.from(str).length;\n}\n", "/**\n * Get all possible combinations of substrings that add up to the given string\n * https://stackoverflow.com/questions/30169587/find-all-the-combination-of-substrings-that-add-up-to-the-given-string\n */\nexport const allSubstrings = (input: string): string[][] => {\n\n if( input.length === 1) return [[input]];\n\n let result: string[][] = [];\n\n\tconst start = input.substring(1);\n const suba = allSubstrings(start);\n\n\tsuba.forEach(function(subresult) {\n let tmp = subresult.slice(0);\n tmp[0] = input.charAt(0) + tmp[0];\n result.push(tmp);\n\n tmp = subresult.slice(0);\n tmp.unshift(input.charAt(0));\n result.push(tmp);\n });\n\n return result;\n}\n", "import { setToPattern, arrayToPattern, escape_regex, sequencePattern } from './regex.ts';\nimport { allSubstrings } from './strings.ts';\n\nexport type TUnicodeMap = {[key:string]:string};\nexport type TUnicodeSets = {[key:string]:Set<string>};\nexport type TCodePoints = [[number,number]];\nexport type TCodePointObj = {folded:string,composed:string,code_point:number}\nexport type TSequencePart = {start:number,end:number,length:number,substr:string}\n\nexport const code_points: TCodePoints = [[ 0, 65535 ]];\n\nconst accent_pat = '[\\u0300-\\u036F\\u{b7}\\u{2be}\\u{2bc}]';\n\nexport let unicode_map: TUnicodeMap;\n\nlet multi_char_reg: RegExp;\n\nconst max_char_length = 3;\n\nconst latin_convert: TUnicodeMap = {}\n\nconst latin_condensed: TUnicodeMap = {\n\t'/': '\u2044\u2215',\n\t'0': '\u07C0',\n\t\"a\": \"\u2C65\u0250\u0251\",\n\t\"aa\": \"\uA733\",\n\t\"ae\": \"\u00E6\u01FD\u01E3\",\n\t\"ao\": \"\uA735\",\n\t\"au\": \"\uA737\",\n\t\"av\": \"\uA739\uA73B\",\n\t\"ay\": \"\uA73D\",\n\t\"b\": \"\u0180\u0253\u0183\",\n\t\"c\": \"\uA73F\u0188\u023C\u2184\",\n\t\"d\": \"\u0111\u0257\u0256\u1D05\u018C\uABB7\u0501\u0266\",\n\t\"e\": \"\u025B\u01DD\u1D07\u0247\",\n\t\"f\": \"\uA77C\u0192\",\n\t\"g\": \"\u01E5\u0260\uA7A1\u1D79\uA77F\u0262\",\n\t\"h\": \"\u0127\u2C68\u2C76\u0265\",\n\t\"i\": \"\u0268\u0131\",\n\t\"j\": \"\u0249\u0237\",\n\t\"k\": \"\u0199\u2C6A\uA741\uA743\uA745\uA7A3\",\n\t\"l\": \"\u0142\u019A\u026B\u2C61\uA749\uA747\uA781\u026D\",\n\t\"m\": \"\u0271\u026F\u03FB\",\n\t\"n\": \"\uA7A5\u019E\u0272\uA791\u1D0E\u043B\u0509\",\n\t\"o\": \"\u00F8\u01FF\u0254\u0275\uA74B\uA74D\u1D11\",\n\t\"oe\": \"\u0153\",\n\t\"oi\": \"\u01A3\",\n\t\"oo\": \"\uA74F\",\n\t\"ou\": \"\u0223\",\n\t\"p\": \"\u01A5\u1D7D\uA751\uA753\uA755\u03C1\",\n\t\"q\": \"\uA757\uA759\u024B\",\n\t\"r\": \"\u024D\u027D\uA75B\uA7A7\uA783\",\n\t\"s\": \"\u00DF\u023F\uA7A9\uA785\u0282\",\n\t\"t\": \"\u0167\u01AD\u0288\u2C66\uA787\",\n\t\"th\": \"\u00FE\",\n\t\"tz\": \"\uA729\",\n\t\"u\": \"\u0289\",\n\t\"v\": \"\u028B\uA75F\u028C\",\n\t\"vy\": \"\uA761\",\n\t\"w\": \"\u2C73\",\n\t\"y\": \"\u01B4\u024F\u1EFF\",\n\t\"z\": \"\u01B6\u0225\u0240\u2C6C\uA763\",\n\t\"hv\": \"\u0195\"\n}\n\n\nfor( let latin in latin_condensed ){\n\tlet unicode = latin_condensed[latin] || '';\n\tfor( let i = 0; i < unicode.length; i++){\n\t\tlet char\t= unicode.substring(i,i+1);\n\t\tlatin_convert[char] = latin;\n\t}\n}\n\n\nconst convert_pat = new RegExp(Object.keys(latin_convert).join('|')+'|'+accent_pat,'gu');\n\n\n\n/**\n * Initialize the unicode_map from the give code point ranges\n */\nexport const initialize = (_code_points?: TCodePoints) => {\n\tif( unicode_map !== undefined ) return;\n\tunicode_map = generateMap(_code_points || code_points );\n}\n\n\n/**\n * Helper method for normalize a string\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize\n */\nexport const normalize = (str: string, form: string = 'NFKD') => str.normalize(form);\n\n\n\n/**\n * Remove accents without reordering string\n * calling str.normalize('NFKD') on \\u{594}\\u{595}\\u{596} becomes \\u{596}\\u{594}\\u{595}\n * via https://github.com/krisk/Fuse/issues/133#issuecomment-318692703\n */\nexport const asciifold = (str: string): string => {\n\n\treturn Array.from(str).reduce(\n\t\t/**\n\t\t * @param {string} result\n\t\t * @param {string} char\n\t\t */\n\t\t(result, char) =>{\n\t\t\treturn result + _asciifold(char)\n\t\t},\n\t\t''\n\t);\n};\n\nexport const _asciifold = (str: string): string => {\n\tstr = normalize(str)\n\t\t.toLowerCase()\n\t\t.replace(convert_pat,(/** @type {string} */ char) => {\n\t\t\treturn latin_convert[char] || '';\n\t\t})\n\n\t//return str;\n\treturn normalize(str,'NFC')\n};\n\n/**\n * Generate a list of unicode variants from the list of code points\n */\nexport function* generator(code_points: TCodePoints): Generator<TCodePointObj> {\n\n\tfor(const [code_point_min, code_point_max] of code_points){\n\t\tfor(let i = code_point_min; i <= code_point_max; i++){\n\n\t\t\tlet composed\t\t= String.fromCharCode(i);\n\t\t\tlet folded\t\t\t= asciifold(composed);\n\n\n\t\t\tif( folded == composed.toLowerCase() ){\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// skip when folded is a string longer than 3 characters long\n\t\t\t// bc the resulting regex patterns will be long\n\t\t\t// eg:\n\t\t\t// folded \u0635\u0644\u0649 \u0627\u0644\u0644\u0647 \u0639\u0644\u064A\u0647 \u0648\u0633\u0644\u0645 length 18 code point 65018\n\t\t\t// folded \u062C\u0644 \u062C\u0644\u0627\u0644\u0647 length 8 code point 65019\n\t\t\tif( folded.length > max_char_length ){\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif( folded.length == 0 ){\n\t\t\t\tcontinue\n\t\t\t}\n\n\n\t\t\tyield {folded:folded,composed:composed,code_point:i};\n\t\t}\n\t}\n}\n\n\n/**\n * Generate a unicode map from the list of code points\n */\nexport const generateSets = (code_points: TCodePoints): TUnicodeSets => {\n\n\tconst unicode_sets: {[key: string]: Set<string>} = {};\n\n\tconst addMatching = (folded: string, to_add: string) => {\n\n\t\t/** @type {Set<string>} */\n\t\tconst folded_set = unicode_sets[folded] || new Set();\n\n\t\tconst patt = new RegExp( '^'+setToPattern(folded_set)+'$','iu');\n\t\tif( to_add.match(patt) ){\n\t\t\treturn;\n\t\t}\n\n\t\tfolded_set.add(escape_regex(to_add));\n\t\tunicode_sets[folded] = folded_set;\n\t}\n\n\n\tfor( let value of generator(code_points) ){\n\t\taddMatching(value.folded,value.folded);\n\t\taddMatching(value.folded,value.composed);\n\t}\n\n\treturn unicode_sets;\n}\n\n/**\n * Generate a unicode map from the list of code points\n * ae => (?:(?:ae|\u00C6|\u01FC|\u01E2)|(?:A|\u24B6|\uFF21...)(?:E|\u025B|\u24BA...))\n */\nexport const generateMap = (code_points: TCodePoints): TUnicodeMap => {\n\tconst unicode_sets = generateSets(code_points);\n\n\tconst unicode_map: TUnicodeMap = {};\n\n\tlet multi_char: string[] = [];\n\n\tfor( let folded in unicode_sets ){\n\n\t\tlet set = unicode_sets[folded];\n\t\tif( set ){\n\t\t\tunicode_map[folded] = setToPattern(set);\n\t\t}\n\n\t\tif( folded.length > 1 ){\n\t\t\tmulti_char.push(escape_regex(folded));\n\t\t}\n\t}\n\n\tmulti_char.sort((a, b) => b.length - a.length );\n\tconst multi_char_patt = arrayToPattern(multi_char);\n\tmulti_char_reg = new RegExp('^'+multi_char_patt,'u');\n\n\treturn unicode_map;\n}\n\n\n/**\n * Map each element of an array from its folded value to all possible unicode matches\n */\nexport const mapSequence = (strings: string[], min_replacement: number = 1): string =>{\n\tlet chars_replaced = 0;\n\n\tstrings = strings.map((str)=>{\n\t\tif( unicode_map[str] ){\n\t\t\tchars_replaced += str.length;\n\t\t}\n\t\treturn unicode_map[str] || str;\n\t});\n\n\tif( chars_replaced >= min_replacement ){\n\t\treturn sequencePattern(strings);\n\t}\n\n\treturn '';\n}\n\n/**\n * Convert a short string and split it into all possible patterns\n * Keep a pattern only if min_replacement is met\n *\n * 'abc'\n * \t\t=> [['abc'],['ab','c'],['a','bc'],['a','b','c']]\n *\t\t=> ['abc-pattern','ab-c-pattern'...]\n */\nexport const substringsToPattern = (str: string, min_replacement: number = 1): string => {\n\n\tmin_replacement = Math.max(min_replacement,str.length-1);\n\n\treturn arrayToPattern(\n\t\tallSubstrings(str).map( (sub_pat) =>{\n\t\t\treturn mapSequence(sub_pat,min_replacement)\n\t\t})\n\t);\n}\n\n/**\n * Convert an array of sequences into a pattern\n * [{start:0,end:3,length:3,substr:'iii'}...] => (?:iii...)\n */\nconst sequencesToPattern = (sequences: Sequence[], all: boolean = true) => {\n\n\tlet min_replacement = sequences.length > 1 ? 1 : 0;\n\treturn arrayToPattern(\n\t\tsequences.map( (sequence) =>{\n\t\t\tlet seq: string[] = [];\n\t\t\tconst len = all ? sequence.length() : sequence.length() - 1;\n\t\t\tfor( let j = 0; j < len; j++){\n\t\t\t\tseq.push(substringsToPattern(sequence.substrs[j]||'',min_replacement));\n\t\t\t}\n\n\t\t\treturn sequencePattern(seq);\n\t\t})\n\t);\n}\n\n/**\n * Return true if the sequence is already in the sequences\n */\nconst inSequences = (needle_seq: Sequence, sequences: Sequence[]) => {\n\n\tfor(const seq of sequences){\n\n\t\tif( seq.start != needle_seq.start || seq.end != needle_seq.end ){\n\t\t\tcontinue;\n\t\t}\n\n\t\tif( seq.substrs.join('') !== needle_seq.substrs.join('') ){\n\t\t\tcontinue;\n\t\t}\n\n\n\t\tlet needle_parts\t= needle_seq.parts;\n\n\t\tconst filter = (part: TSequencePart) =>{\n\n\t\t\tfor(const needle_part of needle_parts){\n\n\t\t\t\tif( needle_part.start === part.start && needle_part.substr === part.substr ){\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif( part.length == 1 || needle_part.length == 1 ){\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\n\t\t\t\t// check for overlapping parts\n\t\t\t\t// a = ['::=','==']\n\t\t\t\t// b = ['::','===']\n\t\t\t\t// a = ['r','sm']\n\t\t\t\t// b = ['rs','m']\n\t\t\t\tif( part.start < needle_part.start && part.end > needle_part.start ){\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tif( needle_part.start < part.start && needle_part.end > part.start ){\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn false;\n\t\t};\n\n\t\tlet filtered = seq.parts.filter(filter);\n\n\t\tif( filtered.length > 0 ){\n\t\t\tcontinue;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nclass Sequence{\n\tparts: TSequencePart[];\n\tsubstrs: string[];\n\tstart: number;\n\tend: number;\n\n\tconstructor(){\n\t\tthis.parts\t\t= [];\n\t\tthis.substrs\t= [];\n\t\tthis.start\t\t= 0;\n\t\tthis.end\t\t= 0;\n\t}\n\n\tadd(part: TSequencePart|undefined){\n\t\tif( part ){\n\t\t\tthis.parts.push(part);\n\t\t\tthis.substrs.push(part.substr);\n\t\t\tthis.start\t= Math.min(part.start,this.start);\n\t\t\tthis.end\t= Math.max(part.end,this.end);\n\t\t}\n\t}\n\n\tlast(){\n\t\treturn this.parts[this.parts.length-1];\n\t}\n\n\tlength(){\n\t\treturn this.parts.length;\n\t}\n\n\tclone(position: number, last_piece: TSequencePart){\n\t\tlet clone = new Sequence();\n\n\t\tlet parts = JSON.parse(JSON.stringify(this.parts));\n\t\tlet last_part = parts.pop();\n\t\tfor( const part of parts ){\n\t\t\tclone.add(part);\n\t\t}\n\n\t\tlet last_substr = last_piece.substr.substring(0,position-last_part.start);\n\t\tlet clone_last_len = last_substr.length;\n\t\tclone.add({start:last_part.start,end:last_part.start+clone_last_len,length:clone_last_len,substr:last_substr});\n\n\t\treturn clone;\n\t}\n\n}\n\n/**\n * Expand a regular expression pattern to include unicode variants\n * \teg /a/ becomes /a\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250\u0251A\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F/\n *\n * Issue:\n * \uFE8A\uFE8B [ '\uFE8A = \\\\u{fe8a}', '\uFE8B = \\\\u{fe8b}' ]\n *\tbecomes:\t\u064A\u0654\u064A\u0654 [ '\u064A = \\\\u{64a}', '\u0654 = \\\\u{654}', '\u064A = \\\\u{64a}', '\u0654 = \\\\u{654}' ]\n *\n *\t\u0130\u0132 = IIJ = \u2161J\n *\n * \t1/2/4\n */\nexport const getPattern = (str: string): string | undefined => {\n\tinitialize();\n\n\tstr\t\t\t\t\t= asciifold(str);\n\n\tlet pattern\t\t\t= '';\n\tlet sequences\t\t= [new Sequence()];\n\n\tfor( let i = 0; i < str.length; i++ ){\n\n\t\tlet substr\t= str.substring(i);\n\t\tlet match\t= substr.match(multi_char_reg);\n\t\tconst char\t= str.substring(i,i+1);\n\t\tconst match_str = match ? match[0] : null;\n\n\n\t\t// loop through sequences\n\t\t// add either the char or multi_match\n\t\tlet overlapping: Sequence[]\t= [];\n\t\tlet added_types\t\t\t\t\t\t\t= new Set();\n\t\tfor(const sequence of sequences){\n\n\t\t\tconst last_piece\t= sequence.last();\n\n\n\t\t\tif( !last_piece || last_piece.length == 1 || last_piece.end <= i ){\n\n\t\t\t\t// if we have a multi match\n\t\t\t\tif( match_str ){\n\t\t\t\t\tconst len = match_str.length;\n\t\t\t\t\tsequence.add({start:i,end:i+len,length:len,substr:match_str});\n\t\t\t\t\tadded_types.add('1');\n\t\t\t\t}else{\n\t\t\t\t\tsequence.add({start:i,end:i+1,length:1,substr:char});\n\t\t\t\t\tadded_types.add('2');\n\t\t\t\t}\n\n\t\t\t}else if( match_str ){\n\n\t\t\t\tlet clone = sequence.clone(i,last_piece);\n\n\t\t\t\tconst len = match_str.length;\n\t\t\t\tclone.add({start:i,end:i+len,length:len,substr:match_str});\n\n\t\t\t\toverlapping.push(clone);\n\n\t\t\t}else{\n\t\t\t\t// don't add char\n\t\t\t\t// adding would create invalid patterns: 234 => [2,34,4]\n\t\t\t\tadded_types.add('3');\n\t\t\t}\n\n\t\t}\n\n\n\t\t// if we have overlapping\n\t\tif( overlapping.length > 0 ){\n\n\t\t\t// ['ii','iii'] before ['i','i','iii']\n\t\t\toverlapping = overlapping.sort((a,b)=>{\n\t\t\t\treturn a.length() - b.length();\n\t\t\t});\n\n\t\t\tfor( let clone of overlapping){\n\n\t\t\t\t// don't add if we already have an equivalent sequence\n\t\t\t\tif( inSequences(clone, sequences) ){\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tsequences.push(clone);\n\t\t\t}\n\n\t\t\tcontinue;\n\t\t}\n\n\n\t\t// if we haven't done anything unique\n\t\t// clean up the patterns\n\t\t// helps keep patterns smaller\n\t\t// if str = 'r\u20A8\u33A7aarss', pattern will be 446 instead of 655\n\t\tif( i > 0 && added_types.size == 1 && !added_types.has('3') ){\n\t\t\tpattern += sequencesToPattern(sequences,false);\n\t\t\tlet new_seq = new Sequence();\n\t\t\tconst old_seq = sequences[0];\n\t\t\tif( old_seq ){\n\t\t\t\tnew_seq.add(old_seq.last());\n\t\t\t}\n\t\t\tsequences = [new_seq];\n\t\t}\n\n\t}\n\n\tpattern += sequencesToPattern(sequences,true);\n\n\treturn pattern;\n}\n\n\nexport { escape_regex };\n", "\nimport { asciifold } from '@orchidjs/unicode-variants';\nimport * as T from './types.ts';\n\n\n/**\n * A property getter resolving dot-notation\n * @param {Object} obj The root object to fetch property on\n * @param {String} name The optionally dotted property name to fetch\n * @return {Object} The resolved property value\n */\nexport const getAttr = (obj:{[key:string]:any}, name:string ) => {\n if (!obj ) return;\n return obj[name];\n};\n\n/**\n * A property getter resolving dot-notation\n * @param {Object} obj The root object to fetch property on\n * @param {String} name The optionally dotted property name to fetch\n * @return {Object} The resolved property value\n */\nexport const getAttrNesting = (obj:{[key:string]:any}, name:string ) => {\n if (!obj ) return;\n var part, names = name.split(\".\");\n\twhile( (part = names.shift()) && (obj = obj[part]));\n return obj;\n};\n\n/**\n * Calculates how close of a match the\n * given value is against a search token.\n *\n */\nexport const scoreValue = (value:string, token:T.Token, weight:number ):number => {\n\tvar score, pos;\n\n\tif (!value) return 0;\n\n\tvalue = value + '';\n\tif( token.regex == null ) return 0;\n\tpos = value.search(token.regex);\n\tif (pos === -1) return 0;\n\n\tscore = token.string.length / value.length;\n\tif (pos === 0) score += 0.5;\n\n\treturn score * weight;\n};\n\n\n/**\n * Cast object property to an array if it exists and has a value\n *\n */\nexport const propToArray = (obj:{[key:string]:any}, key:string) => {\n\tvar value = obj[key];\n\n\tif( typeof value == 'function' ) return value;\n\n\tif( value && !Array.isArray(value) ){\n\t\tobj[key] = [value];\n\t}\n}\n\n\n/**\n * Iterates over arrays and hashes.\n *\n * ```\n * iterate(this.items, function(item, id) {\n * // invoked for each item\n * });\n * ```\n *\n */\nexport const iterate = (object:[]|{[key:string]:any}, callback:(value:any,key:any)=>any) => {\n\n\tif ( Array.isArray(object)) {\n\t\tobject.forEach(callback);\n\n\t}else{\n\n\t\tfor (var key in object) {\n\t\t\tif (object.hasOwnProperty(key)) {\n\t\t\t\tcallback(object[key], key);\n\t\t\t}\n\t\t}\n\t}\n};\n\n\n\nexport const cmp = (a:number|string, b:number|string) => {\n\tif (typeof a === 'number' && typeof b === 'number') {\n\t\treturn a > b ? 1 : (a < b ? -1 : 0);\n\t}\n\ta = asciifold(a + '').toLowerCase();\n\tb = asciifold(b + '').toLowerCase();\n\tif (a > b) return 1;\n\tif (b > a) return -1;\n\treturn 0;\n};\n", "/**\n * sifter.js\n * Copyright (c) 2013\u20132020 Brian Reavis & contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n * @author Brian Reavis <brian@thirdroute.com>\n */\n\nimport { scoreValue, getAttr, getAttrNesting, propToArray, iterate, cmp } from './utils.ts';\nimport { getPattern, escape_regex } from '@orchidjs/unicode-variants';\nimport * as T from './types.ts';\n\nclass Sifter{\n\n\tpublic items: any; // []|{};\n\tpublic settings: T.Settings;\n\n\t/**\n\t * Textually searches arrays and hashes of objects\n\t * by property (or multiple properties). Designed\n\t * specifically for autocomplete.\n\t *\n\t */\n\tconstructor(items:any, settings:T.Settings) {\n\t\tthis.items = items;\n\t\tthis.settings = settings || {diacritics: true};\n\t};\n\n\t/**\n\t * Splits a search string into an array of individual\n\t * regexps to be used to match results.\n\t *\n\t */\n\ttokenize(query:string, respect_word_boundaries?:boolean, weights?:T.Weights ):T.Token[] {\n\t\tif (!query || !query.length) return [];\n\n\t\tconst tokens:T.Token[]\t= [];\n\t\tconst words\t\t\t\t= query.split(/\\s+/);\n\t\tvar field_regex:RegExp;\n\n\t\tif( weights ){\n\t\t\tfield_regex = new RegExp( '^('+ Object.keys(weights).map(escape_regex).join('|')+')\\:(.*)$');\n\t\t}\n\n\t\twords.forEach((word:string) => {\n\t\t\tlet field_match;\n\t\t\tlet field:null|string\t= null;\n\t\t\tlet regex:null|string\t= null;\n\n\t\t\t// look for \"field:query\" tokens\n\t\t\tif( field_regex && (field_match = word.match(field_regex)) ){\n\t\t\t\tfield\t= field_match[1]!;\n\t\t\t\tword\t= field_match[2]!;\n\t\t\t}\n\n\t\t\tif( word.length > 0 ){\n\t\t\t\tif( this.settings.diacritics ){\n\t\t\t\t\tregex = getPattern(word) || null;\n\t\t\t\t}else{\n\t\t\t\t\tregex = escape_regex(word);\n\t\t\t\t}\n\t\t\t\tif( regex && respect_word_boundaries ) regex = \"\\\\b\"+regex;\n\t\t\t}\n\n\t\t\ttokens.push({\n\t\t\t\tstring : word,\n\t\t\t\tregex : regex ? new RegExp(regex,'iu') : null,\n\t\t\t\tfield : field,\n\t\t\t});\n\t\t});\n\n\t\treturn tokens;\n\t};\n\n\n\t/**\n\t * Returns a function to be used to score individual results.\n\t *\n\t * Good matches will have a higher score than poor matches.\n\t * If an item is not a match, 0 will be returned by the function.\n\t *\n\t * @returns {T.ScoreFn}\n\t */\n\tgetScoreFunction(query:string, options:T.UserOptions ){\n\t\tvar search = this.prepareSearch(query, options);\n\t\treturn this._getScoreFunction(search);\n\t}\n\n\t/**\n\t * @returns {T.ScoreFn}\n\t *\n\t */\n\t_getScoreFunction(search:T.PrepareObj ){\n\t\tconst tokens\t\t= search.tokens,\n\t\ttoken_count\t\t\t= tokens.length;\n\n\t\tif (!token_count) {\n\t\t\treturn function() { return 0; };\n\t\t}\n\n\t\tconst fields\t= search.options.fields,\n\t\tweights\t\t\t= search.weights,\n\t\tfield_count\t\t= fields.length,\n\t\tgetAttrFn\t\t= search.getAttrFn;\n\n\t\tif (!field_count) {\n\t\t\treturn function() { return 1; };\n\t\t}\n\n\n\t\t/**\n\t\t * Calculates the score of an object\n\t\t * against the search query.\n\t\t *\n\t\t */\n\t\tconst scoreObject = (function() {\n\n\n\t\t\tif (field_count === 1) {\n\t\t\t\treturn function(token:T.Token, data:{}) {\n\t\t\t\t\tconst field = fields[0]!.field;\n\t\t\t\t\treturn scoreValue(getAttrFn(data, field), token, weights[field]||1);\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn function(token:T.Token, data:{}) {\n\t\t\t\tvar sum = 0;\n\n\t\t\t\t// is the token specific to a field?\n\t\t\t\tif( token.field ){\n\n\t\t\t\t\tconst value = getAttrFn(data, token.field);\n\n\t\t\t\t\tif( !token.regex && value ){\n\t\t\t\t\t\tsum += (1/field_count);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tsum += scoreValue(value, token, 1);\n\t\t\t\t\t}\n\n\n\n\t\t\t\t}else{\n\t\t\t\t\titerate(weights, (weight:number, field:string) => {\n\t\t\t\t\t\tsum += scoreValue(getAttrFn(data, field), token, weight);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn sum / field_count;\n\t\t\t};\n\t\t})();\n\n\t\tif (token_count === 1) {\n\t\t\treturn function(data:{}) {\n\t\t\t\treturn scoreObject(tokens[0]!, data);\n\t\t\t};\n\t\t}\n\n\t\tif (search.options.conjunction === 'and') {\n\t\t\treturn function(data:{}) {\n\t\t\t\tvar score, sum = 0;\n\t\t\t\tfor( let token of tokens){\n\t\t\t\t\tscore = scoreObject(token, data);\n\t\t\t\t\tif (score <= 0) return 0;\n\t\t\t\t\tsum += score;\n\t\t\t\t}\n\t\t\t\treturn sum / token_count;\n\t\t\t};\n\t\t} else {\n\t\t\treturn function(data:{}) {\n\t\t\t\tvar sum = 0;\n\t\t\t\titerate(tokens,(token:T.Token)=>{\n\t\t\t\t\tsum += scoreObject(token, data);\n\t\t\t\t});\n\t\t\t\treturn sum / token_count;\n\t\t\t};\n\t\t}\n\t};\n\n\t/**\n\t * Returns a function that can be used to compare two\n\t * results, for sorting purposes. If no sorting should\n\t * be performed, `null` will be returned.\n\t *\n\t * @return function(a,b)\n\t */\n\tgetSortFunction(query:string, options:T.UserOptions) {\n\t\tvar search = this.prepareSearch(query, options);\n\t\treturn this._getSortFunction(search);\n\t}\n\n\t_getSortFunction(search:T.PrepareObj){\n\t\tvar implicit_score,\n\t\tsort_flds:T.Sort[]\t= [];\n\n\t\tconst self\t= this,\n\t\toptions\t\t= search.options,\n\t\tsort\t\t= (!search.query && options.sort_empty) ? options.sort_empty : options.sort;\n\n\n\t\tif( typeof sort == 'function' ){\n\t\t\treturn sort.bind(this);\n\t\t}\n\n\t\t/**\n\t\t * Fetches the specified sort field value\n\t\t * from a search result item.\n\t\t *\n\t\t */\n\t\tconst get_field = function(name:string, result:T.ResultItem):string|number {\n\t\t\tif (name === '$score') return result.score;\n\t\t\treturn search.getAttrFn(self.items[result.id], name);\n\t\t};\n\n\t\t// parse options\n\t\tif (sort) {\n\t\t\tfor( let s of sort ){\n\t\t\t\tif (search.query || s.field !== '$score') {\n\t\t\t\t\tsort_flds.push(s);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// the \"$score\" field is implied to be the primary\n\t\t// sort field, unless it's manually specified\n\t\tif (search.query) {\n\t\t\timplicit_score = true;\n\t\t\tfor( let fld of sort_flds ){\n\t\t\t\tif( fld.field === '$score' ){\n\t\t\t\t\timplicit_score = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (implicit_score) {\n\t\t\t\tsort_flds.unshift({field: '$score', direction: 'desc'});\n\t\t\t}\n\n\t\t// without a search.query, all items will have the same score\n\t\t} else {\n\t\t\tsort_flds = sort_flds.filter((fld) => fld.field !== '$score' );\n\t\t}\n\n\n\t\t// build function\n\t\tconst sort_flds_count = sort_flds.length;\n\t\tif (!sort_flds_count) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn function(a:T.ResultItem, b:T.ResultItem) {\n\t\t\tvar result, field;\n\t\t\tfor( let sort_fld of sort_flds ){\n\t\t\t\tfield = sort_fld.field;\n\n\t\t\t\tlet\tmultiplier = sort_fld.direction === 'desc' ? -1 : 1;\n\n\t\t\t\tresult = multiplier * cmp(\n\t\t\t\t\tget_field(field, a),\n\t\t\t\t\tget_field(field, b)\n\t\t\t\t);\n\t\t\t\tif (result) return result;\n\t\t\t}\n\t\t\treturn 0;\n\t\t};\n\n\t};\n\n\t/**\n\t * Parses a search query and returns an object\n\t * with tokens and fields ready to be populated\n\t * with results.\n\t *\n\t */\n\tprepareSearch(query:string, optsUser:T.UserOptions):T.PrepareObj {\n\t\tconst weights:T.Weights = {};\n\t\tvar options\t\t= Object.assign({},optsUser) as T.Options;\n\n\t\tpropToArray(options,'sort');\n\t\tpropToArray(options,'sort_empty');\n\n\t\t// convert fields to new format\n\t\tif( options.fields ){\n\t\t\tpropToArray(options,'fields');\n\t\t\tconst fields:T.Field[] = [];\n\t\t\toptions.fields.forEach((field:string|T.Field) => {\n\t\t\t\tif( typeof field == 'string' ){\n\t\t\t\t\tfield = {field:field,weight:1};\n\t\t\t\t}\n\t\t\t\tfields.push(field);\n\t\t\t\tweights[field.field] = ('weight' in field) ? field.weight : 1;\n\t\t\t});\n\t\t\toptions.fields = fields;\n\t\t}\n\n\n\t\treturn {\n\t\t\toptions\t\t: options as T.Options,\n\t\t\tquery\t\t: query.toLowerCase().trim(),\n\t\t\ttokens\t\t: this.tokenize(query, options.respect_word_boundaries, weights),\n\t\t\ttotal\t\t: 0,\n\t\t\titems\t\t: [],\n\t\t\tweights\t\t: weights,\n\t\t\tgetAttrFn\t: (options.nesting) ? getAttrNesting : getAttr,\n\t\t};\n\t};\n\n\t/**\n\t * Searches through all items and returns a sorted array of matches.\n\t *\n\t */\n\tsearch(query:string, options:T.UserOptions) : T.PrepareObj {\n\t\tvar self = this, score, search: T.PrepareObj;\n\n\t\tsearch = this.prepareSearch(query, options);\n\t\toptions = search.options;\n\t\tquery = search.query;\n\n\t\t// generate result scoring function\n\t\tconst fn_score:T.ScoreFn = options.score || self._getScoreFunction(search);\n\n\t\t// perform search and sort\n\t\tif (query.length) {\n\t\t\titerate(self.items, (item:T.ResultItem, id:string|number) => {\n\t\t\t\tscore = fn_score(item);\n\t\t\t\tif (options.filter === false || score > 0) {\n\t\t\t\t\tsearch.items.push({'score': score, 'id': id});\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\titerate(self.items, (_:T.ResultItem, id:string|number) => {\n\t\t\t\tsearch.items.push({'score': 1, 'id': id});\n\t\t\t});\n\t\t}\n\n\t\tconst fn_sort = self._getSortFunction(search);\n\t\tif (fn_sort) search.items.sort(fn_sort);\n\n\t\t// apply limits\n\t\tsearch.total = search.items.length;\n\t\tif (typeof options.limit === 'number') {\n\t\t\tsearch.items = search.items.slice(0, options.limit);\n\t\t}\n\n\t\treturn search;\n\t};\n}\n\nexport { Sifter, scoreValue, getAttr, getAttrNesting, propToArray, iterate, cmp, getPattern }\nexport * from './types.ts';\n", "\nimport type TomSelect from './tom-select.ts';\nimport { TomLoadCallback } from './types/index.ts';\n\n\n/**\n * Converts a scalar to its best string representation\n * for hash keys and HTML attribute values.\n *\n * Transformations:\n * 'str' -> 'str'\n * null -> ''\n * undefined -> ''\n * true -> '1'\n * false -> '0'\n * 0 -> '0'\n * 1 -> '1'\n *\n */\nexport const hash_key = (value:undefined|null|boolean|string|number):string|null => {\n\tif (typeof value === 'undefined' || value === null) return null;\n\treturn get_hash(value);\n};\n\nexport const get_hash = (value:boolean|string|number):string => {\n\tif (typeof value === 'boolean') return value ? '1' : '0';\n\treturn value + '';\n};\n\n/**\n * Escapes a string for use within HTML.\n *\n */\nexport const escape_html = (str:string):string => {\n\treturn (str + '')\n\t\t.replace(/&/g, '&')\n\t\t.replace(/</g, '<')\n\t\t.replace(/>/g, '>')\n\t\t.replace(/\"/g, '"');\n};\n\n\n/**\n * use setTimeout if timeout > 0 \n */\nexport const timeout = (fn:()=>void,timeout:number): number | null => {\n\tif( timeout > 0 ){\n\t\treturn window.setTimeout(fn,timeout);\n\t}\n\n\tfn.call(null);\n\treturn null;\n}\n\n/**\n * Debounce the user provided load function\n *\n */\nexport const loadDebounce = (fn:(value:string,callback:TomLoadCallback) => void,delay:number) => {\n\tvar timeout: null|ReturnType<typeof setTimeout>;\n\treturn function(this:TomSelect, value:string,callback:TomLoadCallback) {\n\t\tvar self = this;\n\n\t\tif( timeout ){\n\t\t\tself.loading = Math.max(self.loading - 1, 0);\n\t\t\tclearTimeout(timeout);\n\t\t}\n\t\ttimeout = setTimeout(function() {\n\t\t\ttimeout = null;\n\t\t\tself.loadedSearches[value] = true;\n\t\t\tfn.call(self, value, callback);\n\n\t\t}, delay);\n\t};\n};\n\n\n/**\n * Debounce all fired events types listed in `types`\n * while executing the provided `fn`.\n *\n */\nexport const debounce_events = ( self:TomSelect, types:string[], fn:() => void ) => {\n\tvar type:string;\n\tvar trigger = self.trigger;\n\tvar event_args:{ [key: string]: any } = {};\n\n\t// override trigger method\n\tself.trigger = function(){\n\t\tvar type = arguments[0];\n\t\tif (types.indexOf(type) !== -1) {\n\t\t\tevent_args[type] = arguments;\n\t\t} else {\n\t\t\treturn trigger.apply(self, arguments);\n\t\t}\n\t};\n\n\t// invoke provided function\n\tfn.apply(self, []);\n\tself.trigger = trigger;\n\n\t// trigger queued events\n\tfor( type of types ){\n\t\tif( type in event_args ){\n\t\t\ttrigger.apply(self, event_args[type]);\n\t\t}\n\t}\n};\n\n\n/**\n * Determines the current selection within a text input control.\n * Returns an object containing:\n * - start\n * - length\n *\n * Note: \"selectionStart, selectionEnd ... apply only to inputs of types text, search, URL, tel and password\"\n * \t- https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange\n */\nexport const getSelection = (input:HTMLInputElement):{ start: number; length: number } => {\n\treturn {\n\t\tstart\t: input.selectionStart || 0,\n\t\tlength\t: (input.selectionEnd||0) - (input.selectionStart||0),\n\t};\n};\n\n\n/**\n * Prevent default\n *\n */\nexport const preventDefault = (evt?:Event, stop:boolean=false):void => {\n\tif( evt ){\n\t\tevt.preventDefault();\n\t\tif( stop ){\n\t\t\tevt.stopPropagation();\n\t\t}\n\t}\n}\n\n\n/**\n * Add event helper\n *\n */\nexport const addEvent = (target:EventTarget, type:string, callback:EventListenerOrEventListenerObject, options?:object):void => {\n\ttarget.addEventListener(type,callback,options);\n};\n\n\n/**\n * Return true if the requested key is down\n * Will return false if more than one control character is pressed ( when [ctrl+shift+a] != [ctrl+a] )\n * The current evt may not always set ( eg calling advanceSelection() )\n *\n */\nexport const isKeyDown = ( key_name:keyof (KeyboardEvent|MouseEvent), evt?:KeyboardEvent|MouseEvent ) => {\n\n\tif( !evt ){\n\t\treturn false;\n\t}\n\n\tif( !evt[key_name] ){\n\t\treturn false;\n\t}\n\n\tvar count = (evt.altKey?1:0) + (evt.ctrlKey?1:0) + (evt.shiftKey?1:0) + (evt.metaKey?1:0);\n\n\tif( count === 1 ){\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n\n/**\n * Get the id of an element\n * If the id attribute is not set, set the attribute with the given id\n *\n */\nexport const getId = (el:Element,id:string) => {\n\tconst existing_id = el.getAttribute('id');\n\tif( existing_id ){\n\t\treturn existing_id;\n\t}\n\n\tel.setAttribute('id',id);\n\treturn id;\n};\n\n\n/**\n * Returns a string with backslashes added before characters that need to be escaped.\n */\nexport const addSlashes = (str:string):string => {\n\treturn str.replace(/[\\\\\"']/g, '\\\\$&');\n};\n\n/**\n *\n */\nexport const append = ( parent:Element|DocumentFragment, node: string|Node|null|undefined ):void =>{\n\tif( node ) parent.append(node);\n};\n\n/**\n * Iterates over arrays and hashes.\n *\n * ```\n * iterate(this.items, function(item, id) {\n * // invoked for each item\n * });\n * ```\n *\n */\nexport const iterate = (object:[]|{[key:string]:any}, callback:(value:any,key:any)=>any) => {\n\n\tif ( Array.isArray(object)) {\n\t\tobject.forEach(callback);\n\n\t}else{\n\n\t\tfor (var key in object) {\n\t\t\tif (object.hasOwnProperty(key)) {\n\t\t\t\tcallback(object[key], key);\n\t\t\t}\n\t\t}\n\t}\n};\n", "\nimport { iterate } from './utils.ts';\n\n/**\n * Return a dom element from either a dom query string, jQuery object, a dom element or html string\n * https://stackoverflow.com/questions/494143/creating-a-new-dom-element-from-an-html-string-using-built-in-dom-methods-or-pro/35385518#35385518\n *\n * param query should be {}\n */\nexport const getDom = ( query:any ):HTMLElement => {\n\n\tif( query.jquery ){\n\t\treturn query[0];\n\t}\n\n\tif( query instanceof HTMLElement ){\n\t\treturn query;\n\t}\n\n\tif( isHtmlString(query) ){\n\t\tvar tpl = document.createElement('template');\n\t\ttpl.innerHTML = query.trim(); // Never return a text node of whitespace as the result\n\t\treturn tpl.content.firstChild as HTMLElement;\n\t}\n\n\treturn document.querySelector(query);\n};\n\nexport const isHtmlString = (arg:any): boolean => {\n\tif( typeof arg === 'string' && arg.indexOf('<') > -1 ){\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nexport const escapeQuery = (query:string):string => {\n\treturn query.replace(/['\"\\\\]/g, '\\\\$&');\n}\n\n/**\n * Dispatch an event\n *\n */\nexport const triggerEvent = ( dom_el:HTMLElement, event_name:string ):void => {\n\tvar event = document.createEvent('HTMLEvents');\n\tevent.initEvent(event_name, true, false);\n\tdom_el.dispatchEvent(event)\n};\n\n/**\n * Apply CSS rules to a dom element\n *\n */\nexport const applyCSS = ( dom_el:HTMLElement, css:{ [key: string]: string|number }):void => {\n\tObject.assign(dom_el.style, css);\n}\n\n\n/**\n * Add css classes\n *\n */\nexport const addClasses = ( elmts:HTMLElement|HTMLElement[], ...classes:string[]|string[][] ) => {\n\n\tvar norm_classes \t= classesArray(classes);\n\telmts\t\t\t\t= castAsArray(elmts);\n\n\telmts.map( el => {\n\t\tnorm_classes.map( cls => {\n\t\t\tel.classList.add( cls );\n\t\t});\n\t});\n}\n\n/**\n * Remove css classes\n *\n */\n export const removeClasses = ( elmts:HTMLElement|HTMLElement[], ...classes:string[]|string[][] ) => {\n\n \tvar norm_classes \t= classesArray(classes);\n\telmts\t\t\t\t= castAsArray(elmts);\n\n\telmts.map( el => {\n\t\tnorm_classes.map(cls => {\n\t \t\tel.classList.remove( cls );\n\t\t});\n \t});\n }\n\n\n/**\n * Return arguments\n *\n */\nexport const classesArray = (args:string[]|string[][]):string[] => {\n\tvar classes:string[] = [];\n\titerate( args, (_classes) =>{\n\t\tif( typeof _classes === 'string' ){\n\t\t\t_classes = _classes.trim().split(/[\\t\\n\\f\\r\\s]/);\n\t\t}\n\t\tif( Array.isArray(_classes) ){\n\t\t\tclasses = classes.concat(_classes);\n\t\t}\n\t});\n\n\treturn classes.filter(Boolean);\n}\n\n\n/**\n * Create an array from arg if it's not already an array\n *\n */\nexport const castAsArray = (arg:any):Array<any> => {\n\tif( !Array.isArray(arg) ){\n \t\targ = [arg];\n \t}\n\treturn arg;\n}\n\n\n/**\n * Get the closest node to the evt.target matching the selector\n * Stops at wrapper\n *\n */\nexport const parentMatch = ( target:null|HTMLElement, selector:string, wrapper?:HTMLElement ):HTMLElement|void => {\n\n\tif( wrapper && !wrapper.contains(target) ){\n\t\treturn;\n\t}\n\n\twhile( target && target.matches ){\n\n\t\tif( target.matches(selector) ){\n\t\t\treturn target;\n\t\t}\n\n\t\ttarget = target.parentNode as HTMLElement;\n\t}\n}\n\n\n/**\n * Get the first or last item from an array\n *\n * > 0 - right (last)\n * <= 0 - left (first)\n *\n */\nexport const getTail = ( list:Array<any>|NodeList, direction:number=0 ):any => {\n\n\tif( direction > 0 ){\n\t\treturn list[list.length-1];\n\t}\n\n\treturn list[0];\n}\n\n/**\n * Return true if an object is empty\n *\n */\nexport const isEmptyObject = (obj:object):boolean => {\n\treturn (Object.keys(obj).length === 0);\n}\n\n\n/**\n * Get the index of an element amongst sibling nodes of the same type\n *\n */\nexport const nodeIndex = ( el:null|Element, amongst?:string ):number => {\n\tif (!el) return -1;\n\n\tamongst = amongst || el.nodeName;\n\n\tvar i = 0;\n\twhile( el = el.previousElementSibling ){\n\n\t\tif( el.matches(amongst) ){\n\t\t\ti++;\n\t\t}\n\t}\n\treturn i;\n}\n\n\n/**\n * Set attributes of an element\n *\n */\nexport const setAttr = (el:Element,attrs:{ [key: string]: null|string|number }) => {\n\titerate( attrs,(val,attr) => {\n\t\tif( val == null ){\n\t\t\tel.removeAttribute(attr as string);\n\t\t}else{\n\t\t\tel.setAttribute(attr as string, ''+val);\n\t\t}\n\t});\n}\n\n\n/**\n * Replace a node\n */\nexport const replaceNode = ( existing:Node, replacement:Node ) => {\n\tif( existing.parentNode ) existing.parentNode.replaceChild(replacement, existing);\n}\n", "/**\n * highlight v3 | MIT license | Johann Burkard <jb@eaio.com>\n * Highlights arbitrary terms in a node.\n *\n * - Modified by Marshal <beatgates@gmail.com> 2011-6-24 (added regex)\n * - Modified by Brian Reavis <brian@thirdroute.com> 2012-8-27 (cleanup)\n */\n\nimport {replaceNode} from '../vanilla.ts';\n\n\nexport const highlight = (element:HTMLElement, regex:string|RegExp) => {\n\n\tif( regex === null ) return;\n\n\t// convet string to regex\n\tif( typeof regex === 'string' ){\n\n\t\tif( !regex.length ) return;\n\t\tregex = new RegExp(regex, 'i');\n\t}\n\n\n\t// Wrap matching part of text node with highlighting <span>, e.g.\n\t// Soccer -> <span class=\"highlight\">Soc</span>cer for regex = /soc/i\n\tconst highlightText = ( node:Text ):number => {\n\n\t\tvar match = node.data.match(regex);\n\t\tif( match && node.data.length > 0 ){\n\t\t\tvar spannode\t\t= document.createElement('span');\n\t\t\tspannode.className\t= 'highlight';\n\t\t\tvar middlebit\t\t= node.splitText(match.index as number);\n\n\t\t\tmiddlebit.splitText(match[0]!.length);\n\t\t\tvar middleclone\t\t= middlebit.cloneNode(true);\n\n\t\t\tspannode.appendChild(middleclone);\n\t\t\treplaceNode(middlebit, spannode);\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn 0;\n\t};\n\n\t// Recurse element node, looking for child text nodes to highlight, unless element\n\t// is childless, <script>, <style>, or already highlighted: <span class=\"hightlight\">\n\tconst highlightChildren = ( node:Element ):void => {\n\t\tif( node.nodeType === 1 && node.childNodes && !/(script|style)/i.test(node.tagName) && ( node.className !== 'highlight' || node.tagName !== 'SPAN' ) ){\n\t\t\tArray.from(node.childNodes).forEach(element => {\n\t\t\t\thighlightRecursive(element);\n\t\t\t});\n\t\t}\n\t};\n\n\n\tconst highlightRecursive = ( node:Node|Element ):number => {\n\n\t\tif( node.nodeType === 3 ){\n\t\t\treturn highlightText(node as Text);\n\t\t}\n\n\t\thighlightChildren(node as Element);\n\n\t\treturn 0;\n\t};\n\n\thighlightRecursive( element );\n};\n\n/**\n * removeHighlight fn copied from highlight v5 and\n * edited to remove with(), pass js strict mode, and use without jquery\n */\nexport const removeHighlight = (el:HTMLElement) => {\n\tvar elements = el.querySelectorAll(\"span.highlight\");\n\tArray.prototype.forEach.call(elements, function(el:HTMLElement){\n\t\tvar parent = el.parentNode as Node;\n\t\tparent.replaceChild(el.firstChild as Node, el);\n\t\tparent.normalize();\n\t});\n};\n", "export const KEY_A\t\t\t\t= 65;\nexport const KEY_RETURN\t\t\t= 13;\nexport const KEY_ESC\t\t\t= 27;\nexport const KEY_LEFT\t\t\t= 37;\nexport const KEY_UP\t\t\t\t= 38;\nexport const KEY_RIGHT\t\t\t= 39;\nexport const KEY_DOWN\t\t\t= 40;\nexport const KEY_BACKSPACE\t\t= 8;\nexport const KEY_DELETE\t\t\t= 46;\nexport const KEY_TAB\t\t\t= 9;\n\nexport const IS_MAC \t\t= typeof navigator === 'undefined' ? false : /Mac/.test(navigator.userAgent);\nexport const KEY_SHORTCUT\t\t= IS_MAC ? 'metaKey' : 'ctrlKey'; // ctrl key or apple key for ma\n", "\nexport default {\n\toptions: [],\n\toptgroups: [],\n\n\tplugins: [],\n\tdelimiter: ',',\n\tsplitOn: null, // regexp or string for splitting up values from a paste command\n\tpersist: true,\n\tdiacritics: true,\n\tcreate: null,\n\tcreateOnBlur: false,\n\tcreateFilter: null,\n\thighlight: true,\n\topenOnFocus: true,\n\tshouldOpen: null,\n\tmaxOptions: 50,\n\tmaxItems: null,\n\thideSelected: null,\n\tduplicates: false,\n\taddPrecedence: false,\n\tselectOnTab: false,\n\tpreload: null,\n\tallowEmptyOption: false,\n\t//closeAfterSelect: false,\n\trefreshThrottle: 300,\n\n\n\tloadThrottle: 300,\n\tloadingClass: 'loading',\n\n\tdataAttr: null, //'data-data',\n\toptgroupField: 'optgroup',\n\tvalueField: 'value',\n\tlabelField: 'text',\n\tdisabledField: 'disabled',\n\toptgroupLabelField: 'label',\n\toptgroupValueField: 'value',\n\tlockOptgroupOrder: false,\n\n\tsortField: '$order',\n\tsearchField: ['text'],\n\tsearchConjunction: 'and',\n\n\tmode: null,\n\twrapperClass: 'ts-wrapper',\n\tcontrolClass: 'ts-control',\n\tdropdownClass: 'ts-dropdown',\n\tdropdownContentClass: 'ts-dropdown-content',\n\titemClass: 'item',\n\toptionClass: 'option',\n\n\tdropdownParent: null,\n\tcontrolInput: '<input type=\"text\" autocomplete=\"off\" size=\"1\" />',\n\n\tcopyClassesToDropdown: false,\n\n\tplaceholder: null,\n\thidePlaceholder: null,\n\n\tshouldLoad: function(query:string):boolean{\n\t\treturn query.length > 0;\n\t},\n\n\t/*\n\tload : null, // function(query, callback) { ... }\n\tscore : null, // function(search) { ... }\n\tonInitialize : null, // function() { ... }\n\tonChange : null, // function(value) { ... }\n\tonItemAdd : null, // function(value, $item) { ... }\n\tonItemRemove : null, // function(value) { ... }\n\tonClear : null, // function() { ... }\n\tonOptionAdd : null, // function(value, data) { ... }\n\tonOptionRemove : null, // function(value) { ... }\n\tonOptionClear : null, // function() { ... }\n\tonOptionGroupAdd : null, // function(id, data) { ... }\n\tonOptionGroupRemove : null, // function(id) { ... }\n\tonOptionGroupClear : null, // function() { ... }\n\tonDropdownOpen : null, // function(dropdown) { ... }\n\tonDropdownClose : null, // function(dropdown) { ... }\n\tonType : null, // function(str) { ... }\n\tonDelete : null, // function(values) { ... }\n\t*/\n\n\trender: {\n\t\t/*\n\t\titem: null,\n\t\toptgroup: null,\n\t\toptgroup_header: null,\n\t\toption: null,\n\t\toption_create: null\n\t\t*/\n\t}\n};\n", "import defaults from './defaults.ts';\nimport { hash_key, iterate } from './utils.ts';\nimport { TomOption, TomSettings, RecursivePartial } from './types/index.ts';\nimport { TomInput } from './types/index.ts';\n\n\nexport default function getSettings( input:TomInput, settings_user:RecursivePartial<TomSettings>):TomSettings{\n\tvar settings:TomSettings\t= Object.assign({}, defaults, settings_user);\n\n\tvar attr_data\t\t\t\t= settings.dataAttr;\n\tvar field_label\t\t\t\t= settings.labelField;\n\tvar field_value\t\t\t\t= settings.valueField;\n\tvar field_disabled\t\t\t= settings.disabledField;\n\tvar field_optgroup\t\t\t= settings.optgroupField;\n\tvar field_optgroup_label\t= settings.optgroupLabelField;\n\tvar field_optgroup_value\t= settings.optgroupValueField;\n\n\tvar tag_name\t\t\t\t= input.tagName.toLowerCase();\n\tvar placeholder\t\t\t\t= input.getAttribute('placeholder') || input.getAttribute('data-placeholder');\n\n\tif (!placeholder && !settings.allowEmptyOption) {\n\t\tlet option\t\t= input.querySelector('option[value=\"\"]');\n\t\tif( option ){\n\t\t\tplaceholder = option.textContent;\n\t\t}\n\n\t}\n\n\tvar settings_element:{\n\t\tplaceholder\t: null|string,\n\t\toptions\t\t: TomOption[],\n\t\toptgroups\t: TomOption[],\n\t\titems\t\t: string[],\n\t\tmaxItems\t: null|number,\n\t} = {\n\t\tplaceholder\t: placeholder,\n\t\toptions\t\t: [],\n\t\toptgroups\t: [],\n\t\titems\t\t: [],\n\t\tmaxItems\t: null,\n\t};\n\n\n\t/**\n\t * Initialize from a <select> element.\n\t *\n\t */\n\tvar init_select = () => {\n\t\tvar tagName;\n\t\tvar options = settings_element.options;\n\t\tvar optionsMap:{[key:string]:any} = {};\n\t\tvar group_count = 1;\n\t\tlet $order = 0;\n\n\t\tvar readData = (el:HTMLElement):TomOption => {\n\n\t\t\tvar data\t= Object.assign({},el.dataset); // get plain object from DOMStringMap\n\t\t\tvar json\t= attr_data && data[attr_data];\n\n\t\t\tif( typeof json === 'string' && json.length ){\n\t\t\t\tdata = Object.assign(data,JSON.parse(json));\n\t\t\t}\n\n\t\t\treturn data;\n\t\t};\n\n\t\tvar addOption = (option:HTMLOptionElement, group?:string) => {\n\n\t\t\tvar value = hash_key(option.value);\n\t\t\tif ( value == null ) return;\n\t\t\tif ( !value && !settings.allowEmptyOption) return;\n\n\t\t\t// if the option already exists, it's probably been\n\t\t\t// duplicated in another optgroup. in this case, push\n\t\t\t// the current group to the \"optgroup\" property on the\n\t\t\t// existing option so that it's rendered in both places.\n\t\t\tif (optionsMap.hasOwnProperty(value)) {\n\t\t\t\tif (group) {\n\t\t\t\t\tvar arr = optionsMap[value][field_optgroup];\n\t\t\t\t\tif (!arr) {\n\t\t\t\t\t\toptionsMap[value][field_optgroup] = group;\n\t\t\t\t\t} else if (!Array.isArray(arr)) {\n\t\t\t\t\t\toptionsMap[value][field_optgroup] = [arr, group];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tarr.push(group);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}else{\n\n\t\t\t\tvar option_data = readData(option);\n\t\t\t\toption_data[field_label] = option_data[field_label] || option.textContent;\n\t\t\t\toption_data[field_value] = option_data[field_value] || value;\n\t\t\t\toption_data[field_disabled] = option_data[field_disabled] || option.disabled;\n\t\t\t\toption_data[field_optgroup] = option_data[field_optgroup] || group;\n\t\t\t\toption_data.$option\t\t\t= option;\n\t\t\t\toption_data.$order\t\t\t= option_data.$order || ++$order;\n\n\t\t\t\toptionsMap[value] = option_data;\n\t\t\t\toptions.push(option_data);\n\t\t\t}\n\n\t\t\tif( option.selected ){\n\t\t\t\tsettings_element.items.push(value);\n\t\t\t}\n\t\t};\n\n\t\tvar addGroup = ( optgroup:HTMLOptGroupElement ) => {\n\t\t\tvar id:string, optgroup_data\n\n\t\t\toptgroup_data\t\t\t\t\t\t\t= readData(optgroup);\n\t\t\toptgroup_data[field_optgroup_label]\t\t= optgroup_data[field_optgroup_label] || optgroup.getAttribute('label') || '';\n\t\t\toptgroup_data[field_optgroup_value]\t\t= optgroup_data[field_optgroup_value] || group_count++;\n\t\t\toptgroup_data[field_disabled]\t\t\t= optgroup_data[field_disabled] || optgroup.disabled;\n\t\t\toptgroup_data.$order\t\t\t\t\t= optgroup_data.$order || ++$order;\n\n\t\t\tsettings_element.optgroups.push(optgroup_data);\n\n\t\t\tid = optgroup_data[field_optgroup_value];\n\n\t\t\titerate(optgroup.children, (option)=>{\n\t\t\t\taddOption(option as HTMLOptionElement, id);\n\t\t\t});\n\n\t\t};\n\n\t\tsettings_element.maxItems = input.hasAttribute('multiple') ? null : 1;\n\n\t\titerate(input.children,(child)=>{\n\t\t\ttagName = child.tagName.toLowerCase();\n\t\t\tif (tagName === 'optgroup') {\n\t\t\t\taddGroup(child as HTMLOptGroupElement);\n\t\t\t} else if (tagName === 'option') {\n\t\t\t\taddOption(child as HTMLOptionElement);\n\t\t\t}\n\t\t});\n\n\t};\n\n\n\t/**\n\t * Initialize from a <input type=\"text\"> element.\n\t *\n\t */\n\tvar init_textbox = () => {\n\t\tconst data_raw = input.getAttribute(attr_data);\n\n\t\tif (!data_raw) {\n\t\t\tvar value = input.value.trim() || '';\n\t\t\tif (!settings.allowEmptyOption && !value.length) return;\n\t\t\tconst values = value.split(settings.delimiter);\n\n\t\t\titerate( values, (value) => {\n\t\t\t\tconst option:TomOption = {};\n\t\t\t\toption[field_label] = value;\n\t\t\t\toption[field_value] = value;\n\t\t\t\tsettings_element.options.push(option);\n\t\t\t});\n\t\t\tsettings_element.items = values;\n\t\t} else {\n\t\t\tsettings_element.options = JSON.parse(data_raw);\n\t\t\titerate( settings_element.options, (opt) => {\n\t\t\t\tsettings_element.items.push(opt[field_value]);\n\t\t\t});\n\t\t}\n\t};\n\n\n\tif (tag_name === 'select') {\n\t\tinit_select();\n\t} else {\n\t\tinit_textbox();\n\t}\n\n\treturn Object.assign( {}, defaults, settings_element, settings_user) as TomSettings;\n};\n", "\nimport MicroEvent from './contrib/microevent.ts';\nimport MicroPlugin from './contrib/microplugin.ts';\nimport { Sifter } from '@orchidjs/sifter';\nimport { escape_regex } from '@orchidjs/unicode-variants';\nimport { TomInput, TomArgObject, TomOption, TomOptions, TomCreateFilter, TomCreateCallback, TomItem, TomSettings, TomTemplateNames, TomClearFilter, RecursivePartial } from './types/index.ts';\nimport {highlight, removeHighlight} from './contrib/highlight.ts';\nimport * as constants from './constants.ts';\nimport getSettings from './getSettings.ts';\nimport {\n\thash_key,\n\tget_hash,\n\tescape_html,\n\tdebounce_events,\n\tgetSelection,\n\tpreventDefault,\n\taddEvent,\n\tloadDebounce,\n\ttimeout,\n\tisKeyDown,\n\tgetId,\n\taddSlashes,\n\tappend,\n\titerate\n} from './utils.ts';\n\nimport {\n\tgetDom,\n\tisHtmlString,\n\tescapeQuery,\n\ttriggerEvent,\n\tapplyCSS,\n\taddClasses,\n\tremoveClasses,\n\tparentMatch,\n\tgetTail,\n\tisEmptyObject,\n\tnodeIndex,\n\tsetAttr,\n\treplaceNode\n} from './vanilla.ts';\n\nvar instance_i = 0;\n\nexport default class TomSelect extends MicroPlugin(MicroEvent){\n\n\tpublic control_input\t\t\t: HTMLInputElement;\n\tpublic wrapper\t\t\t\t\t: HTMLElement;\n\tpublic dropdown\t\t\t\t\t: HTMLElement;\n\tpublic control\t\t\t\t\t: HTMLElement;\n\tpublic dropdown_content\t\t\t: HTMLElement;\n\tpublic focus_node\t\t\t\t: HTMLElement;\n\n\tpublic order\t\t\t\t\t: number = 0;\n\tpublic settings\t\t\t\t\t: TomSettings;\n\tpublic input\t\t\t\t\t: TomInput;\n\tpublic tabIndex\t\t\t\t\t: number;\n\tpublic is_select_tag\t\t\t: boolean;\n\tpublic rtl\t\t\t\t\t\t: boolean;\n\tprivate inputId\t\t\t\t\t: string;\n\n\tprivate _destroy\t\t\t\t!: () => void;\n\tpublic sifter\t\t\t\t\t: Sifter;\n\n\n\tpublic isOpen\t\t\t\t\t: boolean = false;\n\tpublic isDisabled\t\t\t\t: boolean = false;\n\tpublic isReadOnly\t\t\t\t: boolean = false;\n\tpublic isRequired\t\t\t\t: boolean;\n\tpublic isInvalid\t\t\t\t: boolean = false; // @deprecated 1.8\n\tpublic isValid\t\t\t\t\t: boolean = true;\n\tpublic isLocked\t\t\t\t\t: boolean = false;\n\tpublic isFocused\t\t\t\t: boolean = false;\n\tpublic isInputHidden\t\t\t: boolean = false;\n\tpublic isSetup\t\t\t\t\t: boolean = false;\n\tpublic ignoreFocus\t\t\t\t: boolean = false;\n\tpublic ignoreHover\t\t\t\t: boolean = false;\n\tpublic hasOptions\t\t\t\t: boolean = false;\n\tpublic currentResults\t\t\t?: ReturnType<Sifter['search']>;\n\tpublic lastValue\t\t\t\t: string = '';\n\tpublic caretPos\t\t\t\t\t: number = 0;\n\tpublic loading\t\t\t\t\t: number = 0;\n\tpublic loadedSearches\t\t\t: { [key: string]: boolean } = {};\n\n\tpublic activeOption\t\t\t\t: null|HTMLElement = null;\n\tpublic activeItems\t\t\t\t: TomItem[] = [];\n\n\tpublic optgroups\t\t\t\t: TomOptions = {};\n\tpublic options\t\t\t\t\t: TomOptions = {};\n\tpublic userOptions\t\t\t\t: {[key:string]:boolean} = {};\n\tpublic items\t\t\t\t\t: string[] = [];\n\n\tprivate refreshTimeout\t\t\t: null|number = null;\n\n\n\tconstructor( input_arg: string|TomInput, user_settings:RecursivePartial<TomSettings> ){\n\t\tsuper();\n\n\t\tinstance_i++;\n\n\t\tvar dir;\n\t\tvar input\t\t\t\t= getDom( input_arg ) as TomInput;\n\n\t\tif( input.tomselect ){\n\t\t\tthrow new Error('Tom Select already initialized on this element');\n\t\t}\n\n\n\t\tinput.tomselect\t\t\t= this;\n\n\n\t\t// detect rtl environment\n\t\tvar computedStyle\t\t= window.getComputedStyle && window.getComputedStyle(input, null);\n\t\tdir\t\t\t\t\t\t= computedStyle.getPropertyValue('direction');\n\n\t\t// setup default state\n\t\tconst settings\t\t\t= getSettings( input, user_settings );\n\t\tthis.settings\t\t\t= settings;\n\t\tthis.input\t\t\t\t= input;\n\t\tthis.tabIndex\t\t\t= input.tabIndex || 0;\n\t\tthis.is_select_tag\t\t= input.tagName.toLowerCase() === 'select';\n\t\tthis.rtl\t\t\t\t= /rtl/i.test(dir);\n\t\tthis.inputId\t\t\t= getId(input, 'tomselect-'+instance_i);\n\t\tthis.isRequired\t\t\t= input.required;\n\n\n\t\t// search system\n\t\tthis.sifter = new Sifter(this.options, {diacritics: settings.diacritics});\n\n\t\t// option-dependent defaults\n\t\tsettings.mode = settings.mode || (settings.maxItems === 1 ? 'single' : 'multi');\n\t\tif (typeof settings.hideSelected !== 'boolean') {\n\t\t\tsettings.hideSelected = settings.mode === 'multi';\n\t\t}\n\n\t\tif( typeof settings.hidePlaceholder !== 'boolean' ){\n\t\t\tsettings.hidePlaceholder = settings.mode !== 'multi';\n\t\t}\n\n\t\t// set up createFilter callback\n\t\tvar filter = settings.createFilter;\n\t\tif( typeof filter !== 'function' ){\n\n\t\t\tif( typeof filter === 'string' ){\n\t\t\t\tfilter = new RegExp(filter);\n\t\t\t}\n\n\t\t\tif( filter instanceof RegExp ){\n\t\t\t\tsettings.createFilter = (input: string) => (filter as RegExp).test(input);\n\t\t\t}else{\n\t\t\t\tsettings.createFilter = (value: string) => {\n\t\t\t\t\treturn this.settings.duplicates || !this.options[value];\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\n\t\tthis.initializePlugins(settings.plugins);\n\t\tthis.setupCallbacks();\n\t\tthis.setupTemplates();\n\n\n\t\t// Create all elements\n\t\tconst wrapper\t\t\t= getDom('<div>');\n\t\tconst control\t\t\t= getDom('<div>');\n\t\tconst dropdown\t\t\t= this._render('dropdown');\n\t\tconst dropdown_content\t= getDom(`<div role=\"listbox\" tabindex=\"-1\">`);\n\n\t\tconst classes\t\t\t= this.input.getAttribute('class') || '';\n\t\tconst inputMode\t\t\t= settings.mode;\n\n\t\tvar control_input: HTMLInputElement;\n\n\n\t\taddClasses( wrapper, settings.wrapperClass, classes, inputMode);\n\n\n\t\taddClasses(control,settings.controlClass);\n\t\tappend( wrapper, control );\n\n\n\t\taddClasses(dropdown, settings.dropdownClass, inputMode);\n\t\tif( settings.copyClassesToDropdown ){\n\t\t\taddClasses( dropdown, classes);\n\t\t}\n\n\n\t\taddClasses(dropdown_content, settings.dropdownContentClass);\n\t\tappend( dropdown, dropdown_content );\n\n\t\tgetDom( settings.dropdownParent || wrapper ).appendChild( dropdown );\n\n\n\t\t// default controlInput\n\t\tif( isHtmlString(settings.controlInput) ){\n\t\t\tcontrol_input\t\t= getDom(settings.controlInput ) as HTMLInputElement;\n\n\t\t\t// set attributes\n\t\t\tvar attrs = ['autocorrect','autocapitalize','autocomplete','spellcheck'];\n\t\t\titerate(attrs,(attr:string) => {\n\t\t\t\tif( input.getAttribute(attr) ){\n\t\t\t\t\tsetAttr(control_input,{[attr]:input.getAttribute(attr)});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tcontrol_input.tabIndex = -1;\n\t\t\tcontrol.appendChild( control_input );\n\t\t\tthis.focus_node\t\t= control_input;\n\n\t\t// dom element\n\t\t}else if( settings.controlInput ){\n\t\t\tcontrol_input\t\t= getDom( settings.controlInput ) as HTMLInputElement;\n\t\t\tthis.focus_node\t\t= control_input;\n\n\t\t}else{\n\t\t\tcontrol_input\t\t= getDom('<input/>') as HTMLInputElement;\n\t\t\tthis.focus_node\t\t= control;\n\t\t}\n\n\t\tthis.wrapper\t\t\t= wrapper;\n\t\tthis.dropdown\t\t\t= dropdown;\n\t\tthis.dropdown_content\t= dropdown_content;\n\t\tthis.control \t\t\t= control;\n\t\tthis.control_input\t\t= control_input;\n\n\t\tthis.setup();\n\t}\n\n\t/**\n\t * set up event bindings.\n\t *\n\t */\n\tsetup(){\n\n\t\tconst self = this;\n\t\tconst settings\t\t\t\t= self.settings;\n\t\tconst control_input\t\t\t= self.control_input;\n\t\tconst dropdown\t\t\t\t= self.dropdown;\n\t\tconst dropdown_content\t\t= self.dropdown_content;\n\t\tconst wrapper\t\t\t\t= self.wrapper;\n\t\tconst control\t\t\t\t= self.control;\n\t\tconst input\t\t\t\t\t= self.input;\n\t\tconst focus_node\t\t\t= self.focus_node;\n\t\tconst passive_event\t\t\t= { passive: true };\n\t\tconst listboxId\t\t\t\t= self.inputId +'-ts-dropdown';\n\n\n\t\tsetAttr(dropdown_content,{\n\t\t\tid: listboxId\n\t\t});\n\n\t\tsetAttr(focus_node,{\n\t\t\trole:'combobox',\n\t\t\t'aria-haspopup':'listbox',\n\t\t\t'aria-expanded':'false',\n\t\t\t'aria-controls':listboxId\n\t\t});\n\n\t\tconst control_id\t= getId(focus_node,self.inputId + '-ts-control');\n\t\tconst query\t\t\t= \"label[for='\"+escapeQuery(self.inputId)+\"']\";\n\t\tconst label\t\t\t= document.querySelector(query);\n\t\tconst label_click\t= self.focus.bind(self);\n\t\tif( label ){\n\t\t\taddEvent(label,'click', label_click );\n\t\t\tsetAttr(label,{for:control_id});\n\t\t\tconst label_id = getId(label,self.inputId+'-ts-label');\n\t\t\tsetAttr(focus_node,{'aria-labelledby':label_id});\n\t\t\tsetAttr(dropdown_content,{'aria-labelledby':label_id});\n\t\t}\n\n\t\twrapper.style.width = input.style.width;\n\n\t\tif (self.plugins.names.length) {\n\t\t\tconst classes_plugins = 'plugin-' + self.plugins.names.join(' plugin-');\n\t\t\taddClasses( [wrapper,dropdown], classes_plugins);\n\t\t}\n\n\t\tif ((settings.maxItems === null || settings.maxItems > 1) && self.is_select_tag ){\n\t\t\tsetAttr(input,{multiple:'multiple'});\n\t\t}\n\n\t\tif (settings.placeholder) {\n\t\t\tsetAttr(control_input,{placeholder:settings.placeholder});\n\t\t}\n\n\t\t// if splitOn was not passed in, construct it from the delimiter to allow pasting universally\n\t\tif (!settings.splitOn && settings.delimiter) {\n\t\t\tsettings.splitOn = new RegExp('\\\\s*' + escape_regex(settings.delimiter) + '+\\\\s*');\n\t\t}\n\n\t\t// debounce user defined load() if loadThrottle > 0\n\t\t// after initializePlugins() so plugins can create/modify user defined loaders\n\t\tif( settings.load && settings.loadThrottle ){\n\t\t\tsettings.load = loadDebounce(settings.load,settings.loadThrottle)\n\t\t}\n\n\t\taddEvent(dropdown,'mousemove', () => {\n\t\t\tself.ignoreHover = false;\n\t\t});\n\n\t\taddEvent(dropdown,'mouseenter', (e) => {\n\n\t\t\tvar target_match = parentMatch(e.target as HTMLElement, '[data-selectable]', dropdown);\n\t\t\tif( target_match ) self.onOptionHover( e as MouseEvent, target_match );\n\n\t\t}, {capture:true});\n\n\t\t// clicking on an option should select it\n\t\taddEvent(dropdown,'click',(evt) => {\n\t\t\tconst option = parentMatch(evt.target as HTMLElement, '[data-selectable]');\n\t\t\tif( option ){\n\t\t\t\tself.onOptionSelect( evt as MouseEvent, option );\n\t\t\t\tpreventDefault(evt,true);\n\t\t\t}\n\t\t});\n\n\t\taddEvent(control,'click', (evt) => {\n\n\t\t\tvar target_match = parentMatch( evt.target as HTMLElement, '[data-ts-item]', control);\n\t\t\tif( target_match && self.onItemSelect(evt as MouseEvent, target_match as TomItem) ){\n\t\t\t\tpreventDefault(evt,true);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// retain focus (see control_input mousedown)\n\t\t\tif( control_input.value != '' ){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tself.onClick();\n\t\t\tpreventDefault(evt,true);\n\t\t});\n\n\n\t\t// keydown on focus_node for arrow_down/arrow_up\n\t\taddEvent(focus_node,'keydown',\t\t(e) => self.onKeyDown(e as KeyboardEvent) );\n\n\t\t// keypress and input/keyup\n\t\taddEvent(control_input,'keypress',\t(e) => self.onKeyPress(e as KeyboardEvent) );\n\t\taddEvent(control_input,'input',\t\t(e) => self.onInput(e as KeyboardEvent) );\n\t\taddEvent(focus_node,'blur', \t\t(e) => self.onBlur(e as FocusEvent) );\n\t\taddEvent(focus_node,'focus',\t\t(e) => self.onFocus(e as MouseEvent) );\n\t\taddEvent(control_input,'paste',\t\t(e) => self.onPaste(e as MouseEvent) );\n\n\n\t\tconst doc_mousedown = (evt:Event) => {\n\n\t\t\t// blur if target is outside of this instance\n\t\t\t// dropdown is not always inside wrapper\n\t\t\tconst target = evt.composedPath()[0];\n\t\t\tif( !wrapper.contains(target as HTMLElement) && !dropdown.contains(target as HTMLElement) ){\n\t\t\t\tif (self.isFocused) {\n\t\t\t\t\tself.blur();\n\t\t\t\t}\n\t\t\t\tself.inputState();\n\t\t\t\treturn;\n\t\t\t}\n\n\n\t\t\t// retain focus by preventing native handling. if the\n\t\t\t// event target is the input it should not be modified.\n\t\t\t// otherwise, text selection within the input won't work.\n\t\t\t// Fixes bug #212 which is no covered by tests\n\t\t\tif( target == control_input && self.isOpen ){\n\t\t\t\tevt.stopPropagation();\n\n\t\t\t// clicking anywhere in the control should not blur the control_input (which would close the dropdown)\n\t\t\t}else{\n\t\t\t\tpreventDefault(evt,true);\n\t\t\t}\n\n\t\t};\n\n\t\tconst win_scroll = () => {\n\t\t\tif (self.isOpen) {\n\t\t\t\tself.positionDropdown();\n\t\t\t}\n\t\t};\n\n\n\t\taddEvent(document,'mousedown', doc_mousedown);\n\t\taddEvent(window,'scroll', win_scroll, passive_event);\n\t\taddEvent(window,'resize', win_scroll, passive_event);\n\n\t\tthis._destroy = () => {\n\t\t\tdocument.removeEventListener('mousedown',doc_mousedown);\n\t\t\twindow.removeEventListener('scroll',win_scroll);\n\t\t\twindow.removeEventListener('resize',win_scroll);\n\t\t\tif( label ) label.removeEventListener('click',label_click);\n\t\t};\n\n\t\t// store original html and tab index so that they can be\n\t\t// restored when the destroy() method is called.\n\t\tthis.revertSettings = {\n\t\t\tinnerHTML : input.innerHTML,\n\t\t\ttabIndex : input.tabIndex\n\t\t};\n\n\n\t\tinput.tabIndex = -1;\n\t\tinput.insertAdjacentElement('afterend', self.wrapper);\n\n\t\tself.sync(false);\n\t\tsettings.items = [];\n\t\tdelete settings.optgroups;\n\t\tdelete settings.options;\n\n\t\taddEvent(input,'invalid', () => {\n\t\t\tif( self.isValid ){\n\t\t\t\tself.isValid = false;\n\t\t\t\tself.isInvalid = true;\n\t\t\t\tself.refreshState();\n\t\t\t}\n\t\t});\n\n\t\tself.updateOriginalInput();\n\t\tself.refreshItems();\n\t\tself.close(false);\n\t\tself.inputState();\n\t\tself.isSetup = true;\n\n\t\tif( input.disabled ){\n\t\t\tself.disable();\n\t\t}else if( input.readOnly ){\n\t\t\tself.setReadOnly(true);\n\t\t}else{\n\t\t\tself.enable(); //sets tabIndex\n\t\t}\n\n\t\tself.on('change', this.onChange);\n\n\t\taddClasses(input,'tomselected','ts-hidden-accessible');\n\t\tself.trigger('initialize');\n\n\t\t// preload options\n\t\tif (settings.preload === true) {\n\t\t\tself.preload();\n\t\t}\n\n\t}\n\n\n\t/**\n\t * Register options and optgroups\n\t *\n\t */\n\tsetupOptions(options:TomOption[] = [], optgroups:TomOption[] = []){\n\n\t\t// build options table\n\t\tthis.addOptions(options);\n\n\n\t\t// build optgroup table\n\t\titerate( optgroups, (optgroup:TomOption) => {\n\t\t\tthis.registerOptionGroup(optgroup);\n\t\t});\n\t}\n\n\t/**\n\t * Sets up default rendering functions.\n\t */\n\tsetupTemplates() {\n\t\tvar self = this;\n\t\tvar field_label = self.settings.labelField;\n\t\tvar field_optgroup = self.settings.optgroupLabelField;\n\n\t\tvar templates = {\n\t\t\t'optgroup': (data:TomOption) => {\n\t\t\t\tlet optgroup = document.createElement('div');\n\t\t\t\toptgroup.className = 'optgroup';\n\t\t\t\toptgroup.appendChild(data.options);\n\t\t\t\treturn optgroup;\n\n\t\t\t},\n\t\t\t'optgroup_header': (data:TomOption, escape:typeof escape_html) => {\n\t\t\t\treturn '<div class=\"optgroup-header\">' + escape(data[field_optgroup]) + '</div>';\n\t\t\t},\n\t\t\t'option': (data:TomOption, escape:typeof escape_html) => {\n\t\t\t\treturn '<div>' + escape(data[field_label]) + '</div>';\n\t\t\t},\n\t\t\t'item': (data:TomOption, escape:typeof escape_html) => {\n\t\t\t\treturn '<div>' + escape(data[field_label]) + '</div>';\n\t\t\t},\n\t\t\t'option_create': (data:TomOption, escape:typeof escape_html) => {\n\t\t\t\treturn '<div class=\"create\">Add <strong>' + escape(data.input) + '</strong>…</div>';\n\t\t\t},\n\t\t\t'no_results':() => {\n\t\t\t\treturn '<div class=\"no-results\">No results found</div>';\n\t\t\t},\n\t\t\t'loading':() => {\n\t\t\t\treturn '<div class=\"spinner\"></div>';\n\t\t\t},\n\t\t\t'not_loading':() => {},\n\t\t\t'dropdown':() => {\n\t\t\t\treturn '<div></div>';\n\t\t\t}\n\t\t};\n\n\n\t\tself.settings.render = Object.assign({}, templates, self.settings.render);\n\t}\n\n\t/**\n\t * Maps fired events to callbacks provided\n\t * in the settings used when creating the control.\n\t */\n\tsetupCallbacks() {\n\t\tvar key, fn;\n\t\tvar callbacks:{[key:string]:string} = {\n\t\t\t'initialize' : 'onInitialize',\n\t\t\t'change' : 'onChange',\n\t\t\t'item_add' : 'onItemAdd',\n\t\t\t'item_remove' : 'onItemRemove',\n\t\t\t'item_select' : 'onItemSelect',\n\t\t\t'clear' : 'onClear',\n\t\t\t'option_add' : 'onOptionAdd',\n\t\t\t'option_remove' : 'onOptionRemove',\n\t\t\t'option_clear' : 'onOptionClear',\n\t\t\t'optgroup_add' : 'onOptionGroupAdd',\n\t\t\t'optgroup_remove' : 'onOptionGroupRemove',\n\t\t\t'optgroup_clear' : 'onOptionGroupClear',\n\t\t\t'dropdown_open' : 'onDropdownOpen',\n\t\t\t'dropdown_close' : 'onDropdownClose',\n\t\t\t'type' : 'onType',\n\t\t\t'load' : 'onLoad',\n\t\t\t'focus' : 'onFocus',\n\t\t\t'blur' : 'onBlur'\n\t\t};\n\n\t\tfor (key in callbacks) {\n\n\t\t\tfn = this.settings[callbacks[key] as (keyof TomSettings)];\n\t\t\tif (fn) this.on(key, fn);\n\n\t\t}\n\t}\n\n\t/**\n\t * Sync the Tom Select instance with the original input or select\n\t *\n\t */\n\tsync(get_settings:boolean=true):void{\n\t\tconst self\t\t= this;\n\t\tconst settings\t= get_settings ? getSettings( self.input, {delimiter:self.settings.delimiter} as RecursivePartial<TomSettings> ) : self.settings;\n\n\t\tself.setupOptions(settings.options,settings.optgroups);\n\n\t\tself.setValue(settings.items||[],true); // silent prevents recursion\n\n\t\tself.lastQuery = null; // so updated options will be displayed in dropdown\n\t}\n\n\t/**\n\t * Triggered when the main control element\n\t * has a click event.\n\t *\n\t */\n\tonClick():void {\n\t\tvar self = this;\n\n\t\tif( self.activeItems.length > 0 ){\n\t\t\tself.clearActiveItems();\n\t\t\tself.focus();\n\t\t\treturn;\n\t\t}\n\n\t\tif( self.isFocused && self.isOpen ){\n\t\t\tself.blur();\n\t\t} else {\n\t\t\tself.focus();\n\t\t}\n\t}\n\n\t/**\n\t * @deprecated v1.7\n\t *\n\t */\n\tonMouseDown():void {}\n\n\t/**\n\t * Triggered when the value of the control has been changed.\n\t * This should propagate the event to the original DOM\n\t * input / select element.\n\t */\n\tonChange() {\n\t\ttriggerEvent(this.input, 'input');\n\t\ttriggerEvent(this.input, 'change');\n\t}\n\n\t/**\n\t * Triggered on <input> paste.\n\t *\n\t */\n\tonPaste(e:MouseEvent|KeyboardEvent):void {\n\t\tvar self = this;\n\n\t\tif( self.isInputHidden || self.isLocked ){\n\t\t\tpreventDefault(e);\n\t\t\treturn;\n\t\t}\n\n\t\t// If a regex or string is included, this will split the pasted\n\t\t// input and create Items for each separate value\n\t\tif( !self.settings.splitOn ){\n\t\t\treturn;\n\t\t}\n\n\t\t// Wait for pasted text to be recognized in value\n\t\tsetTimeout(() => {\n\t\t\tvar pastedText = self.inputValue();\n\t\t\tif( !pastedText.match(self.settings.splitOn)){\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tvar splitInput = pastedText.trim().split(self.settings.splitOn);\n\t\t\titerate( splitInput, (piece:string) => {\n\n\t\t\t\tconst hash = hash_key(piece);\n\t\t\t\tif( hash ){\n\t\t\t\t\tif( this.options[piece] ){\n\t\t\t\t\t\tself.addItem(piece);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tself.createItem(piece);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}, 0);\n\n\t}\n\n\t/**\n\t * Triggered on <input> keypress.\n\t *\n\t */\n\tonKeyPress(e:KeyboardEvent):void {\n\t\tvar self = this;\n\t\tif(self.isLocked){\n\t\t\tpreventDefault(e);\n\t\t\treturn;\n\t\t}\n\t\tvar character = String.fromCharCode(e.keyCode || e.which);\n\t\tif (self.settings.create && self.settings.mode === 'multi' && character === self.settings.delimiter) {\n\t\t\tself.createItem();\n\t\t\tpreventDefault(e);\n\t\t\treturn;\n\t\t}\n\t}\n\n\t/**\n\t * Triggered on <input> keydown.\n\t *\n\t */\n\tonKeyDown(e:KeyboardEvent):void {\n\t\tvar self = this;\n\n\t\tself.ignoreHover = true;\n\n\t\tif (self.isLocked) {\n\t\t\tif (e.keyCode !== constants.KEY_TAB) {\n\t\t\t\tpreventDefault(e);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tswitch (e.keyCode) {\n\n\t\t\t// ctrl+A: select all\n\t\t\tcase constants.KEY_A:\n\t\t\t\tif( isKeyDown(constants.KEY_SHORTCUT,e) ){\n\t\t\t\t\tif( self.control_input.value == '' ){\n\t\t\t\t\t\tpreventDefault(e);\n\t\t\t\t\t\tself.selectAll();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// esc: close dropdown\n\t\t\tcase constants.KEY_ESC:\n\t\t\t\tif (self.isOpen) {\n\t\t\t\t\tpreventDefault(e,true);\n\t\t\t\t\tself.close();\n\t\t\t\t}\n\t\t\t\tself.clearActiveItems();\n\t\t\t\treturn;\n\n\t\t\t// down: open dropdown or move selection down\n\t\t\tcase constants.KEY_DOWN:\n\t\t\t\tif (!self.isOpen && self.hasOptions) {\n\t\t\t\t\tself.open();\n\t\t\t\t} else if (self.activeOption) {\n\t\t\t\t\tlet next = self.getAdjacent(self.activeOption, 1);\n\t\t\t\t\tif (next) self.setActiveOption(next);\n\t\t\t\t}\n\t\t\t\tpreventDefault(e);\n\t\t\t\treturn;\n\n\t\t\t// up: move selection up\n\t\t\tcase constants.KEY_UP:\n\t\t\t\tif (self.activeOption) {\n\t\t\t\t\tlet prev = self.getAdjacent(self.activeOption, -1);\n\t\t\t\t\tif (prev) self.setActiveOption(prev);\n\t\t\t\t}\n\t\t\t\tpreventDefault(e);\n\t\t\t\treturn;\n\n\t\t\t// return: select active option\n\t\t\tcase constants.KEY_RETURN:\n\t\t\t\tif( self.canSelect(self.activeOption) ){\n\t\t\t\t\tself.onOptionSelect(e,self.activeOption!);\n\t\t\t\t\tpreventDefault(e);\n\n\t\t\t\t// if the option_create=null, the dropdown might be closed\n\t\t\t\t}else if (self.settings.create && self.createItem()) {\n\t\t\t\t\tpreventDefault(e);\n\n\t\t\t\t// don't submit form when searching for a value\n\t\t\t\t}else if( document.activeElement == self.control_input && self.isOpen ){\n\t\t\t\t\tpreventDefault(e);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\n\t\t\t// left: modifiy item selection to the left\n\t\t\tcase constants.KEY_LEFT:\n\t\t\t\tself.advanceSelection(-1, e);\n\t\t\t\treturn;\n\n\t\t\t// right: modifiy item selection to the right\n\t\t\tcase constants.KEY_RIGHT:\n\t\t\t\tself.advanceSelection(1, e);\n\t\t\t\treturn;\n\n\t\t\t// tab: select active option and/or create item\n\t\t\tcase constants.KEY_TAB:\n\n\t\t\t\tif( self.settings.selectOnTab ){\n\t\t\t\t\tif( self.canSelect(self.activeOption) ){\n\t\t\t\t\t\tself.onOptionSelect(e,self.activeOption!);\n\n\t\t\t\t\t\t// prevent default [tab] behaviour of jump to the next field\n\t\t\t\t\t\t// if select isFull, then the dropdown won't be open and [tab] will work normally\n\t\t\t\t\t\tpreventDefault(e);\n\t\t\t\t\t}\n\t\t\t\t\tif (self.settings.create && self.createItem()) {\n\t\t\t\t\t\tpreventDefault(e);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\n\t\t\t// delete|backspace: delete items\n\t\t\tcase constants.KEY_BACKSPACE:\n\t\t\tcase constants.KEY_DELETE:\n\t\t\t\tself.deleteSelection(e);\n\t\t\t\treturn;\n\t\t}\n\n\t\t// don't enter text in the control_input when active items are selected\n\t\tif( self.isInputHidden && !isKeyDown(constants.KEY_SHORTCUT,e) ){\n\t\t\tpreventDefault(e);\n\t\t}\n\t}\n\n\t/**\n\t * Triggered on <input> keyup.\n\t *\n\t */\n\tonInput(e:MouseEvent|KeyboardEvent):void {\n\t\t\n\t\tif( this.isLocked ){\n\t\t\treturn;\n\t\t}\n\n\t\tconst value = this.inputValue();\n\t\tif( this.lastValue === value ) return;\n\t\tthis.lastValue = value;\n\t\t\n\t\tif( value == '' ){\n\t\t\tthis._onInput();\n\t\t\treturn;\n\t\t}\n\n\t\tif( this.refreshTimeout ){\n\t\t\twindow.clearTimeout(this.refreshTimeout);\n\t\t}\n\n\t\tthis.refreshTimeout = timeout(()=> {\n\t\t\tthis.refreshTimeout = null;\n\t\t\tthis._onInput();\n\t\t}, this.settings.refreshThrottle);\n\t}\n\n\t_onInput():void {\n\t\tconst value = this.lastValue;\n\n\t\tif( this.settings.shouldLoad.call(this,value) ){\n\t\t\tthis.load(value);\n\t\t}\n\n\t\tthis.refreshOptions();\n\t\tthis.trigger('type', value);\n\t}\n\n\t/**\n\t * Triggered when the user rolls over\n\t * an option in the autocomplete dropdown menu.\n\t *\n\t */\n\tonOptionHover( evt:MouseEvent|KeyboardEvent, option:HTMLElement ):void{\n\t\tif( this.ignoreHover ) return;\n\t\tthis.setActiveOption(option, false);\n\t}\n\n\t/**\n\t * Triggered on <input> focus.\n\t *\n\t */\n\tonFocus(e?:MouseEvent|KeyboardEvent):void {\n\t\tvar self = this;\n\t\tvar wasFocused = self.isFocused;\n\n\t\tif( self.isDisabled || self.isReadOnly ){\n\t\t\tself.blur();\n\t\t\tpreventDefault(e);\n\t\t\treturn;\n\t\t}\n\n\t\tif (self.ignoreFocus) return;\n\t\tself.isFocused = true;\n\t\tif( self.settings.preload === 'focus' ) self.preload();\n\n\t\tif (!wasFocused) self.trigger('focus');\n\n\t\tif (!self.activeItems.length) {\n\t\t\tself.inputState();\n\t\t\tself.refreshOptions(!!self.settings.openOnFocus);\n\t\t}\n\n\t\tself.refreshState();\n\t}\n\n\t/**\n\t * Triggered on <input> blur.\n\t *\n\t */\n\tonBlur(e?:FocusEvent):void {\n\n\t\tif( document.hasFocus() === false ) return;\n\n\t\tvar self = this;\n\t\tif (!self.isFocused) return;\n\t\tself.isFocused = false;\n\t\tself.ignoreFocus = false;\n\n\t\tvar deactivate = () => {\n\t\t\tself.close();\n\t\t\tself.setActiveItem();\n\t\t\tself.setCaret(self.items.length);\n\t\t\tself.trigger('blur');\n\t\t};\n\n\t\tif (self.settings.create && self.settings.createOnBlur) {\n\t\t\tself.createItem(null, deactivate);\n\t\t} else {\n\t\t\tdeactivate();\n\t\t}\n\t}\n\n\n\t/**\n\t * Triggered when the user clicks on an option\n\t * in the autocomplete dropdown menu.\n\t *\n\t */\n\tonOptionSelect( evt:MouseEvent|KeyboardEvent, option:HTMLElement ){\n\t\tvar value, self = this;\n\n\n\t\t// should not be possible to trigger a option under a disabled optgroup\n\t\tif( option.parentElement && option.parentElement.matches('[data-disabled]') ){\n\t\t\treturn;\n\t\t}\n\n\n\t\tif( option.classList.contains('create') ){\n\t\t\tself.createItem(null, () => {\n\t\t\t\tif (self.settings.closeAfterSelect) {\n\t\t\t\t\tself.close();\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tvalue = option.dataset.value;\n\t\t\tif (typeof value !== 'undefined') {\n\t\t\t\tself.lastQuery = null;\n\t\t\t\tself.addItem(value);\n\t\t\t\tif (self.settings.closeAfterSelect) {\n\t\t\t\t\tself.close();\n\t\t\t\t}\n\n\t\t\t\tif( !self.settings.hideSelected && evt.type && /click/.test(evt.type) ){\n\t\t\t\t\tself.setActiveOption(option);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Return true if the given option can be selected\n\t *\n\t */\n\tcanSelect(option:HTMLElement|null):boolean{\n\n\t\tif( this.isOpen && option && this.dropdown_content.contains(option) ) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Triggered when the user clicks on an item\n\t * that has been selected.\n\t *\n\t */\n\tonItemSelect( evt?:MouseEvent, item?:TomItem ):boolean{\n\t\tvar self = this;\n\n\t\tif( !self.isLocked && self.settings.mode === 'multi' ){\n\t\t\tpreventDefault(evt);\n\t\t\tself.setActiveItem(item, evt);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Determines whether or not to invoke\n\t * the user-provided option provider / loader\n\t *\n\t * Note, there is a subtle difference between\n\t * this.canLoad() and this.settings.shouldLoad();\n\t *\n\t *\t- settings.shouldLoad() is a user-input validator.\n\t *\tWhen false is returned, the not_loading template\n\t *\twill be added to the dropdown\n\t *\n\t *\t- canLoad() is lower level validator that checks\n\t * \tthe Tom Select instance. There is no inherent user\n\t *\tfeedback when canLoad returns false\n\t *\n\t */\n\tcanLoad(value:string):boolean{\n\n\t\tif( !this.settings.load ) return false;\n\t\tif( this.loadedSearches.hasOwnProperty(value) ) return false;\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Invokes the user-provided option provider / loader.\n\t *\n\t */\n\tload(value:string):void {\n\t\tconst self = this;\n\n\t\tif( !self.canLoad(value) ) return;\n\n\t\taddClasses(self.wrapper,self.settings.loadingClass);\n\t\tself.loading++;\n\n\t\tconst callback = self.loadCallback.bind(self);\n\t\tself.settings.load.call(self, value, callback);\n\t}\n\n\t/**\n\t * Invoked by the user-provided option provider\n\t *\n\t */\n\tloadCallback( options:TomOption[], optgroups:TomOption[] ):void{\n\t\tconst self = this;\n\t\tself.loading = Math.max(self.loading - 1, 0);\n\t\tself.lastQuery = null;\n\n\t\tself.clearActiveOption(); // when new results load, focus should be on first option\n\t\tself.setupOptions(options,optgroups);\n\n\t\tself.refreshOptions(self.isFocused && !self.isInputHidden);\n\n\t\tif (!self.loading) {\n\t\t\tremoveClasses(self.wrapper,self.settings.loadingClass);\n\t\t}\n\n\t\tself.trigger('load', options, optgroups);\n\t}\n\n\tpreload():void{\n\t\tvar classList = this.wrapper.classList;\n\t\tif( classList.contains('preloaded') ) return;\n\t\tclassList.add('preloaded');\n\t\tthis.load('');\n\t}\n\n\n\t/**\n\t * Sets the input field of the control to the specified value.\n\t *\n\t */\n\tsetTextboxValue(value:string = '') {\n\t\tvar input = this.control_input;\n\t\tvar changed = input.value !== value;\n\t\tif (changed) {\n\t\t\tinput.value = value;\n\t\t\ttriggerEvent(input,'update');\n\t\t\tthis.lastValue = value;\n\t\t}\n\t}\n\n\t/**\n\t * Returns the value of the control. If multiple items\n\t * can be selected (e.g. <select multiple>), this returns\n\t * an array. If only one item can be selected, this\n\t * returns a string.\n\t *\n\t */\n\tgetValue():string|string[] {\n\n\t\tif( this.is_select_tag && this.input.hasAttribute('multiple')) {\n\t\t\treturn this.items;\n\t\t}\n\n\t\treturn this.items.join(this.settings.delimiter);\n\t}\n\n\t/**\n\t * Resets the selected items to the given value.\n\t *\n\t */\n\tsetValue( value:string|string[], silent?:boolean ):void{\n\t\tvar events = silent ? [] : ['change'];\n\n\t\tdebounce_events(this, events,() => {\n\t\t\tthis.clear(silent);\n\t\t\tthis.addItems(value, silent);\n\t\t});\n\t}\n\n\n\t/**\n\t * Resets the number of max items to the given value\n\t *\n\t */\n\tsetMaxItems(value:null|number){\n\t\tif(value === 0) value = null; //reset to unlimited items.\n\t\tthis.settings.maxItems = value;\n\t\tthis.refreshState();\n\t}\n\n\t/**\n\t * Sets the selected item.\n\t *\n\t */\n\tsetActiveItem( item?:TomItem, e?:MouseEvent|KeyboardEvent ){\n\t\tvar self = this;\n\t\tvar eventName;\n\t\tvar i, begin, end, swap;\n\t\tvar last;\n\n\t\tif (self.settings.mode === 'single') return;\n\n\t\t// clear the active selection\n\t\tif( !item ){\n\t\t\tself.clearActiveItems();\n\t\t\tif (self.isFocused) {\n\t\t\t\tself.inputState();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// modify selection\n\t\teventName = e && e.type.toLowerCase();\n\n\t\tif (eventName === 'click' && isKeyDown('shiftKey',e) && self.activeItems.length) {\n\t\t\tlast\t= self.getLastActive();\n\t\t\tbegin\t= Array.prototype.indexOf.call(self.control.children, last);\n\t\t\tend\t\t= Array.prototype.indexOf.call(self.control.children, item);\n\n\t\t\tif (begin > end) {\n\t\t\t\tswap = begin;\n\t\t\t\tbegin = end;\n\t\t\t\tend = swap;\n\t\t\t}\n\t\t\tfor (i = begin; i <= end; i++) {\n\t\t\t\titem = self.control.children[i] as TomItem;\n\t\t\t\tif (self.activeItems.indexOf(item) === -1) {\n\t\t\t\t\tself.setActiveItemClass(item);\n\t\t\t\t}\n\t\t\t}\n\t\t\tpreventDefault(e);\n\t\t} else if ((eventName === 'click' && isKeyDown(constants.KEY_SHORTCUT,e) ) || (eventName === 'keydown' && isKeyDown('shiftKey',e))) {\n\t\t\tif( item.classList.contains('active') ){\n\t\t\t\tself.removeActiveItem( item );\n\t\t\t} else {\n\t\t\t\tself.setActiveItemClass(item);\n\t\t\t}\n\t\t} else {\n\t\t\tself.clearActiveItems();\n\t\t\tself.setActiveItemClass(item);\n\t\t}\n\n\t\t// ensure control has focus\n\t\tself.inputState();\n\t\tif (!self.isFocused) {\n\t\t\tself.focus();\n\t\t}\n\t}\n\n\t/**\n\t * Set the active and last-active classes\n\t *\n\t */\n\tsetActiveItemClass( item:TomItem ){\n\t\tconst self = this;\n\t\tconst last_active = self.control.querySelector('.last-active');\n\t\tif( last_active ) removeClasses(last_active as HTMLElement,'last-active');\n\n\t\taddClasses(item,'active last-active');\n\t\tself.trigger('item_select', item);\n\t\tif( self.activeItems.indexOf(item) == -1 ){\n\t\t\tself.activeItems.push( item );\n\t\t}\n\t}\n\n\t/**\n\t * Remove active item\n\t *\n\t */\n\tremoveActiveItem( item:TomItem ){\n\t\tvar idx = this.activeItems.indexOf(item);\n\t\tthis.activeItems.splice(idx, 1);\n\t\tremoveClasses(item,'active');\n\t}\n\n\t/**\n\t * Clears all the active items\n\t *\n\t */\n\tclearActiveItems(){\n\t\tremoveClasses(this.activeItems,'active');\n\t\tthis.activeItems = [];\n\t}\n\n\t/**\n\t * Sets the selected item in the dropdown menu\n\t * of available options.\n\t *\n\t */\n\tsetActiveOption( option:null|HTMLElement,scroll:boolean=true ):void{\n\n\t\tif( option === this.activeOption ){\n\t\t\treturn;\n\t\t}\n\n\t\tthis.clearActiveOption();\n\t\tif( !option ) return;\n\n\t\tthis.activeOption = option;\n\t\tsetAttr(this.focus_node,{'aria-activedescendant':option.getAttribute('id')});\n\t\tsetAttr(option,{'aria-selected':'true'});\n\t\taddClasses(option,'active');\n\t\tif( scroll ) this.scrollToOption(option);\n\t}\n\n\t/**\n\t * Sets the dropdown_content scrollTop to display the option\n\t *\n\t */\n\tscrollToOption( option:null|HTMLElement, behavior?:string ):void{\n\n\t\tif( !option ) return;\n\n\t\tconst content\t\t= this.dropdown_content;\n\t\tconst height_menu\t= content.clientHeight;\n\t\tconst scrollTop\t\t= content.scrollTop || 0;\n\t\tconst height_item\t= option.offsetHeight;\n\t\tconst y\t\t\t\t= option.getBoundingClientRect().top - content.getBoundingClientRect().top + scrollTop;\n\n\t\tif (y + height_item > height_menu + scrollTop) {\n\t\t\tthis.scroll(y - height_menu + height_item, behavior);\n\n\t\t} else if (y < scrollTop) {\n\t\t\tthis.scroll(y, behavior);\n\t\t}\n\t}\n\n\t/**\n\t * Scroll the dropdown to the given position\n\t *\n\t */\n\tscroll( scrollTop:number, behavior?:string ):void{\n\t\tconst content = this.dropdown_content;\n\t\tif( behavior ){\n\t\t\tcontent.style.scrollBehavior = behavior;\n\t\t}\n\t\tcontent.scrollTop = scrollTop;\n\t\tcontent.style.scrollBehavior = '';\n\t}\n\n\t/**\n\t * Clears the active option\n\t *\n\t */\n\tclearActiveOption(){\n\t\tif( this.activeOption ){\n\t\t\tremoveClasses(this.activeOption,'active');\n\t\t\tsetAttr(this.activeOption,{'aria-selected':null});\n\t\t}\n\t\tthis.activeOption = null;\n\t\tsetAttr(this.focus_node,{'aria-activedescendant':null});\n\t}\n\n\n\t/**\n\t * Selects all items (CTRL + A).\n\t */\n\tselectAll() {\n\t\tconst self = this;\n\n\t\tif (self.settings.mode === 'single') return;\n\n\t\tconst activeItems = self.controlChildren();\n\n\t\tif( !activeItems.length ) return;\n\n\t\tself.inputState();\n\t\tself.close();\n\n\t\tself.activeItems = activeItems;\n\t\titerate( activeItems, (item:TomItem) => {\n\t\t\tself.setActiveItemClass(item);\n\t\t});\n\n\t}\n\n\t/**\n\t * Determines if the control_input should be in a hidden or visible state\n\t *\n\t */\n\tinputState(){\n\t\tvar self = this;\n\n\t\tif( !self.control.contains(self.control_input) ) return;\n\n\t\tsetAttr(self.control_input,{placeholder:self.settings.placeholder});\n\n\t\tif( self.activeItems.length > 0 || (!self.isFocused && self.settings.hidePlaceholder && self.items.length > 0) ){\n\t\t\tself.setTextboxValue();\n\t\t\tself.isInputHidden = true;\n\n\t\t}else{\n\n\t\t\tif( self.settings.hidePlaceholder && self.items.length > 0 ){\n\t\t\t\tsetAttr(self.control_input,{placeholder:''});\n\t\t\t}\n\t\t\tself.isInputHidden = false;\n\t\t}\n\n\t\tself.wrapper.classList.toggle('input-hidden', self.isInputHidden );\n\t}\n\n\t/**\n\t * Get the input value\n\t */\n\tinputValue(){\n\t\treturn this.control_input.value.trim();\n\t}\n\n\t/**\n\t * Gives the control focus.\n\t */\n\tfocus() {\n\t\tvar self = this;\n\t\tif( self.isDisabled || self.isReadOnly) return;\n\n\t\tself.ignoreFocus = true;\n\n\t\tif( self.control_input.offsetWidth ){\n\t\t\tself.control_input.focus();\n\t\t}else{\n\t\t\tself.focus_node.focus();\n\t\t}\n\n\t\tsetTimeout(() => {\n\t\t\tself.ignoreFocus = false;\n\t\t\tself.onFocus();\n\t\t}, 0);\n\t}\n\n\t/**\n\t * Forces the control out of focus.\n\t *\n\t */\n\tblur():void {\n\t\tthis.focus_node.blur();\n\t\tthis.onBlur();\n\t}\n\n\t/**\n\t * Returns a function that scores an object\n\t * to show how good of a match it is to the\n\t * provided query.\n\t *\n\t * @return {function}\n\t */\n\tgetScoreFunction(query:string) {\n\t\treturn this.sifter.getScoreFunction(query, this.getSearchOptions());\n\t}\n\n\t/**\n\t * Returns search options for sifter (the system\n\t * for scoring and sorting results).\n\t *\n\t * @see https://github.com/orchidjs/sifter.js\n\t * @return {object}\n\t */\n\tgetSearchOptions() {\n\t\tvar settings = this.settings;\n\t\tvar sort = settings.sortField;\n\t\tif (typeof settings.sortField === 'string') {\n\t\t\tsort = [{field: settings.sortField}];\n\t\t}\n\n\t\treturn {\n\t\t\tfields : settings.searchField,\n\t\t\tconjunction : settings.searchConjunction,\n\t\t\tsort : sort,\n\t\t\tnesting : settings.nesting\n\t\t};\n\t}\n\n\t/**\n\t * Searches through available options and returns\n\t * a sorted array of matches.\n\t *\n\t */\n\tsearch(query:string) : ReturnType<Sifter['search']>{\n\t\tvar result, calculateScore;\n\t\tvar self = this;\n\t\tvar options = this.getSearchOptions();\n\n\t\t// validate user-provided result scoring function\n\t\tif ( self.settings.score ){\n\t\t\tcalculateScore = self.settings.score.call(self,query);\n\t\t\tif (typeof calculateScore !== 'function') {\n\t\t\t\tthrow new Error('Tom Select \"score\" setting must be a function that returns a function');\n\t\t\t}\n\t\t}\n\n\t\t// perform search\n\t\tif (query !== self.lastQuery) {\n\t\t\tself.lastQuery\t\t\t= query;\n\t\t\tresult\t\t\t\t\t= self.sifter.search(query, Object.assign(options, {score: calculateScore}));\n\t\t\tself.currentResults\t\t= result;\n\t\t} else {\n\t\t\tresult\t\t\t\t\t= Object.assign( {}, self.currentResults);\n\t\t}\n\n\t\t// filter out selected items\n\t\tif( self.settings.hideSelected ){\n\t\t\tresult.items = result.items.filter((item) => {\n\t\t\t\tlet hashed = hash_key(item.id);\n\t\t\t\treturn !(hashed && self.items.indexOf(hashed) !== -1 );\n\t\t\t});\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Refreshes the list of available options shown\n\t * in the autocomplete dropdown menu.\n\t *\n\t */\n\trefreshOptions( triggerDropdown:boolean = true ){\n\t\tvar i, j, k, n, optgroup, optgroups, html:DocumentFragment, has_create_option, active_group;\n\t\tvar create;\n\n\t\ttype Group = {fragment:DocumentFragment,order:number,optgroup:string}\n\t\tconst groups: {[key:string]:number} = {};\n\t\tconst groups_order:Group[]\t= [];\n\n\t\tvar self\t\t\t\t\t= this;\n\t\tvar query\t\t\t\t\t= self.inputValue();\n\t\tconst same_query\t\t\t= query === self.lastQuery || (query == '' && self.lastQuery == null);\n\t\tvar results\t\t\t\t\t= self.search(query);\n\t\tvar active_option:HTMLElement|null = null;\n\t\tvar show_dropdown\t\t\t= self.settings.shouldOpen || false;\n\t\tvar dropdown_content\t\t= self.dropdown_content;\n\n\n\t\tif( same_query ){\n\t\t\tactive_option\t\t\t= self.activeOption;\n\n\t\t\tif( active_option ){\n\t\t\t\tactive_group = active_option.closest('[data-group]') as HTMLElement;\n\t\t\t}\n\t\t}\n\n\t\t// build markup\n\t\tn = results.items.length;\n\t\tif (typeof self.settings.maxOptions === 'number') {\n\t\t\tn = Math.min(n, self.settings.maxOptions);\n\t\t}\n\n\t\tif( n > 0 ){\n\t\t\tshow_dropdown = true;\n\t\t}\n\n\t\t// get fragment for group and the position of the group in group_order\n\t\tconst getGroupFragment = (optgroup:string,order:number):[number,DocumentFragment] => {\n\n\t\t\tlet group_order_i = groups[optgroup];\n\n\t\t\tif( group_order_i !== undefined ){\n\t\t\t\tlet order_group = groups_order[group_order_i];\n\t\t\t\tif( order_group !== undefined ){\n\t\t\t\t\treturn [group_order_i,order_group.fragment];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet group_fragment = document.createDocumentFragment();\n\t\t\tgroup_order_i = groups_order.length;\n\t\t\tgroups_order.push({fragment:group_fragment,order,optgroup});\n\n\t\t\treturn [group_order_i,group_fragment]\n\t\t}\n\n\t\t// render and group available options individually\n\t\tfor (i = 0; i < n; i++) {\n\n\t\t\t// get option dom element\n\t\t\tlet item\t\t\t= results.items[i];\n\t\t\tif( !item ) continue;\n\n\t\t\tlet opt_value\t\t= item.id;\n\t\t\tlet option\t\t\t= self.options[opt_value];\n\n\t\t\tif( option === undefined ) continue;\n\n\t\t\tlet opt_hash\t\t= get_hash(opt_value);\n\t\t\tlet option_el\t\t= self.getOption(opt_hash,true) as HTMLElement;\n\n\t\t\t// toggle 'selected' class\n\t\t\tif( !self.settings.hideSelected ){\n\t\t\t\toption_el.classList.toggle('selected', self.items.includes(opt_hash) );\n\t\t\t}\n\n\t\t\toptgroup = option[self.settings.optgroupField] || '';\n\t\t\toptgroups = Array.isArray(optgroup) ? optgroup : [optgroup];\n\t\t\t\n\n\t\t\tfor (j = 0, k = optgroups && optgroups.length; j < k; j++) {\n\t\t\t\toptgroup = optgroups[j];\n\n\t\t\t\tlet order = option.$order;\n\t\t\t\tlet self_optgroup = self.optgroups[optgroup];\n\t\t\t\tif( self_optgroup === undefined ){\t\t\t\t\t\n\t\t\t\t\toptgroup = '';\n\t\t\t\t}else{\n\t\t\t\t\torder = self_optgroup.$order;\n\t\t\t\t}\n\n\t\t\t\tconst [group_order_i,group_fragment] = getGroupFragment(optgroup,order);\n\n\n\t\t\t\t// nodes can only have one parent, so if the option is in mutple groups, we need a clone\n\t\t\t\tif( j > 0 ){\n\t\t\t\t\toption_el = option_el.cloneNode(true) as HTMLElement;\n\t\t\t\t\tsetAttr(option_el,{id: option.$id+'-clone-'+j,'aria-selected':null});\n\t\t\t\t\toption_el.classList.add('ts-cloned');\n\t\t\t\t\tremoveClasses(option_el,'active');\n\n\n\t\t\t\t\t// make sure we keep the activeOption in the same group\n\t\t\t\t\tif( self.activeOption && self.activeOption.dataset.value == opt_value ){\n\t\t\t\t\t\tif( active_group && active_group.dataset.group === optgroup.toString() ){\n\t\t\t\t\t\t\tactive_option = option_el;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\t\n\t\t\t\t\n\t\t\t\tgroup_fragment.appendChild(option_el);\n\t\t\t\tif( optgroup != '' ){\n\t\t\t\t\tgroups[optgroup] = group_order_i;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// sort optgroups\n\t\tif( self.settings.lockOptgroupOrder ){\n\t\t\tgroups_order.sort((a, b) => {\n\t\t\t\treturn a.order - b.order;\n\t\t\t});\n\t\t}\n\n\t\t// render optgroup headers & join groups\n\t\thtml = document.createDocumentFragment();\n\t\titerate( groups_order, (group_order:Group) => {\n\n\t\t\tlet group_fragment = group_order.fragment;\n\t\t\tlet optgroup = group_order.optgroup\n\n\t\t\tif( !group_fragment || !group_fragment.children.length ) return;\n\n\t\t\tlet group_heading = self.optgroups[optgroup];\n\n\t\t\tif( group_heading !== undefined ){\n\n\t\t\t\tlet group_options = document.createDocumentFragment();\n\t\t\t\tlet header = self.render('optgroup_header', group_heading);\n\t\t\t\tappend( group_options, header );\n\t\t\t\tappend( group_options, group_fragment );\n\n\t\t\t\tlet group_html = self.render('optgroup', {group:group_heading,options:group_options} );\n\n\t\t\t\tappend( html, group_html );\n\n\t\t\t} else {\n\t\t\t\tappend( html, group_fragment );\n\t\t\t}\n\t\t});\n\n\t\tdropdown_content.innerHTML = '';\n\t\tappend( dropdown_content, html );\n\n\t\t// highlight matching terms inline\n\t\tif (self.settings.highlight) {\n\t\t\tremoveHighlight( dropdown_content );\n\t\t\tif (results.query.length && results.tokens.length) {\n\t\t\t\titerate( results.tokens, (tok) => {\n\t\t\t\t\thighlight( dropdown_content, tok.regex);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// helper method for adding templates to dropdown\n\t\tvar add_template = (template:TomTemplateNames) => {\n\t\t\tlet content = self.render(template,{input:query});\n\t\t\tif( content ){\n\t\t\t\tshow_dropdown = true;\n\t\t\t\tdropdown_content.insertBefore(content, dropdown_content.firstChild);\n\t\t\t}\n\t\t\treturn content;\n\t\t};\n\n\n\t\t// add loading message\n\t\tif( self.loading ){\n\t\t\tadd_template('loading');\n\n\t\t// invalid query\n\t\t}else if( !self.settings.shouldLoad.call(self,query) ){\n\t\t\tadd_template('not_loading');\n\n\t\t// add no_results message\n\t\t}else if( results.items.length === 0 ){\n\t\t\tadd_template('no_results');\n\n\t\t}\n\n\n\n\t\t// add create option\n\t\thas_create_option = self.canCreate(query);\n\t\tif (has_create_option) {\n\t\t\tcreate = add_template('option_create');\n\t\t}\n\n\n\t\t// activate\n\t\tself.hasOptions = results.items.length > 0 || has_create_option;\n\t\tif( show_dropdown ){\n\n\t\t\tif (results.items.length > 0) {\n\n\t\t\t\tif( !active_option && self.settings.mode === 'single' && self.items[0] != undefined ){\n\t\t\t\t\tactive_option = self.getOption(self.items[0]);\n\t\t\t\t}\n\n\t\t\t\tif( !dropdown_content.contains(active_option) ){\n\n\t\t\t\t\tlet active_index = 0;\n\t\t\t\t\tif( create && !self.settings.addPrecedence ){\n\t\t\t\t\t\tactive_index = 1;\n\t\t\t\t\t}\n\t\t\t\t\tactive_option = self.selectable()[active_index] as HTMLElement;\n\t\t\t\t}\n\n\t\t\t}else if( create ){\n\t\t\t\tactive_option = create;\n\t\t\t}\n\n\t\t\tif( triggerDropdown && !self.isOpen ){\n\t\t\t\tself.open();\n\t\t\t\tself.scrollToOption(active_option,'auto');\n\t\t\t}\n\t\t\tself.setActiveOption(active_option);\n\n\t\t}else{\n\t\t\tself.clearActiveOption();\n\t\t\tif( triggerDropdown && self.isOpen ){\n\t\t\t\tself.close(false); // if create_option=null, we want the dropdown to close but not reset the textbox value\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Return list of selectable options\n\t *\n\t */\n\tselectable():NodeList{\n\t\treturn this.dropdown_content.querySelectorAll('[data-selectable]');\n\t}\n\n\n\n\t/**\n\t * Adds an available option. If it already exists,\n\t * nothing will happen. Note: this does not refresh\n\t * the options list dropdown (use `refreshOptions`\n\t * for that).\n\t *\n\t * Usage:\n\t *\n\t * this.addOption(data)\n\t *\n\t */\n\taddOption( data:TomOption, user_created = false ):false|string {\n\t\tconst self = this;\n\n\t\t// @deprecated 1.7.7\n\t\t// use addOptions( array, user_created ) for adding multiple options\n\t\tif( Array.isArray(data) ){\n\t\t\tself.addOptions( data, user_created);\n\t\t\treturn false;\n\t\t}\n\n\t\tconst key = hash_key(data[self.settings.valueField]);\n\t\tif( key === null || self.options.hasOwnProperty(key) ){\n\t\t\treturn false;\n\t\t}\n\n\t\tdata.$order\t\t\t= data.$order || ++self.order;\n\t\tdata.$id\t\t\t= self.inputId + '-opt-' + data.$order;\n\t\tself.options[key]\t= data;\n\t\tself.lastQuery\t\t= null;\n\n\t\tif( user_created ){\n\t\t\tself.userOptions[key] = user_created;\n\t\t\tself.trigger('option_add', key, data);\n\t\t}\n\n\t\treturn key;\n\t}\n\n\t/**\n\t * Add multiple options\n\t *\n\t */\n\taddOptions( data:TomOption[], user_created = false ):void{\n\t\titerate( data, (dat:TomOption) => {\n\t\t\tthis.addOption(dat, user_created);\n\t\t});\n\t}\n\n\t/**\n\t * @deprecated 1.7.7\n\t */\n\tregisterOption( data:TomOption ):false|string {\n\t\treturn this.addOption(data);\n\t}\n\n\t/**\n\t * Registers an option group to the pool of option groups.\n\t *\n\t * @return {boolean|string}\n\t */\n\tregisterOptionGroup(data:TomOption) {\n\t\tvar key = hash_key(data[this.settings.optgroupValueField]);\n\n\t\tif ( key === null ) return false;\n\n\t\tdata.$order = data.$order || ++this.order;\n\t\tthis.optgroups[key] = data;\n\t\treturn key;\n\t}\n\n\t/**\n\t * Registers a new optgroup for options\n\t * to be bucketed into.\n\t *\n\t */\n\taddOptionGroup(id:string, data:TomOption) {\n\t\tvar hashed_id;\n\t\tdata[this.settings.optgroupValueField] = id;\n\n\t\tif( hashed_id = this.registerOptionGroup(data) ){\n\t\t\tthis.trigger('optgroup_add', hashed_id, data);\n\t\t}\n\t}\n\n\t/**\n\t * Removes an existing option group.\n\t *\n\t */\n\tremoveOptionGroup(id:string) {\n\t\tif (this.optgroups.hasOwnProperty(id)) {\n\t\t\tdelete this.optgroups[id];\n\t\t\tthis.clearCache();\n\t\t\tthis.trigger('optgroup_remove', id);\n\t\t}\n\t}\n\n\t/**\n\t * Clears all existing option groups.\n\t */\n\tclearOptionGroups() {\n\t\tthis.optgroups = {};\n\t\tthis.clearCache();\n\t\tthis.trigger('optgroup_clear');\n\t}\n\n\t/**\n\t * Updates an option available for selection. If\n\t * it is visible in the selected items or options\n\t * dropdown, it will be re-rendered automatically.\n\t *\n\t */\n\tupdateOption(value:string, data:TomOption) {\n\t\tconst self = this;\n\t\tvar item_new;\n\t\tvar index_item;\n\n\t\tconst value_old\t\t= hash_key(value);\n\t\tconst value_new\t\t= hash_key(data[self.settings.valueField]);\n\n\t\t// sanity checks\n\t\tif( value_old === null ) return;\n\n\t\tconst data_old\t\t= self.options[value_old];\n\n\t\tif( data_old == undefined ) return;\n\t\tif( typeof value_new !== 'string' ) throw new Error('Value must be set in option data');\n\n\n\t\tconst option\t\t= self.getOption(value_old);\n\t\tconst item\t\t\t= self.getItem(value_old);\n\n\n\t\tdata.$order = data.$order || data_old.$order;\n\t\tdelete self.options[value_old];\n\n\t\t// invalidate render cache\n\t\t// don't remove existing node yet, we'll remove it after replacing it\n\t\tself.uncacheValue(value_new);\n\n\t\tself.options[value_new] = data;\n\n\t\t// update the option if it's in the dropdown\n\t\tif( option ){\n\t\t\tif( self.dropdown_content.contains(option) ){\n\n\t\t\t\tconst option_new\t= self._render('option', data);\n\t\t\t\treplaceNode(option, option_new);\n\n\t\t\t\tif( self.activeOption === option ){\n\t\t\t\t\tself.setActiveOption(option_new);\n\t\t\t\t}\n\t\t\t}\n\t\t\toption.remove();\n\t\t}\n\n\t\t// update the item if we have one\n\t\tif( item ){\n\t\t\tindex_item = self.items.indexOf(value_old);\n\t\t\tif (index_item !== -1) {\n\t\t\t\tself.items.splice(index_item, 1, value_new);\n\t\t\t}\n\n\t\t\titem_new\t= self._render('item', data);\n\n\t\t\tif( item.classList.contains('active') ) addClasses(item_new,'active');\n\n\t\t\treplaceNode( item, item_new);\n\t\t}\n\n\t\t// invalidate last query because we might have updated the sortField\n\t\tself.lastQuery = null;\n\t}\n\n\t/**\n\t * Removes a single option.\n\t *\n\t */\n\tremoveOption(value:string, silent?:boolean):void {\n\t\tconst self = this;\n\t\tvalue = get_hash(value);\n\n\t\tself.uncacheValue(value);\n\n\t\tdelete self.userOptions[value];\n\t\tdelete self.options[value];\n\t\tself.lastQuery = null;\n\t\tself.trigger('option_remove', value);\n\t\tself.removeItem(value, silent);\n\t}\n\n\t/**\n\t * Clears all options.\n\t */\n\tclearOptions(filter?:TomClearFilter ) {\n\n\t\tconst boundFilter = (filter || this.clearFilter).bind(this);\n\n\t\tthis.loadedSearches\t\t= {};\n\t\tthis.userOptions\t\t= {};\n\t\tthis.clearCache();\n\n\t\tconst selected:TomOptions\t= {};\n\t\titerate(this.options,(option:TomOption,key:string)=>{\n\t\t\tif( boundFilter(option,key as string) ){\n\t\t\t\tselected[key] = option;\n\t\t\t}\n\t\t});\n\n\t\tthis.options = this.sifter.items = selected;\n\t\tthis.lastQuery = null;\n\t\tthis.trigger('option_clear');\n\t}\n\n\t/**\n\t * Used by clearOptions() to decide whether or not an option should be removed\n\t * Return true to keep an option, false to remove\n\t *\n\t */\n\tclearFilter(option:TomOption,value:string){\n\t\tif( this.items.indexOf(value) >= 0 ){\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Returns the dom element of the option\n\t * matching the given value.\n\t *\n\t */\n\tgetOption(value:undefined|null|boolean|string|number, create:boolean=false):null|HTMLElement {\n\n\t\tconst hashed = hash_key(value);\n\t\tif( hashed === null ) return null;\n\n\t\tconst option = this.options[hashed];\n\t\tif( option != undefined ){\n\n\t\t\tif( option.$div ){\n\t\t\t\treturn option.$div;\n\t\t\t}\n\n\t\t\tif( create ){\n\t\t\t\treturn this._render('option', option);\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t/**\n\t * Returns the dom element of the next or previous dom element of the same type\n\t * Note: adjacent options may not be adjacent DOM elements (optgroups)\n\t *\n\t */\n\tgetAdjacent( option:null|HTMLElement, direction:number, type:string = 'option' ) : HTMLElement|null{\n\t\tvar self = this, all;\n\n\t\tif( !option ){\n\t\t\treturn null;\n\t\t}\n\n\t\tif( type == 'item' ){\n\t\t\tall\t\t\t= self.controlChildren();\n\t\t}else{\n\t\t\tall\t\t\t= self.dropdown_content.querySelectorAll('[data-selectable]');\n\t\t}\n\n\t\tfor( let i = 0; i < all.length; i++ ){\n\t\t\tif( all[i] != option ){\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif( direction > 0 ){\n\t\t\t\treturn all[i+1] as HTMLElement;\n\t\t\t}\n\n\t\t\treturn all[i-1] as HTMLElement;\n\t\t}\n\t\treturn null;\n\t}\n\n\n\t/**\n\t * Returns the dom element of the item\n\t * matching the given value.\n\t *\n\t */\n\tgetItem(item:string|TomItem|null):null|TomItem {\n\n\t\tif( typeof item == 'object' ){\n\t\t\treturn item;\n\t\t}\n\n\t\tvar value = hash_key(item);\n\t\treturn value !== null\n\t\t\t? this.control.querySelector(`[data-value=\"${addSlashes(value)}\"]`)\n\t\t\t: null;\n\t}\n\n\t/**\n\t * \"Selects\" multiple items at once. Adds them to the list\n\t * at the current caret position.\n\t *\n\t */\n\taddItems( values:string|string[], silent?:boolean ):void{\n\t\tvar self = this;\n\n\t\tvar items = Array.isArray(values) ? values : [values];\n\t\titems = items.filter(x => self.items.indexOf(x) === -1);\n\t\tconst last_item = items[items.length - 1];\n\t\titems.forEach(item => {\n\t\t\tself.isPending = (item !== last_item);\n\t\t\tself.addItem(item, silent);\n\t\t});\n\t}\n\n\t/**\n\t * \"Selects\" an item. Adds it to the list\n\t * at the current caret position.\n\t *\n\t */\n\taddItem( value:string, silent?:boolean ):void{\n\t\tvar events = silent ? [] : ['change','dropdown_close'];\n\n\t\tdebounce_events(this, events, () => {\n\t\t\tvar item, wasFull;\n\t\t\tconst self = this;\n\t\t \tconst inputMode = self.settings.mode;\n\t\t\tconst hashed = hash_key(value);\n\n\t\t\tif( hashed && self.items.indexOf(hashed) !== -1 ){\n\n\t\t\t\tif( inputMode === 'single' ){\n\t\t\t\t\tself.close();\n\t\t\t\t}\n\n\t\t\t\tif( inputMode === 'single' || !self.settings.duplicates ){\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (hashed === null || !self.options.hasOwnProperty(hashed)) return;\n\t\t\tif (inputMode === 'single') self.clear(silent);\n\t\t\tif (inputMode === 'multi' && self.isFull()) return;\n\n\t\t\titem = self._render('item', self.options[hashed]);\n\n\t\t\tif( self.control.contains(item) ){ // duplicates\n\t\t\t\titem = item.cloneNode(true) as HTMLElement;\n\t\t\t}\n\n\t\t\twasFull = self.isFull();\n\t\t\tself.items.splice(self.caretPos, 0, hashed);\n\t\t\tself.insertAtCaret(item);\n\n\t\t\tif (self.isSetup) {\n\n\t\t\t\t// update menu / remove the option (if this is not one item being added as part of series)\n\t\t\t\tif( !self.isPending && self.settings.hideSelected ){\n\t\t\t\t\tlet option = self.getOption(hashed);\n\t\t\t\t\tlet next = self.getAdjacent(option, 1);\n\t\t\t\t\tif( next ){\n\t\t\t\t\t\tself.setActiveOption(next);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// refreshOptions after setActiveOption(),\n\t\t\t\t// otherwise setActiveOption() will be called by refreshOptions() with the wrong value\n\t\t\t\tif( !self.isPending && !self.settings.closeAfterSelect ){\n\t\t\t\t\tself.refreshOptions(self.isFocused && inputMode !== 'single');\n\t\t\t\t}\n\n\t\t\t\t// hide the menu if the maximum number of items have been selected or no options are left\n\t\t\t\tif( self.settings.closeAfterSelect != false && self.isFull() ){\n\t\t\t\t\tself.close();\n\t\t\t\t} else if (!self.isPending) {\n\t\t\t\t\tself.positionDropdown();\n\t\t\t\t}\n\n\t\t\t\tself.trigger('item_add', hashed, item);\n\n\t\t\t\tif (!self.isPending) {\n\t\t\t\t\tself.updateOriginalInput({silent: silent});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!self.isPending || (!wasFull && self.isFull())) {\n\t\t\t\tself.inputState();\n\t\t\t\tself.refreshState();\n\t\t\t}\n\n\t\t});\n\t}\n\n\t/**\n\t * Removes the selected item matching\n\t * the provided value.\n\t *\n\t */\n\tremoveItem( item:string|TomItem|null=null, silent?:boolean ){\n\t\tconst self\t\t= this;\n\t\titem\t\t\t= self.getItem(item);\n\n\t\tif( !item ) return;\n\n\t\tvar i,idx;\n\t\tconst value\t= item.dataset.value;\n\t\ti = nodeIndex(item);\n\n\t\titem.remove();\n\t\tif( item.classList.contains('active') ){\n\t\t\tidx = self.activeItems.indexOf(item);\n\t\t\tself.activeItems.splice(idx, 1);\n\t\t\tremoveClasses(item,'active');\n\t\t}\n\n\t\tself.items.splice(i, 1);\n\t\tself.lastQuery = null;\n\t\tif (!self.settings.persist && self.userOptions.hasOwnProperty(value)) {\n\t\t\tself.removeOption(value, silent);\n\t\t}\n\n\t\tif (i < self.caretPos) {\n\t\t\tself.setCaret(self.caretPos - 1);\n\t\t}\n\n\t\tself.updateOriginalInput({silent: silent});\n\t\tself.refreshState();\n\t\tself.positionDropdown();\n\t\tself.trigger('item_remove', value, item);\n\n\t}\n\n\t/**\n\t * Invokes the `create` method provided in the\n\t * TomSelect options that should provide the data\n\t * for the new item, given the user input.\n\t *\n\t * Once this completes, it will be added\n\t * to the item list.\n\t *\n\t */\n\tcreateItem( input:null|string=null, callback:TomCreateCallback = ()=>{} ):boolean{\n\n\t\t// triggerDropdown parameter @deprecated 2.1.1\n\t\tif( arguments.length === 3 ){\n\t\t\tcallback = arguments[2];\n\t\t}\n\t\tif( typeof callback != 'function' ){\n\t\t\tcallback = () => {};\n\t\t}\n\n\t\tvar self = this;\n\t\tvar caret = self.caretPos;\n\t\tvar output;\n\t\tinput = input || self.inputValue();\n\n\t\tif (!self.canCreate(input)) {\n\t\t\tcallback();\n\t\t\treturn false;\n\t\t}\n\n\t\tself.lock();\n\n\t\tvar created = false;\n\t\tvar create = (data?:boolean|TomOption) => {\n\t\t\tself.unlock();\n\n\t\t\tif (!data || typeof data !== 'object') return callback();\n\t\t\tvar value = hash_key(data[self.settings.valueField]);\n\t\t\tif( typeof value !== 'string' ){\n\t\t\t\treturn callback();\n\t\t\t}\n\n\t\t\tself.setTextboxValue();\n\t\t\tself.addOption(data,true);\n\t\t\tself.setCaret(caret);\n\t\t\tself.addItem(value);\n\t\t\tcallback(data);\n\t\t\tcreated = true;\n\t\t};\n\n\t\tif( typeof self.settings.create === 'function' ){\n\t\t\toutput = self.settings.create.call(this, input, create);\n\t\t}else{\n\t\t\toutput = {\n\t\t\t\t[self.settings.labelField]: input,\n\t\t\t\t[self.settings.valueField]: input,\n\t\t\t};\n\t\t}\n\n\t\tif( !created ){\n\t\t\tcreate(output);\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Re-renders the selected item lists.\n\t */\n\trefreshItems() {\n\t\tvar self = this;\n\t\tself.lastQuery = null;\n\n\t\tif (self.isSetup) {\n\t\t\tself.addItems(self.items);\n\t\t}\n\n\t\tself.updateOriginalInput();\n\t\tself.refreshState();\n\t}\n\n\t/**\n\t * Updates all state-dependent attributes\n\t * and CSS classes.\n\t */\n\trefreshState() {\n\t\tconst self = this;\n\n\t\tself.refreshValidityState();\n\n\t\tconst isFull\t= self.isFull();\n\t\tconst isLocked\t= self.isLocked;\n\n\t\tself.wrapper.classList.toggle('rtl',self.rtl);\n\n\n\t\tconst wrap_classList = self.wrapper.classList;\n\n\t\twrap_classList.toggle('focus', self.isFocused)\n\t\twrap_classList.toggle('disabled', self.isDisabled)\n\t\twrap_classList.toggle('readonly', self.isReadOnly)\n\t\twrap_classList.toggle('required', self.isRequired)\n\t\twrap_classList.toggle('invalid', !self.isValid)\n\t\twrap_classList.toggle('locked', isLocked)\n\t\twrap_classList.toggle('full', isFull)\n\t\twrap_classList.toggle('input-active', self.isFocused && !self.isInputHidden)\n\t\twrap_classList.toggle('dropdown-active', self.isOpen)\n\t\twrap_classList.toggle('has-options', isEmptyObject(self.options) )\n\t\twrap_classList.toggle('has-items', self.items.length > 0);\n\n\t}\n\n\n\t/**\n\t * Update the `required` attribute of both input and control input.\n\t *\n\t * The `required` property needs to be activated on the control input\n\t * for the error to be displayed at the right place. `required` also\n\t * needs to be temporarily deactivated on the input since the input is\n\t * hidden and can't show errors.\n\t */\n\trefreshValidityState() {\n\t\tvar self = this;\n\n\t\tif( !self.input.validity ){\n\t\t\treturn;\n\t\t}\n\n\t\tself.isValid = self.input.validity.valid;\n\t\tself.isInvalid = !self.isValid;\n\t}\n\n\t/**\n\t * Determines whether or not more items can be added\n\t * to the control without exceeding the user-defined maximum.\n\t *\n\t * @returns {boolean}\n\t */\n\tisFull() {\n\t\treturn this.settings.maxItems !== null && this.items.length >= this.settings.maxItems;\n\t}\n\n\t/**\n\t * Refreshes the original <select> or <input>\n\t * element to reflect the current state.\n\t *\n\t */\n\tupdateOriginalInput( opts:TomArgObject = {} ){\n\t\tconst self = this;\n\t\tvar option, label;\n\n\t\tconst empty_option = self.input.querySelector('option[value=\"\"]') as HTMLOptionElement;\n\n\t\tif( self.is_select_tag ){\n\n\t\t\tconst selected:HTMLOptionElement[]\t\t= [];\n\t\t\tconst has_selected:number\t\t\t\t= self.input.querySelectorAll('option:checked').length;\n\n\t\t\tfunction AddSelected(option_el:HTMLOptionElement|null, value:string, label:string):HTMLOptionElement{\n\n\t\t\t\tif( !option_el ){\n\t\t\t\t\toption_el = getDom('<option value=\"' + escape_html(value) + '\">' + escape_html(label) + '</option>') as HTMLOptionElement;\n\t\t\t\t}\n\n\t\t\t\t// don't move empty option from top of list\n\t\t\t\t// fixes bug in firefox https://bugzilla.mozilla.org/show_bug.cgi?id=1725293\n\t\t\t\tif( option_el != empty_option ){\n\t\t\t\t\tself.input.append(option_el);\n\t\t\t\t}\n\n\t\t\t\tselected.push(option_el);\n\n\t\t\t\t// marking empty option as selected can break validation\n\t\t\t\t// fixes https://github.com/orchidjs/tom-select/issues/303\n\t\t\t\tif( option_el != empty_option || has_selected > 0 ){\n\t\t\t\t\toption_el.selected = true;\n\t\t\t\t}\n\n\t\t\t\treturn option_el;\n\t\t\t}\n\n\t\t\t// unselect all selected options\n\t\t\tself.input.querySelectorAll('option:checked').forEach((option_el:Element) => {\n\t\t\t\t(<HTMLOptionElement>option_el).selected = false;\n\t\t\t});\n\n\n\t\t\t// nothing selected?\n\t\t\tif( self.items.length == 0 && self.settings.mode == 'single' ){\n\n\t\t\t\tAddSelected(empty_option, \"\", \"\");\n\n\t\t\t// order selected <option> tags for values in self.items\n\t\t\t}else{\n\n\t\t\t\tself.items.forEach((value)=>{\n\t\t\t\t\toption\t\t\t= self.options[value]!;\n\t\t\t\t\tlabel\t\t\t= option[self.settings.labelField] || '';\n\n\t\t\t\t\tif( selected.includes(option.$option) ){\n\t\t\t\t\t\tconst reuse_opt = self.input.querySelector(`option[value=\"${addSlashes(value)}\"]:not(:checked)`) as HTMLOptionElement;\n\t\t\t\t\t\tAddSelected(reuse_opt, value, label);\n\t\t\t\t\t}else{\n\t\t\t\t\t\toption.$option\t= AddSelected(option.$option, value, label);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t}\n\n\t\t} else {\n\t\t\tself.input.value = self.getValue() as string;\n\t\t}\n\n\t\tif (self.isSetup) {\n\t\t\tif (!opts.silent) {\n\t\t\t\tself.trigger('change', self.getValue() );\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Shows the autocomplete dropdown containing\n\t * the available options.\n\t */\n\topen() {\n\t\tvar self = this;\n\n\t\tif (self.isLocked || self.isOpen || (self.settings.mode === 'multi' && self.isFull())) return;\n\t\tself.isOpen = true;\n\t\tsetAttr(self.focus_node,{'aria-expanded': 'true'});\n\t\tself.refreshState();\n\t\tapplyCSS(self.dropdown,{visibility: 'hidden', display: 'block'});\n\t\tself.positionDropdown();\n\t\tapplyCSS(self.dropdown,{visibility: 'visible', display: 'block'});\n\t\tself.focus();\n\t\tself.trigger('dropdown_open', self.dropdown);\n\t}\n\n\t/**\n\t * Closes the autocomplete dropdown menu.\n\t */\n\tclose(setTextboxValue=true) {\n\t\tvar self = this;\n\t\tvar trigger = self.isOpen;\n\n\t\tif( setTextboxValue ){\n\n\t\t\t// before blur() to prevent form onchange event\n\t\t\tself.setTextboxValue();\n\n\t\t\tif (self.settings.mode === 'single' && self.items.length) {\n\t\t\t\tself.inputState();\n\t\t\t}\n\t\t}\n\n\t\tself.isOpen = false;\n\t\tsetAttr(self.focus_node,{'aria-expanded': 'false'});\n\t\tapplyCSS(self.dropdown,{display: 'none'});\n\t\tif( self.settings.hideSelected ){\n\t\t\tself.clearActiveOption();\n\t\t}\n\t\tself.refreshState();\n\n\t\tif (trigger) self.trigger('dropdown_close', self.dropdown);\n\t}\n\n\t/**\n\t * Calculates and applies the appropriate\n\t * position of the dropdown if dropdownParent = 'body'.\n\t * Otherwise, position is determined by css\n\t */\n\tpositionDropdown(){\n\n\t\tif( this.settings.dropdownParent !== 'body' ){\n\t\t\treturn;\n\t\t}\n\n\t\tvar context\t\t\t= this.control;\n\t\tvar rect\t\t\t= context.getBoundingClientRect();\n\t\tvar top\t\t\t\t= context.offsetHeight + rect.top + window.scrollY;\n\t\tvar left\t\t\t= rect.left + window.scrollX;\n\n\n\t\tapplyCSS(this.dropdown,{\n\t\t\twidth : rect.width + 'px',\n\t\t\ttop : top + 'px',\n\t\t\tleft : left + 'px'\n\t\t});\n\n\t}\n\n\t/**\n\t * Resets / clears all selected items\n\t * from the control.\n\t *\n\t */\n\tclear(silent?:boolean) {\n\t\tvar self = this;\n\n\t\tif (!self.items.length) return;\n\n\t\tvar items = self.controlChildren();\n\t\titerate(items,(item:TomItem)=>{\n\t\t\tself.removeItem(item,true);\n\t\t});\n\n\t\tself.inputState();\n\t\tif( !silent ) self.updateOriginalInput();\n\t\tself.trigger('clear');\n\t}\n\n\t/**\n\t * A helper method for inserting an element\n\t * at the current caret position.\n\t *\n\t */\n\tinsertAtCaret(el:HTMLElement) {\n\t\tconst self\t\t= this;\n\t\tconst caret\t\t= self.caretPos;\n\t\tconst target\t= self.control;\n\n\t\ttarget.insertBefore(el, target.children[caret] || null);\n\t\tself.setCaret(caret + 1);\n\t}\n\n\t/**\n\t * Removes the current selected item(s).\n\t *\n\t */\n\tdeleteSelection(e:KeyboardEvent):boolean {\n\t\tvar direction, selection, caret, tail;\n\t\tvar self = this;\n\n\t\tdirection = (e && e.keyCode === constants.KEY_BACKSPACE) ? -1 : 1;\n\t\tselection = getSelection(self.control_input);\n\n\n\t\t// determine items that will be removed\n\t\tconst rm_items:TomItem[]\t= [];\n\n\t\tif (self.activeItems.length) {\n\n\t\t\ttail = getTail(self.activeItems, direction);\n\t\t\tcaret = nodeIndex(tail);\n\n\t\t\tif (direction > 0) { caret++; }\n\n\t\t\titerate(self.activeItems, (item:TomItem) => rm_items.push(item) );\n\n\t\t} else if ((self.isFocused || self.settings.mode === 'single') && self.items.length) {\n\t\t\tconst items = self.controlChildren();\n\t\t\tlet rm_item;\n\t\t\tif( direction < 0 && selection.start === 0 && selection.length === 0 ){\n\t\t\t\trm_item = items[self.caretPos - 1];\n\n\t\t\t}else if( direction > 0 && selection.start === self.inputValue().length ){\n\t\t\t\trm_item = items[self.caretPos];\n\t\t\t}\n\n\t\t\tif( rm_item !== undefined ){\n\t\t\t\trm_items.push( rm_item );\n\t\t\t}\n\t\t}\n\n\t\tif( !self.shouldDelete(rm_items,e) ){\n\t\t\treturn false;\n\t\t}\n\n\t\tpreventDefault(e,true);\n\n\t\t// perform removal\n\t\tif (typeof caret !== 'undefined') {\n\t\t\tself.setCaret(caret);\n\t\t}\n\n\t\twhile( rm_items.length ){\n\t\t\tself.removeItem(rm_items.pop());\n\t\t}\n\n\t\tself.inputState();\n\t\tself.positionDropdown();\n\t\tself.refreshOptions(false);\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Return true if the items should be deleted\n\t */\n\tshouldDelete(items:TomItem[],evt:MouseEvent|KeyboardEvent){\n\n\t\tconst values = items.map(item => item.dataset.value);\n\n\t\t// allow the callback to abort\n\t\tif( !values.length || (typeof this.settings.onDelete === 'function' && this.settings.onDelete(values,evt) === false) ){\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Selects the previous / next item (depending on the `direction` argument).\n\t *\n\t * > 0 - right\n\t * < 0 - left\n\t *\n\t */\n\tadvanceSelection(direction:number, e?:MouseEvent|KeyboardEvent) {\n\t\tvar last_active, adjacent, self = this;\n\n\t\tif (self.rtl) direction *= -1;\n\t\tif( self.inputValue().length ) return;\n\n\n\t\t// add or remove to active items\n\t\tif( isKeyDown(constants.KEY_SHORTCUT,e) || isKeyDown('shiftKey',e) ){\n\n\t\t\tlast_active\t\t\t= self.getLastActive(direction);\n\t\t\tif( last_active ){\n\n\t\t\t\tif( !last_active.classList.contains('active') ){\n\t\t\t\t\tadjacent\t\t\t= last_active;\n\t\t\t\t}else{\n\t\t\t\t\tadjacent\t\t\t= self.getAdjacent(last_active,direction,'item');\n\t\t\t\t}\n\n\t\t\t// if no active item, get items adjacent to the control input\n\t\t\t}else if( direction > 0 ){\n\t\t\t\tadjacent\t\t\t= self.control_input.nextElementSibling;\n\t\t\t}else{\n\t\t\t\tadjacent\t\t\t= self.control_input.previousElementSibling;\n\t\t\t}\n\n\n\t\t\tif( adjacent ){\n\t\t\t\tif( adjacent.classList.contains('active') ){\n\t\t\t\t\tself.removeActiveItem(last_active);\n\t\t\t\t}\n\t\t\t\tself.setActiveItemClass(adjacent); // mark as last_active !! after removeActiveItem() on last_active\n\t\t\t}\n\n\t\t// move caret to the left or right\n\t\t}else{\n\t\t\tself.moveCaret(direction);\n\t\t}\n\t}\n\n\tmoveCaret(direction:number){}\n\n\t/**\n\t * Get the last active item\n\t *\n\t */\n\tgetLastActive(direction?:number){\n\n\t\tlet last_active = this.control.querySelector('.last-active');\n\t\tif( last_active ){\n\t\t\treturn last_active;\n\t\t}\n\n\n\t\tvar result = this.control.querySelectorAll('.active');\n\t\tif( result ){\n\t\t\treturn getTail(result,direction);\n\t\t}\n\t}\n\n\n\t/**\n\t * Moves the caret to the specified index.\n\t *\n\t * The input must be moved by leaving it in place and moving the\n\t * siblings, due to the fact that focus cannot be restored once lost\n\t * on mobile webkit devices\n\t *\n\t */\n\tsetCaret(new_pos:number) {\n\t\tthis.caretPos = this.items.length;\n\t}\n\n\t/**\n\t * Return list of item dom elements\n\t *\n\t */\n\tcontrolChildren():TomItem[]{\n\t\treturn Array.from( this.control.querySelectorAll('[data-ts-item]') ) as TomItem[];\n\t}\n\n\t/**\n\t * Disables user input on the control. Used while\n\t * items are being asynchronously created.\n\t */\n\tlock() {\n\t\tthis.setLocked(true);\n\t}\n\n\t/**\n\t * Re-enables user input on the control.\n\t */\n\tunlock() {\n\t\tthis.setLocked(false);\n\t}\n\n\t/**\n\t * Disable or enable user input on the control\n\t */\n\tsetLocked( lock:boolean = this.isReadOnly || this.isDisabled ){\n\t\tthis.isLocked = lock;\n\t\tthis.refreshState();\n\t}\n\n\t/**\n\t * Disables user input on the control completely.\n\t * While disabled, it cannot receive focus.\n\t */\n\tdisable() {\n\t\tthis.setDisabled(true);\n\t\tthis.close();\n\t}\n\n\t/**\n\t * Enables the control so that it can respond\n\t * to focus and user input.\n\t */\n\tenable() {\n\t\tthis.setDisabled(false);\n\t}\n\n\tsetDisabled(disabled:boolean){\n\t\tthis.focus_node.tabIndex\t\t= disabled ? -1 : this.tabIndex;\n\t\tthis.isDisabled\t\t\t\t\t= disabled;\n\t\tthis.input.disabled\t\t\t\t= disabled;\n\t\tthis.control_input.disabled\t\t= disabled;\n\t\tthis.setLocked();\n\t}\n\n\tsetReadOnly(isReadOnly:boolean){\n\t\tthis.isReadOnly\t\t\t\t\t= isReadOnly;\n\t\tthis.input.readOnly\t\t\t\t= isReadOnly;\n\t\tthis.control_input.readOnly\t\t= isReadOnly;\n\t\tthis.setLocked();\n\t}\n\n\t/**\n\t * Completely destroys the control and\n\t * unbinds all event listeners so that it can\n\t * be garbage collected.\n\t */\n\tdestroy() {\n\t\tvar self = this;\n\t\tvar revertSettings = self.revertSettings;\n\n\t\tself.trigger('destroy');\n\t\tself.off();\n\t\tself.wrapper.remove();\n\t\tself.dropdown.remove();\n\n\t\tself.input.innerHTML = revertSettings.innerHTML;\n\t\tself.input.tabIndex = revertSettings.tabIndex;\n\n\t\tremoveClasses(self.input,'tomselected','ts-hidden-accessible');\n\n\t\tself._destroy();\n\n\t\tdelete self.input.tomselect;\n\t}\n\n\t/**\n\t * A helper method for rendering \"item\" and\n\t * \"option\" templates, given the data.\n\t *\n\t */\n\trender( templateName:TomTemplateNames, data?:any ):null|HTMLElement{\n\t\tvar id, html;\n\t\tconst self = this;\n\n\t\tif( typeof this.settings.render[templateName] !== 'function' ){\n\t\t\treturn null;\n\t\t}\n\n\t\t// render markup\n\t\thtml = self.settings.render[templateName].call(this, data, escape_html);\n\n\t\tif( !html ){\n\t\t\treturn null;\n\t\t}\n\n\t\thtml = getDom( html );\n\n\t\t// add mandatory attributes\n\t\tif (templateName === 'option' || templateName === 'option_create') {\n\n\t\t\tif( data[self.settings.disabledField] ){\n\t\t\t\tsetAttr(html,{'aria-disabled':'true'});\n\t\t\t}else{\n\t\t\t\tsetAttr(html,{'data-selectable': ''});\n\t\t\t}\n\n\t\t}else if (templateName === 'optgroup') {\n\t\t\tid = data.group[self.settings.optgroupValueField];\n\t\t\tsetAttr(html,{'data-group': id});\n\t\t\tif(data.group[self.settings.disabledField]) {\n\t\t\t\tsetAttr(html,{'data-disabled': ''});\n\t\t\t}\n\t\t}\n\n\t\tif (templateName === 'option' || templateName === 'item') {\n\t\t\tconst value\t= get_hash(data[self.settings.valueField]);\n\t\t\tsetAttr(html,{'data-value': value });\n\n\n\t\t\t// make sure we have some classes if a template is overwritten\n\t\t\tif( templateName === 'item' ){\n\t\t\t\taddClasses(html,self.settings.itemClass);\n\t\t\t\tsetAttr(html,{'data-ts-item':''});\n\t\t\t}else{\n\t\t\t\taddClasses(html,self.settings.optionClass);\n\t\t\t\tsetAttr(html,{\n\t\t\t\t\trole:'option',\n\t\t\t\t\tid:data.$id\n\t\t\t\t});\n\n\t\t\t\t// update cache\n\t\t\t\tdata.$div = html;\n\t\t\t\tself.options[value] = data;\n\t\t\t}\n\n\n\t\t}\n\n\t\treturn html;\n\n\t}\n\n\n\t/**\n\t * Type guarded rendering\n\t *\n\t */\n\t_render( templateName:TomTemplateNames, data?:any ):HTMLElement{\n\t\tconst html = this.render(templateName, data);\n\n\t\tif( html == null ){\n\t\t\tthrow 'HTMLElement expected';\n\t\t}\n\t\treturn html;\n\t}\n\n\n\t/**\n\t * Clears the render cache for a template. If\n\t * no template is given, clears all render\n\t * caches.\n\t *\n\t */\n\tclearCache():void{\n\n\t\titerate(this.options, (option:TomOption)=>{\n\t\t\tif( option.$div ){\n\t\t\t\toption.$div.remove();\n\t\t\t\tdelete option.$div;\n\t\t\t}\n\t\t});\n\n\t}\n\n\t/**\n\t * Removes a value from item and option caches\n\t *\n\t */\n\tuncacheValue(value:string){\n\n\t\tconst option_el\t\t\t= this.getOption(value);\n\t\tif( option_el ) option_el.remove();\n\n\t}\n\n\t/**\n\t * Determines whether or not to display the\n\t * create item prompt, given a user input.\n\t *\n\t */\n\tcanCreate( input:string ):boolean {\n\t\treturn this.settings.create && (input.length > 0) && (this.settings.createFilter as TomCreateFilter ).call(this, input);\n\t}\n\n\n\t/**\n\t * Wraps this.`method` so that `new_fn` can be invoked 'before', 'after', or 'instead' of the original method\n\t *\n\t * this.hook('instead','onKeyDown',function( arg1, arg2 ...){\n\t *\n\t * });\n\t */\n\thook( when:string, method:string, new_fn:any ){\n\t\tvar self = this;\n\t\tvar orig_method = self[method];\n\n\n\t\tself[method] = function(){\n\t\t\tvar result, result_new;\n\n\t\t\tif( when === 'after' ){\n\t\t\t\tresult = orig_method.apply(self, arguments);\n\t\t\t}\n\n\t\t\tresult_new = new_fn.apply(self, arguments );\n\n\t\t\tif( when === 'instead' ){\n\t\t\t\treturn result_new;\n\t\t\t}\n\n\t\t\tif( when === 'before' ){\n\t\t\t\tresult = orig_method.apply(self, arguments);\n\t\t\t}\n\n\t\t\treturn result;\n\t\t};\n\n\t}\n\n};\n", "\nimport type TomSelect from './tom-select.ts';\nimport { TomLoadCallback } from './types/index.ts';\n\n\n/**\n * Converts a scalar to its best string representation\n * for hash keys and HTML attribute values.\n *\n * Transformations:\n * 'str' -> 'str'\n * null -> ''\n * undefined -> ''\n * true -> '1'\n * false -> '0'\n * 0 -> '0'\n * 1 -> '1'\n *\n */\nexport const hash_key = (value:undefined|null|boolean|string|number):string|null => {\n\tif (typeof value === 'undefined' || value === null) return null;\n\treturn get_hash(value);\n};\n\nexport const get_hash = (value:boolean|string|number):string => {\n\tif (typeof value === 'boolean') return value ? '1' : '0';\n\treturn value + '';\n};\n\n/**\n * Escapes a string for use within HTML.\n *\n */\nexport const escape_html = (str:string):string => {\n\treturn (str + '')\n\t\t.replace(/&/g, '&')\n\t\t.replace(/</g, '<')\n\t\t.replace(/>/g, '>')\n\t\t.replace(/\"/g, '"');\n};\n\n\n/**\n * use setTimeout if timeout > 0 \n */\nexport const timeout = (fn:()=>void,timeout:number): number | null => {\n\tif( timeout > 0 ){\n\t\treturn window.setTimeout(fn,timeout);\n\t}\n\n\tfn.call(null);\n\treturn null;\n}\n\n/**\n * Debounce the user provided load function\n *\n */\nexport const loadDebounce = (fn:(value:string,callback:TomLoadCallback) => void,delay:number) => {\n\tvar timeout: null|ReturnType<typeof setTimeout>;\n\treturn function(this:TomSelect, value:string,callback:TomLoadCallback) {\n\t\tvar self = this;\n\n\t\tif( timeout ){\n\t\t\tself.loading = Math.max(self.loading - 1, 0);\n\t\t\tclearTimeout(timeout);\n\t\t}\n\t\ttimeout = setTimeout(function() {\n\t\t\ttimeout = null;\n\t\t\tself.loadedSearches[value] = true;\n\t\t\tfn.call(self, value, callback);\n\n\t\t}, delay);\n\t};\n};\n\n\n/**\n * Debounce all fired events types listed in `types`\n * while executing the provided `fn`.\n *\n */\nexport const debounce_events = ( self:TomSelect, types:string[], fn:() => void ) => {\n\tvar type:string;\n\tvar trigger = self.trigger;\n\tvar event_args:{ [key: string]: any } = {};\n\n\t// override trigger method\n\tself.trigger = function(){\n\t\tvar type = arguments[0];\n\t\tif (types.indexOf(type) !== -1) {\n\t\t\tevent_args[type] = arguments;\n\t\t} else {\n\t\t\treturn trigger.apply(self, arguments);\n\t\t}\n\t};\n\n\t// invoke provided function\n\tfn.apply(self, []);\n\tself.trigger = trigger;\n\n\t// trigger queued events\n\tfor( type of types ){\n\t\tif( type in event_args ){\n\t\t\ttrigger.apply(self, event_args[type]);\n\t\t}\n\t}\n};\n\n\n/**\n * Determines the current selection within a text input control.\n * Returns an object containing:\n * - start\n * - length\n *\n * Note: \"selectionStart, selectionEnd ... apply only to inputs of types text, search, URL, tel and password\"\n * \t- https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange\n */\nexport const getSelection = (input:HTMLInputElement):{ start: number; length: number } => {\n\treturn {\n\t\tstart\t: input.selectionStart || 0,\n\t\tlength\t: (input.selectionEnd||0) - (input.selectionStart||0),\n\t};\n};\n\n\n/**\n * Prevent default\n *\n */\nexport const preventDefault = (evt?:Event, stop:boolean=false):void => {\n\tif( evt ){\n\t\tevt.preventDefault();\n\t\tif( stop ){\n\t\t\tevt.stopPropagation();\n\t\t}\n\t}\n}\n\n\n/**\n * Add event helper\n *\n */\nexport const addEvent = (target:EventTarget, type:string, callback:EventListenerOrEventListenerObject, options?:object):void => {\n\ttarget.addEventListener(type,callback,options);\n};\n\n\n/**\n * Return true if the requested key is down\n * Will return false if more than one control character is pressed ( when [ctrl+shift+a] != [ctrl+a] )\n * The current evt may not always set ( eg calling advanceSelection() )\n *\n */\nexport const isKeyDown = ( key_name:keyof (KeyboardEvent|MouseEvent), evt?:KeyboardEvent|MouseEvent ) => {\n\n\tif( !evt ){\n\t\treturn false;\n\t}\n\n\tif( !evt[key_name] ){\n\t\treturn false;\n\t}\n\n\tvar count = (evt.altKey?1:0) + (evt.ctrlKey?1:0) + (evt.shiftKey?1:0) + (evt.metaKey?1:0);\n\n\tif( count === 1 ){\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n\n/**\n * Get the id of an element\n * If the id attribute is not set, set the attribute with the given id\n *\n */\nexport const getId = (el:Element,id:string) => {\n\tconst existing_id = el.getAttribute('id');\n\tif( existing_id ){\n\t\treturn existing_id;\n\t}\n\n\tel.setAttribute('id',id);\n\treturn id;\n};\n\n\n/**\n * Returns a string with backslashes added before characters that need to be escaped.\n */\nexport const addSlashes = (str:string):string => {\n\treturn str.replace(/[\\\\\"']/g, '\\\\$&');\n};\n\n/**\n *\n */\nexport const append = ( parent:Element|DocumentFragment, node: string|Node|null|undefined ):void =>{\n\tif( node ) parent.append(node);\n};\n\n/**\n * Iterates over arrays and hashes.\n *\n * ```\n * iterate(this.items, function(item, id) {\n * // invoked for each item\n * });\n * ```\n *\n */\nexport const iterate = (object:[]|{[key:string]:any}, callback:(value:any,key:any)=>any) => {\n\n\tif ( Array.isArray(object)) {\n\t\tobject.forEach(callback);\n\n\t}else{\n\n\t\tfor (var key in object) {\n\t\t\tif (object.hasOwnProperty(key)) {\n\t\t\t\tcallback(object[key], key);\n\t\t\t}\n\t\t}\n\t}\n};\n", "/**\n * Plugin: \"change_listener\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport type TomSelect from '../../tom-select.ts';\nimport { addEvent } from '../../utils.ts';\n\nexport default function(this:TomSelect) {\n\taddEvent(this.input,'change',()=>{\n\t\tthis.sync();\n\t});\n};\n", "\nimport type TomSelect from './tom-select.ts';\nimport { TomLoadCallback } from './types/index.ts';\n\n\n/**\n * Converts a scalar to its best string representation\n * for hash keys and HTML attribute values.\n *\n * Transformations:\n * 'str' -> 'str'\n * null -> ''\n * undefined -> ''\n * true -> '1'\n * false -> '0'\n * 0 -> '0'\n * 1 -> '1'\n *\n */\nexport const hash_key = (value:undefined|null|boolean|string|number):string|null => {\n\tif (typeof value === 'undefined' || value === null) return null;\n\treturn get_hash(value);\n};\n\nexport const get_hash = (value:boolean|string|number):string => {\n\tif (typeof value === 'boolean') return value ? '1' : '0';\n\treturn value + '';\n};\n\n/**\n * Escapes a string for use within HTML.\n *\n */\nexport const escape_html = (str:string):string => {\n\treturn (str + '')\n\t\t.replace(/&/g, '&')\n\t\t.replace(/</g, '<')\n\t\t.replace(/>/g, '>')\n\t\t.replace(/\"/g, '"');\n};\n\n\n/**\n * use setTimeout if timeout > 0 \n */\nexport const timeout = (fn:()=>void,timeout:number): number | null => {\n\tif( timeout > 0 ){\n\t\treturn window.setTimeout(fn,timeout);\n\t}\n\n\tfn.call(null);\n\treturn null;\n}\n\n/**\n * Debounce the user provided load function\n *\n */\nexport const loadDebounce = (fn:(value:string,callback:TomLoadCallback) => void,delay:number) => {\n\tvar timeout: null|ReturnType<typeof setTimeout>;\n\treturn function(this:TomSelect, value:string,callback:TomLoadCallback) {\n\t\tvar self = this;\n\n\t\tif( timeout ){\n\t\t\tself.loading = Math.max(self.loading - 1, 0);\n\t\t\tclearTimeout(timeout);\n\t\t}\n\t\ttimeout = setTimeout(function() {\n\t\t\ttimeout = null;\n\t\t\tself.loadedSearches[value] = true;\n\t\t\tfn.call(self, value, callback);\n\n\t\t}, delay);\n\t};\n};\n\n\n/**\n * Debounce all fired events types listed in `types`\n * while executing the provided `fn`.\n *\n */\nexport const debounce_events = ( self:TomSelect, types:string[], fn:() => void ) => {\n\tvar type:string;\n\tvar trigger = self.trigger;\n\tvar event_args:{ [key: string]: any } = {};\n\n\t// override trigger method\n\tself.trigger = function(){\n\t\tvar type = arguments[0];\n\t\tif (types.indexOf(type) !== -1) {\n\t\t\tevent_args[type] = arguments;\n\t\t} else {\n\t\t\treturn trigger.apply(self, arguments);\n\t\t}\n\t};\n\n\t// invoke provided function\n\tfn.apply(self, []);\n\tself.trigger = trigger;\n\n\t// trigger queued events\n\tfor( type of types ){\n\t\tif( type in event_args ){\n\t\t\ttrigger.apply(self, event_args[type]);\n\t\t}\n\t}\n};\n\n\n/**\n * Determines the current selection within a text input control.\n * Returns an object containing:\n * - start\n * - length\n *\n * Note: \"selectionStart, selectionEnd ... apply only to inputs of types text, search, URL, tel and password\"\n * \t- https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange\n */\nexport const getSelection = (input:HTMLInputElement):{ start: number; length: number } => {\n\treturn {\n\t\tstart\t: input.selectionStart || 0,\n\t\tlength\t: (input.selectionEnd||0) - (input.selectionStart||0),\n\t};\n};\n\n\n/**\n * Prevent default\n *\n */\nexport const preventDefault = (evt?:Event, stop:boolean=false):void => {\n\tif( evt ){\n\t\tevt.preventDefault();\n\t\tif( stop ){\n\t\t\tevt.stopPropagation();\n\t\t}\n\t}\n}\n\n\n/**\n * Add event helper\n *\n */\nexport const addEvent = (target:EventTarget, type:string, callback:EventListenerOrEventListenerObject, options?:object):void => {\n\ttarget.addEventListener(type,callback,options);\n};\n\n\n/**\n * Return true if the requested key is down\n * Will return false if more than one control character is pressed ( when [ctrl+shift+a] != [ctrl+a] )\n * The current evt may not always set ( eg calling advanceSelection() )\n *\n */\nexport const isKeyDown = ( key_name:keyof (KeyboardEvent|MouseEvent), evt?:KeyboardEvent|MouseEvent ) => {\n\n\tif( !evt ){\n\t\treturn false;\n\t}\n\n\tif( !evt[key_name] ){\n\t\treturn false;\n\t}\n\n\tvar count = (evt.altKey?1:0) + (evt.ctrlKey?1:0) + (evt.shiftKey?1:0) + (evt.metaKey?1:0);\n\n\tif( count === 1 ){\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n\n/**\n * Get the id of an element\n * If the id attribute is not set, set the attribute with the given id\n *\n */\nexport const getId = (el:Element,id:string) => {\n\tconst existing_id = el.getAttribute('id');\n\tif( existing_id ){\n\t\treturn existing_id;\n\t}\n\n\tel.setAttribute('id',id);\n\treturn id;\n};\n\n\n/**\n * Returns a string with backslashes added before characters that need to be escaped.\n */\nexport const addSlashes = (str:string):string => {\n\treturn str.replace(/[\\\\\"']/g, '\\\\$&');\n};\n\n/**\n *\n */\nexport const append = ( parent:Element|DocumentFragment, node: string|Node|null|undefined ):void =>{\n\tif( node ) parent.append(node);\n};\n\n/**\n * Iterates over arrays and hashes.\n *\n * ```\n * iterate(this.items, function(item, id) {\n * // invoked for each item\n * });\n * ```\n *\n */\nexport const iterate = (object:[]|{[key:string]:any}, callback:(value:any,key:any)=>any) => {\n\n\tif ( Array.isArray(object)) {\n\t\tobject.forEach(callback);\n\n\t}else{\n\n\t\tfor (var key in object) {\n\t\t\tif (object.hasOwnProperty(key)) {\n\t\t\t\tcallback(object[key], key);\n\t\t\t}\n\t\t}\n\t}\n};\n", "\nimport { iterate } from './utils.ts';\n\n/**\n * Return a dom element from either a dom query string, jQuery object, a dom element or html string\n * https://stackoverflow.com/questions/494143/creating-a-new-dom-element-from-an-html-string-using-built-in-dom-methods-or-pro/35385518#35385518\n *\n * param query should be {}\n */\nexport const getDom = ( query:any ):HTMLElement => {\n\n\tif( query.jquery ){\n\t\treturn query[0];\n\t}\n\n\tif( query instanceof HTMLElement ){\n\t\treturn query;\n\t}\n\n\tif( isHtmlString(query) ){\n\t\tvar tpl = document.createElement('template');\n\t\ttpl.innerHTML = query.trim(); // Never return a text node of whitespace as the result\n\t\treturn tpl.content.firstChild as HTMLElement;\n\t}\n\n\treturn document.querySelector(query);\n};\n\nexport const isHtmlString = (arg:any): boolean => {\n\tif( typeof arg === 'string' && arg.indexOf('<') > -1 ){\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nexport const escapeQuery = (query:string):string => {\n\treturn query.replace(/['\"\\\\]/g, '\\\\$&');\n}\n\n/**\n * Dispatch an event\n *\n */\nexport const triggerEvent = ( dom_el:HTMLElement, event_name:string ):void => {\n\tvar event = document.createEvent('HTMLEvents');\n\tevent.initEvent(event_name, true, false);\n\tdom_el.dispatchEvent(event)\n};\n\n/**\n * Apply CSS rules to a dom element\n *\n */\nexport const applyCSS = ( dom_el:HTMLElement, css:{ [key: string]: string|number }):void => {\n\tObject.assign(dom_el.style, css);\n}\n\n\n/**\n * Add css classes\n *\n */\nexport const addClasses = ( elmts:HTMLElement|HTMLElement[], ...classes:string[]|string[][] ) => {\n\n\tvar norm_classes \t= classesArray(classes);\n\telmts\t\t\t\t= castAsArray(elmts);\n\n\telmts.map( el => {\n\t\tnorm_classes.map( cls => {\n\t\t\tel.classList.add( cls );\n\t\t});\n\t});\n}\n\n/**\n * Remove css classes\n *\n */\n export const removeClasses = ( elmts:HTMLElement|HTMLElement[], ...classes:string[]|string[][] ) => {\n\n \tvar norm_classes \t= classesArray(classes);\n\telmts\t\t\t\t= castAsArray(elmts);\n\n\telmts.map( el => {\n\t\tnorm_classes.map(cls => {\n\t \t\tel.classList.remove( cls );\n\t\t});\n \t});\n }\n\n\n/**\n * Return arguments\n *\n */\nexport const classesArray = (args:string[]|string[][]):string[] => {\n\tvar classes:string[] = [];\n\titerate( args, (_classes) =>{\n\t\tif( typeof _classes === 'string' ){\n\t\t\t_classes = _classes.trim().split(/[\\t\\n\\f\\r\\s]/);\n\t\t}\n\t\tif( Array.isArray(_classes) ){\n\t\t\tclasses = classes.concat(_classes);\n\t\t}\n\t});\n\n\treturn classes.filter(Boolean);\n}\n\n\n/**\n * Create an array from arg if it's not already an array\n *\n */\nexport const castAsArray = (arg:any):Array<any> => {\n\tif( !Array.isArray(arg) ){\n \t\targ = [arg];\n \t}\n\treturn arg;\n}\n\n\n/**\n * Get the closest node to the evt.target matching the selector\n * Stops at wrapper\n *\n */\nexport const parentMatch = ( target:null|HTMLElement, selector:string, wrapper?:HTMLElement ):HTMLElement|void => {\n\n\tif( wrapper && !wrapper.contains(target) ){\n\t\treturn;\n\t}\n\n\twhile( target && target.matches ){\n\n\t\tif( target.matches(selector) ){\n\t\t\treturn target;\n\t\t}\n\n\t\ttarget = target.parentNode as HTMLElement;\n\t}\n}\n\n\n/**\n * Get the first or last item from an array\n *\n * > 0 - right (last)\n * <= 0 - left (first)\n *\n */\nexport const getTail = ( list:Array<any>|NodeList, direction:number=0 ):any => {\n\n\tif( direction > 0 ){\n\t\treturn list[list.length-1];\n\t}\n\n\treturn list[0];\n}\n\n/**\n * Return true if an object is empty\n *\n */\nexport const isEmptyObject = (obj:object):boolean => {\n\treturn (Object.keys(obj).length === 0);\n}\n\n\n/**\n * Get the index of an element amongst sibling nodes of the same type\n *\n */\nexport const nodeIndex = ( el:null|Element, amongst?:string ):number => {\n\tif (!el) return -1;\n\n\tamongst = amongst || el.nodeName;\n\n\tvar i = 0;\n\twhile( el = el.previousElementSibling ){\n\n\t\tif( el.matches(amongst) ){\n\t\t\ti++;\n\t\t}\n\t}\n\treturn i;\n}\n\n\n/**\n * Set attributes of an element\n *\n */\nexport const setAttr = (el:Element,attrs:{ [key: string]: null|string|number }) => {\n\titerate( attrs,(val,attr) => {\n\t\tif( val == null ){\n\t\t\tel.removeAttribute(attr as string);\n\t\t}else{\n\t\t\tel.setAttribute(attr as string, ''+val);\n\t\t}\n\t});\n}\n\n\n/**\n * Replace a node\n */\nexport const replaceNode = ( existing:Node, replacement:Node ) => {\n\tif( existing.parentNode ) existing.parentNode.replaceChild(replacement, existing);\n}\n", "/**\n * Plugin: \"checkbox_options\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport type TomSelect from '../../tom-select.ts';\nimport { TomTemplate } from '../../types/index.ts';\nimport { preventDefault, hash_key } from '../../utils.ts';\nimport { getDom } from '../../vanilla.ts';\nimport { CBOptions } from './types.ts';\n\n\nexport default function(this:TomSelect, userOptions:CBOptions) {\n\tvar self = this;\n\tvar orig_onOptionSelect = self.onOptionSelect;\n\n\tself.settings.hideSelected = false;\n\n\tconst cbOptions : CBOptions = Object.assign({\n\t\t// so that the user may add different ones as well\n\t\tclassName : \"tomselect-checkbox\",\n\n\t\t// the following default to the historic plugin's values\n\t\tcheckedClassNames : undefined,\n\t\tuncheckedClassNames : undefined,\n\t}, userOptions);\n\n\n\tvar UpdateChecked = function(checkbox:HTMLInputElement, toCheck : boolean) {\n\t\tif( toCheck ){\n\t\t\tcheckbox.checked = true;\n\t\t\tif (cbOptions.uncheckedClassNames) {\n\t\t\t\tcheckbox.classList.remove(...cbOptions.uncheckedClassNames);\n\t\t\t}\n\t\t\tif (cbOptions.checkedClassNames) {\n\t\t\t\tcheckbox.classList.add(...cbOptions.checkedClassNames);\n\t\t\t}\n\t\t}else{\n\t\t\tcheckbox.checked = false;\n\t\t\tif (cbOptions.checkedClassNames) {\n\t\t\t\tcheckbox.classList.remove(...cbOptions.checkedClassNames);\n\t\t\t}\n\t\t\tif (cbOptions.uncheckedClassNames) {\n\t\t\t\tcheckbox.classList.add(...cbOptions.uncheckedClassNames);\n\t\t\t}\n\t\t}\n\t}\n\n\t// update the checkbox for an option\n\tvar UpdateCheckbox = function(option:HTMLElement){\n\t\tsetTimeout(()=>{\n\t\t\tvar checkbox = option.querySelector('input.' + cbOptions.className);\n\t\t\tif( checkbox instanceof HTMLInputElement ){\n\t\t\t\tUpdateChecked(checkbox, option.classList.contains('selected'));\n\t\t\t}\n\t\t},1);\n\t};\n\n\t// add checkbox to option template\n\tself.hook('after','setupTemplates',() => {\n\n\t\tvar orig_render_option = self.settings.render.option;\n\n\t\tself.settings.render.option = ((data, escape_html) => {\n\t\t\tvar rendered = getDom(orig_render_option.call(self, data, escape_html));\n\t\t\tvar checkbox = document.createElement('input');\n\t\t\tif (cbOptions.className) {\n\t\t\t\tcheckbox.classList.add(cbOptions.className);\n\t\t\t}\n\t\t\tcheckbox.addEventListener('click',function(evt){\n\t\t\t\tpreventDefault(evt);\n\t\t\t});\n\n\t\t\tcheckbox.type = 'checkbox';\n\t\t\tconst hashed = hash_key(data[self.settings.valueField]);\n\n\t\t\tUpdateChecked(checkbox, !!(hashed && self.items.indexOf(hashed) > -1) );\n\n\t\t\trendered.prepend(checkbox);\n\t\t\treturn rendered;\n\t\t}) satisfies TomTemplate;\n\t});\n\n\t// uncheck when item removed\n\tself.on('item_remove',(value:string) => {\n\t\tvar option = self.getOption(value);\n\n\t\tif( option ){ // if dropdown hasn't been opened yet, the option won't exist\n\t\t\toption.classList.remove('selected'); // selected class won't be removed yet\n\t\t\tUpdateCheckbox(option);\n\t\t}\n\t});\n\n\t// check when item added\n\tself.on('item_add',(value:string) => {\n\t\tvar option = self.getOption(value);\n\n\t\tif( option ){ // if dropdown hasn't been opened yet, the option won't exist\n\t\t\tUpdateCheckbox(option);\n\t\t}\n\t});\n\n\n\t// remove items when selected option is clicked\n\tself.hook('instead','onOptionSelect',( evt:KeyboardEvent, option:HTMLElement )=>{\n\n\t\tif( option.classList.contains('selected') ){\n\t\t\toption.classList.remove('selected')\n\t\t\tself.removeItem(option.dataset.value);\n\t\t\tself.refreshOptions();\n\t\t\tpreventDefault(evt,true);\n\t\t\treturn;\n }\n\n\t\torig_onOptionSelect.call(self, evt, option);\n\n\t\tUpdateCheckbox(option);\n\t});\n\n};\n", "\nimport { iterate } from './utils.ts';\n\n/**\n * Return a dom element from either a dom query string, jQuery object, a dom element or html string\n * https://stackoverflow.com/questions/494143/creating-a-new-dom-element-from-an-html-string-using-built-in-dom-methods-or-pro/35385518#35385518\n *\n * param query should be {}\n */\nexport const getDom = ( query:any ):HTMLElement => {\n\n\tif( query.jquery ){\n\t\treturn query[0];\n\t}\n\n\tif( query instanceof HTMLElement ){\n\t\treturn query;\n\t}\n\n\tif( isHtmlString(query) ){\n\t\tvar tpl = document.createElement('template');\n\t\ttpl.innerHTML = query.trim(); // Never return a text node of whitespace as the result\n\t\treturn tpl.content.firstChild as HTMLElement;\n\t}\n\n\treturn document.querySelector(query);\n};\n\nexport const isHtmlString = (arg:any): boolean => {\n\tif( typeof arg === 'string' && arg.indexOf('<') > -1 ){\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nexport const escapeQuery = (query:string):string => {\n\treturn query.replace(/['\"\\\\]/g, '\\\\$&');\n}\n\n/**\n * Dispatch an event\n *\n */\nexport const triggerEvent = ( dom_el:HTMLElement, event_name:string ):void => {\n\tvar event = document.createEvent('HTMLEvents');\n\tevent.initEvent(event_name, true, false);\n\tdom_el.dispatchEvent(event)\n};\n\n/**\n * Apply CSS rules to a dom element\n *\n */\nexport const applyCSS = ( dom_el:HTMLElement, css:{ [key: string]: string|number }):void => {\n\tObject.assign(dom_el.style, css);\n}\n\n\n/**\n * Add css classes\n *\n */\nexport const addClasses = ( elmts:HTMLElement|HTMLElement[], ...classes:string[]|string[][] ) => {\n\n\tvar norm_classes \t= classesArray(classes);\n\telmts\t\t\t\t= castAsArray(elmts);\n\n\telmts.map( el => {\n\t\tnorm_classes.map( cls => {\n\t\t\tel.classList.add( cls );\n\t\t});\n\t});\n}\n\n/**\n * Remove css classes\n *\n */\n export const removeClasses = ( elmts:HTMLElement|HTMLElement[], ...classes:string[]|string[][] ) => {\n\n \tvar norm_classes \t= classesArray(classes);\n\telmts\t\t\t\t= castAsArray(elmts);\n\n\telmts.map( el => {\n\t\tnorm_classes.map(cls => {\n\t \t\tel.classList.remove( cls );\n\t\t});\n \t});\n }\n\n\n/**\n * Return arguments\n *\n */\nexport const classesArray = (args:string[]|string[][]):string[] => {\n\tvar classes:string[] = [];\n\titerate( args, (_classes) =>{\n\t\tif( typeof _classes === 'string' ){\n\t\t\t_classes = _classes.trim().split(/[\\t\\n\\f\\r\\s]/);\n\t\t}\n\t\tif( Array.isArray(_classes) ){\n\t\t\tclasses = classes.concat(_classes);\n\t\t}\n\t});\n\n\treturn classes.filter(Boolean);\n}\n\n\n/**\n * Create an array from arg if it's not already an array\n *\n */\nexport const castAsArray = (arg:any):Array<any> => {\n\tif( !Array.isArray(arg) ){\n \t\targ = [arg];\n \t}\n\treturn arg;\n}\n\n\n/**\n * Get the closest node to the evt.target matching the selector\n * Stops at wrapper\n *\n */\nexport const parentMatch = ( target:null|HTMLElement, selector:string, wrapper?:HTMLElement ):HTMLElement|void => {\n\n\tif( wrapper && !wrapper.contains(target) ){\n\t\treturn;\n\t}\n\n\twhile( target && target.matches ){\n\n\t\tif( target.matches(selector) ){\n\t\t\treturn target;\n\t\t}\n\n\t\ttarget = target.parentNode as HTMLElement;\n\t}\n}\n\n\n/**\n * Get the first or last item from an array\n *\n * > 0 - right (last)\n * <= 0 - left (first)\n *\n */\nexport const getTail = ( list:Array<any>|NodeList, direction:number=0 ):any => {\n\n\tif( direction > 0 ){\n\t\treturn list[list.length-1];\n\t}\n\n\treturn list[0];\n}\n\n/**\n * Return true if an object is empty\n *\n */\nexport const isEmptyObject = (obj:object):boolean => {\n\treturn (Object.keys(obj).length === 0);\n}\n\n\n/**\n * Get the index of an element amongst sibling nodes of the same type\n *\n */\nexport const nodeIndex = ( el:null|Element, amongst?:string ):number => {\n\tif (!el) return -1;\n\n\tamongst = amongst || el.nodeName;\n\n\tvar i = 0;\n\twhile( el = el.previousElementSibling ){\n\n\t\tif( el.matches(amongst) ){\n\t\t\ti++;\n\t\t}\n\t}\n\treturn i;\n}\n\n\n/**\n * Set attributes of an element\n *\n */\nexport const setAttr = (el:Element,attrs:{ [key: string]: null|string|number }) => {\n\titerate( attrs,(val,attr) => {\n\t\tif( val == null ){\n\t\t\tel.removeAttribute(attr as string);\n\t\t}else{\n\t\t\tel.setAttribute(attr as string, ''+val);\n\t\t}\n\t});\n}\n\n\n/**\n * Replace a node\n */\nexport const replaceNode = ( existing:Node, replacement:Node ) => {\n\tif( existing.parentNode ) existing.parentNode.replaceChild(replacement, existing);\n}\n", "/**\n * Plugin: \"dropdown_header\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport type TomSelect from '../../tom-select.ts';\nimport { getDom } from '../../vanilla.ts';\nimport { CBOptions } from './types.ts';\n\nexport default function(this:TomSelect, userOptions:CBOptions) {\n\tconst self = this;\n\n\tconst options = Object.assign({\n\t\tclassName: 'clear-button',\n\t\ttitle: 'Clear All',\n\t\thtml: (data:CBOptions) => {\n\t\t\treturn `<div class=\"${data.className}\" title=\"${data.title}\">⨯</div>`;\n\t\t}\n\t}, userOptions);\n\n\tself.on('initialize',()=>{\n\t\tvar button = getDom(options.html(options));\n\t\tbutton.addEventListener('click',(evt)=>{\n\n\t\t\tif( self.isLocked ) return;\n\n\t\t\tself.clear();\n\n\t\t\tif( self.settings.mode === 'single' && self.settings.allowEmptyOption ){\n\t\t\t\tself.addItem('');\n\t\t\t}\n\n\t\t\tevt.preventDefault();\n\t\t\tevt.stopPropagation();\n\t\t});\n\t\tself.control.appendChild(button);\n\t});\n\n};\n", "\nimport type TomSelect from './tom-select.ts';\nimport { TomLoadCallback } from './types/index.ts';\n\n\n/**\n * Converts a scalar to its best string representation\n * for hash keys and HTML attribute values.\n *\n * Transformations:\n * 'str' -> 'str'\n * null -> ''\n * undefined -> ''\n * true -> '1'\n * false -> '0'\n * 0 -> '0'\n * 1 -> '1'\n *\n */\nexport const hash_key = (value:undefined|null|boolean|string|number):string|null => {\n\tif (typeof value === 'undefined' || value === null) return null;\n\treturn get_hash(value);\n};\n\nexport const get_hash = (value:boolean|string|number):string => {\n\tif (typeof value === 'boolean') return value ? '1' : '0';\n\treturn value + '';\n};\n\n/**\n * Escapes a string for use within HTML.\n *\n */\nexport const escape_html = (str:string):string => {\n\treturn (str + '')\n\t\t.replace(/&/g, '&')\n\t\t.replace(/</g, '<')\n\t\t.replace(/>/g, '>')\n\t\t.replace(/\"/g, '"');\n};\n\n\n/**\n * use setTimeout if timeout > 0 \n */\nexport const timeout = (fn:()=>void,timeout:number): number | null => {\n\tif( timeout > 0 ){\n\t\treturn window.setTimeout(fn,timeout);\n\t}\n\n\tfn.call(null);\n\treturn null;\n}\n\n/**\n * Debounce the user provided load function\n *\n */\nexport const loadDebounce = (fn:(value:string,callback:TomLoadCallback) => void,delay:number) => {\n\tvar timeout: null|ReturnType<typeof setTimeout>;\n\treturn function(this:TomSelect, value:string,callback:TomLoadCallback) {\n\t\tvar self = this;\n\n\t\tif( timeout ){\n\t\t\tself.loading = Math.max(self.loading - 1, 0);\n\t\t\tclearTimeout(timeout);\n\t\t}\n\t\ttimeout = setTimeout(function() {\n\t\t\ttimeout = null;\n\t\t\tself.loadedSearches[value] = true;\n\t\t\tfn.call(self, value, callback);\n\n\t\t}, delay);\n\t};\n};\n\n\n/**\n * Debounce all fired events types listed in `types`\n * while executing the provided `fn`.\n *\n */\nexport const debounce_events = ( self:TomSelect, types:string[], fn:() => void ) => {\n\tvar type:string;\n\tvar trigger = self.trigger;\n\tvar event_args:{ [key: string]: any } = {};\n\n\t// override trigger method\n\tself.trigger = function(){\n\t\tvar type = arguments[0];\n\t\tif (types.indexOf(type) !== -1) {\n\t\t\tevent_args[type] = arguments;\n\t\t} else {\n\t\t\treturn trigger.apply(self, arguments);\n\t\t}\n\t};\n\n\t// invoke provided function\n\tfn.apply(self, []);\n\tself.trigger = trigger;\n\n\t// trigger queued events\n\tfor( type of types ){\n\t\tif( type in event_args ){\n\t\t\ttrigger.apply(self, event_args[type]);\n\t\t}\n\t}\n};\n\n\n/**\n * Determines the current selection within a text input control.\n * Returns an object containing:\n * - start\n * - length\n *\n * Note: \"selectionStart, selectionEnd ... apply only to inputs of types text, search, URL, tel and password\"\n * \t- https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange\n */\nexport const getSelection = (input:HTMLInputElement):{ start: number; length: number } => {\n\treturn {\n\t\tstart\t: input.selectionStart || 0,\n\t\tlength\t: (input.selectionEnd||0) - (input.selectionStart||0),\n\t};\n};\n\n\n/**\n * Prevent default\n *\n */\nexport const preventDefault = (evt?:Event, stop:boolean=false):void => {\n\tif( evt ){\n\t\tevt.preventDefault();\n\t\tif( stop ){\n\t\t\tevt.stopPropagation();\n\t\t}\n\t}\n}\n\n\n/**\n * Add event helper\n *\n */\nexport const addEvent = (target:EventTarget, type:string, callback:EventListenerOrEventListenerObject, options?:object):void => {\n\ttarget.addEventListener(type,callback,options);\n};\n\n\n/**\n * Return true if the requested key is down\n * Will return false if more than one control character is pressed ( when [ctrl+shift+a] != [ctrl+a] )\n * The current evt may not always set ( eg calling advanceSelection() )\n *\n */\nexport const isKeyDown = ( key_name:keyof (KeyboardEvent|MouseEvent), evt?:KeyboardEvent|MouseEvent ) => {\n\n\tif( !evt ){\n\t\treturn false;\n\t}\n\n\tif( !evt[key_name] ){\n\t\treturn false;\n\t}\n\n\tvar count = (evt.altKey?1:0) + (evt.ctrlKey?1:0) + (evt.shiftKey?1:0) + (evt.metaKey?1:0);\n\n\tif( count === 1 ){\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n\n/**\n * Get the id of an element\n * If the id attribute is not set, set the attribute with the given id\n *\n */\nexport const getId = (el:Element,id:string) => {\n\tconst existing_id = el.getAttribute('id');\n\tif( existing_id ){\n\t\treturn existing_id;\n\t}\n\n\tel.setAttribute('id',id);\n\treturn id;\n};\n\n\n/**\n * Returns a string with backslashes added before characters that need to be escaped.\n */\nexport const addSlashes = (str:string):string => {\n\treturn str.replace(/[\\\\\"']/g, '\\\\$&');\n};\n\n/**\n *\n */\nexport const append = ( parent:Element|DocumentFragment, node: string|Node|null|undefined ):void =>{\n\tif( node ) parent.append(node);\n};\n\n/**\n * Iterates over arrays and hashes.\n *\n * ```\n * iterate(this.items, function(item, id) {\n * // invoked for each item\n * });\n * ```\n *\n */\nexport const iterate = (object:[]|{[key:string]:any}, callback:(value:any,key:any)=>any) => {\n\n\tif ( Array.isArray(object)) {\n\t\tobject.forEach(callback);\n\n\t}else{\n\n\t\tfor (var key in object) {\n\t\t\tif (object.hasOwnProperty(key)) {\n\t\t\t\tcallback(object[key], key);\n\t\t\t}\n\t\t}\n\t}\n};\n", "\nimport { iterate } from './utils.ts';\n\n/**\n * Return a dom element from either a dom query string, jQuery object, a dom element or html string\n * https://stackoverflow.com/questions/494143/creating-a-new-dom-element-from-an-html-string-using-built-in-dom-methods-or-pro/35385518#35385518\n *\n * param query should be {}\n */\nexport const getDom = ( query:any ):HTMLElement => {\n\n\tif( query.jquery ){\n\t\treturn query[0];\n\t}\n\n\tif( query instanceof HTMLElement ){\n\t\treturn query;\n\t}\n\n\tif( isHtmlString(query) ){\n\t\tvar tpl = document.createElement('template');\n\t\ttpl.innerHTML = query.trim(); // Never return a text node of whitespace as the result\n\t\treturn tpl.content.firstChild as HTMLElement;\n\t}\n\n\treturn document.querySelector(query);\n};\n\nexport const isHtmlString = (arg:any): boolean => {\n\tif( typeof arg === 'string' && arg.indexOf('<') > -1 ){\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nexport const escapeQuery = (query:string):string => {\n\treturn query.replace(/['\"\\\\]/g, '\\\\$&');\n}\n\n/**\n * Dispatch an event\n *\n */\nexport const triggerEvent = ( dom_el:HTMLElement, event_name:string ):void => {\n\tvar event = document.createEvent('HTMLEvents');\n\tevent.initEvent(event_name, true, false);\n\tdom_el.dispatchEvent(event)\n};\n\n/**\n * Apply CSS rules to a dom element\n *\n */\nexport const applyCSS = ( dom_el:HTMLElement, css:{ [key: string]: string|number }):void => {\n\tObject.assign(dom_el.style, css);\n}\n\n\n/**\n * Add css classes\n *\n */\nexport const addClasses = ( elmts:HTMLElement|HTMLElement[], ...classes:string[]|string[][] ) => {\n\n\tvar norm_classes \t= classesArray(classes);\n\telmts\t\t\t\t= castAsArray(elmts);\n\n\telmts.map( el => {\n\t\tnorm_classes.map( cls => {\n\t\t\tel.classList.add( cls );\n\t\t});\n\t});\n}\n\n/**\n * Remove css classes\n *\n */\n export const removeClasses = ( elmts:HTMLElement|HTMLElement[], ...classes:string[]|string[][] ) => {\n\n \tvar norm_classes \t= classesArray(classes);\n\telmts\t\t\t\t= castAsArray(elmts);\n\n\telmts.map( el => {\n\t\tnorm_classes.map(cls => {\n\t \t\tel.classList.remove( cls );\n\t\t});\n \t});\n }\n\n\n/**\n * Return arguments\n *\n */\nexport const classesArray = (args:string[]|string[][]):string[] => {\n\tvar classes:string[] = [];\n\titerate( args, (_classes) =>{\n\t\tif( typeof _classes === 'string' ){\n\t\t\t_classes = _classes.trim().split(/[\\t\\n\\f\\r\\s]/);\n\t\t}\n\t\tif( Array.isArray(_classes) ){\n\t\t\tclasses = classes.concat(_classes);\n\t\t}\n\t});\n\n\treturn classes.filter(Boolean);\n}\n\n\n/**\n * Create an array from arg if it's not already an array\n *\n */\nexport const castAsArray = (arg:any):Array<any> => {\n\tif( !Array.isArray(arg) ){\n \t\targ = [arg];\n \t}\n\treturn arg;\n}\n\n\n/**\n * Get the closest node to the evt.target matching the selector\n * Stops at wrapper\n *\n */\nexport const parentMatch = ( target:null|HTMLElement, selector:string, wrapper?:HTMLElement ):HTMLElement|void => {\n\n\tif( wrapper && !wrapper.contains(target) ){\n\t\treturn;\n\t}\n\n\twhile( target && target.matches ){\n\n\t\tif( target.matches(selector) ){\n\t\t\treturn target;\n\t\t}\n\n\t\ttarget = target.parentNode as HTMLElement;\n\t}\n}\n\n\n/**\n * Get the first or last item from an array\n *\n * > 0 - right (last)\n * <= 0 - left (first)\n *\n */\nexport const getTail = ( list:Array<any>|NodeList, direction:number=0 ):any => {\n\n\tif( direction > 0 ){\n\t\treturn list[list.length-1];\n\t}\n\n\treturn list[0];\n}\n\n/**\n * Return true if an object is empty\n *\n */\nexport const isEmptyObject = (obj:object):boolean => {\n\treturn (Object.keys(obj).length === 0);\n}\n\n\n/**\n * Get the index of an element amongst sibling nodes of the same type\n *\n */\nexport const nodeIndex = ( el:null|Element, amongst?:string ):number => {\n\tif (!el) return -1;\n\n\tamongst = amongst || el.nodeName;\n\n\tvar i = 0;\n\twhile( el = el.previousElementSibling ){\n\n\t\tif( el.matches(amongst) ){\n\t\t\ti++;\n\t\t}\n\t}\n\treturn i;\n}\n\n\n/**\n * Set attributes of an element\n *\n */\nexport const setAttr = (el:Element,attrs:{ [key: string]: null|string|number }) => {\n\titerate( attrs,(val,attr) => {\n\t\tif( val == null ){\n\t\t\tel.removeAttribute(attr as string);\n\t\t}else{\n\t\t\tel.setAttribute(attr as string, ''+val);\n\t\t}\n\t});\n}\n\n\n/**\n * Replace a node\n */\nexport const replaceNode = ( existing:Node, replacement:Node ) => {\n\tif( existing.parentNode ) existing.parentNode.replaceChild(replacement, existing);\n}\n", "/**\n * Plugin: \"drag_drop\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport type TomSelect from '../../tom-select.ts';\nimport { TomOption, TomItem } from '../../types/index.ts';\nimport { escape_html, preventDefault, addEvent } from '../../utils.ts';\nimport { getDom, setAttr } from '../../vanilla.ts';\n\n\nconst insertAfter = (referenceNode:Element, newNode:Element) => {\n\treferenceNode.parentNode?.insertBefore(newNode, referenceNode.nextSibling);\n}\n\nconst insertBefore = (referenceNode:Element, newNode:Element) => {\n\treferenceNode.parentNode?.insertBefore(newNode, referenceNode);\n}\n\nconst isBefore = (referenceNode:Element|undefined|null, newNode:Element|undefined|null) =>{\n\t\n\tdo{\n\t\tnewNode = newNode?.previousElementSibling;\n\n\t\tif( referenceNode == newNode ){\n\t\t\treturn true;\n\t\t}\n\n\t}while( newNode && newNode.previousElementSibling );\n\n\treturn false;\n}\n\nexport default function(this:TomSelect) {\n\tvar self = this;\n\tif (self.settings.mode !== 'multi') return;\n\n\tvar orig_lock\t\t= self.lock;\n\tvar orig_unlock\t\t= self.unlock;\n\tlet sortable = true;\n\t\tlet drag_item:TomItem|undefined;\n\n\n\t/**\n\t * Add draggable attribute to item\n\t */\n\tself.hook('after','setupTemplates',() => {\n\n\t\tvar orig_render_item = self.settings.render.item;\n\n\t\tself.settings.render.item = (data:TomOption, escape:typeof escape_html) => {\n\t\t\tconst item = getDom(orig_render_item.call(self, data, escape)) as TomItem;\n\t\t\tsetAttr(item,{'draggable':'true'});\n\n\n\t\t\t// prevent doc_mousedown (see tom-select.ts)\n\t\t\tconst mousedown = (evt:Event) => {\n\t\t\t\tif( !sortable ) preventDefault(evt);\n\t\t\t\tevt.stopPropagation();\n\t\t\t}\n\n\t\t\tconst dragStart = (evt:Event) => {\n\t\t\t\tdrag_item = item;\n\t\t\t\t\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\titem.classList.add('ts-dragging');\n\t\t\t\t}, 0);\n\t\t\t\t\n\t\t\t}\n\n\t\t\tconst dragOver = (evt:Event) =>{\n\t\t\t\tevt.preventDefault();\n\t\t\t\titem.classList.add('ts-drag-over');\n\t\t\t\tmoveitem(item,drag_item);\n\t\t\t}\n\n\t\t\tconst dragLeave = () => {\n\t\t\t\titem.classList.remove('ts-drag-over');\n\t\t\t}\n\n\t\t\tconst moveitem = (targetitem:TomItem, dragitem:TomItem|undefined) => {\n\t\t\t\tif( dragitem === undefined ) return;\n\t\t\t\t\n\t\t\t\tif( isBefore(dragitem,item) ){\n\t\t\t\t\tinsertAfter(targetitem,dragitem);\n\t\t\t\t}else{\n\t\t\t\t\tinsertBefore(targetitem,dragitem);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst dragend = () => {\n\t\t\t\tdocument.querySelectorAll('.ts-drag-over').forEach(el=> el.classList.remove('ts-drag-over'));\n\t\t\t\tdrag_item?.classList.remove('ts-dragging');\n\t\t\t\tdrag_item = undefined;\n\n\t\t\t\tvar values:string[] = [];\n\t\t\t\tself.control.querySelectorAll(`[data-value]`).forEach((el:Element)=> {\n\t\t\t\t\tif( (<HTMLOptionElement>el).dataset.value ){\n\t\t\t\t\t\tlet value = (<HTMLOptionElement>el).dataset.value;\n\t\t\t\t\t\tif( value ){\n\t\t\t\t\t\t\tvalues.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tself.setValue(values);\n\t\t\t}\t\n\n\n\t\t\taddEvent(item,'mousedown', mousedown);\n\t\t\taddEvent(item,'dragstart', dragStart);\n\t\t\taddEvent(item,'dragenter', dragOver)\n\t\t\taddEvent(item,'dragover', dragOver);\n\t\t\taddEvent(item,'dragleave', dragLeave);\n\t\t\taddEvent(item,'dragend', dragend);\n\t\t\t\t\n\t\t\treturn item;\n\t\t}\t\n\t});\n\n\n\n\tself.hook('instead','lock',()=>{\n\t\tsortable = false;\n\t\treturn orig_lock.call(self);\n\t});\n\n\tself.hook('instead','unlock',()=>{\n\t\tsortable = true;\n\t\treturn orig_unlock.call(self);\n\t});\n\n};\n", "\nimport type TomSelect from './tom-select.ts';\nimport { TomLoadCallback } from './types/index.ts';\n\n\n/**\n * Converts a scalar to its best string representation\n * for hash keys and HTML attribute values.\n *\n * Transformations:\n * 'str' -> 'str'\n * null -> ''\n * undefined -> ''\n * true -> '1'\n * false -> '0'\n * 0 -> '0'\n * 1 -> '1'\n *\n */\nexport const hash_key = (value:undefined|null|boolean|string|number):string|null => {\n\tif (typeof value === 'undefined' || value === null) return null;\n\treturn get_hash(value);\n};\n\nexport const get_hash = (value:boolean|string|number):string => {\n\tif (typeof value === 'boolean') return value ? '1' : '0';\n\treturn value + '';\n};\n\n/**\n * Escapes a string for use within HTML.\n *\n */\nexport const escape_html = (str:string):string => {\n\treturn (str + '')\n\t\t.replace(/&/g, '&')\n\t\t.replace(/</g, '<')\n\t\t.replace(/>/g, '>')\n\t\t.replace(/\"/g, '"');\n};\n\n\n/**\n * use setTimeout if timeout > 0 \n */\nexport const timeout = (fn:()=>void,timeout:number): number | null => {\n\tif( timeout > 0 ){\n\t\treturn window.setTimeout(fn,timeout);\n\t}\n\n\tfn.call(null);\n\treturn null;\n}\n\n/**\n * Debounce the user provided load function\n *\n */\nexport const loadDebounce = (fn:(value:string,callback:TomLoadCallback) => void,delay:number) => {\n\tvar timeout: null|ReturnType<typeof setTimeout>;\n\treturn function(this:TomSelect, value:string,callback:TomLoadCallback) {\n\t\tvar self = this;\n\n\t\tif( timeout ){\n\t\t\tself.loading = Math.max(self.loading - 1, 0);\n\t\t\tclearTimeout(timeout);\n\t\t}\n\t\ttimeout = setTimeout(function() {\n\t\t\ttimeout = null;\n\t\t\tself.loadedSearches[value] = true;\n\t\t\tfn.call(self, value, callback);\n\n\t\t}, delay);\n\t};\n};\n\n\n/**\n * Debounce all fired events types listed in `types`\n * while executing the provided `fn`.\n *\n */\nexport const debounce_events = ( self:TomSelect, types:string[], fn:() => void ) => {\n\tvar type:string;\n\tvar trigger = self.trigger;\n\tvar event_args:{ [key: string]: any } = {};\n\n\t// override trigger method\n\tself.trigger = function(){\n\t\tvar type = arguments[0];\n\t\tif (types.indexOf(type) !== -1) {\n\t\t\tevent_args[type] = arguments;\n\t\t} else {\n\t\t\treturn trigger.apply(self, arguments);\n\t\t}\n\t};\n\n\t// invoke provided function\n\tfn.apply(self, []);\n\tself.trigger = trigger;\n\n\t// trigger queued events\n\tfor( type of types ){\n\t\tif( type in event_args ){\n\t\t\ttrigger.apply(self, event_args[type]);\n\t\t}\n\t}\n};\n\n\n/**\n * Determines the current selection within a text input control.\n * Returns an object containing:\n * - start\n * - length\n *\n * Note: \"selectionStart, selectionEnd ... apply only to inputs of types text, search, URL, tel and password\"\n * \t- https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange\n */\nexport const getSelection = (input:HTMLInputElement):{ start: number; length: number } => {\n\treturn {\n\t\tstart\t: input.selectionStart || 0,\n\t\tlength\t: (input.selectionEnd||0) - (input.selectionStart||0),\n\t};\n};\n\n\n/**\n * Prevent default\n *\n */\nexport const preventDefault = (evt?:Event, stop:boolean=false):void => {\n\tif( evt ){\n\t\tevt.preventDefault();\n\t\tif( stop ){\n\t\t\tevt.stopPropagation();\n\t\t}\n\t}\n}\n\n\n/**\n * Add event helper\n *\n */\nexport const addEvent = (target:EventTarget, type:string, callback:EventListenerOrEventListenerObject, options?:object):void => {\n\ttarget.addEventListener(type,callback,options);\n};\n\n\n/**\n * Return true if the requested key is down\n * Will return false if more than one control character is pressed ( when [ctrl+shift+a] != [ctrl+a] )\n * The current evt may not always set ( eg calling advanceSelection() )\n *\n */\nexport const isKeyDown = ( key_name:keyof (KeyboardEvent|MouseEvent), evt?:KeyboardEvent|MouseEvent ) => {\n\n\tif( !evt ){\n\t\treturn false;\n\t}\n\n\tif( !evt[key_name] ){\n\t\treturn false;\n\t}\n\n\tvar count = (evt.altKey?1:0) + (evt.ctrlKey?1:0) + (evt.shiftKey?1:0) + (evt.metaKey?1:0);\n\n\tif( count === 1 ){\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n\n/**\n * Get the id of an element\n * If the id attribute is not set, set the attribute with the given id\n *\n */\nexport const getId = (el:Element,id:string) => {\n\tconst existing_id = el.getAttribute('id');\n\tif( existing_id ){\n\t\treturn existing_id;\n\t}\n\n\tel.setAttribute('id',id);\n\treturn id;\n};\n\n\n/**\n * Returns a string with backslashes added before characters that need to be escaped.\n */\nexport const addSlashes = (str:string):string => {\n\treturn str.replace(/[\\\\\"']/g, '\\\\$&');\n};\n\n/**\n *\n */\nexport const append = ( parent:Element|DocumentFragment, node: string|Node|null|undefined ):void =>{\n\tif( node ) parent.append(node);\n};\n\n/**\n * Iterates over arrays and hashes.\n *\n * ```\n * iterate(this.items, function(item, id) {\n * // invoked for each item\n * });\n * ```\n *\n */\nexport const iterate = (object:[]|{[key:string]:any}, callback:(value:any,key:any)=>any) => {\n\n\tif ( Array.isArray(object)) {\n\t\tobject.forEach(callback);\n\n\t}else{\n\n\t\tfor (var key in object) {\n\t\t\tif (object.hasOwnProperty(key)) {\n\t\t\t\tcallback(object[key], key);\n\t\t\t}\n\t\t}\n\t}\n};\n", "\nimport { iterate } from './utils.ts';\n\n/**\n * Return a dom element from either a dom query string, jQuery object, a dom element or html string\n * https://stackoverflow.com/questions/494143/creating-a-new-dom-element-from-an-html-string-using-built-in-dom-methods-or-pro/35385518#35385518\n *\n * param query should be {}\n */\nexport const getDom = ( query:any ):HTMLElement => {\n\n\tif( query.jquery ){\n\t\treturn query[0];\n\t}\n\n\tif( query instanceof HTMLElement ){\n\t\treturn query;\n\t}\n\n\tif( isHtmlString(query) ){\n\t\tvar tpl = document.createElement('template');\n\t\ttpl.innerHTML = query.trim(); // Never return a text node of whitespace as the result\n\t\treturn tpl.content.firstChild as HTMLElement;\n\t}\n\n\treturn document.querySelector(query);\n};\n\nexport const isHtmlString = (arg:any): boolean => {\n\tif( typeof arg === 'string' && arg.indexOf('<') > -1 ){\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nexport const escapeQuery = (query:string):string => {\n\treturn query.replace(/['\"\\\\]/g, '\\\\$&');\n}\n\n/**\n * Dispatch an event\n *\n */\nexport const triggerEvent = ( dom_el:HTMLElement, event_name:string ):void => {\n\tvar event = document.createEvent('HTMLEvents');\n\tevent.initEvent(event_name, true, false);\n\tdom_el.dispatchEvent(event)\n};\n\n/**\n * Apply CSS rules to a dom element\n *\n */\nexport const applyCSS = ( dom_el:HTMLElement, css:{ [key: string]: string|number }):void => {\n\tObject.assign(dom_el.style, css);\n}\n\n\n/**\n * Add css classes\n *\n */\nexport const addClasses = ( elmts:HTMLElement|HTMLElement[], ...classes:string[]|string[][] ) => {\n\n\tvar norm_classes \t= classesArray(classes);\n\telmts\t\t\t\t= castAsArray(elmts);\n\n\telmts.map( el => {\n\t\tnorm_classes.map( cls => {\n\t\t\tel.classList.add( cls );\n\t\t});\n\t});\n}\n\n/**\n * Remove css classes\n *\n */\n export const removeClasses = ( elmts:HTMLElement|HTMLElement[], ...classes:string[]|string[][] ) => {\n\n \tvar norm_classes \t= classesArray(classes);\n\telmts\t\t\t\t= castAsArray(elmts);\n\n\telmts.map( el => {\n\t\tnorm_classes.map(cls => {\n\t \t\tel.classList.remove( cls );\n\t\t});\n \t});\n }\n\n\n/**\n * Return arguments\n *\n */\nexport const classesArray = (args:string[]|string[][]):string[] => {\n\tvar classes:string[] = [];\n\titerate( args, (_classes) =>{\n\t\tif( typeof _classes === 'string' ){\n\t\t\t_classes = _classes.trim().split(/[\\t\\n\\f\\r\\s]/);\n\t\t}\n\t\tif( Array.isArray(_classes) ){\n\t\t\tclasses = classes.concat(_classes);\n\t\t}\n\t});\n\n\treturn classes.filter(Boolean);\n}\n\n\n/**\n * Create an array from arg if it's not already an array\n *\n */\nexport const castAsArray = (arg:any):Array<any> => {\n\tif( !Array.isArray(arg) ){\n \t\targ = [arg];\n \t}\n\treturn arg;\n}\n\n\n/**\n * Get the closest node to the evt.target matching the selector\n * Stops at wrapper\n *\n */\nexport const parentMatch = ( target:null|HTMLElement, selector:string, wrapper?:HTMLElement ):HTMLElement|void => {\n\n\tif( wrapper && !wrapper.contains(target) ){\n\t\treturn;\n\t}\n\n\twhile( target && target.matches ){\n\n\t\tif( target.matches(selector) ){\n\t\t\treturn target;\n\t\t}\n\n\t\ttarget = target.parentNode as HTMLElement;\n\t}\n}\n\n\n/**\n * Get the first or last item from an array\n *\n * > 0 - right (last)\n * <= 0 - left (first)\n *\n */\nexport const getTail = ( list:Array<any>|NodeList, direction:number=0 ):any => {\n\n\tif( direction > 0 ){\n\t\treturn list[list.length-1];\n\t}\n\n\treturn list[0];\n}\n\n/**\n * Return true if an object is empty\n *\n */\nexport const isEmptyObject = (obj:object):boolean => {\n\treturn (Object.keys(obj).length === 0);\n}\n\n\n/**\n * Get the index of an element amongst sibling nodes of the same type\n *\n */\nexport const nodeIndex = ( el:null|Element, amongst?:string ):number => {\n\tif (!el) return -1;\n\n\tamongst = amongst || el.nodeName;\n\n\tvar i = 0;\n\twhile( el = el.previousElementSibling ){\n\n\t\tif( el.matches(amongst) ){\n\t\t\ti++;\n\t\t}\n\t}\n\treturn i;\n}\n\n\n/**\n * Set attributes of an element\n *\n */\nexport const setAttr = (el:Element,attrs:{ [key: string]: null|string|number }) => {\n\titerate( attrs,(val,attr) => {\n\t\tif( val == null ){\n\t\t\tel.removeAttribute(attr as string);\n\t\t}else{\n\t\t\tel.setAttribute(attr as string, ''+val);\n\t\t}\n\t});\n}\n\n\n/**\n * Replace a node\n */\nexport const replaceNode = ( existing:Node, replacement:Node ) => {\n\tif( existing.parentNode ) existing.parentNode.replaceChild(replacement, existing);\n}\n", "/**\n * Plugin: \"dropdown_header\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport type TomSelect from '../../tom-select.ts';\nimport { getDom } from '../../vanilla.ts';\nimport { preventDefault } from '../../utils.ts';\nimport { DHOptions } from './types.ts';\n\nexport default function(this:TomSelect, userOptions:DHOptions) {\n\tconst self = this;\n\n\tconst options = Object.assign({\n\t\ttitle : 'Untitled',\n\t\theaderClass : 'dropdown-header',\n\t\ttitleRowClass : 'dropdown-header-title',\n\t\tlabelClass : 'dropdown-header-label',\n\t\tcloseClass : 'dropdown-header-close',\n\n\t\thtml: (data:DHOptions) => {\n\t\t\treturn (\n\t\t\t\t'<div class=\"' + data.headerClass + '\">' +\n\t\t\t\t\t'<div class=\"' + data.titleRowClass + '\">' +\n\t\t\t\t\t\t'<span class=\"' + data.labelClass + '\">' + data.title + '</span>' +\n\t\t\t\t\t\t'<a class=\"' + data.closeClass + '\">×</a>' +\n\t\t\t\t\t'</div>' +\n\t\t\t\t'</div>'\n\t\t\t);\n\t\t}\n\t}, userOptions);\n\n\tself.on('initialize',()=>{\n\t\tvar header = getDom(options.html(options));\n\n\t\tvar close_link = header.querySelector('.'+options.closeClass);\n\t\tif( close_link ){\n\t\t\tclose_link.addEventListener('click',(evt)=>{\n\t\t\t\tpreventDefault(evt,true);\n\t\t\t\tself.close();\n\t\t\t});\n\t\t}\n\n\t\tself.dropdown.insertBefore(header, self.dropdown.firstChild);\n\t});\n\n};\n", "\nimport type TomSelect from './tom-select.ts';\nimport { TomLoadCallback } from './types/index.ts';\n\n\n/**\n * Converts a scalar to its best string representation\n * for hash keys and HTML attribute values.\n *\n * Transformations:\n * 'str' -> 'str'\n * null -> ''\n * undefined -> ''\n * true -> '1'\n * false -> '0'\n * 0 -> '0'\n * 1 -> '1'\n *\n */\nexport const hash_key = (value:undefined|null|boolean|string|number):string|null => {\n\tif (typeof value === 'undefined' || value === null) return null;\n\treturn get_hash(value);\n};\n\nexport const get_hash = (value:boolean|string|number):string => {\n\tif (typeof value === 'boolean') return value ? '1' : '0';\n\treturn value + '';\n};\n\n/**\n * Escapes a string for use within HTML.\n *\n */\nexport const escape_html = (str:string):string => {\n\treturn (str + '')\n\t\t.replace(/&/g, '&')\n\t\t.replace(/</g, '<')\n\t\t.replace(/>/g, '>')\n\t\t.replace(/\"/g, '"');\n};\n\n\n/**\n * use setTimeout if timeout > 0 \n */\nexport const timeout = (fn:()=>void,timeout:number): number | null => {\n\tif( timeout > 0 ){\n\t\treturn window.setTimeout(fn,timeout);\n\t}\n\n\tfn.call(null);\n\treturn null;\n}\n\n/**\n * Debounce the user provided load function\n *\n */\nexport const loadDebounce = (fn:(value:string,callback:TomLoadCallback) => void,delay:number) => {\n\tvar timeout: null|ReturnType<typeof setTimeout>;\n\treturn function(this:TomSelect, value:string,callback:TomLoadCallback) {\n\t\tvar self = this;\n\n\t\tif( timeout ){\n\t\t\tself.loading = Math.max(self.loading - 1, 0);\n\t\t\tclearTimeout(timeout);\n\t\t}\n\t\ttimeout = setTimeout(function() {\n\t\t\ttimeout = null;\n\t\t\tself.loadedSearches[value] = true;\n\t\t\tfn.call(self, value, callback);\n\n\t\t}, delay);\n\t};\n};\n\n\n/**\n * Debounce all fired events types listed in `types`\n * while executing the provided `fn`.\n *\n */\nexport const debounce_events = ( self:TomSelect, types:string[], fn:() => void ) => {\n\tvar type:string;\n\tvar trigger = self.trigger;\n\tvar event_args:{ [key: string]: any } = {};\n\n\t// override trigger method\n\tself.trigger = function(){\n\t\tvar type = arguments[0];\n\t\tif (types.indexOf(type) !== -1) {\n\t\t\tevent_args[type] = arguments;\n\t\t} else {\n\t\t\treturn trigger.apply(self, arguments);\n\t\t}\n\t};\n\n\t// invoke provided function\n\tfn.apply(self, []);\n\tself.trigger = trigger;\n\n\t// trigger queued events\n\tfor( type of types ){\n\t\tif( type in event_args ){\n\t\t\ttrigger.apply(self, event_args[type]);\n\t\t}\n\t}\n};\n\n\n/**\n * Determines the current selection within a text input control.\n * Returns an object containing:\n * - start\n * - length\n *\n * Note: \"selectionStart, selectionEnd ... apply only to inputs of types text, search, URL, tel and password\"\n * \t- https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange\n */\nexport const getSelection = (input:HTMLInputElement):{ start: number; length: number } => {\n\treturn {\n\t\tstart\t: input.selectionStart || 0,\n\t\tlength\t: (input.selectionEnd||0) - (input.selectionStart||0),\n\t};\n};\n\n\n/**\n * Prevent default\n *\n */\nexport const preventDefault = (evt?:Event, stop:boolean=false):void => {\n\tif( evt ){\n\t\tevt.preventDefault();\n\t\tif( stop ){\n\t\t\tevt.stopPropagation();\n\t\t}\n\t}\n}\n\n\n/**\n * Add event helper\n *\n */\nexport const addEvent = (target:EventTarget, type:string, callback:EventListenerOrEventListenerObject, options?:object):void => {\n\ttarget.addEventListener(type,callback,options);\n};\n\n\n/**\n * Return true if the requested key is down\n * Will return false if more than one control character is pressed ( when [ctrl+shift+a] != [ctrl+a] )\n * The current evt may not always set ( eg calling advanceSelection() )\n *\n */\nexport const isKeyDown = ( key_name:keyof (KeyboardEvent|MouseEvent), evt?:KeyboardEvent|MouseEvent ) => {\n\n\tif( !evt ){\n\t\treturn false;\n\t}\n\n\tif( !evt[key_name] ){\n\t\treturn false;\n\t}\n\n\tvar count = (evt.altKey?1:0) + (evt.ctrlKey?1:0) + (evt.shiftKey?1:0) + (evt.metaKey?1:0);\n\n\tif( count === 1 ){\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n\n/**\n * Get the id of an element\n * If the id attribute is not set, set the attribute with the given id\n *\n */\nexport const getId = (el:Element,id:string) => {\n\tconst existing_id = el.getAttribute('id');\n\tif( existing_id ){\n\t\treturn existing_id;\n\t}\n\n\tel.setAttribute('id',id);\n\treturn id;\n};\n\n\n/**\n * Returns a string with backslashes added before characters that need to be escaped.\n */\nexport const addSlashes = (str:string):string => {\n\treturn str.replace(/[\\\\\"']/g, '\\\\$&');\n};\n\n/**\n *\n */\nexport const append = ( parent:Element|DocumentFragment, node: string|Node|null|undefined ):void =>{\n\tif( node ) parent.append(node);\n};\n\n/**\n * Iterates over arrays and hashes.\n *\n * ```\n * iterate(this.items, function(item, id) {\n * // invoked for each item\n * });\n * ```\n *\n */\nexport const iterate = (object:[]|{[key:string]:any}, callback:(value:any,key:any)=>any) => {\n\n\tif ( Array.isArray(object)) {\n\t\tobject.forEach(callback);\n\n\t}else{\n\n\t\tfor (var key in object) {\n\t\t\tif (object.hasOwnProperty(key)) {\n\t\t\t\tcallback(object[key], key);\n\t\t\t}\n\t\t}\n\t}\n};\n", "\nimport { iterate } from './utils.ts';\n\n/**\n * Return a dom element from either a dom query string, jQuery object, a dom element or html string\n * https://stackoverflow.com/questions/494143/creating-a-new-dom-element-from-an-html-string-using-built-in-dom-methods-or-pro/35385518#35385518\n *\n * param query should be {}\n */\nexport const getDom = ( query:any ):HTMLElement => {\n\n\tif( query.jquery ){\n\t\treturn query[0];\n\t}\n\n\tif( query instanceof HTMLElement ){\n\t\treturn query;\n\t}\n\n\tif( isHtmlString(query) ){\n\t\tvar tpl = document.createElement('template');\n\t\ttpl.innerHTML = query.trim(); // Never return a text node of whitespace as the result\n\t\treturn tpl.content.firstChild as HTMLElement;\n\t}\n\n\treturn document.querySelector(query);\n};\n\nexport const isHtmlString = (arg:any): boolean => {\n\tif( typeof arg === 'string' && arg.indexOf('<') > -1 ){\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nexport const escapeQuery = (query:string):string => {\n\treturn query.replace(/['\"\\\\]/g, '\\\\$&');\n}\n\n/**\n * Dispatch an event\n *\n */\nexport const triggerEvent = ( dom_el:HTMLElement, event_name:string ):void => {\n\tvar event = document.createEvent('HTMLEvents');\n\tevent.initEvent(event_name, true, false);\n\tdom_el.dispatchEvent(event)\n};\n\n/**\n * Apply CSS rules to a dom element\n *\n */\nexport const applyCSS = ( dom_el:HTMLElement, css:{ [key: string]: string|number }):void => {\n\tObject.assign(dom_el.style, css);\n}\n\n\n/**\n * Add css classes\n *\n */\nexport const addClasses = ( elmts:HTMLElement|HTMLElement[], ...classes:string[]|string[][] ) => {\n\n\tvar norm_classes \t= classesArray(classes);\n\telmts\t\t\t\t= castAsArray(elmts);\n\n\telmts.map( el => {\n\t\tnorm_classes.map( cls => {\n\t\t\tel.classList.add( cls );\n\t\t});\n\t});\n}\n\n/**\n * Remove css classes\n *\n */\n export const removeClasses = ( elmts:HTMLElement|HTMLElement[], ...classes:string[]|string[][] ) => {\n\n \tvar norm_classes \t= classesArray(classes);\n\telmts\t\t\t\t= castAsArray(elmts);\n\n\telmts.map( el => {\n\t\tnorm_classes.map(cls => {\n\t \t\tel.classList.remove( cls );\n\t\t});\n \t});\n }\n\n\n/**\n * Return arguments\n *\n */\nexport const classesArray = (args:string[]|string[][]):string[] => {\n\tvar classes:string[] = [];\n\titerate( args, (_classes) =>{\n\t\tif( typeof _classes === 'string' ){\n\t\t\t_classes = _classes.trim().split(/[\\t\\n\\f\\r\\s]/);\n\t\t}\n\t\tif( Array.isArray(_classes) ){\n\t\t\tclasses = classes.concat(_classes);\n\t\t}\n\t});\n\n\treturn classes.filter(Boolean);\n}\n\n\n/**\n * Create an array from arg if it's not already an array\n *\n */\nexport const castAsArray = (arg:any):Array<any> => {\n\tif( !Array.isArray(arg) ){\n \t\targ = [arg];\n \t}\n\treturn arg;\n}\n\n\n/**\n * Get the closest node to the evt.target matching the selector\n * Stops at wrapper\n *\n */\nexport const parentMatch = ( target:null|HTMLElement, selector:string, wrapper?:HTMLElement ):HTMLElement|void => {\n\n\tif( wrapper && !wrapper.contains(target) ){\n\t\treturn;\n\t}\n\n\twhile( target && target.matches ){\n\n\t\tif( target.matches(selector) ){\n\t\t\treturn target;\n\t\t}\n\n\t\ttarget = target.parentNode as HTMLElement;\n\t}\n}\n\n\n/**\n * Get the first or last item from an array\n *\n * > 0 - right (last)\n * <= 0 - left (first)\n *\n */\nexport const getTail = ( list:Array<any>|NodeList, direction:number=0 ):any => {\n\n\tif( direction > 0 ){\n\t\treturn list[list.length-1];\n\t}\n\n\treturn list[0];\n}\n\n/**\n * Return true if an object is empty\n *\n */\nexport const isEmptyObject = (obj:object):boolean => {\n\treturn (Object.keys(obj).length === 0);\n}\n\n\n/**\n * Get the index of an element amongst sibling nodes of the same type\n *\n */\nexport const nodeIndex = ( el:null|Element, amongst?:string ):number => {\n\tif (!el) return -1;\n\n\tamongst = amongst || el.nodeName;\n\n\tvar i = 0;\n\twhile( el = el.previousElementSibling ){\n\n\t\tif( el.matches(amongst) ){\n\t\t\ti++;\n\t\t}\n\t}\n\treturn i;\n}\n\n\n/**\n * Set attributes of an element\n *\n */\nexport const setAttr = (el:Element,attrs:{ [key: string]: null|string|number }) => {\n\titerate( attrs,(val,attr) => {\n\t\tif( val == null ){\n\t\t\tel.removeAttribute(attr as string);\n\t\t}else{\n\t\t\tel.setAttribute(attr as string, ''+val);\n\t\t}\n\t});\n}\n\n\n/**\n * Replace a node\n */\nexport const replaceNode = ( existing:Node, replacement:Node ) => {\n\tif( existing.parentNode ) existing.parentNode.replaceChild(replacement, existing);\n}\n", "/**\n * Plugin: \"dropdown_input\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport type TomSelect from '../../tom-select.ts';\nimport { nodeIndex, removeClasses } from '../../vanilla.ts';\n\n\nexport default function(this:TomSelect) {\n\tvar self = this;\n\n\t/**\n\t * Moves the caret to the specified index.\n\t *\n\t * The input must be moved by leaving it in place and moving the\n\t * siblings, due to the fact that focus cannot be restored once lost\n\t * on mobile webkit devices\n\t *\n\t */\n\tself.hook('instead','setCaret',(new_pos:number) => {\n\n\t\tif( self.settings.mode === 'single' || !self.control.contains(self.control_input) ) {\n\t\t\tnew_pos = self.items.length;\n\t\t} else {\n\t\t\tnew_pos = Math.max(0, Math.min(self.items.length, new_pos));\n\n\t\t\tif( new_pos != self.caretPos && !self.isPending ){\n\n\t\t\t\tself.controlChildren().forEach((child,j) => {\n\t\t\t\t\tif( j < new_pos ){\n\t\t\t\t\t\tself.control_input.insertAdjacentElement('beforebegin', child );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.control.appendChild( child );\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tself.caretPos = new_pos;\n\t});\n\n\tself.hook('instead','moveCaret',(direction:number) => {\n\n\t\tif( !self.isFocused ) return;\n\n\t\t// move caret before or after selected items\n\t\tconst last_active\t\t= self.getLastActive(direction);\n\t\tif( last_active ){\n\t\t\tconst idx = nodeIndex(last_active);\n\t\t\tself.setCaret(direction > 0 ? idx + 1: idx);\n\t\t\tself.setActiveItem();\n\t\t\tremoveClasses(last_active as HTMLElement,'last-active');\n\n\t\t// move caret left or right of current position\n\t\t}else{\n\t\t\tself.setCaret(self.caretPos + direction);\n\n\t\t}\n\n\t});\n\n};\n", "export const KEY_A\t\t\t\t= 65;\nexport const KEY_RETURN\t\t\t= 13;\nexport const KEY_ESC\t\t\t= 27;\nexport const KEY_LEFT\t\t\t= 37;\nexport const KEY_UP\t\t\t\t= 38;\nexport const KEY_RIGHT\t\t\t= 39;\nexport const KEY_DOWN\t\t\t= 40;\nexport const KEY_BACKSPACE\t\t= 8;\nexport const KEY_DELETE\t\t\t= 46;\nexport const KEY_TAB\t\t\t= 9;\n\nexport const IS_MAC \t\t= typeof navigator === 'undefined' ? false : /Mac/.test(navigator.userAgent);\nexport const KEY_SHORTCUT\t\t= IS_MAC ? 'metaKey' : 'ctrlKey'; // ctrl key or apple key for ma\n", "\nimport type TomSelect from './tom-select.ts';\nimport { TomLoadCallback } from './types/index.ts';\n\n\n/**\n * Converts a scalar to its best string representation\n * for hash keys and HTML attribute values.\n *\n * Transformations:\n * 'str' -> 'str'\n * null -> ''\n * undefined -> ''\n * true -> '1'\n * false -> '0'\n * 0 -> '0'\n * 1 -> '1'\n *\n */\nexport const hash_key = (value:undefined|null|boolean|string|number):string|null => {\n\tif (typeof value === 'undefined' || value === null) return null;\n\treturn get_hash(value);\n};\n\nexport const get_hash = (value:boolean|string|number):string => {\n\tif (typeof value === 'boolean') return value ? '1' : '0';\n\treturn value + '';\n};\n\n/**\n * Escapes a string for use within HTML.\n *\n */\nexport const escape_html = (str:string):string => {\n\treturn (str + '')\n\t\t.replace(/&/g, '&')\n\t\t.replace(/</g, '<')\n\t\t.replace(/>/g, '>')\n\t\t.replace(/\"/g, '"');\n};\n\n\n/**\n * use setTimeout if timeout > 0 \n */\nexport const timeout = (fn:()=>void,timeout:number): number | null => {\n\tif( timeout > 0 ){\n\t\treturn window.setTimeout(fn,timeout);\n\t}\n\n\tfn.call(null);\n\treturn null;\n}\n\n/**\n * Debounce the user provided load function\n *\n */\nexport const loadDebounce = (fn:(value:string,callback:TomLoadCallback) => void,delay:number) => {\n\tvar timeout: null|ReturnType<typeof setTimeout>;\n\treturn function(this:TomSelect, value:string,callback:TomLoadCallback) {\n\t\tvar self = this;\n\n\t\tif( timeout ){\n\t\t\tself.loading = Math.max(self.loading - 1, 0);\n\t\t\tclearTimeout(timeout);\n\t\t}\n\t\ttimeout = setTimeout(function() {\n\t\t\ttimeout = null;\n\t\t\tself.loadedSearches[value] = true;\n\t\t\tfn.call(self, value, callback);\n\n\t\t}, delay);\n\t};\n};\n\n\n/**\n * Debounce all fired events types listed in `types`\n * while executing the provided `fn`.\n *\n */\nexport const debounce_events = ( self:TomSelect, types:string[], fn:() => void ) => {\n\tvar type:string;\n\tvar trigger = self.trigger;\n\tvar event_args:{ [key: string]: any } = {};\n\n\t// override trigger method\n\tself.trigger = function(){\n\t\tvar type = arguments[0];\n\t\tif (types.indexOf(type) !== -1) {\n\t\t\tevent_args[type] = arguments;\n\t\t} else {\n\t\t\treturn trigger.apply(self, arguments);\n\t\t}\n\t};\n\n\t// invoke provided function\n\tfn.apply(self, []);\n\tself.trigger = trigger;\n\n\t// trigger queued events\n\tfor( type of types ){\n\t\tif( type in event_args ){\n\t\t\ttrigger.apply(self, event_args[type]);\n\t\t}\n\t}\n};\n\n\n/**\n * Determines the current selection within a text input control.\n * Returns an object containing:\n * - start\n * - length\n *\n * Note: \"selectionStart, selectionEnd ... apply only to inputs of types text, search, URL, tel and password\"\n * \t- https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange\n */\nexport const getSelection = (input:HTMLInputElement):{ start: number; length: number } => {\n\treturn {\n\t\tstart\t: input.selectionStart || 0,\n\t\tlength\t: (input.selectionEnd||0) - (input.selectionStart||0),\n\t};\n};\n\n\n/**\n * Prevent default\n *\n */\nexport const preventDefault = (evt?:Event, stop:boolean=false):void => {\n\tif( evt ){\n\t\tevt.preventDefault();\n\t\tif( stop ){\n\t\t\tevt.stopPropagation();\n\t\t}\n\t}\n}\n\n\n/**\n * Add event helper\n *\n */\nexport const addEvent = (target:EventTarget, type:string, callback:EventListenerOrEventListenerObject, options?:object):void => {\n\ttarget.addEventListener(type,callback,options);\n};\n\n\n/**\n * Return true if the requested key is down\n * Will return false if more than one control character is pressed ( when [ctrl+shift+a] != [ctrl+a] )\n * The current evt may not always set ( eg calling advanceSelection() )\n *\n */\nexport const isKeyDown = ( key_name:keyof (KeyboardEvent|MouseEvent), evt?:KeyboardEvent|MouseEvent ) => {\n\n\tif( !evt ){\n\t\treturn false;\n\t}\n\n\tif( !evt[key_name] ){\n\t\treturn false;\n\t}\n\n\tvar count = (evt.altKey?1:0) + (evt.ctrlKey?1:0) + (evt.shiftKey?1:0) + (evt.metaKey?1:0);\n\n\tif( count === 1 ){\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n\n/**\n * Get the id of an element\n * If the id attribute is not set, set the attribute with the given id\n *\n */\nexport const getId = (el:Element,id:string) => {\n\tconst existing_id = el.getAttribute('id');\n\tif( existing_id ){\n\t\treturn existing_id;\n\t}\n\n\tel.setAttribute('id',id);\n\treturn id;\n};\n\n\n/**\n * Returns a string with backslashes added before characters that need to be escaped.\n */\nexport const addSlashes = (str:string):string => {\n\treturn str.replace(/[\\\\\"']/g, '\\\\$&');\n};\n\n/**\n *\n */\nexport const append = ( parent:Element|DocumentFragment, node: string|Node|null|undefined ):void =>{\n\tif( node ) parent.append(node);\n};\n\n/**\n * Iterates over arrays and hashes.\n *\n * ```\n * iterate(this.items, function(item, id) {\n * // invoked for each item\n * });\n * ```\n *\n */\nexport const iterate = (object:[]|{[key:string]:any}, callback:(value:any,key:any)=>any) => {\n\n\tif ( Array.isArray(object)) {\n\t\tobject.forEach(callback);\n\n\t}else{\n\n\t\tfor (var key in object) {\n\t\t\tif (object.hasOwnProperty(key)) {\n\t\t\t\tcallback(object[key], key);\n\t\t\t}\n\t\t}\n\t}\n};\n", "\nimport { iterate } from './utils.ts';\n\n/**\n * Return a dom element from either a dom query string, jQuery object, a dom element or html string\n * https://stackoverflow.com/questions/494143/creating-a-new-dom-element-from-an-html-string-using-built-in-dom-methods-or-pro/35385518#35385518\n *\n * param query should be {}\n */\nexport const getDom = ( query:any ):HTMLElement => {\n\n\tif( query.jquery ){\n\t\treturn query[0];\n\t}\n\n\tif( query instanceof HTMLElement ){\n\t\treturn query;\n\t}\n\n\tif( isHtmlString(query) ){\n\t\tvar tpl = document.createElement('template');\n\t\ttpl.innerHTML = query.trim(); // Never return a text node of whitespace as the result\n\t\treturn tpl.content.firstChild as HTMLElement;\n\t}\n\n\treturn document.querySelector(query);\n};\n\nexport const isHtmlString = (arg:any): boolean => {\n\tif( typeof arg === 'string' && arg.indexOf('<') > -1 ){\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nexport const escapeQuery = (query:string):string => {\n\treturn query.replace(/['\"\\\\]/g, '\\\\$&');\n}\n\n/**\n * Dispatch an event\n *\n */\nexport const triggerEvent = ( dom_el:HTMLElement, event_name:string ):void => {\n\tvar event = document.createEvent('HTMLEvents');\n\tevent.initEvent(event_name, true, false);\n\tdom_el.dispatchEvent(event)\n};\n\n/**\n * Apply CSS rules to a dom element\n *\n */\nexport const applyCSS = ( dom_el:HTMLElement, css:{ [key: string]: string|number }):void => {\n\tObject.assign(dom_el.style, css);\n}\n\n\n/**\n * Add css classes\n *\n */\nexport const addClasses = ( elmts:HTMLElement|HTMLElement[], ...classes:string[]|string[][] ) => {\n\n\tvar norm_classes \t= classesArray(classes);\n\telmts\t\t\t\t= castAsArray(elmts);\n\n\telmts.map( el => {\n\t\tnorm_classes.map( cls => {\n\t\t\tel.classList.add( cls );\n\t\t});\n\t});\n}\n\n/**\n * Remove css classes\n *\n */\n export const removeClasses = ( elmts:HTMLElement|HTMLElement[], ...classes:string[]|string[][] ) => {\n\n \tvar norm_classes \t= classesArray(classes);\n\telmts\t\t\t\t= castAsArray(elmts);\n\n\telmts.map( el => {\n\t\tnorm_classes.map(cls => {\n\t \t\tel.classList.remove( cls );\n\t\t});\n \t});\n }\n\n\n/**\n * Return arguments\n *\n */\nexport const classesArray = (args:string[]|string[][]):string[] => {\n\tvar classes:string[] = [];\n\titerate( args, (_classes) =>{\n\t\tif( typeof _classes === 'string' ){\n\t\t\t_classes = _classes.trim().split(/[\\t\\n\\f\\r\\s]/);\n\t\t}\n\t\tif( Array.isArray(_classes) ){\n\t\t\tclasses = classes.concat(_classes);\n\t\t}\n\t});\n\n\treturn classes.filter(Boolean);\n}\n\n\n/**\n * Create an array from arg if it's not already an array\n *\n */\nexport const castAsArray = (arg:any):Array<any> => {\n\tif( !Array.isArray(arg) ){\n \t\targ = [arg];\n \t}\n\treturn arg;\n}\n\n\n/**\n * Get the closest node to the evt.target matching the selector\n * Stops at wrapper\n *\n */\nexport const parentMatch = ( target:null|HTMLElement, selector:string, wrapper?:HTMLElement ):HTMLElement|void => {\n\n\tif( wrapper && !wrapper.contains(target) ){\n\t\treturn;\n\t}\n\n\twhile( target && target.matches ){\n\n\t\tif( target.matches(selector) ){\n\t\t\treturn target;\n\t\t}\n\n\t\ttarget = target.parentNode as HTMLElement;\n\t}\n}\n\n\n/**\n * Get the first or last item from an array\n *\n * > 0 - right (last)\n * <= 0 - left (first)\n *\n */\nexport const getTail = ( list:Array<any>|NodeList, direction:number=0 ):any => {\n\n\tif( direction > 0 ){\n\t\treturn list[list.length-1];\n\t}\n\n\treturn list[0];\n}\n\n/**\n * Return true if an object is empty\n *\n */\nexport const isEmptyObject = (obj:object):boolean => {\n\treturn (Object.keys(obj).length === 0);\n}\n\n\n/**\n * Get the index of an element amongst sibling nodes of the same type\n *\n */\nexport const nodeIndex = ( el:null|Element, amongst?:string ):number => {\n\tif (!el) return -1;\n\n\tamongst = amongst || el.nodeName;\n\n\tvar i = 0;\n\twhile( el = el.previousElementSibling ){\n\n\t\tif( el.matches(amongst) ){\n\t\t\ti++;\n\t\t}\n\t}\n\treturn i;\n}\n\n\n/**\n * Set attributes of an element\n *\n */\nexport const setAttr = (el:Element,attrs:{ [key: string]: null|string|number }) => {\n\titerate( attrs,(val,attr) => {\n\t\tif( val == null ){\n\t\t\tel.removeAttribute(attr as string);\n\t\t}else{\n\t\t\tel.setAttribute(attr as string, ''+val);\n\t\t}\n\t});\n}\n\n\n/**\n * Replace a node\n */\nexport const replaceNode = ( existing:Node, replacement:Node ) => {\n\tif( existing.parentNode ) existing.parentNode.replaceChild(replacement, existing);\n}\n", "/**\n * Plugin: \"dropdown_input\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport type TomSelect from '../../tom-select.ts';\nimport * as constants from '../../constants.ts';\nimport { getDom, addClasses } from '../../vanilla.ts';\nimport { addEvent, preventDefault } from '../../utils.ts';\n\n\nexport default function(this:TomSelect) {\n\tconst self = this;\n\n\tself.settings.shouldOpen = true; // make sure the input is shown even if there are no options to display in the dropdown\n\n\tself.hook('before','setup',()=>{\n\t\tself.focus_node\t\t= self.control;\n\n\t\taddClasses( self.control_input, 'dropdown-input');\n\n\t \tconst div = getDom('<div class=\"dropdown-input-wrap\">');\n\t\tdiv.append(self.control_input);\n\t\tself.dropdown.insertBefore(div, self.dropdown.firstChild);\n\n\t\t// set a placeholder in the select control\n\t\tconst placeholder = getDom('<input class=\"items-placeholder\" tabindex=\"-1\" />') as HTMLInputElement;\n\t\tplaceholder.placeholder = self.settings.placeholder ||'';\n\t\tself.control.append(placeholder);\n\n\t});\n\n\n\tself.on('initialize',()=>{\n\n\t\t// set tabIndex on control to -1, otherwise [shift+tab] will put focus right back on control_input\n\t\tself.control_input.addEventListener('keydown',(evt:KeyboardEvent) =>{\n\t\t//addEvent(self.control_input,'keydown' as const,(evt:KeyboardEvent) =>{\n\t\t\tswitch( evt.keyCode ){\n\t\t\t\tcase constants.KEY_ESC:\n\t\t\t\t\tif (self.isOpen) {\n\t\t\t\t\t\tpreventDefault(evt,true);\n\t\t\t\t\t\tself.close();\n\t\t\t\t\t}\n\t\t\t\t\tself.clearActiveItems();\n\t\t\t\treturn;\n\t\t\t\tcase constants.KEY_TAB:\n\t\t\t\t\tself.focus_node.tabIndex = -1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn self.onKeyDown.call(self,evt);\n\t\t});\n\n\t\tself.on('blur',()=>{\n\t\t\tself.focus_node.tabIndex = self.isDisabled ? -1 : self.tabIndex;\n\t\t});\n\n\n\t\t// give the control_input focus when the dropdown is open\n\t\tself.on('dropdown_open',() =>{\n\t\t\tself.control_input.focus();\n\t\t});\n\n\t\t// prevent onBlur from closing when focus is on the control_input\n\t\tconst orig_onBlur = self.onBlur;\n\t\tself.hook('instead','onBlur',(evt?:FocusEvent)=>{\n\t\t\tif( evt && evt.relatedTarget == self.control_input ) return;\n\t\t\treturn orig_onBlur.call(self);\n\t\t});\n\n\t\taddEvent(self.control_input,'blur', () => self.onBlur() );\n\n\t\t// return focus to control to allow further keyboard input\n\t\tself.hook('before','close',() =>{\n\n\t\t\tif( !self.isOpen ) return;\n\t\t\tself.focus_node.focus({preventScroll: true});\n\t\t});\n\n\t});\n\n};\n", "\nimport type TomSelect from './tom-select.ts';\nimport { TomLoadCallback } from './types/index.ts';\n\n\n/**\n * Converts a scalar to its best string representation\n * for hash keys and HTML attribute values.\n *\n * Transformations:\n * 'str' -> 'str'\n * null -> ''\n * undefined -> ''\n * true -> '1'\n * false -> '0'\n * 0 -> '0'\n * 1 -> '1'\n *\n */\nexport const hash_key = (value:undefined|null|boolean|string|number):string|null => {\n\tif (typeof value === 'undefined' || value === null) return null;\n\treturn get_hash(value);\n};\n\nexport const get_hash = (value:boolean|string|number):string => {\n\tif (typeof value === 'boolean') return value ? '1' : '0';\n\treturn value + '';\n};\n\n/**\n * Escapes a string for use within HTML.\n *\n */\nexport const escape_html = (str:string):string => {\n\treturn (str + '')\n\t\t.replace(/&/g, '&')\n\t\t.replace(/</g, '<')\n\t\t.replace(/>/g, '>')\n\t\t.replace(/\"/g, '"');\n};\n\n\n/**\n * use setTimeout if timeout > 0 \n */\nexport const timeout = (fn:()=>void,timeout:number): number | null => {\n\tif( timeout > 0 ){\n\t\treturn window.setTimeout(fn,timeout);\n\t}\n\n\tfn.call(null);\n\treturn null;\n}\n\n/**\n * Debounce the user provided load function\n *\n */\nexport const loadDebounce = (fn:(value:string,callback:TomLoadCallback) => void,delay:number) => {\n\tvar timeout: null|ReturnType<typeof setTimeout>;\n\treturn function(this:TomSelect, value:string,callback:TomLoadCallback) {\n\t\tvar self = this;\n\n\t\tif( timeout ){\n\t\t\tself.loading = Math.max(self.loading - 1, 0);\n\t\t\tclearTimeout(timeout);\n\t\t}\n\t\ttimeout = setTimeout(function() {\n\t\t\ttimeout = null;\n\t\t\tself.loadedSearches[value] = true;\n\t\t\tfn.call(self, value, callback);\n\n\t\t}, delay);\n\t};\n};\n\n\n/**\n * Debounce all fired events types listed in `types`\n * while executing the provided `fn`.\n *\n */\nexport const debounce_events = ( self:TomSelect, types:string[], fn:() => void ) => {\n\tvar type:string;\n\tvar trigger = self.trigger;\n\tvar event_args:{ [key: string]: any } = {};\n\n\t// override trigger method\n\tself.trigger = function(){\n\t\tvar type = arguments[0];\n\t\tif (types.indexOf(type) !== -1) {\n\t\t\tevent_args[type] = arguments;\n\t\t} else {\n\t\t\treturn trigger.apply(self, arguments);\n\t\t}\n\t};\n\n\t// invoke provided function\n\tfn.apply(self, []);\n\tself.trigger = trigger;\n\n\t// trigger queued events\n\tfor( type of types ){\n\t\tif( type in event_args ){\n\t\t\ttrigger.apply(self, event_args[type]);\n\t\t}\n\t}\n};\n\n\n/**\n * Determines the current selection within a text input control.\n * Returns an object containing:\n * - start\n * - length\n *\n * Note: \"selectionStart, selectionEnd ... apply only to inputs of types text, search, URL, tel and password\"\n * \t- https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange\n */\nexport const getSelection = (input:HTMLInputElement):{ start: number; length: number } => {\n\treturn {\n\t\tstart\t: input.selectionStart || 0,\n\t\tlength\t: (input.selectionEnd||0) - (input.selectionStart||0),\n\t};\n};\n\n\n/**\n * Prevent default\n *\n */\nexport const preventDefault = (evt?:Event, stop:boolean=false):void => {\n\tif( evt ){\n\t\tevt.preventDefault();\n\t\tif( stop ){\n\t\t\tevt.stopPropagation();\n\t\t}\n\t}\n}\n\n\n/**\n * Add event helper\n *\n */\nexport const addEvent = (target:EventTarget, type:string, callback:EventListenerOrEventListenerObject, options?:object):void => {\n\ttarget.addEventListener(type,callback,options);\n};\n\n\n/**\n * Return true if the requested key is down\n * Will return false if more than one control character is pressed ( when [ctrl+shift+a] != [ctrl+a] )\n * The current evt may not always set ( eg calling advanceSelection() )\n *\n */\nexport const isKeyDown = ( key_name:keyof (KeyboardEvent|MouseEvent), evt?:KeyboardEvent|MouseEvent ) => {\n\n\tif( !evt ){\n\t\treturn false;\n\t}\n\n\tif( !evt[key_name] ){\n\t\treturn false;\n\t}\n\n\tvar count = (evt.altKey?1:0) + (evt.ctrlKey?1:0) + (evt.shiftKey?1:0) + (evt.metaKey?1:0);\n\n\tif( count === 1 ){\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n\n/**\n * Get the id of an element\n * If the id attribute is not set, set the attribute with the given id\n *\n */\nexport const getId = (el:Element,id:string) => {\n\tconst existing_id = el.getAttribute('id');\n\tif( existing_id ){\n\t\treturn existing_id;\n\t}\n\n\tel.setAttribute('id',id);\n\treturn id;\n};\n\n\n/**\n * Returns a string with backslashes added before characters that need to be escaped.\n */\nexport const addSlashes = (str:string):string => {\n\treturn str.replace(/[\\\\\"']/g, '\\\\$&');\n};\n\n/**\n *\n */\nexport const append = ( parent:Element|DocumentFragment, node: string|Node|null|undefined ):void =>{\n\tif( node ) parent.append(node);\n};\n\n/**\n * Iterates over arrays and hashes.\n *\n * ```\n * iterate(this.items, function(item, id) {\n * // invoked for each item\n * });\n * ```\n *\n */\nexport const iterate = (object:[]|{[key:string]:any}, callback:(value:any,key:any)=>any) => {\n\n\tif ( Array.isArray(object)) {\n\t\tobject.forEach(callback);\n\n\t}else{\n\n\t\tfor (var key in object) {\n\t\t\tif (object.hasOwnProperty(key)) {\n\t\t\t\tcallback(object[key], key);\n\t\t\t}\n\t\t}\n\t}\n};\n", "/**\n * Plugin: \"input_autogrow\" (Tom Select)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport type TomSelect from '../../tom-select.ts';\nimport { addEvent } from '../../utils.ts';\n\nexport default function(this:TomSelect) {\n\tvar self\t\t\t\t\t= this;\n\n\tself.on('initialize',()=>{\n\n\n\t\tvar test_input\t\t\t\t= document.createElement('span');\n\t\tvar control\t\t\t\t\t= self.control_input;\n\t\ttest_input.style.cssText\t= 'position:absolute; top:-99999px; left:-99999px; width:auto; padding:0; white-space:pre; ';\n\n\t\tself.wrapper.appendChild(test_input);\n\n\n\t\tvar transfer_styles\t\t\t= [ 'letterSpacing', 'fontSize', 'fontFamily', 'fontWeight', 'textTransform' ];\n\n\t\tfor( const style_name of transfer_styles ){\n\t\t\t// @ts-ignore TS7015 https://stackoverflow.com/a/50506154/697576\n\t\t\ttest_input.style[style_name] = control.style[style_name];\n\t\t}\n\n\n\t\t/**\n\t\t * Set the control width\n\t\t *\n\t\t */\n\t\tvar resize = ()=>{\n\t\t\ttest_input.textContent\t= control.value;\n\t\t\tcontrol.style.width\t\t= test_input.clientWidth+'px';\n\t\t};\n\n\t\tresize();\n\t\tself.on('update item_add item_remove',resize);\n\t\taddEvent(control,'input', resize );\n\t\taddEvent(control,'keyup', resize );\n\t\taddEvent(control,'blur', resize );\n\t\taddEvent(control,'update', resize );\n\t});\n\n};\n", "/**\n * Plugin: \"input_autogrow\" (Tom Select)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport type TomSelect from '../../tom-select.ts';\n\nexport default function(this:TomSelect) {\n\tvar self = this;\n\tvar orig_deleteSelection = self.deleteSelection;\n\n\tthis.hook('instead','deleteSelection',(evt:KeyboardEvent) => {\n\n\t\tif( self.activeItems.length ){\n\t\t\treturn orig_deleteSelection.call(self, evt);\n\t\t}\n\n\t\treturn false;\n\t});\n\n};\n", "/**\n * Plugin: \"no_active_items\" (Tom Select)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport type TomSelect from '../../tom-select.ts';\n\nexport default function(this:TomSelect) {\n\tthis.hook('instead','setActiveItem',() => {});\n\tthis.hook('instead','selectAll',() => {});\n};\n", "export const KEY_A\t\t\t\t= 65;\nexport const KEY_RETURN\t\t\t= 13;\nexport const KEY_ESC\t\t\t= 27;\nexport const KEY_LEFT\t\t\t= 37;\nexport const KEY_UP\t\t\t\t= 38;\nexport const KEY_RIGHT\t\t\t= 39;\nexport const KEY_DOWN\t\t\t= 40;\nexport const KEY_BACKSPACE\t\t= 8;\nexport const KEY_DELETE\t\t\t= 46;\nexport const KEY_TAB\t\t\t= 9;\n\nexport const IS_MAC \t\t= typeof navigator === 'undefined' ? false : /Mac/.test(navigator.userAgent);\nexport const KEY_SHORTCUT\t\t= IS_MAC ? 'metaKey' : 'ctrlKey'; // ctrl key or apple key for ma\n", "\nimport { iterate } from './utils.ts';\n\n/**\n * Return a dom element from either a dom query string, jQuery object, a dom element or html string\n * https://stackoverflow.com/questions/494143/creating-a-new-dom-element-from-an-html-string-using-built-in-dom-methods-or-pro/35385518#35385518\n *\n * param query should be {}\n */\nexport const getDom = ( query:any ):HTMLElement => {\n\n\tif( query.jquery ){\n\t\treturn query[0];\n\t}\n\n\tif( query instanceof HTMLElement ){\n\t\treturn query;\n\t}\n\n\tif( isHtmlString(query) ){\n\t\tvar tpl = document.createElement('template');\n\t\ttpl.innerHTML = query.trim(); // Never return a text node of whitespace as the result\n\t\treturn tpl.content.firstChild as HTMLElement;\n\t}\n\n\treturn document.querySelector(query);\n};\n\nexport const isHtmlString = (arg:any): boolean => {\n\tif( typeof arg === 'string' && arg.indexOf('<') > -1 ){\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nexport const escapeQuery = (query:string):string => {\n\treturn query.replace(/['\"\\\\]/g, '\\\\$&');\n}\n\n/**\n * Dispatch an event\n *\n */\nexport const triggerEvent = ( dom_el:HTMLElement, event_name:string ):void => {\n\tvar event = document.createEvent('HTMLEvents');\n\tevent.initEvent(event_name, true, false);\n\tdom_el.dispatchEvent(event)\n};\n\n/**\n * Apply CSS rules to a dom element\n *\n */\nexport const applyCSS = ( dom_el:HTMLElement, css:{ [key: string]: string|number }):void => {\n\tObject.assign(dom_el.style, css);\n}\n\n\n/**\n * Add css classes\n *\n */\nexport const addClasses = ( elmts:HTMLElement|HTMLElement[], ...classes:string[]|string[][] ) => {\n\n\tvar norm_classes \t= classesArray(classes);\n\telmts\t\t\t\t= castAsArray(elmts);\n\n\telmts.map( el => {\n\t\tnorm_classes.map( cls => {\n\t\t\tel.classList.add( cls );\n\t\t});\n\t});\n}\n\n/**\n * Remove css classes\n *\n */\n export const removeClasses = ( elmts:HTMLElement|HTMLElement[], ...classes:string[]|string[][] ) => {\n\n \tvar norm_classes \t= classesArray(classes);\n\telmts\t\t\t\t= castAsArray(elmts);\n\n\telmts.map( el => {\n\t\tnorm_classes.map(cls => {\n\t \t\tel.classList.remove( cls );\n\t\t});\n \t});\n }\n\n\n/**\n * Return arguments\n *\n */\nexport const classesArray = (args:string[]|string[][]):string[] => {\n\tvar classes:string[] = [];\n\titerate( args, (_classes) =>{\n\t\tif( typeof _classes === 'string' ){\n\t\t\t_classes = _classes.trim().split(/[\\t\\n\\f\\r\\s]/);\n\t\t}\n\t\tif( Array.isArray(_classes) ){\n\t\t\tclasses = classes.concat(_classes);\n\t\t}\n\t});\n\n\treturn classes.filter(Boolean);\n}\n\n\n/**\n * Create an array from arg if it's not already an array\n *\n */\nexport const castAsArray = (arg:any):Array<any> => {\n\tif( !Array.isArray(arg) ){\n \t\targ = [arg];\n \t}\n\treturn arg;\n}\n\n\n/**\n * Get the closest node to the evt.target matching the selector\n * Stops at wrapper\n *\n */\nexport const parentMatch = ( target:null|HTMLElement, selector:string, wrapper?:HTMLElement ):HTMLElement|void => {\n\n\tif( wrapper && !wrapper.contains(target) ){\n\t\treturn;\n\t}\n\n\twhile( target && target.matches ){\n\n\t\tif( target.matches(selector) ){\n\t\t\treturn target;\n\t\t}\n\n\t\ttarget = target.parentNode as HTMLElement;\n\t}\n}\n\n\n/**\n * Get the first or last item from an array\n *\n * > 0 - right (last)\n * <= 0 - left (first)\n *\n */\nexport const getTail = ( list:Array<any>|NodeList, direction:number=0 ):any => {\n\n\tif( direction > 0 ){\n\t\treturn list[list.length-1];\n\t}\n\n\treturn list[0];\n}\n\n/**\n * Return true if an object is empty\n *\n */\nexport const isEmptyObject = (obj:object):boolean => {\n\treturn (Object.keys(obj).length === 0);\n}\n\n\n/**\n * Get the index of an element amongst sibling nodes of the same type\n *\n */\nexport const nodeIndex = ( el:null|Element, amongst?:string ):number => {\n\tif (!el) return -1;\n\n\tamongst = amongst || el.nodeName;\n\n\tvar i = 0;\n\twhile( el = el.previousElementSibling ){\n\n\t\tif( el.matches(amongst) ){\n\t\t\ti++;\n\t\t}\n\t}\n\treturn i;\n}\n\n\n/**\n * Set attributes of an element\n *\n */\nexport const setAttr = (el:Element,attrs:{ [key: string]: null|string|number }) => {\n\titerate( attrs,(val,attr) => {\n\t\tif( val == null ){\n\t\t\tel.removeAttribute(attr as string);\n\t\t}else{\n\t\t\tel.setAttribute(attr as string, ''+val);\n\t\t}\n\t});\n}\n\n\n/**\n * Replace a node\n */\nexport const replaceNode = ( existing:Node, replacement:Node ) => {\n\tif( existing.parentNode ) existing.parentNode.replaceChild(replacement, existing);\n}\n", "/**\n * Plugin: \"optgroup_columns\" (Tom Select.js)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport type TomSelect from '../../tom-select.ts';\nimport * as constants from '../../constants.ts';\nimport { parentMatch, nodeIndex } from '../../vanilla.ts';\n\nexport default function(this:TomSelect) {\n\tvar self = this;\n\n\tvar orig_keydown = self.onKeyDown;\n\n\tself.hook('instead','onKeyDown',(evt:KeyboardEvent)=>{\n\t\tvar index, option, options, optgroup;\n\n\t\tif( !self.isOpen || !(evt.keyCode === constants.KEY_LEFT || evt.keyCode === constants.KEY_RIGHT)) {\n\t\t\treturn orig_keydown.call(self,evt);\n\t\t}\n\n\t\tself.ignoreHover\t= true;\n\t\toptgroup\t\t\t= parentMatch(self.activeOption,'[data-group]');\n\t\tindex\t\t\t\t= nodeIndex(self.activeOption,'[data-selectable]');\n\n\t\tif( !optgroup ){\n\t\t\treturn;\n\t\t}\n\n\t\tif( evt.keyCode === constants.KEY_LEFT ){\n\t\t\toptgroup = optgroup.previousSibling;\n\t\t} else {\n\t\t\toptgroup = optgroup.nextSibling;\n\t\t}\n\n\t\tif( !optgroup ){\n\t\t\treturn;\n\t\t}\n\n\t\toptions\t\t\t\t= (<HTMLOptGroupElement>optgroup).querySelectorAll('[data-selectable]');\n\t\toption\t\t\t\t= options[ Math.min(options.length - 1, index) ] as HTMLElement;\n\n\t\tif( option ){\n\t\t\tself.setActiveOption(option);\n\t\t}\n\n\t});\n\n};\n", "\nimport type TomSelect from './tom-select.ts';\nimport { TomLoadCallback } from './types/index.ts';\n\n\n/**\n * Converts a scalar to its best string representation\n * for hash keys and HTML attribute values.\n *\n * Transformations:\n * 'str' -> 'str'\n * null -> ''\n * undefined -> ''\n * true -> '1'\n * false -> '0'\n * 0 -> '0'\n * 1 -> '1'\n *\n */\nexport const hash_key = (value:undefined|null|boolean|string|number):string|null => {\n\tif (typeof value === 'undefined' || value === null) return null;\n\treturn get_hash(value);\n};\n\nexport const get_hash = (value:boolean|string|number):string => {\n\tif (typeof value === 'boolean') return value ? '1' : '0';\n\treturn value + '';\n};\n\n/**\n * Escapes a string for use within HTML.\n *\n */\nexport const escape_html = (str:string):string => {\n\treturn (str + '')\n\t\t.replace(/&/g, '&')\n\t\t.replace(/</g, '<')\n\t\t.replace(/>/g, '>')\n\t\t.replace(/\"/g, '"');\n};\n\n\n/**\n * use setTimeout if timeout > 0 \n */\nexport const timeout = (fn:()=>void,timeout:number): number | null => {\n\tif( timeout > 0 ){\n\t\treturn window.setTimeout(fn,timeout);\n\t}\n\n\tfn.call(null);\n\treturn null;\n}\n\n/**\n * Debounce the user provided load function\n *\n */\nexport const loadDebounce = (fn:(value:string,callback:TomLoadCallback) => void,delay:number) => {\n\tvar timeout: null|ReturnType<typeof setTimeout>;\n\treturn function(this:TomSelect, value:string,callback:TomLoadCallback) {\n\t\tvar self = this;\n\n\t\tif( timeout ){\n\t\t\tself.loading = Math.max(self.loading - 1, 0);\n\t\t\tclearTimeout(timeout);\n\t\t}\n\t\ttimeout = setTimeout(function() {\n\t\t\ttimeout = null;\n\t\t\tself.loadedSearches[value] = true;\n\t\t\tfn.call(self, value, callback);\n\n\t\t}, delay);\n\t};\n};\n\n\n/**\n * Debounce all fired events types listed in `types`\n * while executing the provided `fn`.\n *\n */\nexport const debounce_events = ( self:TomSelect, types:string[], fn:() => void ) => {\n\tvar type:string;\n\tvar trigger = self.trigger;\n\tvar event_args:{ [key: string]: any } = {};\n\n\t// override trigger method\n\tself.trigger = function(){\n\t\tvar type = arguments[0];\n\t\tif (types.indexOf(type) !== -1) {\n\t\t\tevent_args[type] = arguments;\n\t\t} else {\n\t\t\treturn trigger.apply(self, arguments);\n\t\t}\n\t};\n\n\t// invoke provided function\n\tfn.apply(self, []);\n\tself.trigger = trigger;\n\n\t// trigger queued events\n\tfor( type of types ){\n\t\tif( type in event_args ){\n\t\t\ttrigger.apply(self, event_args[type]);\n\t\t}\n\t}\n};\n\n\n/**\n * Determines the current selection within a text input control.\n * Returns an object containing:\n * - start\n * - length\n *\n * Note: \"selectionStart, selectionEnd ... apply only to inputs of types text, search, URL, tel and password\"\n * \t- https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange\n */\nexport const getSelection = (input:HTMLInputElement):{ start: number; length: number } => {\n\treturn {\n\t\tstart\t: input.selectionStart || 0,\n\t\tlength\t: (input.selectionEnd||0) - (input.selectionStart||0),\n\t};\n};\n\n\n/**\n * Prevent default\n *\n */\nexport const preventDefault = (evt?:Event, stop:boolean=false):void => {\n\tif( evt ){\n\t\tevt.preventDefault();\n\t\tif( stop ){\n\t\t\tevt.stopPropagation();\n\t\t}\n\t}\n}\n\n\n/**\n * Add event helper\n *\n */\nexport const addEvent = (target:EventTarget, type:string, callback:EventListenerOrEventListenerObject, options?:object):void => {\n\ttarget.addEventListener(type,callback,options);\n};\n\n\n/**\n * Return true if the requested key is down\n * Will return false if more than one control character is pressed ( when [ctrl+shift+a] != [ctrl+a] )\n * The current evt may not always set ( eg calling advanceSelection() )\n *\n */\nexport const isKeyDown = ( key_name:keyof (KeyboardEvent|MouseEvent), evt?:KeyboardEvent|MouseEvent ) => {\n\n\tif( !evt ){\n\t\treturn false;\n\t}\n\n\tif( !evt[key_name] ){\n\t\treturn false;\n\t}\n\n\tvar count = (evt.altKey?1:0) + (evt.ctrlKey?1:0) + (evt.shiftKey?1:0) + (evt.metaKey?1:0);\n\n\tif( count === 1 ){\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n\n/**\n * Get the id of an element\n * If the id attribute is not set, set the attribute with the given id\n *\n */\nexport const getId = (el:Element,id:string) => {\n\tconst existing_id = el.getAttribute('id');\n\tif( existing_id ){\n\t\treturn existing_id;\n\t}\n\n\tel.setAttribute('id',id);\n\treturn id;\n};\n\n\n/**\n * Returns a string with backslashes added before characters that need to be escaped.\n */\nexport const addSlashes = (str:string):string => {\n\treturn str.replace(/[\\\\\"']/g, '\\\\$&');\n};\n\n/**\n *\n */\nexport const append = ( parent:Element|DocumentFragment, node: string|Node|null|undefined ):void =>{\n\tif( node ) parent.append(node);\n};\n\n/**\n * Iterates over arrays and hashes.\n *\n * ```\n * iterate(this.items, function(item, id) {\n * // invoked for each item\n * });\n * ```\n *\n */\nexport const iterate = (object:[]|{[key:string]:any}, callback:(value:any,key:any)=>any) => {\n\n\tif ( Array.isArray(object)) {\n\t\tobject.forEach(callback);\n\n\t}else{\n\n\t\tfor (var key in object) {\n\t\t\tif (object.hasOwnProperty(key)) {\n\t\t\t\tcallback(object[key], key);\n\t\t\t}\n\t\t}\n\t}\n};\n", "\nimport { iterate } from './utils.ts';\n\n/**\n * Return a dom element from either a dom query string, jQuery object, a dom element or html string\n * https://stackoverflow.com/questions/494143/creating-a-new-dom-element-from-an-html-string-using-built-in-dom-methods-or-pro/35385518#35385518\n *\n * param query should be {}\n */\nexport const getDom = ( query:any ):HTMLElement => {\n\n\tif( query.jquery ){\n\t\treturn query[0];\n\t}\n\n\tif( query instanceof HTMLElement ){\n\t\treturn query;\n\t}\n\n\tif( isHtmlString(query) ){\n\t\tvar tpl = document.createElement('template');\n\t\ttpl.innerHTML = query.trim(); // Never return a text node of whitespace as the result\n\t\treturn tpl.content.firstChild as HTMLElement;\n\t}\n\n\treturn document.querySelector(query);\n};\n\nexport const isHtmlString = (arg:any): boolean => {\n\tif( typeof arg === 'string' && arg.indexOf('<') > -1 ){\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nexport const escapeQuery = (query:string):string => {\n\treturn query.replace(/['\"\\\\]/g, '\\\\$&');\n}\n\n/**\n * Dispatch an event\n *\n */\nexport const triggerEvent = ( dom_el:HTMLElement, event_name:string ):void => {\n\tvar event = document.createEvent('HTMLEvents');\n\tevent.initEvent(event_name, true, false);\n\tdom_el.dispatchEvent(event)\n};\n\n/**\n * Apply CSS rules to a dom element\n *\n */\nexport const applyCSS = ( dom_el:HTMLElement, css:{ [key: string]: string|number }):void => {\n\tObject.assign(dom_el.style, css);\n}\n\n\n/**\n * Add css classes\n *\n */\nexport const addClasses = ( elmts:HTMLElement|HTMLElement[], ...classes:string[]|string[][] ) => {\n\n\tvar norm_classes \t= classesArray(classes);\n\telmts\t\t\t\t= castAsArray(elmts);\n\n\telmts.map( el => {\n\t\tnorm_classes.map( cls => {\n\t\t\tel.classList.add( cls );\n\t\t});\n\t});\n}\n\n/**\n * Remove css classes\n *\n */\n export const removeClasses = ( elmts:HTMLElement|HTMLElement[], ...classes:string[]|string[][] ) => {\n\n \tvar norm_classes \t= classesArray(classes);\n\telmts\t\t\t\t= castAsArray(elmts);\n\n\telmts.map( el => {\n\t\tnorm_classes.map(cls => {\n\t \t\tel.classList.remove( cls );\n\t\t});\n \t});\n }\n\n\n/**\n * Return arguments\n *\n */\nexport const classesArray = (args:string[]|string[][]):string[] => {\n\tvar classes:string[] = [];\n\titerate( args, (_classes) =>{\n\t\tif( typeof _classes === 'string' ){\n\t\t\t_classes = _classes.trim().split(/[\\t\\n\\f\\r\\s]/);\n\t\t}\n\t\tif( Array.isArray(_classes) ){\n\t\t\tclasses = classes.concat(_classes);\n\t\t}\n\t});\n\n\treturn classes.filter(Boolean);\n}\n\n\n/**\n * Create an array from arg if it's not already an array\n *\n */\nexport const castAsArray = (arg:any):Array<any> => {\n\tif( !Array.isArray(arg) ){\n \t\targ = [arg];\n \t}\n\treturn arg;\n}\n\n\n/**\n * Get the closest node to the evt.target matching the selector\n * Stops at wrapper\n *\n */\nexport const parentMatch = ( target:null|HTMLElement, selector:string, wrapper?:HTMLElement ):HTMLElement|void => {\n\n\tif( wrapper && !wrapper.contains(target) ){\n\t\treturn;\n\t}\n\n\twhile( target && target.matches ){\n\n\t\tif( target.matches(selector) ){\n\t\t\treturn target;\n\t\t}\n\n\t\ttarget = target.parentNode as HTMLElement;\n\t}\n}\n\n\n/**\n * Get the first or last item from an array\n *\n * > 0 - right (last)\n * <= 0 - left (first)\n *\n */\nexport const getTail = ( list:Array<any>|NodeList, direction:number=0 ):any => {\n\n\tif( direction > 0 ){\n\t\treturn list[list.length-1];\n\t}\n\n\treturn list[0];\n}\n\n/**\n * Return true if an object is empty\n *\n */\nexport const isEmptyObject = (obj:object):boolean => {\n\treturn (Object.keys(obj).length === 0);\n}\n\n\n/**\n * Get the index of an element amongst sibling nodes of the same type\n *\n */\nexport const nodeIndex = ( el:null|Element, amongst?:string ):number => {\n\tif (!el) return -1;\n\n\tamongst = amongst || el.nodeName;\n\n\tvar i = 0;\n\twhile( el = el.previousElementSibling ){\n\n\t\tif( el.matches(amongst) ){\n\t\t\ti++;\n\t\t}\n\t}\n\treturn i;\n}\n\n\n/**\n * Set attributes of an element\n *\n */\nexport const setAttr = (el:Element,attrs:{ [key: string]: null|string|number }) => {\n\titerate( attrs,(val,attr) => {\n\t\tif( val == null ){\n\t\t\tel.removeAttribute(attr as string);\n\t\t}else{\n\t\t\tel.setAttribute(attr as string, ''+val);\n\t\t}\n\t});\n}\n\n\n/**\n * Replace a node\n */\nexport const replaceNode = ( existing:Node, replacement:Node ) => {\n\tif( existing.parentNode ) existing.parentNode.replaceChild(replacement, existing);\n}\n", "/**\n * Plugin: \"remove_button\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport type TomSelect from '../../tom-select.ts';\nimport { getDom } from '../../vanilla.ts';\nimport { escape_html, preventDefault, addEvent } from '../../utils.ts';\nimport { TomOption, TomItem } from '../../types/index.ts';\nimport { RBOptions } from './types.ts';\n\nexport default function(this:TomSelect, userOptions:RBOptions) {\n\n\tconst options = Object.assign({\n\t\t\tlabel : '×',\n\t\t\ttitle : 'Remove',\n\t\t\tclassName : 'remove',\n\t\t\tappend : true\n\t\t}, userOptions);\n\n\n\t//options.className = 'remove-single';\n\tvar self\t\t\t= this;\n\n\t// override the render method to add remove button to each item\n\tif( !options.append ){\n\t\treturn;\n\t}\n\n\tvar html = '<a href=\"javascript:void(0)\" class=\"' + options.className + '\" tabindex=\"-1\" title=\"' + escape_html(options.title) + '\">' + options.label + '</a>';\n\n\tself.hook('after','setupTemplates',() => {\n\n\t\tvar orig_render_item = self.settings.render.item;\n\n\t\tself.settings.render.item = (data:TomOption, escape:typeof escape_html) => {\n\n\t\t\tvar item = getDom(orig_render_item.call(self, data, escape)) as TomItem;\n\n\t\t\tvar close_button = getDom(html);\n\t\t\titem.appendChild(close_button);\n\n\t\t\taddEvent(close_button,'mousedown',(evt) => {\n\t\t\t\tpreventDefault(evt,true);\n\t\t\t});\n\n\t\t\taddEvent(close_button,'click',(evt) => {\n\n\t\t\t\tif( self.isLocked ) return;\n\n\t\t\t\t// propagating will trigger the dropdown to show for single mode\n\t\t\t\tpreventDefault(evt,true);\n\n\t\t\t\tif( self.isLocked ) return;\n\t\t\t\tif( !self.shouldDelete([item],evt as MouseEvent) ) return;\n\n\t\t\t\tself.removeItem(item);\n\t\t\t\tself.refreshOptions(false);\n\t\t\t\tself.inputState();\n\t\t\t});\n\n\t\t\treturn item;\n\t\t};\n\n\t});\n\n\n};\n", "/**\n * Plugin: \"restore_on_backspace\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\nimport type TomSelect from '../../tom-select.ts';\nimport { TomOption } from '../../types/index.ts';\n\ntype TPluginOptions = {\n\ttext?:(option:TomOption)=>string,\n};\n\nexport default function(this:TomSelect, userOptions:TPluginOptions) {\n\tconst self = this;\n\n\tconst options = Object.assign({\n\t\ttext: (option:TomOption) => {\n\t\t\treturn option[self.settings.labelField];\n\t\t}\n\t},userOptions);\n\n\tself.on('item_remove',function(value:string){\n\t\tif( !self.isFocused ){\n\t\t\treturn;\n\t\t}\n\n\t\tif( self.control_input.value.trim() === '' ){\n\t\t\tvar option = self.options[value];\n\t\t\tif( option ){\n\t\t\t\tself.setTextboxValue(options.text.call(self, option));\n\t\t\t}\n\t\t}\n\t});\n\n};\n", "\nimport type TomSelect from './tom-select.ts';\nimport { TomLoadCallback } from './types/index.ts';\n\n\n/**\n * Converts a scalar to its best string representation\n * for hash keys and HTML attribute values.\n *\n * Transformations:\n * 'str' -> 'str'\n * null -> ''\n * undefined -> ''\n * true -> '1'\n * false -> '0'\n * 0 -> '0'\n * 1 -> '1'\n *\n */\nexport const hash_key = (value:undefined|null|boolean|string|number):string|null => {\n\tif (typeof value === 'undefined' || value === null) return null;\n\treturn get_hash(value);\n};\n\nexport const get_hash = (value:boolean|string|number):string => {\n\tif (typeof value === 'boolean') return value ? '1' : '0';\n\treturn value + '';\n};\n\n/**\n * Escapes a string for use within HTML.\n *\n */\nexport const escape_html = (str:string):string => {\n\treturn (str + '')\n\t\t.replace(/&/g, '&')\n\t\t.replace(/</g, '<')\n\t\t.replace(/>/g, '>')\n\t\t.replace(/\"/g, '"');\n};\n\n\n/**\n * use setTimeout if timeout > 0 \n */\nexport const timeout = (fn:()=>void,timeout:number): number | null => {\n\tif( timeout > 0 ){\n\t\treturn window.setTimeout(fn,timeout);\n\t}\n\n\tfn.call(null);\n\treturn null;\n}\n\n/**\n * Debounce the user provided load function\n *\n */\nexport const loadDebounce = (fn:(value:string,callback:TomLoadCallback) => void,delay:number) => {\n\tvar timeout: null|ReturnType<typeof setTimeout>;\n\treturn function(this:TomSelect, value:string,callback:TomLoadCallback) {\n\t\tvar self = this;\n\n\t\tif( timeout ){\n\t\t\tself.loading = Math.max(self.loading - 1, 0);\n\t\t\tclearTimeout(timeout);\n\t\t}\n\t\ttimeout = setTimeout(function() {\n\t\t\ttimeout = null;\n\t\t\tself.loadedSearches[value] = true;\n\t\t\tfn.call(self, value, callback);\n\n\t\t}, delay);\n\t};\n};\n\n\n/**\n * Debounce all fired events types listed in `types`\n * while executing the provided `fn`.\n *\n */\nexport const debounce_events = ( self:TomSelect, types:string[], fn:() => void ) => {\n\tvar type:string;\n\tvar trigger = self.trigger;\n\tvar event_args:{ [key: string]: any } = {};\n\n\t// override trigger method\n\tself.trigger = function(){\n\t\tvar type = arguments[0];\n\t\tif (types.indexOf(type) !== -1) {\n\t\t\tevent_args[type] = arguments;\n\t\t} else {\n\t\t\treturn trigger.apply(self, arguments);\n\t\t}\n\t};\n\n\t// invoke provided function\n\tfn.apply(self, []);\n\tself.trigger = trigger;\n\n\t// trigger queued events\n\tfor( type of types ){\n\t\tif( type in event_args ){\n\t\t\ttrigger.apply(self, event_args[type]);\n\t\t}\n\t}\n};\n\n\n/**\n * Determines the current selection within a text input control.\n * Returns an object containing:\n * - start\n * - length\n *\n * Note: \"selectionStart, selectionEnd ... apply only to inputs of types text, search, URL, tel and password\"\n * \t- https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange\n */\nexport const getSelection = (input:HTMLInputElement):{ start: number; length: number } => {\n\treturn {\n\t\tstart\t: input.selectionStart || 0,\n\t\tlength\t: (input.selectionEnd||0) - (input.selectionStart||0),\n\t};\n};\n\n\n/**\n * Prevent default\n *\n */\nexport const preventDefault = (evt?:Event, stop:boolean=false):void => {\n\tif( evt ){\n\t\tevt.preventDefault();\n\t\tif( stop ){\n\t\t\tevt.stopPropagation();\n\t\t}\n\t}\n}\n\n\n/**\n * Add event helper\n *\n */\nexport const addEvent = (target:EventTarget, type:string, callback:EventListenerOrEventListenerObject, options?:object):void => {\n\ttarget.addEventListener(type,callback,options);\n};\n\n\n/**\n * Return true if the requested key is down\n * Will return false if more than one control character is pressed ( when [ctrl+shift+a] != [ctrl+a] )\n * The current evt may not always set ( eg calling advanceSelection() )\n *\n */\nexport const isKeyDown = ( key_name:keyof (KeyboardEvent|MouseEvent), evt?:KeyboardEvent|MouseEvent ) => {\n\n\tif( !evt ){\n\t\treturn false;\n\t}\n\n\tif( !evt[key_name] ){\n\t\treturn false;\n\t}\n\n\tvar count = (evt.altKey?1:0) + (evt.ctrlKey?1:0) + (evt.shiftKey?1:0) + (evt.metaKey?1:0);\n\n\tif( count === 1 ){\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n\n/**\n * Get the id of an element\n * If the id attribute is not set, set the attribute with the given id\n *\n */\nexport const getId = (el:Element,id:string) => {\n\tconst existing_id = el.getAttribute('id');\n\tif( existing_id ){\n\t\treturn existing_id;\n\t}\n\n\tel.setAttribute('id',id);\n\treturn id;\n};\n\n\n/**\n * Returns a string with backslashes added before characters that need to be escaped.\n */\nexport const addSlashes = (str:string):string => {\n\treturn str.replace(/[\\\\\"']/g, '\\\\$&');\n};\n\n/**\n *\n */\nexport const append = ( parent:Element|DocumentFragment, node: string|Node|null|undefined ):void =>{\n\tif( node ) parent.append(node);\n};\n\n/**\n * Iterates over arrays and hashes.\n *\n * ```\n * iterate(this.items, function(item, id) {\n * // invoked for each item\n * });\n * ```\n *\n */\nexport const iterate = (object:[]|{[key:string]:any}, callback:(value:any,key:any)=>any) => {\n\n\tif ( Array.isArray(object)) {\n\t\tobject.forEach(callback);\n\n\t}else{\n\n\t\tfor (var key in object) {\n\t\t\tif (object.hasOwnProperty(key)) {\n\t\t\t\tcallback(object[key], key);\n\t\t\t}\n\t\t}\n\t}\n};\n", "\nimport { iterate } from './utils.ts';\n\n/**\n * Return a dom element from either a dom query string, jQuery object, a dom element or html string\n * https://stackoverflow.com/questions/494143/creating-a-new-dom-element-from-an-html-string-using-built-in-dom-methods-or-pro/35385518#35385518\n *\n * param query should be {}\n */\nexport const getDom = ( query:any ):HTMLElement => {\n\n\tif( query.jquery ){\n\t\treturn query[0];\n\t}\n\n\tif( query instanceof HTMLElement ){\n\t\treturn query;\n\t}\n\n\tif( isHtmlString(query) ){\n\t\tvar tpl = document.createElement('template');\n\t\ttpl.innerHTML = query.trim(); // Never return a text node of whitespace as the result\n\t\treturn tpl.content.firstChild as HTMLElement;\n\t}\n\n\treturn document.querySelector(query);\n};\n\nexport const isHtmlString = (arg:any): boolean => {\n\tif( typeof arg === 'string' && arg.indexOf('<') > -1 ){\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nexport const escapeQuery = (query:string):string => {\n\treturn query.replace(/['\"\\\\]/g, '\\\\$&');\n}\n\n/**\n * Dispatch an event\n *\n */\nexport const triggerEvent = ( dom_el:HTMLElement, event_name:string ):void => {\n\tvar event = document.createEvent('HTMLEvents');\n\tevent.initEvent(event_name, true, false);\n\tdom_el.dispatchEvent(event)\n};\n\n/**\n * Apply CSS rules to a dom element\n *\n */\nexport const applyCSS = ( dom_el:HTMLElement, css:{ [key: string]: string|number }):void => {\n\tObject.assign(dom_el.style, css);\n}\n\n\n/**\n * Add css classes\n *\n */\nexport const addClasses = ( elmts:HTMLElement|HTMLElement[], ...classes:string[]|string[][] ) => {\n\n\tvar norm_classes \t= classesArray(classes);\n\telmts\t\t\t\t= castAsArray(elmts);\n\n\telmts.map( el => {\n\t\tnorm_classes.map( cls => {\n\t\t\tel.classList.add( cls );\n\t\t});\n\t});\n}\n\n/**\n * Remove css classes\n *\n */\n export const removeClasses = ( elmts:HTMLElement|HTMLElement[], ...classes:string[]|string[][] ) => {\n\n \tvar norm_classes \t= classesArray(classes);\n\telmts\t\t\t\t= castAsArray(elmts);\n\n\telmts.map( el => {\n\t\tnorm_classes.map(cls => {\n\t \t\tel.classList.remove( cls );\n\t\t});\n \t});\n }\n\n\n/**\n * Return arguments\n *\n */\nexport const classesArray = (args:string[]|string[][]):string[] => {\n\tvar classes:string[] = [];\n\titerate( args, (_classes) =>{\n\t\tif( typeof _classes === 'string' ){\n\t\t\t_classes = _classes.trim().split(/[\\t\\n\\f\\r\\s]/);\n\t\t}\n\t\tif( Array.isArray(_classes) ){\n\t\t\tclasses = classes.concat(_classes);\n\t\t}\n\t});\n\n\treturn classes.filter(Boolean);\n}\n\n\n/**\n * Create an array from arg if it's not already an array\n *\n */\nexport const castAsArray = (arg:any):Array<any> => {\n\tif( !Array.isArray(arg) ){\n \t\targ = [arg];\n \t}\n\treturn arg;\n}\n\n\n/**\n * Get the closest node to the evt.target matching the selector\n * Stops at wrapper\n *\n */\nexport const parentMatch = ( target:null|HTMLElement, selector:string, wrapper?:HTMLElement ):HTMLElement|void => {\n\n\tif( wrapper && !wrapper.contains(target) ){\n\t\treturn;\n\t}\n\n\twhile( target && target.matches ){\n\n\t\tif( target.matches(selector) ){\n\t\t\treturn target;\n\t\t}\n\n\t\ttarget = target.parentNode as HTMLElement;\n\t}\n}\n\n\n/**\n * Get the first or last item from an array\n *\n * > 0 - right (last)\n * <= 0 - left (first)\n *\n */\nexport const getTail = ( list:Array<any>|NodeList, direction:number=0 ):any => {\n\n\tif( direction > 0 ){\n\t\treturn list[list.length-1];\n\t}\n\n\treturn list[0];\n}\n\n/**\n * Return true if an object is empty\n *\n */\nexport const isEmptyObject = (obj:object):boolean => {\n\treturn (Object.keys(obj).length === 0);\n}\n\n\n/**\n * Get the index of an element amongst sibling nodes of the same type\n *\n */\nexport const nodeIndex = ( el:null|Element, amongst?:string ):number => {\n\tif (!el) return -1;\n\n\tamongst = amongst || el.nodeName;\n\n\tvar i = 0;\n\twhile( el = el.previousElementSibling ){\n\n\t\tif( el.matches(amongst) ){\n\t\t\ti++;\n\t\t}\n\t}\n\treturn i;\n}\n\n\n/**\n * Set attributes of an element\n *\n */\nexport const setAttr = (el:Element,attrs:{ [key: string]: null|string|number }) => {\n\titerate( attrs,(val,attr) => {\n\t\tif( val == null ){\n\t\t\tel.removeAttribute(attr as string);\n\t\t}else{\n\t\t\tel.setAttribute(attr as string, ''+val);\n\t\t}\n\t});\n}\n\n\n/**\n * Replace a node\n */\nexport const replaceNode = ( existing:Node, replacement:Node ) => {\n\tif( existing.parentNode ) existing.parentNode.replaceChild(replacement, existing);\n}\n", "/**\n * Plugin: \"restore_on_backspace\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport type TomSelect from '../../tom-select.ts';\nimport { TomOption } from '../../types/index.ts';\nimport { addClasses } from '../../vanilla.ts';\n\nexport default function(this:TomSelect) {\n\tconst self\t\t\t\t\t\t\t= this;\n\tconst orig_canLoad\t\t\t\t\t= self.canLoad;\n\tconst orig_clearActiveOption\t\t= self.clearActiveOption;\n\tconst orig_loadCallback\t\t\t\t= self.loadCallback;\n\n\tvar pagination:{[key:string]:any}\t= {};\n\tvar dropdown_content:HTMLElement;\n\tvar loading_more\t\t\t\t\t= false;\n\tvar load_more_opt:HTMLElement;\n\tvar default_values: string[]\t\t= [];\n\n\tif( !self.settings.shouldLoadMore ){\n\n\t\t// return true if additional results should be loaded\n\t\tself.settings.shouldLoadMore = ():boolean=>{\n\n\t\t\tconst scroll_percent = dropdown_content.clientHeight / (dropdown_content.scrollHeight - dropdown_content.scrollTop);\n\t\t\tif( scroll_percent > 0.9 ){\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif( self.activeOption ){\n\t\t\t\tvar selectable\t= self.selectable();\n\t\t\t\tvar index\t\t= Array.from(selectable).indexOf(self.activeOption);\n\t\t\t\tif( index >= (selectable.length-2) ){\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\t}\n\n\n\tif( !self.settings.firstUrl ){\n\t\tthrow 'virtual_scroll plugin requires a firstUrl() method';\n\t}\n\n\n\t// in order for virtual scrolling to work,\n\t// options need to be ordered the same way they're returned from the remote data source\n\tself.settings.sortField\t\t\t= [{field:'$order'},{field:'$score'}];\n\n\n\t// can we load more results for given query?\n\tconst canLoadMore = (query:string):boolean => {\n\n\t\tif( typeof self.settings.maxOptions === 'number' && dropdown_content.children.length >= self.settings.maxOptions ){\n\t\t\treturn false;\n\t\t}\n\n\t\tif( (query in pagination) && pagination[query] ){\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t};\n\n\tconst clearFilter = (option:TomOption, value:string):boolean => {\n\t\tif( self.items.indexOf(value) >= 0 || default_values.indexOf(value) >= 0 ){\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t};\n\n\n\t// set the next url that will be\n\tself.setNextUrl = (value:string,next_url:any):void => {\n\t\tpagination[value] = next_url;\n\t};\n\n\t// getUrl() to be used in settings.load()\n\tself.getUrl = (query:string):any =>{\n\n\t\tif( query in pagination ){\n\t\t\tconst next_url = pagination[query];\n\t\t\tpagination[query] = false;\n\t\t\treturn next_url;\n\t\t}\n\n\t\t// if the user goes back to a previous query\n\t\t// we need to load the first page again\n\t\tself.clearPagination();\n\n\t\treturn self.settings.firstUrl.call(self,query);\n\t};\n\n\t// clear pagination\n\tself.clearPagination = ():void =>{\n\t\tpagination = {};\n\t};\n\n\t// don't clear the active option (and cause unwanted dropdown scroll)\n\t// while loading more results\n\tself.hook('instead','clearActiveOption',()=>{\n\n\t\tif( loading_more ){\n\t\t\treturn;\n\t\t}\n\n\t\treturn orig_clearActiveOption.call(self);\n\t});\n\n\t// override the canLoad method\n\tself.hook('instead','canLoad',(query:string)=>{\n\n\t\t// first time the query has been seen\n\t\tif( !(query in pagination) ){\n\t\t\treturn orig_canLoad.call(self,query);\n\t\t}\n\n\t\treturn canLoadMore(query);\n\t});\n\n\n\t// wrap the load\n\tself.hook('instead','loadCallback',( options:TomOption[], optgroups:TomOption[])=>{\n\n\t\tif( !loading_more ){\n\t\t\tself.clearOptions(clearFilter);\n\t\t}else if( load_more_opt ){\n\t\t\tconst first_option = options[0];\n\t\t\tif( first_option !== undefined ){\n\t\t\t\tload_more_opt.dataset.value\t\t= first_option[self.settings.valueField];\n\t\t\t}\n\t\t}\n\n\t\torig_loadCallback.call( self, options, optgroups);\n\n\t\tloading_more = false;\n\t});\n\n\n\t// add templates to dropdown\n\t//\tloading_more if we have another url in the queue\n\t//\tno_more_results if we don't have another url in the queue\n\tself.hook('after','refreshOptions',()=>{\n\n\t\tconst query\t\t= self.lastValue;\n\t\tvar option;\n\n\t\tif( canLoadMore(query) ){\n\n\t\t\toption = self.render('loading_more',{query:query});\n\t\t\tif( option ){\n\t\t\t\toption.setAttribute('data-selectable',''); // so that navigating dropdown with [down] keypresses can navigate to this node\n\t\t\t\tload_more_opt = option;\n\t\t\t}\n\n\t\t}else if( (query in pagination) && !dropdown_content.querySelector('.no-results') ){\n\t\t\toption = self.render('no_more_results',{query:query});\n\t\t}\n\n\t\tif( option ){\n\t\t\taddClasses(option,self.settings.optionClass);\n\t\t\tdropdown_content.append( option );\n\t\t}\n\n\t});\n\n\n\t// add scroll listener and default templates\n\tself.on('initialize',()=>{\n\t\tdefault_values = Object.keys(self.options);\n\t\tdropdown_content = self.dropdown_content;\n\n\t\t// default templates\n\t\tself.settings.render = Object.assign({}, {\n\t\t\tloading_more:() => {\n\t\t\t\treturn `<div class=\"loading-more-results\">Loading more results ... </div>`;\n\t\t\t},\n\t\t\tno_more_results:() =>{\n\t\t\t\treturn `<div class=\"no-more-results\">No more results</div>`;\n\t\t\t}\n\t\t},self.settings.render);\n\n\n\t\t// watch dropdown content scroll position\n\t\tdropdown_content.addEventListener('scroll',()=>{\n\n\t\t\tif( !self.settings.shouldLoadMore.call(self) ){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// !important: this will get checked again in load() but we still need to check here otherwise loading_more will be set to true\n\t\t\tif( !canLoadMore(self.lastValue) ){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// don't call load() too much\n\t\t\tif( loading_more ) return;\n\n\n\t\t\tloading_more = true;\n\t\t\tself.load.call(self,self.lastValue);\n\t\t});\n\t});\n\n};\n", "import TomSelect from './tom-select.ts';\n\nimport change_listener from './plugins/change_listener/plugin.ts';\nimport checkbox_options from './plugins/checkbox_options/plugin.ts';\nimport clear_button from './plugins/clear_button/plugin.ts';\nimport drag_drop from './plugins/drag_drop/plugin.ts';\nimport dropdown_header from './plugins/dropdown_header/plugin.ts';\nimport caret_position from './plugins/caret_position/plugin.ts';\nimport dropdown_input from './plugins/dropdown_input/plugin.ts';\nimport input_autogrow from './plugins/input_autogrow/plugin.ts';\nimport no_backspace_delete from './plugins/no_backspace_delete/plugin.ts';\nimport no_active_items from './plugins/no_active_items/plugin.ts';\nimport optgroup_columns from './plugins/optgroup_columns/plugin.ts';\nimport remove_button from './plugins/remove_button/plugin.ts';\nimport restore_on_backspace from './plugins/restore_on_backspace/plugin.ts';\nimport virtual_scroll from './plugins/virtual_scroll/plugin.ts';\n\nTomSelect.define('change_listener', change_listener);\nTomSelect.define('checkbox_options', checkbox_options);\nTomSelect.define('clear_button', clear_button);\nTomSelect.define('drag_drop', drag_drop);\nTomSelect.define('dropdown_header', dropdown_header);\nTomSelect.define('caret_position', caret_position);\nTomSelect.define('dropdown_input', dropdown_input);\nTomSelect.define('input_autogrow', input_autogrow);\nTomSelect.define('no_backspace_delete', no_backspace_delete);\nTomSelect.define('no_active_items', no_active_items);\nTomSelect.define('optgroup_columns', optgroup_columns);\nTomSelect.define('remove_button', remove_button);\nTomSelect.define('restore_on_backspace', restore_on_backspace);\nTomSelect.define('virtual_scroll', virtual_scroll);\n\nexport default TomSelect;\n", "import { Controller } from \"@hotwired/stimulus\"\nimport TomSelect from \"tom-select\"\nimport \"tom-select/dist/css/tom-select.bootstrap5.min.css\"\n\nexport default class extends Controller {\n\tstatic values = {\n\t\troute: String,\n\t\tvalue: String,\n\t\tlabel: String,\n\t\tsearch: String\n\t}\n\n\tconnect() {\n\t\tlet settings = {\n\t\t\tmaxOptions: 255,\n\t\t}\n\n\t\t// Clear and remove buttons\n\t\tsettings.plugins = { clear_button: { title: 'Clear' } }\n\t\tif (this.element.multiple) {\n\t\t\tsettings.plugins.remove_button = { title: 'Remove' }\n\t\t}\n\n\t\t// Remote data\n\t\tif (this.hasRouteValue) {\n\t\t\tvar remoteUrl = '/' + this.routeValue + '.json'\n\n\t\t\tsettings.valueField = this.valueValue\n\t\t\tsettings.labelField = this.labelValue\n\t\t\tsettings.searchField = this.searchValue\n\n\t\t\t// with search\n\t\t\tif (remoteUrl.endsWith('search.json')) {\n\t\t\t\tsettings.shouldLoad = function(query) {\n\t\t\t\t\treturn query.length > 2\n\t\t\t\t}\n\n\t\t\t\tsettings.load = function(query, callback) {\n\t\t\t\t\tvar self = this;\n\t\t\t\t\tif(self.loading > 1) {\n\t\t\t\t\t\tcallback()\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\n\t\t\t\t\tfetch(remoteUrl + '?q=' + encodeURIComponent(query))\n\t\t\t\t\t\t.then(response => response.json())\n\t\t\t\t\t\t.then(json => {\n\t\t\t\t\t\t\tcallback(json)\n\t\t\t\t\t\t}).catch(()=>{\n\t\t\t\t\t\t\tcallback()\n\t\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// without search (fetch once)\n\t\t\telse {\n\t\t\t\tsettings.load = function(query, callback) {\n\t\t\t\t\tvar self = this;\n\t\t\t\t\tif(self.loading > 1) {\n\t\t\t\t\t\tcallback()\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\n\t\t\t\t\tfetch(remoteUrl)\n\t\t\t\t\t\t.then(response => response.json())\n\t\t\t\t\t\t.then(json => {\n\t\t\t\t\t\t\tcallback(json)\n\t\t\t\t\t\t\tself.settings.load = null\n\t\t\t\t\t\t}).catch(()=>{\n\t\t\t\t\t\t\tcallback()\n\t\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tnew TomSelect(this.element, settings)\n\t}\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { Tooltip } from \"bootstrap\"\n\n// Connects to data-controller=\"tooltips\"\nexport default class extends Controller {\n connect() {\n\t new Tooltip(this.element)\n }\n}\n", "// Note: This regex matches even invalid JSON strings, but since we\u2019re\n// working on the output of `JSON.stringify` we know that only valid strings\n// are present (unless the user supplied a weird `options.indent` but in\n// that case we don\u2019t care since the output would be invalid anyway).\nconst stringOrChar = /(\"(?:[^\\\\\"]|\\\\.)*\")|[:,]/g;\n\nexport default function stringify(passedObj, options = {}) {\n const indent = JSON.stringify(\n [1],\n undefined,\n options.indent === undefined ? 2 : options.indent\n ).slice(2, -3);\n\n const maxLength =\n indent === \"\"\n ? Infinity\n : options.maxLength === undefined\n ? 80\n : options.maxLength;\n\n let { replacer } = options;\n\n return (function _stringify(obj, currentIndent, reserved) {\n if (obj && typeof obj.toJSON === \"function\") {\n obj = obj.toJSON();\n }\n\n const string = JSON.stringify(obj, replacer);\n\n if (string === undefined) {\n return string;\n }\n\n const length = maxLength - currentIndent.length - reserved;\n\n if (string.length <= length) {\n const prettified = string.replace(\n stringOrChar,\n (match, stringLiteral) => {\n return stringLiteral || `${match} `;\n }\n );\n if (prettified.length <= length) {\n return prettified;\n }\n }\n\n if (replacer != null) {\n obj = JSON.parse(string);\n replacer = undefined;\n }\n\n if (typeof obj === \"object\" && obj !== null) {\n const nextIndent = currentIndent + indent;\n const items = [];\n let index = 0;\n let start;\n let end;\n\n if (Array.isArray(obj)) {\n start = \"[\";\n end = \"]\";\n const { length } = obj;\n for (; index < length; index++) {\n items.push(\n _stringify(obj[index], nextIndent, index === length - 1 ? 0 : 1) ||\n \"null\"\n );\n }\n } else {\n start = \"{\";\n end = \"}\";\n const keys = Object.keys(obj);\n const { length } = keys;\n for (; index < length; index++) {\n const key = keys[index];\n const keyPart = `${JSON.stringify(key)}: `;\n const value = _stringify(\n obj[key],\n nextIndent,\n keyPart.length + (index === length - 1 ? 0 : 1)\n );\n if (value !== undefined) {\n items.push(keyPart + value);\n }\n }\n }\n\n if (items.length > 0) {\n return [start, indent + items.join(`,\\n${nextIndent}`), end].join(\n `\\n${currentIndent}`\n );\n }\n }\n\n return string;\n })(passedObj, \"\", 0);\n}\n", "import { extend } from 'vega-util';\nexport * from 'vega-util';\nimport { transforms } from 'vega-dataflow';\nexport { Dataflow, EventStream, MultiPulse, Operator, Parameters, Pulse, Transform, changeset, definition, ingest, isTuple, transform, transforms, tupleid } from 'vega-dataflow';\nimport * as tx from 'vega-transforms';\nimport * as vtx from 'vega-view-transforms';\nimport * as encode from 'vega-encode';\nimport * as geo from 'vega-geo';\nimport * as force from 'vega-force';\nimport * as tree from 'vega-hierarchy';\nimport * as label from 'vega-label';\nimport * as reg from 'vega-regression';\nimport * as voronoi from 'vega-voronoi';\nimport * as wordcloud from 'vega-wordcloud';\nimport * as xf from 'vega-crossfilter';\nexport * from 'vega-statistics';\nexport * from 'vega-time';\nexport * from 'vega-loader';\nexport * from 'vega-scenegraph';\nexport { interpolate, interpolateColors, interpolateRange, quantizeInterpolator, scale, scheme } from 'vega-scale';\nexport { projection } from 'vega-projection';\nexport { View } from 'vega-view';\nexport { defaultLocale, numberFormatDefaultLocale as formatLocale, locale, resetDefaultLocale, timeFormatDefaultLocale as timeFormatLocale } from 'vega-format';\nexport { expressionFunction } from 'vega-functions';\nexport { parse } from 'vega-parser';\nexport { context as runtimeContext } from 'vega-runtime';\nexport { codegenExpression, parseExpression } from 'vega-expression';\nexport { parseSelector } from 'vega-event-selector';\n\nvar version = \"5.30.0\";\n\n// -- Transforms -----\n\nextend(transforms, tx, vtx, encode, geo, force, label, tree, reg, voronoi, wordcloud, xf);\n\nexport { version };\n", "function accessor (fn, fields, name) {\n fn.fields = fields || [];\n fn.fname = name;\n return fn;\n}\nfunction accessorName(fn) {\n return fn == null ? null : fn.fname;\n}\nfunction accessorFields(fn) {\n return fn == null ? null : fn.fields;\n}\n\nfunction getter (path) {\n return path.length === 1 ? get1(path[0]) : getN(path);\n}\nconst get1 = field => function (obj) {\n return obj[field];\n};\nconst getN = path => {\n const len = path.length;\n return function (obj) {\n for (let i = 0; i < len; ++i) {\n obj = obj[path[i]];\n }\n return obj;\n };\n};\n\nfunction error (message) {\n throw Error(message);\n}\n\nfunction splitAccessPath (p) {\n const path = [],\n n = p.length;\n let q = null,\n b = 0,\n s = '',\n i,\n j,\n c;\n p = p + '';\n function push() {\n path.push(s + p.substring(i, j));\n s = '';\n i = j + 1;\n }\n for (i = j = 0; j < n; ++j) {\n c = p[j];\n if (c === '\\\\') {\n s += p.substring(i, j++);\n i = j;\n } else if (c === q) {\n push();\n q = null;\n b = -1;\n } else if (q) {\n continue;\n } else if (i === b && c === '\"') {\n i = j + 1;\n q = c;\n } else if (i === b && c === \"'\") {\n i = j + 1;\n q = c;\n } else if (c === '.' && !b) {\n if (j > i) {\n push();\n } else {\n i = j + 1;\n }\n } else if (c === '[') {\n if (j > i) push();\n b = i = j + 1;\n } else if (c === ']') {\n if (!b) error('Access path missing open bracket: ' + p);\n if (b > 0) push();\n b = 0;\n i = j + 1;\n }\n }\n if (b) error('Access path missing closing bracket: ' + p);\n if (q) error('Access path missing closing quote: ' + p);\n if (j > i) {\n j++;\n push();\n }\n return path;\n}\n\nfunction field (field, name, opt) {\n const path = splitAccessPath(field);\n field = path.length === 1 ? path[0] : field;\n return accessor((opt && opt.get || getter)(path), [field], name || field);\n}\n\nconst id = field('id');\nconst identity = accessor(_ => _, [], 'identity');\nconst zero = accessor(() => 0, [], 'zero');\nconst one = accessor(() => 1, [], 'one');\nconst truthy = accessor(() => true, [], 'true');\nconst falsy = accessor(() => false, [], 'false');\n\nfunction log$1(method, level, input) {\n const args = [level].concat([].slice.call(input));\n console[method].apply(console, args); // eslint-disable-line no-console\n}\n\nconst None = 0;\nconst Error$1 = 1;\nconst Warn = 2;\nconst Info = 3;\nconst Debug = 4;\nfunction logger (_, method) {\n let handler = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : log$1;\n let level = _ || None;\n return {\n level(_) {\n if (arguments.length) {\n level = +_;\n return this;\n } else {\n return level;\n }\n },\n error() {\n if (level >= Error$1) handler(method || 'error', 'ERROR', arguments);\n return this;\n },\n warn() {\n if (level >= Warn) handler(method || 'warn', 'WARN', arguments);\n return this;\n },\n info() {\n if (level >= Info) handler(method || 'log', 'INFO', arguments);\n return this;\n },\n debug() {\n if (level >= Debug) handler(method || 'log', 'DEBUG', arguments);\n return this;\n }\n };\n}\n\nvar isArray = Array.isArray;\n\nfunction isObject (_) {\n return _ === Object(_);\n}\n\nconst isLegalKey = key => key !== '__proto__';\nfunction mergeConfig() {\n for (var _len = arguments.length, configs = new Array(_len), _key = 0; _key < _len; _key++) {\n configs[_key] = arguments[_key];\n }\n return configs.reduce((out, source) => {\n for (const key in source) {\n if (key === 'signals') {\n // for signals, we merge the signals arrays\n // source signals take precedence over\n // existing signals with the same name\n out.signals = mergeNamed(out.signals, source.signals);\n } else {\n // otherwise, merge objects subject to recursion constraints\n // for legend block, recurse for the layout entry only\n // for style block, recurse for all properties\n // otherwise, no recursion: objects overwrite, no merging\n const r = key === 'legend' ? {\n layout: 1\n } : key === 'style' ? true : null;\n writeConfig(out, key, source[key], r);\n }\n }\n return out;\n }, {});\n}\nfunction writeConfig(output, key, value, recurse) {\n if (!isLegalKey(key)) return;\n let k, o;\n if (isObject(value) && !isArray(value)) {\n o = isObject(output[key]) ? output[key] : output[key] = {};\n for (k in value) {\n if (recurse && (recurse === true || recurse[k])) {\n writeConfig(o, k, value[k]);\n } else if (isLegalKey(k)) {\n o[k] = value[k];\n }\n }\n } else {\n output[key] = value;\n }\n}\nfunction mergeNamed(a, b) {\n if (a == null) return b;\n const map = {},\n out = [];\n function add(_) {\n if (!map[_.name]) {\n map[_.name] = 1;\n out.push(_);\n }\n }\n b.forEach(add);\n a.forEach(add);\n return out;\n}\n\nfunction peek (array) {\n return array[array.length - 1];\n}\n\nfunction toNumber (_) {\n return _ == null || _ === '' ? null : +_;\n}\n\nconst exp = sign => x => sign * Math.exp(x);\nconst log = sign => x => Math.log(sign * x);\nconst symlog = c => x => Math.sign(x) * Math.log1p(Math.abs(x / c));\nconst symexp = c => x => Math.sign(x) * Math.expm1(Math.abs(x)) * c;\nconst pow = exponent => x => x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\nfunction pan(domain, delta, lift, ground) {\n const d0 = lift(domain[0]),\n d1 = lift(peek(domain)),\n dd = (d1 - d0) * delta;\n return [ground(d0 - dd), ground(d1 - dd)];\n}\nfunction panLinear(domain, delta) {\n return pan(domain, delta, toNumber, identity);\n}\nfunction panLog(domain, delta) {\n var sign = Math.sign(domain[0]);\n return pan(domain, delta, log(sign), exp(sign));\n}\nfunction panPow(domain, delta, exponent) {\n return pan(domain, delta, pow(exponent), pow(1 / exponent));\n}\nfunction panSymlog(domain, delta, constant) {\n return pan(domain, delta, symlog(constant), symexp(constant));\n}\nfunction zoom(domain, anchor, scale, lift, ground) {\n const d0 = lift(domain[0]),\n d1 = lift(peek(domain)),\n da = anchor != null ? lift(anchor) : (d0 + d1) / 2;\n return [ground(da + (d0 - da) * scale), ground(da + (d1 - da) * scale)];\n}\nfunction zoomLinear(domain, anchor, scale) {\n return zoom(domain, anchor, scale, toNumber, identity);\n}\nfunction zoomLog(domain, anchor, scale) {\n const sign = Math.sign(domain[0]);\n return zoom(domain, anchor, scale, log(sign), exp(sign));\n}\nfunction zoomPow(domain, anchor, scale, exponent) {\n return zoom(domain, anchor, scale, pow(exponent), pow(1 / exponent));\n}\nfunction zoomSymlog(domain, anchor, scale, constant) {\n return zoom(domain, anchor, scale, symlog(constant), symexp(constant));\n}\n\nfunction quarter(date) {\n return 1 + ~~(new Date(date).getMonth() / 3);\n}\nfunction utcquarter(date) {\n return 1 + ~~(new Date(date).getUTCMonth() / 3);\n}\n\nfunction array (_) {\n return _ != null ? isArray(_) ? _ : [_] : [];\n}\n\n/**\n * Span-preserving range clamp. If the span of the input range is less\n * than (max - min) and an endpoint exceeds either the min or max value,\n * the range is translated such that the span is preserved and one\n * endpoint touches the boundary of the min/max range.\n * If the span exceeds (max - min), the range [min, max] is returned.\n */\nfunction clampRange (range, min, max) {\n let lo = range[0],\n hi = range[1],\n span;\n if (hi < lo) {\n span = hi;\n hi = lo;\n lo = span;\n }\n span = hi - lo;\n return span >= max - min ? [min, max] : [lo = Math.min(Math.max(lo, min), max - span), lo + span];\n}\n\nfunction isFunction (_) {\n return typeof _ === 'function';\n}\n\nconst DESCENDING = 'descending';\nfunction compare (fields, orders, opt) {\n opt = opt || {};\n orders = array(orders) || [];\n const ord = [],\n get = [],\n fmap = {},\n gen = opt.comparator || comparator;\n array(fields).forEach((f, i) => {\n if (f == null) return;\n ord.push(orders[i] === DESCENDING ? -1 : 1);\n get.push(f = isFunction(f) ? f : field(f, null, opt));\n (accessorFields(f) || []).forEach(_ => fmap[_] = 1);\n });\n return get.length === 0 ? null : accessor(gen(get, ord), Object.keys(fmap));\n}\nconst ascending = (u, v) => (u < v || u == null) && v != null ? -1 : (u > v || v == null) && u != null ? 1 : (v = v instanceof Date ? +v : v, u = u instanceof Date ? +u : u) !== u && v === v ? -1 : v !== v && u === u ? 1 : 0;\nconst comparator = (fields, orders) => fields.length === 1 ? compare1(fields[0], orders[0]) : compareN(fields, orders, fields.length);\nconst compare1 = (field, order) => function (a, b) {\n return ascending(field(a), field(b)) * order;\n};\nconst compareN = (fields, orders, n) => {\n orders.push(0); // pad zero for convenient lookup\n return function (a, b) {\n let f,\n c = 0,\n i = -1;\n while (c === 0 && ++i < n) {\n f = fields[i];\n c = ascending(f(a), f(b));\n }\n return c * orders[i];\n };\n};\n\nfunction constant (_) {\n return isFunction(_) ? _ : () => _;\n}\n\nfunction debounce (delay, handler) {\n let tid;\n return e => {\n if (tid) clearTimeout(tid);\n tid = setTimeout(() => (handler(e), tid = null), delay);\n };\n}\n\nfunction extend (_) {\n for (let x, k, i = 1, len = arguments.length; i < len; ++i) {\n x = arguments[i];\n for (k in x) {\n _[k] = x[k];\n }\n }\n return _;\n}\n\n/**\n * Return an array with minimum and maximum values, in the\n * form [min, max]. Ignores null, undefined, and NaN values.\n */\nfunction extent (array, f) {\n let i = 0,\n n,\n v,\n min,\n max;\n if (array && (n = array.length)) {\n if (f == null) {\n // find first valid value\n for (v = array[i]; i < n && (v == null || v !== v); v = array[++i]);\n min = max = v;\n\n // visit all other values\n for (; i < n; ++i) {\n v = array[i];\n // skip null/undefined; NaN will fail all comparisons\n if (v != null) {\n if (v < min) min = v;\n if (v > max) max = v;\n }\n }\n } else {\n // find first valid value\n for (v = f(array[i]); i < n && (v == null || v !== v); v = f(array[++i]));\n min = max = v;\n\n // visit all other values\n for (; i < n; ++i) {\n v = f(array[i]);\n // skip null/undefined; NaN will fail all comparisons\n if (v != null) {\n if (v < min) min = v;\n if (v > max) max = v;\n }\n }\n }\n }\n return [min, max];\n}\n\nfunction extentIndex (array, f) {\n const n = array.length;\n let i = -1,\n a,\n b,\n c,\n u,\n v;\n if (f == null) {\n while (++i < n) {\n b = array[i];\n if (b != null && b >= b) {\n a = c = b;\n break;\n }\n }\n if (i === n) return [-1, -1];\n u = v = i;\n while (++i < n) {\n b = array[i];\n if (b != null) {\n if (a > b) {\n a = b;\n u = i;\n }\n if (c < b) {\n c = b;\n v = i;\n }\n }\n }\n } else {\n while (++i < n) {\n b = f(array[i], i, array);\n if (b != null && b >= b) {\n a = c = b;\n break;\n }\n }\n if (i === n) return [-1, -1];\n u = v = i;\n while (++i < n) {\n b = f(array[i], i, array);\n if (b != null) {\n if (a > b) {\n a = b;\n u = i;\n }\n if (c < b) {\n c = b;\n v = i;\n }\n }\n }\n }\n return [u, v];\n}\n\nconst hop = Object.prototype.hasOwnProperty;\nfunction has (object, property) {\n return hop.call(object, property);\n}\n\nconst NULL = {};\nfunction fastmap (input) {\n let obj = {},\n test;\n function has$1(key) {\n return has(obj, key) && obj[key] !== NULL;\n }\n const map = {\n size: 0,\n empty: 0,\n object: obj,\n has: has$1,\n get(key) {\n return has$1(key) ? obj[key] : undefined;\n },\n set(key, value) {\n if (!has$1(key)) {\n ++map.size;\n if (obj[key] === NULL) --map.empty;\n }\n obj[key] = value;\n return this;\n },\n delete(key) {\n if (has$1(key)) {\n --map.size;\n ++map.empty;\n obj[key] = NULL;\n }\n return this;\n },\n clear() {\n map.size = map.empty = 0;\n map.object = obj = {};\n },\n test(_) {\n if (arguments.length) {\n test = _;\n return map;\n } else {\n return test;\n }\n },\n clean() {\n const next = {};\n let size = 0;\n for (const key in obj) {\n const value = obj[key];\n if (value !== NULL && (!test || !test(value))) {\n next[key] = value;\n ++size;\n }\n }\n map.size = size;\n map.empty = 0;\n map.object = obj = next;\n }\n };\n if (input) Object.keys(input).forEach(key => {\n map.set(key, input[key]);\n });\n return map;\n}\n\nfunction flush (range, value, threshold, left, right, center) {\n if (!threshold && threshold !== 0) return center;\n const t = +threshold;\n let a = range[0],\n b = peek(range),\n l;\n\n // swap endpoints if range is reversed\n if (b < a) {\n l = a;\n a = b;\n b = l;\n }\n\n // compare value to endpoints\n l = Math.abs(value - a);\n const r = Math.abs(b - value);\n\n // adjust if value is within threshold distance of endpoint\n return l < r && l <= t ? left : r <= t ? right : center;\n}\n\nfunction inherits (child, parent, members) {\n const proto = child.prototype = Object.create(parent.prototype);\n Object.defineProperty(proto, 'constructor', {\n value: child,\n writable: true,\n enumerable: true,\n configurable: true\n });\n return extend(proto, members);\n}\n\n/**\n * Predicate that returns true if the value lies within the span\n * of the given range. The left and right flags control the use\n * of inclusive (true) or exclusive (false) comparisons.\n */\nfunction inrange (value, range, left, right) {\n let r0 = range[0],\n r1 = range[range.length - 1],\n t;\n if (r0 > r1) {\n t = r0;\n r0 = r1;\n r1 = t;\n }\n left = left === undefined || left;\n right = right === undefined || right;\n return (left ? r0 <= value : r0 < value) && (right ? value <= r1 : value < r1);\n}\n\nfunction isBoolean (_) {\n return typeof _ === 'boolean';\n}\n\nfunction isDate (_) {\n return Object.prototype.toString.call(_) === '[object Date]';\n}\n\nfunction isIterable (_) {\n return _ && isFunction(_[Symbol.iterator]);\n}\n\nfunction isNumber (_) {\n return typeof _ === 'number';\n}\n\nfunction isRegExp (_) {\n return Object.prototype.toString.call(_) === '[object RegExp]';\n}\n\nfunction isString (_) {\n return typeof _ === 'string';\n}\n\nfunction key (fields, flat, opt) {\n if (fields) {\n fields = flat ? array(fields).map(f => f.replace(/\\\\(.)/g, '$1')) : array(fields);\n }\n const len = fields && fields.length,\n gen = opt && opt.get || getter,\n map = f => gen(flat ? [f] : splitAccessPath(f));\n let fn;\n if (!len) {\n fn = function () {\n return '';\n };\n } else if (len === 1) {\n const get = map(fields[0]);\n fn = function (_) {\n return '' + get(_);\n };\n } else {\n const get = fields.map(map);\n fn = function (_) {\n let s = '' + get[0](_),\n i = 0;\n while (++i < len) s += '|' + get[i](_);\n return s;\n };\n }\n return accessor(fn, fields, 'key');\n}\n\nfunction lerp (array, frac) {\n const lo = array[0],\n hi = peek(array),\n f = +frac;\n return !f ? lo : f === 1 ? hi : lo + f * (hi - lo);\n}\n\nconst DEFAULT_MAX_SIZE = 10000;\n\n// adapted from https://github.com/dominictarr/hashlru/ (MIT License)\nfunction lruCache (maxsize) {\n maxsize = +maxsize || DEFAULT_MAX_SIZE;\n let curr, prev, size;\n const clear = () => {\n curr = {};\n prev = {};\n size = 0;\n };\n const update = (key, value) => {\n if (++size > maxsize) {\n prev = curr;\n curr = {};\n size = 1;\n }\n return curr[key] = value;\n };\n clear();\n return {\n clear,\n has: key => has(curr, key) || has(prev, key),\n get: key => has(curr, key) ? curr[key] : has(prev, key) ? update(key, prev[key]) : undefined,\n set: (key, value) => has(curr, key) ? curr[key] = value : update(key, value)\n };\n}\n\nfunction merge (compare, array0, array1, output) {\n const n0 = array0.length,\n n1 = array1.length;\n if (!n1) return array0;\n if (!n0) return array1;\n const merged = output || new array0.constructor(n0 + n1);\n let i0 = 0,\n i1 = 0,\n i = 0;\n for (; i0 < n0 && i1 < n1; ++i) {\n merged[i] = compare(array0[i0], array1[i1]) > 0 ? array1[i1++] : array0[i0++];\n }\n for (; i0 < n0; ++i0, ++i) {\n merged[i] = array0[i0];\n }\n for (; i1 < n1; ++i1, ++i) {\n merged[i] = array1[i1];\n }\n return merged;\n}\n\nfunction repeat (str, reps) {\n let s = '';\n while (--reps >= 0) s += str;\n return s;\n}\n\nfunction pad (str, length, padchar, align) {\n const c = padchar || ' ',\n s = str + '',\n n = length - s.length;\n return n <= 0 ? s : align === 'left' ? repeat(c, n) + s : align === 'center' ? repeat(c, ~~(n / 2)) + s + repeat(c, Math.ceil(n / 2)) : s + repeat(c, n);\n}\n\n/**\n * Return the numerical span of an array: the difference between\n * the last and first values.\n */\nfunction span (array) {\n return array && peek(array) - array[0] || 0;\n}\n\nfunction $(x) {\n return isArray(x) ? '[' + x.map($) + ']' : isObject(x) || isString(x) ?\n // Output valid JSON and JS source strings.\n // See http://timelessrepo.com/json-isnt-a-javascript-subset\n JSON.stringify(x).replace('\\u2028', '\\\\u2028').replace('\\u2029', '\\\\u2029') : x;\n}\n\nfunction toBoolean (_) {\n return _ == null || _ === '' ? null : !_ || _ === 'false' || _ === '0' ? false : !!_;\n}\n\nconst defaultParser = _ => isNumber(_) ? _ : isDate(_) ? _ : Date.parse(_);\nfunction toDate (_, parser) {\n parser = parser || defaultParser;\n return _ == null || _ === '' ? null : parser(_);\n}\n\nfunction toString (_) {\n return _ == null || _ === '' ? null : _ + '';\n}\n\nfunction toSet (_) {\n const s = {},\n n = _.length;\n for (let i = 0; i < n; ++i) s[_[i]] = true;\n return s;\n}\n\nfunction truncate (str, length, align, ellipsis) {\n const e = ellipsis != null ? ellipsis : '\\u2026',\n s = str + '',\n n = s.length,\n l = Math.max(0, length - e.length);\n return n <= length ? s : align === 'left' ? e + s.slice(n - l) : align === 'center' ? s.slice(0, Math.ceil(l / 2)) + e + s.slice(n - ~~(l / 2)) : s.slice(0, l) + e;\n}\n\nfunction visitArray (array, filter, visitor) {\n if (array) {\n if (filter) {\n const n = array.length;\n for (let i = 0; i < n; ++i) {\n const t = filter(array[i]);\n if (t) visitor(t, i, array);\n }\n } else {\n array.forEach(visitor);\n }\n }\n}\n\nexport { Debug, Error$1 as Error, Info, None, Warn, accessor, accessorFields, accessorName, array, ascending, clampRange, compare, constant, debounce, error, extend, extent, extentIndex, falsy, fastmap, field, flush, has as hasOwnProperty, id, identity, inherits, inrange, isArray, isBoolean, isDate, isFunction, isIterable, isNumber, isObject, isRegExp, isString, key, lerp, logger, lruCache, merge, mergeConfig, one, pad, panLinear, panLog, panPow, panSymlog, peek, quarter, repeat, span, splitAccessPath, $ as stringValue, toBoolean, toDate, toNumber, toSet, toString, truncate, truthy, utcquarter, visitArray, writeConfig, zero, zoomLinear, zoomLog, zoomPow, zoomSymlog };\n", "var EOL = {},\n EOF = {},\n QUOTE = 34,\n NEWLINE = 10,\n RETURN = 13;\n\nfunction objectConverter(columns) {\n return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"] || \\\"\\\"\";\n }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n var object = objectConverter(columns);\n return function(row, i) {\n return f(object(row), i, columns);\n };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n var columnSet = Object.create(null),\n columns = [];\n\n rows.forEach(function(row) {\n for (var column in row) {\n if (!(column in columnSet)) {\n columns.push(columnSet[column] = column);\n }\n }\n });\n\n return columns;\n}\n\nfunction pad(value, width) {\n var s = value + \"\", length = s.length;\n return length < width ? new Array(width - length + 1).join(0) + s : s;\n}\n\nfunction formatYear(year) {\n return year < 0 ? \"-\" + pad(-year, 6)\n : year > 9999 ? \"+\" + pad(year, 6)\n : pad(year, 4);\n}\n\nfunction formatDate(date) {\n var hours = date.getUTCHours(),\n minutes = date.getUTCMinutes(),\n seconds = date.getUTCSeconds(),\n milliseconds = date.getUTCMilliseconds();\n return isNaN(date) ? \"Invalid Date\"\n : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n : \"\");\n}\n\nexport default function(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) return convert(row, i - 1);\n columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n });\n rows.columns = columns || [];\n return rows;\n }\n\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\n // Unescape quotes.\n var i, j = I, c;\n if (text.charCodeAt(j) === QUOTE) {\n while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n function preformatBody(rows, columns) {\n return rows.map(function(row) {\n return columns.map(function(column) {\n return formatValue(row[column]);\n }).join(delimiter);\n });\n }\n\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n }\n\n function formatBody(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return preformatBody(rows, columns).join(\"\\n\");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(value) {\n return value == null ? \"\"\n : value instanceof Date ? formatDate(value)\n : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n : value;\n }\n\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatBody: formatBody,\n formatRows: formatRows,\n formatRow: formatRow,\n formatValue: formatValue\n };\n}\n", "export default function(x) {\n return x;\n}\n", "import identity from \"./identity.js\";\n\nexport default function(transform) {\n if (transform == null) return identity;\n var x0,\n y0,\n kx = transform.scale[0],\n ky = transform.scale[1],\n dx = transform.translate[0],\n dy = transform.translate[1];\n return function(input, i) {\n if (!i) x0 = y0 = 0;\n var j = 2, n = input.length, output = new Array(n);\n output[0] = (x0 += input[0]) * kx + dx;\n output[1] = (y0 += input[1]) * ky + dy;\n while (j < n) output[j] = input[j], ++j;\n return output;\n };\n}\n", "export default function(array, n) {\n var t, j = array.length, i = j - n;\n while (i < --j) t = array[i], array[i++] = array[j], array[j] = t;\n}\n", "import reverse from \"./reverse.js\";\nimport transform from \"./transform.js\";\n\nexport default function(topology, o) {\n if (typeof o === \"string\") o = topology.objects[o];\n return o.type === \"GeometryCollection\"\n ? {type: \"FeatureCollection\", features: o.geometries.map(function(o) { return feature(topology, o); })}\n : feature(topology, o);\n}\n\nfunction feature(topology, o) {\n var id = o.id,\n bbox = o.bbox,\n properties = o.properties == null ? {} : o.properties,\n geometry = object(topology, o);\n return id == null && bbox == null ? {type: \"Feature\", properties: properties, geometry: geometry}\n : bbox == null ? {type: \"Feature\", id: id, properties: properties, geometry: geometry}\n : {type: \"Feature\", id: id, bbox: bbox, properties: properties, geometry: geometry};\n}\n\nexport function object(topology, o) {\n var transformPoint = transform(topology.transform),\n arcs = topology.arcs;\n\n function arc(i, points) {\n if (points.length) points.pop();\n for (var a = arcs[i < 0 ? ~i : i], k = 0, n = a.length; k < n; ++k) {\n points.push(transformPoint(a[k], k));\n }\n if (i < 0) reverse(points, n);\n }\n\n function point(p) {\n return transformPoint(p);\n }\n\n function line(arcs) {\n var points = [];\n for (var i = 0, n = arcs.length; i < n; ++i) arc(arcs[i], points);\n if (points.length < 2) points.push(points[0]); // This should never happen per the specification.\n return points;\n }\n\n function ring(arcs) {\n var points = line(arcs);\n while (points.length < 4) points.push(points[0]); // This may happen if an arc has only two points.\n return points;\n }\n\n function polygon(arcs) {\n return arcs.map(ring);\n }\n\n function geometry(o) {\n var type = o.type, coordinates;\n switch (type) {\n case \"GeometryCollection\": return {type: type, geometries: o.geometries.map(geometry)};\n case \"Point\": coordinates = point(o.coordinates); break;\n case \"MultiPoint\": coordinates = o.coordinates.map(point); break;\n case \"LineString\": coordinates = line(o.arcs); break;\n case \"MultiLineString\": coordinates = o.arcs.map(line); break;\n case \"Polygon\": coordinates = polygon(o.arcs); break;\n case \"MultiPolygon\": coordinates = o.arcs.map(polygon); break;\n default: return null;\n }\n return {type: type, coordinates: coordinates};\n }\n\n return geometry(o);\n}\n", "export default function(topology, arcs) {\n var stitchedArcs = {},\n fragmentByStart = {},\n fragmentByEnd = {},\n fragments = [],\n emptyIndex = -1;\n\n // Stitch empty arcs first, since they may be subsumed by other arcs.\n arcs.forEach(function(i, j) {\n var arc = topology.arcs[i < 0 ? ~i : i], t;\n if (arc.length < 3 && !arc[1][0] && !arc[1][1]) {\n t = arcs[++emptyIndex], arcs[emptyIndex] = i, arcs[j] = t;\n }\n });\n\n arcs.forEach(function(i) {\n var e = ends(i),\n start = e[0],\n end = e[1],\n f, g;\n\n if (f = fragmentByEnd[start]) {\n delete fragmentByEnd[f.end];\n f.push(i);\n f.end = end;\n if (g = fragmentByStart[end]) {\n delete fragmentByStart[g.start];\n var fg = g === f ? f : f.concat(g);\n fragmentByStart[fg.start = f.start] = fragmentByEnd[fg.end = g.end] = fg;\n } else {\n fragmentByStart[f.start] = fragmentByEnd[f.end] = f;\n }\n } else if (f = fragmentByStart[end]) {\n delete fragmentByStart[f.start];\n f.unshift(i);\n f.start = start;\n if (g = fragmentByEnd[start]) {\n delete fragmentByEnd[g.end];\n var gf = g === f ? f : g.concat(f);\n fragmentByStart[gf.start = g.start] = fragmentByEnd[gf.end = f.end] = gf;\n } else {\n fragmentByStart[f.start] = fragmentByEnd[f.end] = f;\n }\n } else {\n f = [i];\n fragmentByStart[f.start = start] = fragmentByEnd[f.end = end] = f;\n }\n });\n\n function ends(i) {\n var arc = topology.arcs[i < 0 ? ~i : i], p0 = arc[0], p1;\n if (topology.transform) p1 = [0, 0], arc.forEach(function(dp) { p1[0] += dp[0], p1[1] += dp[1]; });\n else p1 = arc[arc.length - 1];\n return i < 0 ? [p1, p0] : [p0, p1];\n }\n\n function flush(fragmentByEnd, fragmentByStart) {\n for (var k in fragmentByEnd) {\n var f = fragmentByEnd[k];\n delete fragmentByStart[f.start];\n delete f.start;\n delete f.end;\n f.forEach(function(i) { stitchedArcs[i < 0 ? ~i : i] = 1; });\n fragments.push(f);\n }\n }\n\n flush(fragmentByEnd, fragmentByStart);\n flush(fragmentByStart, fragmentByEnd);\n arcs.forEach(function(i) { if (!stitchedArcs[i < 0 ? ~i : i]) fragments.push([i]); });\n\n return fragments;\n}\n", "import {object} from \"./feature.js\";\nimport stitch from \"./stitch.js\";\n\nexport default function(topology) {\n return object(topology, meshArcs.apply(this, arguments));\n}\n\nexport function meshArcs(topology, object, filter) {\n var arcs, i, n;\n if (arguments.length > 1) arcs = extractArcs(topology, object, filter);\n else for (i = 0, arcs = new Array(n = topology.arcs.length); i < n; ++i) arcs[i] = i;\n return {type: \"MultiLineString\", arcs: stitch(topology, arcs)};\n}\n\nfunction extractArcs(topology, object, filter) {\n var arcs = [],\n geomsByArc = [],\n geom;\n\n function extract0(i) {\n var j = i < 0 ? ~i : i;\n (geomsByArc[j] || (geomsByArc[j] = [])).push({i: i, g: geom});\n }\n\n function extract1(arcs) {\n arcs.forEach(extract0);\n }\n\n function extract2(arcs) {\n arcs.forEach(extract1);\n }\n\n function extract3(arcs) {\n arcs.forEach(extract2);\n }\n\n function geometry(o) {\n switch (geom = o, o.type) {\n case \"GeometryCollection\": o.geometries.forEach(geometry); break;\n case \"LineString\": extract1(o.arcs); break;\n case \"MultiLineString\": case \"Polygon\": extract2(o.arcs); break;\n case \"MultiPolygon\": extract3(o.arcs); break;\n }\n }\n\n geometry(object);\n\n geomsByArc.forEach(filter == null\n ? function(geoms) { arcs.push(geoms[0].i); }\n : function(geoms) { if (filter(geoms[0].g, geoms[geoms.length - 1].g)) arcs.push(geoms[0].i); });\n\n return arcs;\n}\n", "export default function ascending(a, b) {\n return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n", "export default function descending(a, b) {\n return a == null || b == null ? NaN\n : b < a ? -1\n : b > a ? 1\n : b >= a ? 0\n : NaN;\n}\n", "import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n let compare1, compare2, delta;\n\n // If an accessor is specified, promote it to a comparator. In this case we\n // can test whether the search value is (self-) comparable. We can\u2019t do this\n // for a comparator (except for specific, known comparators) because we can\u2019t\n // tell if the comparator is symmetric, and an asymmetric comparator can\u2019t be\n // used to test whether a single value is comparable.\n if (f.length !== 2) {\n compare1 = ascending;\n compare2 = (d, x) => ascending(f(d), x);\n delta = (d, x) => f(d) - x;\n } else {\n compare1 = f === ascending || f === descending ? f : zero;\n compare2 = f;\n delta = f;\n }\n\n function left(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function right(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) <= 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function center(a, x, lo = 0, hi = a.length) {\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {left, center, right};\n}\n\nfunction zero() {\n return 0;\n}\n", "export default function number(x) {\n return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n", "import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n", "export default function variance(values, valueof) {\n let count = 0;\n let delta;\n let mean = 0;\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n delta = value - mean;\n mean += delta / ++count;\n sum += delta * (value - mean);\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n delta = value - mean;\n mean += delta / ++count;\n sum += delta * (value - mean);\n }\n }\n }\n if (count > 1) return sum / (count - 1);\n}\n", "import variance from \"./variance.js\";\n\nexport default function deviation(values, valueof) {\n const v = variance(values, valueof);\n return v ? Math.sqrt(v) : v;\n}\n", "// https://github.com/python/cpython/blob/a74eea238f5baba15797e2e8b570d153bc8690a7/Modules/mathmodule.c#L1423\nexport class Adder {\n constructor() {\n this._partials = new Float64Array(32);\n this._n = 0;\n }\n add(x) {\n const p = this._partials;\n let i = 0;\n for (let j = 0; j < this._n && j < 32; j++) {\n const y = p[j],\n hi = x + y,\n lo = Math.abs(x) < Math.abs(y) ? x - (hi - y) : y - (hi - x);\n if (lo) p[i++] = lo;\n x = hi;\n }\n p[i] = x;\n this._n = i + 1;\n return this;\n }\n valueOf() {\n const p = this._partials;\n let n = this._n, x, y, lo, hi = 0;\n if (n > 0) {\n hi = p[--n];\n while (n > 0) {\n x = hi;\n y = p[--n];\n hi = x + y;\n lo = y - (hi - x);\n if (lo) break;\n }\n if (n > 0 && ((lo < 0 && p[n - 1] < 0) || (lo > 0 && p[n - 1] > 0))) {\n y = lo * 2;\n x = hi + y;\n if (y == x - hi) hi = x;\n }\n }\n return hi;\n }\n}\n\nexport function fsum(values, valueof) {\n const adder = new Adder();\n if (valueof === undefined) {\n for (let value of values) {\n if (value = +value) {\n adder.add(value);\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if (value = +valueof(value, ++index, values)) {\n adder.add(value);\n }\n }\n }\n return +adder;\n}\n\nexport function fcumsum(values, valueof) {\n const adder = new Adder();\n let index = -1;\n return Float64Array.from(values, valueof === undefined\n ? v => adder.add(+v || 0)\n : v => adder.add(+valueof(v, ++index, values) || 0)\n );\n}\n", "export class InternMap extends Map {\n constructor(entries, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (entries != null) for (const [key, value] of entries) this.set(key, value);\n }\n get(key) {\n return super.get(intern_get(this, key));\n }\n has(key) {\n return super.has(intern_get(this, key));\n }\n set(key, value) {\n return super.set(intern_set(this, key), value);\n }\n delete(key) {\n return super.delete(intern_delete(this, key));\n }\n}\n\nexport class InternSet extends Set {\n constructor(values, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (values != null) for (const value of values) this.add(value);\n }\n has(value) {\n return super.has(intern_get(this, value));\n }\n add(value) {\n return super.add(intern_set(this, value));\n }\n delete(value) {\n return super.delete(intern_delete(this, value));\n }\n}\n\nfunction intern_get({_intern, _key}, value) {\n const key = _key(value);\n return _intern.has(key) ? _intern.get(key) : value;\n}\n\nfunction intern_set({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) return _intern.get(key);\n _intern.set(key, value);\n return value;\n}\n\nfunction intern_delete({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) {\n value = _intern.get(key);\n _intern.delete(key);\n }\n return value;\n}\n\nfunction keyof(value) {\n return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n", "export default function permute(source, keys) {\n return Array.from(keys, key => source[key]);\n}\n", "import ascending from \"./ascending.js\";\nimport permute from \"./permute.js\";\n\nexport default function sort(values, ...F) {\n if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n values = Array.from(values);\n let [f] = F;\n if ((f && f.length !== 2) || F.length > 1) {\n const index = Uint32Array.from(values, (d, i) => i);\n if (F.length > 1) {\n F = F.map(f => values.map(f));\n index.sort((i, j) => {\n for (const f of F) {\n const c = ascendingDefined(f[i], f[j]);\n if (c) return c;\n }\n });\n } else {\n f = values.map(f);\n index.sort((i, j) => ascendingDefined(f[i], f[j]));\n }\n return permute(values, index);\n }\n return values.sort(compareDefined(f));\n}\n\nexport function compareDefined(compare = ascending) {\n if (compare === ascending) return ascendingDefined;\n if (typeof compare !== \"function\") throw new TypeError(\"compare is not a function\");\n return (a, b) => {\n const x = compare(a, b);\n if (x || x === 0) return x;\n return (compare(b, b) === 0) - (compare(a, a) === 0);\n };\n}\n\nexport function ascendingDefined(a, b) {\n return (a == null || !(a >= a)) - (b == null || !(b >= b)) || (a < b ? -1 : a > b ? 1 : 0);\n}\n", "const e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n const step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log10(step)),\n error = step / Math.pow(10, power),\n factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n let i1, i2, inc;\n if (power < 0) {\n inc = Math.pow(10, -power) / factor;\n i1 = Math.round(start * inc);\n i2 = Math.round(stop * inc);\n if (i1 / inc < start) ++i1;\n if (i2 / inc > stop) --i2;\n inc = -inc;\n } else {\n inc = Math.pow(10, power) * factor;\n i1 = Math.round(start / inc);\n i2 = Math.round(stop / inc);\n if (i1 * inc < start) ++i1;\n if (i2 * inc > stop) --i2;\n }\n if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n return [i1, i2, inc];\n}\n\nexport default function ticks(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n if (!(count > 0)) return [];\n if (start === stop) return [start];\n const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n if (!(i2 >= i1)) return [];\n const n = i2 - i1 + 1, ticks = new Array(n);\n if (reverse) {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n } else {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n }\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n return tickSpec(start, stop, count)[2];\n}\n\nexport function tickStep(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n", "export default function max(values, valueof) {\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n }\n return max;\n}\n", "export default function min(values, valueof) {\n let min;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n }\n return min;\n}\n", "import {ascendingDefined, compareDefined} from \"./sort.js\";\n\n// Based on https://github.com/mourner/quickselect\n// ISC license, Copyright 2018 Vladimir Agafonkin.\nexport default function quickselect(array, k, left = 0, right = Infinity, compare) {\n k = Math.floor(k);\n left = Math.floor(Math.max(0, left));\n right = Math.floor(Math.min(array.length - 1, right));\n\n if (!(left <= k && k <= right)) return array;\n\n compare = compare === undefined ? ascendingDefined : compareDefined(compare);\n\n while (right > left) {\n if (right - left > 600) {\n const n = right - left + 1;\n const m = k - left + 1;\n const z = Math.log(n);\n const s = 0.5 * Math.exp(2 * z / 3);\n const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselect(array, k, newLeft, newRight, compare);\n }\n\n const t = array[k];\n let i = left;\n let j = right;\n\n swap(array, left, k);\n if (compare(array[right], t) > 0) swap(array, left, right);\n\n while (i < j) {\n swap(array, i, j), ++i, --j;\n while (compare(array[i], t) < 0) ++i;\n while (compare(array[j], t) > 0) --j;\n }\n\n if (compare(array[left], t) === 0) swap(array, left, j);\n else ++j, swap(array, j, right);\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n\n return array;\n}\n\nfunction swap(array, i, j) {\n const t = array[i];\n array[i] = array[j];\n array[j] = t;\n}\n", "import max from \"./max.js\";\nimport maxIndex from \"./maxIndex.js\";\nimport min from \"./min.js\";\nimport minIndex from \"./minIndex.js\";\nimport quickselect from \"./quickselect.js\";\nimport number, {numbers} from \"./number.js\";\nimport {ascendingDefined} from \"./sort.js\";\nimport greatest from \"./greatest.js\";\n\nexport default function quantile(values, p, valueof) {\n values = Float64Array.from(numbers(values, valueof));\n if (!(n = values.length) || isNaN(p = +p)) return;\n if (p <= 0 || n < 2) return min(values);\n if (p >= 1) return max(values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = max(quickselect(values, i0).subarray(0, i0 + 1)),\n value1 = min(values.subarray(i0 + 1));\n return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileSorted(values, p, valueof = number) {\n if (!(n = values.length) || isNaN(p = +p)) return;\n if (p <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileIndex(values, p, valueof = number) {\n if (isNaN(p = +p)) return;\n numbers = Float64Array.from(values, (_, i) => number(valueof(values[i], i, values)));\n if (p <= 0) return minIndex(numbers);\n if (p >= 1) return maxIndex(numbers);\n var numbers,\n index = Uint32Array.from(values, (_, i) => i),\n j = numbers.length - 1,\n i = Math.floor(j * p);\n quickselect(index, i, 0, j, (i, j) => ascendingDefined(numbers[i], numbers[j]));\n i = greatest(index.subarray(0, i + 1), (i) => numbers[i]);\n return i >= 0 ? i : -1;\n}\n", "export default function mean(values, valueof) {\n let count = 0;\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n ++count, sum += value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n ++count, sum += value;\n }\n }\n }\n if (count) return sum / count;\n}\n", "import quantile, {quantileIndex} from \"./quantile.js\";\n\nexport default function median(values, valueof) {\n return quantile(values, 0.5, valueof);\n}\n\nexport function medianIndex(values, valueof) {\n return quantileIndex(values, 0.5, valueof);\n}\n", "function* flatten(arrays) {\n for (const array of arrays) {\n yield* array;\n }\n}\n\nexport default function merge(arrays) {\n return Array.from(flatten(arrays));\n}\n", "export default function range(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n", "export default function sum(values, valueof) {\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value = +value) {\n sum += value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if (value = +valueof(value, ++index, values)) {\n sum += value;\n }\n }\n }\n return sum;\n}\n", "import {InternSet} from \"internmap\";\n\nexport default function intersection(values, ...others) {\n values = new InternSet(values);\n others = others.map(set);\n out: for (const value of values) {\n for (const other of others) {\n if (!other.has(value)) {\n values.delete(value);\n continue out;\n }\n }\n }\n return values;\n}\n\nfunction set(values) {\n return values instanceof InternSet ? values : new InternSet(values);\n}\n", "import {InternSet} from \"internmap\";\n\nexport default function union(...others) {\n const set = new InternSet();\n for (const other of others) {\n for (const o of other) {\n set.add(o);\n }\n }\n return set;\n}\n", "export default function(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, \u00B1Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n", "import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n", "export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n", "export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n", "// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n", "// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n", "import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n", "import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n", "import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": (x, p) => (x * 100).toFixed(p),\n \"b\": (x) => Math.round(x).toString(2),\n \"c\": (x) => x + \"\",\n \"d\": formatDecimal,\n \"e\": (x, p) => x.toExponential(p),\n \"f\": (x, p) => x.toFixed(p),\n \"g\": (x, p) => x.toPrecision(p),\n \"o\": (x) => Math.round(x).toString(8),\n \"p\": (x, p) => formatRounded(x * 100, p),\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n \"x\": (x) => Math.round(x).toString(16)\n};\n", "export default function(x) {\n return x;\n}\n", "import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"\u00B5\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"\u2212\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer \u201Cvalue\u201D part that can be\n // grouped, and fractional or exponential \u201Csuffix\u201D part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n", "import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n", "import exponent from \"./exponent.js\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n", "import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n", "import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n", "const t0 = new Date, t1 = new Date;\n\nexport function timeInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n }\n\n interval.floor = (date) => {\n return floori(date = new Date(+date)), date;\n };\n\n interval.ceil = (date) => {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = (date) => {\n const d0 = interval(date), d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = (date, step) => {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = (start, stop, step) => {\n const range = [];\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n let previous;\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = (test) => {\n return timeInterval((date) => {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, (date, step) => {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = (start, end) => {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = (step) => {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? (d) => field(d) % step === 0\n : (d) => interval.count(0, d) % step === 0);\n };\n }\n\n return interval;\n}\n", "import {timeInterval} from \"./interval.js\";\n\nexport const millisecond = timeInterval(() => {\n // noop\n}, (date, step) => {\n date.setTime(+date + step);\n}, (start, end) => {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = (k) => {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return timeInterval((date) => {\n date.setTime(Math.floor(date / k) * k);\n }, (date, step) => {\n date.setTime(+date + step * k);\n }, (start, end) => {\n return (end - start) / k;\n });\n};\n\nexport const milliseconds = millisecond.range;\n", "export const durationSecond = 1000;\nexport const durationMinute = durationSecond * 60;\nexport const durationHour = durationMinute * 60;\nexport const durationDay = durationHour * 24;\nexport const durationWeek = durationDay * 7;\nexport const durationMonth = durationDay * 30;\nexport const durationYear = durationDay * 365;\n", "import {timeInterval} from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nexport const second = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds());\n}, (date, step) => {\n date.setTime(+date + step * durationSecond);\n}, (start, end) => {\n return (end - start) / durationSecond;\n}, (date) => {\n return date.getUTCSeconds();\n});\n\nexport const seconds = second.range;\n", "import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeMinute = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, (date, step) => {\n date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n return (end - start) / durationMinute;\n}, (date) => {\n return date.getMinutes();\n});\n\nexport const timeMinutes = timeMinute.range;\n\nexport const utcMinute = timeInterval((date) => {\n date.setUTCSeconds(0, 0);\n}, (date, step) => {\n date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n return (end - start) / durationMinute;\n}, (date) => {\n return date.getUTCMinutes();\n});\n\nexport const utcMinutes = utcMinute.range;\n", "import {timeInterval} from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeHour = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, (date, step) => {\n date.setTime(+date + step * durationHour);\n}, (start, end) => {\n return (end - start) / durationHour;\n}, (date) => {\n return date.getHours();\n});\n\nexport const timeHours = timeHour.range;\n\nexport const utcHour = timeInterval((date) => {\n date.setUTCMinutes(0, 0, 0);\n}, (date, step) => {\n date.setTime(+date + step * durationHour);\n}, (start, end) => {\n return (end - start) / durationHour;\n}, (date) => {\n return date.getUTCHours();\n});\n\nexport const utcHours = utcHour.range;\n", "import {timeInterval} from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nexport const timeDay = timeInterval(\n date => date.setHours(0, 0, 0, 0),\n (date, step) => date.setDate(date.getDate() + step),\n (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay,\n date => date.getDate() - 1\n);\n\nexport const timeDays = timeDay.range;\n\nexport const utcDay = timeInterval((date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n return (end - start) / durationDay;\n}, (date) => {\n return date.getUTCDate() - 1;\n});\n\nexport const utcDays = utcDay.range;\n\nexport const unixDay = timeInterval((date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n return (end - start) / durationDay;\n}, (date) => {\n return Math.floor(date / durationDay);\n});\n\nexport const unixDays = unixDay.range;\n", "import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction timeWeekday(i) {\n return timeInterval((date) => {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setDate(date.getDate() + step * 7);\n }, (start, end) => {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport const timeSunday = timeWeekday(0);\nexport const timeMonday = timeWeekday(1);\nexport const timeTuesday = timeWeekday(2);\nexport const timeWednesday = timeWeekday(3);\nexport const timeThursday = timeWeekday(4);\nexport const timeFriday = timeWeekday(5);\nexport const timeSaturday = timeWeekday(6);\n\nexport const timeSundays = timeSunday.range;\nexport const timeMondays = timeMonday.range;\nexport const timeTuesdays = timeTuesday.range;\nexport const timeWednesdays = timeWednesday.range;\nexport const timeThursdays = timeThursday.range;\nexport const timeFridays = timeFriday.range;\nexport const timeSaturdays = timeSaturday.range;\n\nfunction utcWeekday(i) {\n return timeInterval((date) => {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, (start, end) => {\n return (end - start) / durationWeek;\n });\n}\n\nexport const utcSunday = utcWeekday(0);\nexport const utcMonday = utcWeekday(1);\nexport const utcTuesday = utcWeekday(2);\nexport const utcWednesday = utcWeekday(3);\nexport const utcThursday = utcWeekday(4);\nexport const utcFriday = utcWeekday(5);\nexport const utcSaturday = utcWeekday(6);\n\nexport const utcSundays = utcSunday.range;\nexport const utcMondays = utcMonday.range;\nexport const utcTuesdays = utcTuesday.range;\nexport const utcWednesdays = utcWednesday.range;\nexport const utcThursdays = utcThursday.range;\nexport const utcFridays = utcFriday.range;\nexport const utcSaturdays = utcSaturday.range;\n", "import {timeInterval} from \"./interval.js\";\n\nexport const timeMonth = timeInterval((date) => {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setMonth(date.getMonth() + step);\n}, (start, end) => {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, (date) => {\n return date.getMonth();\n});\n\nexport const timeMonths = timeMonth.range;\n\nexport const utcMonth = timeInterval((date) => {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, (start, end) => {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, (date) => {\n return date.getUTCMonth();\n});\n\nexport const utcMonths = utcMonth.range;\n", "import {timeInterval} from \"./interval.js\";\n\nexport const timeYear = timeInterval((date) => {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setFullYear(date.getFullYear() + step);\n}, (start, end) => {\n return end.getFullYear() - start.getFullYear();\n}, (date) => {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\ntimeYear.every = (k) => {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport const timeYears = timeYear.range;\n\nexport const utcYear = timeInterval((date) => {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, (start, end) => {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, (date) => {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = (k) => {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport const utcYears = utcYear.range;\n", "import {bisector, tickStep} from \"d3-array\";\nimport {durationDay, durationHour, durationMinute, durationMonth, durationSecond, durationWeek, durationYear} from \"./duration.js\";\nimport {millisecond} from \"./millisecond.js\";\nimport {second} from \"./second.js\";\nimport {timeMinute, utcMinute} from \"./minute.js\";\nimport {timeHour, utcHour} from \"./hour.js\";\nimport {timeDay, unixDay} from \"./day.js\";\nimport {timeSunday, utcSunday} from \"./week.js\";\nimport {timeMonth, utcMonth} from \"./month.js\";\nimport {timeYear, utcYear} from \"./year.js\";\n\nfunction ticker(year, month, week, day, hour, minute) {\n\n const tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function ticks(start, stop, count) {\n const reverse = stop < start;\n if (reverse) [start, stop] = [stop, start];\n const interval = count && typeof count.range === \"function\" ? count : tickInterval(start, stop, count);\n const ticks = interval ? interval.range(start, +stop + 1) : []; // inclusive stop\n return reverse ? ticks.reverse() : ticks;\n }\n\n function tickInterval(start, stop, count) {\n const target = Math.abs(stop - start) / count;\n const i = bisector(([,, step]) => step).right(tickIntervals, target);\n if (i === tickIntervals.length) return year.every(tickStep(start / durationYear, stop / durationYear, count));\n if (i === 0) return millisecond.every(Math.max(tickStep(start, stop, count), 1));\n const [t, step] = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n return t.every(step);\n }\n\n return [ticks, tickInterval];\n}\n\nconst [utcTicks, utcTickInterval] = ticker(utcYear, utcMonth, utcSunday, unixDay, utcHour, utcMinute);\nconst [timeTicks, timeTickInterval] = ticker(timeYear, timeMonth, timeSunday, timeDay, timeHour, timeMinute);\n\nexport {utcTicks, utcTickInterval, timeTicks, timeTickInterval};\n", "import { array, error, hasOwnProperty, extend, peek, toSet, constant, zero, one, span } from 'vega-util';\nimport { timeDay, timeWeek, utcDay, utcWeek, timeYear, timeMonth, timeHour, timeMinute, timeSecond, timeMillisecond, utcYear, utcMonth, utcHour, utcMinute, utcSecond, utcMillisecond } from 'd3-time';\nimport { bisector, tickStep } from 'd3-array';\n\nconst YEAR = 'year';\nconst QUARTER = 'quarter';\nconst MONTH = 'month';\nconst WEEK = 'week';\nconst DATE = 'date';\nconst DAY = 'day';\nconst DAYOFYEAR = 'dayofyear';\nconst HOURS = 'hours';\nconst MINUTES = 'minutes';\nconst SECONDS = 'seconds';\nconst MILLISECONDS = 'milliseconds';\nconst TIME_UNITS = [YEAR, QUARTER, MONTH, WEEK, DATE, DAY, DAYOFYEAR, HOURS, MINUTES, SECONDS, MILLISECONDS];\nconst UNITS = TIME_UNITS.reduce((o, u, i) => (o[u] = 1 + i, o), {});\nfunction timeUnits(units) {\n const u = array(units).slice(),\n m = {};\n\n // check validity\n if (!u.length) error('Missing time unit.');\n u.forEach(unit => {\n if (hasOwnProperty(UNITS, unit)) {\n m[unit] = 1;\n } else {\n error(`Invalid time unit: ${unit}.`);\n }\n });\n const numTypes = (m[WEEK] || m[DAY] ? 1 : 0) + (m[QUARTER] || m[MONTH] || m[DATE] ? 1 : 0) + (m[DAYOFYEAR] ? 1 : 0);\n if (numTypes > 1) {\n error(`Incompatible time units: ${units}`);\n }\n\n // ensure proper sort order\n u.sort((a, b) => UNITS[a] - UNITS[b]);\n return u;\n}\nconst defaultSpecifiers = {\n [YEAR]: '%Y ',\n [QUARTER]: 'Q%q ',\n [MONTH]: '%b ',\n [DATE]: '%d ',\n [WEEK]: 'W%U ',\n [DAY]: '%a ',\n [DAYOFYEAR]: '%j ',\n [HOURS]: '%H:00',\n [MINUTES]: '00:%M',\n [SECONDS]: ':%S',\n [MILLISECONDS]: '.%L',\n [`${YEAR}-${MONTH}`]: '%Y-%m ',\n [`${YEAR}-${MONTH}-${DATE}`]: '%Y-%m-%d ',\n [`${HOURS}-${MINUTES}`]: '%H:%M'\n};\nfunction timeUnitSpecifier(units, specifiers) {\n const s = extend({}, defaultSpecifiers, specifiers),\n u = timeUnits(units),\n n = u.length;\n let fmt = '',\n start = 0,\n end,\n key;\n for (start = 0; start < n;) {\n for (end = u.length; end > start; --end) {\n key = u.slice(start, end).join('-');\n if (s[key] != null) {\n fmt += s[key];\n start = end;\n break;\n }\n }\n }\n return fmt.trim();\n}\n\nconst t0 = new Date();\nfunction localYear(y) {\n t0.setFullYear(y);\n t0.setMonth(0);\n t0.setDate(1);\n t0.setHours(0, 0, 0, 0);\n return t0;\n}\nfunction dayofyear(d) {\n return localDayOfYear(new Date(d));\n}\nfunction week(d) {\n return localWeekNum(new Date(d));\n}\nfunction localDayOfYear(d) {\n return timeDay.count(localYear(d.getFullYear()) - 1, d);\n}\nfunction localWeekNum(d) {\n return timeWeek.count(localYear(d.getFullYear()) - 1, d);\n}\nfunction localFirst(y) {\n return localYear(y).getDay();\n}\nfunction localDate(y, m, d, H, M, S, L) {\n if (0 <= y && y < 100) {\n const date = new Date(-1, m, d, H, M, S, L);\n date.setFullYear(y);\n return date;\n }\n return new Date(y, m, d, H, M, S, L);\n}\nfunction utcdayofyear(d) {\n return utcDayOfYear(new Date(d));\n}\nfunction utcweek(d) {\n return utcWeekNum(new Date(d));\n}\nfunction utcDayOfYear(d) {\n const y = Date.UTC(d.getUTCFullYear(), 0, 1);\n return utcDay.count(y - 1, d);\n}\nfunction utcWeekNum(d) {\n const y = Date.UTC(d.getUTCFullYear(), 0, 1);\n return utcWeek.count(y - 1, d);\n}\nfunction utcFirst(y) {\n t0.setTime(Date.UTC(y, 0, 1));\n return t0.getUTCDay();\n}\nfunction utcDate(y, m, d, H, M, S, L) {\n if (0 <= y && y < 100) {\n const date = new Date(Date.UTC(-1, m, d, H, M, S, L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(y, m, d, H, M, S, L));\n}\n\nfunction floor(units, step, get, inv, newDate) {\n const s = step || 1,\n b = peek(units),\n _ = (unit, p, key) => {\n key = key || unit;\n return getUnit(get[key], inv[key], unit === b && s, p);\n };\n const t = new Date(),\n u = toSet(units),\n y = u[YEAR] ? _(YEAR) : constant(2012),\n m = u[MONTH] ? _(MONTH) : u[QUARTER] ? _(QUARTER) : zero,\n d = u[WEEK] && u[DAY] ? _(DAY, 1, WEEK + DAY) : u[WEEK] ? _(WEEK, 1) : u[DAY] ? _(DAY, 1) : u[DATE] ? _(DATE, 1) : u[DAYOFYEAR] ? _(DAYOFYEAR, 1) : one,\n H = u[HOURS] ? _(HOURS) : zero,\n M = u[MINUTES] ? _(MINUTES) : zero,\n S = u[SECONDS] ? _(SECONDS) : zero,\n L = u[MILLISECONDS] ? _(MILLISECONDS) : zero;\n return function (v) {\n t.setTime(+v);\n const year = y(t);\n return newDate(year, m(t), d(t, year), H(t), M(t), S(t), L(t));\n };\n}\nfunction getUnit(f, inv, step, phase) {\n const u = step <= 1 ? f : phase ? (d, y) => phase + step * Math.floor((f(d, y) - phase) / step) : (d, y) => step * Math.floor(f(d, y) / step);\n return inv ? (d, y) => inv(u(d, y), y) : u;\n}\n\n// returns the day of the year based on week number, day of week,\n// and the day of the week for the first day of the year\nfunction weekday(week, day, firstDay) {\n return day + week * 7 - (firstDay + 6) % 7;\n}\n\n// -- LOCAL TIME --\n\nconst localGet = {\n [YEAR]: d => d.getFullYear(),\n [QUARTER]: d => Math.floor(d.getMonth() / 3),\n [MONTH]: d => d.getMonth(),\n [DATE]: d => d.getDate(),\n [HOURS]: d => d.getHours(),\n [MINUTES]: d => d.getMinutes(),\n [SECONDS]: d => d.getSeconds(),\n [MILLISECONDS]: d => d.getMilliseconds(),\n [DAYOFYEAR]: d => localDayOfYear(d),\n [WEEK]: d => localWeekNum(d),\n [WEEK + DAY]: (d, y) => weekday(localWeekNum(d), d.getDay(), localFirst(y)),\n [DAY]: (d, y) => weekday(1, d.getDay(), localFirst(y))\n};\nconst localInv = {\n [QUARTER]: q => 3 * q,\n [WEEK]: (w, y) => weekday(w, 0, localFirst(y))\n};\nfunction timeFloor(units, step) {\n return floor(units, step || 1, localGet, localInv, localDate);\n}\n\n// -- UTC TIME --\n\nconst utcGet = {\n [YEAR]: d => d.getUTCFullYear(),\n [QUARTER]: d => Math.floor(d.getUTCMonth() / 3),\n [MONTH]: d => d.getUTCMonth(),\n [DATE]: d => d.getUTCDate(),\n [HOURS]: d => d.getUTCHours(),\n [MINUTES]: d => d.getUTCMinutes(),\n [SECONDS]: d => d.getUTCSeconds(),\n [MILLISECONDS]: d => d.getUTCMilliseconds(),\n [DAYOFYEAR]: d => utcDayOfYear(d),\n [WEEK]: d => utcWeekNum(d),\n [DAY]: (d, y) => weekday(1, d.getUTCDay(), utcFirst(y)),\n [WEEK + DAY]: (d, y) => weekday(utcWeekNum(d), d.getUTCDay(), utcFirst(y))\n};\nconst utcInv = {\n [QUARTER]: q => 3 * q,\n [WEEK]: (w, y) => weekday(w, 0, utcFirst(y))\n};\nfunction utcFloor(units, step) {\n return floor(units, step || 1, utcGet, utcInv, utcDate);\n}\n\nconst timeIntervals = {\n [YEAR]: timeYear,\n [QUARTER]: timeMonth.every(3),\n [MONTH]: timeMonth,\n [WEEK]: timeWeek,\n [DATE]: timeDay,\n [DAY]: timeDay,\n [DAYOFYEAR]: timeDay,\n [HOURS]: timeHour,\n [MINUTES]: timeMinute,\n [SECONDS]: timeSecond,\n [MILLISECONDS]: timeMillisecond\n};\nconst utcIntervals = {\n [YEAR]: utcYear,\n [QUARTER]: utcMonth.every(3),\n [MONTH]: utcMonth,\n [WEEK]: utcWeek,\n [DATE]: utcDay,\n [DAY]: utcDay,\n [DAYOFYEAR]: utcDay,\n [HOURS]: utcHour,\n [MINUTES]: utcMinute,\n [SECONDS]: utcSecond,\n [MILLISECONDS]: utcMillisecond\n};\nfunction timeInterval(unit) {\n return timeIntervals[unit];\n}\nfunction utcInterval(unit) {\n return utcIntervals[unit];\n}\nfunction offset(ival, date, step) {\n return ival ? ival.offset(date, step) : undefined;\n}\nfunction timeOffset(unit, date, step) {\n return offset(timeInterval(unit), date, step);\n}\nfunction utcOffset(unit, date, step) {\n return offset(utcInterval(unit), date, step);\n}\nfunction sequence(ival, start, stop, step) {\n return ival ? ival.range(start, stop, step) : undefined;\n}\nfunction timeSequence(unit, start, stop, step) {\n return sequence(timeInterval(unit), start, stop, step);\n}\nfunction utcSequence(unit, start, stop, step) {\n return sequence(utcInterval(unit), start, stop, step);\n}\n\nconst durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\nconst Milli = [YEAR, MONTH, DATE, HOURS, MINUTES, SECONDS, MILLISECONDS],\n Seconds = Milli.slice(0, -1),\n Minutes = Seconds.slice(0, -1),\n Hours = Minutes.slice(0, -1),\n Day = Hours.slice(0, -1),\n Week = [YEAR, WEEK],\n Month = [YEAR, MONTH],\n Year = [YEAR];\nconst intervals = [[Seconds, 1, durationSecond], [Seconds, 5, 5 * durationSecond], [Seconds, 15, 15 * durationSecond], [Seconds, 30, 30 * durationSecond], [Minutes, 1, durationMinute], [Minutes, 5, 5 * durationMinute], [Minutes, 15, 15 * durationMinute], [Minutes, 30, 30 * durationMinute], [Hours, 1, durationHour], [Hours, 3, 3 * durationHour], [Hours, 6, 6 * durationHour], [Hours, 12, 12 * durationHour], [Day, 1, durationDay], [Week, 1, durationWeek], [Month, 1, durationMonth], [Month, 3, 3 * durationMonth], [Year, 1, durationYear]];\nfunction bin (opt) {\n const ext = opt.extent,\n max = opt.maxbins || 40,\n target = Math.abs(span(ext)) / max;\n let i = bisector(i => i[2]).right(intervals, target),\n units,\n step;\n if (i === intervals.length) {\n units = Year, step = tickStep(ext[0] / durationYear, ext[1] / durationYear, max);\n } else if (i) {\n i = intervals[target / intervals[i - 1][2] < intervals[i][2] / target ? i - 1 : i];\n units = i[0];\n step = i[1];\n } else {\n units = Milli;\n step = Math.max(tickStep(ext[0], ext[1], max), 1);\n }\n return {\n units,\n step\n };\n}\n\nexport { DATE, DAY, DAYOFYEAR, HOURS, MILLISECONDS, MINUTES, MONTH, QUARTER, SECONDS, TIME_UNITS, WEEK, YEAR, dayofyear, bin as timeBin, timeFloor, timeInterval, timeOffset, timeSequence, timeUnitSpecifier, timeUnits, utcFloor, utcInterval, utcOffset, utcSequence, utcdayofyear, utcweek, week };\n", "import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"g\": formatYearISO,\n \"G\": formatFullYearISO,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"q\": formatQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"g\": formatUTCYearISO,\n \"G\": formatUTCFullYearISO,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"q\": formatUTCQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"g\": parseYear,\n \"G\": parseFullYear,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"q\": parseQuarter,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, Z) {\n return function(string) {\n var d = newDate(1900, undefined, 1),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n // If this is utcParse, never use the local timezone.\n if (Z && !(\"Z\" in d)) d.Z = 0;\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // If the month was not specified, inherit from the quarter.\n if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return localDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatQuarter(d) {\n return 1 + ~~(d.getMonth() / 3);\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n function formatUTCQuarter(d) {\n return 1 + ~~(d.getUTCMonth() / 3);\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", false);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier += \"\", true);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n return new Map(names.map((name, i) => [name.toLowerCase(), i]));\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n var day = d.getDay();\n return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n d = dISO(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n d = dISO(d);\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n var day = d.getUTCDay();\n return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n d = UTCdISO(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n d = UTCdISO(d);\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n", "import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n", "import { tickStep } from 'd3-array';\nimport { formatLocale, formatSpecifier, precisionFixed, precisionRound, precisionPrefix, format, formatPrefix } from 'd3-format';\nimport { SECONDS, MINUTES, HOURS, DATE, WEEK, MONTH, QUARTER, YEAR, MILLISECONDS, DAY, timeInterval, utcInterval } from 'vega-time';\nimport { isString, isObject, error, extend } from 'vega-util';\nimport { timeFormatLocale as timeFormatLocale$1, timeFormat, timeParse, utcFormat, utcParse } from 'd3-time-format';\n\nfunction memoize (method) {\n const cache = {};\n return spec => cache[spec] || (cache[spec] = method(spec));\n}\n\nfunction trimZeroes(numberFormat, decimalChar) {\n return x => {\n const str = numberFormat(x),\n dec = str.indexOf(decimalChar);\n if (dec < 0) return str;\n let idx = rightmostDigit(str, dec);\n const end = idx < str.length ? str.slice(idx) : '';\n while (--idx > dec) if (str[idx] !== '0') {\n ++idx;\n break;\n }\n return str.slice(0, idx) + end;\n };\n}\nfunction rightmostDigit(str, dec) {\n let i = str.lastIndexOf('e'),\n c;\n if (i > 0) return i;\n for (i = str.length; --i > dec;) {\n c = str.charCodeAt(i);\n if (c >= 48 && c <= 57) return i + 1; // is digit\n }\n}\nfunction numberLocale(locale) {\n const format = memoize(locale.format),\n formatPrefix = locale.formatPrefix;\n return {\n format,\n formatPrefix,\n formatFloat(spec) {\n const s = formatSpecifier(spec || ',');\n if (s.precision == null) {\n s.precision = 12;\n switch (s.type) {\n case '%':\n s.precision -= 2;\n break;\n case 'e':\n s.precision -= 1;\n break;\n }\n return trimZeroes(format(s),\n // number format\n format('.1f')(1)[1] // decimal point character\n );\n } else {\n return format(s);\n }\n },\n formatSpan(start, stop, count, specifier) {\n specifier = formatSpecifier(specifier == null ? ',f' : specifier);\n const step = tickStep(start, stop, count),\n value = Math.max(Math.abs(start), Math.abs(stop));\n let precision;\n if (specifier.precision == null) {\n switch (specifier.type) {\n case 's':\n {\n if (!isNaN(precision = precisionPrefix(step, value))) {\n specifier.precision = precision;\n }\n return formatPrefix(specifier, value);\n }\n case '':\n case 'e':\n case 'g':\n case 'p':\n case 'r':\n {\n if (!isNaN(precision = precisionRound(step, value))) {\n specifier.precision = precision - (specifier.type === 'e');\n }\n break;\n }\n case 'f':\n case '%':\n {\n if (!isNaN(precision = precisionFixed(step))) {\n specifier.precision = precision - (specifier.type === '%') * 2;\n }\n break;\n }\n }\n }\n return format(specifier);\n }\n };\n}\nlet defaultNumberLocale;\nresetNumberFormatDefaultLocale();\nfunction resetNumberFormatDefaultLocale() {\n return defaultNumberLocale = numberLocale({\n format: format,\n formatPrefix: formatPrefix\n });\n}\nfunction numberFormatLocale(definition) {\n return numberLocale(formatLocale(definition));\n}\nfunction numberFormatDefaultLocale(definition) {\n return arguments.length ? defaultNumberLocale = numberFormatLocale(definition) : defaultNumberLocale;\n}\n\nfunction timeMultiFormat(format, interval, spec) {\n spec = spec || {};\n if (!isObject(spec)) {\n error(`Invalid time multi-format specifier: ${spec}`);\n }\n const second = interval(SECONDS),\n minute = interval(MINUTES),\n hour = interval(HOURS),\n day = interval(DATE),\n week = interval(WEEK),\n month = interval(MONTH),\n quarter = interval(QUARTER),\n year = interval(YEAR),\n L = format(spec[MILLISECONDS] || '.%L'),\n S = format(spec[SECONDS] || ':%S'),\n M = format(spec[MINUTES] || '%I:%M'),\n H = format(spec[HOURS] || '%I %p'),\n d = format(spec[DATE] || spec[DAY] || '%a %d'),\n w = format(spec[WEEK] || '%b %d'),\n m = format(spec[MONTH] || '%B'),\n q = format(spec[QUARTER] || '%B'),\n y = format(spec[YEAR] || '%Y');\n return date => (second(date) < date ? L : minute(date) < date ? S : hour(date) < date ? M : day(date) < date ? H : month(date) < date ? week(date) < date ? d : w : year(date) < date ? quarter(date) < date ? m : q : y)(date);\n}\nfunction timeLocale(locale) {\n const timeFormat = memoize(locale.format),\n utcFormat = memoize(locale.utcFormat);\n return {\n timeFormat: spec => isString(spec) ? timeFormat(spec) : timeMultiFormat(timeFormat, timeInterval, spec),\n utcFormat: spec => isString(spec) ? utcFormat(spec) : timeMultiFormat(utcFormat, utcInterval, spec),\n timeParse: memoize(locale.parse),\n utcParse: memoize(locale.utcParse)\n };\n}\nlet defaultTimeLocale;\nresetTimeFormatDefaultLocale();\nfunction resetTimeFormatDefaultLocale() {\n return defaultTimeLocale = timeLocale({\n format: timeFormat,\n parse: timeParse,\n utcFormat: utcFormat,\n utcParse: utcParse\n });\n}\nfunction timeFormatLocale(definition) {\n return timeLocale(timeFormatLocale$1(definition));\n}\nfunction timeFormatDefaultLocale(definition) {\n return arguments.length ? defaultTimeLocale = timeFormatLocale(definition) : defaultTimeLocale;\n}\n\nconst createLocale = (number, time) => extend({}, number, time);\nfunction locale(numberSpec, timeSpec) {\n const number = numberSpec ? numberFormatLocale(numberSpec) : numberFormatDefaultLocale();\n const time = timeSpec ? timeFormatLocale(timeSpec) : timeFormatDefaultLocale();\n return createLocale(number, time);\n}\nfunction defaultLocale(numberSpec, timeSpec) {\n const args = arguments.length;\n if (args && args !== 2) {\n error('defaultLocale expects either zero or two arguments.');\n }\n return args ? createLocale(numberFormatDefaultLocale(numberSpec), timeFormatDefaultLocale(timeSpec)) : createLocale(numberFormatDefaultLocale(), timeFormatDefaultLocale());\n}\nfunction resetDefaultLocale() {\n resetNumberFormatDefaultLocale();\n resetTimeFormatDefaultLocale();\n return defaultLocale();\n}\n\nexport { defaultLocale, locale, numberFormatDefaultLocale, numberFormatLocale, resetDefaultLocale, resetNumberFormatDefaultLocale, resetTimeFormatDefaultLocale, timeFormatDefaultLocale, timeFormatLocale };\n", "import { extend, error, stringValue, isFunction, toBoolean, toNumber, toDate, toString, identity, field, isObject, isArray, isIterable, hasOwnProperty } from 'vega-util';\nimport { dsvFormat } from 'd3-dsv';\nimport { feature, mesh } from 'topojson-client';\nimport { timeFormatDefaultLocale } from 'vega-format';\n\n// Matches absolute URLs with optional protocol\n// https://... file://... //...\nconst protocol_re = /^(data:|([A-Za-z]+:)?\\/\\/)/;\n\n// Matches allowed URIs. From https://github.com/cure53/DOMPurify/blob/master/src/regexp.js with added file://\nconst allowed_re = /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp|file|data):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i; // eslint-disable-line no-useless-escape\nconst whitespace_re = /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205f\\u3000]/g; // eslint-disable-line no-control-regex\n\n// Special treatment in node.js for the file: protocol\nconst fileProtocol = 'file://';\n\n/**\n * Factory for a loader constructor that provides methods for requesting\n * files from either the network or disk, and for sanitizing request URIs.\n * @param {function} fetch - The Fetch API for HTTP network requests.\n * If null or undefined, HTTP loading will be disabled.\n * @param {object} fs - The file system interface for file loading.\n * If null or undefined, local file loading will be disabled.\n * @return {function} A loader constructor with the following signature:\n * param {object} [options] - Optional default loading options to use.\n * return {object} - A new loader instance.\n */\nfunction loaderFactory (fetch, fs) {\n return options => ({\n options: options || {},\n sanitize: sanitize,\n load: load,\n fileAccess: !!fs,\n file: fileLoader(fs),\n http: httpLoader(fetch)\n });\n}\n\n/**\n * Load an external resource, typically either from the web or from the local\n * filesystem. This function uses {@link sanitize} to first sanitize the uri,\n * then calls either {@link http} (for web requests) or {@link file} (for\n * filesystem loading).\n * @param {string} uri - The resource indicator (e.g., URL or filename).\n * @param {object} [options] - Optional loading options. These options will\n * override any existing default options.\n * @return {Promise} - A promise that resolves to the loaded content.\n */\nasync function load(uri, options) {\n const opt = await this.sanitize(uri, options),\n url = opt.href;\n return opt.localFile ? this.file(url) : this.http(url, options);\n}\n\n/**\n * URI sanitizer function.\n * @param {string} uri - The uri (url or filename) to check.\n * @param {object} options - An options hash.\n * @return {Promise} - A promise that resolves to an object containing\n * sanitized uri data, or rejects it the input uri is deemed invalid.\n * The properties of the resolved object are assumed to be\n * valid attributes for an HTML 'a' tag. The sanitized uri *must* be\n * provided by the 'href' property of the returned object.\n */\nasync function sanitize(uri, options) {\n options = extend({}, this.options, options);\n const fileAccess = this.fileAccess,\n result = {\n href: null\n };\n let isFile, loadFile, base;\n const isAllowed = allowed_re.test(uri.replace(whitespace_re, ''));\n if (uri == null || typeof uri !== 'string' || !isAllowed) {\n error('Sanitize failure, invalid URI: ' + stringValue(uri));\n }\n const hasProtocol = protocol_re.test(uri);\n\n // if relative url (no protocol/host), prepend baseURL\n if ((base = options.baseURL) && !hasProtocol) {\n // Ensure that there is a slash between the baseURL (e.g. hostname) and url\n if (!uri.startsWith('/') && !base.endsWith('/')) {\n uri = '/' + uri;\n }\n uri = base + uri;\n }\n\n // should we load from file system?\n loadFile = (isFile = uri.startsWith(fileProtocol)) || options.mode === 'file' || options.mode !== 'http' && !hasProtocol && fileAccess;\n if (isFile) {\n // strip file protocol\n uri = uri.slice(fileProtocol.length);\n } else if (uri.startsWith('//')) {\n if (options.defaultProtocol === 'file') {\n // if is file, strip protocol and set loadFile flag\n uri = uri.slice(2);\n loadFile = true;\n } else {\n // if relative protocol (starts with '//'), prepend default protocol\n uri = (options.defaultProtocol || 'http') + ':' + uri;\n }\n }\n\n // set non-enumerable mode flag to indicate local file load\n Object.defineProperty(result, 'localFile', {\n value: !!loadFile\n });\n\n // set uri\n result.href = uri;\n\n // set default result target, if specified\n if (options.target) {\n result.target = options.target + '';\n }\n\n // set default result rel, if specified (#1542)\n if (options.rel) {\n result.rel = options.rel + '';\n }\n\n // provide control over cross-origin image handling (#2238)\n // https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image\n if (options.context === 'image' && options.crossOrigin) {\n result.crossOrigin = options.crossOrigin + '';\n }\n\n // return\n return result;\n}\n\n/**\n * File system loader factory.\n * @param {object} fs - The file system interface.\n * @return {function} - A file loader with the following signature:\n * param {string} filename - The file system path to load.\n * param {string} filename - The file system path to load.\n * return {Promise} A promise that resolves to the file contents.\n */\nfunction fileLoader(fs) {\n return fs ? filename => new Promise((accept, reject) => {\n fs.readFile(filename, (error, data) => {\n if (error) reject(error);else accept(data);\n });\n }) : fileReject;\n}\n\n/**\n * Default file system loader that simply rejects.\n */\nasync function fileReject() {\n error('No file system access.');\n}\n\n/**\n * HTTP request handler factory.\n * @param {function} fetch - The Fetch API method.\n * @return {function} - An http loader with the following signature:\n * param {string} url - The url to request.\n * param {object} options - An options hash.\n * return {Promise} - A promise that resolves to the file contents.\n */\nfunction httpLoader(fetch) {\n return fetch ? async function (url, options) {\n const opt = extend({}, this.options.http, options),\n type = options && options.response,\n response = await fetch(url, opt);\n return !response.ok ? error(response.status + '' + response.statusText) : isFunction(response[type]) ? response[type]() : response.text();\n } : httpReject;\n}\n\n/**\n * Default http request handler that simply rejects.\n */\nasync function httpReject() {\n error('No HTTP fetch method available.');\n}\n\nconst isValid = _ => _ != null && _ === _;\nconst isBoolean = _ => _ === 'true' || _ === 'false' || _ === true || _ === false;\nconst isDate = _ => !Number.isNaN(Date.parse(_));\nconst isNumber = _ => !Number.isNaN(+_) && !(_ instanceof Date);\nconst isInteger = _ => isNumber(_) && Number.isInteger(+_);\nconst typeParsers = {\n boolean: toBoolean,\n integer: toNumber,\n number: toNumber,\n date: toDate,\n string: toString,\n unknown: identity\n};\nconst typeTests = [isBoolean, isInteger, isNumber, isDate];\nconst typeList = ['boolean', 'integer', 'number', 'date'];\nfunction inferType(values, field) {\n if (!values || !values.length) return 'unknown';\n const n = values.length,\n m = typeTests.length,\n a = typeTests.map((_, i) => i + 1);\n for (let i = 0, t = 0, j, value; i < n; ++i) {\n value = field ? values[i][field] : values[i];\n for (j = 0; j < m; ++j) {\n if (a[j] && isValid(value) && !typeTests[j](value)) {\n a[j] = 0;\n ++t;\n if (t === typeTests.length) return 'string';\n }\n }\n }\n return typeList[a.reduce((u, v) => u === 0 ? v : u, 0) - 1];\n}\nfunction inferTypes(data, fields) {\n return fields.reduce((types, field) => {\n types[field] = inferType(data, field);\n return types;\n }, {});\n}\n\nfunction delimitedFormat(delimiter) {\n const parse = function (data, format) {\n const delim = {\n delimiter: delimiter\n };\n return dsv(data, format ? extend(format, delim) : delim);\n };\n parse.responseType = 'text';\n return parse;\n}\nfunction dsv(data, format) {\n if (format.header) {\n data = format.header.map(stringValue).join(format.delimiter) + '\\n' + data;\n }\n return dsvFormat(format.delimiter).parse(data + '');\n}\ndsv.responseType = 'text';\n\nfunction isBuffer(_) {\n return typeof Buffer === 'function' && isFunction(Buffer.isBuffer) ? Buffer.isBuffer(_) : false;\n}\nfunction json(data, format) {\n const prop = format && format.property ? field(format.property) : identity;\n return isObject(data) && !isBuffer(data) ? parseJSON(prop(data), format) : prop(JSON.parse(data));\n}\njson.responseType = 'json';\nfunction parseJSON(data, format) {\n if (!isArray(data) && isIterable(data)) {\n data = [...data];\n }\n return format && format.copy ? JSON.parse(JSON.stringify(data)) : data;\n}\n\nconst filters = {\n interior: (a, b) => a !== b,\n exterior: (a, b) => a === b\n};\nfunction topojson(data, format) {\n let method, object, property, filter;\n data = json(data, format);\n if (format && format.feature) {\n method = feature;\n property = format.feature;\n } else if (format && format.mesh) {\n method = mesh;\n property = format.mesh;\n filter = filters[format.filter];\n } else {\n error('Missing TopoJSON feature or mesh parameter.');\n }\n object = (object = data.objects[property]) ? method(data, object, filter) : error('Invalid TopoJSON object: ' + property);\n return object && object.features || [object];\n}\ntopojson.responseType = 'json';\n\nconst format = {\n dsv: dsv,\n csv: delimitedFormat(','),\n tsv: delimitedFormat('\\t'),\n json: json,\n topojson: topojson\n};\nfunction formats(name, reader) {\n if (arguments.length > 1) {\n format[name] = reader;\n return this;\n } else {\n return hasOwnProperty(format, name) ? format[name] : null;\n }\n}\nfunction responseType(type) {\n const f = formats(type);\n return f && f.responseType || 'text';\n}\n\nfunction read (data, schema, timeParser, utcParser) {\n schema = schema || {};\n const reader = formats(schema.type || 'json');\n if (!reader) error('Unknown data format type: ' + schema.type);\n data = reader(data, schema);\n if (schema.parse) parse(data, schema.parse, timeParser, utcParser);\n if (hasOwnProperty(data, 'columns')) delete data.columns;\n return data;\n}\nfunction parse(data, types, timeParser, utcParser) {\n if (!data.length) return; // early exit for empty data\n\n const locale = timeFormatDefaultLocale();\n timeParser = timeParser || locale.timeParse;\n utcParser = utcParser || locale.utcParse;\n let fields = data.columns || Object.keys(data[0]),\n datum,\n field,\n i,\n j,\n n,\n m;\n if (types === 'auto') types = inferTypes(data, fields);\n fields = Object.keys(types);\n const parsers = fields.map(field => {\n const type = types[field];\n let parts, pattern;\n if (type && (type.startsWith('date:') || type.startsWith('utc:'))) {\n parts = type.split(/:(.+)?/, 2); // split on first :\n pattern = parts[1];\n if (pattern[0] === '\\'' && pattern[pattern.length - 1] === '\\'' || pattern[0] === '\"' && pattern[pattern.length - 1] === '\"') {\n pattern = pattern.slice(1, -1);\n }\n const parse = parts[0] === 'utc' ? utcParser : timeParser;\n return parse(pattern);\n }\n if (!typeParsers[type]) {\n throw Error('Illegal format pattern: ' + field + ':' + type);\n }\n return typeParsers[type];\n });\n for (i = 0, n = data.length, m = fields.length; i < n; ++i) {\n datum = data[i];\n for (j = 0; j < m; ++j) {\n field = fields[j];\n datum[field] = parsers[j](datum[field]);\n }\n }\n}\n\nconst loader = loaderFactory(typeof fetch !== 'undefined' && fetch,\n// use built-in fetch API\nnull // no file system access\n);\n\nexport { format, formats, inferType, inferTypes, loader, read, responseType, typeParsers };\n", "import { identity, array, isFunction, constant, isArray, id, error, truthy, debounce, extend, visitArray, inherits, logger, Error, hasOwnProperty } from 'vega-util';\nimport { read, responseType, loader } from 'vega-loader';\nimport { defaultLocale } from 'vega-format';\n\nfunction UniqueList(idFunc) {\n const $ = idFunc || identity,\n list = [],\n ids = {};\n list.add = _ => {\n const id = $(_);\n if (!ids[id]) {\n ids[id] = 1;\n list.push(_);\n }\n return list;\n };\n list.remove = _ => {\n const id = $(_);\n if (ids[id]) {\n ids[id] = 0;\n const idx = list.indexOf(_);\n if (idx >= 0) list.splice(idx, 1);\n }\n return list;\n };\n return list;\n}\n\n/**\n * Invoke and await a potentially async callback function. If\n * an error occurs, trap it and route to Dataflow.error.\n * @param {Dataflow} df - The dataflow instance\n * @param {function} callback - A callback function to invoke\n * and then await. The dataflow will be passed as the single\n * argument to the function.\n */\nasync function asyncCallback (df, callback) {\n try {\n await callback(df);\n } catch (err) {\n df.error(err);\n }\n}\n\nconst TUPLE_ID_KEY = Symbol('vega_id');\nlet TUPLE_ID = 1;\n\n/**\n * Checks if an input value is a registered tuple.\n * @param {*} t - The value to check.\n * @return {boolean} True if the input is a tuple, false otherwise.\n */\nfunction isTuple(t) {\n return !!(t && tupleid(t));\n}\n\n/**\n * Returns the id of a tuple.\n * @param {object} t - The input tuple.\n * @return {*} the tuple id.\n */\nfunction tupleid(t) {\n return t[TUPLE_ID_KEY];\n}\n\n/**\n * Sets the id of a tuple.\n * @param {object} t - The input tuple.\n * @param {*} id - The id value to set.\n * @return {object} the input tuple.\n */\nfunction setid(t, id) {\n t[TUPLE_ID_KEY] = id;\n return t;\n}\n\n/**\n * Ingest an object or value as a data tuple.\n * If the input value is an object, an id field will be added to it. For\n * efficiency, the input object is modified directly. A copy is not made.\n * If the input value is a literal, it will be wrapped in a new object\n * instance, with the value accessible as the 'data' property.\n * @param datum - The value to ingest.\n * @return {object} The ingested data tuple.\n */\nfunction ingest$1(datum) {\n const t = datum === Object(datum) ? datum : {\n data: datum\n };\n return tupleid(t) ? t : setid(t, TUPLE_ID++);\n}\n\n/**\n * Given a source tuple, return a derived copy.\n * @param {object} t - The source tuple.\n * @return {object} The derived tuple.\n */\nfunction derive(t) {\n return rederive(t, ingest$1({}));\n}\n\n/**\n * Rederive a derived tuple by copying values from the source tuple.\n * @param {object} t - The source tuple.\n * @param {object} d - The derived tuple.\n * @return {object} The derived tuple.\n */\nfunction rederive(t, d) {\n for (const k in t) d[k] = t[k];\n return d;\n}\n\n/**\n * Replace an existing tuple with a new tuple.\n * @param {object} t - The existing data tuple.\n * @param {object} d - The new tuple that replaces the old.\n * @return {object} The new tuple.\n */\nfunction replace(t, d) {\n return setid(d, tupleid(t));\n}\n\n/**\n * Generate an augmented comparator function that provides stable\n * sorting by tuple id when the given comparator produces ties.\n * @param {function} cmp - The comparator to augment.\n * @param {function} [f] - Optional tuple accessor function.\n * @return {function} An augmented comparator function.\n */\nfunction stableCompare(cmp, f) {\n return !cmp ? null : f ? (a, b) => cmp(a, b) || tupleid(f(a)) - tupleid(f(b)) : (a, b) => cmp(a, b) || tupleid(a) - tupleid(b);\n}\n\nfunction isChangeSet(v) {\n return v && v.constructor === changeset;\n}\nfunction changeset() {\n const add = [],\n // insert tuples\n rem = [],\n // remove tuples\n mod = [],\n // modify tuples\n remp = [],\n // remove by predicate\n modp = []; // modify by predicate\n let clean = null,\n reflow = false;\n return {\n constructor: changeset,\n insert(t) {\n const d = array(t),\n n = d.length;\n for (let i = 0; i < n; ++i) add.push(d[i]);\n return this;\n },\n remove(t) {\n const a = isFunction(t) ? remp : rem,\n d = array(t),\n n = d.length;\n for (let i = 0; i < n; ++i) a.push(d[i]);\n return this;\n },\n modify(t, field, value) {\n const m = {\n field: field,\n value: constant(value)\n };\n if (isFunction(t)) {\n m.filter = t;\n modp.push(m);\n } else {\n m.tuple = t;\n mod.push(m);\n }\n return this;\n },\n encode(t, set) {\n if (isFunction(t)) modp.push({\n filter: t,\n field: set\n });else mod.push({\n tuple: t,\n field: set\n });\n return this;\n },\n clean(value) {\n clean = value;\n return this;\n },\n reflow() {\n reflow = true;\n return this;\n },\n pulse(pulse, tuples) {\n const cur = {},\n out = {};\n let i, n, m, f, t, id;\n\n // build lookup table of current tuples\n for (i = 0, n = tuples.length; i < n; ++i) {\n cur[tupleid(tuples[i])] = 1;\n }\n\n // process individual tuples to remove\n for (i = 0, n = rem.length; i < n; ++i) {\n t = rem[i];\n cur[tupleid(t)] = -1;\n }\n\n // process predicate-based removals\n for (i = 0, n = remp.length; i < n; ++i) {\n f = remp[i];\n tuples.forEach(t => {\n if (f(t)) cur[tupleid(t)] = -1;\n });\n }\n\n // process all add tuples\n for (i = 0, n = add.length; i < n; ++i) {\n t = add[i];\n id = tupleid(t);\n if (cur[id]) {\n // tuple already resides in dataset\n // if flagged for both add and remove, cancel\n cur[id] = 1;\n } else {\n // tuple does not reside in dataset, add\n pulse.add.push(ingest$1(add[i]));\n }\n }\n\n // populate pulse rem list\n for (i = 0, n = tuples.length; i < n; ++i) {\n t = tuples[i];\n if (cur[tupleid(t)] < 0) pulse.rem.push(t);\n }\n\n // modify helper method\n function modify(t, f, v) {\n if (v) {\n t[f] = v(t);\n } else {\n pulse.encode = f;\n }\n if (!reflow) out[tupleid(t)] = t;\n }\n\n // process individual tuples to modify\n for (i = 0, n = mod.length; i < n; ++i) {\n m = mod[i];\n t = m.tuple;\n f = m.field;\n id = cur[tupleid(t)];\n if (id > 0) {\n modify(t, f, m.value);\n pulse.modifies(f);\n }\n }\n\n // process predicate-based modifications\n for (i = 0, n = modp.length; i < n; ++i) {\n m = modp[i];\n f = m.filter;\n tuples.forEach(t => {\n if (f(t) && cur[tupleid(t)] > 0) {\n modify(t, m.field, m.value);\n }\n });\n pulse.modifies(m.field);\n }\n\n // upon reflow request, populate mod with all non-removed tuples\n // otherwise, populate mod with modified tuples only\n if (reflow) {\n pulse.mod = rem.length || remp.length ? tuples.filter(t => cur[tupleid(t)] > 0) : tuples.slice();\n } else {\n for (id in out) pulse.mod.push(out[id]);\n }\n\n // set pulse garbage collection request\n if (clean || clean == null && (rem.length || remp.length)) {\n pulse.clean(true);\n }\n return pulse;\n }\n };\n}\n\nconst CACHE = '_:mod:_';\n\n/**\n * Hash that tracks modifications to assigned values.\n * Callers *must* use the set method to update values.\n */\nfunction Parameters() {\n Object.defineProperty(this, CACHE, {\n writable: true,\n value: {}\n });\n}\nParameters.prototype = {\n /**\n * Set a parameter value. If the parameter value changes, the parameter\n * will be recorded as modified.\n * @param {string} name - The parameter name.\n * @param {number} index - The index into an array-value parameter. Ignored if\n * the argument is undefined, null or less than zero.\n * @param {*} value - The parameter value to set.\n * @param {boolean} [force=false] - If true, records the parameter as modified\n * even if the value is unchanged.\n * @return {Parameters} - This parameter object.\n */\n set(name, index, value, force) {\n const o = this,\n v = o[name],\n mod = o[CACHE];\n if (index != null && index >= 0) {\n if (v[index] !== value || force) {\n v[index] = value;\n mod[index + ':' + name] = -1;\n mod[name] = -1;\n }\n } else if (v !== value || force) {\n o[name] = value;\n mod[name] = isArray(value) ? 1 + value.length : -1;\n }\n return o;\n },\n /**\n * Tests if one or more parameters has been modified. If invoked with no\n * arguments, returns true if any parameter value has changed. If the first\n * argument is array, returns trues if any parameter name in the array has\n * changed. Otherwise, tests if the given name and optional array index has\n * changed.\n * @param {string} name - The parameter name to test.\n * @param {number} [index=undefined] - The parameter array index to test.\n * @return {boolean} - Returns true if a queried parameter was modified.\n */\n modified(name, index) {\n const mod = this[CACHE];\n if (!arguments.length) {\n for (const k in mod) {\n if (mod[k]) return true;\n }\n return false;\n } else if (isArray(name)) {\n for (let k = 0; k < name.length; ++k) {\n if (mod[name[k]]) return true;\n }\n return false;\n }\n return index != null && index >= 0 ? index + 1 < mod[name] || !!mod[index + ':' + name] : !!mod[name];\n },\n /**\n * Clears the modification records. After calling this method,\n * all parameters are considered unmodified.\n */\n clear() {\n this[CACHE] = {};\n return this;\n }\n};\n\nlet OP_ID = 0;\nconst PULSE = 'pulse',\n NO_PARAMS = new Parameters();\n\n// Boolean Flags\nconst SKIP$1 = 1,\n MODIFIED = 2;\n\n/**\n * An Operator is a processing node in a dataflow graph.\n * Each operator stores a value and an optional value update function.\n * Operators can accept a hash of named parameters. Parameter values can\n * either be direct (JavaScript literals, arrays, objects) or indirect\n * (other operators whose values will be pulled dynamically). Operators\n * included as parameters will have this operator added as a dependency.\n * @constructor\n * @param {*} [init] - The initial value for this operator.\n * @param {function(object, Pulse)} [update] - An update function. Upon\n * evaluation of this operator, the update function will be invoked and the\n * return value will be used as the new value of this operator.\n * @param {object} [params] - The parameters for this operator.\n * @param {boolean} [react=true] - Flag indicating if this operator should\n * listen for changes to upstream operators included as parameters.\n * @see parameters\n */\nfunction Operator(init, update, params, react) {\n this.id = ++OP_ID;\n this.value = init;\n this.stamp = -1;\n this.rank = -1;\n this.qrank = -1;\n this.flags = 0;\n if (update) {\n this._update = update;\n }\n if (params) this.parameters(params, react);\n}\nfunction flag(bit) {\n return function (state) {\n const f = this.flags;\n if (arguments.length === 0) return !!(f & bit);\n this.flags = state ? f | bit : f & ~bit;\n return this;\n };\n}\nOperator.prototype = {\n /**\n * Returns a list of target operators dependent on this operator.\n * If this list does not exist, it is created and then returned.\n * @return {UniqueList}\n */\n targets() {\n return this._targets || (this._targets = UniqueList(id));\n },\n /**\n * Sets the value of this operator.\n * @param {*} value - the value to set.\n * @return {Number} Returns 1 if the operator value has changed\n * according to strict equality, returns 0 otherwise.\n */\n set(value) {\n if (this.value !== value) {\n this.value = value;\n return 1;\n } else {\n return 0;\n }\n },\n /**\n * Indicates that operator evaluation should be skipped on the next pulse.\n * This operator will still propagate incoming pulses, but its update function\n * will not be invoked. The skip flag is reset after every pulse, so calling\n * this method will affect processing of the next pulse only.\n */\n skip: flag(SKIP$1),\n /**\n * Indicates that this operator's value has been modified on its most recent\n * pulse. Normally modification is checked via strict equality; however, in\n * some cases it is more efficient to update the internal state of an object.\n * In those cases, the modified flag can be used to trigger propagation. Once\n * set, the modification flag persists across pulses until unset. The flag can\n * be used with the last timestamp to test if a modification is recent.\n */\n modified: flag(MODIFIED),\n /**\n * Sets the parameters for this operator. The parameter values are analyzed for\n * operator instances. If found, this operator will be added as a dependency\n * of the parameterizing operator. Operator values are dynamically marshalled\n * from each operator parameter prior to evaluation. If a parameter value is\n * an array, the array will also be searched for Operator instances. However,\n * the search does not recurse into sub-arrays or object properties.\n * @param {object} params - A hash of operator parameters.\n * @param {boolean} [react=true] - A flag indicating if this operator should\n * automatically update (react) when parameter values change. In other words,\n * this flag determines if the operator registers itself as a listener on\n * any upstream operators included in the parameters.\n * @param {boolean} [initonly=false] - A flag indicating if this operator\n * should calculate an update only upon its initial evaluation, then\n * deregister dependencies and suppress all future update invocations.\n * @return {Operator[]} - An array of upstream dependencies.\n */\n parameters(params, react, initonly) {\n react = react !== false;\n const argval = this._argval = this._argval || new Parameters(),\n argops = this._argops = this._argops || [],\n deps = [];\n let name, value, n, i;\n const add = (name, index, value) => {\n if (value instanceof Operator) {\n if (value !== this) {\n if (react) value.targets().add(this);\n deps.push(value);\n }\n argops.push({\n op: value,\n name: name,\n index: index\n });\n } else {\n argval.set(name, index, value);\n }\n };\n for (name in params) {\n value = params[name];\n if (name === PULSE) {\n array(value).forEach(op => {\n if (!(op instanceof Operator)) {\n error('Pulse parameters must be operator instances.');\n } else if (op !== this) {\n op.targets().add(this);\n deps.push(op);\n }\n });\n this.source = value;\n } else if (isArray(value)) {\n argval.set(name, -1, Array(n = value.length));\n for (i = 0; i < n; ++i) add(name, i, value[i]);\n } else {\n add(name, -1, value);\n }\n }\n this.marshall().clear(); // initialize values\n if (initonly) argops.initonly = true;\n return deps;\n },\n /**\n * Internal method for marshalling parameter values.\n * Visits each operator dependency to pull the latest value.\n * @return {Parameters} A Parameters object to pass to the update function.\n */\n marshall(stamp) {\n const argval = this._argval || NO_PARAMS,\n argops = this._argops;\n let item, i, op, mod;\n if (argops) {\n const n = argops.length;\n for (i = 0; i < n; ++i) {\n item = argops[i];\n op = item.op;\n mod = op.modified() && op.stamp === stamp;\n argval.set(item.name, item.index, op.value, mod);\n }\n if (argops.initonly) {\n for (i = 0; i < n; ++i) {\n item = argops[i];\n item.op.targets().remove(this);\n }\n this._argops = null;\n this._update = null;\n }\n }\n return argval;\n },\n /**\n * Detach this operator from the dataflow.\n * Unregisters listeners on upstream dependencies.\n */\n detach() {\n const argops = this._argops;\n let i, n, item, op;\n if (argops) {\n for (i = 0, n = argops.length; i < n; ++i) {\n item = argops[i];\n op = item.op;\n if (op._targets) {\n op._targets.remove(this);\n }\n }\n }\n\n // remove references to the source and pulse object,\n // if present, to prevent memory leaks of old data.\n this.pulse = null;\n this.source = null;\n },\n /**\n * Delegate method to perform operator processing.\n * Subclasses can override this method to perform custom processing.\n * By default, it marshalls parameters and calls the update function\n * if that function is defined. If the update function does not\n * change the operator value then StopPropagation is returned.\n * If no update function is defined, this method does nothing.\n * @param {Pulse} pulse - the current dataflow pulse.\n * @return The output pulse or StopPropagation. A falsy return value\n * (including undefined) will let the input pulse pass through.\n */\n evaluate(pulse) {\n const update = this._update;\n if (update) {\n const params = this.marshall(pulse.stamp),\n v = update.call(this, params, pulse);\n params.clear();\n if (v !== this.value) {\n this.value = v;\n } else if (!this.modified()) {\n return pulse.StopPropagation;\n }\n }\n },\n /**\n * Run this operator for the current pulse. If this operator has already\n * been run at (or after) the pulse timestamp, returns StopPropagation.\n * Internally, this method calls {@link evaluate} to perform processing.\n * If {@link evaluate} returns a falsy value, the input pulse is returned.\n * This method should NOT be overridden, instead overrride {@link evaluate}.\n * @param {Pulse} pulse - the current dataflow pulse.\n * @return the output pulse for this operator (or StopPropagation)\n */\n run(pulse) {\n if (pulse.stamp < this.stamp) return pulse.StopPropagation;\n let rv;\n if (this.skip()) {\n this.skip(false);\n rv = 0;\n } else {\n rv = this.evaluate(pulse);\n }\n return this.pulse = rv || pulse;\n }\n};\n\n/**\n * Add an operator to the dataflow graph. This function accepts a\n * variety of input argument types. The basic signature supports an\n * initial value, update function and parameters. If the first parameter\n * is an Operator instance, it will be added directly. If it is a\n * constructor for an Operator subclass, a new instance will be instantiated.\n * Otherwise, if the first parameter is a function instance, it will be used\n * as the update function and a null initial value is assumed.\n * @param {*} init - One of: the operator to add, the initial value of\n * the operator, an operator class to instantiate, or an update function.\n * @param {function} [update] - The operator update function.\n * @param {object} [params] - The operator parameters.\n * @param {boolean} [react=true] - Flag indicating if this operator should\n * listen for changes to upstream operators included as parameters.\n * @return {Operator} - The added operator.\n */\nfunction add (init, update, params, react) {\n let shift = 1,\n op;\n if (init instanceof Operator) {\n op = init;\n } else if (init && init.prototype instanceof Operator) {\n op = new init();\n } else if (isFunction(init)) {\n op = new Operator(null, init);\n } else {\n shift = 0;\n op = new Operator(init, update);\n }\n this.rank(op);\n if (shift) {\n react = params;\n params = update;\n }\n if (params) this.connect(op, op.parameters(params, react));\n this.touch(op);\n return op;\n}\n\n/**\n * Connect a target operator as a dependent of source operators.\n * If necessary, this method will rerank the target operator and its\n * dependents to ensure propagation proceeds in a topologically sorted order.\n * @param {Operator} target - The target operator.\n * @param {Array<Operator>} - The source operators that should propagate\n * to the target operator.\n */\nfunction connect (target, sources) {\n const targetRank = target.rank,\n n = sources.length;\n for (let i = 0; i < n; ++i) {\n if (targetRank < sources[i].rank) {\n this.rerank(target);\n return;\n }\n }\n}\n\nlet STREAM_ID = 0;\n\n/**\n * Models an event stream.\n * @constructor\n * @param {function(Object, number): boolean} [filter] - Filter predicate.\n * Events pass through when truthy, events are suppressed when falsy.\n * @param {function(Object): *} [apply] - Applied to input events to produce\n * new event values.\n * @param {function(Object)} [receive] - Event callback function to invoke\n * upon receipt of a new event. Use to override standard event processing.\n */\nfunction EventStream(filter, apply, receive) {\n this.id = ++STREAM_ID;\n this.value = null;\n if (receive) this.receive = receive;\n if (filter) this._filter = filter;\n if (apply) this._apply = apply;\n}\n\n/**\n * Creates a new event stream instance with the provided\n * (optional) filter, apply and receive functions.\n * @param {function(Object, number): boolean} [filter] - Filter predicate.\n * Events pass through when truthy, events are suppressed when falsy.\n * @param {function(Object): *} [apply] - Applied to input events to produce\n * new event values.\n * @see EventStream\n */\nfunction stream(filter, apply, receive) {\n return new EventStream(filter, apply, receive);\n}\nEventStream.prototype = {\n _filter: truthy,\n _apply: identity,\n targets() {\n return this._targets || (this._targets = UniqueList(id));\n },\n consume(_) {\n if (!arguments.length) return !!this._consume;\n this._consume = !!_;\n return this;\n },\n receive(evt) {\n if (this._filter(evt)) {\n const val = this.value = this._apply(evt),\n trg = this._targets,\n n = trg ? trg.length : 0;\n for (let i = 0; i < n; ++i) trg[i].receive(val);\n if (this._consume) {\n evt.preventDefault();\n evt.stopPropagation();\n }\n }\n },\n filter(filter) {\n const s = stream(filter);\n this.targets().add(s);\n return s;\n },\n apply(apply) {\n const s = stream(null, apply);\n this.targets().add(s);\n return s;\n },\n merge() {\n const s = stream();\n this.targets().add(s);\n for (let i = 0, n = arguments.length; i < n; ++i) {\n arguments[i].targets().add(s);\n }\n return s;\n },\n throttle(pause) {\n let t = -1;\n return this.filter(() => {\n const now = Date.now();\n if (now - t > pause) {\n t = now;\n return 1;\n } else {\n return 0;\n }\n });\n },\n debounce(delay) {\n const s = stream();\n this.targets().add(stream(null, null, debounce(delay, e => {\n const df = e.dataflow;\n s.receive(e);\n if (df && df.run) df.run();\n })));\n return s;\n },\n between(a, b) {\n let active = false;\n a.targets().add(stream(null, null, () => active = true));\n b.targets().add(stream(null, null, () => active = false));\n return this.filter(() => active);\n },\n detach() {\n // ensures compatibility with operators (#2753)\n // remove references to other streams and filter functions that may\n // be bound to subcontexts that need to be garbage collected.\n this._filter = truthy;\n this._targets = null;\n }\n};\n\n/**\n * Create a new event stream from an event source.\n * @param {object} source - The event source to monitor. The input must\n * support the addEventListener method.\n * @param {string} type - The event type.\n * @param {function(object): boolean} [filter] - Event filter function.\n * @param {function(object): *} [apply] - Event application function.\n * If provided, this function will be invoked and the result will be\n * used as the downstream event value.\n * @return {EventStream}\n */\nfunction events (source, type, filter, apply) {\n const df = this,\n s = stream(filter, apply),\n send = function (e) {\n e.dataflow = df;\n try {\n s.receive(e);\n } catch (error) {\n df.error(error);\n } finally {\n df.run();\n }\n };\n let sources;\n if (typeof source === 'string' && typeof document !== 'undefined') {\n sources = document.querySelectorAll(source);\n } else {\n sources = array(source);\n }\n const n = sources.length;\n for (let i = 0; i < n; ++i) {\n sources[i].addEventListener(type, send);\n }\n return s;\n}\n\nfunction parse(data, format) {\n const locale = this.locale();\n return read(data, format, locale.timeParse, locale.utcParse);\n}\n\n/**\n * Ingests new data into the dataflow. First parses the data using the\n * vega-loader read method, then pulses a changeset to the target operator.\n * @param {Operator} target - The Operator to target with ingested data,\n * typically a Collect transform instance.\n * @param {*} data - The input data, prior to parsing. For JSON this may\n * be a string or an object. For CSV, TSV, etc should be a string.\n * @param {object} format - The data format description for parsing\n * loaded data. This object is passed to the vega-loader read method.\n * @returns {Dataflow}\n */\nfunction ingest(target, data, format) {\n data = this.parse(data, format);\n return this.pulse(target, this.changeset().insert(data));\n}\n\n/**\n * Request data from an external source, parse it, and return a Promise.\n * @param {string} url - The URL from which to load the data. This string\n * is passed to the vega-loader load method.\n * @param {object} [format] - The data format description for parsing\n * loaded data. This object is passed to the vega-loader read method.\n * @return {Promise} A Promise that resolves upon completion of the request.\n * The resolved object contains the following properties:\n * - data: an array of parsed data (or null upon error)\n * - status: a code for success (0), load fail (-1), or parse fail (-2)\n */\nasync function request(url, format) {\n const df = this;\n let status = 0,\n data;\n try {\n data = await df.loader().load(url, {\n context: 'dataflow',\n response: responseType(format && format.type)\n });\n try {\n data = df.parse(data, format);\n } catch (err) {\n status = -2;\n df.warn('Data ingestion failed', url, err);\n }\n } catch (err) {\n status = -1;\n df.warn('Loading failed', url, err);\n }\n return {\n data,\n status\n };\n}\nasync function preload(target, url, format) {\n const df = this,\n pending = df._pending || loadPending(df);\n pending.requests += 1;\n const res = await df.request(url, format);\n df.pulse(target, df.changeset().remove(truthy).insert(res.data || []));\n pending.done();\n return res;\n}\nfunction loadPending(df) {\n let accept;\n const pending = new Promise(a => accept = a);\n pending.requests = 0;\n pending.done = () => {\n if (--pending.requests === 0) {\n df._pending = null;\n accept(df);\n }\n };\n return df._pending = pending;\n}\n\nconst SKIP = {\n skip: true\n};\n\n/**\n * Perform operator updates in response to events. Applies an\n * update function to compute a new operator value. If the update function\n * returns a {@link ChangeSet}, the operator will be pulsed with those tuple\n * changes. Otherwise, the operator value will be updated to the return value.\n * @param {EventStream|Operator} source - The event source to react to.\n * This argument can be either an EventStream or an Operator.\n * @param {Operator|function(object):Operator} target - The operator to update.\n * This argument can either be an Operator instance or (if the source\n * argument is an EventStream), a function that accepts an event object as\n * input and returns an Operator to target.\n * @param {function(Parameters,Event): *} [update] - Optional update function\n * to compute the new operator value, or a literal value to set. Update\n * functions expect to receive a parameter object and event as arguments.\n * This function can either return a new operator value or (if the source\n * argument is an EventStream) a {@link ChangeSet} instance to pulse\n * the target operator with tuple changes.\n * @param {object} [params] - The update function parameters.\n * @param {object} [options] - Additional options hash. If not overridden,\n * updated operators will be skipped by default.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @param {boolean} [options.force] - If true, the operator will\n * be re-evaluated even if its value has not changed.\n * @return {Dataflow}\n */\nfunction on (source, target, update, params, options) {\n const fn = source instanceof Operator ? onOperator : onStream;\n fn(this, source, target, update, params, options);\n return this;\n}\nfunction onStream(df, stream, target, update, params, options) {\n const opt = extend({}, options, SKIP);\n let func, op;\n if (!isFunction(target)) target = constant(target);\n if (update === undefined) {\n func = e => df.touch(target(e));\n } else if (isFunction(update)) {\n op = new Operator(null, update, params, false);\n func = e => {\n op.evaluate(e);\n const t = target(e),\n v = op.value;\n isChangeSet(v) ? df.pulse(t, v, options) : df.update(t, v, opt);\n };\n } else {\n func = e => df.update(target(e), update, opt);\n }\n stream.apply(func);\n}\nfunction onOperator(df, source, target, update, params, options) {\n if (update === undefined) {\n source.targets().add(target);\n } else {\n const opt = options || {},\n op = new Operator(null, updater(target, update), params, false);\n op.modified(opt.force);\n op.rank = source.rank; // immediately follow source\n source.targets().add(op); // add dependency\n\n if (target) {\n op.skip(true); // skip first invocation\n op.value = target.value; // initialize value\n op.targets().add(target); // chain dependencies\n df.connect(target, [op]); // rerank as needed, #1672\n }\n }\n}\nfunction updater(target, update) {\n update = isFunction(update) ? update : constant(update);\n return target ? function (_, pulse) {\n const value = update(_, pulse);\n if (!target.skip()) {\n target.skip(value !== this.value).value = value;\n }\n return value;\n } : update;\n}\n\n/**\n * Assigns a rank to an operator. Ranks are assigned in increasing order\n * by incrementing an internal rank counter.\n * @param {Operator} op - The operator to assign a rank.\n */\nfunction rank(op) {\n op.rank = ++this._rank;\n}\n\n/**\n * Re-ranks an operator and all downstream target dependencies. This\n * is necessary when upstream dependencies of higher rank are added to\n * a target operator.\n * @param {Operator} op - The operator to re-rank.\n */\nfunction rerank(op) {\n const queue = [op];\n let cur, list, i;\n while (queue.length) {\n this.rank(cur = queue.pop());\n if (list = cur._targets) {\n for (i = list.length; --i >= 0;) {\n queue.push(cur = list[i]);\n if (cur === op) error('Cycle detected in dataflow graph.');\n }\n }\n }\n}\n\n/**\n * Sentinel value indicating pulse propagation should stop.\n */\nconst StopPropagation = {};\n\n// Pulse visit type flags\nconst ADD = 1 << 0,\n REM = 1 << 1,\n MOD = 1 << 2,\n ADD_REM = ADD | REM,\n ADD_MOD = ADD | MOD,\n ALL = ADD | REM | MOD,\n REFLOW = 1 << 3,\n SOURCE = 1 << 4,\n NO_SOURCE = 1 << 5,\n NO_FIELDS = 1 << 6;\n\n/**\n * A Pulse enables inter-operator communication during a run of the\n * dataflow graph. In addition to the current timestamp, a pulse may also\n * contain a change-set of added, removed or modified data tuples, as well as\n * a pointer to a full backing data source. Tuple change sets may not\n * be fully materialized; for example, to prevent needless array creation\n * a change set may include larger arrays and corresponding filter functions.\n * The pulse provides a {@link visit} method to enable proper and efficient\n * iteration over requested data tuples.\n *\n * In addition, each pulse can track modification flags for data tuple fields.\n * Responsible transform operators should call the {@link modifies} method to\n * indicate changes to data fields. The {@link modified} method enables\n * querying of this modification state.\n *\n * @constructor\n * @param {Dataflow} dataflow - The backing dataflow instance.\n * @param {number} stamp - The current propagation timestamp.\n * @param {string} [encode] - An optional encoding set name, which is then\n * accessible as Pulse.encode. Operators can respond to (or ignore) this\n * setting as appropriate. This parameter can be used in conjunction with\n * the Encode transform in the vega-encode module.\n */\nfunction Pulse(dataflow, stamp, encode) {\n this.dataflow = dataflow;\n this.stamp = stamp == null ? -1 : stamp;\n this.add = [];\n this.rem = [];\n this.mod = [];\n this.fields = null;\n this.encode = encode || null;\n}\nfunction materialize(data, filter) {\n const out = [];\n visitArray(data, filter, _ => out.push(_));\n return out;\n}\nfunction filter(pulse, flags) {\n const map = {};\n pulse.visit(flags, t => {\n map[tupleid(t)] = 1;\n });\n return t => map[tupleid(t)] ? null : t;\n}\nfunction addFilter(a, b) {\n return a ? (t, i) => a(t, i) && b(t, i) : b;\n}\nPulse.prototype = {\n /**\n * Sentinel value indicating pulse propagation should stop.\n */\n StopPropagation,\n /**\n * Boolean flag indicating ADD (added) tuples.\n */\n ADD,\n /**\n * Boolean flag indicating REM (removed) tuples.\n */\n REM,\n /**\n * Boolean flag indicating MOD (modified) tuples.\n */\n MOD,\n /**\n * Boolean flag indicating ADD (added) and REM (removed) tuples.\n */\n ADD_REM,\n /**\n * Boolean flag indicating ADD (added) and MOD (modified) tuples.\n */\n ADD_MOD,\n /**\n * Boolean flag indicating ADD, REM and MOD tuples.\n */\n ALL,\n /**\n * Boolean flag indicating all tuples in a data source\n * except for the ADD, REM and MOD tuples.\n */\n REFLOW,\n /**\n * Boolean flag indicating a 'pass-through' to a\n * backing data source, ignoring ADD, REM and MOD tuples.\n */\n SOURCE,\n /**\n * Boolean flag indicating that source data should be\n * suppressed when creating a forked pulse.\n */\n NO_SOURCE,\n /**\n * Boolean flag indicating that field modifications should be\n * suppressed when creating a forked pulse.\n */\n NO_FIELDS,\n /**\n * Creates a new pulse based on the values of this pulse.\n * The dataflow, time stamp and field modification values are copied over.\n * By default, new empty ADD, REM and MOD arrays are created.\n * @param {number} flags - Integer of boolean flags indicating which (if any)\n * tuple arrays should be copied to the new pulse. The supported flag values\n * are ADD, REM and MOD. Array references are copied directly: new array\n * instances are not created.\n * @return {Pulse} - The forked pulse instance.\n * @see init\n */\n fork(flags) {\n return new Pulse(this.dataflow).init(this, flags);\n },\n /**\n * Creates a copy of this pulse with new materialized array\n * instances for the ADD, REM, MOD, and SOURCE arrays.\n * The dataflow, time stamp and field modification values are copied over.\n * @return {Pulse} - The cloned pulse instance.\n * @see init\n */\n clone() {\n const p = this.fork(ALL);\n p.add = p.add.slice();\n p.rem = p.rem.slice();\n p.mod = p.mod.slice();\n if (p.source) p.source = p.source.slice();\n return p.materialize(ALL | SOURCE);\n },\n /**\n * Returns a pulse that adds all tuples from a backing source. This is\n * useful for cases where operators are added to a dataflow after an\n * upstream data pipeline has already been processed, ensuring that\n * new operators can observe all tuples within a stream.\n * @return {Pulse} - A pulse instance with all source tuples included\n * in the add array. If the current pulse already has all source\n * tuples in its add array, it is returned directly. If the current\n * pulse does not have a backing source, it is returned directly.\n */\n addAll() {\n let p = this;\n const reuse = !p.source || p.add === p.rem // special case for indexed set (e.g., crossfilter)\n || !p.rem.length && p.source.length === p.add.length;\n if (reuse) {\n return p;\n } else {\n p = new Pulse(this.dataflow).init(this);\n p.add = p.source;\n p.rem = []; // new operators can ignore rem #2769\n return p;\n }\n },\n /**\n * Initialize this pulse based on the values of another pulse. This method\n * is used internally by {@link fork} to initialize a new forked tuple.\n * The dataflow, time stamp and field modification values are copied over.\n * By default, new empty ADD, REM and MOD arrays are created.\n * @param {Pulse} src - The source pulse to copy from.\n * @param {number} flags - Integer of boolean flags indicating which (if any)\n * tuple arrays should be copied to the new pulse. The supported flag values\n * are ADD, REM and MOD. Array references are copied directly: new array\n * instances are not created. By default, source data arrays are copied\n * to the new pulse. Use the NO_SOURCE flag to enforce a null source.\n * @return {Pulse} - Returns this Pulse instance.\n */\n init(src, flags) {\n const p = this;\n p.stamp = src.stamp;\n p.encode = src.encode;\n if (src.fields && !(flags & NO_FIELDS)) {\n p.fields = src.fields;\n }\n if (flags & ADD) {\n p.addF = src.addF;\n p.add = src.add;\n } else {\n p.addF = null;\n p.add = [];\n }\n if (flags & REM) {\n p.remF = src.remF;\n p.rem = src.rem;\n } else {\n p.remF = null;\n p.rem = [];\n }\n if (flags & MOD) {\n p.modF = src.modF;\n p.mod = src.mod;\n } else {\n p.modF = null;\n p.mod = [];\n }\n if (flags & NO_SOURCE) {\n p.srcF = null;\n p.source = null;\n } else {\n p.srcF = src.srcF;\n p.source = src.source;\n if (src.cleans) p.cleans = src.cleans;\n }\n return p;\n },\n /**\n * Schedules a function to run after pulse propagation completes.\n * @param {function} func - The function to run.\n */\n runAfter(func) {\n this.dataflow.runAfter(func);\n },\n /**\n * Indicates if tuples have been added, removed or modified.\n * @param {number} [flags] - The tuple types (ADD, REM or MOD) to query.\n * Defaults to ALL, returning true if any tuple type has changed.\n * @return {boolean} - Returns true if one or more queried tuple types have\n * changed, false otherwise.\n */\n changed(flags) {\n const f = flags || ALL;\n return f & ADD && this.add.length || f & REM && this.rem.length || f & MOD && this.mod.length;\n },\n /**\n * Forces a \"reflow\" of tuple values, such that all tuples in the backing\n * source are added to the MOD set, unless already present in the ADD set.\n * @param {boolean} [fork=false] - If true, returns a forked copy of this\n * pulse, and invokes reflow on that derived pulse.\n * @return {Pulse} - The reflowed pulse instance.\n */\n reflow(fork) {\n if (fork) return this.fork(ALL).reflow();\n const len = this.add.length,\n src = this.source && this.source.length;\n if (src && src !== len) {\n this.mod = this.source;\n if (len) this.filter(MOD, filter(this, ADD));\n }\n return this;\n },\n /**\n * Get/set metadata to pulse requesting garbage collection\n * to reclaim currently unused resources.\n */\n clean(value) {\n if (arguments.length) {\n this.cleans = !!value;\n return this;\n } else {\n return this.cleans;\n }\n },\n /**\n * Marks one or more data field names as modified to assist dependency\n * tracking and incremental processing by transform operators.\n * @param {string|Array<string>} _ - The field(s) to mark as modified.\n * @return {Pulse} - This pulse instance.\n */\n modifies(_) {\n const hash = this.fields || (this.fields = {});\n if (isArray(_)) {\n _.forEach(f => hash[f] = true);\n } else {\n hash[_] = true;\n }\n return this;\n },\n /**\n * Checks if one or more data fields have been modified during this pulse\n * propagation timestamp.\n * @param {string|Array<string>} _ - The field(s) to check for modified.\n * @param {boolean} nomod - If true, will check the modified flag even if\n * no mod tuples exist. If false (default), mod tuples must be present.\n * @return {boolean} - Returns true if any of the provided fields has been\n * marked as modified, false otherwise.\n */\n modified(_, nomod) {\n const fields = this.fields;\n return !((nomod || this.mod.length) && fields) ? false : !arguments.length ? !!fields : isArray(_) ? _.some(f => fields[f]) : fields[_];\n },\n /**\n * Adds a filter function to one more tuple sets. Filters are applied to\n * backing tuple arrays, to determine the actual set of tuples considered\n * added, removed or modified. They can be used to delay materialization of\n * a tuple set in order to avoid expensive array copies. In addition, the\n * filter functions can serve as value transformers: unlike standard predicate\n * function (which return boolean values), Pulse filters should return the\n * actual tuple value to process. If a tuple set is already filtered, the\n * new filter function will be appended into a conjuntive ('and') query.\n * @param {number} flags - Flags indicating the tuple set(s) to filter.\n * @param {function(*):object} filter - Filter function that will be applied\n * to the tuple set array, and should return a data tuple if the value\n * should be included in the tuple set, and falsy (or null) otherwise.\n * @return {Pulse} - Returns this pulse instance.\n */\n filter(flags, filter) {\n const p = this;\n if (flags & ADD) p.addF = addFilter(p.addF, filter);\n if (flags & REM) p.remF = addFilter(p.remF, filter);\n if (flags & MOD) p.modF = addFilter(p.modF, filter);\n if (flags & SOURCE) p.srcF = addFilter(p.srcF, filter);\n return p;\n },\n /**\n * Materialize one or more tuple sets in this pulse. If the tuple set(s) have\n * a registered filter function, it will be applied and the tuple set(s) will\n * be replaced with materialized tuple arrays.\n * @param {number} flags - Flags indicating the tuple set(s) to materialize.\n * @return {Pulse} - Returns this pulse instance.\n */\n materialize(flags) {\n flags = flags || ALL;\n const p = this;\n if (flags & ADD && p.addF) {\n p.add = materialize(p.add, p.addF);\n p.addF = null;\n }\n if (flags & REM && p.remF) {\n p.rem = materialize(p.rem, p.remF);\n p.remF = null;\n }\n if (flags & MOD && p.modF) {\n p.mod = materialize(p.mod, p.modF);\n p.modF = null;\n }\n if (flags & SOURCE && p.srcF) {\n p.source = p.source.filter(p.srcF);\n p.srcF = null;\n }\n return p;\n },\n /**\n * Visit one or more tuple sets in this pulse.\n * @param {number} flags - Flags indicating the tuple set(s) to visit.\n * Legal values are ADD, REM, MOD and SOURCE (if a backing data source\n * has been set).\n * @param {function(object):*} - Visitor function invoked per-tuple.\n * @return {Pulse} - Returns this pulse instance.\n */\n visit(flags, visitor) {\n const p = this,\n v = visitor;\n if (flags & SOURCE) {\n visitArray(p.source, p.srcF, v);\n return p;\n }\n if (flags & ADD) visitArray(p.add, p.addF, v);\n if (flags & REM) visitArray(p.rem, p.remF, v);\n if (flags & MOD) visitArray(p.mod, p.modF, v);\n const src = p.source;\n if (flags & REFLOW && src) {\n const sum = p.add.length + p.mod.length;\n if (sum === src.length) ; else if (sum) {\n visitArray(src, filter(p, ADD_MOD), v);\n } else {\n // if no add/rem/mod tuples, visit source\n visitArray(src, p.srcF, v);\n }\n }\n return p;\n }\n};\n\n/**\n * Represents a set of multiple pulses. Used as input for operators\n * that accept multiple pulses at a time. Contained pulses are\n * accessible via the public \"pulses\" array property. This pulse doe\n * not carry added, removed or modified tuples directly. However,\n * the visit method can be used to traverse all such tuples contained\n * in sub-pulses with a timestamp matching this parent multi-pulse.\n * @constructor\n * @param {Dataflow} dataflow - The backing dataflow instance.\n * @param {number} stamp - The timestamp.\n * @param {Array<Pulse>} pulses - The sub-pulses for this multi-pulse.\n */\nfunction MultiPulse(dataflow, stamp, pulses, encode) {\n const p = this;\n let c = 0;\n this.dataflow = dataflow;\n this.stamp = stamp;\n this.fields = null;\n this.encode = encode || null;\n this.pulses = pulses;\n for (const pulse of pulses) {\n if (pulse.stamp !== stamp) continue;\n if (pulse.fields) {\n const hash = p.fields || (p.fields = {});\n for (const f in pulse.fields) {\n hash[f] = 1;\n }\n }\n if (pulse.changed(p.ADD)) c |= p.ADD;\n if (pulse.changed(p.REM)) c |= p.REM;\n if (pulse.changed(p.MOD)) c |= p.MOD;\n }\n this.changes = c;\n}\ninherits(MultiPulse, Pulse, {\n /**\n * Creates a new pulse based on the values of this pulse.\n * The dataflow, time stamp and field modification values are copied over.\n * @return {Pulse}\n */\n fork(flags) {\n const p = new Pulse(this.dataflow).init(this, flags & this.NO_FIELDS);\n if (flags !== undefined) {\n if (flags & p.ADD) this.visit(p.ADD, t => p.add.push(t));\n if (flags & p.REM) this.visit(p.REM, t => p.rem.push(t));\n if (flags & p.MOD) this.visit(p.MOD, t => p.mod.push(t));\n }\n return p;\n },\n changed(flags) {\n return this.changes & flags;\n },\n modified(_) {\n const p = this,\n fields = p.fields;\n return !(fields && p.changes & p.MOD) ? 0 : isArray(_) ? _.some(f => fields[f]) : fields[_];\n },\n filter() {\n error('MultiPulse does not support filtering.');\n },\n materialize() {\n error('MultiPulse does not support materialization.');\n },\n visit(flags, visitor) {\n const p = this,\n pulses = p.pulses,\n n = pulses.length;\n let i = 0;\n if (flags & p.SOURCE) {\n for (; i < n; ++i) {\n pulses[i].visit(flags, visitor);\n }\n } else {\n for (; i < n; ++i) {\n if (pulses[i].stamp === p.stamp) {\n pulses[i].visit(flags, visitor);\n }\n }\n }\n return p;\n }\n});\n\n/* eslint-disable require-atomic-updates */\n\n/**\n * Evaluates the dataflow and returns a Promise that resolves when pulse\n * propagation completes. This method will increment the current timestamp\n * and process all updated, pulsed and touched operators. When invoked for\n * the first time, all registered operators will be processed. This method\n * should not be invoked by third-party clients, use {@link runAsync} or\n * {@link run} instead.\n * @param {string} [encode] - The name of an encoding set to invoke during\n * propagation. This value is added to generated Pulse instances;\n * operators can then respond to (or ignore) this setting as appropriate.\n * This parameter can be used in conjunction with the Encode transform in\n * the vega-encode package.\n * @param {function} [prerun] - An optional callback function to invoke\n * immediately before dataflow evaluation commences.\n * @param {function} [postrun] - An optional callback function to invoke\n * after dataflow evaluation completes. The callback will be invoked\n * after those registered via {@link runAfter}.\n * @return {Promise} - A promise that resolves to this dataflow after\n * evaluation completes.\n */\nasync function evaluate(encode, prerun, postrun) {\n const df = this,\n async = [];\n\n // if the pulse value is set, this is a re-entrant call\n if (df._pulse) return reentrant(df);\n\n // wait for pending datasets to load\n if (df._pending) await df._pending;\n\n // invoke prerun function, if provided\n if (prerun) await asyncCallback(df, prerun);\n\n // exit early if there are no updates\n if (!df._touched.length) {\n df.debug('Dataflow invoked, but nothing to do.');\n return df;\n }\n\n // increment timestamp clock\n const stamp = ++df._clock;\n\n // set the current pulse\n df._pulse = new Pulse(df, stamp, encode);\n\n // initialize priority queue, reset touched operators\n df._touched.forEach(op => df._enqueue(op, true));\n df._touched = UniqueList(id);\n let count = 0,\n op,\n next,\n error;\n try {\n while (df._heap.size() > 0) {\n // dequeue operator with highest priority\n op = df._heap.pop();\n\n // re-queue if rank changed\n if (op.rank !== op.qrank) {\n df._enqueue(op, true);\n continue;\n }\n\n // otherwise, evaluate the operator\n next = op.run(df._getPulse(op, encode));\n if (next.then) {\n // await if operator returns a promise directly\n next = await next;\n } else if (next.async) {\n // queue parallel asynchronous execution\n async.push(next.async);\n next = StopPropagation;\n }\n\n // propagate evaluation, enqueue dependent operators\n if (next !== StopPropagation) {\n if (op._targets) op._targets.forEach(op => df._enqueue(op));\n }\n\n // increment visit counter\n ++count;\n }\n } catch (err) {\n df._heap.clear();\n error = err;\n }\n\n // reset pulse map\n df._input = {};\n df._pulse = null;\n df.debug(`Pulse ${stamp}: ${count} operators`);\n if (error) {\n df._postrun = [];\n df.error(error);\n }\n\n // invoke callbacks queued via runAfter\n if (df._postrun.length) {\n const pr = df._postrun.sort((a, b) => b.priority - a.priority);\n df._postrun = [];\n for (let i = 0; i < pr.length; ++i) {\n await asyncCallback(df, pr[i].callback);\n }\n }\n\n // invoke postrun function, if provided\n if (postrun) await asyncCallback(df, postrun);\n\n // handle non-blocking asynchronous callbacks\n if (async.length) {\n Promise.all(async).then(cb => df.runAsync(null, () => {\n cb.forEach(f => {\n try {\n f(df);\n } catch (err) {\n df.error(err);\n }\n });\n }));\n }\n return df;\n}\n\n/**\n * Queues dataflow evaluation to run once any other queued evaluations have\n * completed and returns a Promise that resolves when the queued pulse\n * propagation completes. If provided, a callback function will be invoked\n * immediately before evaluation commences. This method will ensure a\n * separate evaluation is invoked for each time it is called.\n * @param {string} [encode] - The name of an encoding set to invoke during\n * propagation. This value is added to generated Pulse instances;\n * operators can then respond to (or ignore) this setting as appropriate.\n * This parameter can be used in conjunction with the Encode transform in\n * the vega-encode package.\n * @param {function} [prerun] - An optional callback function to invoke\n * immediately before dataflow evaluation commences.\n * @param {function} [postrun] - An optional callback function to invoke\n * after dataflow evaluation completes. The callback will be invoked\n * after those registered via {@link runAfter}.\n * @return {Promise} - A promise that resolves to this dataflow after\n * evaluation completes.\n */\nasync function runAsync(encode, prerun, postrun) {\n // await previously queued functions\n while (this._running) await this._running;\n\n // run dataflow, manage running promise\n const clear = () => this._running = null;\n (this._running = this.evaluate(encode, prerun, postrun)).then(clear, clear);\n return this._running;\n}\n\n/**\n * Requests dataflow evaluation and the immediately returns this dataflow\n * instance. If there are pending data loading or other asynchronous\n * operations, the dataflow will evaluate asynchronously after this method\n * has been invoked. To track when dataflow evaluation completes, use the\n * {@link runAsync} method instead. This method will raise an error if\n * invoked while the dataflow is already in the midst of evaluation.\n * @param {string} [encode] - The name of an encoding set to invoke during\n * propagation. This value is added to generated Pulse instances;\n * operators can then respond to (or ignore) this setting as appropriate.\n * This parameter can be used in conjunction with the Encode transform in\n * the vega-encode module.\n * @param {function} [prerun] - An optional callback function to invoke\n * immediately before dataflow evaluation commences.\n * @param {function} [postrun] - An optional callback function to invoke\n * after dataflow evaluation completes. The callback will be invoked\n * after those registered via {@link runAfter}.\n * @return {Dataflow} - This dataflow instance.\n */\nfunction run(encode, prerun, postrun) {\n return this._pulse ? reentrant(this) : (this.evaluate(encode, prerun, postrun), this);\n}\n\n/**\n * Schedules a callback function to be invoked after the current pulse\n * propagation completes. If no propagation is currently occurring,\n * the function is invoked immediately. Callbacks scheduled via runAfter\n * are invoked immediately upon completion of the current cycle, before\n * any request queued via runAsync. This method is primarily intended for\n * internal use. Third-party callers using runAfter to schedule a callback\n * that invokes {@link run} or {@link runAsync} should not use this method,\n * but instead use {@link runAsync} with prerun or postrun arguments.\n * @param {function(Dataflow)} callback - The callback function to run.\n * The callback will be invoked with this Dataflow instance as its\n * sole argument.\n * @param {boolean} enqueue - A boolean flag indicating that the\n * callback should be queued up to run after the next propagation\n * cycle, suppressing immediate invocation when propagation is not\n * currently occurring.\n * @param {number} [priority] - A priority value used to sort registered\n * callbacks to determine execution order. This argument is intended\n * for internal Vega use only.\n */\nfunction runAfter(callback, enqueue, priority) {\n if (this._pulse || enqueue) {\n // pulse propagation is currently running, queue to run after\n this._postrun.push({\n priority: priority || 0,\n callback: callback\n });\n } else {\n // pulse propagation already complete, invoke immediately\n try {\n callback(this);\n } catch (err) {\n this.error(err);\n }\n }\n}\n\n/**\n * Raise an error for re-entrant dataflow evaluation.\n */\nfunction reentrant(df) {\n df.error('Dataflow already running. Use runAsync() to chain invocations.');\n return df;\n}\n\n/**\n * Enqueue an operator into the priority queue for evaluation. The operator\n * will be enqueued if it has no registered pulse for the current cycle, or if\n * the force argument is true. Upon enqueue, this method also sets the\n * operator's qrank to the current rank value.\n * @param {Operator} op - The operator to enqueue.\n * @param {boolean} [force] - A flag indicating if the operator should be\n * forceably added to the queue, even if it has already been previously\n * enqueued during the current pulse propagation. This is useful when the\n * dataflow graph is dynamically modified and the operator rank changes.\n */\nfunction enqueue(op, force) {\n const q = op.stamp < this._clock;\n if (q) op.stamp = this._clock;\n if (q || force) {\n op.qrank = op.rank;\n this._heap.push(op);\n }\n}\n\n/**\n * Provide a correct pulse for evaluating an operator. If the operator has an\n * explicit source operator, we will try to pull the pulse(s) from it.\n * If there is an array of source operators, we build a multi-pulse.\n * Otherwise, we return a current pulse with correct source data.\n * If the pulse is the pulse map has an explicit target set, we use that.\n * Else if the pulse on the upstream source operator is current, we use that.\n * Else we use the pulse from the pulse map, but copy the source tuple array.\n * @param {Operator} op - The operator for which to get an input pulse.\n * @param {string} [encode] - An (optional) encoding set name with which to\n * annotate the returned pulse. See {@link run} for more information.\n */\nfunction getPulse(op, encode) {\n const s = op.source,\n stamp = this._clock;\n return s && isArray(s) ? new MultiPulse(this, stamp, s.map(_ => _.pulse), encode) : this._input[op.id] || singlePulse(this._pulse, s && s.pulse);\n}\nfunction singlePulse(p, s) {\n if (s && s.stamp === p.stamp) {\n return s;\n }\n p = p.fork();\n if (s && s !== StopPropagation) {\n p.source = s.source;\n }\n return p;\n}\n\nconst NO_OPT = {\n skip: false,\n force: false\n};\n\n/**\n * Touches an operator, scheduling it to be evaluated. If invoked outside of\n * a pulse propagation, the operator will be evaluated the next time this\n * dataflow is run. If invoked in the midst of pulse propagation, the operator\n * will be queued for evaluation if and only if the operator has not yet been\n * evaluated on the current propagation timestamp.\n * @param {Operator} op - The operator to touch.\n * @param {object} [options] - Additional options hash.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @return {Dataflow}\n */\nfunction touch(op, options) {\n const opt = options || NO_OPT;\n if (this._pulse) {\n // if in midst of propagation, add to priority queue\n this._enqueue(op);\n } else {\n // otherwise, queue for next propagation\n this._touched.add(op);\n }\n if (opt.skip) op.skip(true);\n return this;\n}\n\n/**\n * Updates the value of the given operator.\n * @param {Operator} op - The operator to update.\n * @param {*} value - The value to set.\n * @param {object} [options] - Additional options hash.\n * @param {boolean} [options.force] - If true, the operator will\n * be re-evaluated even if its value has not changed.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @return {Dataflow}\n */\nfunction update(op, value, options) {\n const opt = options || NO_OPT;\n if (op.set(value) || opt.force) {\n this.touch(op, opt);\n }\n return this;\n}\n\n/**\n * Pulses an operator with a changeset of tuples. If invoked outside of\n * a pulse propagation, the pulse will be applied the next time this\n * dataflow is run. If invoked in the midst of pulse propagation, the pulse\n * will be added to the set of active pulses and will be applied if and\n * only if the target operator has not yet been evaluated on the current\n * propagation timestamp.\n * @param {Operator} op - The operator to pulse.\n * @param {ChangeSet} value - The tuple changeset to apply.\n * @param {object} [options] - Additional options hash.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @return {Dataflow}\n */\nfunction pulse(op, changeset, options) {\n this.touch(op, options || NO_OPT);\n const p = new Pulse(this, this._clock + (this._pulse ? 0 : 1)),\n t = op.pulse && op.pulse.source || [];\n p.target = op;\n this._input[op.id] = changeset.pulse(p, t);\n return this;\n}\n\nfunction Heap(cmp) {\n let nodes = [];\n return {\n clear: () => nodes = [],\n size: () => nodes.length,\n peek: () => nodes[0],\n push: x => {\n nodes.push(x);\n return siftdown(nodes, 0, nodes.length - 1, cmp);\n },\n pop: () => {\n const last = nodes.pop();\n let item;\n if (nodes.length) {\n item = nodes[0];\n nodes[0] = last;\n siftup(nodes, 0, cmp);\n } else {\n item = last;\n }\n return item;\n }\n };\n}\nfunction siftdown(array, start, idx, cmp) {\n let parent, pidx;\n const item = array[idx];\n while (idx > start) {\n pidx = idx - 1 >> 1;\n parent = array[pidx];\n if (cmp(item, parent) < 0) {\n array[idx] = parent;\n idx = pidx;\n continue;\n }\n break;\n }\n return array[idx] = item;\n}\nfunction siftup(array, idx, cmp) {\n const start = idx,\n end = array.length,\n item = array[idx];\n let cidx = (idx << 1) + 1,\n ridx;\n while (cidx < end) {\n ridx = cidx + 1;\n if (ridx < end && cmp(array[cidx], array[ridx]) >= 0) {\n cidx = ridx;\n }\n array[idx] = array[cidx];\n idx = cidx;\n cidx = (idx << 1) + 1;\n }\n array[idx] = item;\n return siftdown(array, start, idx, cmp);\n}\n\n/**\n * A dataflow graph for reactive processing of data streams.\n * @constructor\n */\nfunction Dataflow() {\n this.logger(logger());\n this.logLevel(Error);\n this._clock = 0;\n this._rank = 0;\n this._locale = defaultLocale();\n try {\n this._loader = loader();\n } catch (e) {\n // do nothing if loader module is unavailable\n }\n this._touched = UniqueList(id);\n this._input = {};\n this._pulse = null;\n this._heap = Heap((a, b) => a.qrank - b.qrank);\n this._postrun = [];\n}\nfunction logMethod(method) {\n return function () {\n return this._log[method].apply(this, arguments);\n };\n}\nDataflow.prototype = {\n /**\n * The current timestamp of this dataflow. This value reflects the\n * timestamp of the previous dataflow run. The dataflow is initialized\n * with a stamp value of 0. The initial run of the dataflow will have\n * a timestap of 1, and so on. This value will match the\n * {@link Pulse.stamp} property.\n * @return {number} - The current timestamp value.\n */\n stamp() {\n return this._clock;\n },\n /**\n * Gets or sets the loader instance to use for data file loading. A\n * loader object must provide a \"load\" method for loading files and a\n * \"sanitize\" method for checking URL/filename validity. Both methods\n * should accept a URI and options hash as arguments, and return a Promise\n * that resolves to the loaded file contents (load) or a hash containing\n * sanitized URI data with the sanitized url assigned to the \"href\" property\n * (sanitize).\n * @param {object} _ - The loader instance to use.\n * @return {object|Dataflow} - If no arguments are provided, returns\n * the current loader instance. Otherwise returns this Dataflow instance.\n */\n loader(_) {\n if (arguments.length) {\n this._loader = _;\n return this;\n } else {\n return this._loader;\n }\n },\n /**\n * Gets or sets the locale instance to use for formatting and parsing\n * string values. The locale object should be provided by the\n * vega-format library, and include methods such as format, timeFormat,\n * utcFormat, timeParse, and utcParse.\n * @param {object} _ - The locale instance to use.\n * @return {object|Dataflow} - If no arguments are provided, returns\n * the current locale instance. Otherwise returns this Dataflow instance.\n */\n locale(_) {\n if (arguments.length) {\n this._locale = _;\n return this;\n } else {\n return this._locale;\n }\n },\n /**\n * Get or set the logger instance used to log messages. If no arguments are\n * provided, returns the current logger instance. Otherwise, sets the logger\n * and return this Dataflow instance. Provided loggers must support the full\n * API of logger objects generated by the vega-util logger method. Note that\n * by default the log level of the new logger will be used; use the logLevel\n * method to adjust the log level as needed.\n */\n logger(logger) {\n if (arguments.length) {\n this._log = logger;\n return this;\n } else {\n return this._log;\n }\n },\n /**\n * Logs an error message. By default, logged messages are written to console\n * output. The message will only be logged if the current log level is high\n * enough to permit error messages.\n */\n error: logMethod('error'),\n /**\n * Logs a warning message. By default, logged messages are written to console\n * output. The message will only be logged if the current log level is high\n * enough to permit warning messages.\n */\n warn: logMethod('warn'),\n /**\n * Logs a information message. By default, logged messages are written to\n * console output. The message will only be logged if the current log level is\n * high enough to permit information messages.\n */\n info: logMethod('info'),\n /**\n * Logs a debug message. By default, logged messages are written to console\n * output. The message will only be logged if the current log level is high\n * enough to permit debug messages.\n */\n debug: logMethod('debug'),\n /**\n * Get or set the current log level. If an argument is provided, it\n * will be used as the new log level.\n * @param {number} [level] - Should be one of None, Warn, Info\n * @return {number} - The current log level.\n */\n logLevel: logMethod('level'),\n /**\n * Empty entry threshold for garbage cleaning. Map data structures will\n * perform cleaning once the number of empty entries exceeds this value.\n */\n cleanThreshold: 1e4,\n // OPERATOR REGISTRATION\n add,\n connect,\n rank,\n rerank,\n // OPERATOR UPDATES\n pulse,\n touch,\n update,\n changeset,\n // DATA LOADING\n ingest,\n parse,\n preload,\n request,\n // EVENT HANDLING\n events,\n on,\n // PULSE PROPAGATION\n evaluate,\n run,\n runAsync,\n runAfter,\n _enqueue: enqueue,\n _getPulse: getPulse\n};\n\n/**\n * Abstract class for operators that process data tuples.\n * Subclasses must provide a {@link transform} method for operator processing.\n * @constructor\n * @param {*} [init] - The initial value for this operator.\n * @param {object} [params] - The parameters for this operator.\n * @param {Operator} [source] - The operator from which to receive pulses.\n */\nfunction Transform(init, params) {\n Operator.call(this, init, null, params);\n}\ninherits(Transform, Operator, {\n /**\n * Overrides {@link Operator.evaluate} for transform operators.\n * Internally, this method calls {@link evaluate} to perform processing.\n * If {@link evaluate} returns a falsy value, the input pulse is returned.\n * This method should NOT be overridden, instead overrride {@link evaluate}.\n * @param {Pulse} pulse - the current dataflow pulse.\n * @return the output pulse for this operator (or StopPropagation)\n */\n run(pulse) {\n if (pulse.stamp < this.stamp) return pulse.StopPropagation;\n let rv;\n if (this.skip()) {\n this.skip(false);\n } else {\n rv = this.evaluate(pulse);\n }\n rv = rv || pulse;\n if (rv.then) {\n rv = rv.then(_ => this.pulse = _);\n } else if (rv !== pulse.StopPropagation) {\n this.pulse = rv;\n }\n return rv;\n },\n /**\n * Overrides {@link Operator.evaluate} for transform operators.\n * Marshalls parameter values and then invokes {@link transform}.\n * @param {Pulse} pulse - the current dataflow pulse.\n * @return {Pulse} The output pulse (or StopPropagation). A falsy return\n value (including undefined) will let the input pulse pass through.\n */\n evaluate(pulse) {\n const params = this.marshall(pulse.stamp),\n out = this.transform(params, pulse);\n params.clear();\n return out;\n },\n /**\n * Process incoming pulses.\n * Subclasses should override this method to implement transforms.\n * @param {Parameters} _ - The operator parameter values.\n * @param {Pulse} pulse - The current dataflow pulse.\n * @return {Pulse} The output pulse (or StopPropagation). A falsy return\n * value (including undefined) will let the input pulse pass through.\n */\n transform() {}\n});\n\nconst transforms = {};\nfunction definition(type) {\n const t = transform(type);\n return t && t.Definition || null;\n}\nfunction transform(type) {\n type = type && type.toLowerCase();\n return hasOwnProperty(transforms, type) ? transforms[type] : null;\n}\n\nexport { Dataflow, EventStream, MultiPulse, Operator, Parameters, Pulse, Transform, UniqueList, asyncCallback, changeset, definition, derive, ingest$1 as ingest, isChangeSet, isTuple, rederive, replace, stableCompare, transform, transforms, tupleid };\n", "import { extend, identity, field, hasOwnProperty, extentIndex, inherits, array, accessorName, error, accessorFields, accessor, toNumber, merge, compare, truthy, extent, span, fastmap, isArray, key, ascending, peek, zero, constant } from 'vega-util';\nimport { tupleid, Transform, replace, ingest, stableCompare, Operator, derive, rederive } from 'vega-dataflow';\nimport { quartiles, bootstrapCI, bin, randomKDE, randomMixture, randomNormal, randomLogNormal, randomUniform, sampleCurve, dotbin, quantiles, random } from 'vega-statistics';\nimport { median, mean, min, max, range, bisector } from 'd3-array';\nimport { TIME_UNITS, utcInterval, timeInterval, timeBin, timeUnits, utcFloor, timeFloor } from 'vega-time';\n\nfunction multikey(f) {\n return x => {\n const n = f.length;\n let i = 1,\n k = String(f[0](x));\n for (; i < n; ++i) {\n k += '|' + f[i](x);\n }\n return k;\n };\n}\nfunction groupkey(fields) {\n return !fields || !fields.length ? function () {\n return '';\n } : fields.length === 1 ? fields[0] : multikey(fields);\n}\n\nfunction measureName(op, field, as) {\n return as || op + (!field ? '' : '_' + field);\n}\nconst noop = () => {};\nconst base_op = {\n init: noop,\n add: noop,\n rem: noop,\n idx: 0\n};\nconst AggregateOps = {\n values: {\n init: m => m.cell.store = true,\n value: m => m.cell.data.values(),\n idx: -1\n },\n count: {\n value: m => m.cell.num\n },\n __count__: {\n value: m => m.missing + m.valid\n },\n missing: {\n value: m => m.missing\n },\n valid: {\n value: m => m.valid\n },\n sum: {\n init: m => m.sum = 0,\n value: m => m.valid ? m.sum : undefined,\n add: (m, v) => m.sum += +v,\n rem: (m, v) => m.sum -= v\n },\n product: {\n init: m => m.product = 1,\n value: m => m.valid ? m.product : undefined,\n add: (m, v) => m.product *= v,\n rem: (m, v) => m.product /= v\n },\n mean: {\n init: m => m.mean = 0,\n value: m => m.valid ? m.mean : undefined,\n add: (m, v) => (m.mean_d = v - m.mean, m.mean += m.mean_d / m.valid),\n rem: (m, v) => (m.mean_d = v - m.mean, m.mean -= m.valid ? m.mean_d / m.valid : m.mean)\n },\n average: {\n value: m => m.valid ? m.mean : undefined,\n req: ['mean'],\n idx: 1\n },\n variance: {\n init: m => m.dev = 0,\n value: m => m.valid > 1 ? m.dev / (m.valid - 1) : undefined,\n add: (m, v) => m.dev += m.mean_d * (v - m.mean),\n rem: (m, v) => m.dev -= m.mean_d * (v - m.mean),\n req: ['mean'],\n idx: 1\n },\n variancep: {\n value: m => m.valid > 1 ? m.dev / m.valid : undefined,\n req: ['variance'],\n idx: 2\n },\n stdev: {\n value: m => m.valid > 1 ? Math.sqrt(m.dev / (m.valid - 1)) : undefined,\n req: ['variance'],\n idx: 2\n },\n stdevp: {\n value: m => m.valid > 1 ? Math.sqrt(m.dev / m.valid) : undefined,\n req: ['variance'],\n idx: 2\n },\n stderr: {\n value: m => m.valid > 1 ? Math.sqrt(m.dev / (m.valid * (m.valid - 1))) : undefined,\n req: ['variance'],\n idx: 2\n },\n distinct: {\n value: m => m.cell.data.distinct(m.get),\n req: ['values'],\n idx: 3\n },\n ci0: {\n value: m => m.cell.data.ci0(m.get),\n req: ['values'],\n idx: 3\n },\n ci1: {\n value: m => m.cell.data.ci1(m.get),\n req: ['values'],\n idx: 3\n },\n median: {\n value: m => m.cell.data.q2(m.get),\n req: ['values'],\n idx: 3\n },\n q1: {\n value: m => m.cell.data.q1(m.get),\n req: ['values'],\n idx: 3\n },\n q3: {\n value: m => m.cell.data.q3(m.get),\n req: ['values'],\n idx: 3\n },\n min: {\n init: m => m.min = undefined,\n value: m => m.min = Number.isNaN(m.min) ? m.cell.data.min(m.get) : m.min,\n add: (m, v) => {\n if (v < m.min || m.min === undefined) m.min = v;\n },\n rem: (m, v) => {\n if (v <= m.min) m.min = NaN;\n },\n req: ['values'],\n idx: 4\n },\n max: {\n init: m => m.max = undefined,\n value: m => m.max = Number.isNaN(m.max) ? m.cell.data.max(m.get) : m.max,\n add: (m, v) => {\n if (v > m.max || m.max === undefined) m.max = v;\n },\n rem: (m, v) => {\n if (v >= m.max) m.max = NaN;\n },\n req: ['values'],\n idx: 4\n },\n argmin: {\n init: m => m.argmin = undefined,\n value: m => m.argmin || m.cell.data.argmin(m.get),\n add: (m, v, t) => {\n if (v < m.min) m.argmin = t;\n },\n rem: (m, v) => {\n if (v <= m.min) m.argmin = undefined;\n },\n req: ['min', 'values'],\n idx: 3\n },\n argmax: {\n init: m => m.argmax = undefined,\n value: m => m.argmax || m.cell.data.argmax(m.get),\n add: (m, v, t) => {\n if (v > m.max) m.argmax = t;\n },\n rem: (m, v) => {\n if (v >= m.max) m.argmax = undefined;\n },\n req: ['max', 'values'],\n idx: 3\n },\n exponential: {\n init: (m, r) => {\n m.exp = 0;\n m.exp_r = r;\n },\n value: m => m.valid ? m.exp * (1 - m.exp_r) / (1 - m.exp_r ** m.valid) : undefined,\n add: (m, v) => m.exp = m.exp_r * m.exp + v,\n rem: (m, v) => m.exp = (m.exp - v / m.exp_r ** (m.valid - 1)) / m.exp_r\n },\n exponentialb: {\n value: m => m.valid ? m.exp * (1 - m.exp_r) : undefined,\n req: ['exponential'],\n idx: 1\n }\n};\nconst ValidAggregateOps = Object.keys(AggregateOps).filter(d => d !== '__count__');\nfunction measure(key, value) {\n return (out, aggregate_param) => extend({\n name: key,\n aggregate_param: aggregate_param,\n out: out || key\n }, base_op, value);\n}\n[...ValidAggregateOps, '__count__'].forEach(key => {\n AggregateOps[key] = measure(key, AggregateOps[key]);\n});\nfunction createMeasure(op, param, name) {\n return AggregateOps[op](name, param);\n}\nfunction compareIndex(a, b) {\n return a.idx - b.idx;\n}\nfunction resolve(agg) {\n const map = {};\n agg.forEach(a => map[a.name] = a);\n const getreqs = a => {\n if (!a.req) return;\n a.req.forEach(key => {\n if (!map[key]) getreqs(map[key] = AggregateOps[key]());\n });\n };\n agg.forEach(getreqs);\n return Object.values(map).sort(compareIndex);\n}\nfunction init() {\n this.valid = 0;\n this.missing = 0;\n this._ops.forEach(op => op.aggregate_param == null ? op.init(this) : op.init(this, op.aggregate_param));\n}\nfunction add(v, t) {\n if (v == null || v === '') {\n ++this.missing;\n return;\n }\n if (v !== v) return;\n ++this.valid;\n this._ops.forEach(op => op.add(this, v, t));\n}\nfunction rem(v, t) {\n if (v == null || v === '') {\n --this.missing;\n return;\n }\n if (v !== v) return;\n --this.valid;\n this._ops.forEach(op => op.rem(this, v, t));\n}\nfunction set(t) {\n this._out.forEach(op => t[op.out] = op.value(this));\n return t;\n}\nfunction compileMeasures(agg, field) {\n const get = field || identity,\n ops = resolve(agg),\n out = agg.slice().sort(compareIndex);\n function ctr(cell) {\n this._ops = ops;\n this._out = out;\n this.cell = cell;\n this.init();\n }\n ctr.prototype.init = init;\n ctr.prototype.add = add;\n ctr.prototype.rem = rem;\n ctr.prototype.set = set;\n ctr.prototype.get = get;\n ctr.fields = agg.map(op => op.out);\n return ctr;\n}\n\nfunction TupleStore(key) {\n this._key = key ? field(key) : tupleid;\n this.reset();\n}\nconst prototype$1 = TupleStore.prototype;\nprototype$1.reset = function () {\n this._add = [];\n this._rem = [];\n this._ext = null;\n this._get = null;\n this._q = null;\n};\nprototype$1.add = function (v) {\n this._add.push(v);\n};\nprototype$1.rem = function (v) {\n this._rem.push(v);\n};\nprototype$1.values = function () {\n this._get = null;\n if (this._rem.length === 0) return this._add;\n const a = this._add,\n r = this._rem,\n k = this._key,\n n = a.length,\n m = r.length,\n x = Array(n - m),\n map = {};\n let i, j, v;\n\n // use unique key field to clear removed values\n for (i = 0; i < m; ++i) {\n map[k(r[i])] = 1;\n }\n for (i = 0, j = 0; i < n; ++i) {\n if (map[k(v = a[i])]) {\n map[k(v)] = 0;\n } else {\n x[j++] = v;\n }\n }\n this._rem = [];\n return this._add = x;\n};\n\n// memoizing statistics methods\n\nprototype$1.distinct = function (get) {\n const v = this.values(),\n map = {};\n let n = v.length,\n count = 0,\n s;\n while (--n >= 0) {\n s = get(v[n]) + '';\n if (!hasOwnProperty(map, s)) {\n map[s] = 1;\n ++count;\n }\n }\n return count;\n};\nprototype$1.extent = function (get) {\n if (this._get !== get || !this._ext) {\n const v = this.values(),\n i = extentIndex(v, get);\n this._ext = [v[i[0]], v[i[1]]];\n this._get = get;\n }\n return this._ext;\n};\nprototype$1.argmin = function (get) {\n return this.extent(get)[0] || {};\n};\nprototype$1.argmax = function (get) {\n return this.extent(get)[1] || {};\n};\nprototype$1.min = function (get) {\n const m = this.extent(get)[0];\n return m != null ? get(m) : undefined;\n};\nprototype$1.max = function (get) {\n const m = this.extent(get)[1];\n return m != null ? get(m) : undefined;\n};\nprototype$1.quartile = function (get) {\n if (this._get !== get || !this._q) {\n this._q = quartiles(this.values(), get);\n this._get = get;\n }\n return this._q;\n};\nprototype$1.q1 = function (get) {\n return this.quartile(get)[0];\n};\nprototype$1.q2 = function (get) {\n return this.quartile(get)[1];\n};\nprototype$1.q3 = function (get) {\n return this.quartile(get)[2];\n};\nprototype$1.ci = function (get) {\n if (this._get !== get || !this._ci) {\n this._ci = bootstrapCI(this.values(), 1000, 0.05, get);\n this._get = get;\n }\n return this._ci;\n};\nprototype$1.ci0 = function (get) {\n return this.ci(get)[0];\n};\nprototype$1.ci1 = function (get) {\n return this.ci(get)[1];\n};\n\n/**\n * Group-by aggregation operator.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array<function(object): *>} [params.groupby] - An array of accessors to groupby.\n * @param {Array<function(object): *>} [params.fields] - An array of accessors to aggregate.\n * @param {Array<string>} [params.ops] - An array of strings indicating aggregation operations.\n * @param {Array<number>} [params.aggregate_params] - An optional array of parameters for aggregation operations.\n * @param {Array<string>} [params.as] - An array of output field names for aggregated values.\n * @param {boolean} [params.cross=false] - A flag indicating that the full\n * cross-product of groupby values should be generated, including empty cells.\n * If true, the drop parameter is ignored and empty cells are retained.\n * @param {boolean} [params.drop=true] - A flag indicating if empty cells should be removed.\n */\nfunction Aggregate(params) {\n Transform.call(this, null, params);\n this._adds = []; // array of added output tuples\n this._mods = []; // array of modified output tuples\n this._alen = 0; // number of active added tuples\n this._mlen = 0; // number of active modified tuples\n this._drop = true; // should empty aggregation cells be removed\n this._cross = false; // produce full cross-product of group-by values\n\n this._dims = []; // group-by dimension accessors\n this._dnames = []; // group-by dimension names\n\n this._measures = []; // collection of aggregation monoids\n this._countOnly = false; // flag indicating only count aggregation\n this._counts = null; // collection of count fields\n this._prev = null; // previous aggregation cells\n\n this._inputs = null; // array of dependent input tuple field names\n this._outputs = null; // array of output tuple field names\n}\nAggregate.Definition = {\n 'type': 'Aggregate',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'ops',\n 'type': 'enum',\n 'array': true,\n 'values': ValidAggregateOps\n }, {\n 'name': 'aggregate_params',\n 'type': 'number',\n 'null': true,\n 'array': true\n }, {\n 'name': 'fields',\n 'type': 'field',\n 'null': true,\n 'array': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'null': true,\n 'array': true\n }, {\n 'name': 'drop',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'cross',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'key',\n 'type': 'field'\n }]\n};\ninherits(Aggregate, Transform, {\n transform(_, pulse) {\n const aggr = this,\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n mod = _.modified();\n aggr.stamp = out.stamp;\n if (aggr.value && (mod || pulse.modified(aggr._inputs, true))) {\n aggr._prev = aggr.value;\n aggr.value = mod ? aggr.init(_) : Object.create(null);\n pulse.visit(pulse.SOURCE, t => aggr.add(t));\n } else {\n aggr.value = aggr.value || aggr.init(_);\n pulse.visit(pulse.REM, t => aggr.rem(t));\n pulse.visit(pulse.ADD, t => aggr.add(t));\n }\n\n // Indicate output fields and return aggregate tuples.\n out.modifies(aggr._outputs);\n\n // Should empty cells be dropped?\n aggr._drop = _.drop !== false;\n\n // If domain cross-product requested, generate empty cells as needed\n // and ensure that empty cells are not dropped\n if (_.cross && aggr._dims.length > 1) {\n aggr._drop = false;\n aggr.cross();\n }\n if (pulse.clean() && aggr._drop) {\n out.clean(true).runAfter(() => this.clean());\n }\n return aggr.changes(out);\n },\n cross() {\n const aggr = this,\n curr = aggr.value,\n dims = aggr._dnames,\n vals = dims.map(() => ({})),\n n = dims.length;\n\n // collect all group-by domain values\n function collect(cells) {\n let key, i, t, v;\n for (key in cells) {\n t = cells[key].tuple;\n for (i = 0; i < n; ++i) {\n vals[i][v = t[dims[i]]] = v;\n }\n }\n }\n collect(aggr._prev);\n collect(curr);\n\n // iterate over key cross-product, create cells as needed\n function generate(base, tuple, index) {\n const name = dims[index],\n v = vals[index++];\n for (const k in v) {\n const key = base ? base + '|' + k : k;\n tuple[name] = v[k];\n if (index < n) generate(key, tuple, index);else if (!curr[key]) aggr.cell(key, tuple);\n }\n }\n generate('', {}, 0);\n },\n init(_) {\n // initialize input and output fields\n const inputs = this._inputs = [],\n outputs = this._outputs = [],\n inputMap = {};\n function inputVisit(get) {\n const fields = array(accessorFields(get)),\n n = fields.length;\n let i = 0,\n f;\n for (; i < n; ++i) {\n if (!inputMap[f = fields[i]]) {\n inputMap[f] = 1;\n inputs.push(f);\n }\n }\n }\n\n // initialize group-by dimensions\n this._dims = array(_.groupby);\n this._dnames = this._dims.map(d => {\n const dname = accessorName(d);\n inputVisit(d);\n outputs.push(dname);\n return dname;\n });\n this.cellkey = _.key ? _.key : groupkey(this._dims);\n\n // initialize aggregate measures\n this._countOnly = true;\n this._counts = [];\n this._measures = [];\n const fields = _.fields || [null],\n ops = _.ops || ['count'],\n aggregate_params = _.aggregate_params || [null],\n as = _.as || [],\n n = fields.length,\n map = {};\n let field, op, aggregate_param, m, mname, outname, i;\n if (n !== ops.length) {\n error('Unmatched number of fields and aggregate ops.');\n }\n for (i = 0; i < n; ++i) {\n field = fields[i];\n op = ops[i];\n aggregate_param = aggregate_params[i] || null;\n if (field == null && op !== 'count') {\n error('Null aggregate field specified.');\n }\n mname = accessorName(field);\n outname = measureName(op, mname, as[i]);\n outputs.push(outname);\n if (op === 'count') {\n this._counts.push(outname);\n continue;\n }\n m = map[mname];\n if (!m) {\n inputVisit(field);\n m = map[mname] = [];\n m.field = field;\n this._measures.push(m);\n }\n if (op !== 'count') this._countOnly = false;\n m.push(createMeasure(op, aggregate_param, outname));\n }\n this._measures = this._measures.map(m => compileMeasures(m, m.field));\n return Object.create(null); // aggregation cells (this.value)\n },\n // -- Cell Management -----\n\n cellkey: groupkey(),\n cell(key, t) {\n let cell = this.value[key];\n if (!cell) {\n cell = this.value[key] = this.newcell(key, t);\n this._adds[this._alen++] = cell;\n } else if (cell.num === 0 && this._drop && cell.stamp < this.stamp) {\n cell.stamp = this.stamp;\n this._adds[this._alen++] = cell;\n } else if (cell.stamp < this.stamp) {\n cell.stamp = this.stamp;\n this._mods[this._mlen++] = cell;\n }\n return cell;\n },\n newcell(key, t) {\n const cell = {\n key: key,\n num: 0,\n agg: null,\n tuple: this.newtuple(t, this._prev && this._prev[key]),\n stamp: this.stamp,\n store: false\n };\n if (!this._countOnly) {\n const measures = this._measures,\n n = measures.length;\n cell.agg = Array(n);\n for (let i = 0; i < n; ++i) {\n cell.agg[i] = new measures[i](cell);\n }\n }\n if (cell.store) {\n cell.data = new TupleStore();\n }\n return cell;\n },\n newtuple(t, p) {\n const names = this._dnames,\n dims = this._dims,\n n = dims.length,\n x = {};\n for (let i = 0; i < n; ++i) {\n x[names[i]] = dims[i](t);\n }\n return p ? replace(p.tuple, x) : ingest(x);\n },\n clean() {\n const cells = this.value;\n for (const key in cells) {\n if (cells[key].num === 0) {\n delete cells[key];\n }\n }\n },\n // -- Process Tuples -----\n\n add(t) {\n const key = this.cellkey(t),\n cell = this.cell(key, t);\n cell.num += 1;\n if (this._countOnly) return;\n if (cell.store) cell.data.add(t);\n const agg = cell.agg;\n for (let i = 0, n = agg.length; i < n; ++i) {\n agg[i].add(agg[i].get(t), t);\n }\n },\n rem(t) {\n const key = this.cellkey(t),\n cell = this.cell(key, t);\n cell.num -= 1;\n if (this._countOnly) return;\n if (cell.store) cell.data.rem(t);\n const agg = cell.agg;\n for (let i = 0, n = agg.length; i < n; ++i) {\n agg[i].rem(agg[i].get(t), t);\n }\n },\n celltuple(cell) {\n const tuple = cell.tuple,\n counts = this._counts;\n\n // consolidate stored values\n if (cell.store) {\n cell.data.values();\n }\n\n // update tuple properties\n for (let i = 0, n = counts.length; i < n; ++i) {\n tuple[counts[i]] = cell.num;\n }\n if (!this._countOnly) {\n const agg = cell.agg;\n for (let i = 0, n = agg.length; i < n; ++i) {\n agg[i].set(tuple);\n }\n }\n return tuple;\n },\n changes(out) {\n const adds = this._adds,\n mods = this._mods,\n prev = this._prev,\n drop = this._drop,\n add = out.add,\n rem = out.rem,\n mod = out.mod;\n let cell, key, i, n;\n if (prev) for (key in prev) {\n cell = prev[key];\n if (!drop || cell.num) rem.push(cell.tuple);\n }\n for (i = 0, n = this._alen; i < n; ++i) {\n add.push(this.celltuple(adds[i]));\n adds[i] = null; // for garbage collection\n }\n for (i = 0, n = this._mlen; i < n; ++i) {\n cell = mods[i];\n (cell.num === 0 && drop ? rem : mod).push(this.celltuple(cell));\n mods[i] = null; // for garbage collection\n }\n this._alen = this._mlen = 0; // reset list of active cells\n this._prev = null;\n return out;\n }\n});\n\n// epsilon bias to offset floating point error (#1737)\nconst EPSILON$1 = 1e-14;\n\n/**\n * Generates a binning function for discretizing data.\n * @constructor\n * @param {object} params - The parameters for this operator. The\n * provided values should be valid options for the {@link bin} function.\n * @param {function(object): *} params.field - The data field to bin.\n */\nfunction Bin(params) {\n Transform.call(this, null, params);\n}\nBin.Definition = {\n 'type': 'Bin',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'interval',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'anchor',\n 'type': 'number'\n }, {\n 'name': 'maxbins',\n 'type': 'number',\n 'default': 20\n }, {\n 'name': 'base',\n 'type': 'number',\n 'default': 10\n }, {\n 'name': 'divide',\n 'type': 'number',\n 'array': true,\n 'default': [5, 2]\n }, {\n 'name': 'extent',\n 'type': 'number',\n 'array': true,\n 'length': 2,\n 'required': true\n }, {\n 'name': 'span',\n 'type': 'number'\n }, {\n 'name': 'step',\n 'type': 'number'\n }, {\n 'name': 'steps',\n 'type': 'number',\n 'array': true\n }, {\n 'name': 'minstep',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'nice',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'name',\n 'type': 'string'\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['bin0', 'bin1']\n }]\n};\ninherits(Bin, Transform, {\n transform(_, pulse) {\n const band = _.interval !== false,\n bins = this._bins(_),\n start = bins.start,\n step = bins.step,\n as = _.as || ['bin0', 'bin1'],\n b0 = as[0],\n b1 = as[1];\n let flag;\n if (_.modified()) {\n pulse = pulse.reflow(true);\n flag = pulse.SOURCE;\n } else {\n flag = pulse.modified(accessorFields(_.field)) ? pulse.ADD_MOD : pulse.ADD;\n }\n pulse.visit(flag, band ? t => {\n const v = bins(t);\n // minimum bin value (inclusive)\n t[b0] = v;\n // maximum bin value (exclusive)\n // use convoluted math for better floating point agreement\n // see https://github.com/vega/vega/issues/830\n // infinite values propagate through this formula! #2227\n t[b1] = v == null ? null : start + step * (1 + (v - start) / step);\n } : t => t[b0] = bins(t));\n return pulse.modifies(band ? as : b0);\n },\n _bins(_) {\n if (this.value && !_.modified()) {\n return this.value;\n }\n const field = _.field,\n bins = bin(_),\n step = bins.step;\n let start = bins.start,\n stop = start + Math.ceil((bins.stop - start) / step) * step,\n a,\n d;\n if ((a = _.anchor) != null) {\n d = a - (start + step * Math.floor((a - start) / step));\n start += d;\n stop += d;\n }\n const f = function (t) {\n let v = toNumber(field(t));\n return v == null ? null : v < start ? -Infinity : v > stop ? +Infinity : (v = Math.max(start, Math.min(v, stop - step)), start + step * Math.floor(EPSILON$1 + (v - start) / step));\n };\n f.start = start;\n f.stop = bins.stop;\n f.step = step;\n return this.value = accessor(f, accessorFields(field), _.name || 'bin_' + accessorName(field));\n }\n});\n\nfunction SortedList (idFunc, source, input) {\n const $ = idFunc;\n let data = source || [],\n add = input || [],\n rem = {},\n cnt = 0;\n return {\n add: t => add.push(t),\n remove: t => rem[$(t)] = ++cnt,\n size: () => data.length,\n data: (compare, resort) => {\n if (cnt) {\n data = data.filter(t => !rem[$(t)]);\n rem = {};\n cnt = 0;\n }\n if (resort && compare) {\n data.sort(compare);\n }\n if (add.length) {\n data = compare ? merge(compare, data, add.sort(compare)) : data.concat(add);\n add = [];\n }\n return data;\n }\n };\n}\n\n/**\n * Collects all data tuples that pass through this operator.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - An optional\n * comparator function for additionally sorting the collected tuples.\n */\nfunction Collect(params) {\n Transform.call(this, [], params);\n}\nCollect.Definition = {\n 'type': 'Collect',\n 'metadata': {\n 'source': true\n },\n 'params': [{\n 'name': 'sort',\n 'type': 'compare'\n }]\n};\ninherits(Collect, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.ALL),\n list = SortedList(tupleid, this.value, out.materialize(out.ADD).add),\n sort = _.sort,\n mod = pulse.changed() || sort && (_.modified('sort') || pulse.modified(sort.fields));\n out.visit(out.REM, list.remove);\n this.modified(mod);\n this.value = out.source = list.data(stableCompare(sort), mod);\n\n // propagate tree root if defined\n if (pulse.source && pulse.source.root) {\n this.value.root = pulse.source.root;\n }\n return out;\n }\n});\n\n/**\n * Generates a comparator function.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array<string|function>} params.fields - The fields to compare.\n * @param {Array<string>} [params.orders] - The sort orders.\n * Each entry should be one of \"ascending\" (default) or \"descending\".\n */\nfunction Compare(params) {\n Operator.call(this, null, update$5, params);\n}\ninherits(Compare, Operator);\nfunction update$5(_) {\n return this.value && !_.modified() ? this.value : compare(_.fields, _.orders);\n}\n\n/**\n * Count regexp-defined pattern occurrences in a text field.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - An accessor for the text field.\n * @param {string} [params.pattern] - RegExp string defining the text pattern.\n * @param {string} [params.case] - One of 'lower', 'upper' or null (mixed) case.\n * @param {string} [params.stopwords] - RegExp string of words to ignore.\n */\nfunction CountPattern(params) {\n Transform.call(this, null, params);\n}\nCountPattern.Definition = {\n 'type': 'CountPattern',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'case',\n 'type': 'enum',\n 'values': ['upper', 'lower', 'mixed'],\n 'default': 'mixed'\n }, {\n 'name': 'pattern',\n 'type': 'string',\n 'default': '[\\\\w\"]+'\n }, {\n 'name': 'stopwords',\n 'type': 'string',\n 'default': ''\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['text', 'count']\n }]\n};\nfunction tokenize(text, tcase, match) {\n switch (tcase) {\n case 'upper':\n text = text.toUpperCase();\n break;\n case 'lower':\n text = text.toLowerCase();\n break;\n }\n return text.match(match);\n}\ninherits(CountPattern, Transform, {\n transform(_, pulse) {\n const process = update => tuple => {\n var tokens = tokenize(get(tuple), _.case, match) || [],\n t;\n for (var i = 0, n = tokens.length; i < n; ++i) {\n if (!stop.test(t = tokens[i])) update(t);\n }\n };\n const init = this._parameterCheck(_, pulse),\n counts = this._counts,\n match = this._match,\n stop = this._stop,\n get = _.field,\n as = _.as || ['text', 'count'],\n add = process(t => counts[t] = 1 + (counts[t] || 0)),\n rem = process(t => counts[t] -= 1);\n if (init) {\n pulse.visit(pulse.SOURCE, add);\n } else {\n pulse.visit(pulse.ADD, add);\n pulse.visit(pulse.REM, rem);\n }\n return this._finish(pulse, as); // generate output tuples\n },\n _parameterCheck(_, pulse) {\n let init = false;\n if (_.modified('stopwords') || !this._stop) {\n this._stop = new RegExp('^' + (_.stopwords || '') + '$', 'i');\n init = true;\n }\n if (_.modified('pattern') || !this._match) {\n this._match = new RegExp(_.pattern || '[\\\\w\\']+', 'g');\n init = true;\n }\n if (_.modified('field') || pulse.modified(_.field.fields)) {\n init = true;\n }\n if (init) this._counts = {};\n return init;\n },\n _finish(pulse, as) {\n const counts = this._counts,\n tuples = this._tuples || (this._tuples = {}),\n text = as[0],\n count = as[1],\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n let w, t, c;\n for (w in counts) {\n t = tuples[w];\n c = counts[w] || 0;\n if (!t && c) {\n tuples[w] = t = ingest({});\n t[text] = w;\n t[count] = c;\n out.add.push(t);\n } else if (c === 0) {\n if (t) out.rem.push(t);\n counts[w] = null;\n tuples[w] = null;\n } else if (t[count] !== c) {\n t[count] = c;\n out.mod.push(t);\n }\n }\n return out.modifies(as);\n }\n});\n\n/**\n * Perform a cross-product of a tuple stream with itself.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object):boolean} [params.filter] - An optional filter\n * function for selectively including tuples in the cross product.\n * @param {Array<string>} [params.as] - The names of the output fields.\n */\nfunction Cross(params) {\n Transform.call(this, null, params);\n}\nCross.Definition = {\n 'type': 'Cross',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'filter',\n 'type': 'expr'\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['a', 'b']\n }]\n};\ninherits(Cross, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE),\n as = _.as || ['a', 'b'],\n a = as[0],\n b = as[1],\n reset = !this.value || pulse.changed(pulse.ADD_REM) || _.modified('as') || _.modified('filter');\n let data = this.value;\n if (reset) {\n if (data) out.rem = data;\n data = pulse.materialize(pulse.SOURCE).source;\n out.add = this.value = cross(data, a, b, _.filter || truthy);\n } else {\n out.mod = data;\n }\n out.source = this.value;\n return out.modifies(as);\n }\n});\nfunction cross(input, a, b, filter) {\n var data = [],\n t = {},\n n = input.length,\n i = 0,\n j,\n left;\n for (; i < n; ++i) {\n t[a] = left = input[i];\n for (j = 0; j < n; ++j) {\n t[b] = input[j];\n if (filter(t)) {\n data.push(ingest(t));\n t = {};\n t[a] = left;\n }\n }\n }\n return data;\n}\n\nconst Distributions = {\n kde: randomKDE,\n mixture: randomMixture,\n normal: randomNormal,\n lognormal: randomLogNormal,\n uniform: randomUniform\n};\nconst DISTRIBUTIONS = 'distributions',\n FUNCTION = 'function',\n FIELD = 'field';\n\n/**\n * Parse a parameter object for a probability distribution.\n * @param {object} def - The distribution parameter object.\n * @param {function():Array<object>} - A method for requesting\n * source data. Used for distributions (such as KDE) that\n * require sample data points. This method will only be\n * invoked if the 'from' parameter for a target data source\n * is not provided. Typically this method returns backing\n * source data for a Pulse object.\n * @return {object} - The output distribution object.\n */\nfunction parse(def, data) {\n const func = def[FUNCTION];\n if (!hasOwnProperty(Distributions, func)) {\n error('Unknown distribution function: ' + func);\n }\n const d = Distributions[func]();\n for (const name in def) {\n // if data field, extract values\n if (name === FIELD) {\n d.data((def.from || data()).map(def[name]));\n }\n\n // if distribution mixture, recurse to parse each definition\n else if (name === DISTRIBUTIONS) {\n d[name](def[name].map(_ => parse(_, data)));\n }\n\n // otherwise, simply set the parameter\n else if (typeof d[name] === FUNCTION) {\n d[name](def[name]);\n }\n }\n return d;\n}\n\n/**\n * Grid sample points for a probability density. Given a distribution and\n * a sampling extent, will generate points suitable for plotting either\n * PDF (probability density function) or CDF (cumulative distribution\n * function) curves.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.distribution - The probability distribution. This\n * is an object parameter dependent on the distribution type.\n * @param {string} [params.method='pdf'] - The distribution method to sample.\n * One of 'pdf' or 'cdf'.\n * @param {Array<number>} [params.extent] - The [min, max] extent over which\n * to sample the distribution. This argument is required in most cases, but\n * can be omitted if the distribution (e.g., 'kde') supports a 'data' method\n * that returns numerical sample points from which the extent can be deduced.\n * @param {number} [params.minsteps=25] - The minimum number of curve samples\n * for plotting the density.\n * @param {number} [params.maxsteps=200] - The maximum number of curve samples\n * for plotting the density.\n * @param {number} [params.steps] - The exact number of curve samples for\n * plotting the density. If specified, overrides both minsteps and maxsteps\n * to set an exact number of uniform samples. Useful in conjunction with\n * a fixed extent to ensure consistent sample points for stacked densities.\n */\nfunction Density(params) {\n Transform.call(this, null, params);\n}\nconst distributions = [{\n 'key': {\n 'function': 'normal'\n },\n 'params': [{\n 'name': 'mean',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'stdev',\n 'type': 'number',\n 'default': 1\n }]\n}, {\n 'key': {\n 'function': 'lognormal'\n },\n 'params': [{\n 'name': 'mean',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'stdev',\n 'type': 'number',\n 'default': 1\n }]\n}, {\n 'key': {\n 'function': 'uniform'\n },\n 'params': [{\n 'name': 'min',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'max',\n 'type': 'number',\n 'default': 1\n }]\n}, {\n 'key': {\n 'function': 'kde'\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'from',\n 'type': 'data'\n }, {\n 'name': 'bandwidth',\n 'type': 'number',\n 'default': 0\n }]\n}];\nconst mixture = {\n 'key': {\n 'function': 'mixture'\n },\n 'params': [{\n 'name': 'distributions',\n 'type': 'param',\n 'array': true,\n 'params': distributions\n }, {\n 'name': 'weights',\n 'type': 'number',\n 'array': true\n }]\n};\nDensity.Definition = {\n 'type': 'Density',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'extent',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'steps',\n 'type': 'number'\n }, {\n 'name': 'minsteps',\n 'type': 'number',\n 'default': 25\n }, {\n 'name': 'maxsteps',\n 'type': 'number',\n 'default': 200\n }, {\n 'name': 'method',\n 'type': 'string',\n 'default': 'pdf',\n 'values': ['pdf', 'cdf']\n }, {\n 'name': 'distribution',\n 'type': 'param',\n 'params': distributions.concat(mixture)\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'default': ['value', 'density']\n }]\n};\ninherits(Density, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n if (!this.value || pulse.changed() || _.modified()) {\n const dist = parse(_.distribution, source(pulse)),\n minsteps = _.steps || _.minsteps || 25,\n maxsteps = _.steps || _.maxsteps || 200;\n let method = _.method || 'pdf';\n if (method !== 'pdf' && method !== 'cdf') {\n error('Invalid density method: ' + method);\n }\n if (!_.extent && !dist.data) {\n error('Missing density extent parameter.');\n }\n method = dist[method];\n const as = _.as || ['value', 'density'],\n domain = _.extent || extent(dist.data()),\n values = sampleCurve(method, domain, minsteps, maxsteps).map(v => {\n const tuple = {};\n tuple[as[0]] = v[0];\n tuple[as[1]] = v[1];\n return ingest(tuple);\n });\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n }\n return out;\n }\n});\nfunction source(pulse) {\n return () => pulse.materialize(pulse.SOURCE).source;\n}\n\n// use either provided alias or accessor field name\nfunction fieldNames(fields, as) {\n if (!fields) return null;\n return fields.map((f, i) => as[i] || accessorName(f));\n}\nfunction partition$1(data, groupby, field) {\n const groups = [],\n get = f => f(t);\n let map, i, n, t, k, g;\n\n // partition data points into groups\n if (groupby == null) {\n groups.push(data.map(field));\n } else {\n for (map = {}, i = 0, n = data.length; i < n; ++i) {\n t = data[i];\n k = groupby.map(get);\n g = map[k];\n if (!g) {\n map[k] = g = [];\n g.dims = k;\n groups.push(g);\n }\n g.push(field(t));\n }\n }\n return groups;\n}\n\nconst Output = 'bin';\n\n/**\n * Dot density binning for dot plot construction.\n * Based on Leland Wilkinson, Dot Plots, The American Statistician, 1999.\n * https://www.cs.uic.edu/~wilkinson/Publications/dotplots.pdf\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to bin.\n * @param {Array<function(object): *>} [params.groupby] - An array of accessors to groupby.\n * @param {number} [params.step] - The step size (bin width) within which dots should be\n * stacked. Defaults to 1/30 of the extent of the data *field*.\n * @param {boolean} [params.smooth=false] - A boolean flag indicating if dot density\n * stacks should be smoothed to reduce variance.\n */\nfunction DotBin(params) {\n Transform.call(this, null, params);\n}\nDotBin.Definition = {\n 'type': 'DotBin',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'step',\n 'type': 'number'\n }, {\n 'name': 'smooth',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': Output\n }]\n};\nconst autostep = (data, field) => span(extent(data, field)) / 30;\ninherits(DotBin, Transform, {\n transform(_, pulse) {\n if (this.value && !(_.modified() || pulse.changed())) {\n return pulse; // early exit\n }\n const source = pulse.materialize(pulse.SOURCE).source,\n groups = partition$1(pulse.source, _.groupby, identity),\n smooth = _.smooth || false,\n field = _.field,\n step = _.step || autostep(source, field),\n sort = stableCompare((a, b) => field(a) - field(b)),\n as = _.as || Output,\n n = groups.length;\n\n // compute dotplot bins per group\n let min = Infinity,\n max = -Infinity,\n i = 0,\n j;\n for (; i < n; ++i) {\n const g = groups[i].sort(sort);\n j = -1;\n for (const v of dotbin(g, step, smooth, field)) {\n if (v < min) min = v;\n if (v > max) max = v;\n g[++j][as] = v;\n }\n }\n this.value = {\n start: min,\n stop: max,\n step: step\n };\n return pulse.reflow(true).modifies(as);\n }\n});\n\n/**\n * Wraps an expression function with access to external parameters.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function} params.expr - The expression function. The\n * function should accept both a datum and a parameter object.\n * This operator's value will be a new function that wraps the\n * expression function with access to this operator's parameters.\n */\nfunction Expression(params) {\n Operator.call(this, null, update$4, params);\n this.modified(true);\n}\ninherits(Expression, Operator);\nfunction update$4(_) {\n const expr = _.expr;\n return this.value && !_.modified('expr') ? this.value : accessor(datum => expr(datum, _), accessorFields(expr), accessorName(expr));\n}\n\n/**\n * Computes extents (min/max) for a data field.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The field over which to compute extends.\n */\nfunction Extent(params) {\n Transform.call(this, [undefined, undefined], params);\n}\nExtent.Definition = {\n 'type': 'Extent',\n 'metadata': {},\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }]\n};\ninherits(Extent, Transform, {\n transform(_, pulse) {\n const extent = this.value,\n field = _.field,\n mod = pulse.changed() || pulse.modified(field.fields) || _.modified('field');\n let min = extent[0],\n max = extent[1];\n if (mod || min == null) {\n min = +Infinity;\n max = -Infinity;\n }\n pulse.visit(mod ? pulse.SOURCE : pulse.ADD, t => {\n const v = toNumber(field(t));\n if (v != null) {\n // NaNs will fail all comparisons!\n if (v < min) min = v;\n if (v > max) max = v;\n }\n });\n if (!Number.isFinite(min) || !Number.isFinite(max)) {\n let name = accessorName(field);\n if (name) name = ` for field \"${name}\"`;\n pulse.dataflow.warn(`Infinite extent${name}: [${min}, ${max}]`);\n min = max = undefined;\n }\n this.value = [min, max];\n }\n});\n\n/**\n * Provides a bridge between a parent transform and a target subflow that\n * consumes only a subset of the tuples that pass through the parent.\n * @constructor\n * @param {Pulse} pulse - A pulse to use as the value of this operator.\n * @param {Transform} parent - The parent transform (typically a Facet instance).\n */\nfunction Subflow(pulse, parent) {\n Operator.call(this, pulse);\n this.parent = parent;\n this.count = 0;\n}\ninherits(Subflow, Operator, {\n /**\n * Routes pulses from this subflow to a target transform.\n * @param {Transform} target - A transform that receives the subflow of tuples.\n */\n connect(target) {\n this.detachSubflow = target.detachSubflow;\n this.targets().add(target);\n return target.source = this;\n },\n /**\n * Add an 'add' tuple to the subflow pulse.\n * @param {Tuple} t - The tuple being added.\n */\n add(t) {\n this.count += 1;\n this.value.add.push(t);\n },\n /**\n * Add a 'rem' tuple to the subflow pulse.\n * @param {Tuple} t - The tuple being removed.\n */\n rem(t) {\n this.count -= 1;\n this.value.rem.push(t);\n },\n /**\n * Add a 'mod' tuple to the subflow pulse.\n * @param {Tuple} t - The tuple being modified.\n */\n mod(t) {\n this.value.mod.push(t);\n },\n /**\n * Re-initialize this operator's pulse value.\n * @param {Pulse} pulse - The pulse to copy from.\n * @see Pulse.init\n */\n init(pulse) {\n this.value.init(pulse, pulse.NO_SOURCE);\n },\n /**\n * Evaluate this operator. This method overrides the\n * default behavior to simply return the contained pulse value.\n * @return {Pulse}\n */\n evaluate() {\n // assert: this.value.stamp === pulse.stamp\n return this.value;\n }\n});\n\n/**\n * Facets a dataflow into a set of subflows based on a key.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(Dataflow, string): Operator} params.subflow - A function\n * that generates a subflow of operators and returns its root operator.\n * @param {function(object): *} params.key - The key field to facet by.\n */\nfunction Facet(params) {\n Transform.call(this, {}, params);\n this._keys = fastmap(); // cache previously calculated key values\n\n // keep track of active subflows, use as targets array for listeners\n // this allows us to limit propagation to only updated subflows\n const a = this._targets = [];\n a.active = 0;\n a.forEach = f => {\n for (let i = 0, n = a.active; i < n; ++i) {\n f(a[i], i, a);\n }\n };\n}\ninherits(Facet, Transform, {\n activate(flow) {\n this._targets[this._targets.active++] = flow;\n },\n // parent argument provided by PreFacet subclass\n subflow(key, flow, pulse, parent) {\n const flows = this.value;\n let sf = hasOwnProperty(flows, key) && flows[key],\n df,\n p;\n if (!sf) {\n p = parent || (p = this._group[key]) && p.tuple;\n df = pulse.dataflow;\n sf = new Subflow(pulse.fork(pulse.NO_SOURCE), this);\n df.add(sf).connect(flow(df, key, p));\n flows[key] = sf;\n this.activate(sf);\n } else if (sf.value.stamp < pulse.stamp) {\n sf.init(pulse);\n this.activate(sf);\n }\n return sf;\n },\n clean() {\n const flows = this.value;\n let detached = 0;\n for (const key in flows) {\n if (flows[key].count === 0) {\n const detach = flows[key].detachSubflow;\n if (detach) detach();\n delete flows[key];\n ++detached;\n }\n }\n\n // remove inactive targets from the active targets array\n if (detached) {\n const active = this._targets.filter(sf => sf && sf.count > 0);\n this.initTargets(active);\n }\n },\n initTargets(act) {\n const a = this._targets,\n n = a.length,\n m = act ? act.length : 0;\n let i = 0;\n for (; i < m; ++i) {\n a[i] = act[i];\n }\n for (; i < n && a[i] != null; ++i) {\n a[i] = null; // ensure old flows can be garbage collected\n }\n a.active = m;\n },\n transform(_, pulse) {\n const df = pulse.dataflow,\n key = _.key,\n flow = _.subflow,\n cache = this._keys,\n rekey = _.modified('key'),\n subflow = key => this.subflow(key, flow, pulse);\n this._group = _.group || {};\n this.initTargets(); // reset list of active subflows\n\n pulse.visit(pulse.REM, t => {\n const id = tupleid(t),\n k = cache.get(id);\n if (k !== undefined) {\n cache.delete(id);\n subflow(k).rem(t);\n }\n });\n pulse.visit(pulse.ADD, t => {\n const k = key(t);\n cache.set(tupleid(t), k);\n subflow(k).add(t);\n });\n if (rekey || pulse.modified(key.fields)) {\n pulse.visit(pulse.MOD, t => {\n const id = tupleid(t),\n k0 = cache.get(id),\n k1 = key(t);\n if (k0 === k1) {\n subflow(k1).mod(t);\n } else {\n cache.set(id, k1);\n subflow(k0).rem(t);\n subflow(k1).add(t);\n }\n });\n } else if (pulse.changed(pulse.MOD)) {\n pulse.visit(pulse.MOD, t => {\n subflow(cache.get(tupleid(t))).mod(t);\n });\n }\n if (rekey) {\n pulse.visit(pulse.REFLOW, t => {\n const id = tupleid(t),\n k0 = cache.get(id),\n k1 = key(t);\n if (k0 !== k1) {\n cache.set(id, k1);\n subflow(k0).rem(t);\n subflow(k1).add(t);\n }\n });\n }\n if (pulse.clean()) {\n df.runAfter(() => {\n this.clean();\n cache.clean();\n });\n } else if (cache.empty > df.cleanThreshold) {\n df.runAfter(cache.clean);\n }\n return pulse;\n }\n});\n\n/**\n * Generates one or more field accessor functions.\n * If the 'name' parameter is an array, an array of field accessors\n * will be created and the 'as' parameter will be ignored.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {string} params.name - The field name(s) to access.\n * @param {string} params.as - The accessor function name.\n */\nfunction Field(params) {\n Operator.call(this, null, update$3, params);\n}\ninherits(Field, Operator);\nfunction update$3(_) {\n return this.value && !_.modified() ? this.value : isArray(_.name) ? array(_.name).map(f => field(f)) : field(_.name, _.as);\n}\n\n/**\n * Filters data tuples according to a predicate function.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.expr - The predicate expression function\n * that determines a tuple's filter status. Truthy values pass the filter.\n */\nfunction Filter(params) {\n Transform.call(this, fastmap(), params);\n}\nFilter.Definition = {\n 'type': 'Filter',\n 'metadata': {\n 'changes': true\n },\n 'params': [{\n 'name': 'expr',\n 'type': 'expr',\n 'required': true\n }]\n};\ninherits(Filter, Transform, {\n transform(_, pulse) {\n const df = pulse.dataflow,\n cache = this.value,\n // cache ids of filtered tuples\n output = pulse.fork(),\n add = output.add,\n rem = output.rem,\n mod = output.mod,\n test = _.expr;\n let isMod = true;\n pulse.visit(pulse.REM, t => {\n const id = tupleid(t);\n if (!cache.has(id)) rem.push(t);else cache.delete(id);\n });\n pulse.visit(pulse.ADD, t => {\n if (test(t, _)) add.push(t);else cache.set(tupleid(t), 1);\n });\n function revisit(t) {\n const id = tupleid(t),\n b = test(t, _),\n s = cache.get(id);\n if (b && s) {\n cache.delete(id);\n add.push(t);\n } else if (!b && !s) {\n cache.set(id, 1);\n rem.push(t);\n } else if (isMod && b && !s) {\n mod.push(t);\n }\n }\n pulse.visit(pulse.MOD, revisit);\n if (_.modified()) {\n isMod = false;\n pulse.visit(pulse.REFLOW, revisit);\n }\n if (cache.empty > df.cleanThreshold) df.runAfter(cache.clean);\n return output;\n }\n});\n\n/**\n * Flattens array-typed field values into new data objects.\n * If multiple fields are specified, they are treated as parallel arrays,\n * with output values included for each matching index (or null if missing).\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array<function(object): *>} params.fields - An array of field\n * accessors for the tuple fields that should be flattened.\n * @param {string} [params.index] - Optional output field name for index\n * value. If unspecified, no index field is included in the output.\n * @param {Array<string>} [params.as] - Output field names for flattened\n * array fields. Any unspecified fields will use the field name provided\n * by the fields accessors.\n */\nfunction Flatten(params) {\n Transform.call(this, [], params);\n}\nFlatten.Definition = {\n 'type': 'Flatten',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'required': true\n }, {\n 'name': 'index',\n 'type': 'string'\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true\n }]\n};\ninherits(Flatten, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE),\n fields = _.fields,\n as = fieldNames(fields, _.as || []),\n index = _.index || null,\n m = as.length;\n\n // remove any previous results\n out.rem = this.value;\n\n // generate flattened tuples\n pulse.visit(pulse.SOURCE, t => {\n const arrays = fields.map(f => f(t)),\n maxlen = arrays.reduce((l, a) => Math.max(l, a.length), 0);\n let i = 0,\n j,\n d,\n v;\n for (; i < maxlen; ++i) {\n d = derive(t);\n for (j = 0; j < m; ++j) {\n d[as[j]] = (v = arrays[j][i]) == null ? null : v;\n }\n if (index) {\n d[index] = i;\n }\n out.add.push(d);\n }\n });\n this.value = out.source = out.add;\n if (index) out.modifies(index);\n return out.modifies(as);\n }\n});\n\n/**\n * Folds one more tuple fields into multiple tuples in which the field\n * name and values are available under new 'key' and 'value' fields.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.fields - An array of field accessors\n * for the tuple fields that should be folded.\n * @param {Array<string>} [params.as] - Output field names for folded key\n * and value fields, defaults to ['key', 'value'].\n */\nfunction Fold(params) {\n Transform.call(this, [], params);\n}\nFold.Definition = {\n 'type': 'Fold',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'required': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['key', 'value']\n }]\n};\ninherits(Fold, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE),\n fields = _.fields,\n fnames = fields.map(accessorName),\n as = _.as || ['key', 'value'],\n k = as[0],\n v = as[1],\n n = fields.length;\n out.rem = this.value;\n pulse.visit(pulse.SOURCE, t => {\n for (let i = 0, d; i < n; ++i) {\n d = derive(t);\n d[k] = fnames[i];\n d[v] = fields[i](t);\n out.add.push(d);\n }\n });\n this.value = out.source = out.add;\n return out.modifies(as);\n }\n});\n\n/**\n * Invokes a function for each data tuple and saves the results as a new field.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.expr - The formula function to invoke for each tuple.\n * @param {string} params.as - The field name under which to save the result.\n * @param {boolean} [params.initonly=false] - If true, the formula is applied to\n * added tuples only, and does not update in response to modifications.\n */\nfunction Formula(params) {\n Transform.call(this, null, params);\n}\nFormula.Definition = {\n 'type': 'Formula',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'expr',\n 'type': 'expr',\n 'required': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'required': true\n }, {\n 'name': 'initonly',\n 'type': 'boolean'\n }]\n};\ninherits(Formula, Transform, {\n transform(_, pulse) {\n const func = _.expr,\n as = _.as,\n mod = _.modified(),\n flag = _.initonly ? pulse.ADD : mod ? pulse.SOURCE : pulse.modified(func.fields) || pulse.modified(as) ? pulse.ADD_MOD : pulse.ADD;\n if (mod) {\n // parameters updated, need to reflow\n pulse = pulse.materialize().reflow(true);\n }\n if (!_.initonly) {\n pulse.modifies(as);\n }\n return pulse.visit(flag, t => t[as] = func(t, _));\n }\n});\n\n/**\n * Generates data tuples using a provided generator function.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(Parameters): object} params.generator - A tuple generator\n * function. This function is given the operator parameters as input.\n * Changes to any additional parameters will not trigger re-calculation\n * of previously generated tuples. Only future tuples are affected.\n * @param {number} params.size - The number of tuples to produce.\n */\nfunction Generate(params) {\n Transform.call(this, [], params);\n}\ninherits(Generate, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.ALL),\n gen = _.generator;\n let data = this.value,\n num = _.size - data.length,\n add,\n rem,\n t;\n if (num > 0) {\n // need more tuples, generate and add\n for (add = []; --num >= 0;) {\n add.push(t = ingest(gen(_)));\n data.push(t);\n }\n out.add = out.add.length ? out.materialize(out.ADD).add.concat(add) : add;\n } else {\n // need fewer tuples, remove\n rem = data.slice(0, -num);\n out.rem = out.rem.length ? out.materialize(out.REM).rem.concat(rem) : rem;\n data = data.slice(-num);\n }\n out.source = this.value = data;\n return out;\n }\n});\n\nconst Methods = {\n value: 'value',\n median: median,\n mean: mean,\n min: min,\n max: max\n};\nconst Empty = [];\n\n/**\n * Impute missing values.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to impute.\n * @param {Array<function(object): *>} [params.groupby] - An array of\n * accessors to determine series within which to perform imputation.\n * @param {function(object): *} params.key - An accessor for a key value.\n * Each key value should be unique within a group. New tuples will be\n * imputed for any key values that are not found within a group.\n * @param {Array<*>} [params.keyvals] - Optional array of required key\n * values. New tuples will be imputed for any key values that are not\n * found within a group. In addition, these values will be automatically\n * augmented with the key values observed in the input data.\n * @param {string} [method='value'] - The imputation method to use. One of\n * 'value', 'mean', 'median', 'max', 'min'.\n * @param {*} [value=0] - The constant value to use for imputation\n * when using method 'value'.\n */\nfunction Impute(params) {\n Transform.call(this, [], params);\n}\nImpute.Definition = {\n 'type': 'Impute',\n 'metadata': {\n 'changes': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'key',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'keyvals',\n 'array': true\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'method',\n 'type': 'enum',\n 'default': 'value',\n 'values': ['value', 'mean', 'median', 'max', 'min']\n }, {\n 'name': 'value',\n 'default': 0\n }]\n};\nfunction getValue(_) {\n var m = _.method || Methods.value,\n v;\n if (Methods[m] == null) {\n error('Unrecognized imputation method: ' + m);\n } else if (m === Methods.value) {\n v = _.value !== undefined ? _.value : 0;\n return () => v;\n } else {\n return Methods[m];\n }\n}\nfunction getField(_) {\n const f = _.field;\n return t => t ? f(t) : NaN;\n}\ninherits(Impute, Transform, {\n transform(_, pulse) {\n var out = pulse.fork(pulse.ALL),\n impute = getValue(_),\n field = getField(_),\n fName = accessorName(_.field),\n kName = accessorName(_.key),\n gNames = (_.groupby || []).map(accessorName),\n groups = partition(pulse.source, _.groupby, _.key, _.keyvals),\n curr = [],\n prev = this.value,\n m = groups.domain.length,\n group,\n value,\n gVals,\n kVal,\n g,\n i,\n j,\n l,\n n,\n t;\n for (g = 0, l = groups.length; g < l; ++g) {\n group = groups[g];\n gVals = group.values;\n value = NaN;\n\n // add tuples for missing values\n for (j = 0; j < m; ++j) {\n if (group[j] != null) continue;\n kVal = groups.domain[j];\n t = {\n _impute: true\n };\n for (i = 0, n = gVals.length; i < n; ++i) t[gNames[i]] = gVals[i];\n t[kName] = kVal;\n t[fName] = Number.isNaN(value) ? value = impute(group, field) : value;\n curr.push(ingest(t));\n }\n }\n\n // update pulse with imputed tuples\n if (curr.length) out.add = out.materialize(out.ADD).add.concat(curr);\n if (prev.length) out.rem = out.materialize(out.REM).rem.concat(prev);\n this.value = curr;\n return out;\n }\n});\nfunction partition(data, groupby, key, keyvals) {\n var get = f => f(t),\n groups = [],\n domain = keyvals ? keyvals.slice() : [],\n kMap = {},\n gMap = {},\n gVals,\n gKey,\n group,\n i,\n j,\n k,\n n,\n t;\n domain.forEach((k, i) => kMap[k] = i + 1);\n for (i = 0, n = data.length; i < n; ++i) {\n t = data[i];\n k = key(t);\n j = kMap[k] || (kMap[k] = domain.push(k));\n gKey = (gVals = groupby ? groupby.map(get) : Empty) + '';\n if (!(group = gMap[gKey])) {\n group = gMap[gKey] = [];\n groups.push(group);\n group.values = gVals;\n }\n group[j - 1] = t;\n }\n groups.domain = domain;\n return groups;\n}\n\n/**\n * Extend input tuples with aggregate values.\n * Calcuates aggregate values and joins them with the input stream.\n * @constructor\n */\nfunction JoinAggregate(params) {\n Aggregate.call(this, params);\n}\nJoinAggregate.Definition = {\n 'type': 'JoinAggregate',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'fields',\n 'type': 'field',\n 'null': true,\n 'array': true\n }, {\n 'name': 'ops',\n 'type': 'enum',\n 'array': true,\n 'values': ValidAggregateOps\n }, {\n 'name': 'as',\n 'type': 'string',\n 'null': true,\n 'array': true\n }, {\n 'name': 'key',\n 'type': 'field'\n }]\n};\ninherits(JoinAggregate, Aggregate, {\n transform(_, pulse) {\n const aggr = this,\n mod = _.modified();\n let cells;\n\n // process all input tuples to calculate aggregates\n if (aggr.value && (mod || pulse.modified(aggr._inputs, true))) {\n cells = aggr.value = mod ? aggr.init(_) : {};\n pulse.visit(pulse.SOURCE, t => aggr.add(t));\n } else {\n cells = aggr.value = aggr.value || this.init(_);\n pulse.visit(pulse.REM, t => aggr.rem(t));\n pulse.visit(pulse.ADD, t => aggr.add(t));\n }\n\n // update aggregation cells\n aggr.changes();\n\n // write aggregate values to input tuples\n pulse.visit(pulse.SOURCE, t => {\n extend(t, cells[aggr.cellkey(t)].tuple);\n });\n return pulse.reflow(mod).modifies(this._outputs);\n },\n changes() {\n const adds = this._adds,\n mods = this._mods;\n let i, n;\n for (i = 0, n = this._alen; i < n; ++i) {\n this.celltuple(adds[i]);\n adds[i] = null; // for garbage collection\n }\n for (i = 0, n = this._mlen; i < n; ++i) {\n this.celltuple(mods[i]);\n mods[i] = null; // for garbage collection\n }\n this._alen = this._mlen = 0; // reset list of active cells\n }\n});\n\n/**\n * Compute kernel density estimates (KDE) for one or more data groups.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array<function(object): *>} [params.groupby] - An array of accessors\n * to groupby.\n * @param {function(object): *} params.field - An accessor for the data field\n * to estimate.\n * @param {number} [params.bandwidth=0] - The KDE kernel bandwidth.\n * If zero or unspecified, the bandwidth is automatically determined.\n * @param {boolean} [params.counts=false] - A boolean flag indicating if the\n * output values should be probability estimates (false, default) or\n * smoothed counts (true).\n * @param {string} [params.cumulative=false] - A boolean flag indicating if a\n * density (false) or cumulative distribution (true) should be generated.\n * @param {Array<number>} [params.extent] - The domain extent over which to\n * plot the density. If unspecified, the [min, max] data extent is used.\n * @param {string} [params.resolve='independent'] - Indicates how parameters for\n * multiple densities should be resolved. If \"independent\" (the default), each\n * density may have its own domain extent and dynamic number of curve sample\n * steps. If \"shared\", the KDE transform will ensure that all densities are\n * defined over a shared domain and curve steps, enabling stacking.\n * @param {number} [params.minsteps=25] - The minimum number of curve samples\n * for plotting the density.\n * @param {number} [params.maxsteps=200] - The maximum number of curve samples\n * for plotting the density.\n * @param {number} [params.steps] - The exact number of curve samples for\n * plotting the density. If specified, overrides both minsteps and maxsteps\n * to set an exact number of uniform samples. Useful in conjunction with\n * a fixed extent to ensure consistent sample points for stacked densities.\n */\nfunction KDE(params) {\n Transform.call(this, null, params);\n}\nKDE.Definition = {\n 'type': 'KDE',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'cumulative',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'counts',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'bandwidth',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'extent',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'resolve',\n 'type': 'enum',\n 'values': ['shared', 'independent'],\n 'default': 'independent'\n }, {\n 'name': 'steps',\n 'type': 'number'\n }, {\n 'name': 'minsteps',\n 'type': 'number',\n 'default': 25\n }, {\n 'name': 'maxsteps',\n 'type': 'number',\n 'default': 200\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'default': ['value', 'density']\n }]\n};\ninherits(KDE, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n if (!this.value || pulse.changed() || _.modified()) {\n const source = pulse.materialize(pulse.SOURCE).source,\n groups = partition$1(source, _.groupby, _.field),\n names = (_.groupby || []).map(accessorName),\n bandwidth = _.bandwidth,\n method = _.cumulative ? 'cdf' : 'pdf',\n as = _.as || ['value', 'density'],\n values = [];\n let domain = _.extent,\n minsteps = _.steps || _.minsteps || 25,\n maxsteps = _.steps || _.maxsteps || 200;\n if (method !== 'pdf' && method !== 'cdf') {\n error('Invalid density method: ' + method);\n }\n if (_.resolve === 'shared') {\n if (!domain) domain = extent(source, _.field);\n minsteps = maxsteps = _.steps || maxsteps;\n }\n groups.forEach(g => {\n const density = randomKDE(g, bandwidth)[method],\n scale = _.counts ? g.length : 1,\n local = domain || extent(g);\n sampleCurve(density, local, minsteps, maxsteps).forEach(v => {\n const t = {};\n for (let i = 0; i < names.length; ++i) {\n t[names[i]] = g.dims[i];\n }\n t[as[0]] = v[0];\n t[as[1]] = v[1] * scale;\n values.push(ingest(t));\n });\n });\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n }\n return out;\n }\n});\n\n/**\n * Generates a key function.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array<string>} params.fields - The field name(s) for the key function.\n * @param {boolean} params.flat - A boolean flag indicating if the field names\n * should be treated as flat property names, side-stepping nested field\n * lookups normally indicated by dot or bracket notation.\n */\nfunction Key(params) {\n Operator.call(this, null, update$2, params);\n}\ninherits(Key, Operator);\nfunction update$2(_) {\n return this.value && !_.modified() ? this.value : key(_.fields, _.flat);\n}\n\n/**\n * Load and parse data from an external source. Marshalls parameter\n * values and then invokes the Dataflow request method.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {string} params.url - The URL to load from.\n * @param {object} params.format - The data format options.\n */\nfunction Load(params) {\n Transform.call(this, [], params);\n this._pending = null;\n}\ninherits(Load, Transform, {\n transform(_, pulse) {\n const df = pulse.dataflow;\n if (this._pending) {\n // update state and return pulse\n return output(this, pulse, this._pending);\n }\n if (stop(_)) return pulse.StopPropagation;\n if (_.values) {\n // parse and ingest values, return output pulse\n return output(this, pulse, df.parse(_.values, _.format));\n } else if (_.async) {\n // return promise for non-blocking async loading\n const p = df.request(_.url, _.format).then(res => {\n this._pending = array(res.data);\n return df => df.touch(this);\n });\n return {\n async: p\n };\n } else {\n // return promise for synchronous loading\n return df.request(_.url, _.format).then(res => output(this, pulse, array(res.data)));\n }\n }\n});\nfunction stop(_) {\n return _.modified('async') && !(_.modified('values') || _.modified('url') || _.modified('format'));\n}\nfunction output(op, pulse, data) {\n data.forEach(ingest);\n const out = pulse.fork(pulse.NO_FIELDS & pulse.NO_SOURCE);\n out.rem = op.value;\n op.value = out.source = out.add = data;\n op._pending = null;\n if (out.rem.length) out.clean(true);\n return out;\n}\n\n/**\n * Extend tuples by joining them with values from a lookup table.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Map} params.index - The lookup table map.\n * @param {Array<function(object): *} params.fields - The fields to lookup.\n * @param {Array<string>} params.as - Output field names for each lookup value.\n * @param {*} [params.default] - A default value to use if lookup fails.\n */\nfunction Lookup(params) {\n Transform.call(this, {}, params);\n}\nLookup.Definition = {\n 'type': 'Lookup',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'index',\n 'type': 'index',\n 'params': [{\n 'name': 'from',\n 'type': 'data',\n 'required': true\n }, {\n 'name': 'key',\n 'type': 'field',\n 'required': true\n }]\n }, {\n 'name': 'values',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'required': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true\n }, {\n 'name': 'default',\n 'default': null\n }]\n};\ninherits(Lookup, Transform, {\n transform(_, pulse) {\n const keys = _.fields,\n index = _.index,\n values = _.values,\n defaultValue = _.default == null ? null : _.default,\n reset = _.modified(),\n n = keys.length;\n let flag = reset ? pulse.SOURCE : pulse.ADD,\n out = pulse,\n as = _.as,\n set,\n m,\n mods;\n if (values) {\n m = values.length;\n if (n > 1 && !as) {\n error('Multi-field lookup requires explicit \"as\" parameter.');\n }\n if (as && as.length !== n * m) {\n error('The \"as\" parameter has too few output field names.');\n }\n as = as || values.map(accessorName);\n set = function (t) {\n for (var i = 0, k = 0, j, v; i < n; ++i) {\n v = index.get(keys[i](t));\n if (v == null) for (j = 0; j < m; ++j, ++k) t[as[k]] = defaultValue;else for (j = 0; j < m; ++j, ++k) t[as[k]] = values[j](v);\n }\n };\n } else {\n if (!as) {\n error('Missing output field names.');\n }\n set = function (t) {\n for (var i = 0, v; i < n; ++i) {\n v = index.get(keys[i](t));\n t[as[i]] = v == null ? defaultValue : v;\n }\n };\n }\n if (reset) {\n out = pulse.reflow(true);\n } else {\n mods = keys.some(k => pulse.modified(k.fields));\n flag |= mods ? pulse.MOD : 0;\n }\n pulse.visit(flag, set);\n return out.modifies(as);\n }\n});\n\n/**\n * Computes global min/max extents over a collection of extents.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array<Array<number>>} params.extents - The input extents.\n */\nfunction MultiExtent(params) {\n Operator.call(this, null, update$1, params);\n}\ninherits(MultiExtent, Operator);\nfunction update$1(_) {\n if (this.value && !_.modified()) {\n return this.value;\n }\n const ext = _.extents,\n n = ext.length;\n let min = +Infinity,\n max = -Infinity,\n i,\n e;\n for (i = 0; i < n; ++i) {\n e = ext[i];\n if (e[0] < min) min = e[0];\n if (e[1] > max) max = e[1];\n }\n return [min, max];\n}\n\n/**\n * Merge a collection of value arrays.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array<Array<*>>} params.values - The input value arrrays.\n */\nfunction MultiValues(params) {\n Operator.call(this, null, update, params);\n}\ninherits(MultiValues, Operator);\nfunction update(_) {\n return this.value && !_.modified() ? this.value : _.values.reduce((data, _) => data.concat(_), []);\n}\n\n/**\n * Operator whose value is simply its parameter hash. This operator is\n * useful for enabling reactive updates to values of nested objects.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nfunction Params(params) {\n Transform.call(this, null, params);\n}\ninherits(Params, Transform, {\n transform(_, pulse) {\n this.modified(_.modified());\n this.value = _;\n return pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS); // do not pass tuples\n }\n});\n\n/**\n * Aggregate and pivot selected field values to become new fields.\n * This operator is useful to construction cross-tabulations.\n * @constructor\n * @param {Array<function(object): *>} [params.groupby] - An array of accessors\n * to groupby. These fields act just like groupby fields of an Aggregate transform.\n * @param {function(object): *} params.field - The field to pivot on. The unique\n * values of this field become new field names in the output stream.\n * @param {function(object): *} params.value - The field to populate pivoted fields.\n * The aggregate values of this field become the values of the new pivoted fields.\n * @param {string} [params.op] - The aggregation operation for the value field,\n * applied per cell in the output stream. The default is \"sum\".\n * @param {number} [params.limit] - An optional parameter indicating the maximum\n * number of pivoted fields to generate. The pivoted field names are sorted in\n * ascending order prior to enforcing the limit.\n */\nfunction Pivot(params) {\n Aggregate.call(this, params);\n}\nPivot.Definition = {\n 'type': 'Pivot',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'value',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'op',\n 'type': 'enum',\n 'values': ValidAggregateOps,\n 'default': 'sum'\n }, {\n 'name': 'limit',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'key',\n 'type': 'field'\n }]\n};\ninherits(Pivot, Aggregate, {\n _transform: Aggregate.prototype.transform,\n transform(_, pulse) {\n return this._transform(aggregateParams(_, pulse), pulse);\n }\n});\n\n// Shoehorn a pivot transform into an aggregate transform!\n// First collect all unique pivot field values.\n// Then generate aggregate fields for each output pivot field.\nfunction aggregateParams(_, pulse) {\n const key = _.field,\n value = _.value,\n op = (_.op === 'count' ? '__count__' : _.op) || 'sum',\n fields = accessorFields(key).concat(accessorFields(value)),\n keys = pivotKeys(key, _.limit || 0, pulse);\n\n // if data stream content changes, pivot fields may change\n // flag parameter modification to ensure re-initialization\n if (pulse.changed()) _.set('__pivot__', null, null, true);\n return {\n key: _.key,\n groupby: _.groupby,\n ops: keys.map(() => op),\n fields: keys.map(k => get(k, key, value, fields)),\n as: keys.map(k => k + ''),\n modified: _.modified.bind(_)\n };\n}\n\n// Generate aggregate field accessor.\n// Output NaN for non-existent values; aggregator will ignore!\nfunction get(k, key, value, fields) {\n return accessor(d => key(d) === k ? value(d) : NaN, fields, k + '');\n}\n\n// Collect (and optionally limit) all unique pivot values.\nfunction pivotKeys(key, limit, pulse) {\n const map = {},\n list = [];\n pulse.visit(pulse.SOURCE, t => {\n const k = key(t);\n if (!map[k]) {\n map[k] = 1;\n list.push(k);\n }\n });\n list.sort(ascending);\n return limit ? list.slice(0, limit) : list;\n}\n\n/**\n * Partitions pre-faceted data into tuple subflows.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(Dataflow, string): Operator} params.subflow - A function\n * that generates a subflow of operators and returns its root operator.\n * @param {function(object): Array<object>} params.field - The field\n * accessor for an array of subflow tuple objects.\n */\nfunction PreFacet(params) {\n Facet.call(this, params);\n}\ninherits(PreFacet, Facet, {\n transform(_, pulse) {\n const flow = _.subflow,\n field = _.field,\n subflow = t => this.subflow(tupleid(t), flow, pulse, t);\n if (_.modified('field') || field && pulse.modified(accessorFields(field))) {\n error('PreFacet does not support field modification.');\n }\n this.initTargets(); // reset list of active subflows\n\n if (field) {\n pulse.visit(pulse.MOD, t => {\n const sf = subflow(t);\n field(t).forEach(_ => sf.mod(_));\n });\n pulse.visit(pulse.ADD, t => {\n const sf = subflow(t);\n field(t).forEach(_ => sf.add(ingest(_)));\n });\n pulse.visit(pulse.REM, t => {\n const sf = subflow(t);\n field(t).forEach(_ => sf.rem(_));\n });\n } else {\n pulse.visit(pulse.MOD, t => subflow(t).mod(t));\n pulse.visit(pulse.ADD, t => subflow(t).add(t));\n pulse.visit(pulse.REM, t => subflow(t).rem(t));\n }\n if (pulse.clean()) {\n pulse.runAfter(() => this.clean());\n }\n return pulse;\n }\n});\n\n/**\n * Performs a relational projection, copying selected fields from source\n * tuples to a new set of derived tuples.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array<function(object): *} params.fields - The fields to project,\n * as an array of field accessors. If unspecified, all fields will be\n * copied with names unchanged.\n * @param {Array<string>} [params.as] - Output field names for each projected\n * field. Any unspecified fields will use the field name provided by\n * the field accessor.\n */\nfunction Project(params) {\n Transform.call(this, null, params);\n}\nProject.Definition = {\n 'type': 'Project',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'fields',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'null': true,\n 'array': true\n }]\n};\ninherits(Project, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE),\n fields = _.fields,\n as = fieldNames(_.fields, _.as || []),\n derive = fields ? (s, t) => project(s, t, fields, as) : rederive;\n let lut;\n if (this.value) {\n lut = this.value;\n } else {\n pulse = pulse.addAll();\n lut = this.value = {};\n }\n pulse.visit(pulse.REM, t => {\n const id = tupleid(t);\n out.rem.push(lut[id]);\n lut[id] = null;\n });\n pulse.visit(pulse.ADD, t => {\n const dt = derive(t, ingest({}));\n lut[tupleid(t)] = dt;\n out.add.push(dt);\n });\n pulse.visit(pulse.MOD, t => {\n out.mod.push(derive(t, lut[tupleid(t)]));\n });\n return out;\n }\n});\nfunction project(s, t, fields, as) {\n for (let i = 0, n = fields.length; i < n; ++i) {\n t[as[i]] = fields[i](s);\n }\n return t;\n}\n\n/**\n * Proxy the value of another operator as a pure signal value.\n * Ensures no tuples are propagated.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {*} params.value - The value to proxy, becomes the value of this operator.\n */\nfunction Proxy(params) {\n Transform.call(this, null, params);\n}\ninherits(Proxy, Transform, {\n transform(_, pulse) {\n this.value = _.value;\n return _.modified('value') ? pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS) : pulse.StopPropagation;\n }\n});\n\n/**\n * Generates sample quantile values from an input data stream.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - An accessor for the data field\n * over which to calculate quantile values.\n * @param {Array<function(object): *>} [params.groupby] - An array of accessors\n * to groupby.\n * @param {Array<number>} [params.probs] - An array of probabilities in\n * the range (0, 1) for which to compute quantile values. If not specified,\n * the *step* parameter will be used.\n * @param {Array<number>} [params.step=0.01] - A probability step size for\n * sampling quantile values. All values from one-half the step size up to\n * 1 (exclusive) will be sampled. This parameter is only used if the\n * *quantiles* parameter is not provided.\n */\nfunction Quantile(params) {\n Transform.call(this, null, params);\n}\nQuantile.Definition = {\n 'type': 'Quantile',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'probs',\n 'type': 'number',\n 'array': true\n }, {\n 'name': 'step',\n 'type': 'number',\n 'default': 0.01\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'default': ['prob', 'value']\n }]\n};\nconst EPSILON = 1e-14;\ninherits(Quantile, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n as = _.as || ['prob', 'value'];\n if (this.value && !_.modified() && !pulse.changed()) {\n out.source = this.value;\n return out;\n }\n const source = pulse.materialize(pulse.SOURCE).source,\n groups = partition$1(source, _.groupby, _.field),\n names = (_.groupby || []).map(accessorName),\n values = [],\n step = _.step || 0.01,\n p = _.probs || range(step / 2, 1 - EPSILON, step),\n n = p.length;\n groups.forEach(g => {\n const q = quantiles(g, p);\n for (let i = 0; i < n; ++i) {\n const t = {};\n for (let i = 0; i < names.length; ++i) {\n t[names[i]] = g.dims[i];\n }\n t[as[0]] = p[i];\n t[as[1]] = q[i];\n values.push(ingest(t));\n }\n });\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n return out;\n }\n});\n\n/**\n * Relays a data stream between data processing pipelines.\n * If the derive parameter is set, this transform will create derived\n * copies of observed tuples. This provides derived data streams in which\n * modifications to the tuples do not pollute an upstream data source.\n * @param {object} params - The parameters for this operator.\n * @param {number} [params.derive=false] - Boolean flag indicating if\n * the transform should make derived copies of incoming tuples.\n * @constructor\n */\nfunction Relay(params) {\n Transform.call(this, null, params);\n}\ninherits(Relay, Transform, {\n transform(_, pulse) {\n let out, lut;\n if (this.value) {\n lut = this.value;\n } else {\n out = pulse = pulse.addAll();\n lut = this.value = {};\n }\n if (_.derive) {\n out = pulse.fork(pulse.NO_SOURCE);\n pulse.visit(pulse.REM, t => {\n const id = tupleid(t);\n out.rem.push(lut[id]);\n lut[id] = null;\n });\n pulse.visit(pulse.ADD, t => {\n const dt = derive(t);\n lut[tupleid(t)] = dt;\n out.add.push(dt);\n });\n pulse.visit(pulse.MOD, t => {\n const dt = lut[tupleid(t)];\n for (const k in t) {\n dt[k] = t[k];\n // down stream writes may overwrite re-derived tuples\n // conservatively mark all source fields as modified\n out.modifies(k);\n }\n out.mod.push(dt);\n });\n }\n return out;\n }\n});\n\n/**\n * Samples tuples passing through this operator.\n * Uses reservoir sampling to maintain a representative sample.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {number} [params.size=1000] - The maximum number of samples.\n */\nfunction Sample(params) {\n Transform.call(this, [], params);\n this.count = 0;\n}\nSample.Definition = {\n 'type': 'Sample',\n 'metadata': {},\n 'params': [{\n 'name': 'size',\n 'type': 'number',\n 'default': 1000\n }]\n};\ninherits(Sample, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE),\n mod = _.modified('size'),\n num = _.size,\n map = this.value.reduce((m, t) => (m[tupleid(t)] = 1, m), {});\n let res = this.value,\n cnt = this.count,\n cap = 0;\n\n // sample reservoir update function\n function update(t) {\n let p, idx;\n if (res.length < num) {\n res.push(t);\n } else {\n idx = ~~((cnt + 1) * random());\n if (idx < res.length && idx >= cap) {\n p = res[idx];\n if (map[tupleid(p)]) out.rem.push(p); // eviction\n res[idx] = t;\n }\n }\n ++cnt;\n }\n if (pulse.rem.length) {\n // find all tuples that should be removed, add to output\n pulse.visit(pulse.REM, t => {\n const id = tupleid(t);\n if (map[id]) {\n map[id] = -1;\n out.rem.push(t);\n }\n --cnt;\n });\n\n // filter removed tuples out of the sample reservoir\n res = res.filter(t => map[tupleid(t)] !== -1);\n }\n if ((pulse.rem.length || mod) && res.length < num && pulse.source) {\n // replenish sample if backing data source is available\n cap = cnt = res.length;\n pulse.visit(pulse.SOURCE, t => {\n // update, but skip previously sampled tuples\n if (!map[tupleid(t)]) update(t);\n });\n cap = -1;\n }\n if (mod && res.length > num) {\n const n = res.length - num;\n for (let i = 0; i < n; ++i) {\n map[tupleid(res[i])] = -1;\n out.rem.push(res[i]);\n }\n res = res.slice(n);\n }\n if (pulse.mod.length) {\n // propagate modified tuples in the sample reservoir\n pulse.visit(pulse.MOD, t => {\n if (map[tupleid(t)]) out.mod.push(t);\n });\n }\n if (pulse.add.length) {\n // update sample reservoir\n pulse.visit(pulse.ADD, update);\n }\n if (pulse.add.length || cap < 0) {\n // output newly added tuples\n out.add = res.filter(t => !map[tupleid(t)]);\n }\n this.count = cnt;\n this.value = out.source = res;\n return out;\n }\n});\n\n/**\n * Generates data tuples for a specified sequence range of numbers.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {number} params.start - The first number in the sequence.\n * @param {number} params.stop - The last number (exclusive) in the sequence.\n * @param {number} [params.step=1] - The step size between numbers in the sequence.\n */\nfunction Sequence(params) {\n Transform.call(this, null, params);\n}\nSequence.Definition = {\n 'type': 'Sequence',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'start',\n 'type': 'number',\n 'required': true\n }, {\n 'name': 'stop',\n 'type': 'number',\n 'required': true\n }, {\n 'name': 'step',\n 'type': 'number',\n 'default': 1\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'data'\n }]\n};\ninherits(Sequence, Transform, {\n transform(_, pulse) {\n if (this.value && !_.modified()) return;\n const out = pulse.materialize().fork(pulse.MOD),\n as = _.as || 'data';\n out.rem = this.value ? pulse.rem.concat(this.value) : pulse.rem;\n this.value = range(_.start, _.stop, _.step || 1).map(v => {\n const t = {};\n t[as] = v;\n return ingest(t);\n });\n out.add = pulse.add.concat(this.value);\n return out;\n }\n});\n\n/**\n * Propagates a new pulse without any tuples so long as the input\n * pulse contains some added, removed or modified tuples.\n * @param {object} params - The parameters for this operator.\n * @constructor\n */\nfunction Sieve(params) {\n Transform.call(this, null, params);\n this.modified(true); // always treat as modified\n}\ninherits(Sieve, Transform, {\n transform(_, pulse) {\n this.value = pulse.source;\n return pulse.changed() ? pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS) : pulse.StopPropagation;\n }\n});\n\n/**\n * Discretize dates to specific time units.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The data field containing date/time values.\n */\nfunction TimeUnit(params) {\n Transform.call(this, null, params);\n}\nconst OUTPUT = ['unit0', 'unit1'];\nTimeUnit.Definition = {\n 'type': 'TimeUnit',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'interval',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'units',\n 'type': 'enum',\n 'values': TIME_UNITS,\n 'array': true\n }, {\n 'name': 'step',\n 'type': 'number',\n 'default': 1\n }, {\n 'name': 'maxbins',\n 'type': 'number',\n 'default': 40\n }, {\n 'name': 'extent',\n 'type': 'date',\n 'array': true\n }, {\n 'name': 'timezone',\n 'type': 'enum',\n 'default': 'local',\n 'values': ['local', 'utc']\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': OUTPUT\n }]\n};\ninherits(TimeUnit, Transform, {\n transform(_, pulse) {\n const field = _.field,\n band = _.interval !== false,\n utc = _.timezone === 'utc',\n floor = this._floor(_, pulse),\n offset = (utc ? utcInterval : timeInterval)(floor.unit).offset,\n as = _.as || OUTPUT,\n u0 = as[0],\n u1 = as[1],\n step = floor.step;\n let min = floor.start || Infinity,\n max = floor.stop || -Infinity,\n flag = pulse.ADD;\n if (_.modified() || pulse.changed(pulse.REM) || pulse.modified(accessorFields(field))) {\n pulse = pulse.reflow(true);\n flag = pulse.SOURCE;\n min = Infinity;\n max = -Infinity;\n }\n pulse.visit(flag, t => {\n const v = field(t);\n let a, b;\n if (v == null) {\n t[u0] = null;\n if (band) t[u1] = null;\n } else {\n t[u0] = a = b = floor(v);\n if (band) t[u1] = b = offset(a, step);\n if (a < min) min = a;\n if (b > max) max = b;\n }\n });\n floor.start = min;\n floor.stop = max;\n return pulse.modifies(band ? as : u0);\n },\n _floor(_, pulse) {\n const utc = _.timezone === 'utc';\n\n // get parameters\n const {\n units,\n step\n } = _.units ? {\n units: _.units,\n step: _.step || 1\n } : timeBin({\n extent: _.extent || extent(pulse.materialize(pulse.SOURCE).source, _.field),\n maxbins: _.maxbins\n });\n\n // check / standardize time units\n const tunits = timeUnits(units),\n prev = this.value || {},\n floor = (utc ? utcFloor : timeFloor)(tunits, step);\n floor.unit = peek(tunits);\n floor.units = tunits;\n floor.step = step;\n floor.start = prev.start;\n floor.stop = prev.stop;\n return this.value = floor;\n }\n});\n\n/**\n * An index that maps from unique, string-coerced, field values to tuples.\n * Assumes that the field serves as a unique key with no duplicate values.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The field accessor to index.\n */\nfunction TupleIndex(params) {\n Transform.call(this, fastmap(), params);\n}\ninherits(TupleIndex, Transform, {\n transform(_, pulse) {\n const df = pulse.dataflow,\n field = _.field,\n index = this.value,\n set = t => index.set(field(t), t);\n let mod = true;\n if (_.modified('field') || pulse.modified(field.fields)) {\n index.clear();\n pulse.visit(pulse.SOURCE, set);\n } else if (pulse.changed()) {\n pulse.visit(pulse.REM, t => index.delete(field(t)));\n pulse.visit(pulse.ADD, set);\n } else {\n mod = false;\n }\n this.modified(mod);\n if (index.empty > df.cleanThreshold) df.runAfter(index.clean);\n return pulse.fork();\n }\n});\n\n/**\n * Extracts an array of values. Assumes the source data has already been\n * reduced as needed (e.g., by an upstream Aggregate transform).\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The domain field to extract.\n * @param {function(*,*): number} [params.sort] - An optional\n * comparator function for sorting the values. The comparator will be\n * applied to backing tuples prior to value extraction.\n */\nfunction Values(params) {\n Transform.call(this, null, params);\n}\ninherits(Values, Transform, {\n transform(_, pulse) {\n const run = !this.value || _.modified('field') || _.modified('sort') || pulse.changed() || _.sort && pulse.modified(_.sort.fields);\n if (run) {\n this.value = (_.sort ? pulse.source.slice().sort(stableCompare(_.sort)) : pulse.source).map(_.field);\n }\n }\n});\n\nfunction WindowOp(op, field, param, as) {\n const fn = WindowOps[op](field, param);\n return {\n init: fn.init || zero,\n update: function (w, t) {\n t[as] = fn.next(w);\n }\n };\n}\nconst WindowOps = {\n row_number: function () {\n return {\n next: w => w.index + 1\n };\n },\n rank: function () {\n let rank;\n return {\n init: () => rank = 1,\n next: w => {\n const i = w.index,\n data = w.data;\n return i && w.compare(data[i - 1], data[i]) ? rank = i + 1 : rank;\n }\n };\n },\n dense_rank: function () {\n let drank;\n return {\n init: () => drank = 1,\n next: w => {\n const i = w.index,\n d = w.data;\n return i && w.compare(d[i - 1], d[i]) ? ++drank : drank;\n }\n };\n },\n percent_rank: function () {\n const rank = WindowOps.rank(),\n next = rank.next;\n return {\n init: rank.init,\n next: w => (next(w) - 1) / (w.data.length - 1)\n };\n },\n cume_dist: function () {\n let cume;\n return {\n init: () => cume = 0,\n next: w => {\n const d = w.data,\n c = w.compare;\n let i = w.index;\n if (cume < i) {\n while (i + 1 < d.length && !c(d[i], d[i + 1])) ++i;\n cume = i;\n }\n return (1 + cume) / d.length;\n }\n };\n },\n ntile: function (field, num) {\n num = +num;\n if (!(num > 0)) error('ntile num must be greater than zero.');\n const cume = WindowOps.cume_dist(),\n next = cume.next;\n return {\n init: cume.init,\n next: w => Math.ceil(num * next(w))\n };\n },\n lag: function (field, offset) {\n offset = +offset || 1;\n return {\n next: w => {\n const i = w.index - offset;\n return i >= 0 ? field(w.data[i]) : null;\n }\n };\n },\n lead: function (field, offset) {\n offset = +offset || 1;\n return {\n next: w => {\n const i = w.index + offset,\n d = w.data;\n return i < d.length ? field(d[i]) : null;\n }\n };\n },\n first_value: function (field) {\n return {\n next: w => field(w.data[w.i0])\n };\n },\n last_value: function (field) {\n return {\n next: w => field(w.data[w.i1 - 1])\n };\n },\n nth_value: function (field, nth) {\n nth = +nth;\n if (!(nth > 0)) error('nth_value nth must be greater than zero.');\n return {\n next: w => {\n const i = w.i0 + (nth - 1);\n return i < w.i1 ? field(w.data[i]) : null;\n }\n };\n },\n prev_value: function (field) {\n let prev;\n return {\n init: () => prev = null,\n next: w => {\n const v = field(w.data[w.index]);\n return v != null ? prev = v : prev;\n }\n };\n },\n next_value: function (field) {\n let v, i;\n return {\n init: () => (v = null, i = -1),\n next: w => {\n const d = w.data;\n return w.index <= i ? v : (i = find(field, d, w.index)) < 0 ? (i = d.length, v = null) : v = field(d[i]);\n }\n };\n }\n};\nfunction find(field, data, index) {\n for (let n = data.length; index < n; ++index) {\n const v = field(data[index]);\n if (v != null) return index;\n }\n return -1;\n}\nconst ValidWindowOps = Object.keys(WindowOps);\n\nfunction WindowState(_) {\n const ops = array(_.ops),\n fields = array(_.fields),\n params = array(_.params),\n aggregate_params = array(_.aggregate_params),\n as = array(_.as),\n outputs = this.outputs = [],\n windows = this.windows = [],\n inputs = {},\n map = {},\n counts = [],\n measures = [];\n let countOnly = true;\n function visitInputs(f) {\n array(accessorFields(f)).forEach(_ => inputs[_] = 1);\n }\n visitInputs(_.sort);\n ops.forEach((op, i) => {\n const field = fields[i],\n param = params[i],\n aggregate_param = aggregate_params[i] || null,\n mname = accessorName(field),\n name = measureName(op, mname, as[i]);\n visitInputs(field);\n outputs.push(name);\n\n // Window operation\n if (hasOwnProperty(WindowOps, op)) {\n windows.push(WindowOp(op, field, param, name));\n }\n\n // Aggregate operation\n else {\n if (field == null && op !== 'count') {\n error('Null aggregate field specified.');\n }\n if (op === 'count') {\n counts.push(name);\n return;\n }\n countOnly = false;\n let m = map[mname];\n if (!m) {\n m = map[mname] = [];\n m.field = field;\n measures.push(m);\n }\n m.push(createMeasure(op, aggregate_param, name));\n }\n });\n if (counts.length || measures.length) {\n this.cell = cell(measures, counts, countOnly);\n }\n this.inputs = Object.keys(inputs);\n}\nconst prototype = WindowState.prototype;\nprototype.init = function () {\n this.windows.forEach(_ => _.init());\n if (this.cell) this.cell.init();\n};\nprototype.update = function (w, t) {\n const cell = this.cell,\n wind = this.windows,\n data = w.data,\n m = wind && wind.length;\n let j;\n if (cell) {\n for (j = w.p0; j < w.i0; ++j) cell.rem(data[j]);\n for (j = w.p1; j < w.i1; ++j) cell.add(data[j]);\n cell.set(t);\n }\n for (j = 0; j < m; ++j) wind[j].update(w, t);\n};\nfunction cell(measures, counts, countOnly) {\n measures = measures.map(m => compileMeasures(m, m.field));\n const cell = {\n num: 0,\n agg: null,\n store: false,\n count: counts\n };\n if (!countOnly) {\n var n = measures.length,\n a = cell.agg = Array(n),\n i = 0;\n for (; i < n; ++i) a[i] = new measures[i](cell);\n }\n if (cell.store) {\n var store = cell.data = new TupleStore();\n }\n cell.add = function (t) {\n cell.num += 1;\n if (countOnly) return;\n if (store) store.add(t);\n for (let i = 0; i < n; ++i) {\n a[i].add(a[i].get(t), t);\n }\n };\n cell.rem = function (t) {\n cell.num -= 1;\n if (countOnly) return;\n if (store) store.rem(t);\n for (let i = 0; i < n; ++i) {\n a[i].rem(a[i].get(t), t);\n }\n };\n cell.set = function (t) {\n let i, n;\n\n // consolidate stored values\n if (store) store.values();\n\n // update tuple properties\n for (i = 0, n = counts.length; i < n; ++i) t[counts[i]] = cell.num;\n if (!countOnly) for (i = 0, n = a.length; i < n; ++i) a[i].set(t);\n };\n cell.init = function () {\n cell.num = 0;\n if (store) store.reset();\n for (let i = 0; i < n; ++i) a[i].init();\n };\n return cell;\n}\n\n/**\n * Perform window calculations and write results to the input stream.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - A comparator function for sorting tuples within a window.\n * @param {Array<function(object): *>} [params.groupby] - An array of accessors by which to partition tuples into separate windows.\n * @param {Array<string>} params.ops - An array of strings indicating window operations to perform.\n * @param {Array<function(object): *>} [params.fields] - An array of accessors\n * for data fields to use as inputs to window operations.\n * @param {Array<*>} [params.params] - An array of parameter values for window operations.\n * @param {Array<number>} [params.aggregate_params] - An optional array of parameter values for aggregation operations.\n * @param {Array<string>} [params.as] - An array of output field names for window operations.\n * @param {Array<number>} [params.frame] - Window frame definition as two-element array.\n * @param {boolean} [params.ignorePeers=false] - If true, base window frame boundaries on row\n * number alone, ignoring peers with identical sort values. If false (default),\n * the window boundaries will be adjusted to include peer values.\n */\nfunction Window(params) {\n Transform.call(this, {}, params);\n this._mlen = 0;\n this._mods = [];\n}\nWindow.Definition = {\n 'type': 'Window',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'ops',\n 'type': 'enum',\n 'array': true,\n 'values': ValidWindowOps.concat(ValidAggregateOps)\n }, {\n 'name': 'params',\n 'type': 'number',\n 'null': true,\n 'array': true\n }, {\n 'name': 'aggregate_params',\n 'type': 'number',\n 'null': true,\n 'array': true\n }, {\n 'name': 'fields',\n 'type': 'field',\n 'null': true,\n 'array': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'null': true,\n 'array': true\n }, {\n 'name': 'frame',\n 'type': 'number',\n 'null': true,\n 'array': true,\n 'length': 2,\n 'default': [null, 0]\n }, {\n 'name': 'ignorePeers',\n 'type': 'boolean',\n 'default': false\n }]\n};\ninherits(Window, Transform, {\n transform(_, pulse) {\n this.stamp = pulse.stamp;\n const mod = _.modified(),\n cmp = stableCompare(_.sort),\n key = groupkey(_.groupby),\n group = t => this.group(key(t));\n\n // initialize window state\n let state = this.state;\n if (!state || mod) {\n state = this.state = new WindowState(_);\n }\n\n // partition input tuples\n if (mod || pulse.modified(state.inputs)) {\n this.value = {};\n pulse.visit(pulse.SOURCE, t => group(t).add(t));\n } else {\n pulse.visit(pulse.REM, t => group(t).remove(t));\n pulse.visit(pulse.ADD, t => group(t).add(t));\n }\n\n // perform window calculations for each modified partition\n for (let i = 0, n = this._mlen; i < n; ++i) {\n processPartition(this._mods[i], state, cmp, _);\n }\n this._mlen = 0;\n this._mods = [];\n\n // TODO don't reflow everything?\n return pulse.reflow(mod).modifies(state.outputs);\n },\n group(key) {\n let group = this.value[key];\n if (!group) {\n group = this.value[key] = SortedList(tupleid);\n group.stamp = -1;\n }\n if (group.stamp < this.stamp) {\n group.stamp = this.stamp;\n this._mods[this._mlen++] = group;\n }\n return group;\n }\n});\nfunction processPartition(list, state, cmp, _) {\n const sort = _.sort,\n range = sort && !_.ignorePeers,\n frame = _.frame || [null, 0],\n data = list.data(cmp),\n // use cmp for stable sort\n n = data.length,\n b = range ? bisector(sort) : null,\n w = {\n i0: 0,\n i1: 0,\n p0: 0,\n p1: 0,\n index: 0,\n data: data,\n compare: sort || constant(-1)\n };\n state.init();\n for (let i = 0; i < n; ++i) {\n setWindow(w, frame, i, n);\n if (range) adjustRange(w, b);\n state.update(w, data[i]);\n }\n}\nfunction setWindow(w, f, i, n) {\n w.p0 = w.i0;\n w.p1 = w.i1;\n w.i0 = f[0] == null ? 0 : Math.max(0, i - Math.abs(f[0]));\n w.i1 = f[1] == null ? n : Math.min(n, i + Math.abs(f[1]) + 1);\n w.index = i;\n}\n\n// if frame type is 'range', adjust window for peer values\nfunction adjustRange(w, bisect) {\n const r0 = w.i0,\n r1 = w.i1 - 1,\n c = w.compare,\n d = w.data,\n n = d.length - 1;\n if (r0 > 0 && !c(d[r0], d[r0 - 1])) w.i0 = bisect.left(d, d[r0]);\n if (r1 < n && !c(d[r1], d[r1 + 1])) w.i1 = bisect.right(d, d[r1]);\n}\n\nexport { Aggregate as aggregate, Bin as bin, Collect as collect, Compare as compare, CountPattern as countpattern, Cross as cross, Density as density, DotBin as dotbin, Expression as expression, Extent as extent, Facet as facet, Field as field, Filter as filter, Flatten as flatten, Fold as fold, Formula as formula, Generate as generate, Impute as impute, JoinAggregate as joinaggregate, KDE as kde, Key as key, Load as load, Lookup as lookup, MultiExtent as multiextent, MultiValues as multivalues, Params as params, Pivot as pivot, PreFacet as prefacet, Project as project, Proxy as proxy, Quantile as quantile, Relay as relay, Sample as sample, Sequence as sequence, Sieve as sieve, Subflow as subflow, TimeUnit as timeunit, TupleIndex as tupleindex, Values as values, Window as window };\n", "import { ascending, quantileSorted, deviation, quantile, median } from 'd3-array';\n\nfunction* numbers (values, valueof) {\n if (valueof == null) {\n for (let value of values) {\n if (value != null && value !== '' && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n value = valueof(value, ++index, values);\n if (value != null && value !== '' && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n\nfunction quantiles (array, p, f) {\n const values = Float64Array.from(numbers(array, f));\n\n // don't depend on return value from typed array sort call\n // protects against undefined sort results in Safari (vega/vega-lite#4964)\n values.sort(ascending);\n return p.map(_ => quantileSorted(values, _));\n}\n\nfunction quartiles (array, f) {\n return quantiles(array, [0.25, 0.50, 0.75], f);\n}\n\n// Scott, D. W. (1992) Multivariate Density Estimation:\n// Theory, Practice, and Visualization. Wiley.\nfunction estimateBandwidth (array, f) {\n const n = array.length,\n d = deviation(array, f),\n q = quartiles(array, f),\n h = (q[2] - q[0]) / 1.34,\n v = Math.min(d, h) || d || Math.abs(q[0]) || 1;\n return 1.06 * v * Math.pow(n, -0.2);\n}\n\nfunction bin (_) {\n // determine range\n const maxb = _.maxbins || 20,\n base = _.base || 10,\n logb = Math.log(base),\n div = _.divide || [5, 2];\n let min = _.extent[0],\n max = _.extent[1],\n step,\n level,\n minstep,\n v,\n i,\n n;\n const span = _.span || max - min || Math.abs(min) || 1;\n if (_.step) {\n // if step size is explicitly given, use that\n step = _.step;\n } else if (_.steps) {\n // if provided, limit choice to acceptable step sizes\n v = span / maxb;\n for (i = 0, n = _.steps.length; i < n && _.steps[i] < v; ++i);\n step = _.steps[Math.max(0, i - 1)];\n } else {\n // else use span to determine step size\n level = Math.ceil(Math.log(maxb) / logb);\n minstep = _.minstep || 0;\n step = Math.max(minstep, Math.pow(base, Math.round(Math.log(span) / logb) - level));\n\n // increase step size if too many bins\n while (Math.ceil(span / step) > maxb) {\n step *= base;\n }\n\n // decrease step size if allowed\n for (i = 0, n = div.length; i < n; ++i) {\n v = step / div[i];\n if (v >= minstep && span / v <= maxb) step = v;\n }\n }\n\n // update precision, min and max\n v = Math.log(step);\n const precision = v >= 0 ? 0 : ~~(-v / logb) + 1,\n eps = Math.pow(base, -precision - 1);\n if (_.nice || _.nice === undefined) {\n v = Math.floor(min / step + eps) * step;\n min = min < v ? v - step : v;\n max = Math.ceil(max / step) * step;\n }\n return {\n start: min,\n stop: max === min ? min + step : max,\n step: step\n };\n}\n\nvar random = Math.random;\nfunction setRandom(r) {\n random = r;\n}\n\nfunction bootstrapCI (array, samples, alpha, f) {\n if (!array.length) return [undefined, undefined];\n const values = Float64Array.from(numbers(array, f)),\n n = values.length,\n m = samples;\n let a, i, j, mu;\n for (j = 0, mu = Array(m); j < m; ++j) {\n for (a = 0, i = 0; i < n; ++i) {\n a += values[~~(random() * n)];\n }\n mu[j] = a / n;\n }\n mu.sort(ascending);\n return [quantile(mu, alpha / 2), quantile(mu, 1 - alpha / 2)];\n}\n\n// Dot density binning for dot plot construction.\n// Based on Leland Wilkinson, Dot Plots, The American Statistician, 1999.\n// https://www.cs.uic.edu/~wilkinson/Publications/dotplots.pdf\nfunction dotbin (array, step, smooth, f) {\n f = f || (_ => _);\n const n = array.length,\n v = new Float64Array(n);\n let i = 0,\n j = 1,\n a = f(array[0]),\n b = a,\n w = a + step,\n x;\n for (; j < n; ++j) {\n x = f(array[j]);\n if (x >= w) {\n b = (a + b) / 2;\n for (; i < j; ++i) v[i] = b;\n w = x + step;\n a = x;\n }\n b = x;\n }\n b = (a + b) / 2;\n for (; i < j; ++i) v[i] = b;\n return smooth ? smoothing(v, step + step / 4) : v;\n}\n\n// perform smoothing to reduce variance\n// swap points between \"adjacent\" stacks\n// Wilkinson defines adjacent as within step/4 units\nfunction smoothing(v, thresh) {\n const n = v.length;\n let a = 0,\n b = 1,\n c,\n d;\n\n // get left stack\n while (v[a] === v[b]) ++b;\n while (b < n) {\n // get right stack\n c = b + 1;\n while (v[b] === v[c]) ++c;\n\n // are stacks adjacent?\n // if so, compare sizes and swap as needed\n if (v[b] - v[b - 1] < thresh) {\n d = b + (a + c - b - b >> 1);\n while (d < b) v[d++] = v[b];\n while (d > b) v[d--] = v[a];\n }\n\n // update left stack indices\n a = b;\n b = c;\n }\n return v;\n}\n\nfunction lcg (seed) {\n // Random numbers using a Linear Congruential Generator with seed value\n // Uses glibc values from https://en.wikipedia.org/wiki/Linear_congruential_generator\n return function () {\n seed = (1103515245 * seed + 12345) % 2147483647;\n return seed / 2147483647;\n };\n}\n\nfunction integer (min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n let a, b, d;\n const dist = {\n min(_) {\n if (arguments.length) {\n a = _ || 0;\n d = b - a;\n return dist;\n } else {\n return a;\n }\n },\n max(_) {\n if (arguments.length) {\n b = _ || 0;\n d = b - a;\n return dist;\n } else {\n return b;\n }\n },\n sample() {\n return a + Math.floor(d * random());\n },\n pdf(x) {\n return x === Math.floor(x) && x >= a && x < b ? 1 / d : 0;\n },\n cdf(x) {\n const v = Math.floor(x);\n return v < a ? 0 : v >= b ? 1 : (v - a + 1) / d;\n },\n icdf(p) {\n return p >= 0 && p <= 1 ? a - 1 + Math.floor(p * d) : NaN;\n }\n };\n return dist.min(min).max(max);\n}\n\nconst SQRT2PI = Math.sqrt(2 * Math.PI);\nconst SQRT2 = Math.SQRT2;\n\nlet nextSample = NaN;\nfunction sampleNormal(mean, stdev) {\n mean = mean || 0;\n stdev = stdev == null ? 1 : stdev;\n let x = 0,\n y = 0,\n rds,\n c;\n if (nextSample === nextSample) {\n x = nextSample;\n nextSample = NaN;\n } else {\n do {\n x = random() * 2 - 1;\n y = random() * 2 - 1;\n rds = x * x + y * y;\n } while (rds === 0 || rds > 1);\n c = Math.sqrt(-2 * Math.log(rds) / rds); // Box-Muller transform\n x *= c;\n nextSample = y * c;\n }\n return mean + x * stdev;\n}\nfunction densityNormal(value, mean, stdev) {\n stdev = stdev == null ? 1 : stdev;\n const z = (value - (mean || 0)) / stdev;\n return Math.exp(-0.5 * z * z) / (stdev * SQRT2PI);\n}\n\n// Approximation from West (2009)\n// Better Approximations to Cumulative Normal Functions\nfunction cumulativeNormal(value, mean, stdev) {\n mean = mean || 0;\n stdev = stdev == null ? 1 : stdev;\n const z = (value - mean) / stdev,\n Z = Math.abs(z);\n let cd;\n if (Z > 37) {\n cd = 0;\n } else {\n const exp = Math.exp(-Z * Z / 2);\n let sum;\n if (Z < 7.07106781186547) {\n sum = 3.52624965998911e-02 * Z + 0.700383064443688;\n sum = sum * Z + 6.37396220353165;\n sum = sum * Z + 33.912866078383;\n sum = sum * Z + 112.079291497871;\n sum = sum * Z + 221.213596169931;\n sum = sum * Z + 220.206867912376;\n cd = exp * sum;\n sum = 8.83883476483184e-02 * Z + 1.75566716318264;\n sum = sum * Z + 16.064177579207;\n sum = sum * Z + 86.7807322029461;\n sum = sum * Z + 296.564248779674;\n sum = sum * Z + 637.333633378831;\n sum = sum * Z + 793.826512519948;\n sum = sum * Z + 440.413735824752;\n cd = cd / sum;\n } else {\n sum = Z + 0.65;\n sum = Z + 4 / sum;\n sum = Z + 3 / sum;\n sum = Z + 2 / sum;\n sum = Z + 1 / sum;\n cd = exp / sum / 2.506628274631;\n }\n }\n return z > 0 ? 1 - cd : cd;\n}\n\n// Approximation of Probit function using inverse error function.\nfunction quantileNormal(p, mean, stdev) {\n if (p < 0 || p > 1) return NaN;\n return (mean || 0) + (stdev == null ? 1 : stdev) * SQRT2 * erfinv(2 * p - 1);\n}\n\n// Approximate inverse error function. Implementation from \"Approximating\n// the erfinv function\" by Mike Giles, GPU Computing Gems, volume 2, 2010.\n// Ported from Apache Commons Math, http://www.apache.org/licenses/LICENSE-2.0\nfunction erfinv(x) {\n // beware that the logarithm argument must be\n // commputed as (1.0 - x) * (1.0 + x),\n // it must NOT be simplified as 1.0 - x * x as this\n // would induce rounding errors near the boundaries +/-1\n let w = -Math.log((1 - x) * (1 + x)),\n p;\n if (w < 6.25) {\n w -= 3.125;\n p = -3.6444120640178196996e-21;\n p = -1.685059138182016589e-19 + p * w;\n p = 1.2858480715256400167e-18 + p * w;\n p = 1.115787767802518096e-17 + p * w;\n p = -1.333171662854620906e-16 + p * w;\n p = 2.0972767875968561637e-17 + p * w;\n p = 6.6376381343583238325e-15 + p * w;\n p = -4.0545662729752068639e-14 + p * w;\n p = -8.1519341976054721522e-14 + p * w;\n p = 2.6335093153082322977e-12 + p * w;\n p = -1.2975133253453532498e-11 + p * w;\n p = -5.4154120542946279317e-11 + p * w;\n p = 1.051212273321532285e-09 + p * w;\n p = -4.1126339803469836976e-09 + p * w;\n p = -2.9070369957882005086e-08 + p * w;\n p = 4.2347877827932403518e-07 + p * w;\n p = -1.3654692000834678645e-06 + p * w;\n p = -1.3882523362786468719e-05 + p * w;\n p = 0.0001867342080340571352 + p * w;\n p = -0.00074070253416626697512 + p * w;\n p = -0.0060336708714301490533 + p * w;\n p = 0.24015818242558961693 + p * w;\n p = 1.6536545626831027356 + p * w;\n } else if (w < 16.0) {\n w = Math.sqrt(w) - 3.25;\n p = 2.2137376921775787049e-09;\n p = 9.0756561938885390979e-08 + p * w;\n p = -2.7517406297064545428e-07 + p * w;\n p = 1.8239629214389227755e-08 + p * w;\n p = 1.5027403968909827627e-06 + p * w;\n p = -4.013867526981545969e-06 + p * w;\n p = 2.9234449089955446044e-06 + p * w;\n p = 1.2475304481671778723e-05 + p * w;\n p = -4.7318229009055733981e-05 + p * w;\n p = 6.8284851459573175448e-05 + p * w;\n p = 2.4031110387097893999e-05 + p * w;\n p = -0.0003550375203628474796 + p * w;\n p = 0.00095328937973738049703 + p * w;\n p = -0.0016882755560235047313 + p * w;\n p = 0.0024914420961078508066 + p * w;\n p = -0.0037512085075692412107 + p * w;\n p = 0.005370914553590063617 + p * w;\n p = 1.0052589676941592334 + p * w;\n p = 3.0838856104922207635 + p * w;\n } else if (Number.isFinite(w)) {\n w = Math.sqrt(w) - 5.0;\n p = -2.7109920616438573243e-11;\n p = -2.5556418169965252055e-10 + p * w;\n p = 1.5076572693500548083e-09 + p * w;\n p = -3.7894654401267369937e-09 + p * w;\n p = 7.6157012080783393804e-09 + p * w;\n p = -1.4960026627149240478e-08 + p * w;\n p = 2.9147953450901080826e-08 + p * w;\n p = -6.7711997758452339498e-08 + p * w;\n p = 2.2900482228026654717e-07 + p * w;\n p = -9.9298272942317002539e-07 + p * w;\n p = 4.5260625972231537039e-06 + p * w;\n p = -1.9681778105531670567e-05 + p * w;\n p = 7.5995277030017761139e-05 + p * w;\n p = -0.00021503011930044477347 + p * w;\n p = -0.00013871931833623122026 + p * w;\n p = 1.0103004648645343977 + p * w;\n p = 4.8499064014085844221 + p * w;\n } else {\n p = Infinity;\n }\n return p * x;\n}\nfunction gaussian (mean, stdev) {\n let mu, sigma;\n const dist = {\n mean(_) {\n if (arguments.length) {\n mu = _ || 0;\n return dist;\n } else {\n return mu;\n }\n },\n stdev(_) {\n if (arguments.length) {\n sigma = _ == null ? 1 : _;\n return dist;\n } else {\n return sigma;\n }\n },\n sample: () => sampleNormal(mu, sigma),\n pdf: value => densityNormal(value, mu, sigma),\n cdf: value => cumulativeNormal(value, mu, sigma),\n icdf: p => quantileNormal(p, mu, sigma)\n };\n return dist.mean(mean).stdev(stdev);\n}\n\nfunction kde (support, bandwidth) {\n const kernel = gaussian();\n let n = 0;\n const dist = {\n data(_) {\n if (arguments.length) {\n support = _;\n n = _ ? _.length : 0;\n return dist.bandwidth(bandwidth);\n } else {\n return support;\n }\n },\n bandwidth(_) {\n if (!arguments.length) return bandwidth;\n bandwidth = _;\n if (!bandwidth && support) bandwidth = estimateBandwidth(support);\n return dist;\n },\n sample() {\n return support[~~(random() * n)] + bandwidth * kernel.sample();\n },\n pdf(x) {\n let y = 0,\n i = 0;\n for (; i < n; ++i) {\n y += kernel.pdf((x - support[i]) / bandwidth);\n }\n return y / bandwidth / n;\n },\n cdf(x) {\n let y = 0,\n i = 0;\n for (; i < n; ++i) {\n y += kernel.cdf((x - support[i]) / bandwidth);\n }\n return y / n;\n },\n icdf() {\n throw Error('KDE icdf not supported.');\n }\n };\n return dist.data(support);\n}\n\nfunction sampleLogNormal(mean, stdev) {\n mean = mean || 0;\n stdev = stdev == null ? 1 : stdev;\n return Math.exp(mean + sampleNormal() * stdev);\n}\nfunction densityLogNormal(value, mean, stdev) {\n if (value <= 0) return 0;\n mean = mean || 0;\n stdev = stdev == null ? 1 : stdev;\n const z = (Math.log(value) - mean) / stdev;\n return Math.exp(-0.5 * z * z) / (stdev * SQRT2PI * value);\n}\nfunction cumulativeLogNormal(value, mean, stdev) {\n return cumulativeNormal(Math.log(value), mean, stdev);\n}\nfunction quantileLogNormal(p, mean, stdev) {\n return Math.exp(quantileNormal(p, mean, stdev));\n}\nfunction lognormal (mean, stdev) {\n let mu, sigma;\n const dist = {\n mean(_) {\n if (arguments.length) {\n mu = _ || 0;\n return dist;\n } else {\n return mu;\n }\n },\n stdev(_) {\n if (arguments.length) {\n sigma = _ == null ? 1 : _;\n return dist;\n } else {\n return sigma;\n }\n },\n sample: () => sampleLogNormal(mu, sigma),\n pdf: value => densityLogNormal(value, mu, sigma),\n cdf: value => cumulativeLogNormal(value, mu, sigma),\n icdf: p => quantileLogNormal(p, mu, sigma)\n };\n return dist.mean(mean).stdev(stdev);\n}\n\nfunction mixture (dists, weights) {\n let m = 0,\n w;\n function normalize(x) {\n const w = [];\n let sum = 0,\n i;\n for (i = 0; i < m; ++i) {\n sum += w[i] = x[i] == null ? 1 : +x[i];\n }\n for (i = 0; i < m; ++i) {\n w[i] /= sum;\n }\n return w;\n }\n const dist = {\n weights(_) {\n if (arguments.length) {\n w = normalize(weights = _ || []);\n return dist;\n }\n return weights;\n },\n distributions(_) {\n if (arguments.length) {\n if (_) {\n m = _.length;\n dists = _;\n } else {\n m = 0;\n dists = [];\n }\n return dist.weights(weights);\n }\n return dists;\n },\n sample() {\n const r = random();\n let d = dists[m - 1],\n v = w[0],\n i = 0;\n\n // first select distribution\n for (; i < m - 1; v += w[++i]) {\n if (r < v) {\n d = dists[i];\n break;\n }\n }\n // then sample from it\n return d.sample();\n },\n pdf(x) {\n let p = 0,\n i = 0;\n for (; i < m; ++i) {\n p += w[i] * dists[i].pdf(x);\n }\n return p;\n },\n cdf(x) {\n let p = 0,\n i = 0;\n for (; i < m; ++i) {\n p += w[i] * dists[i].cdf(x);\n }\n return p;\n },\n icdf() {\n throw Error('Mixture icdf not supported.');\n }\n };\n return dist.distributions(dists).weights(weights);\n}\n\nfunction sampleUniform(min, max) {\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n return min + (max - min) * random();\n}\nfunction densityUniform(value, min, max) {\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n return value >= min && value <= max ? 1 / (max - min) : 0;\n}\nfunction cumulativeUniform(value, min, max) {\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n return value < min ? 0 : value > max ? 1 : (value - min) / (max - min);\n}\nfunction quantileUniform(p, min, max) {\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n return p >= 0 && p <= 1 ? min + p * (max - min) : NaN;\n}\nfunction uniform (min, max) {\n let a, b;\n const dist = {\n min(_) {\n if (arguments.length) {\n a = _ || 0;\n return dist;\n } else {\n return a;\n }\n },\n max(_) {\n if (arguments.length) {\n b = _ == null ? 1 : _;\n return dist;\n } else {\n return b;\n }\n },\n sample: () => sampleUniform(a, b),\n pdf: value => densityUniform(value, a, b),\n cdf: value => cumulativeUniform(value, a, b),\n icdf: p => quantileUniform(p, a, b)\n };\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n return dist.min(min).max(max);\n}\n\nfunction constant (data, x, y) {\n let mean = 0,\n n = 0;\n for (const d of data) {\n const val = y(d);\n if (x(d) == null || val == null || isNaN(val)) continue;\n mean += (val - mean) / ++n;\n }\n return {\n coef: [mean],\n predict: () => mean,\n rSquared: 0\n };\n}\n\n// Ordinary Least Squares\nfunction ols (uX, uY, uXY, uX2) {\n const delta = uX2 - uX * uX,\n slope = Math.abs(delta) < 1e-24 ? 0 : (uXY - uX * uY) / delta,\n intercept = uY - slope * uX;\n return [intercept, slope];\n}\n\nfunction points(data, x, y, sort) {\n data = data.filter(d => {\n let u = x(d),\n v = y(d);\n return u != null && (u = +u) >= u && v != null && (v = +v) >= v;\n });\n if (sort) {\n data.sort((a, b) => x(a) - x(b));\n }\n const n = data.length,\n X = new Float64Array(n),\n Y = new Float64Array(n);\n\n // extract values, calculate means\n let i = 0,\n ux = 0,\n uy = 0,\n xv,\n yv,\n d;\n for (d of data) {\n X[i] = xv = +x(d);\n Y[i] = yv = +y(d);\n ++i;\n ux += (xv - ux) / i;\n uy += (yv - uy) / i;\n }\n\n // mean center the data\n for (i = 0; i < n; ++i) {\n X[i] -= ux;\n Y[i] -= uy;\n }\n return [X, Y, ux, uy];\n}\nfunction visitPoints(data, x, y, callback) {\n let i = -1,\n u,\n v;\n for (const d of data) {\n u = x(d);\n v = y(d);\n if (u != null && (u = +u) >= u && v != null && (v = +v) >= v) {\n callback(u, v, ++i);\n }\n }\n}\n\n// Adapted from d3-regression by Harry Stevens\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\nfunction rSquared (data, x, y, uY, predict) {\n let SSE = 0,\n SST = 0;\n visitPoints(data, x, y, (dx, dy) => {\n const sse = dy - predict(dx),\n sst = dy - uY;\n SSE += sse * sse;\n SST += sst * sst;\n });\n return 1 - SSE / SST;\n}\n\n// Adapted from d3-regression by Harry Stevens\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\nfunction linear (data, x, y) {\n let X = 0,\n Y = 0,\n XY = 0,\n X2 = 0,\n n = 0;\n visitPoints(data, x, y, (dx, dy) => {\n ++n;\n X += (dx - X) / n;\n Y += (dy - Y) / n;\n XY += (dx * dy - XY) / n;\n X2 += (dx * dx - X2) / n;\n });\n const coef = ols(X, Y, XY, X2),\n predict = x => coef[0] + coef[1] * x;\n return {\n coef: coef,\n predict: predict,\n rSquared: rSquared(data, x, y, Y, predict)\n };\n}\n\n// Adapted from d3-regression by Harry Stevens\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\nfunction log (data, x, y) {\n let X = 0,\n Y = 0,\n XY = 0,\n X2 = 0,\n n = 0;\n visitPoints(data, x, y, (dx, dy) => {\n ++n;\n dx = Math.log(dx);\n X += (dx - X) / n;\n Y += (dy - Y) / n;\n XY += (dx * dy - XY) / n;\n X2 += (dx * dx - X2) / n;\n });\n const coef = ols(X, Y, XY, X2),\n predict = x => coef[0] + coef[1] * Math.log(x);\n return {\n coef: coef,\n predict: predict,\n rSquared: rSquared(data, x, y, Y, predict)\n };\n}\n\nfunction exp (data, x, y) {\n // eslint-disable-next-line no-unused-vars\n const [xv, yv, ux, uy] = points(data, x, y);\n let YL = 0,\n XY = 0,\n XYL = 0,\n X2Y = 0,\n n = 0,\n dx,\n ly,\n xy;\n visitPoints(data, x, y, (_, dy) => {\n dx = xv[n++];\n ly = Math.log(dy);\n xy = dx * dy;\n YL += (dy * ly - YL) / n;\n XY += (xy - XY) / n;\n XYL += (xy * ly - XYL) / n;\n X2Y += (dx * xy - X2Y) / n;\n });\n const [c0, c1] = ols(XY / uy, YL / uy, XYL / uy, X2Y / uy),\n predict = x => Math.exp(c0 + c1 * (x - ux));\n return {\n coef: [Math.exp(c0 - c1 * ux), c1],\n predict: predict,\n rSquared: rSquared(data, x, y, uy, predict)\n };\n}\n\n// Adapted from d3-regression by Harry Stevens\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\nfunction pow (data, x, y) {\n let X = 0,\n Y = 0,\n XY = 0,\n X2 = 0,\n YS = 0,\n n = 0;\n visitPoints(data, x, y, (dx, dy) => {\n const lx = Math.log(dx),\n ly = Math.log(dy);\n ++n;\n X += (lx - X) / n;\n Y += (ly - Y) / n;\n XY += (lx * ly - XY) / n;\n X2 += (lx * lx - X2) / n;\n YS += (dy - YS) / n;\n });\n const coef = ols(X, Y, XY, X2),\n predict = x => coef[0] * Math.pow(x, coef[1]);\n coef[0] = Math.exp(coef[0]);\n return {\n coef: coef,\n predict: predict,\n rSquared: rSquared(data, x, y, YS, predict)\n };\n}\n\nfunction quad (data, x, y) {\n const [xv, yv, ux, uy] = points(data, x, y),\n n = xv.length;\n let X2 = 0,\n X3 = 0,\n X4 = 0,\n XY = 0,\n X2Y = 0,\n i,\n dx,\n dy,\n x2;\n for (i = 0; i < n;) {\n dx = xv[i];\n dy = yv[i++];\n x2 = dx * dx;\n X2 += (x2 - X2) / i;\n X3 += (x2 * dx - X3) / i;\n X4 += (x2 * x2 - X4) / i;\n XY += (dx * dy - XY) / i;\n X2Y += (x2 * dy - X2Y) / i;\n }\n const X2X2 = X4 - X2 * X2,\n d = X2 * X2X2 - X3 * X3,\n a = (X2Y * X2 - XY * X3) / d,\n b = (XY * X2X2 - X2Y * X3) / d,\n c = -a * X2,\n predict = x => {\n x = x - ux;\n return a * x * x + b * x + c + uy;\n };\n\n // transform coefficients back from mean-centered space\n return {\n coef: [c - b * ux + a * ux * ux + uy, b - 2 * a * ux, a],\n predict: predict,\n rSquared: rSquared(data, x, y, uy, predict)\n };\n}\n\n// Adapted from d3-regression by Harry Stevens\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\n// ... which was adapted from regression-js by Tom Alexander\n// Source: https://github.com/Tom-Alexander/regression-js/blob/master/src/regression.js#L246\n// License: https://github.com/Tom-Alexander/regression-js/blob/master/LICENSE\nfunction poly (data, x, y, order) {\n // use more efficient methods for lower orders\n if (order === 0) return constant(data, x, y);\n if (order === 1) return linear(data, x, y);\n if (order === 2) return quad(data, x, y);\n const [xv, yv, ux, uy] = points(data, x, y),\n n = xv.length,\n lhs = [],\n rhs = [],\n k = order + 1;\n let i, j, l, v, c;\n for (i = 0; i < k; ++i) {\n for (l = 0, v = 0; l < n; ++l) {\n v += Math.pow(xv[l], i) * yv[l];\n }\n lhs.push(v);\n c = new Float64Array(k);\n for (j = 0; j < k; ++j) {\n for (l = 0, v = 0; l < n; ++l) {\n v += Math.pow(xv[l], i + j);\n }\n c[j] = v;\n }\n rhs.push(c);\n }\n rhs.push(lhs);\n const coef = gaussianElimination(rhs),\n predict = x => {\n x -= ux;\n let y = uy + coef[0] + coef[1] * x + coef[2] * x * x;\n for (i = 3; i < k; ++i) y += coef[i] * Math.pow(x, i);\n return y;\n };\n return {\n coef: uncenter(k, coef, -ux, uy),\n predict: predict,\n rSquared: rSquared(data, x, y, uy, predict)\n };\n}\nfunction uncenter(k, a, x, y) {\n const z = Array(k);\n let i, j, v, c;\n\n // initialize to zero\n for (i = 0; i < k; ++i) z[i] = 0;\n\n // polynomial expansion\n for (i = k - 1; i >= 0; --i) {\n v = a[i];\n c = 1;\n z[i] += v;\n for (j = 1; j <= i; ++j) {\n c *= (i + 1 - j) / j; // binomial coefficent\n z[i - j] += v * Math.pow(x, j) * c;\n }\n }\n\n // bias term\n z[0] += y;\n return z;\n}\n\n// Given an array for a two-dimensional matrix and the polynomial order,\n// solve A * x = b using Gaussian elimination.\nfunction gaussianElimination(matrix) {\n const n = matrix.length - 1,\n coef = [];\n let i, j, k, r, t;\n for (i = 0; i < n; ++i) {\n r = i; // max row\n for (j = i + 1; j < n; ++j) {\n if (Math.abs(matrix[i][j]) > Math.abs(matrix[i][r])) {\n r = j;\n }\n }\n for (k = i; k < n + 1; ++k) {\n t = matrix[k][i];\n matrix[k][i] = matrix[k][r];\n matrix[k][r] = t;\n }\n for (j = i + 1; j < n; ++j) {\n for (k = n; k >= i; k--) {\n matrix[k][j] -= matrix[k][i] * matrix[i][j] / matrix[i][i];\n }\n }\n }\n for (j = n - 1; j >= 0; --j) {\n t = 0;\n for (k = j + 1; k < n; ++k) {\n t += matrix[k][j] * coef[k];\n }\n coef[j] = (matrix[n][j] - t) / matrix[j][j];\n }\n return coef;\n}\n\nconst maxiters = 2,\n epsilon = 1e-12;\n\n// Adapted from science.js by Jason Davies\n// Source: https://github.com/jasondavies/science.js/blob/master/src/stats/loess.js\n// License: https://github.com/jasondavies/science.js/blob/master/LICENSE\nfunction loess (data, x, y, bandwidth) {\n const [xv, yv, ux, uy] = points(data, x, y, true),\n n = xv.length,\n bw = Math.max(2, ~~(bandwidth * n)),\n // # nearest neighbors\n yhat = new Float64Array(n),\n residuals = new Float64Array(n),\n robustWeights = new Float64Array(n).fill(1);\n for (let iter = -1; ++iter <= maxiters;) {\n const interval = [0, bw - 1];\n for (let i = 0; i < n; ++i) {\n const dx = xv[i],\n i0 = interval[0],\n i1 = interval[1],\n edge = dx - xv[i0] > xv[i1] - dx ? i0 : i1;\n let W = 0,\n X = 0,\n Y = 0,\n XY = 0,\n X2 = 0;\n const denom = 1 / Math.abs(xv[edge] - dx || 1); // avoid singularity!\n\n for (let k = i0; k <= i1; ++k) {\n const xk = xv[k],\n yk = yv[k],\n w = tricube(Math.abs(dx - xk) * denom) * robustWeights[k],\n xkw = xk * w;\n W += w;\n X += xkw;\n Y += yk * w;\n XY += yk * xkw;\n X2 += xk * xkw;\n }\n\n // linear regression fit\n const [a, b] = ols(X / W, Y / W, XY / W, X2 / W);\n yhat[i] = a + b * dx;\n residuals[i] = Math.abs(yv[i] - yhat[i]);\n updateInterval(xv, i + 1, interval);\n }\n if (iter === maxiters) {\n break;\n }\n const medianResidual = median(residuals);\n if (Math.abs(medianResidual) < epsilon) break;\n for (let i = 0, arg, w; i < n; ++i) {\n arg = residuals[i] / (6 * medianResidual);\n // default to epsilon (rather than zero) for large deviations\n // keeping weights tiny but non-zero prevents singularites\n robustWeights[i] = arg >= 1 ? epsilon : (w = 1 - arg * arg) * w;\n }\n }\n return output(xv, yhat, ux, uy);\n}\n\n// weighting kernel for local regression\nfunction tricube(x) {\n return (x = 1 - x * x * x) * x * x;\n}\n\n// advance sliding window interval of nearest neighbors\nfunction updateInterval(xv, i, interval) {\n const val = xv[i];\n let left = interval[0],\n right = interval[1] + 1;\n if (right >= xv.length) return;\n\n // step right if distance to new right edge is <= distance to old left edge\n // step when distance is equal to ensure movement over duplicate x values\n while (i > left && xv[right] - val <= val - xv[left]) {\n interval[0] = ++left;\n interval[1] = right;\n ++right;\n }\n}\n\n// generate smoothed output points\n// average points with repeated x values\nfunction output(xv, yhat, ux, uy) {\n const n = xv.length,\n out = [];\n let i = 0,\n cnt = 0,\n prev = [],\n v;\n for (; i < n; ++i) {\n v = xv[i] + ux;\n if (prev[0] === v) {\n // average output values via online update\n prev[1] += (yhat[i] - prev[1]) / ++cnt;\n } else {\n // add new output point\n cnt = 0;\n prev[1] += uy;\n prev = [v, yhat[i]];\n out.push(prev);\n }\n }\n prev[1] += uy;\n return out;\n}\n\n// subdivide up to accuracy of 0.5 degrees\nconst MIN_RADIANS = 0.5 * Math.PI / 180;\n\n// Adaptively sample an interpolated function over a domain extent\nfunction sampleCurve (f, extent, minSteps, maxSteps) {\n minSteps = minSteps || 25;\n maxSteps = Math.max(minSteps, maxSteps || 200);\n const point = x => [x, f(x)],\n minX = extent[0],\n maxX = extent[1],\n span = maxX - minX,\n stop = span / maxSteps,\n prev = [point(minX)],\n next = [];\n if (minSteps === maxSteps) {\n // no adaptation, sample uniform grid directly and return\n for (let i = 1; i < maxSteps; ++i) {\n prev.push(point(minX + i / minSteps * span));\n }\n prev.push(point(maxX));\n return prev;\n } else {\n // sample minimum points on uniform grid\n // then move on to perform adaptive refinement\n next.push(point(maxX));\n for (let i = minSteps; --i > 0;) {\n next.push(point(minX + i / minSteps * span));\n }\n }\n let p0 = prev[0];\n let p1 = next[next.length - 1];\n const sx = 1 / span;\n const sy = scaleY(p0[1], next);\n while (p1) {\n // midpoint for potential curve subdivision\n const pm = point((p0[0] + p1[0]) / 2);\n const dx = pm[0] - p0[0] >= stop;\n if (dx && angleDelta(p0, pm, p1, sx, sy) > MIN_RADIANS) {\n // maximum resolution has not yet been met, and\n // subdivision midpoint is sufficiently different from endpoint\n // save subdivision, push midpoint onto the visitation stack\n next.push(pm);\n } else {\n // subdivision midpoint sufficiently similar to endpoint\n // skip subdivision, store endpoint, move to next point on the stack\n p0 = p1;\n prev.push(p1);\n next.pop();\n }\n p1 = next[next.length - 1];\n }\n return prev;\n}\nfunction scaleY(init, points) {\n let ymin = init;\n let ymax = init;\n const n = points.length;\n for (let i = 0; i < n; ++i) {\n const y = points[i][1];\n if (y < ymin) ymin = y;\n if (y > ymax) ymax = y;\n }\n return 1 / (ymax - ymin);\n}\nfunction angleDelta(p, q, r, sx, sy) {\n const a0 = Math.atan2(sy * (r[1] - p[1]), sx * (r[0] - p[0])),\n a1 = Math.atan2(sy * (q[1] - p[1]), sx * (q[0] - p[0]));\n return Math.abs(a0 - a1);\n}\n\nexport { estimateBandwidth as bandwidthNRD, bin, bootstrapCI, cumulativeLogNormal, cumulativeNormal, cumulativeUniform, densityLogNormal, densityNormal, densityUniform, dotbin, quantileLogNormal, quantileNormal, quantileUniform, quantiles, quartiles, random, integer as randomInteger, kde as randomKDE, lcg as randomLCG, lognormal as randomLogNormal, mixture as randomMixture, gaussian as randomNormal, uniform as randomUniform, constant as regressionConstant, exp as regressionExp, linear as regressionLinear, loess as regressionLoess, log as regressionLog, poly as regressionPoly, pow as regressionPow, quad as regressionQuad, sampleCurve, sampleLogNormal, sampleNormal, sampleUniform, setRandom };\n", "import { Transform } from 'vega-dataflow';\nimport { Marks, boundClip, GroupItem, Item, Bounds, multiLineOffset, boundStroke } from 'vega-scenegraph';\nimport { inherits, peek, isObject } from 'vega-util';\n\nconst Top = 'top';\nconst Left = 'left';\nconst Right = 'right';\nconst Bottom = 'bottom';\nconst TopLeft = 'top-left';\nconst TopRight = 'top-right';\nconst BottomLeft = 'bottom-left';\nconst BottomRight = 'bottom-right';\nconst Start = 'start';\nconst Middle = 'middle';\nconst End = 'end';\nconst X = 'x';\nconst Y = 'y';\nconst Group = 'group';\nconst AxisRole = 'axis';\nconst TitleRole = 'title';\nconst FrameRole = 'frame';\nconst ScopeRole = 'scope';\nconst LegendRole = 'legend';\nconst RowHeader = 'row-header';\nconst RowFooter = 'row-footer';\nconst RowTitle = 'row-title';\nconst ColHeader = 'column-header';\nconst ColFooter = 'column-footer';\nconst ColTitle = 'column-title';\nconst Padding = 'padding';\nconst Symbols = 'symbol';\nconst Fit = 'fit';\nconst FitX = 'fit-x';\nconst FitY = 'fit-y';\nconst Pad = 'pad';\nconst None = 'none';\nconst All = 'all';\nconst Each = 'each';\nconst Flush = 'flush';\nconst Column = 'column';\nconst Row = 'row';\n\n/**\n * Calculate bounding boxes for scenegraph items.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.mark - The scenegraph mark instance to bound.\n */\nfunction Bound(params) {\n Transform.call(this, null, params);\n}\ninherits(Bound, Transform, {\n transform(_, pulse) {\n const view = pulse.dataflow,\n mark = _.mark,\n type = mark.marktype,\n entry = Marks[type],\n bound = entry.bound;\n let markBounds = mark.bounds,\n rebound;\n if (entry.nested) {\n // multi-item marks have a single bounds instance\n if (mark.items.length) view.dirty(mark.items[0]);\n markBounds = boundItem(mark, bound);\n mark.items.forEach(item => {\n item.bounds.clear().union(markBounds);\n });\n } else if (type === Group || _.modified()) {\n // operator parameters modified -> re-bound all items\n // updates group bounds in response to modified group content\n pulse.visit(pulse.MOD, item => view.dirty(item));\n markBounds.clear();\n mark.items.forEach(item => markBounds.union(boundItem(item, bound)));\n\n // force reflow for axes/legends/titles to propagate any layout changes\n switch (mark.role) {\n case AxisRole:\n case LegendRole:\n case TitleRole:\n pulse.reflow();\n }\n } else {\n // incrementally update bounds, re-bound mark as needed\n rebound = pulse.changed(pulse.REM);\n pulse.visit(pulse.ADD, item => {\n markBounds.union(boundItem(item, bound));\n });\n pulse.visit(pulse.MOD, item => {\n rebound = rebound || markBounds.alignsWith(item.bounds);\n view.dirty(item);\n markBounds.union(boundItem(item, bound));\n });\n if (rebound) {\n markBounds.clear();\n mark.items.forEach(item => markBounds.union(item.bounds));\n }\n }\n\n // ensure mark bounds do not exceed any clipping region\n boundClip(mark);\n return pulse.modifies('bounds');\n }\n});\nfunction boundItem(item, bound, opt) {\n return bound(item.bounds.clear(), item, opt);\n}\n\nconst COUNTER_NAME = ':vega_identifier:';\n\n/**\n * Adds a unique identifier to all added tuples.\n * This transform creates a new signal that serves as an id counter.\n * As a result, the id counter is shared across all instances of this\n * transform, generating unique ids across multiple data streams. In\n * addition, this signal value can be included in a snapshot of the\n * dataflow state, enabling correct resumption of id allocation.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {string} params.as - The field name for the generated identifier.\n */\nfunction Identifier(params) {\n Transform.call(this, 0, params);\n}\nIdentifier.Definition = {\n 'type': 'Identifier',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'as',\n 'type': 'string',\n 'required': true\n }]\n};\ninherits(Identifier, Transform, {\n transform(_, pulse) {\n const counter = getCounter(pulse.dataflow),\n as = _.as;\n let id = counter.value;\n pulse.visit(pulse.ADD, t => t[as] = t[as] || ++id);\n counter.set(this.value = id);\n return pulse;\n }\n});\nfunction getCounter(view) {\n return view._signals[COUNTER_NAME] || (view._signals[COUNTER_NAME] = view.add(0));\n}\n\n/**\n * Bind scenegraph items to a scenegraph mark instance.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.markdef - The mark definition for creating the mark.\n * This is an object of legal scenegraph mark properties which *must* include\n * the 'marktype' property.\n */\nfunction Mark(params) {\n Transform.call(this, null, params);\n}\ninherits(Mark, Transform, {\n transform(_, pulse) {\n let mark = this.value;\n\n // acquire mark on first invocation, bind context and group\n if (!mark) {\n mark = pulse.dataflow.scenegraph().mark(_.markdef, lookup$1(_), _.index);\n mark.group.context = _.context;\n if (!_.context.group) _.context.group = mark.group;\n mark.source = this.source; // point to upstream collector\n mark.clip = _.clip;\n mark.interactive = _.interactive;\n this.value = mark;\n }\n\n // initialize entering items\n const Init = mark.marktype === Group ? GroupItem : Item;\n pulse.visit(pulse.ADD, item => Init.call(item, mark));\n\n // update clipping and/or interactive status\n if (_.modified('clip') || _.modified('interactive')) {\n mark.clip = _.clip;\n mark.interactive = !!_.interactive;\n mark.zdirty = true; // force scenegraph re-eval\n pulse.reflow();\n }\n\n // bind items array to scenegraph mark\n mark.items = pulse.source;\n return pulse;\n }\n});\nfunction lookup$1(_) {\n const g = _.groups,\n p = _.parent;\n return g && g.size === 1 ? g.get(Object.keys(g.object)[0]) : g && p ? g.lookup(p) : null;\n}\n\n/**\n * Analyze items for overlap, changing opacity to hide items with\n * overlapping bounding boxes. This transform will preserve at least\n * two items (e.g., first and last) even if overlap persists.\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - A comparator\n * function for sorting items.\n * @param {object} [params.method] - The overlap removal method to apply.\n * One of 'parity' (default, hide every other item until there is no\n * more overlap) or 'greedy' (sequentially scan and hide and items that\n * overlap with the last visible item).\n * @param {object} [params.boundScale] - A scale whose range should be used\n * to bound the items. Items exceeding the bounds of the scale range\n * will be treated as overlapping. If null or undefined, no bounds check\n * will be applied.\n * @param {object} [params.boundOrient] - The orientation of the scale\n * (top, bottom, left, or right) used to bound items. This parameter is\n * ignored if boundScale is null or undefined.\n * @param {object} [params.boundTolerance] - The tolerance in pixels for\n * bound inclusion testing (default 1). This specifies by how many pixels\n * an item's bounds may exceed the scale range bounds and not be culled.\n * @constructor\n */\nfunction Overlap(params) {\n Transform.call(this, null, params);\n}\nconst methods = {\n parity: items => items.filter((item, i) => i % 2 ? item.opacity = 0 : 1),\n greedy: (items, sep) => {\n let a;\n return items.filter((b, i) => !i || !intersect(a.bounds, b.bounds, sep) ? (a = b, 1) : b.opacity = 0);\n }\n};\n\n// compute bounding box intersection\n// including padding pixels of separation\nconst intersect = (a, b, sep) => sep > Math.max(b.x1 - a.x2, a.x1 - b.x2, b.y1 - a.y2, a.y1 - b.y2);\nconst hasOverlap = (items, pad) => {\n for (var i = 1, n = items.length, a = items[0].bounds, b; i < n; a = b, ++i) {\n if (intersect(a, b = items[i].bounds, pad)) return true;\n }\n};\nconst hasBounds = item => {\n const b = item.bounds;\n return b.width() > 1 && b.height() > 1;\n};\nconst boundTest = (scale, orient, tolerance) => {\n var range = scale.range(),\n b = new Bounds();\n if (orient === Top || orient === Bottom) {\n b.set(range[0], -Infinity, range[1], +Infinity);\n } else {\n b.set(-Infinity, range[0], +Infinity, range[1]);\n }\n b.expand(tolerance || 1);\n return item => b.encloses(item.bounds);\n};\n\n// reset all items to be fully opaque\nconst reset = source => {\n source.forEach(item => item.opacity = 1);\n return source;\n};\n\n// add all tuples to mod, fork pulse if parameters were modified\n// fork prevents cross-stream tuple pollution (e.g., pulse from scale)\nconst reflow = (pulse, _) => pulse.reflow(_.modified()).modifies('opacity');\ninherits(Overlap, Transform, {\n transform(_, pulse) {\n const reduce = methods[_.method] || methods.parity,\n sep = _.separation || 0;\n let source = pulse.materialize(pulse.SOURCE).source,\n items,\n test;\n if (!source || !source.length) return;\n if (!_.method) {\n // early exit if method is falsy\n if (_.modified('method')) {\n reset(source);\n pulse = reflow(pulse, _);\n }\n return pulse;\n }\n\n // skip labels with no content\n source = source.filter(hasBounds);\n\n // early exit, nothing to do\n if (!source.length) return;\n if (_.sort) {\n source = source.slice().sort(_.sort);\n }\n items = reset(source);\n pulse = reflow(pulse, _);\n if (items.length >= 3 && hasOverlap(items, sep)) {\n do {\n items = reduce(items, sep);\n } while (items.length >= 3 && hasOverlap(items, sep));\n if (items.length < 3 && !peek(source).opacity) {\n if (items.length > 1) peek(items).opacity = 0;\n peek(source).opacity = 1;\n }\n }\n if (_.boundScale && _.boundTolerance >= 0) {\n test = boundTest(_.boundScale, _.boundOrient, +_.boundTolerance);\n source.forEach(item => {\n if (!test(item)) item.opacity = 0;\n });\n }\n\n // re-calculate mark bounds\n const bounds = items[0].mark.bounds.clear();\n source.forEach(item => {\n if (item.opacity) bounds.union(item.bounds);\n });\n return pulse;\n }\n});\n\n/**\n * Queue modified scenegraph items for rendering.\n * @constructor\n */\nfunction Render(params) {\n Transform.call(this, null, params);\n}\ninherits(Render, Transform, {\n transform(_, pulse) {\n const view = pulse.dataflow;\n pulse.visit(pulse.ALL, item => view.dirty(item));\n\n // set z-index dirty flag as needed\n if (pulse.fields && pulse.fields['zindex']) {\n const item = pulse.source && pulse.source[0];\n if (item) item.mark.zdirty = true;\n }\n }\n});\n\nconst tempBounds = new Bounds();\nfunction set(item, property, value) {\n return item[property] === value ? 0 : (item[property] = value, 1);\n}\n\nfunction isYAxis(mark) {\n var orient = mark.items[0].orient;\n return orient === Left || orient === Right;\n}\nfunction axisIndices(datum) {\n let index = +datum.grid;\n return [datum.ticks ? index++ : -1,\n // ticks index\n datum.labels ? index++ : -1,\n // labels index\n index + +datum.domain // title index\n ];\n}\nfunction axisLayout(view, axis, width, height) {\n var item = axis.items[0],\n datum = item.datum,\n delta = item.translate != null ? item.translate : 0.5,\n orient = item.orient,\n indices = axisIndices(datum),\n range = item.range,\n offset = item.offset,\n position = item.position,\n minExtent = item.minExtent,\n maxExtent = item.maxExtent,\n title = datum.title && item.items[indices[2]].items[0],\n titlePadding = item.titlePadding,\n bounds = item.bounds,\n dl = title && multiLineOffset(title),\n x = 0,\n y = 0,\n i,\n s;\n tempBounds.clear().union(bounds);\n bounds.clear();\n if ((i = indices[0]) > -1) bounds.union(item.items[i].bounds);\n if ((i = indices[1]) > -1) bounds.union(item.items[i].bounds);\n\n // position axis group and title\n switch (orient) {\n case Top:\n x = position || 0;\n y = -offset;\n s = Math.max(minExtent, Math.min(maxExtent, -bounds.y1));\n bounds.add(0, -s).add(range, 0);\n if (title) axisTitleLayout(view, title, s, titlePadding, dl, 0, -1, bounds);\n break;\n case Left:\n x = -offset;\n y = position || 0;\n s = Math.max(minExtent, Math.min(maxExtent, -bounds.x1));\n bounds.add(-s, 0).add(0, range);\n if (title) axisTitleLayout(view, title, s, titlePadding, dl, 1, -1, bounds);\n break;\n case Right:\n x = width + offset;\n y = position || 0;\n s = Math.max(minExtent, Math.min(maxExtent, bounds.x2));\n bounds.add(0, 0).add(s, range);\n if (title) axisTitleLayout(view, title, s, titlePadding, dl, 1, 1, bounds);\n break;\n case Bottom:\n x = position || 0;\n y = height + offset;\n s = Math.max(minExtent, Math.min(maxExtent, bounds.y2));\n bounds.add(0, 0).add(range, s);\n if (title) axisTitleLayout(view, title, s, titlePadding, 0, 0, 1, bounds);\n break;\n default:\n x = item.x;\n y = item.y;\n }\n\n // update bounds\n boundStroke(bounds.translate(x, y), item);\n if (set(item, 'x', x + delta) | set(item, 'y', y + delta)) {\n item.bounds = tempBounds;\n view.dirty(item);\n item.bounds = bounds;\n view.dirty(item);\n }\n return item.mark.bounds.clear().union(bounds);\n}\nfunction axisTitleLayout(view, title, offset, pad, dl, isYAxis, sign, bounds) {\n const b = title.bounds;\n if (title.auto) {\n const v = sign * (offset + dl + pad);\n let dx = 0,\n dy = 0;\n view.dirty(title);\n isYAxis ? dx = (title.x || 0) - (title.x = v) : dy = (title.y || 0) - (title.y = v);\n title.mark.bounds.clear().union(b.translate(-dx, -dy));\n view.dirty(title);\n }\n bounds.union(b);\n}\n\n// aggregation functions for grid margin determination\nconst min = (a, b) => Math.floor(Math.min(a, b));\nconst max = (a, b) => Math.ceil(Math.max(a, b));\nfunction gridLayoutGroups(group) {\n var groups = group.items,\n n = groups.length,\n i = 0,\n mark,\n items;\n const views = {\n marks: [],\n rowheaders: [],\n rowfooters: [],\n colheaders: [],\n colfooters: [],\n rowtitle: null,\n coltitle: null\n };\n\n // layout axes, gather legends, collect bounds\n for (; i < n; ++i) {\n mark = groups[i];\n items = mark.items;\n if (mark.marktype === Group) {\n switch (mark.role) {\n case AxisRole:\n case LegendRole:\n case TitleRole:\n break;\n case RowHeader:\n views.rowheaders.push(...items);\n break;\n case RowFooter:\n views.rowfooters.push(...items);\n break;\n case ColHeader:\n views.colheaders.push(...items);\n break;\n case ColFooter:\n views.colfooters.push(...items);\n break;\n case RowTitle:\n views.rowtitle = items[0];\n break;\n case ColTitle:\n views.coltitle = items[0];\n break;\n default:\n views.marks.push(...items);\n }\n }\n }\n return views;\n}\nfunction bboxFlush(item) {\n return new Bounds().set(0, 0, item.width || 0, item.height || 0);\n}\nfunction bboxFull(item) {\n const b = item.bounds.clone();\n return b.empty() ? b.set(0, 0, 0, 0) : b.translate(-(item.x || 0), -(item.y || 0));\n}\nfunction get(opt, key, d) {\n const v = isObject(opt) ? opt[key] : opt;\n return v != null ? v : d !== undefined ? d : 0;\n}\nfunction offsetValue(v) {\n return v < 0 ? Math.ceil(-v) : 0;\n}\nfunction gridLayout(view, groups, opt) {\n var dirty = !opt.nodirty,\n bbox = opt.bounds === Flush ? bboxFlush : bboxFull,\n bounds = tempBounds.set(0, 0, 0, 0),\n alignCol = get(opt.align, Column),\n alignRow = get(opt.align, Row),\n padCol = get(opt.padding, Column),\n padRow = get(opt.padding, Row),\n ncols = opt.columns || groups.length,\n nrows = ncols <= 0 ? 1 : Math.ceil(groups.length / ncols),\n n = groups.length,\n xOffset = Array(n),\n xExtent = Array(ncols),\n xMax = 0,\n yOffset = Array(n),\n yExtent = Array(nrows),\n yMax = 0,\n dx = Array(n),\n dy = Array(n),\n boxes = Array(n),\n m,\n i,\n c,\n r,\n b,\n g,\n px,\n py,\n x,\n y,\n offset;\n for (i = 0; i < ncols; ++i) xExtent[i] = 0;\n for (i = 0; i < nrows; ++i) yExtent[i] = 0;\n\n // determine offsets for each group\n for (i = 0; i < n; ++i) {\n g = groups[i];\n b = boxes[i] = bbox(g);\n g.x = g.x || 0;\n dx[i] = 0;\n g.y = g.y || 0;\n dy[i] = 0;\n c = i % ncols;\n r = ~~(i / ncols);\n xMax = Math.max(xMax, px = Math.ceil(b.x2));\n yMax = Math.max(yMax, py = Math.ceil(b.y2));\n xExtent[c] = Math.max(xExtent[c], px);\n yExtent[r] = Math.max(yExtent[r], py);\n xOffset[i] = padCol + offsetValue(b.x1);\n yOffset[i] = padRow + offsetValue(b.y1);\n if (dirty) view.dirty(groups[i]);\n }\n\n // set initial alignment offsets\n for (i = 0; i < n; ++i) {\n if (i % ncols === 0) xOffset[i] = 0;\n if (i < ncols) yOffset[i] = 0;\n }\n\n // enforce column alignment constraints\n if (alignCol === Each) {\n for (c = 1; c < ncols; ++c) {\n for (offset = 0, i = c; i < n; i += ncols) {\n if (offset < xOffset[i]) offset = xOffset[i];\n }\n for (i = c; i < n; i += ncols) {\n xOffset[i] = offset + xExtent[c - 1];\n }\n }\n } else if (alignCol === All) {\n for (offset = 0, i = 0; i < n; ++i) {\n if (i % ncols && offset < xOffset[i]) offset = xOffset[i];\n }\n for (i = 0; i < n; ++i) {\n if (i % ncols) xOffset[i] = offset + xMax;\n }\n } else {\n for (alignCol = false, c = 1; c < ncols; ++c) {\n for (i = c; i < n; i += ncols) {\n xOffset[i] += xExtent[c - 1];\n }\n }\n }\n\n // enforce row alignment constraints\n if (alignRow === Each) {\n for (r = 1; r < nrows; ++r) {\n for (offset = 0, i = r * ncols, m = i + ncols; i < m; ++i) {\n if (offset < yOffset[i]) offset = yOffset[i];\n }\n for (i = r * ncols; i < m; ++i) {\n yOffset[i] = offset + yExtent[r - 1];\n }\n }\n } else if (alignRow === All) {\n for (offset = 0, i = ncols; i < n; ++i) {\n if (offset < yOffset[i]) offset = yOffset[i];\n }\n for (i = ncols; i < n; ++i) {\n yOffset[i] = offset + yMax;\n }\n } else {\n for (alignRow = false, r = 1; r < nrows; ++r) {\n for (i = r * ncols, m = i + ncols; i < m; ++i) {\n yOffset[i] += yExtent[r - 1];\n }\n }\n }\n\n // perform horizontal grid layout\n for (x = 0, i = 0; i < n; ++i) {\n x = xOffset[i] + (i % ncols ? x : 0);\n dx[i] += x - groups[i].x;\n }\n\n // perform vertical grid layout\n for (c = 0; c < ncols; ++c) {\n for (y = 0, i = c; i < n; i += ncols) {\n y += yOffset[i];\n dy[i] += y - groups[i].y;\n }\n }\n\n // perform horizontal centering\n if (alignCol && get(opt.center, Column) && nrows > 1) {\n for (i = 0; i < n; ++i) {\n b = alignCol === All ? xMax : xExtent[i % ncols];\n x = b - boxes[i].x2 - groups[i].x - dx[i];\n if (x > 0) dx[i] += x / 2;\n }\n }\n\n // perform vertical centering\n if (alignRow && get(opt.center, Row) && ncols !== 1) {\n for (i = 0; i < n; ++i) {\n b = alignRow === All ? yMax : yExtent[~~(i / ncols)];\n y = b - boxes[i].y2 - groups[i].y - dy[i];\n if (y > 0) dy[i] += y / 2;\n }\n }\n\n // position grid relative to anchor\n for (i = 0; i < n; ++i) {\n bounds.union(boxes[i].translate(dx[i], dy[i]));\n }\n x = get(opt.anchor, X);\n y = get(opt.anchor, Y);\n switch (get(opt.anchor, Column)) {\n case End:\n x -= bounds.width();\n break;\n case Middle:\n x -= bounds.width() / 2;\n }\n switch (get(opt.anchor, Row)) {\n case End:\n y -= bounds.height();\n break;\n case Middle:\n y -= bounds.height() / 2;\n }\n x = Math.round(x);\n y = Math.round(y);\n\n // update mark positions, bounds, dirty\n bounds.clear();\n for (i = 0; i < n; ++i) {\n groups[i].mark.bounds.clear();\n }\n for (i = 0; i < n; ++i) {\n g = groups[i];\n g.x += dx[i] += x;\n g.y += dy[i] += y;\n bounds.union(g.mark.bounds.union(g.bounds.translate(dx[i], dy[i])));\n if (dirty) view.dirty(g);\n }\n return bounds;\n}\nfunction trellisLayout(view, group, opt) {\n var views = gridLayoutGroups(group),\n groups = views.marks,\n bbox = opt.bounds === Flush ? boundFlush : boundFull,\n off = opt.offset,\n ncols = opt.columns || groups.length,\n nrows = ncols <= 0 ? 1 : Math.ceil(groups.length / ncols),\n cells = nrows * ncols,\n x,\n y,\n x2,\n y2,\n anchor,\n band,\n offset;\n\n // -- initial grid layout\n const bounds = gridLayout(view, groups, opt);\n if (bounds.empty()) bounds.set(0, 0, 0, 0); // empty grid\n\n // -- layout grid headers and footers --\n\n // perform row header layout\n if (views.rowheaders) {\n band = get(opt.headerBand, Row, null);\n x = layoutHeaders(view, views.rowheaders, groups, ncols, nrows, -get(off, 'rowHeader'), min, 0, bbox, 'x1', 0, ncols, 1, band);\n }\n\n // perform column header layout\n if (views.colheaders) {\n band = get(opt.headerBand, Column, null);\n y = layoutHeaders(view, views.colheaders, groups, ncols, ncols, -get(off, 'columnHeader'), min, 1, bbox, 'y1', 0, 1, ncols, band);\n }\n\n // perform row footer layout\n if (views.rowfooters) {\n band = get(opt.footerBand, Row, null);\n x2 = layoutHeaders(view, views.rowfooters, groups, ncols, nrows, get(off, 'rowFooter'), max, 0, bbox, 'x2', ncols - 1, ncols, 1, band);\n }\n\n // perform column footer layout\n if (views.colfooters) {\n band = get(opt.footerBand, Column, null);\n y2 = layoutHeaders(view, views.colfooters, groups, ncols, ncols, get(off, 'columnFooter'), max, 1, bbox, 'y2', cells - ncols, 1, ncols, band);\n }\n\n // perform row title layout\n if (views.rowtitle) {\n anchor = get(opt.titleAnchor, Row);\n offset = get(off, 'rowTitle');\n offset = anchor === End ? x2 + offset : x - offset;\n band = get(opt.titleBand, Row, 0.5);\n layoutTitle(view, views.rowtitle, offset, 0, bounds, band);\n }\n\n // perform column title layout\n if (views.coltitle) {\n anchor = get(opt.titleAnchor, Column);\n offset = get(off, 'columnTitle');\n offset = anchor === End ? y2 + offset : y - offset;\n band = get(opt.titleBand, Column, 0.5);\n layoutTitle(view, views.coltitle, offset, 1, bounds, band);\n }\n}\nfunction boundFlush(item, field) {\n return field === 'x1' ? item.x || 0 : field === 'y1' ? item.y || 0 : field === 'x2' ? (item.x || 0) + (item.width || 0) : field === 'y2' ? (item.y || 0) + (item.height || 0) : undefined;\n}\nfunction boundFull(item, field) {\n return item.bounds[field];\n}\nfunction layoutHeaders(view, headers, groups, ncols, limit, offset, agg, isX, bound, bf, start, stride, back, band) {\n var n = groups.length,\n init = 0,\n edge = 0,\n i,\n j,\n k,\n m,\n b,\n h,\n g,\n x,\n y;\n\n // if no groups, early exit and return 0\n if (!n) return init;\n\n // compute margin\n for (i = start; i < n; i += stride) {\n if (groups[i]) init = agg(init, bound(groups[i], bf));\n }\n\n // if no headers, return margin calculation\n if (!headers.length) return init;\n\n // check if number of headers exceeds number of rows or columns\n if (headers.length > limit) {\n view.warn('Grid headers exceed limit: ' + limit);\n headers = headers.slice(0, limit);\n }\n\n // apply offset\n init += offset;\n\n // clear mark bounds for all headers\n for (j = 0, m = headers.length; j < m; ++j) {\n view.dirty(headers[j]);\n headers[j].mark.bounds.clear();\n }\n\n // layout each header\n for (i = start, j = 0, m = headers.length; j < m; ++j, i += stride) {\n h = headers[j];\n b = h.mark.bounds;\n\n // search for nearest group to align to\n // necessary if table has empty cells\n for (k = i; k >= 0 && (g = groups[k]) == null; k -= back);\n\n // assign coordinates and update bounds\n if (isX) {\n x = band == null ? g.x : Math.round(g.bounds.x1 + band * g.bounds.width());\n y = init;\n } else {\n x = init;\n y = band == null ? g.y : Math.round(g.bounds.y1 + band * g.bounds.height());\n }\n b.union(h.bounds.translate(x - (h.x || 0), y - (h.y || 0)));\n h.x = x;\n h.y = y;\n view.dirty(h);\n\n // update current edge of layout bounds\n edge = agg(edge, b[bf]);\n }\n return edge;\n}\nfunction layoutTitle(view, g, offset, isX, bounds, band) {\n if (!g) return;\n view.dirty(g);\n\n // compute title coordinates\n var x = offset,\n y = offset;\n isX ? x = Math.round(bounds.x1 + band * bounds.width()) : y = Math.round(bounds.y1 + band * bounds.height());\n\n // assign coordinates and update bounds\n g.bounds.translate(x - (g.x || 0), y - (g.y || 0));\n g.mark.bounds.clear().union(g.bounds);\n g.x = x;\n g.y = y;\n\n // queue title for redraw\n view.dirty(g);\n}\n\n// utility for looking up legend layout configuration\nfunction lookup(config, orient) {\n const opt = config[orient] || {};\n return (key, d) => opt[key] != null ? opt[key] : config[key] != null ? config[key] : d;\n}\n\n// if legends specify offset directly, use the maximum specified value\nfunction offsets(legends, value) {\n let max = -Infinity;\n legends.forEach(item => {\n if (item.offset != null) max = Math.max(max, item.offset);\n });\n return max > -Infinity ? max : value;\n}\nfunction legendParams(g, orient, config, xb, yb, w, h) {\n const _ = lookup(config, orient),\n offset = offsets(g, _('offset', 0)),\n anchor = _('anchor', Start),\n mult = anchor === End ? 1 : anchor === Middle ? 0.5 : 0;\n const p = {\n align: Each,\n bounds: _('bounds', Flush),\n columns: _('direction') === 'vertical' ? 1 : g.length,\n padding: _('margin', 8),\n center: _('center'),\n nodirty: true\n };\n switch (orient) {\n case Left:\n p.anchor = {\n x: Math.floor(xb.x1) - offset,\n column: End,\n y: mult * (h || xb.height() + 2 * xb.y1),\n row: anchor\n };\n break;\n case Right:\n p.anchor = {\n x: Math.ceil(xb.x2) + offset,\n y: mult * (h || xb.height() + 2 * xb.y1),\n row: anchor\n };\n break;\n case Top:\n p.anchor = {\n y: Math.floor(yb.y1) - offset,\n row: End,\n x: mult * (w || yb.width() + 2 * yb.x1),\n column: anchor\n };\n break;\n case Bottom:\n p.anchor = {\n y: Math.ceil(yb.y2) + offset,\n x: mult * (w || yb.width() + 2 * yb.x1),\n column: anchor\n };\n break;\n case TopLeft:\n p.anchor = {\n x: offset,\n y: offset\n };\n break;\n case TopRight:\n p.anchor = {\n x: w - offset,\n y: offset,\n column: End\n };\n break;\n case BottomLeft:\n p.anchor = {\n x: offset,\n y: h - offset,\n row: End\n };\n break;\n case BottomRight:\n p.anchor = {\n x: w - offset,\n y: h - offset,\n column: End,\n row: End\n };\n break;\n }\n return p;\n}\nfunction legendLayout(view, legend) {\n var item = legend.items[0],\n datum = item.datum,\n orient = item.orient,\n bounds = item.bounds,\n x = item.x,\n y = item.y,\n w,\n h;\n\n // cache current bounds for later comparison\n item._bounds ? item._bounds.clear().union(bounds) : item._bounds = bounds.clone();\n bounds.clear();\n\n // adjust legend to accommodate padding and title\n legendGroupLayout(view, item, item.items[0].items[0]);\n\n // aggregate bounds to determine size, and include origin\n bounds = legendBounds(item, bounds);\n w = 2 * item.padding;\n h = 2 * item.padding;\n if (!bounds.empty()) {\n w = Math.ceil(bounds.width() + w);\n h = Math.ceil(bounds.height() + h);\n }\n if (datum.type === Symbols) {\n legendEntryLayout(item.items[0].items[0].items[0].items);\n }\n if (orient !== None) {\n item.x = x = 0;\n item.y = y = 0;\n }\n item.width = w;\n item.height = h;\n boundStroke(bounds.set(x, y, x + w, y + h), item);\n item.mark.bounds.clear().union(bounds);\n return item;\n}\nfunction legendBounds(item, b) {\n // aggregate item bounds\n item.items.forEach(_ => b.union(_.bounds));\n\n // anchor to legend origin\n b.x1 = item.padding;\n b.y1 = item.padding;\n return b;\n}\nfunction legendGroupLayout(view, item, entry) {\n var pad = item.padding,\n ex = pad - entry.x,\n ey = pad - entry.y;\n if (!item.datum.title) {\n if (ex || ey) translate(view, entry, ex, ey);\n } else {\n var title = item.items[1].items[0],\n anchor = title.anchor,\n tpad = item.titlePadding || 0,\n tx = pad - title.x,\n ty = pad - title.y;\n switch (title.orient) {\n case Left:\n ex += Math.ceil(title.bounds.width()) + tpad;\n break;\n case Right:\n case Bottom:\n break;\n default:\n ey += title.bounds.height() + tpad;\n }\n if (ex || ey) translate(view, entry, ex, ey);\n switch (title.orient) {\n case Left:\n ty += legendTitleOffset(item, entry, title, anchor, 1, 1);\n break;\n case Right:\n tx += legendTitleOffset(item, entry, title, End, 0, 0) + tpad;\n ty += legendTitleOffset(item, entry, title, anchor, 1, 1);\n break;\n case Bottom:\n tx += legendTitleOffset(item, entry, title, anchor, 0, 0);\n ty += legendTitleOffset(item, entry, title, End, -1, 0, 1) + tpad;\n break;\n default:\n tx += legendTitleOffset(item, entry, title, anchor, 0, 0);\n }\n if (tx || ty) translate(view, title, tx, ty);\n\n // translate legend if title pushes into negative coordinates\n if ((tx = Math.round(title.bounds.x1 - pad)) < 0) {\n translate(view, entry, -tx, 0);\n translate(view, title, -tx, 0);\n }\n }\n}\nfunction legendTitleOffset(item, entry, title, anchor, y, lr, noBar) {\n const grad = item.datum.type !== 'symbol',\n vgrad = title.datum.vgrad,\n e = grad && (lr || !vgrad) && !noBar ? entry.items[0] : entry,\n s = e.bounds[y ? 'y2' : 'x2'] - item.padding,\n u = vgrad && lr ? s : 0,\n v = vgrad && lr ? 0 : s,\n o = y <= 0 ? 0 : multiLineOffset(title);\n return Math.round(anchor === Start ? u : anchor === End ? v - o : 0.5 * (s - o));\n}\nfunction translate(view, item, dx, dy) {\n item.x += dx;\n item.y += dy;\n item.bounds.translate(dx, dy);\n item.mark.bounds.translate(dx, dy);\n view.dirty(item);\n}\nfunction legendEntryLayout(entries) {\n // get max widths for each column\n const widths = entries.reduce((w, g) => {\n w[g.column] = Math.max(g.bounds.x2 - g.x, w[g.column] || 0);\n return w;\n }, {});\n\n // set dimensions of legend entry groups\n entries.forEach(g => {\n g.width = widths[g.column];\n g.height = g.bounds.y2 - g.y;\n });\n}\n\nfunction titleLayout(view, mark, width, height, viewBounds) {\n var group = mark.items[0],\n frame = group.frame,\n orient = group.orient,\n anchor = group.anchor,\n offset = group.offset,\n padding = group.padding,\n title = group.items[0].items[0],\n subtitle = group.items[1] && group.items[1].items[0],\n end = orient === Left || orient === Right ? height : width,\n start = 0,\n x = 0,\n y = 0,\n sx = 0,\n sy = 0,\n pos;\n if (frame !== Group) {\n orient === Left ? (start = viewBounds.y2, end = viewBounds.y1) : orient === Right ? (start = viewBounds.y1, end = viewBounds.y2) : (start = viewBounds.x1, end = viewBounds.x2);\n } else if (orient === Left) {\n start = height, end = 0;\n }\n pos = anchor === Start ? start : anchor === End ? end : (start + end) / 2;\n if (subtitle && subtitle.text) {\n // position subtitle\n switch (orient) {\n case Top:\n case Bottom:\n sy = title.bounds.height() + padding;\n break;\n case Left:\n sx = title.bounds.width() + padding;\n break;\n case Right:\n sx = -title.bounds.width() - padding;\n break;\n }\n tempBounds.clear().union(subtitle.bounds);\n tempBounds.translate(sx - (subtitle.x || 0), sy - (subtitle.y || 0));\n if (set(subtitle, 'x', sx) | set(subtitle, 'y', sy)) {\n view.dirty(subtitle);\n subtitle.bounds.clear().union(tempBounds);\n subtitle.mark.bounds.clear().union(tempBounds);\n view.dirty(subtitle);\n }\n tempBounds.clear().union(subtitle.bounds);\n } else {\n tempBounds.clear();\n }\n tempBounds.union(title.bounds);\n\n // position title group\n switch (orient) {\n case Top:\n x = pos;\n y = viewBounds.y1 - tempBounds.height() - offset;\n break;\n case Left:\n x = viewBounds.x1 - tempBounds.width() - offset;\n y = pos;\n break;\n case Right:\n x = viewBounds.x2 + tempBounds.width() + offset;\n y = pos;\n break;\n case Bottom:\n x = pos;\n y = viewBounds.y2 + offset;\n break;\n default:\n x = group.x;\n y = group.y;\n }\n if (set(group, 'x', x) | set(group, 'y', y)) {\n tempBounds.translate(x, y);\n view.dirty(group);\n group.bounds.clear().union(tempBounds);\n mark.bounds.clear().union(tempBounds);\n view.dirty(group);\n }\n return group.bounds;\n}\n\n/**\n * Layout view elements such as axes and legends.\n * Also performs size adjustments.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.mark - Scenegraph mark of groups to layout.\n */\nfunction ViewLayout(params) {\n Transform.call(this, null, params);\n}\ninherits(ViewLayout, Transform, {\n transform(_, pulse) {\n const view = pulse.dataflow;\n _.mark.items.forEach(group => {\n if (_.layout) trellisLayout(view, group, _.layout);\n layoutGroup(view, group, _);\n });\n return shouldReflow(_.mark.group) ? pulse.reflow() : pulse;\n }\n});\nfunction shouldReflow(group) {\n // We typically should reflow if layout is invoked (#2568), as child items\n // may have resized and reflow ensures group bounds are re-calculated.\n // However, legend entries have a special exception to avoid instability.\n // For example, if a selected legend symbol gains a stroke on hover,\n // we don't want to re-position subsequent elements in the legend.\n return group && group.mark.role !== 'legend-entry';\n}\nfunction layoutGroup(view, group, _) {\n var items = group.items,\n width = Math.max(0, group.width || 0),\n height = Math.max(0, group.height || 0),\n viewBounds = new Bounds().set(0, 0, width, height),\n xBounds = viewBounds.clone(),\n yBounds = viewBounds.clone(),\n legends = [],\n title,\n mark,\n orient,\n b,\n i,\n n;\n\n // layout axes, gather legends, collect bounds\n for (i = 0, n = items.length; i < n; ++i) {\n mark = items[i];\n switch (mark.role) {\n case AxisRole:\n b = isYAxis(mark) ? xBounds : yBounds;\n b.union(axisLayout(view, mark, width, height));\n break;\n case TitleRole:\n title = mark;\n break;\n case LegendRole:\n legends.push(legendLayout(view, mark));\n break;\n case FrameRole:\n case ScopeRole:\n case RowHeader:\n case RowFooter:\n case RowTitle:\n case ColHeader:\n case ColFooter:\n case ColTitle:\n xBounds.union(mark.bounds);\n yBounds.union(mark.bounds);\n break;\n default:\n viewBounds.union(mark.bounds);\n }\n }\n\n // layout legends, adjust viewBounds\n if (legends.length) {\n // group legends by orient\n const l = {};\n legends.forEach(item => {\n orient = item.orient || Right;\n if (orient !== None) (l[orient] || (l[orient] = [])).push(item);\n });\n\n // perform grid layout for each orient group\n for (const orient in l) {\n const g = l[orient];\n gridLayout(view, g, legendParams(g, orient, _.legends, xBounds, yBounds, width, height));\n }\n\n // update view bounds\n legends.forEach(item => {\n const b = item.bounds;\n if (!b.equals(item._bounds)) {\n item.bounds = item._bounds;\n view.dirty(item); // dirty previous location\n item.bounds = b;\n view.dirty(item);\n }\n if (_.autosize && (_.autosize.type === Fit || _.autosize.type === FitX || _.autosize.type === FitY)) {\n // For autosize fit, incorporate the orthogonal dimension only.\n // Legends that overrun the chart area will then be clipped;\n // otherwise the chart area gets reduced to nothing!\n switch (item.orient) {\n case Left:\n case Right:\n viewBounds.add(b.x1, 0).add(b.x2, 0);\n break;\n case Top:\n case Bottom:\n viewBounds.add(0, b.y1).add(0, b.y2);\n }\n } else {\n viewBounds.union(b);\n }\n });\n }\n\n // combine bounding boxes\n viewBounds.union(xBounds).union(yBounds);\n\n // layout title, adjust bounds\n if (title) {\n viewBounds.union(titleLayout(view, title, width, height, viewBounds));\n }\n\n // override aggregated view bounds if content is clipped\n if (group.clip) {\n viewBounds.set(0, 0, group.width || 0, group.height || 0);\n }\n\n // perform size adjustment\n viewSizeLayout(view, group, viewBounds, _);\n}\nfunction viewSizeLayout(view, group, viewBounds, _) {\n const auto = _.autosize || {},\n type = auto.type;\n if (view._autosize < 1 || !type) return;\n let viewWidth = view._width,\n viewHeight = view._height,\n width = Math.max(0, group.width || 0),\n left = Math.max(0, Math.ceil(-viewBounds.x1)),\n height = Math.max(0, group.height || 0),\n top = Math.max(0, Math.ceil(-viewBounds.y1));\n const right = Math.max(0, Math.ceil(viewBounds.x2 - width)),\n bottom = Math.max(0, Math.ceil(viewBounds.y2 - height));\n if (auto.contains === Padding) {\n const padding = view.padding();\n viewWidth -= padding.left + padding.right;\n viewHeight -= padding.top + padding.bottom;\n }\n if (type === None) {\n left = 0;\n top = 0;\n width = viewWidth;\n height = viewHeight;\n } else if (type === Fit) {\n width = Math.max(0, viewWidth - left - right);\n height = Math.max(0, viewHeight - top - bottom);\n } else if (type === FitX) {\n width = Math.max(0, viewWidth - left - right);\n viewHeight = height + top + bottom;\n } else if (type === FitY) {\n viewWidth = width + left + right;\n height = Math.max(0, viewHeight - top - bottom);\n } else if (type === Pad) {\n viewWidth = width + left + right;\n viewHeight = height + top + bottom;\n }\n view._resizeView(viewWidth, viewHeight, width, height, [left, top], auto.resize);\n}\n\nexport { Bound as bound, Identifier as identifier, Mark as mark, Overlap as overlap, Render as render, ViewLayout as viewlayout };\n", "export default function(x) {\n return function constant() {\n return x;\n };\n}\n", "export const abs = Math.abs;\nexport const atan2 = Math.atan2;\nexport const cos = Math.cos;\nexport const max = Math.max;\nexport const min = Math.min;\nexport const sin = Math.sin;\nexport const sqrt = Math.sqrt;\n\nexport const epsilon = 1e-12;\nexport const pi = Math.PI;\nexport const halfPi = pi / 2;\nexport const tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n", "const pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction append(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += arguments[i] + strings[i];\n }\n}\n\nfunction appendRound(digits) {\n let d = Math.floor(digits);\n if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\n if (d > 15) return append;\n const k = 10 ** d;\n return function(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += Math.round(arguments[i] * k) / k + strings[i];\n }\n };\n}\n\nexport class Path {\n constructor(digits) {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n this._append = digits == null ? append : appendRound(digits);\n }\n moveTo(x, y) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n }\n closePath() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._append`Z`;\n }\n }\n lineTo(x, y) {\n this._append`L${this._x1 = +x},${this._y1 = +y}`;\n }\n quadraticCurveTo(x1, y1, x, y) {\n this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\n }\n arcTo(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._append`M${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._append`L${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Otherwise, draw an arc!\n else {\n let x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\n }\n\n this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\n }\n }\n arc(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._append`M${x0},${y0}`;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._append`L${x0},${y0}`;\n }\n\n // Is this arc empty? We\u2019re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._append`A${r},${r},0,${+(da >= pi)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;\n }\n }\n rect(x, y, w, h) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\n }\n toString() {\n return this._;\n }\n}\n\nexport function path() {\n return new Path;\n}\n\n// Allow instanceof d3.path\npath.prototype = Path.prototype;\n\nexport function pathRound(digits = 3) {\n return new Path(+digits);\n}\n", "import {Path} from \"d3-path\";\n\nexport function withPath(shape) {\n let digits = 3;\n\n shape.digits = function(_) {\n if (!arguments.length) return digits;\n if (_ == null) {\n digits = null;\n } else {\n const d = Math.floor(_);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n digits = d;\n }\n return shape;\n };\n\n return () => new Path(digits);\n}\n", "import constant from \"./constant.js\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\nimport {withPath} from \"./path.js\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null,\n path = withPath(arc);\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 \u2265 r0, da1 \u2265 da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle. If this\n // intersection fails, it\u2019s probably because the arc is too small, so\n // disable the corner radius entirely.\n if (da < pi) {\n if (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10)) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n } else {\n rc0 = rc1 = 0;\n }\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector\u2019s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it\u2019s a circular sector?\n // Or perhaps it\u2019s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector\u2019s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n", "export var slice = Array.prototype.slice;\n\nexport default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n", "function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // falls through\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n", "export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n", "import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x, y) {\n var defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null,\n path = withPath(line);\n\n x = typeof x === \"function\" ? x : (x === undefined) ? pointX : constant(x);\n y = typeof y === \"function\" ? y : (y === undefined) ? pointY : constant(y);\n\n function line(data) {\n var i,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n", "import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport line from \"./line.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x0, y0, y1) {\n var x1 = null,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null,\n path = withPath(area);\n\n x0 = typeof x0 === \"function\" ? x0 : (x0 === undefined) ? pointX : constant(+x0);\n y0 = typeof y0 === \"function\" ? y0 : (y0 === undefined) ? constant(0) : constant(+y0);\n y1 = typeof y1 === \"function\" ? y1 : (y1 === undefined) ? pointY : constant(+y1);\n\n function area(data) {\n var i,\n j,\n k,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n", "import {pi, sqrt, tau} from \"../math.js\";\n\nexport default {\n draw(context, size) {\n const r = sqrt(size / pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, tau);\n }\n};\n", "import constant from \"./constant.js\";\nimport {withPath} from \"./path.js\";\nimport asterisk from \"./symbol/asterisk.js\";\nimport circle from \"./symbol/circle.js\";\nimport cross from \"./symbol/cross.js\";\nimport diamond from \"./symbol/diamond.js\";\nimport diamond2 from \"./symbol/diamond2.js\";\nimport plus from \"./symbol/plus.js\";\nimport square from \"./symbol/square.js\";\nimport square2 from \"./symbol/square2.js\";\nimport star from \"./symbol/star.js\";\nimport triangle from \"./symbol/triangle.js\";\nimport triangle2 from \"./symbol/triangle2.js\";\nimport wye from \"./symbol/wye.js\";\nimport times from \"./symbol/times.js\";\n\n// These symbols are designed to be filled.\nexport const symbolsFill = [\n circle,\n cross,\n diamond,\n square,\n star,\n triangle,\n wye\n];\n\n// These symbols are designed to be stroked (with a width of 1.5px and round caps).\nexport const symbolsStroke = [\n circle,\n plus,\n times,\n triangle2,\n asterisk,\n square2,\n diamond2\n];\n\nexport default function Symbol(type, size) {\n let context = null,\n path = withPath(symbol);\n\n type = typeof type === \"function\" ? type : constant(type || circle);\n size = typeof size === \"function\" ? size : constant(size === undefined ? 64 : +size);\n\n function symbol() {\n let buffer;\n if (!context) context = buffer = path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n symbol.type = function(_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n };\n\n symbol.size = function(_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n };\n\n symbol.context = function(_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n", "export default function() {}\n", "export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // falls through\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // falls through\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n", "import noop from \"../noop.js\";\nimport {point} from \"./basis.js\";\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x2, this._y2);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisClosed(context);\n}\n", "import {point} from \"./basis.js\";\n\nfunction BasisOpen(context) {\n this._context = context;\n}\n\nBasisOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n case 3: this._point = 4; // falls through\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisOpen(context);\n}\n", "import {Basis} from \"./basis.js\";\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nexport default (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n", "export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // falls through\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n", "import noop from \"../noop.js\";\nimport {point} from \"./cardinal.js\";\n\nexport function CardinalClosed(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalClosed(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n", "import {point} from \"./cardinal.js\";\n\nexport function CardinalOpen(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // falls through\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalOpen(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n", "import {epsilon} from \"../math.js\";\nimport {Cardinal} from \"./cardinal.js\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // falls through\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n", "import {CardinalClosed} from \"./cardinalClosed.js\";\nimport noop from \"../noop.js\";\nimport {point} from \"./catmullRom.js\";\n\nfunction CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n", "import {CardinalOpen} from \"./cardinalOpen.js\";\nimport {point} from \"./catmullRom.js\";\n\nfunction CatmullRomOpen(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // falls through\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n", "import noop from \"../noop.js\";\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._point) this._context.closePath();\n },\n point: function(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);\n else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\nexport default function(context) {\n return new LinearClosed(context);\n}\n", "function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic B\u00E9zier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n", "function Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\nexport default function(context) {\n return new Natural(context);\n}\n", "function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // falls through\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n", "function domCanvas(w, h) {\n if (typeof document !== 'undefined' && document.createElement) {\n const c = document.createElement('canvas');\n if (c && c.getContext) {\n c.width = w;\n c.height = h;\n return c;\n }\n }\n return null;\n}\nconst domImage = () => typeof Image !== 'undefined' ? Image : null;\n\nexport { domCanvas as canvas, domCanvas, domImage as image };\n", "export function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: {\n if (typeof domain === \"function\") this.interpolator(domain);\n else this.range(domain);\n break;\n }\n default: {\n this.domain(domain);\n if (typeof interpolator === \"function\") this.interpolator(interpolator);\n else this.range(interpolator);\n break;\n }\n }\n return this;\n}\n", "import {InternMap} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n var index = new InternMap(),\n domain = [],\n range = [],\n unknown = implicit;\n\n function scale(d) {\n let i = index.get(d);\n if (i === undefined) {\n if (unknown !== implicit) return unknown;\n index.set(d, i = domain.push(d) - 1);\n }\n return range[i % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = new InternMap();\n for (const value of _) {\n if (index.has(value)) continue;\n index.set(value, domain.push(value) - 1);\n }\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal(domain, range).unknown(unknown);\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n", "export {default as interpolate} from \"./value.js\";\nexport {default as interpolateArray} from \"./array.js\";\nexport {default as interpolateBasis} from \"./basis.js\";\nexport {default as interpolateBasisClosed} from \"./basisClosed.js\";\nexport {default as interpolateDate} from \"./date.js\";\nexport {default as interpolateDiscrete} from \"./discrete.js\";\nexport {default as interpolateHue} from \"./hue.js\";\nexport {default as interpolateNumber} from \"./number.js\";\nexport {default as interpolateNumberArray} from \"./numberArray.js\";\nexport {default as interpolateObject} from \"./object.js\";\nexport {default as interpolateRound} from \"./round.js\";\nexport {default as interpolateString} from \"./string.js\";\nexport {interpolateTransformCss, interpolateTransformSvg} from \"./transform/index.js\";\nexport {default as interpolateZoom} from \"./zoom.js\";\nexport {default as interpolateRgb, rgbBasis as interpolateRgbBasis, rgbBasisClosed as interpolateRgbBasisClosed} from \"./rgb.js\";\nexport {default as interpolateHsl, hslLong as interpolateHslLong} from \"./hsl.js\";\nexport {default as interpolateLab} from \"./lab.js\";\nexport {default as interpolateHcl, hclLong as interpolateHclLong} from \"./hcl.js\";\nexport {default as interpolateCubehelix, cubehelixLong as interpolateCubehelixLong} from \"./cubehelix.js\";\nexport {default as piecewise} from \"./piecewise.js\";\nexport {default as quantize} from \"./quantize.js\";\n", "export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n", "import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHex8: color_formatHex8,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb() {\n return this;\n },\n clamp() {\n return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n },\n displayable() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatHex8: rgb_formatHex8,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n value = clampi(value);\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n clamp() {\n return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n },\n displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n }\n}));\n\nfunction clamph(value) {\n value = (value || 0) % 360;\n return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n", "export const radians = Math.PI / 180;\nexport const degrees = 180 / Math.PI;\n", "import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\n// https://observablehq.com/@mbostock/lab-and-rgb\nconst K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) return hcl2lab(o);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * degrees;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\nfunction hcl2lab(o) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * radians;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb() {\n return hcl2lab(this).rgb();\n }\n}));\n", "import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * degrees - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * radians,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n}));\n", "export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n", "import {basis} from \"./basis.js\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n", "export default x => () => x;\n", "import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n", "import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n", "export default function(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nexport function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n", "import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n", "export default function(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n", "export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n", "import value from \"./value.js\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n", "import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n", "import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n", "export default function(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n", "import {hue} from \"./color.js\";\n\nexport default function(a, b) {\n var i = hue(+a, +b);\n return function(t) {\n var x = i(t);\n return x - 360 * Math.floor(x / 360);\n };\n}\n", "export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n", "var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n", "import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n", "import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n", "var epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\nexport default (function zoomRho(rho, rho2, rho4) {\n\n // p0 = [ux0, uy0, w0]\n // p1 = [ux1, uy1, w1]\n function zoom(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 \u2245 u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000 * rho / Math.SQRT2;\n\n return i;\n }\n\n zoom.rho = function(_) {\n var _1 = Math.max(1e-3, +_), _2 = _1 * _1, _4 = _2 * _2;\n return zoomRho(_1, _2, _4);\n };\n\n return zoom;\n})(Math.SQRT2, 2, 4);\n", "import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hsl(hue) {\n return function(start, end) {\n var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n", "import {lab as colorLab} from \"d3-color\";\nimport color from \"./color.js\";\n\nexport default function lab(start, end) {\n var l = color((start = colorLab(start)).l, (end = colorLab(end)).l),\n a = color(start.a, end.a),\n b = color(start.b, end.b),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.l = l(t);\n start.a = a(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n}\n", "import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hcl(hue) {\n return function(start, end) {\n var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n c = color(start.c, end.c),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n", "import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n", "import {default as value} from \"./value.js\";\n\nexport default function piecewise(interpolate, values) {\n if (values === undefined) values = interpolate, interpolate = value;\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n", "export default function(interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n return samples;\n}\n", "export default function constants(x) {\n return function() {\n return x;\n };\n}\n", "export default function number(x) {\n return +x;\n}\n", "import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n return x;\n}\n\nfunction normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n var t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport function transformer() {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n var n = Math.min(domain.length, range.length);\n if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n piecewise = n > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = Array.from(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\n\nexport default function continuous() {\n return transformer()(identity, identity);\n}\n", "import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n var step = tickStep(start, stop, count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n", "import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain();\n var i0 = 0;\n var i1 = d.length - 1;\n var start = d[i0];\n var stop = d[i1];\n var prestep;\n var step;\n var maxIter = 10;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n \n while (maxIter-- > 0) {\n step = tickIncrement(start, stop, count);\n if (step === prestep) {\n d[i0] = start\n d[i1] = stop\n return domain(d);\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n } else {\n break;\n }\n prestep = step;\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous();\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n", "import {linearish} from \"./linear.js\";\nimport number from \"./number.js\";\n\nexport default function identity(domain) {\n var unknown;\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = Array.from(_, number), scale) : domain.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return identity(domain).unknown(unknown);\n };\n\n domain = arguments.length ? Array.from(domain, number) : [0, 1];\n\n return linearish(scale);\n}\n", "export default function nice(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n", "import {ticks} from \"d3-array\";\nimport {format, formatSpecifier} from \"d3-format\";\nimport nice from \"./nice.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformLog(x) {\n return Math.log(x);\n}\n\nfunction transformExp(x) {\n return Math.exp(x);\n}\n\nfunction transformLogn(x) {\n return -Math.log(-x);\n}\n\nfunction transformExpn(x) {\n return -Math.exp(-x);\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : x => Math.pow(base, x);\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), x => Math.log(x) / base);\n}\n\nfunction reflect(f) {\n return (x, k) => -f(-x, k);\n}\n\nexport function loggish(transform) {\n const scale = transform(transformLog, transformExp);\n const domain = scale.domain;\n let base = 10;\n let logs;\n let pows;\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) {\n logs = reflect(logs), pows = reflect(pows);\n transform(transformLogn, transformExpn);\n } else {\n transform(transformLog, transformExp);\n }\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = count => {\n const d = domain();\n let u = d[0];\n let v = d[d.length - 1];\n const r = v < u;\n\n if (r) ([u, v] = [v, u]);\n\n let i = logs(u);\n let j = logs(v);\n let k;\n let t;\n const n = count == null ? 10 : +count;\n let z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.floor(i), j = Math.ceil(j);\n if (u > 0) for (; i <= j; ++i) {\n for (k = 1; k < base; ++k) {\n t = i < 0 ? k / pows(-i) : k * pows(i);\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i <= j; ++i) {\n for (k = base - 1; k >= 1; --k) {\n t = i > 0 ? k / pows(-i) : k * pows(i);\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n if (z.length * 2 < n) z = ticks(u, v, n);\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = (count, specifier) => {\n if (count == null) count = 10;\n if (specifier == null) specifier = base === 10 ? \"s\" : \",\";\n if (typeof specifier !== \"function\") {\n if (!(base % 1) && (specifier = formatSpecifier(specifier)).precision == null) specifier.trim = true;\n specifier = format(specifier);\n }\n if (count === Infinity) return specifier;\n const k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return d => {\n let i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = () => {\n return domain(nice(domain(), {\n floor: x => pows(Math.floor(logs(x))),\n ceil: x => pows(Math.ceil(logs(x)))\n }));\n };\n\n return scale;\n}\n\nexport default function log() {\n const scale = loggish(transformer()).domain([1, 10]);\n scale.copy = () => copy(scale, log()).base(scale.base());\n initRange.apply(scale, arguments);\n return scale;\n}\n", "import {linearish} from \"./linear.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformSymlog(c) {\n return function(x) {\n return Math.sign(x) * Math.log1p(Math.abs(x / c));\n };\n}\n\nfunction transformSymexp(c) {\n return function(x) {\n return Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n };\n}\n\nexport function symlogish(transform) {\n var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));\n\n scale.constant = function(_) {\n return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;\n };\n\n return linearish(scale);\n}\n\nexport default function symlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, symlog()).constant(scale.constant());\n };\n\n return initRange.apply(scale, arguments);\n}\n", "import {linearish} from \"./linear.js\";\nimport {copy, identity, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformPow(exponent) {\n return function(x) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n };\n}\n\nfunction transformSqrt(x) {\n return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n}\n\nfunction transformSquare(x) {\n return x < 0 ? -x * x : x * x;\n}\n\nexport function powish(transform) {\n var scale = transform(identity, identity),\n exponent = 1;\n\n function rescale() {\n return exponent === 1 ? transform(identity, identity)\n : exponent === 0.5 ? transform(transformSqrt, transformSquare)\n : transform(transformPow(exponent), transformPow(1 / exponent));\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, rescale()) : exponent;\n };\n\n return linearish(scale);\n}\n\nexport default function pow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, pow()).exponent(scale.exponent());\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n\nexport function sqrt() {\n return pow.apply(null, arguments).exponent(0.5);\n}\n", "import {ascending, bisect, quantileSorted as threshold} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function quantile() {\n var domain = [],\n range = [],\n thresholds = [],\n unknown;\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : range[bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(scale, arguments);\n}\n", "import {bisect} from \"d3-array\";\nimport {linearish} from \"./linear.js\";\nimport {initRange} from \"./init.js\";\n\nexport default function quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1],\n unknown;\n\n function scale(x) {\n return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1] = _, x0 = +x0, x1 = +x1, rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = Array.from(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : scale;\n };\n\n scale.thresholds = function() {\n return domain.slice();\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(linearish(scale), arguments);\n}\n", "import {bisect} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function threshold() {\n var domain = [0.5],\n range = [0, 1],\n unknown,\n n = 1;\n\n function scale(x) {\n return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(scale, arguments);\n}\n", "import {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeTicks, timeTickInterval} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport nice from \"./nice.js\";\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format) {\n var scale = continuous(),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(Array.from(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], interval == null ? 10 : interval);\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval) {\n var d = domain();\n if (!interval || typeof interval.range !== \"function\") interval = tickInterval(d[0], d[d.length - 1], interval == null ? 10 : interval);\n return interval ? domain(nice(d, interval)) : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format));\n };\n\n return scale;\n}\n\nexport default function time() {\n return initRange.apply(calendar(timeTicks, timeTickInterval, timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n", "import {utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcTicks, utcTickInterval} from \"d3-time\";\nimport {utcFormat} from \"d3-time-format\";\nimport {calendar} from \"./time.js\";\nimport {initRange} from \"./init.js\";\n\nexport default function utcTime() {\n return initRange.apply(calendar(utcTicks, utcTickInterval, utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);\n}\n", "import {interpolate, interpolateRound} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n var x0 = 0,\n x1 = 1,\n t0,\n t1,\n k10,\n transform,\n interpolator = identity,\n clamp = false,\n unknown;\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n function range(interpolate) {\n return function(_) {\n var r0, r1;\n return arguments.length ? ([r0, r1] = _, interpolator = interpolate(r0, r1), scale) : [interpolator(0), interpolator(1)];\n };\n }\n\n scale.range = range(interpolate);\n\n scale.rangeRound = range(interpolateRound);\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);\n return scale;\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .interpolator(source.interpolator())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport default function sequential() {\n var scale = linearish(transformer()(identity));\n\n scale.copy = function() {\n return copy(scale, sequential());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialLog() {\n var scale = loggish(transformer()).domain([1, 10]);\n\n scale.copy = function() {\n return copy(scale, sequentialLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSymlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, sequentialSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialPow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, sequentialPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSqrt() {\n return sequentialPow.apply(null, arguments).exponent(0.5);\n}\n", "import {interpolate, interpolateRound, piecewise} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {copy} from \"./sequential.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n var x0 = 0,\n x1 = 0.5,\n x2 = 1,\n s = 1,\n t0,\n t1,\n t2,\n k10,\n k21,\n interpolator = identity,\n transform,\n clamp = false,\n unknown;\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (s * x < s * t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1, x2] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), t2 = transform(x2 = +x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1, scale) : [x0, x1, x2];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n function range(interpolate) {\n return function(_) {\n var r0, r1, r2;\n return arguments.length ? ([r0, r1, r2] = _, interpolator = piecewise(interpolate, [r0, r1, r2]), scale) : [interpolator(0), interpolator(0.5), interpolator(1)];\n };\n }\n\n scale.range = range(interpolate);\n\n scale.rangeRound = range(interpolateRound);\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1;\n return scale;\n };\n}\n\nexport default function diverging() {\n var scale = linearish(transformer()(identity));\n\n scale.copy = function() {\n return copy(scale, diverging());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingLog() {\n var scale = loggish(transformer()).domain([0.1, 1, 10]);\n\n scale.copy = function() {\n return copy(scale, divergingLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSymlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, divergingSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingPow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, divergingPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSqrt() {\n return divergingPow.apply(null, arguments).exponent(0.5);\n}\n", "export default function(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n", "import colors from \"../colors.js\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n", "import colors from \"../colors.js\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n", "import colors from \"../colors.js\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n", "import colors from \"../colors.js\";\n\nexport default colors(\"4269d0efb118ff725c6cc5b03ca951ff8ab7a463f297bbf59c6b4e9498a0\");\n", "import colors from \"../colors.js\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n", "import colors from \"../colors.js\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n", "import colors from \"../colors.js\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n", "import colors from \"../colors.js\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n", "import colors from \"../colors.js\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n", "import colors from \"../colors.js\";\n\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n", "import { toNumber, peek, toSet, array, constant, isArray, isNumber, span, isObject, isString, error } from 'vega-util';\nimport { bisectRight, range, bisect } from 'd3-array';\nimport * as $ from 'd3-scale';\nimport { scaleOrdinal, tickFormat as tickFormat$1 } from 'd3-scale';\nexport { scaleImplicit } from 'd3-scale';\nimport * as $$1 from 'd3-interpolate';\nimport { schemeAccent, schemeCategory10, schemeDark2, schemeObservable10, schemePaired, schemePastel1, schemePastel2, schemeSet1, schemeSet2, schemeSet3 } from 'd3-scale-chromatic';\nimport { timeInterval, utcInterval } from 'vega-time';\n\nfunction bandSpace (count, paddingInner, paddingOuter) {\n const space = count - paddingInner + paddingOuter * 2;\n return count ? space > 0 ? space : 1 : 0;\n}\n\nconst Identity = 'identity';\nconst Linear = 'linear';\nconst Log = 'log';\nconst Pow = 'pow';\nconst Sqrt = 'sqrt';\nconst Symlog = 'symlog';\nconst Time = 'time';\nconst UTC = 'utc';\nconst Sequential = 'sequential';\nconst Diverging = 'diverging';\nconst Quantile = 'quantile';\nconst Quantize = 'quantize';\nconst Threshold = 'threshold';\nconst Ordinal = 'ordinal';\nconst Point = 'point';\nconst Band = 'band';\nconst BinOrdinal = 'bin-ordinal';\n\n// categories\nconst Continuous = 'continuous';\nconst Discrete = 'discrete';\nconst Discretizing = 'discretizing';\nconst Interpolating = 'interpolating';\nconst Temporal = 'temporal';\n\nfunction invertRange (scale) {\n return function (_) {\n let lo = _[0],\n hi = _[1],\n t;\n if (hi < lo) {\n t = lo;\n lo = hi;\n hi = t;\n }\n return [scale.invert(lo), scale.invert(hi)];\n };\n}\n\nfunction invertRangeExtent (scale) {\n return function (_) {\n const range = scale.range();\n let lo = _[0],\n hi = _[1],\n min = -1,\n max,\n t,\n i,\n n;\n if (hi < lo) {\n t = lo;\n lo = hi;\n hi = t;\n }\n for (i = 0, n = range.length; i < n; ++i) {\n if (range[i] >= lo && range[i] <= hi) {\n if (min < 0) min = i;\n max = i;\n }\n }\n if (min < 0) return undefined;\n lo = scale.invertExtent(range[min]);\n hi = scale.invertExtent(range[max]);\n return [lo[0] === undefined ? lo[1] : lo[0], hi[1] === undefined ? hi[0] : hi[1]];\n };\n}\n\nfunction band() {\n const scale = scaleOrdinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range;\n let range$1 = [0, 1],\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n delete scale.unknown;\n function rescale() {\n const n = domain().length,\n reverse = range$1[1] < range$1[0],\n stop = range$1[1 - reverse],\n space = bandSpace(n, paddingInner, paddingOuter);\n let start = range$1[reverse - 0];\n step = (stop - start) / (space || 1);\n if (round) {\n step = Math.floor(step);\n }\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) {\n start = Math.round(start);\n bandwidth = Math.round(bandwidth);\n }\n const values = range(n).map(i => start + step * i);\n return ordinalRange(reverse ? values.reverse() : values);\n }\n scale.domain = function (_) {\n if (arguments.length) {\n domain(_);\n return rescale();\n } else {\n return domain();\n }\n };\n scale.range = function (_) {\n if (arguments.length) {\n range$1 = [+_[0], +_[1]];\n return rescale();\n } else {\n return range$1.slice();\n }\n };\n scale.rangeRound = function (_) {\n range$1 = [+_[0], +_[1]];\n round = true;\n return rescale();\n };\n scale.bandwidth = function () {\n return bandwidth;\n };\n scale.step = function () {\n return step;\n };\n scale.round = function (_) {\n if (arguments.length) {\n round = !!_;\n return rescale();\n } else {\n return round;\n }\n };\n scale.padding = function (_) {\n if (arguments.length) {\n paddingOuter = Math.max(0, Math.min(1, _));\n paddingInner = paddingOuter;\n return rescale();\n } else {\n return paddingInner;\n }\n };\n scale.paddingInner = function (_) {\n if (arguments.length) {\n paddingInner = Math.max(0, Math.min(1, _));\n return rescale();\n } else {\n return paddingInner;\n }\n };\n scale.paddingOuter = function (_) {\n if (arguments.length) {\n paddingOuter = Math.max(0, Math.min(1, _));\n return rescale();\n } else {\n return paddingOuter;\n }\n };\n scale.align = function (_) {\n if (arguments.length) {\n align = Math.max(0, Math.min(1, _));\n return rescale();\n } else {\n return align;\n }\n };\n scale.invertRange = function (_) {\n // bail if range has null or undefined values\n if (_[0] == null || _[1] == null) return;\n const reverse = range$1[1] < range$1[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1;\n let lo = +_[0],\n hi = +_[1],\n a,\n b,\n t;\n\n // bail if either range endpoint is invalid\n if (lo !== lo || hi !== hi) return;\n\n // order range inputs, bail if outside of scale range\n if (hi < lo) {\n t = lo;\n lo = hi;\n hi = t;\n }\n if (hi < values[0] || lo > range$1[1 - reverse]) return;\n\n // binary search to index into scale range\n a = Math.max(0, bisectRight(values, lo) - 1);\n b = lo === hi ? a : bisectRight(values, hi) - 1;\n\n // increment index a if lo is within padding gap\n if (lo - values[a] > bandwidth + 1e-10) ++a;\n if (reverse) {\n // map + swap\n t = a;\n a = n - b;\n b = n - t;\n }\n return a > b ? undefined : domain().slice(a, b + 1);\n };\n scale.invert = function (_) {\n const value = scale.invertRange([_, _]);\n return value ? value[0] : value;\n };\n scale.copy = function () {\n return band().domain(domain()).range(range$1).round(round).paddingInner(paddingInner).paddingOuter(paddingOuter).align(align);\n };\n return rescale();\n}\nfunction pointish(scale) {\n const copy = scale.copy;\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n scale.copy = function () {\n return pointish(copy());\n };\n return scale;\n}\nfunction point() {\n return pointish(band().paddingInner(1));\n}\n\nvar map = Array.prototype.map;\nfunction numbers(_) {\n return map.call(_, toNumber);\n}\n\nconst slice = Array.prototype.slice;\n\nfunction scaleBinOrdinal() {\n let domain = [],\n range = [];\n function scale(x) {\n return x == null || x !== x ? undefined : range[(bisect(domain, x) - 1) % range.length];\n }\n scale.domain = function (_) {\n if (arguments.length) {\n domain = numbers(_);\n return scale;\n } else {\n return domain.slice();\n }\n };\n scale.range = function (_) {\n if (arguments.length) {\n range = slice.call(_);\n return scale;\n } else {\n return range.slice();\n }\n };\n scale.tickFormat = function (count, specifier) {\n return tickFormat$1(domain[0], peek(domain), count == null ? 10 : count, specifier);\n };\n scale.copy = function () {\n return scaleBinOrdinal().domain(scale.domain()).range(scale.range());\n };\n return scale;\n}\n\n/** Private scale registry: should not be exported */\nconst scales = new Map();\nconst VEGA_SCALE = Symbol('vega_scale');\nfunction registerScale(scale) {\n scale[VEGA_SCALE] = true;\n return scale;\n}\n\n/**\n * Return true if object was created by a constructor from the vega-scale `scale` function.\n */\nfunction isRegisteredScale(scale) {\n return scale && scale[VEGA_SCALE] === true;\n}\n\n/**\n * Augment scales with their type and needed inverse methods.\n */\nfunction create(type, constructor, metadata) {\n const ctr = function scale() {\n const s = constructor();\n if (!s.invertRange) {\n s.invertRange = s.invert ? invertRange(s) : s.invertExtent ? invertRangeExtent(s) : undefined;\n }\n s.type = type;\n return registerScale(s);\n };\n ctr.metadata = toSet(array(metadata));\n return ctr;\n}\n\n/**\n * Registry function for adding and accessing scale constructor functions.\n * The *type* argument is a String indicating the name of the scale type.\n *\n * If the *scale* argument is not specified, this method returns the matching scale constructor in the registry, or `null` if not found.\n * If the *scale* argument is provided, it must be a scale constructor function to add to the registry under the given *type* name.\n * The *metadata* argument provides additional information to guide appropriate use of scales within Vega.\n *\n * *metadata* can be either a string or string array. The valid string values are:\n * - `\"continuous\"` - the scale is defined over a continuous-valued domain.\n * - `\"discrete\"` - the scale is defined over a discrete domain and range.\n * - `\"discretizing\"` - the scale discretizes a continuous domain to a discrete range.\n * - `\"interpolating\"` - the scale range is defined using a color interpolator.\n * - `\"log\"` - the scale performs a logarithmic transform of the continuous domain.\n * - `\"temporal\"` - the scale domain is defined over date-time values.\n */\nfunction scale(type, scale, metadata) {\n if (arguments.length > 1) {\n scales.set(type, create(type, scale, metadata));\n return this;\n } else {\n return isValidScaleType(type) ? scales.get(type) : undefined;\n }\n}\n\n// identity scale\nscale(Identity, $.scaleIdentity);\n\n// continuous scales\nscale(Linear, $.scaleLinear, Continuous);\nscale(Log, $.scaleLog, [Continuous, Log]);\nscale(Pow, $.scalePow, Continuous);\nscale(Sqrt, $.scaleSqrt, Continuous);\nscale(Symlog, $.scaleSymlog, Continuous);\nscale(Time, $.scaleTime, [Continuous, Temporal]);\nscale(UTC, $.scaleUtc, [Continuous, Temporal]);\n\n// sequential scales\nscale(Sequential, $.scaleSequential, [Continuous, Interpolating]); // backwards compat\nscale(`${Sequential}-${Linear}`, $.scaleSequential, [Continuous, Interpolating]);\nscale(`${Sequential}-${Log}`, $.scaleSequentialLog, [Continuous, Interpolating, Log]);\nscale(`${Sequential}-${Pow}`, $.scaleSequentialPow, [Continuous, Interpolating]);\nscale(`${Sequential}-${Sqrt}`, $.scaleSequentialSqrt, [Continuous, Interpolating]);\nscale(`${Sequential}-${Symlog}`, $.scaleSequentialSymlog, [Continuous, Interpolating]);\n\n// diverging scales\nscale(`${Diverging}-${Linear}`, $.scaleDiverging, [Continuous, Interpolating]);\nscale(`${Diverging}-${Log}`, $.scaleDivergingLog, [Continuous, Interpolating, Log]);\nscale(`${Diverging}-${Pow}`, $.scaleDivergingPow, [Continuous, Interpolating]);\nscale(`${Diverging}-${Sqrt}`, $.scaleDivergingSqrt, [Continuous, Interpolating]);\nscale(`${Diverging}-${Symlog}`, $.scaleDivergingSymlog, [Continuous, Interpolating]);\n\n// discretizing scales\nscale(Quantile, $.scaleQuantile, [Discretizing, Quantile]);\nscale(Quantize, $.scaleQuantize, Discretizing);\nscale(Threshold, $.scaleThreshold, Discretizing);\n\n// discrete scales\nscale(BinOrdinal, scaleBinOrdinal, [Discrete, Discretizing]);\nscale(Ordinal, $.scaleOrdinal, Discrete);\nscale(Band, band, Discrete);\nscale(Point, point, Discrete);\nfunction isValidScaleType(type) {\n return scales.has(type);\n}\nfunction hasType(key, type) {\n const s = scales.get(key);\n return s && s.metadata[type];\n}\nfunction isContinuous(key) {\n return hasType(key, Continuous);\n}\nfunction isDiscrete(key) {\n return hasType(key, Discrete);\n}\nfunction isDiscretizing(key) {\n return hasType(key, Discretizing);\n}\nfunction isLogarithmic(key) {\n return hasType(key, Log);\n}\nfunction isTemporal(key) {\n return hasType(key, Temporal);\n}\nfunction isInterpolating(key) {\n return hasType(key, Interpolating);\n}\nfunction isQuantile(key) {\n return hasType(key, Quantile);\n}\n\nconst scaleProps = ['clamp', 'base', 'constant', 'exponent'];\nfunction interpolateRange(interpolator, range) {\n const start = range[0],\n span = peek(range) - start;\n return function (i) {\n return interpolator(start + i * span);\n };\n}\nfunction interpolateColors(colors, type, gamma) {\n return $$1.piecewise(interpolate(type || 'rgb', gamma), colors);\n}\nfunction quantizeInterpolator(interpolator, count) {\n const samples = new Array(count),\n n = count + 1;\n for (let i = 0; i < count;) samples[i] = interpolator(++i / n);\n return samples;\n}\nfunction scaleCopy(scale) {\n const t = scale.type,\n s = scale.copy();\n s.type = t;\n return s;\n}\nfunction scaleFraction(scale$1, min, max) {\n const delta = max - min;\n let i, t, s;\n if (!delta || !Number.isFinite(delta)) {\n return constant(0.5);\n } else {\n i = (t = scale$1.type).indexOf('-');\n t = i < 0 ? t : t.slice(i + 1);\n s = scale(t)().domain([min, max]).range([0, 1]);\n scaleProps.forEach(m => scale$1[m] ? s[m](scale$1[m]()) : 0);\n return s;\n }\n}\nfunction interpolate(type, gamma) {\n const interp = $$1[method(type)];\n return gamma != null && interp && interp.gamma ? interp.gamma(gamma) : interp;\n}\nfunction method(type) {\n return 'interpolate' + type.toLowerCase().split('-').map(s => s[0].toUpperCase() + s.slice(1)).join('');\n}\n\nconst continuous = {\n blues: 'cfe1f2bed8eca8cee58fc1de74b2d75ba3cf4592c63181bd206fb2125ca40a4a90',\n greens: 'd3eecdc0e6baabdda594d3917bc77d60ba6c46ab5e329a512089430e7735036429',\n greys: 'e2e2e2d4d4d4c4c4c4b1b1b19d9d9d8888887575756262624d4d4d3535351e1e1e',\n oranges: 'fdd8b3fdc998fdb87bfda55efc9244f87f2cf06b18e4580bd14904b93d029f3303',\n purples: 'e2e1efd4d4e8c4c5e0b4b3d6a3a0cc928ec3827cb97566ae684ea25c3696501f8c',\n reds: 'fdc9b4fcb49afc9e80fc8767fa7051f6573fec3f2fdc2a25c81b1db21218970b13',\n blueGreen: 'd5efedc1e8e0a7ddd18bd2be70c6a958ba9144ad77319c5d2089460e7736036429',\n bluePurple: 'ccddecbad0e4a8c2dd9ab0d4919cc98d85be8b6db28a55a6873c99822287730f71',\n greenBlue: 'd3eecec5e8c3b1e1bb9bd8bb82cec269c2ca51b2cd3c9fc7288abd1675b10b60a1',\n orangeRed: 'fddcaffdcf9bfdc18afdad77fb9562f67d53ee6545e24932d32d1ebf130da70403',\n purpleBlue: 'dbdaebc8cee4b1c3de97b7d87bacd15b9fc93a90c01e7fb70b70ab056199045281',\n purpleBlueGreen: 'dbd8eac8cee4b0c3de93b7d872acd1549fc83892bb1c88a3097f8702736b016353',\n purpleRed: 'dcc9e2d3b3d7ce9eccd186c0da6bb2e14da0e23189d91e6fc61159ab07498f023a',\n redPurple: 'fccfccfcbec0faa9b8f98faff571a5ec539ddb3695c41b8aa908808d0179700174',\n yellowGreen: 'e4f4acd1eca0b9e2949ed68880c97c62bb6e47aa5e3297502083440e723b036034',\n yellowOrangeBrown: 'feeaa1fedd84fecc63feb746fca031f68921eb7215db5e0bc54c05ab3d038f3204',\n yellowOrangeRed: 'fee087fed16ffebd59fea849fd903efc7335f9522bee3423de1b20ca0b22af0225',\n blueOrange: '134b852f78b35da2cb9dcae1d2e5eff2f0ebfce0bafbbf74e8932fc5690d994a07',\n brownBlueGreen: '704108a0651ac79548e3c78af3e6c6eef1eac9e9e48ed1c74da79e187a72025147',\n purpleGreen: '5b1667834792a67fb6c9aed3e6d6e8eff0efd9efd5aedda971bb75368e490e5e29',\n purpleOrange: '4114696647968f83b7b9b4d6dadbebf3eeeafce0bafbbf74e8932fc5690d994a07',\n redBlue: '8c0d25bf363adf745ef4ae91fbdbc9f2efeed2e5ef9dcae15da2cb2f78b3134b85',\n redGrey: '8c0d25bf363adf745ef4ae91fcdccbfaf4f1e2e2e2c0c0c0969696646464343434',\n yellowGreenBlue: 'eff9bddbf1b4bde5b594d5b969c5be45b4c22c9ec02182b82163aa23479c1c3185',\n redYellowBlue: 'a50026d4322cf16e43fcac64fedd90faf8c1dcf1ecabd6e875abd04a74b4313695',\n redYellowGreen: 'a50026d4322cf16e43fcac63fedd8df9f7aed7ee8ea4d86e64bc6122964f006837',\n pinkYellowGreen: '8e0152c0267edd72adf0b3d6faddedf5f3efe1f2cab6de8780bb474f9125276419',\n spectral: '9e0142d13c4bf0704afcac63fedd8dfbf8b0e0f3a1a9dda269bda94288b55e4fa2',\n viridis: '440154470e61481a6c482575472f7d443a834144873d4e8a39568c35608d31688e2d708e2a788e27818e23888e21918d1f988b1fa08822a8842ab07f35b77943bf7154c56866cc5d7ad1518fd744a5db36bcdf27d2e21be9e51afde725',\n magma: '0000040404130b0924150e3720114b2c11603b0f704a107957157e651a80721f817f24828c29819a2e80a8327db6377ac43c75d1426fde4968e95462f1605df76f5cfa7f5efc8f65fe9f6dfeaf78febf84fece91fddea0fcedaffcfdbf',\n inferno: '0000040403130c0826170c3b240c4f330a5f420a68500d6c5d126e6b176e781c6d86216b932667a12b62ae305cbb3755c73e4cd24644dd513ae65c30ed6925f3771af8850ffb9506fca50afcb519fac62df6d645f2e661f3f484fcffa4',\n plasma: '0d088723069033059742039d5002a25d01a66a00a87801a88405a7900da49c179ea72198b12a90ba3488c33d80cb4779d35171da5a69e16462e76e5bed7953f2834cf68f44fa9a3dfca636fdb32ffec029fcce25f9dc24f5ea27f0f921',\n cividis: '00205100235800265d002961012b65042e670831690d346b11366c16396d1c3c6e213f6e26426e2c456e31476e374a6e3c4d6e42506e47536d4c566d51586e555b6e5a5e6e5e616e62646f66676f6a6a706e6d717270717573727976737c79747f7c75827f758682768985778c8877908b78938e789691789a94789e9778a19b78a59e77a9a177aea575b2a874b6ab73bbaf71c0b26fc5b66dc9b96acebd68d3c065d8c462ddc85fe2cb5ce7cf58ebd355f0d652f3da4ff7de4cfae249fce647',\n rainbow: '6e40aa883eb1a43db3bf3cafd83fa4ee4395fe4b83ff576eff6659ff7847ff8c38f3a130e2b72fcfcc36bee044aff05b8ff4576ff65b52f6673af27828ea8d1ddfa319d0b81cbecb23abd82f96e03d82e14c6edb5a5dd0664dbf6e40aa',\n sinebow: 'ff4040fc582af47218e78d0bd5a703bfbf00a7d5038de70b72f41858fc2a40ff402afc5818f4720be78d03d5a700bfbf03a7d50b8de71872f42a58fc4040ff582afc7218f48d0be7a703d5bf00bfd503a7e70b8df41872fc2a58ff4040',\n turbo: '23171b32204a3e2a71453493493eae4b49c54a53d7485ee44569ee4074f53c7ff8378af93295f72e9ff42ba9ef28b3e926bce125c5d925cdcf27d5c629dcbc2de3b232e9a738ee9d3ff39347f68950f9805afc7765fd6e70fe667cfd5e88fc5795fb51a1f84badf545b9f140c5ec3cd0e637dae034e4d931ecd12ef4c92bfac029ffb626ffad24ffa223ff9821ff8d1fff821dff771cfd6c1af76118f05616e84b14df4111d5380fcb2f0dc0260ab61f07ac1805a313029b0f00950c00910b00',\n browns: 'eedbbdecca96e9b97ae4a865dc9856d18954c7784cc0673fb85536ad44339f3632',\n tealBlues: 'bce4d89dd3d181c3cb65b3c245a2b9368fae347da0306a932c5985',\n teals: 'bbdfdfa2d4d58ac9c975bcbb61b0af4da5a43799982b8b8c1e7f7f127273006667',\n warmGreys: 'dcd4d0cec5c1c0b8b4b3aaa7a59c9998908c8b827f7e7673726866665c5a59504e',\n goldGreen: 'f4d166d5ca60b6c35c98bb597cb25760a6564b9c533f8f4f33834a257740146c36',\n goldOrange: 'f4d166f8be5cf8aa4cf5983bf3852aef701be2621fd65322c54923b142239e3a26',\n goldRed: 'f4d166f6be59f9aa51fc964ef6834bee734ae56249db5247cf4244c43141b71d3e',\n lightGreyRed: 'efe9e6e1dad7d5cbc8c8bdb9bbaea9cd967ddc7b43e15f19df4011dc000b',\n lightGreyTeal: 'e4eaead6dcddc8ced2b7c2c7a6b4bc64b0bf22a6c32295c11f85be1876bc',\n lightMulti: 'e0f1f2c4e9d0b0de9fd0e181f6e072f6c053f3993ef77440ef4a3c',\n lightOrange: 'f2e7daf7d5baf9c499fab184fa9c73f68967ef7860e8645bde515bd43d5b',\n lightTealBlue: 'e3e9e0c0dccf9aceca7abfc859afc0389fb9328dad2f7ca0276b95255988',\n darkBlue: '3232322d46681a5c930074af008cbf05a7ce25c0dd38daed50f3faffffff',\n darkGold: '3c3c3c584b37725e348c7631ae8b2bcfa424ecc31ef9de30fff184ffffff',\n darkGreen: '3a3a3a215748006f4d048942489e4276b340a6c63dd2d836ffeb2cffffaa',\n darkMulti: '3737371f5287197d8c29a86995ce3fffe800ffffff',\n darkRed: '3434347036339e3c38cc4037e75d1eec8620eeab29f0ce32ffeb2c'\n};\nconst discrete = {\n accent: schemeAccent,\n category10: schemeCategory10,\n category20: '1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5',\n category20b: '393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6',\n category20c: '3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9',\n dark2: schemeDark2,\n observable10: schemeObservable10,\n paired: schemePaired,\n pastel1: schemePastel1,\n pastel2: schemePastel2,\n set1: schemeSet1,\n set2: schemeSet2,\n set3: schemeSet3,\n tableau10: '4c78a8f58518e4575672b7b254a24beeca3bb279a2ff9da69d755dbab0ac',\n tableau20: '4c78a89ecae9f58518ffbf7954a24b88d27ab79a20f2cf5b43989483bcb6e45756ff9d9879706ebab0acd67195fcbfd2b279a2d6a5c99e765fd8b5a5'\n};\n\nfunction colors(palette) {\n if (isArray(palette)) return palette;\n const n = palette.length / 6 | 0,\n c = new Array(n);\n for (let i = 0; i < n;) {\n c[i] = '#' + palette.slice(i * 6, ++i * 6);\n }\n return c;\n}\nfunction apply(_, f) {\n for (const k in _) scheme(k, f(_[k]));\n}\nconst schemes = {};\napply(discrete, colors);\napply(continuous, _ => interpolateColors(colors(_)));\nfunction scheme(name, scheme) {\n name = name && name.toLowerCase();\n if (arguments.length > 1) {\n schemes[name] = scheme;\n return this;\n } else {\n return schemes[name];\n }\n}\n\nconst SymbolLegend = 'symbol';\nconst DiscreteLegend = 'discrete';\nconst GradientLegend = 'gradient';\n\nconst defaultFormatter = value => isArray(value) ? value.map(v => String(v)) : String(value);\nconst ascending = (a, b) => a[1] - b[1];\nconst descending = (a, b) => b[1] - a[1];\n\n/**\n * Determine the tick count or interval function.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {*} count - The desired tick count or interval specifier.\n * @param {number} minStep - The desired minimum step between tick values.\n * @return {*} - The tick count or interval function.\n */\nfunction tickCount(scale, count, minStep) {\n let step;\n if (isNumber(count)) {\n if (scale.bins) {\n count = Math.max(count, scale.bins.length);\n }\n if (minStep != null) {\n count = Math.min(count, Math.floor(span(scale.domain()) / minStep || 1) + 1);\n }\n }\n if (isObject(count)) {\n step = count.step;\n count = count.interval;\n }\n if (isString(count)) {\n count = scale.type === Time ? timeInterval(count) : scale.type == UTC ? utcInterval(count) : error('Only time and utc scales accept interval strings.');\n if (step) count = count.every(step);\n }\n return count;\n}\n\n/**\n * Filter a set of candidate tick values, ensuring that only tick values\n * that lie within the scale range are included.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {Array<*>} ticks - The candidate tick values.\n * @param {*} count - The tick count or interval function.\n * @return {Array<*>} - The filtered tick values.\n */\nfunction validTicks(scale, ticks, count) {\n let range = scale.range(),\n lo = range[0],\n hi = peek(range),\n cmp = ascending;\n if (lo > hi) {\n range = hi;\n hi = lo;\n lo = range;\n cmp = descending;\n }\n lo = Math.floor(lo);\n hi = Math.ceil(hi);\n\n // filter ticks to valid values within the range\n // additionally sort ticks in range order (#2579)\n ticks = ticks.map(v => [v, scale(v)]).filter(_ => lo <= _[1] && _[1] <= hi).sort(cmp).map(_ => _[0]);\n if (count > 0 && ticks.length > 1) {\n const endpoints = [ticks[0], peek(ticks)];\n while (ticks.length > count && ticks.length >= 3) {\n ticks = ticks.filter((_, i) => !(i % 2));\n }\n if (ticks.length < 3) {\n ticks = endpoints;\n }\n }\n return ticks;\n}\n\n/**\n * Generate tick values for the given scale and approximate tick count or\n * interval value. If the scale has a 'ticks' method, it will be used to\n * generate the ticks, with the count argument passed as a parameter. If the\n * scale lacks a 'ticks' method, the full scale domain will be returned.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {*} [count] - The approximate number of desired ticks.\n * @return {Array<*>} - The generated tick values.\n */\nfunction tickValues(scale, count) {\n return scale.bins ? validTicks(scale, scale.bins, count) : scale.ticks ? scale.ticks(count) : scale.domain();\n}\n\n/**\n * Generate a label format function for a scale. If the scale has a\n * 'tickFormat' method, it will be used to generate the formatter, with the\n * count and specifier arguments passed as parameters. If the scale lacks a\n * 'tickFormat' method, the returned formatter performs simple string coercion.\n * If the input scale is a logarithmic scale and the format specifier does not\n * indicate a desired decimal precision, a special variable precision formatter\n * that automatically trims trailing zeroes will be generated.\n * @param {Scale} scale - The scale for which to generate the label formatter.\n * @param {*} [count] - The approximate number of desired ticks.\n * @param {string} [specifier] - The format specifier. Must be a legal d3\n * specifier string (see https://github.com/d3/d3-format#formatSpecifier) or\n * time multi-format specifier object.\n * @return {function(*):string} - The generated label formatter.\n */\nfunction tickFormat(locale, scale, count, specifier, formatType, noSkip) {\n const type = scale.type;\n let format = defaultFormatter;\n if (type === Time || formatType === Time) {\n format = locale.timeFormat(specifier);\n } else if (type === UTC || formatType === UTC) {\n format = locale.utcFormat(specifier);\n } else if (isLogarithmic(type)) {\n const varfmt = locale.formatFloat(specifier);\n if (noSkip || scale.bins) {\n format = varfmt;\n } else {\n const test = tickLog(scale, count, false);\n format = _ => test(_) ? varfmt(_) : '';\n }\n } else if (scale.tickFormat) {\n // if d3 scale has tickFormat, it must be continuous\n const d = scale.domain();\n format = locale.formatSpan(d[0], d[d.length - 1], count, specifier);\n } else if (specifier) {\n format = locale.format(specifier);\n }\n return format;\n}\nfunction tickLog(scale, count, values) {\n const ticks = tickValues(scale, count),\n base = scale.base(),\n logb = Math.log(base),\n k = Math.max(1, base * count / ticks.length);\n\n // apply d3-scale's log format filter criteria\n const test = d => {\n let i = d / Math.pow(base, Math.round(Math.log(d) / logb));\n if (i * base < base - 0.5) i *= base;\n return i <= k;\n };\n return values ? ticks.filter(test) : test;\n}\n\nconst symbols = {\n [Quantile]: 'quantiles',\n [Quantize]: 'thresholds',\n [Threshold]: 'domain'\n};\nconst formats = {\n [Quantile]: 'quantiles',\n [Quantize]: 'domain'\n};\nfunction labelValues(scale, count) {\n return scale.bins ? binValues(scale.bins) : scale.type === Log ? tickLog(scale, count, true) : symbols[scale.type] ? thresholdValues(scale[symbols[scale.type]]()) : tickValues(scale, count);\n}\nfunction thresholdFormat(locale, scale, specifier) {\n const _ = scale[formats[scale.type]](),\n n = _.length;\n let d = n > 1 ? _[1] - _[0] : _[0],\n i;\n for (i = 1; i < n; ++i) {\n d = Math.min(d, _[i] - _[i - 1]);\n }\n\n // tickCount = 3 ticks times 10 for increased resolution\n return locale.formatSpan(0, d, 3 * 10, specifier);\n}\nfunction thresholdValues(thresholds) {\n const values = [-Infinity].concat(thresholds);\n values.max = +Infinity;\n return values;\n}\nfunction binValues(bins) {\n const values = bins.slice(0, -1);\n values.max = peek(bins);\n return values;\n}\nconst isDiscreteRange = scale => symbols[scale.type] || scale.bins;\nfunction labelFormat(locale, scale, count, type, specifier, formatType, noSkip) {\n const format = formats[scale.type] && formatType !== Time && formatType !== UTC ? thresholdFormat(locale, scale, specifier) : tickFormat(locale, scale, count, specifier, formatType, noSkip);\n return type === SymbolLegend && isDiscreteRange(scale) ? formatRange(format) : type === DiscreteLegend ? formatDiscrete(format) : formatPoint(format);\n}\nconst formatRange = format => (value, index, array) => {\n const limit = get(array[index + 1], get(array.max, +Infinity)),\n lo = formatValue(value, format),\n hi = formatValue(limit, format);\n return lo && hi ? lo + ' \\u2013 ' + hi : hi ? '< ' + hi : '\\u2265 ' + lo;\n};\nconst get = (value, dflt) => value != null ? value : dflt;\nconst formatDiscrete = format => (value, index) => index ? format(value) : null;\nconst formatPoint = format => value => format(value);\nconst formatValue = (value, format) => Number.isFinite(value) ? format(value) : null;\nfunction labelFraction(scale) {\n const domain = scale.domain(),\n count = domain.length - 1;\n let lo = +domain[0],\n hi = +peek(domain),\n span = hi - lo;\n if (scale.type === Threshold) {\n const adjust = count ? span / count : 0.1;\n lo -= adjust;\n hi += adjust;\n span = hi - lo;\n }\n return value => (value - lo) / span;\n}\n\nfunction format(locale, scale, specifier, formatType) {\n const type = formatType || scale.type;\n\n // replace abbreviated time specifiers to improve screen reader experience\n if (isString(specifier) && isTemporal(type)) {\n specifier = specifier.replace(/%a/g, '%A').replace(/%b/g, '%B');\n }\n return !specifier && type === Time ? locale.timeFormat('%A, %d %B %Y, %X') : !specifier && type === UTC ? locale.utcFormat('%A, %d %B %Y, %X UTC') : labelFormat(locale, scale, 5, null, specifier, formatType, true);\n}\nfunction domainCaption(locale, scale, opt) {\n opt = opt || {};\n const max = Math.max(3, opt.maxlen || 7),\n fmt = format(locale, scale, opt.format, opt.formatType);\n\n // if scale breaks domain into bins, describe boundaries\n if (isDiscretizing(scale.type)) {\n const v = labelValues(scale).slice(1).map(fmt),\n n = v.length;\n return `${n} boundar${n === 1 ? 'y' : 'ies'}: ${v.join(', ')}`;\n }\n\n // if scale domain is discrete, list values\n else if (isDiscrete(scale.type)) {\n const d = scale.domain(),\n n = d.length,\n v = n > max ? d.slice(0, max - 2).map(fmt).join(', ') + ', ending with ' + d.slice(-1).map(fmt) : d.map(fmt).join(', ');\n return `${n} value${n === 1 ? '' : 's'}: ${v}`;\n }\n\n // if scale domain is continuous, describe value range\n else {\n const d = scale.domain();\n return `values from ${fmt(d[0])} to ${fmt(peek(d))}`;\n }\n}\n\nexport { Band, BinOrdinal, DiscreteLegend, Diverging, GradientLegend, Identity, Linear, Log, Ordinal, Point, Pow, Quantile, Quantize, Sequential, Sqrt, SymbolLegend, Symlog, Threshold, Time, UTC, bandSpace, domainCaption, interpolate, interpolateColors, interpolateRange, isContinuous, isDiscrete, isDiscretizing, isInterpolating, isLogarithmic, isQuantile, isRegisteredScale, isTemporal, isValidScaleType, labelFormat, labelFraction, labelValues, quantizeInterpolator, registerScale, scale, scaleCopy, scaleFraction, scheme, tickCount, tickFormat, tickValues, validTicks };\n", "import { hasOwnProperty, isFunction, inherits, truthy, lruCache, isArray, error, toSet, array, peek, extend, isNumber, isObject } from 'vega-util';\nimport { curveBasis, curveBasisClosed, curveBasisOpen, curveBundle, curveCardinal, curveCardinalOpen, curveCardinalClosed, curveCatmullRom, curveCatmullRomClosed, curveCatmullRomOpen, curveLinear, curveLinearClosed, curveMonotoneY, curveMonotoneX, curveNatural, curveStep, curveStepAfter, curveStepBefore, arc as arc$2, area as area$2, line as line$2, symbol as symbol$2 } from 'd3-shape';\nimport { path as path$3 } from 'd3-path';\nexport { path } from 'd3-path';\nimport { image as image$1, canvas } from 'vega-canvas';\nimport { loader } from 'vega-loader';\nimport { isDiscrete, domainCaption } from 'vega-scale';\n\nlet gradient_id = 0;\nfunction resetSVGGradientId() {\n gradient_id = 0;\n}\nconst patternPrefix = 'p_';\nfunction isGradient(value) {\n return value && value.gradient;\n}\nfunction gradientRef(g, defs, base) {\n const type = g.gradient;\n let id = g.id,\n prefix = type === 'radial' ? patternPrefix : '';\n\n // check id, assign default values as needed\n if (!id) {\n id = g.id = 'gradient_' + gradient_id++;\n if (type === 'radial') {\n g.x1 = get(g.x1, 0.5);\n g.y1 = get(g.y1, 0.5);\n g.r1 = get(g.r1, 0);\n g.x2 = get(g.x2, 0.5);\n g.y2 = get(g.y2, 0.5);\n g.r2 = get(g.r2, 0.5);\n prefix = patternPrefix;\n } else {\n g.x1 = get(g.x1, 0);\n g.y1 = get(g.y1, 0);\n g.x2 = get(g.x2, 1);\n g.y2 = get(g.y2, 0);\n }\n }\n\n // register definition\n defs[id] = g;\n\n // return url reference\n return 'url(' + (base || '') + '#' + prefix + id + ')';\n}\nfunction get(val, def) {\n return val != null ? val : def;\n}\nfunction Gradient (p0, p1) {\n var stops = [],\n gradient;\n return gradient = {\n gradient: 'linear',\n x1: p0 ? p0[0] : 0,\n y1: p0 ? p0[1] : 0,\n x2: p1 ? p1[0] : 1,\n y2: p1 ? p1[1] : 0,\n stops: stops,\n stop: function (offset, color) {\n stops.push({\n offset: offset,\n color: color\n });\n return gradient;\n }\n };\n}\n\nconst lookup = {\n 'basis': {\n curve: curveBasis\n },\n 'basis-closed': {\n curve: curveBasisClosed\n },\n 'basis-open': {\n curve: curveBasisOpen\n },\n 'bundle': {\n curve: curveBundle,\n tension: 'beta',\n value: 0.85\n },\n 'cardinal': {\n curve: curveCardinal,\n tension: 'tension',\n value: 0\n },\n 'cardinal-open': {\n curve: curveCardinalOpen,\n tension: 'tension',\n value: 0\n },\n 'cardinal-closed': {\n curve: curveCardinalClosed,\n tension: 'tension',\n value: 0\n },\n 'catmull-rom': {\n curve: curveCatmullRom,\n tension: 'alpha',\n value: 0.5\n },\n 'catmull-rom-closed': {\n curve: curveCatmullRomClosed,\n tension: 'alpha',\n value: 0.5\n },\n 'catmull-rom-open': {\n curve: curveCatmullRomOpen,\n tension: 'alpha',\n value: 0.5\n },\n 'linear': {\n curve: curveLinear\n },\n 'linear-closed': {\n curve: curveLinearClosed\n },\n 'monotone': {\n horizontal: curveMonotoneY,\n vertical: curveMonotoneX\n },\n 'natural': {\n curve: curveNatural\n },\n 'step': {\n curve: curveStep\n },\n 'step-after': {\n curve: curveStepAfter\n },\n 'step-before': {\n curve: curveStepBefore\n }\n};\nfunction curves(type, orientation, tension) {\n var entry = hasOwnProperty(lookup, type) && lookup[type],\n curve = null;\n if (entry) {\n curve = entry.curve || entry[orientation || 'vertical'];\n if (entry.tension && tension != null) {\n curve = curve[entry.tension](tension);\n }\n }\n return curve;\n}\n\nconst paramCounts = {\n m: 2,\n l: 2,\n h: 1,\n v: 1,\n z: 0,\n c: 6,\n s: 4,\n q: 4,\n t: 2,\n a: 7\n};\nconst commandPattern = /[mlhvzcsqta]([^mlhvzcsqta]+|$)/gi;\nconst numberPattern = /^[+-]?(([0-9]*\\.[0-9]+)|([0-9]+\\.)|([0-9]+))([eE][+-]?[0-9]+)?/;\nconst spacePattern = /^((\\s+,?\\s*)|(,\\s*))/;\nconst flagPattern = /^[01]/;\nfunction parse(path) {\n const commands = [];\n const matches = path.match(commandPattern) || [];\n matches.forEach(str => {\n let cmd = str[0];\n const type = cmd.toLowerCase();\n\n // parse parameters\n const paramCount = paramCounts[type];\n const params = parseParams(type, paramCount, str.slice(1).trim());\n const count = params.length;\n\n // error checking based on parameter count\n if (count < paramCount || count && count % paramCount !== 0) {\n throw Error('Invalid SVG path, incorrect parameter count');\n }\n\n // register the command\n commands.push([cmd, ...params.slice(0, paramCount)]);\n\n // exit now if we're done, also handles zero-param 'z'\n if (count === paramCount) {\n return;\n }\n\n // handle implicit line-to\n if (type === 'm') {\n cmd = cmd === 'M' ? 'L' : 'l';\n }\n\n // repeat command when given extended param list\n for (let i = paramCount; i < count; i += paramCount) {\n commands.push([cmd, ...params.slice(i, i + paramCount)]);\n }\n });\n return commands;\n}\nfunction parseParams(type, paramCount, segment) {\n const params = [];\n for (let index = 0; paramCount && index < segment.length;) {\n for (let i = 0; i < paramCount; ++i) {\n const pattern = type === 'a' && (i === 3 || i === 4) ? flagPattern : numberPattern;\n const match = segment.slice(index).match(pattern);\n if (match === null) {\n throw Error('Invalid SVG path, incorrect parameter type');\n }\n index += match[0].length;\n params.push(+match[0]);\n const ws = segment.slice(index).match(spacePattern);\n if (ws !== null) {\n index += ws[0].length;\n }\n }\n }\n return params;\n}\n\nconst DegToRad = Math.PI / 180;\nconst Epsilon = 1e-14;\nconst HalfPi = Math.PI / 2;\nconst Tau = Math.PI * 2;\nconst HalfSqrt3 = Math.sqrt(3) / 2;\n\nvar segmentCache = {};\nvar bezierCache = {};\nvar join = [].join;\n\n// Copied from Inkscape svgtopdf, thanks!\nfunction segments(x, y, rx, ry, large, sweep, rotateX, ox, oy) {\n const key = join.call(arguments);\n if (segmentCache[key]) {\n return segmentCache[key];\n }\n const th = rotateX * DegToRad;\n const sin_th = Math.sin(th);\n const cos_th = Math.cos(th);\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n const px = cos_th * (ox - x) * 0.5 + sin_th * (oy - y) * 0.5;\n const py = cos_th * (oy - y) * 0.5 - sin_th * (ox - x) * 0.5;\n let pl = px * px / (rx * rx) + py * py / (ry * ry);\n if (pl > 1) {\n pl = Math.sqrt(pl);\n rx *= pl;\n ry *= pl;\n }\n const a00 = cos_th / rx;\n const a01 = sin_th / rx;\n const a10 = -sin_th / ry;\n const a11 = cos_th / ry;\n const x0 = a00 * ox + a01 * oy;\n const y0 = a10 * ox + a11 * oy;\n const x1 = a00 * x + a01 * y;\n const y1 = a10 * x + a11 * y;\n const d = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0);\n let sfactor_sq = 1 / d - 0.25;\n if (sfactor_sq < 0) sfactor_sq = 0;\n let sfactor = Math.sqrt(sfactor_sq);\n if (sweep == large) sfactor = -sfactor;\n const xc = 0.5 * (x0 + x1) - sfactor * (y1 - y0);\n const yc = 0.5 * (y0 + y1) + sfactor * (x1 - x0);\n const th0 = Math.atan2(y0 - yc, x0 - xc);\n const th1 = Math.atan2(y1 - yc, x1 - xc);\n let th_arc = th1 - th0;\n if (th_arc < 0 && sweep === 1) {\n th_arc += Tau;\n } else if (th_arc > 0 && sweep === 0) {\n th_arc -= Tau;\n }\n const segs = Math.ceil(Math.abs(th_arc / (HalfPi + 0.001)));\n const result = [];\n for (let i = 0; i < segs; ++i) {\n const th2 = th0 + i * th_arc / segs;\n const th3 = th0 + (i + 1) * th_arc / segs;\n result[i] = [xc, yc, th2, th3, rx, ry, sin_th, cos_th];\n }\n return segmentCache[key] = result;\n}\nfunction bezier(params) {\n const key = join.call(params);\n if (bezierCache[key]) {\n return bezierCache[key];\n }\n var cx = params[0],\n cy = params[1],\n th0 = params[2],\n th1 = params[3],\n rx = params[4],\n ry = params[5],\n sin_th = params[6],\n cos_th = params[7];\n const a00 = cos_th * rx;\n const a01 = -sin_th * ry;\n const a10 = sin_th * rx;\n const a11 = cos_th * ry;\n const cos_th0 = Math.cos(th0);\n const sin_th0 = Math.sin(th0);\n const cos_th1 = Math.cos(th1);\n const sin_th1 = Math.sin(th1);\n const th_half = 0.5 * (th1 - th0);\n const sin_th_h2 = Math.sin(th_half * 0.5);\n const t = 8 / 3 * sin_th_h2 * sin_th_h2 / Math.sin(th_half);\n const x1 = cx + cos_th0 - t * sin_th0;\n const y1 = cy + sin_th0 + t * cos_th0;\n const x3 = cx + cos_th1;\n const y3 = cy + sin_th1;\n const x2 = x3 + t * sin_th1;\n const y2 = y3 - t * cos_th1;\n return bezierCache[key] = [a00 * x1 + a01 * y1, a10 * x1 + a11 * y1, a00 * x2 + a01 * y2, a10 * x2 + a11 * y2, a00 * x3 + a01 * y3, a10 * x3 + a11 * y3];\n}\n\nconst temp = ['l', 0, 0, 0, 0, 0, 0, 0];\nfunction scale$1(current, sX, sY) {\n const c = temp[0] = current[0];\n if (c === 'a' || c === 'A') {\n temp[1] = sX * current[1];\n temp[2] = sY * current[2];\n temp[3] = current[3];\n temp[4] = current[4];\n temp[5] = current[5];\n temp[6] = sX * current[6];\n temp[7] = sY * current[7];\n } else if (c === 'h' || c === 'H') {\n temp[1] = sX * current[1];\n } else if (c === 'v' || c === 'V') {\n temp[1] = sY * current[1];\n } else {\n for (var i = 1, n = current.length; i < n; ++i) {\n temp[i] = (i % 2 == 1 ? sX : sY) * current[i];\n }\n }\n return temp;\n}\nfunction pathRender (context, path, l, t, sX, sY) {\n var current,\n // current instruction\n previous = null,\n x = 0,\n // current x\n y = 0,\n // current y\n controlX = 0,\n // current control point x\n controlY = 0,\n // current control point y\n tempX,\n tempY,\n tempControlX,\n tempControlY,\n anchorX = 0,\n anchorY = 0;\n if (l == null) l = 0;\n if (t == null) t = 0;\n if (sX == null) sX = 1;\n if (sY == null) sY = sX;\n if (context.beginPath) context.beginPath();\n for (var i = 0, len = path.length; i < len; ++i) {\n current = path[i];\n if (sX !== 1 || sY !== 1) {\n current = scale$1(current, sX, sY);\n }\n switch (current[0]) {\n // first letter\n\n case 'l':\n // lineto, relative\n x += current[1];\n y += current[2];\n context.lineTo(x + l, y + t);\n break;\n case 'L':\n // lineto, absolute\n x = current[1];\n y = current[2];\n context.lineTo(x + l, y + t);\n break;\n case 'h':\n // horizontal lineto, relative\n x += current[1];\n context.lineTo(x + l, y + t);\n break;\n case 'H':\n // horizontal lineto, absolute\n x = current[1];\n context.lineTo(x + l, y + t);\n break;\n case 'v':\n // vertical lineto, relative\n y += current[1];\n context.lineTo(x + l, y + t);\n break;\n case 'V':\n // verical lineto, absolute\n y = current[1];\n context.lineTo(x + l, y + t);\n break;\n case 'm':\n // moveTo, relative\n x += current[1];\n y += current[2];\n anchorX = x;\n anchorY = y;\n context.moveTo(x + l, y + t);\n break;\n case 'M':\n // moveTo, absolute\n x = current[1];\n y = current[2];\n anchorX = x;\n anchorY = y;\n context.moveTo(x + l, y + t);\n break;\n case 'c':\n // bezierCurveTo, relative\n tempX = x + current[5];\n tempY = y + current[6];\n controlX = x + current[3];\n controlY = y + current[4];\n context.bezierCurveTo(x + current[1] + l,\n // x1\n y + current[2] + t,\n // y1\n controlX + l,\n // x2\n controlY + t,\n // y2\n tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n break;\n case 'C':\n // bezierCurveTo, absolute\n x = current[5];\n y = current[6];\n controlX = current[3];\n controlY = current[4];\n context.bezierCurveTo(current[1] + l, current[2] + t, controlX + l, controlY + t, x + l, y + t);\n break;\n case 's':\n // shorthand cubic bezierCurveTo, relative\n // transform to absolute x,y\n tempX = x + current[3];\n tempY = y + current[4];\n // calculate reflection of previous control points\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n context.bezierCurveTo(controlX + l, controlY + t, x + current[1] + l, y + current[2] + t, tempX + l, tempY + t);\n\n // set control point to 2nd one of this command\n // the first control point is assumed to be the reflection of\n // the second control point on the previous command relative\n // to the current point.\n controlX = x + current[1];\n controlY = y + current[2];\n x = tempX;\n y = tempY;\n break;\n case 'S':\n // shorthand cubic bezierCurveTo, absolute\n tempX = current[3];\n tempY = current[4];\n // calculate reflection of previous control points\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n context.bezierCurveTo(controlX + l, controlY + t, current[1] + l, current[2] + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n // set control point to 2nd one of this command\n // the first control point is assumed to be the reflection of\n // the second control point on the previous command relative\n // to the current point.\n controlX = current[1];\n controlY = current[2];\n break;\n case 'q':\n // quadraticCurveTo, relative\n // transform to absolute x,y\n tempX = x + current[3];\n tempY = y + current[4];\n controlX = x + current[1];\n controlY = y + current[2];\n context.quadraticCurveTo(controlX + l, controlY + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n break;\n case 'Q':\n // quadraticCurveTo, absolute\n tempX = current[3];\n tempY = current[4];\n context.quadraticCurveTo(current[1] + l, current[2] + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n controlX = current[1];\n controlY = current[2];\n break;\n case 't':\n // shorthand quadraticCurveTo, relative\n\n // transform to absolute x,y\n tempX = x + current[1];\n tempY = y + current[2];\n if (previous[0].match(/[QqTt]/) === null) {\n // If there is no previous command or if the previous command was not a Q, q, T or t,\n // assume the control point is coincident with the current point\n controlX = x;\n controlY = y;\n } else if (previous[0] === 't') {\n // calculate reflection of previous control points for t\n controlX = 2 * x - tempControlX;\n controlY = 2 * y - tempControlY;\n } else if (previous[0] === 'q') {\n // calculate reflection of previous control points for q\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n }\n tempControlX = controlX;\n tempControlY = controlY;\n context.quadraticCurveTo(controlX + l, controlY + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n controlX = x + current[1];\n controlY = y + current[2];\n break;\n case 'T':\n tempX = current[1];\n tempY = current[2];\n\n // calculate reflection of previous control points\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n context.quadraticCurveTo(controlX + l, controlY + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n break;\n case 'a':\n drawArc(context, x + l, y + t, [current[1], current[2], current[3], current[4], current[5], current[6] + x + l, current[7] + y + t]);\n x += current[6];\n y += current[7];\n break;\n case 'A':\n drawArc(context, x + l, y + t, [current[1], current[2], current[3], current[4], current[5], current[6] + l, current[7] + t]);\n x = current[6];\n y = current[7];\n break;\n case 'z':\n case 'Z':\n x = anchorX;\n y = anchorY;\n context.closePath();\n break;\n }\n previous = current;\n }\n}\nfunction drawArc(context, x, y, coords) {\n const seg = segments(coords[5],\n // end x\n coords[6],\n // end y\n coords[0],\n // radius x\n coords[1],\n // radius y\n coords[3],\n // large flag\n coords[4],\n // sweep flag\n coords[2],\n // rotation\n x, y);\n for (let i = 0; i < seg.length; ++i) {\n const bez = bezier(seg[i]);\n context.bezierCurveTo(bez[0], bez[1], bez[2], bez[3], bez[4], bez[5]);\n }\n}\n\nconst Tan30 = 0.5773502691896257;\nconst builtins = {\n 'circle': {\n draw: function (context, size) {\n const r = Math.sqrt(size) / 2;\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, Tau);\n }\n },\n 'cross': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n s = r / 2.5;\n context.moveTo(-r, -s);\n context.lineTo(-r, s);\n context.lineTo(-s, s);\n context.lineTo(-s, r);\n context.lineTo(s, r);\n context.lineTo(s, s);\n context.lineTo(r, s);\n context.lineTo(r, -s);\n context.lineTo(s, -s);\n context.lineTo(s, -r);\n context.lineTo(-s, -r);\n context.lineTo(-s, -s);\n context.closePath();\n }\n },\n 'diamond': {\n draw: function (context, size) {\n const r = Math.sqrt(size) / 2;\n context.moveTo(-r, 0);\n context.lineTo(0, -r);\n context.lineTo(r, 0);\n context.lineTo(0, r);\n context.closePath();\n }\n },\n 'square': {\n draw: function (context, size) {\n var w = Math.sqrt(size),\n x = -w / 2;\n context.rect(x, x, w, w);\n }\n },\n 'arrow': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n s = r / 7,\n t = r / 2.5,\n v = r / 8;\n context.moveTo(-s, r);\n context.lineTo(s, r);\n context.lineTo(s, -v);\n context.lineTo(t, -v);\n context.lineTo(0, -r);\n context.lineTo(-t, -v);\n context.lineTo(-s, -v);\n context.closePath();\n }\n },\n 'wedge': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r,\n o = h - r * Tan30,\n b = r / 4;\n context.moveTo(0, -h - o);\n context.lineTo(-b, h - o);\n context.lineTo(b, h - o);\n context.closePath();\n }\n },\n 'triangle': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r,\n o = h - r * Tan30;\n context.moveTo(0, -h - o);\n context.lineTo(-r, h - o);\n context.lineTo(r, h - o);\n context.closePath();\n }\n },\n 'triangle-up': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r;\n context.moveTo(0, -h);\n context.lineTo(-r, h);\n context.lineTo(r, h);\n context.closePath();\n }\n },\n 'triangle-down': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r;\n context.moveTo(0, h);\n context.lineTo(-r, -h);\n context.lineTo(r, -h);\n context.closePath();\n }\n },\n 'triangle-right': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r;\n context.moveTo(h, 0);\n context.lineTo(-h, -r);\n context.lineTo(-h, r);\n context.closePath();\n }\n },\n 'triangle-left': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r;\n context.moveTo(-h, 0);\n context.lineTo(h, -r);\n context.lineTo(h, r);\n context.closePath();\n }\n },\n 'stroke': {\n draw: function (context, size) {\n const r = Math.sqrt(size) / 2;\n context.moveTo(-r, 0);\n context.lineTo(r, 0);\n }\n }\n};\nfunction symbols(_) {\n return hasOwnProperty(builtins, _) ? builtins[_] : customSymbol(_);\n}\nvar custom = {};\nfunction customSymbol(path) {\n if (!hasOwnProperty(custom, path)) {\n const parsed = parse(path);\n custom[path] = {\n draw: function (context, size) {\n pathRender(context, parsed, 0, 0, Math.sqrt(size) / 2);\n }\n };\n }\n return custom[path];\n}\n\n// See http://spencermortensen.com/articles/bezier-circle/\nconst C = 0.448084975506; // C = 1 - c\n\nfunction rectangleX(d) {\n return d.x;\n}\nfunction rectangleY(d) {\n return d.y;\n}\nfunction rectangleWidth(d) {\n return d.width;\n}\nfunction rectangleHeight(d) {\n return d.height;\n}\nfunction number(_) {\n return typeof _ === 'function' ? _ : () => +_;\n}\nfunction clamp(value, min, max) {\n return Math.max(min, Math.min(value, max));\n}\nfunction vg_rect () {\n var x = rectangleX,\n y = rectangleY,\n width = rectangleWidth,\n height = rectangleHeight,\n crTL = number(0),\n crTR = crTL,\n crBL = crTL,\n crBR = crTL,\n context = null;\n function rectangle(_, x0, y0) {\n var buffer,\n x1 = x0 != null ? x0 : +x.call(this, _),\n y1 = y0 != null ? y0 : +y.call(this, _),\n w = +width.call(this, _),\n h = +height.call(this, _),\n s = Math.min(w, h) / 2,\n tl = clamp(+crTL.call(this, _), 0, s),\n tr = clamp(+crTR.call(this, _), 0, s),\n bl = clamp(+crBL.call(this, _), 0, s),\n br = clamp(+crBR.call(this, _), 0, s);\n if (!context) context = buffer = path$3();\n if (tl <= 0 && tr <= 0 && bl <= 0 && br <= 0) {\n context.rect(x1, y1, w, h);\n } else {\n var x2 = x1 + w,\n y2 = y1 + h;\n context.moveTo(x1 + tl, y1);\n context.lineTo(x2 - tr, y1);\n context.bezierCurveTo(x2 - C * tr, y1, x2, y1 + C * tr, x2, y1 + tr);\n context.lineTo(x2, y2 - br);\n context.bezierCurveTo(x2, y2 - C * br, x2 - C * br, y2, x2 - br, y2);\n context.lineTo(x1 + bl, y2);\n context.bezierCurveTo(x1 + C * bl, y2, x1, y2 - C * bl, x1, y2 - bl);\n context.lineTo(x1, y1 + tl);\n context.bezierCurveTo(x1, y1 + C * tl, x1 + C * tl, y1, x1 + tl, y1);\n context.closePath();\n }\n if (buffer) {\n context = null;\n return buffer + '' || null;\n }\n }\n rectangle.x = function (_) {\n if (arguments.length) {\n x = number(_);\n return rectangle;\n } else {\n return x;\n }\n };\n rectangle.y = function (_) {\n if (arguments.length) {\n y = number(_);\n return rectangle;\n } else {\n return y;\n }\n };\n rectangle.width = function (_) {\n if (arguments.length) {\n width = number(_);\n return rectangle;\n } else {\n return width;\n }\n };\n rectangle.height = function (_) {\n if (arguments.length) {\n height = number(_);\n return rectangle;\n } else {\n return height;\n }\n };\n rectangle.cornerRadius = function (tl, tr, br, bl) {\n if (arguments.length) {\n crTL = number(tl);\n crTR = tr != null ? number(tr) : crTL;\n crBR = br != null ? number(br) : crTL;\n crBL = bl != null ? number(bl) : crTR;\n return rectangle;\n } else {\n return crTL;\n }\n };\n rectangle.context = function (_) {\n if (arguments.length) {\n context = _ == null ? null : _;\n return rectangle;\n } else {\n return context;\n }\n };\n return rectangle;\n}\n\nfunction vg_trail () {\n var x,\n y,\n size,\n defined,\n context = null,\n ready,\n x1,\n y1,\n r1;\n function point(x2, y2, w2) {\n const r2 = w2 / 2;\n if (ready) {\n var ux = y1 - y2,\n uy = x2 - x1;\n if (ux || uy) {\n // get normal vector\n var ud = Math.hypot(ux, uy),\n rx = (ux /= ud) * r1,\n ry = (uy /= ud) * r1,\n t = Math.atan2(uy, ux);\n\n // draw segment\n context.moveTo(x1 - rx, y1 - ry);\n context.lineTo(x2 - ux * r2, y2 - uy * r2);\n context.arc(x2, y2, r2, t - Math.PI, t);\n context.lineTo(x1 + rx, y1 + ry);\n context.arc(x1, y1, r1, t, t + Math.PI);\n } else {\n context.arc(x2, y2, r2, 0, Tau);\n }\n context.closePath();\n } else {\n ready = 1;\n }\n x1 = x2;\n y1 = y2;\n r1 = r2;\n }\n function trail(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n if (context == null) context = buffer = path$3();\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) ready = 0;\n }\n if (defined0) point(+x(d, i, data), +y(d, i, data), +size(d, i, data));\n }\n if (buffer) {\n context = null;\n return buffer + '' || null;\n }\n }\n trail.x = function (_) {\n if (arguments.length) {\n x = _;\n return trail;\n } else {\n return x;\n }\n };\n trail.y = function (_) {\n if (arguments.length) {\n y = _;\n return trail;\n } else {\n return y;\n }\n };\n trail.size = function (_) {\n if (arguments.length) {\n size = _;\n return trail;\n } else {\n return size;\n }\n };\n trail.defined = function (_) {\n if (arguments.length) {\n defined = _;\n return trail;\n } else {\n return defined;\n }\n };\n trail.context = function (_) {\n if (arguments.length) {\n if (_ == null) {\n context = null;\n } else {\n context = _;\n }\n return trail;\n } else {\n return context;\n }\n };\n return trail;\n}\n\nfunction value$1(a, b) {\n return a != null ? a : b;\n}\nconst x = item => item.x || 0,\n y = item => item.y || 0,\n w = item => item.width || 0,\n h = item => item.height || 0,\n xw = item => (item.x || 0) + (item.width || 0),\n yh = item => (item.y || 0) + (item.height || 0),\n sa = item => item.startAngle || 0,\n ea = item => item.endAngle || 0,\n pa = item => item.padAngle || 0,\n ir = item => item.innerRadius || 0,\n or = item => item.outerRadius || 0,\n cr = item => item.cornerRadius || 0,\n tl = item => value$1(item.cornerRadiusTopLeft, item.cornerRadius) || 0,\n tr = item => value$1(item.cornerRadiusTopRight, item.cornerRadius) || 0,\n br = item => value$1(item.cornerRadiusBottomRight, item.cornerRadius) || 0,\n bl = item => value$1(item.cornerRadiusBottomLeft, item.cornerRadius) || 0,\n sz = item => value$1(item.size, 64),\n ts = item => item.size || 1,\n def = item => !(item.defined === false),\n type = item => symbols(item.shape || 'circle');\nconst arcShape = arc$2().startAngle(sa).endAngle(ea).padAngle(pa).innerRadius(ir).outerRadius(or).cornerRadius(cr),\n areavShape = area$2().x(x).y1(y).y0(yh).defined(def),\n areahShape = area$2().y(y).x1(x).x0(xw).defined(def),\n lineShape = line$2().x(x).y(y).defined(def),\n rectShape = vg_rect().x(x).y(y).width(w).height(h).cornerRadius(tl, tr, br, bl),\n symbolShape = symbol$2().type(type).size(sz),\n trailShape = vg_trail().x(x).y(y).defined(def).size(ts);\nfunction hasCornerRadius(item) {\n return item.cornerRadius || item.cornerRadiusTopLeft || item.cornerRadiusTopRight || item.cornerRadiusBottomRight || item.cornerRadiusBottomLeft;\n}\nfunction arc$1(context, item) {\n return arcShape.context(context)(item);\n}\nfunction area$1(context, items) {\n const item = items[0],\n interp = item.interpolate || 'linear';\n return (item.orient === 'horizontal' ? areahShape : areavShape).curve(curves(interp, item.orient, item.tension)).context(context)(items);\n}\nfunction line$1(context, items) {\n const item = items[0],\n interp = item.interpolate || 'linear';\n return lineShape.curve(curves(interp, item.orient, item.tension)).context(context)(items);\n}\nfunction rectangle(context, item, x, y) {\n return rectShape.context(context)(item, x, y);\n}\nfunction shape$1(context, item) {\n return (item.mark.shape || item.shape).context(context)(item);\n}\nfunction symbol$1(context, item) {\n return symbolShape.context(context)(item);\n}\nfunction trail$1(context, items) {\n return trailShape.context(context)(items);\n}\n\nvar clip_id = 1;\nfunction resetSVGClipId() {\n clip_id = 1;\n}\nfunction clip$1 (renderer, item, size) {\n var clip = item.clip,\n defs = renderer._defs,\n id = item.clip_id || (item.clip_id = 'clip' + clip_id++),\n c = defs.clipping[id] || (defs.clipping[id] = {\n id: id\n });\n if (isFunction(clip)) {\n c.path = clip(null);\n } else if (hasCornerRadius(size)) {\n c.path = rectangle(null, size, 0, 0);\n } else {\n c.width = size.width || 0;\n c.height = size.height || 0;\n }\n return 'url(#' + id + ')';\n}\n\nfunction Bounds(b) {\n this.clear();\n if (b) this.union(b);\n}\nBounds.prototype = {\n clone() {\n return new Bounds(this);\n },\n clear() {\n this.x1 = +Number.MAX_VALUE;\n this.y1 = +Number.MAX_VALUE;\n this.x2 = -Number.MAX_VALUE;\n this.y2 = -Number.MAX_VALUE;\n return this;\n },\n empty() {\n return this.x1 === +Number.MAX_VALUE && this.y1 === +Number.MAX_VALUE && this.x2 === -Number.MAX_VALUE && this.y2 === -Number.MAX_VALUE;\n },\n equals(b) {\n return this.x1 === b.x1 && this.y1 === b.y1 && this.x2 === b.x2 && this.y2 === b.y2;\n },\n set(x1, y1, x2, y2) {\n if (x2 < x1) {\n this.x2 = x1;\n this.x1 = x2;\n } else {\n this.x1 = x1;\n this.x2 = x2;\n }\n if (y2 < y1) {\n this.y2 = y1;\n this.y1 = y2;\n } else {\n this.y1 = y1;\n this.y2 = y2;\n }\n return this;\n },\n add(x, y) {\n if (x < this.x1) this.x1 = x;\n if (y < this.y1) this.y1 = y;\n if (x > this.x2) this.x2 = x;\n if (y > this.y2) this.y2 = y;\n return this;\n },\n expand(d) {\n this.x1 -= d;\n this.y1 -= d;\n this.x2 += d;\n this.y2 += d;\n return this;\n },\n round() {\n this.x1 = Math.floor(this.x1);\n this.y1 = Math.floor(this.y1);\n this.x2 = Math.ceil(this.x2);\n this.y2 = Math.ceil(this.y2);\n return this;\n },\n scale(s) {\n this.x1 *= s;\n this.y1 *= s;\n this.x2 *= s;\n this.y2 *= s;\n return this;\n },\n translate(dx, dy) {\n this.x1 += dx;\n this.x2 += dx;\n this.y1 += dy;\n this.y2 += dy;\n return this;\n },\n rotate(angle, x, y) {\n const p = this.rotatedPoints(angle, x, y);\n return this.clear().add(p[0], p[1]).add(p[2], p[3]).add(p[4], p[5]).add(p[6], p[7]);\n },\n rotatedPoints(angle, x, y) {\n var {\n x1,\n y1,\n x2,\n y2\n } = this,\n cos = Math.cos(angle),\n sin = Math.sin(angle),\n cx = x - x * cos + y * sin,\n cy = y - x * sin - y * cos;\n return [cos * x1 - sin * y1 + cx, sin * x1 + cos * y1 + cy, cos * x1 - sin * y2 + cx, sin * x1 + cos * y2 + cy, cos * x2 - sin * y1 + cx, sin * x2 + cos * y1 + cy, cos * x2 - sin * y2 + cx, sin * x2 + cos * y2 + cy];\n },\n union(b) {\n if (b.x1 < this.x1) this.x1 = b.x1;\n if (b.y1 < this.y1) this.y1 = b.y1;\n if (b.x2 > this.x2) this.x2 = b.x2;\n if (b.y2 > this.y2) this.y2 = b.y2;\n return this;\n },\n intersect(b) {\n if (b.x1 > this.x1) this.x1 = b.x1;\n if (b.y1 > this.y1) this.y1 = b.y1;\n if (b.x2 < this.x2) this.x2 = b.x2;\n if (b.y2 < this.y2) this.y2 = b.y2;\n return this;\n },\n encloses(b) {\n return b && this.x1 <= b.x1 && this.x2 >= b.x2 && this.y1 <= b.y1 && this.y2 >= b.y2;\n },\n alignsWith(b) {\n return b && (this.x1 == b.x1 || this.x2 == b.x2 || this.y1 == b.y1 || this.y2 == b.y2);\n },\n intersects(b) {\n return b && !(this.x2 < b.x1 || this.x1 > b.x2 || this.y2 < b.y1 || this.y1 > b.y2);\n },\n contains(x, y) {\n return !(x < this.x1 || x > this.x2 || y < this.y1 || y > this.y2);\n },\n width() {\n return this.x2 - this.x1;\n },\n height() {\n return this.y2 - this.y1;\n }\n};\n\nfunction Item(mark) {\n this.mark = mark;\n this.bounds = this.bounds || new Bounds();\n}\n\nfunction GroupItem(mark) {\n Item.call(this, mark);\n this.items = this.items || [];\n}\ninherits(GroupItem, Item);\n\nclass ResourceLoader {\n constructor(customLoader) {\n this._pending = 0;\n this._loader = customLoader || loader();\n }\n pending() {\n return this._pending;\n }\n sanitizeURL(uri) {\n const loader = this;\n increment(loader);\n return loader._loader.sanitize(uri, {\n context: 'href'\n }).then(opt => {\n decrement(loader);\n return opt;\n }).catch(() => {\n decrement(loader);\n return null;\n });\n }\n loadImage(uri) {\n const loader = this,\n Image = image$1();\n increment(loader);\n return loader._loader.sanitize(uri, {\n context: 'image'\n }).then(opt => {\n const url = opt.href;\n if (!url || !Image) throw {\n url: url\n };\n const img = new Image();\n\n // set crossOrigin only if cors is defined; empty string sets anonymous mode\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/crossOrigin\n const cors = hasOwnProperty(opt, 'crossOrigin') ? opt.crossOrigin : 'anonymous';\n if (cors != null) img.crossOrigin = cors;\n\n // attempt to load image resource\n img.onload = () => decrement(loader);\n img.onerror = () => decrement(loader);\n img.src = url;\n return img;\n }).catch(e => {\n decrement(loader);\n return {\n complete: false,\n width: 0,\n height: 0,\n src: e && e.url || ''\n };\n });\n }\n ready() {\n const loader = this;\n return new Promise(accept => {\n function poll(value) {\n if (!loader.pending()) accept(value);else setTimeout(() => {\n poll(true);\n }, 10);\n }\n poll(false);\n });\n }\n}\nfunction increment(loader) {\n loader._pending += 1;\n}\nfunction decrement(loader) {\n loader._pending -= 1;\n}\n\nfunction boundStroke (bounds, item, miter) {\n if (item.stroke && item.opacity !== 0 && item.strokeOpacity !== 0) {\n const sw = item.strokeWidth != null ? +item.strokeWidth : 1;\n bounds.expand(sw + (miter ? miterAdjustment(item, sw) : 0));\n }\n return bounds;\n}\nfunction miterAdjustment(item, strokeWidth) {\n // TODO: more sophisticated adjustment? Or miter support in boundContext?\n return item.strokeJoin && item.strokeJoin !== 'miter' ? 0 : strokeWidth;\n}\n\nconst circleThreshold = Tau - 1e-8;\nlet bounds, lx, ly, rot, ma, mb, mc, md;\nconst add = (x, y) => bounds.add(x, y);\nconst addL = (x, y) => add(lx = x, ly = y);\nconst addX = x => add(x, bounds.y1);\nconst addY = y => add(bounds.x1, y);\nconst px = (x, y) => ma * x + mc * y;\nconst py = (x, y) => mb * x + md * y;\nconst addp = (x, y) => add(px(x, y), py(x, y));\nconst addpL = (x, y) => addL(px(x, y), py(x, y));\nfunction boundContext (_, deg) {\n bounds = _;\n if (deg) {\n rot = deg * DegToRad;\n ma = md = Math.cos(rot);\n mb = Math.sin(rot);\n mc = -mb;\n } else {\n ma = md = 1;\n rot = mb = mc = 0;\n }\n return context$1;\n}\nconst context$1 = {\n beginPath() {},\n closePath() {},\n moveTo: addpL,\n lineTo: addpL,\n rect(x, y, w, h) {\n if (rot) {\n addp(x + w, y);\n addp(x + w, y + h);\n addp(x, y + h);\n addpL(x, y);\n } else {\n add(x + w, y + h);\n addL(x, y);\n }\n },\n quadraticCurveTo(x1, y1, x2, y2) {\n const px1 = px(x1, y1),\n py1 = py(x1, y1),\n px2 = px(x2, y2),\n py2 = py(x2, y2);\n quadExtrema(lx, px1, px2, addX);\n quadExtrema(ly, py1, py2, addY);\n addL(px2, py2);\n },\n bezierCurveTo(x1, y1, x2, y2, x3, y3) {\n const px1 = px(x1, y1),\n py1 = py(x1, y1),\n px2 = px(x2, y2),\n py2 = py(x2, y2),\n px3 = px(x3, y3),\n py3 = py(x3, y3);\n cubicExtrema(lx, px1, px2, px3, addX);\n cubicExtrema(ly, py1, py2, py3, addY);\n addL(px3, py3);\n },\n arc(cx, cy, r, sa, ea, ccw) {\n sa += rot;\n ea += rot;\n\n // store last point on path\n lx = r * Math.cos(ea) + cx;\n ly = r * Math.sin(ea) + cy;\n if (Math.abs(ea - sa) > circleThreshold) {\n // treat as full circle\n add(cx - r, cy - r);\n add(cx + r, cy + r);\n } else {\n const update = a => add(r * Math.cos(a) + cx, r * Math.sin(a) + cy);\n let s, i;\n\n // sample end points\n update(sa);\n update(ea);\n\n // sample interior points aligned with 90 degrees\n if (ea !== sa) {\n sa = sa % Tau;\n if (sa < 0) sa += Tau;\n ea = ea % Tau;\n if (ea < 0) ea += Tau;\n if (ea < sa) {\n ccw = !ccw; // flip direction\n s = sa;\n sa = ea;\n ea = s; // swap end-points\n }\n if (ccw) {\n ea -= Tau;\n s = sa - sa % HalfPi;\n for (i = 0; i < 4 && s > ea; ++i, s -= HalfPi) update(s);\n } else {\n s = sa - sa % HalfPi + HalfPi;\n for (i = 0; i < 4 && s < ea; ++i, s = s + HalfPi) update(s);\n }\n }\n }\n }\n};\nfunction quadExtrema(x0, x1, x2, cb) {\n const t = (x0 - x1) / (x0 + x2 - 2 * x1);\n if (0 < t && t < 1) cb(x0 + (x1 - x0) * t);\n}\nfunction cubicExtrema(x0, x1, x2, x3, cb) {\n const a = x3 - x0 + 3 * x1 - 3 * x2,\n b = x0 + x2 - 2 * x1,\n c = x0 - x1;\n let t0 = 0,\n t1 = 0,\n r;\n\n // solve for parameter t\n if (Math.abs(a) > Epsilon) {\n // quadratic equation\n r = b * b + c * a;\n if (r >= 0) {\n r = Math.sqrt(r);\n t0 = (-b + r) / a;\n t1 = (-b - r) / a;\n }\n } else {\n // linear equation\n t0 = 0.5 * c / b;\n }\n\n // calculate position\n if (0 < t0 && t0 < 1) cb(cubic(t0, x0, x1, x2, x3));\n if (0 < t1 && t1 < 1) cb(cubic(t1, x0, x1, x2, x3));\n}\nfunction cubic(t, x0, x1, x2, x3) {\n const s = 1 - t,\n s2 = s * s,\n t2 = t * t;\n return s2 * s * x0 + 3 * s2 * t * x1 + 3 * s * t2 * x2 + t2 * t * x3;\n}\n\nvar context = (context = canvas(1, 1)) ? context.getContext('2d') : null;\n\nconst b = new Bounds();\nfunction intersectPath(draw) {\n return function (item, brush) {\n // rely on (inaccurate) bounds intersection if no context\n if (!context) return true;\n\n // add path to offscreen graphics context\n draw(context, item);\n\n // get bounds intersection region\n b.clear().union(item.bounds).intersect(brush).round();\n const {\n x1,\n y1,\n x2,\n y2\n } = b;\n\n // iterate over intersection region\n // perform fine grained inclusion test\n for (let y = y1; y <= y2; ++y) {\n for (let x = x1; x <= x2; ++x) {\n if (context.isPointInPath(x, y)) {\n return true;\n }\n }\n }\n\n // false if no hits in intersection region\n return false;\n };\n}\nfunction intersectPoint(item, box) {\n return box.contains(item.x || 0, item.y || 0);\n}\nfunction intersectRect(item, box) {\n const x = item.x || 0,\n y = item.y || 0,\n w = item.width || 0,\n h = item.height || 0;\n return box.intersects(b.set(x, y, x + w, y + h));\n}\nfunction intersectRule(item, box) {\n const x = item.x || 0,\n y = item.y || 0,\n x2 = item.x2 != null ? item.x2 : x,\n y2 = item.y2 != null ? item.y2 : y;\n return intersectBoxLine(box, x, y, x2, y2);\n}\nfunction intersectBoxLine(box, x, y, u, v) {\n const {\n x1,\n y1,\n x2,\n y2\n } = box,\n dx = u - x,\n dy = v - y;\n let t0 = 0,\n t1 = 1,\n p,\n q,\n r,\n e;\n for (e = 0; e < 4; ++e) {\n if (e === 0) {\n p = -dx;\n q = -(x1 - x);\n }\n if (e === 1) {\n p = dx;\n q = x2 - x;\n }\n if (e === 2) {\n p = -dy;\n q = -(y1 - y);\n }\n if (e === 3) {\n p = dy;\n q = y2 - y;\n }\n if (Math.abs(p) < 1e-10 && q < 0) return false;\n r = q / p;\n if (p < 0) {\n if (r > t1) return false;else if (r > t0) t0 = r;\n } else if (p > 0) {\n if (r < t0) return false;else if (r < t1) t1 = r;\n }\n }\n return true;\n}\n\nfunction blend (context, item) {\n context.globalCompositeOperation = item.blend || 'source-over';\n}\n\nfunction value (value, dflt) {\n return value == null ? dflt : value;\n}\n\nfunction addStops(gradient, stops) {\n const n = stops.length;\n for (let i = 0; i < n; ++i) {\n gradient.addColorStop(stops[i].offset, stops[i].color);\n }\n return gradient;\n}\nfunction gradient (context, spec, bounds) {\n const w = bounds.width(),\n h = bounds.height();\n let gradient;\n if (spec.gradient === 'radial') {\n gradient = context.createRadialGradient(bounds.x1 + value(spec.x1, 0.5) * w, bounds.y1 + value(spec.y1, 0.5) * h, Math.max(w, h) * value(spec.r1, 0), bounds.x1 + value(spec.x2, 0.5) * w, bounds.y1 + value(spec.y2, 0.5) * h, Math.max(w, h) * value(spec.r2, 0.5));\n } else {\n // linear gradient\n const x1 = value(spec.x1, 0),\n y1 = value(spec.y1, 0),\n x2 = value(spec.x2, 1),\n y2 = value(spec.y2, 0);\n if (x1 === x2 || y1 === y2 || w === h) {\n // axis aligned: use normal gradient\n gradient = context.createLinearGradient(bounds.x1 + x1 * w, bounds.y1 + y1 * h, bounds.x1 + x2 * w, bounds.y1 + y2 * h);\n } else {\n // not axis aligned: render gradient into a pattern (#2365)\n // this allows us to use normalized bounding box coordinates\n const image = canvas(Math.ceil(w), Math.ceil(h)),\n ictx = image.getContext('2d');\n ictx.scale(w, h);\n ictx.fillStyle = addStops(ictx.createLinearGradient(x1, y1, x2, y2), spec.stops);\n ictx.fillRect(0, 0, w, h);\n return context.createPattern(image, 'no-repeat');\n }\n }\n return addStops(gradient, spec.stops);\n}\n\nfunction color (context, item, value) {\n return isGradient(value) ? gradient(context, value, item.bounds) : value;\n}\n\nfunction fill (context, item, opacity) {\n opacity *= item.fillOpacity == null ? 1 : item.fillOpacity;\n if (opacity > 0) {\n context.globalAlpha = opacity;\n context.fillStyle = color(context, item, item.fill);\n return true;\n } else {\n return false;\n }\n}\n\nvar Empty = [];\nfunction stroke (context, item, opacity) {\n var lw = (lw = item.strokeWidth) != null ? lw : 1;\n if (lw <= 0) return false;\n opacity *= item.strokeOpacity == null ? 1 : item.strokeOpacity;\n if (opacity > 0) {\n context.globalAlpha = opacity;\n context.strokeStyle = color(context, item, item.stroke);\n context.lineWidth = lw;\n context.lineCap = item.strokeCap || 'butt';\n context.lineJoin = item.strokeJoin || 'miter';\n context.miterLimit = item.strokeMiterLimit || 10;\n if (context.setLineDash) {\n context.setLineDash(item.strokeDash || Empty);\n context.lineDashOffset = item.strokeDashOffset || 0;\n }\n return true;\n } else {\n return false;\n }\n}\n\nfunction compare(a, b) {\n return a.zindex - b.zindex || a.index - b.index;\n}\nfunction zorder(scene) {\n if (!scene.zdirty) return scene.zitems;\n var items = scene.items,\n output = [],\n item,\n i,\n n;\n for (i = 0, n = items.length; i < n; ++i) {\n item = items[i];\n item.index = i;\n if (item.zindex) output.push(item);\n }\n scene.zdirty = false;\n return scene.zitems = output.sort(compare);\n}\nfunction visit(scene, visitor) {\n var items = scene.items,\n i,\n n;\n if (!items || !items.length) return;\n const zitems = zorder(scene);\n if (zitems && zitems.length) {\n for (i = 0, n = items.length; i < n; ++i) {\n if (!items[i].zindex) visitor(items[i]);\n }\n items = zitems;\n }\n for (i = 0, n = items.length; i < n; ++i) {\n visitor(items[i]);\n }\n}\nfunction pickVisit(scene, visitor) {\n var items = scene.items,\n hit,\n i;\n if (!items || !items.length) return null;\n const zitems = zorder(scene);\n if (zitems && zitems.length) items = zitems;\n for (i = items.length; --i >= 0;) {\n if (hit = visitor(items[i])) return hit;\n }\n if (items === zitems) {\n for (items = scene.items, i = items.length; --i >= 0;) {\n if (!items[i].zindex) {\n if (hit = visitor(items[i])) return hit;\n }\n }\n }\n return null;\n}\n\nfunction drawAll(path) {\n return function (context, scene, bounds) {\n visit(scene, item => {\n if (!bounds || bounds.intersects(item.bounds)) {\n drawPath(path, context, item, item);\n }\n });\n };\n}\nfunction drawOne(path) {\n return function (context, scene, bounds) {\n if (scene.items.length && (!bounds || bounds.intersects(scene.bounds))) {\n drawPath(path, context, scene.items[0], scene.items);\n }\n };\n}\nfunction drawPath(path, context, item, items) {\n var opacity = item.opacity == null ? 1 : item.opacity;\n if (opacity === 0) return;\n if (path(context, items)) return;\n blend(context, item);\n if (item.fill && fill(context, item, opacity)) {\n context.fill();\n }\n if (item.stroke && stroke(context, item, opacity)) {\n context.stroke();\n }\n}\n\nfunction pick$1(test) {\n test = test || truthy;\n return function (context, scene, x, y, gx, gy) {\n x *= context.pixelRatio;\n y *= context.pixelRatio;\n return pickVisit(scene, item => {\n const b = item.bounds;\n // first hit test against bounding box\n if (b && !b.contains(gx, gy) || !b) return;\n // if in bounding box, perform more careful test\n if (test(context, item, x, y, gx, gy)) return item;\n });\n };\n}\nfunction hitPath(path, filled) {\n return function (context, o, x, y) {\n var item = Array.isArray(o) ? o[0] : o,\n fill = filled == null ? item.fill : filled,\n stroke = item.stroke && context.isPointInStroke,\n lw,\n lc;\n if (stroke) {\n lw = item.strokeWidth;\n lc = item.strokeCap;\n context.lineWidth = lw != null ? lw : 1;\n context.lineCap = lc != null ? lc : 'butt';\n }\n return path(context, o) ? false : fill && context.isPointInPath(x, y) || stroke && context.isPointInStroke(x, y);\n };\n}\nfunction pickPath(path) {\n return pick$1(hitPath(path));\n}\n\nfunction translate(x, y) {\n return 'translate(' + x + ',' + y + ')';\n}\nfunction rotate(a) {\n return 'rotate(' + a + ')';\n}\nfunction scale(scaleX, scaleY) {\n return 'scale(' + scaleX + ',' + scaleY + ')';\n}\nfunction translateItem(item) {\n return translate(item.x || 0, item.y || 0);\n}\nfunction rotateItem(item) {\n return translate(item.x || 0, item.y || 0) + (item.angle ? ' ' + rotate(item.angle) : '');\n}\nfunction transformItem(item) {\n return translate(item.x || 0, item.y || 0) + (item.angle ? ' ' + rotate(item.angle) : '') + (item.scaleX || item.scaleY ? ' ' + scale(item.scaleX || 1, item.scaleY || 1) : '');\n}\n\nfunction markItemPath (type, shape, isect) {\n function attr(emit, item) {\n emit('transform', rotateItem(item));\n emit('d', shape(null, item));\n }\n function bound(bounds, item) {\n shape(boundContext(bounds, item.angle), item);\n return boundStroke(bounds, item).translate(item.x || 0, item.y || 0);\n }\n function draw(context, item) {\n var x = item.x || 0,\n y = item.y || 0,\n a = item.angle || 0;\n context.translate(x, y);\n if (a) context.rotate(a *= DegToRad);\n context.beginPath();\n shape(context, item);\n if (a) context.rotate(-a);\n context.translate(-x, -y);\n }\n return {\n type: type,\n tag: 'path',\n nested: false,\n attr: attr,\n bound: bound,\n draw: drawAll(draw),\n pick: pickPath(draw),\n isect: isect || intersectPath(draw)\n };\n}\n\nvar arc = markItemPath('arc', arc$1);\n\nfunction pickArea(a, p) {\n var v = a[0].orient === 'horizontal' ? p[1] : p[0],\n z = a[0].orient === 'horizontal' ? 'y' : 'x',\n i = a.length,\n min = +Infinity,\n hit,\n d;\n while (--i >= 0) {\n if (a[i].defined === false) continue;\n d = Math.abs(a[i][z] - v);\n if (d < min) {\n min = d;\n hit = a[i];\n }\n }\n return hit;\n}\nfunction pickLine(a, p) {\n var t = Math.pow(a[0].strokeWidth || 1, 2),\n i = a.length,\n dx,\n dy,\n dd;\n while (--i >= 0) {\n if (a[i].defined === false) continue;\n dx = a[i].x - p[0];\n dy = a[i].y - p[1];\n dd = dx * dx + dy * dy;\n if (dd < t) return a[i];\n }\n return null;\n}\nfunction pickTrail(a, p) {\n var i = a.length,\n dx,\n dy,\n dd;\n while (--i >= 0) {\n if (a[i].defined === false) continue;\n dx = a[i].x - p[0];\n dy = a[i].y - p[1];\n dd = dx * dx + dy * dy;\n dx = a[i].size || 1;\n if (dd < dx * dx) return a[i];\n }\n return null;\n}\n\nfunction markMultiItemPath (type, shape, tip) {\n function attr(emit, item) {\n var items = item.mark.items;\n if (items.length) emit('d', shape(null, items));\n }\n function bound(bounds, mark) {\n var items = mark.items;\n if (items.length === 0) {\n return bounds;\n } else {\n shape(boundContext(bounds), items);\n return boundStroke(bounds, items[0]);\n }\n }\n function draw(context, items) {\n context.beginPath();\n shape(context, items);\n }\n const hit = hitPath(draw);\n function pick(context, scene, x, y, gx, gy) {\n var items = scene.items,\n b = scene.bounds;\n if (!items || !items.length || b && !b.contains(gx, gy)) {\n return null;\n }\n x *= context.pixelRatio;\n y *= context.pixelRatio;\n return hit(context, items, x, y) ? items[0] : null;\n }\n return {\n type: type,\n tag: 'path',\n nested: true,\n attr: attr,\n bound: bound,\n draw: drawOne(draw),\n pick: pick,\n isect: intersectPoint,\n tip: tip\n };\n}\n\nvar area = markMultiItemPath('area', area$1, pickArea);\n\nfunction clip (context, scene) {\n var clip = scene.clip;\n context.save();\n if (isFunction(clip)) {\n context.beginPath();\n clip(context);\n context.clip();\n } else {\n clipGroup(context, scene.group);\n }\n}\nfunction clipGroup(context, group) {\n context.beginPath();\n hasCornerRadius(group) ? rectangle(context, group, 0, 0) : context.rect(0, 0, group.width || 0, group.height || 0);\n context.clip();\n}\n\nfunction offset$1(item) {\n const sw = value(item.strokeWidth, 1);\n return item.strokeOffset != null ? item.strokeOffset : item.stroke && sw > 0.5 && sw < 1.5 ? 0.5 - Math.abs(sw - 1) : 0;\n}\nfunction attr$5(emit, item) {\n emit('transform', translateItem(item));\n}\nfunction emitRectangle(emit, item) {\n const off = offset$1(item);\n emit('d', rectangle(null, item, off, off));\n}\nfunction background(emit, item) {\n emit('class', 'background');\n emit('aria-hidden', true);\n emitRectangle(emit, item);\n}\nfunction foreground(emit, item) {\n emit('class', 'foreground');\n emit('aria-hidden', true);\n if (item.strokeForeground) {\n emitRectangle(emit, item);\n } else {\n emit('d', '');\n }\n}\nfunction content(emit, item, renderer) {\n const url = item.clip ? clip$1(renderer, item, item) : null;\n emit('clip-path', url);\n}\nfunction bound$5(bounds, group) {\n if (!group.clip && group.items) {\n const items = group.items,\n m = items.length;\n for (let j = 0; j < m; ++j) {\n bounds.union(items[j].bounds);\n }\n }\n if ((group.clip || group.width || group.height) && !group.noBound) {\n bounds.add(0, 0).add(group.width || 0, group.height || 0);\n }\n boundStroke(bounds, group);\n return bounds.translate(group.x || 0, group.y || 0);\n}\nfunction rectanglePath(context, group, x, y) {\n const off = offset$1(group);\n context.beginPath();\n rectangle(context, group, (x || 0) + off, (y || 0) + off);\n}\nconst hitBackground = hitPath(rectanglePath);\nconst hitForeground = hitPath(rectanglePath, false);\nconst hitCorner = hitPath(rectanglePath, true);\nfunction draw$4(context, scene, bounds, markTypes) {\n visit(scene, group => {\n const gx = group.x || 0,\n gy = group.y || 0,\n fore = group.strokeForeground,\n opacity = group.opacity == null ? 1 : group.opacity;\n\n // draw group background\n if ((group.stroke || group.fill) && opacity) {\n rectanglePath(context, group, gx, gy);\n blend(context, group);\n if (group.fill && fill(context, group, opacity)) {\n context.fill();\n }\n if (group.stroke && !fore && stroke(context, group, opacity)) {\n context.stroke();\n }\n }\n\n // setup graphics context, set clip and bounds\n context.save();\n context.translate(gx, gy);\n if (group.clip) clipGroup(context, group);\n if (bounds) bounds.translate(-gx, -gy);\n\n // draw group contents\n visit(group, item => {\n if (item.marktype === 'group' || markTypes == null || markTypes.includes(item.marktype)) {\n this.draw(context, item, bounds, markTypes);\n }\n });\n\n // restore graphics context\n if (bounds) bounds.translate(gx, gy);\n context.restore();\n\n // draw group foreground\n if (fore && group.stroke && opacity) {\n rectanglePath(context, group, gx, gy);\n blend(context, group);\n if (stroke(context, group, opacity)) {\n context.stroke();\n }\n }\n });\n}\nfunction pick(context, scene, x, y, gx, gy) {\n if (scene.bounds && !scene.bounds.contains(gx, gy) || !scene.items) {\n return null;\n }\n const cx = x * context.pixelRatio,\n cy = y * context.pixelRatio;\n return pickVisit(scene, group => {\n let hit, dx, dy;\n\n // first hit test bounding box\n const b = group.bounds;\n if (b && !b.contains(gx, gy)) return;\n\n // passed bounds check, test rectangular clip\n dx = group.x || 0;\n dy = group.y || 0;\n const dw = dx + (group.width || 0),\n dh = dy + (group.height || 0),\n c = group.clip;\n if (c && (gx < dx || gx > dw || gy < dy || gy > dh)) return;\n\n // adjust coordinate system\n context.save();\n context.translate(dx, dy);\n dx = gx - dx;\n dy = gy - dy;\n\n // test background for rounded corner clip\n if (c && hasCornerRadius(group) && !hitCorner(context, group, cx, cy)) {\n context.restore();\n return null;\n }\n const fore = group.strokeForeground,\n ix = scene.interactive !== false;\n\n // hit test against group foreground\n if (ix && fore && group.stroke && hitForeground(context, group, cx, cy)) {\n context.restore();\n return group;\n }\n\n // hit test against contained marks\n hit = pickVisit(group, mark => pickMark(mark, dx, dy) ? this.pick(mark, x, y, dx, dy) : null);\n\n // hit test against group background\n if (!hit && ix && (group.fill || !fore && group.stroke) && hitBackground(context, group, cx, cy)) {\n hit = group;\n }\n\n // restore state and return\n context.restore();\n return hit || null;\n });\n}\nfunction pickMark(mark, x, y) {\n return (mark.interactive !== false || mark.marktype === 'group') && mark.bounds && mark.bounds.contains(x, y);\n}\nvar group = {\n type: 'group',\n tag: 'g',\n nested: false,\n attr: attr$5,\n bound: bound$5,\n draw: draw$4,\n pick: pick,\n isect: intersectRect,\n content: content,\n background: background,\n foreground: foreground\n};\n\nvar metadata = {\n 'xmlns': 'http://www.w3.org/2000/svg',\n 'xmlns:xlink': 'http://www.w3.org/1999/xlink',\n 'version': '1.1'\n};\n\nfunction getImage(item, renderer) {\n var image = item.image;\n if (!image || item.url && item.url !== image.url) {\n image = {\n complete: false,\n width: 0,\n height: 0\n };\n renderer.loadImage(item.url).then(image => {\n item.image = image;\n item.image.url = item.url;\n });\n }\n return image;\n}\nfunction imageWidth(item, image) {\n return item.width != null ? item.width : !image || !image.width ? 0 : item.aspect !== false && item.height ? item.height * image.width / image.height : image.width;\n}\nfunction imageHeight(item, image) {\n return item.height != null ? item.height : !image || !image.height ? 0 : item.aspect !== false && item.width ? item.width * image.height / image.width : image.height;\n}\nfunction imageXOffset(align, w) {\n return align === 'center' ? w / 2 : align === 'right' ? w : 0;\n}\nfunction imageYOffset(baseline, h) {\n return baseline === 'middle' ? h / 2 : baseline === 'bottom' ? h : 0;\n}\nfunction attr$4(emit, item, renderer) {\n const img = getImage(item, renderer),\n w = imageWidth(item, img),\n h = imageHeight(item, img),\n x = (item.x || 0) - imageXOffset(item.align, w),\n y = (item.y || 0) - imageYOffset(item.baseline, h),\n i = !img.src && img.toDataURL ? img.toDataURL() : img.src || '';\n emit('href', i, metadata['xmlns:xlink'], 'xlink:href');\n emit('transform', translate(x, y));\n emit('width', w);\n emit('height', h);\n emit('preserveAspectRatio', item.aspect === false ? 'none' : 'xMidYMid');\n}\nfunction bound$4(bounds, item) {\n const img = item.image,\n w = imageWidth(item, img),\n h = imageHeight(item, img),\n x = (item.x || 0) - imageXOffset(item.align, w),\n y = (item.y || 0) - imageYOffset(item.baseline, h);\n return bounds.set(x, y, x + w, y + h);\n}\nfunction draw$3(context, scene, bounds) {\n visit(scene, item => {\n if (bounds && !bounds.intersects(item.bounds)) return; // bounds check\n\n const img = getImage(item, this);\n let w = imageWidth(item, img);\n let h = imageHeight(item, img);\n if (w === 0 || h === 0) return; // early exit\n\n let x = (item.x || 0) - imageXOffset(item.align, w),\n y = (item.y || 0) - imageYOffset(item.baseline, h),\n opacity,\n ar0,\n ar1,\n t;\n if (item.aspect !== false) {\n ar0 = img.width / img.height;\n ar1 = item.width / item.height;\n if (ar0 === ar0 && ar1 === ar1 && ar0 !== ar1) {\n if (ar1 < ar0) {\n t = w / ar0;\n y += (h - t) / 2;\n h = t;\n } else {\n t = h * ar0;\n x += (w - t) / 2;\n w = t;\n }\n }\n }\n if (img.complete || img.toDataURL) {\n blend(context, item);\n context.globalAlpha = (opacity = item.opacity) != null ? opacity : 1;\n context.imageSmoothingEnabled = item.smooth !== false;\n context.drawImage(img, x, y, w, h);\n }\n });\n}\nvar image = {\n type: 'image',\n tag: 'image',\n nested: false,\n attr: attr$4,\n bound: bound$4,\n draw: draw$3,\n pick: pick$1(),\n isect: truthy,\n // bounds check is sufficient\n get: getImage,\n xOffset: imageXOffset,\n yOffset: imageYOffset\n};\n\nvar line = markMultiItemPath('line', line$1, pickLine);\n\nfunction attr$3(emit, item) {\n var sx = item.scaleX || 1,\n sy = item.scaleY || 1;\n if (sx !== 1 || sy !== 1) {\n emit('vector-effect', 'non-scaling-stroke');\n }\n emit('transform', transformItem(item));\n emit('d', item.path);\n}\nfunction path$1(context, item) {\n var path = item.path;\n if (path == null) return true;\n var x = item.x || 0,\n y = item.y || 0,\n sx = item.scaleX || 1,\n sy = item.scaleY || 1,\n a = (item.angle || 0) * DegToRad,\n cache = item.pathCache;\n if (!cache || cache.path !== path) {\n (item.pathCache = cache = parse(path)).path = path;\n }\n if (a && context.rotate && context.translate) {\n context.translate(x, y);\n context.rotate(a);\n pathRender(context, cache, 0, 0, sx, sy);\n context.rotate(-a);\n context.translate(-x, -y);\n } else {\n pathRender(context, cache, x, y, sx, sy);\n }\n}\nfunction bound$3(bounds, item) {\n return path$1(boundContext(bounds, item.angle), item) ? bounds.set(0, 0, 0, 0) : boundStroke(bounds, item, true);\n}\nvar path$2 = {\n type: 'path',\n tag: 'path',\n nested: false,\n attr: attr$3,\n bound: bound$3,\n draw: drawAll(path$1),\n pick: pickPath(path$1),\n isect: intersectPath(path$1)\n};\n\nfunction attr$2(emit, item) {\n emit('d', rectangle(null, item));\n}\nfunction bound$2(bounds, item) {\n var x, y;\n return boundStroke(bounds.set(x = item.x || 0, y = item.y || 0, x + item.width || 0, y + item.height || 0), item);\n}\nfunction draw$2(context, item) {\n context.beginPath();\n rectangle(context, item);\n}\nvar rect = {\n type: 'rect',\n tag: 'path',\n nested: false,\n attr: attr$2,\n bound: bound$2,\n draw: drawAll(draw$2),\n pick: pickPath(draw$2),\n isect: intersectRect\n};\n\nfunction attr$1(emit, item) {\n emit('transform', translateItem(item));\n emit('x2', item.x2 != null ? item.x2 - (item.x || 0) : 0);\n emit('y2', item.y2 != null ? item.y2 - (item.y || 0) : 0);\n}\nfunction bound$1(bounds, item) {\n var x1, y1;\n return boundStroke(bounds.set(x1 = item.x || 0, y1 = item.y || 0, item.x2 != null ? item.x2 : x1, item.y2 != null ? item.y2 : y1), item);\n}\nfunction path(context, item, opacity) {\n var x1, y1, x2, y2;\n if (item.stroke && stroke(context, item, opacity)) {\n x1 = item.x || 0;\n y1 = item.y || 0;\n x2 = item.x2 != null ? item.x2 : x1;\n y2 = item.y2 != null ? item.y2 : y1;\n context.beginPath();\n context.moveTo(x1, y1);\n context.lineTo(x2, y2);\n return true;\n }\n return false;\n}\nfunction draw$1(context, scene, bounds) {\n visit(scene, item => {\n if (bounds && !bounds.intersects(item.bounds)) return; // bounds check\n var opacity = item.opacity == null ? 1 : item.opacity;\n if (opacity && path(context, item, opacity)) {\n blend(context, item);\n context.stroke();\n }\n });\n}\nfunction hit$1(context, item, x, y) {\n if (!context.isPointInStroke) return false;\n return path(context, item, 1) && context.isPointInStroke(x, y);\n}\nvar rule = {\n type: 'rule',\n tag: 'line',\n nested: false,\n attr: attr$1,\n bound: bound$1,\n draw: draw$1,\n pick: pick$1(hit$1),\n isect: intersectRule\n};\n\nvar shape = markItemPath('shape', shape$1);\n\nvar symbol = markItemPath('symbol', symbol$1, intersectPoint);\n\n// memoize text width measurement\nconst widthCache = lruCache();\nvar textMetrics = {\n height: fontSize,\n measureWidth: measureWidth,\n estimateWidth: estimateWidth,\n width: estimateWidth,\n canvas: useCanvas\n};\nuseCanvas(true);\nfunction useCanvas(use) {\n textMetrics.width = use && context ? measureWidth : estimateWidth;\n}\n\n// make simple estimate if no canvas is available\nfunction estimateWidth(item, text) {\n return _estimateWidth(textValue(item, text), fontSize(item));\n}\nfunction _estimateWidth(text, currentFontHeight) {\n return ~~(0.8 * text.length * currentFontHeight);\n}\n\n// measure text width if canvas is available\nfunction measureWidth(item, text) {\n return fontSize(item) <= 0 || !(text = textValue(item, text)) ? 0 : _measureWidth(text, font(item));\n}\nfunction _measureWidth(text, currentFont) {\n const key = `(${currentFont}) ${text}`;\n let width = widthCache.get(key);\n if (width === undefined) {\n context.font = currentFont;\n width = context.measureText(text).width;\n widthCache.set(key, width);\n }\n return width;\n}\nfunction fontSize(item) {\n return item.fontSize != null ? +item.fontSize || 0 : 11;\n}\nfunction lineHeight(item) {\n return item.lineHeight != null ? item.lineHeight : fontSize(item) + 2;\n}\nfunction lineArray(_) {\n return isArray(_) ? _.length > 1 ? _ : _[0] : _;\n}\nfunction textLines(item) {\n return lineArray(item.lineBreak && item.text && !isArray(item.text) ? item.text.split(item.lineBreak) : item.text);\n}\nfunction multiLineOffset(item) {\n const tl = textLines(item);\n return (isArray(tl) ? tl.length - 1 : 0) * lineHeight(item);\n}\nfunction textValue(item, line) {\n const text = line == null ? '' : (line + '').trim();\n return item.limit > 0 && text.length ? truncate(item, text) : text;\n}\nfunction widthGetter(item) {\n if (textMetrics.width === measureWidth) {\n // we are using canvas\n const currentFont = font(item);\n return text => _measureWidth(text, currentFont);\n } else if (textMetrics.width === estimateWidth) {\n // we are relying on estimates\n const currentFontHeight = fontSize(item);\n return text => _estimateWidth(text, currentFontHeight);\n } else {\n // User defined textMetrics.width function in use (e.g. vl-convert)\n return text => textMetrics.width(item, text);\n }\n}\nfunction truncate(item, text) {\n var limit = +item.limit,\n width = widthGetter(item);\n if (width(text) < limit) return text;\n var ellipsis = item.ellipsis || '\\u2026',\n rtl = item.dir === 'rtl',\n lo = 0,\n hi = text.length,\n mid;\n limit -= width(ellipsis);\n if (rtl) {\n while (lo < hi) {\n mid = lo + hi >>> 1;\n if (width(text.slice(mid)) > limit) lo = mid + 1;else hi = mid;\n }\n return ellipsis + text.slice(lo);\n } else {\n while (lo < hi) {\n mid = 1 + (lo + hi >>> 1);\n if (width(text.slice(0, mid)) < limit) lo = mid;else hi = mid - 1;\n }\n return text.slice(0, lo) + ellipsis;\n }\n}\nfunction fontFamily(item, quote) {\n var font = item.font;\n return (quote && font ? String(font).replace(/\"/g, '\\'') : font) || 'sans-serif';\n}\nfunction font(item, quote) {\n return '' + (item.fontStyle ? item.fontStyle + ' ' : '') + (item.fontVariant ? item.fontVariant + ' ' : '') + (item.fontWeight ? item.fontWeight + ' ' : '') + fontSize(item) + 'px ' + fontFamily(item, quote);\n}\nfunction offset(item) {\n // perform our own font baseline calculation\n // why? not all browsers support SVG 1.1 'alignment-baseline' :(\n // this also ensures consistent layout across renderers\n var baseline = item.baseline,\n h = fontSize(item);\n return Math.round(baseline === 'top' ? 0.79 * h : baseline === 'middle' ? 0.30 * h : baseline === 'bottom' ? -0.21 * h : baseline === 'line-top' ? 0.29 * h + 0.5 * lineHeight(item) : baseline === 'line-bottom' ? 0.29 * h - 0.5 * lineHeight(item) : 0);\n}\n\nconst textAlign = {\n 'left': 'start',\n 'center': 'middle',\n 'right': 'end'\n};\nconst tempBounds = new Bounds();\nfunction anchorPoint(item) {\n var x = item.x || 0,\n y = item.y || 0,\n r = item.radius || 0,\n t;\n if (r) {\n t = (item.theta || 0) - HalfPi;\n x += r * Math.cos(t);\n y += r * Math.sin(t);\n }\n tempBounds.x1 = x;\n tempBounds.y1 = y;\n return tempBounds;\n}\nfunction attr(emit, item) {\n var dx = item.dx || 0,\n dy = (item.dy || 0) + offset(item),\n p = anchorPoint(item),\n x = p.x1,\n y = p.y1,\n a = item.angle || 0,\n t;\n emit('text-anchor', textAlign[item.align] || 'start');\n if (a) {\n t = translate(x, y) + ' ' + rotate(a);\n if (dx || dy) t += ' ' + translate(dx, dy);\n } else {\n t = translate(x + dx, y + dy);\n }\n emit('transform', t);\n}\nfunction bound(bounds, item, mode) {\n var h = textMetrics.height(item),\n a = item.align,\n p = anchorPoint(item),\n x = p.x1,\n y = p.y1,\n dx = item.dx || 0,\n dy = (item.dy || 0) + offset(item) - Math.round(0.8 * h),\n // use 4/5 offset\n tl = textLines(item),\n w;\n\n // get dimensions\n if (isArray(tl)) {\n // multi-line text\n h += lineHeight(item) * (tl.length - 1);\n w = tl.reduce((w, t) => Math.max(w, textMetrics.width(item, t)), 0);\n } else {\n // single-line text\n w = textMetrics.width(item, tl);\n }\n\n // horizontal alignment\n if (a === 'center') {\n dx -= w / 2;\n } else if (a === 'right') {\n dx -= w;\n } else ;\n bounds.set(dx += x, dy += y, dx + w, dy + h);\n if (item.angle && !mode) {\n bounds.rotate(item.angle * DegToRad, x, y);\n } else if (mode === 2) {\n return bounds.rotatedPoints(item.angle * DegToRad, x, y);\n }\n return bounds;\n}\nfunction draw(context, scene, bounds) {\n visit(scene, item => {\n var opacity = item.opacity == null ? 1 : item.opacity,\n p,\n x,\n y,\n i,\n lh,\n tl,\n str;\n if (bounds && !bounds.intersects(item.bounds) ||\n // bounds check\n opacity === 0 || item.fontSize <= 0 || item.text == null || item.text.length === 0) return;\n context.font = font(item);\n context.textAlign = item.align || 'left';\n p = anchorPoint(item);\n x = p.x1, y = p.y1;\n if (item.angle) {\n context.save();\n context.translate(x, y);\n context.rotate(item.angle * DegToRad);\n x = y = 0; // reset x, y\n }\n x += item.dx || 0;\n y += (item.dy || 0) + offset(item);\n tl = textLines(item);\n blend(context, item);\n if (isArray(tl)) {\n lh = lineHeight(item);\n for (i = 0; i < tl.length; ++i) {\n str = textValue(item, tl[i]);\n if (item.fill && fill(context, item, opacity)) {\n context.fillText(str, x, y);\n }\n if (item.stroke && stroke(context, item, opacity)) {\n context.strokeText(str, x, y);\n }\n y += lh;\n }\n } else {\n str = textValue(item, tl);\n if (item.fill && fill(context, item, opacity)) {\n context.fillText(str, x, y);\n }\n if (item.stroke && stroke(context, item, opacity)) {\n context.strokeText(str, x, y);\n }\n }\n if (item.angle) context.restore();\n });\n}\nfunction hit(context, item, x, y, gx, gy) {\n if (item.fontSize <= 0) return false;\n if (!item.angle) return true; // bounds sufficient if no rotation\n\n // project point into space of unrotated bounds\n var p = anchorPoint(item),\n ax = p.x1,\n ay = p.y1,\n b = bound(tempBounds, item, 1),\n a = -item.angle * DegToRad,\n cos = Math.cos(a),\n sin = Math.sin(a),\n px = cos * gx - sin * gy + (ax - cos * ax + sin * ay),\n py = sin * gx + cos * gy + (ay - sin * ax - cos * ay);\n return b.contains(px, py);\n}\nfunction intersectText(item, box) {\n const p = bound(tempBounds, item, 2);\n return intersectBoxLine(box, p[0], p[1], p[2], p[3]) || intersectBoxLine(box, p[0], p[1], p[4], p[5]) || intersectBoxLine(box, p[4], p[5], p[6], p[7]) || intersectBoxLine(box, p[2], p[3], p[6], p[7]);\n}\nvar text = {\n type: 'text',\n tag: 'text',\n nested: false,\n attr: attr,\n bound: bound,\n draw: draw,\n pick: pick$1(hit),\n isect: intersectText\n};\n\nvar trail = markMultiItemPath('trail', trail$1, pickTrail);\n\nvar Marks = {\n arc: arc,\n area: area,\n group: group,\n image: image,\n line: line,\n path: path$2,\n rect: rect,\n rule: rule,\n shape: shape,\n symbol: symbol,\n text: text,\n trail: trail\n};\n\nfunction boundItem (item, func, opt) {\n var type = Marks[item.mark.marktype],\n bound = func || type.bound;\n if (type.nested) item = item.mark;\n return bound(item.bounds || (item.bounds = new Bounds()), item, opt);\n}\n\nvar DUMMY = {\n mark: null\n};\nfunction boundMark (mark, bounds, opt) {\n var type = Marks[mark.marktype],\n bound = type.bound,\n items = mark.items,\n hasItems = items && items.length,\n i,\n n,\n item,\n b;\n if (type.nested) {\n if (hasItems) {\n item = items[0];\n } else {\n // no items, fake it\n DUMMY.mark = mark;\n item = DUMMY;\n }\n b = boundItem(item, bound, opt);\n bounds = bounds && bounds.union(b) || b;\n return bounds;\n }\n bounds = bounds || mark.bounds && mark.bounds.clear() || new Bounds();\n if (hasItems) {\n for (i = 0, n = items.length; i < n; ++i) {\n bounds.union(boundItem(items[i], bound, opt));\n }\n }\n return mark.bounds = bounds;\n}\n\nconst keys = ['marktype', 'name', 'role', 'interactive', 'clip', 'items', 'zindex', 'x', 'y', 'width', 'height', 'align', 'baseline',\n// layout\n'fill', 'fillOpacity', 'opacity', 'blend',\n// fill\n'stroke', 'strokeOpacity', 'strokeWidth', 'strokeCap',\n// stroke\n'strokeDash', 'strokeDashOffset',\n// stroke dash\n'strokeForeground', 'strokeOffset',\n// group\n'startAngle', 'endAngle', 'innerRadius', 'outerRadius',\n// arc\n'cornerRadius', 'padAngle',\n// arc, rect\n'cornerRadiusTopLeft', 'cornerRadiusTopRight',\n// rect, group\n'cornerRadiusBottomLeft', 'cornerRadiusBottomRight', 'interpolate', 'tension', 'orient', 'defined',\n// area, line\n'url', 'aspect', 'smooth',\n// image\n'path', 'scaleX', 'scaleY',\n// path\n'x2', 'y2',\n// rule\n'size', 'shape',\n// symbol\n'text', 'angle', 'theta', 'radius', 'dir', 'dx', 'dy',\n// text\n'ellipsis', 'limit', 'lineBreak', 'lineHeight', 'font', 'fontSize', 'fontWeight', 'fontStyle', 'fontVariant',\n// font\n'description', 'aria', 'ariaRole', 'ariaRoleDescription' // aria\n];\nfunction sceneToJSON(scene, indent) {\n return JSON.stringify(scene, keys, indent);\n}\nfunction sceneFromJSON(json) {\n const scene = typeof json === 'string' ? JSON.parse(json) : json;\n return initialize(scene);\n}\nfunction initialize(scene) {\n var type = scene.marktype,\n items = scene.items,\n parent,\n i,\n n;\n if (items) {\n for (i = 0, n = items.length; i < n; ++i) {\n parent = type ? 'mark' : 'group';\n items[i][parent] = scene;\n if (items[i].zindex) items[i][parent].zdirty = true;\n if ('group' === (type || parent)) initialize(items[i]);\n }\n }\n if (type) boundMark(scene);\n return scene;\n}\n\nclass Scenegraph {\n constructor(scene) {\n if (arguments.length) {\n this.root = sceneFromJSON(scene);\n } else {\n this.root = createMark({\n marktype: 'group',\n name: 'root',\n role: 'frame'\n });\n this.root.items = [new GroupItem(this.root)];\n }\n }\n toJSON(indent) {\n return sceneToJSON(this.root, indent || 0);\n }\n mark(markdef, group, index) {\n group = group || this.root.items[0];\n const mark = createMark(markdef, group);\n group.items[index] = mark;\n if (mark.zindex) mark.group.zdirty = true;\n return mark;\n }\n}\nfunction createMark(def, group) {\n const mark = {\n bounds: new Bounds(),\n clip: !!def.clip,\n group: group,\n interactive: def.interactive === false ? false : true,\n items: [],\n marktype: def.marktype,\n name: def.name || undefined,\n role: def.role || undefined,\n zindex: def.zindex || 0\n };\n\n // add accessibility properties if defined\n if (def.aria != null) {\n mark.aria = def.aria;\n }\n if (def.description) {\n mark.description = def.description;\n }\n return mark;\n}\n\n// create a new DOM element\nfunction domCreate(doc, tag, ns) {\n if (!doc && typeof document !== 'undefined' && document.createElement) {\n doc = document;\n }\n return doc ? ns ? doc.createElementNS(ns, tag) : doc.createElement(tag) : null;\n}\n\n// find first child element with matching tag\nfunction domFind(el, tag) {\n tag = tag.toLowerCase();\n var nodes = el.childNodes,\n i = 0,\n n = nodes.length;\n for (; i < n; ++i) if (nodes[i].tagName.toLowerCase() === tag) {\n return nodes[i];\n }\n}\n\n// retrieve child element at given index\n// create & insert if doesn't exist or if tags do not match\nfunction domChild(el, index, tag, ns) {\n var a = el.childNodes[index],\n b;\n if (!a || a.tagName.toLowerCase() !== tag.toLowerCase()) {\n b = a || null;\n a = domCreate(el.ownerDocument, tag, ns);\n el.insertBefore(a, b);\n }\n return a;\n}\n\n// remove all child elements at or above the given index\nfunction domClear(el, index) {\n var nodes = el.childNodes,\n curr = nodes.length;\n while (curr > index) el.removeChild(nodes[--curr]);\n return el;\n}\n\n// generate css class name for mark\nfunction cssClass(mark) {\n return 'mark-' + mark.marktype + (mark.role ? ' role-' + mark.role : '') + (mark.name ? ' ' + mark.name : '');\n}\n\nfunction point (event, el) {\n const rect = el.getBoundingClientRect();\n return [event.clientX - rect.left - (el.clientLeft || 0), event.clientY - rect.top - (el.clientTop || 0)];\n}\n\nfunction resolveItem (item, event, el, origin) {\n var mark = item && item.mark,\n mdef,\n p;\n if (mark && (mdef = Marks[mark.marktype]).tip) {\n p = point(event, el);\n p[0] -= origin[0];\n p[1] -= origin[1];\n while (item = item.mark.group) {\n p[0] -= item.x || 0;\n p[1] -= item.y || 0;\n }\n item = mdef.tip(mark.items, p);\n }\n return item;\n}\n\nclass Handler {\n /**\n * Create a new Handler instance.\n * @param {object} [customLoader] - Optional loader instance for\n * href URL sanitization. If not specified, a standard loader\n * instance will be generated.\n * @param {function} [customTooltip] - Optional tooltip handler\n * function for custom tooltip display.\n * @constructor\n */\n constructor(customLoader, customTooltip) {\n this._active = null;\n this._handlers = {};\n this._loader = customLoader || loader();\n this._tooltip = customTooltip || defaultTooltip;\n }\n\n /**\n * Initialize a new Handler instance.\n * @param {DOMElement} el - The containing DOM element for the display.\n * @param {Array<number>} origin - The origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {object} [obj] - Optional context object that should serve as\n * the \"this\" context for event callbacks.\n * @return {Handler} - This handler instance.\n */\n initialize(el, origin, obj) {\n this._el = el;\n this._obj = obj || null;\n return this.origin(origin);\n }\n\n /**\n * Returns the parent container element for a visualization.\n * @return {DOMElement} - The containing DOM element.\n */\n element() {\n return this._el;\n }\n\n /**\n * Returns the scene element (e.g., canvas or SVG) of the visualization\n * Subclasses must override if the first child is not the scene element.\n * @return {DOMElement} - The scene (e.g., canvas or SVG) element.\n */\n canvas() {\n return this._el && this._el.firstChild;\n }\n\n /**\n * Get / set the origin coordinates of the visualization.\n */\n origin(origin) {\n if (arguments.length) {\n this._origin = origin || [0, 0];\n return this;\n } else {\n return this._origin.slice();\n }\n }\n\n /**\n * Get / set the scenegraph root.\n */\n scene(scene) {\n if (!arguments.length) return this._scene;\n this._scene = scene;\n return this;\n }\n\n /**\n * Add an event handler. Subclasses should override this method.\n */\n on( /*type, handler*/) {}\n\n /**\n * Remove an event handler. Subclasses should override this method.\n */\n off( /*type, handler*/) {}\n\n /**\n * Utility method for finding the array index of an event handler.\n * @param {Array} h - An array of registered event handlers.\n * @param {string} type - The event type.\n * @param {function} handler - The event handler instance to find.\n * @return {number} - The handler's array index or -1 if not registered.\n */\n _handlerIndex(h, type, handler) {\n for (let i = h ? h.length : 0; --i >= 0;) {\n if (h[i].type === type && (!handler || h[i].handler === handler)) {\n return i;\n }\n }\n return -1;\n }\n\n /**\n * Returns an array with registered event handlers.\n * @param {string} [type] - The event type to query. Any annotations\n * are ignored; for example, for the argument \"click.foo\", \".foo\" will\n * be ignored and the method returns all \"click\" handlers. If type is\n * null or unspecified, this method returns handlers for all types.\n * @return {Array} - A new array containing all registered event handlers.\n */\n handlers(type) {\n const h = this._handlers,\n a = [];\n if (type) {\n a.push(...h[this.eventName(type)]);\n } else {\n for (const k in h) {\n a.push(...h[k]);\n }\n }\n return a;\n }\n\n /**\n * Parses an event name string to return the specific event type.\n * For example, given \"click.foo\" returns \"click\"\n * @param {string} name - The input event type string.\n * @return {string} - A string with the event type only.\n */\n eventName(name) {\n const i = name.indexOf('.');\n return i < 0 ? name : name.slice(0, i);\n }\n\n /**\n * Handle hyperlink navigation in response to an item.href value.\n * @param {Event} event - The event triggering hyperlink navigation.\n * @param {Item} item - The scenegraph item.\n * @param {string} href - The URL to navigate to.\n */\n handleHref(event, item, href) {\n this._loader.sanitize(href, {\n context: 'href'\n }).then(opt => {\n const e = new MouseEvent(event.type, event),\n a = domCreate(null, 'a');\n for (const name in opt) a.setAttribute(name, opt[name]);\n a.dispatchEvent(e);\n }).catch(() => {});\n }\n\n /**\n * Handle tooltip display in response to an item.tooltip value.\n * @param {Event} event - The event triggering tooltip display.\n * @param {Item} item - The scenegraph item.\n * @param {boolean} show - A boolean flag indicating whether\n * to show or hide a tooltip for the given item.\n */\n handleTooltip(event, item, show) {\n if (item && item.tooltip != null) {\n item = resolveItem(item, event, this.canvas(), this._origin);\n const value = show && item && item.tooltip || null;\n this._tooltip.call(this._obj, this, event, item, value);\n }\n }\n\n /**\n * Returns the size of a scenegraph item and its position relative\n * to the viewport.\n * @param {Item} item - The scenegraph item.\n * @return {object} - A bounding box object (compatible with the\n * DOMRect type) consisting of x, y, width, heigh, top, left,\n * right, and bottom properties.\n */\n getItemBoundingClientRect(item) {\n const el = this.canvas();\n if (!el) return;\n const rect = el.getBoundingClientRect(),\n origin = this._origin,\n bounds = item.bounds,\n width = bounds.width(),\n height = bounds.height();\n let x = bounds.x1 + origin[0] + rect.left,\n y = bounds.y1 + origin[1] + rect.top;\n\n // translate coordinate for each parent group\n while (item.mark && (item = item.mark.group)) {\n x += item.x || 0;\n y += item.y || 0;\n }\n\n // return DOMRect-compatible bounding box\n return {\n x,\n y,\n width,\n height,\n left: x,\n top: y,\n right: x + width,\n bottom: y + height\n };\n }\n}\n\n// The default tooltip display handler.\n// Sets the HTML title attribute on the visualization container.\nfunction defaultTooltip(handler, event, item, value) {\n handler.element().setAttribute('title', value || '');\n}\n\nclass Renderer {\n /**\n * Create a new Renderer instance.\n * @param {object} [loader] - Optional loader instance for\n * image and href URL sanitization. If not specified, a\n * standard loader instance will be generated.\n * @constructor\n */\n constructor(loader) {\n this._el = null;\n this._bgcolor = null;\n this._loader = new ResourceLoader(loader);\n }\n\n /**\n * Initialize a new Renderer instance.\n * @param {DOMElement} el - The containing DOM element for the display.\n * @param {number} width - The coordinate width of the display, in pixels.\n * @param {number} height - The coordinate height of the display, in pixels.\n * @param {Array<number>} origin - The origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {Renderer} - This renderer instance.\n */\n initialize(el, width, height, origin, scaleFactor) {\n this._el = el;\n return this.resize(width, height, origin, scaleFactor);\n }\n\n /**\n * Returns the parent container element for a visualization.\n * @return {DOMElement} - The containing DOM element.\n */\n element() {\n return this._el;\n }\n\n /**\n * Returns the scene element (e.g., canvas or SVG) of the visualization\n * Subclasses must override if the first child is not the scene element.\n * @return {DOMElement} - The scene (e.g., canvas or SVG) element.\n */\n canvas() {\n return this._el && this._el.firstChild;\n }\n\n /**\n * Get / set the background color.\n */\n background(bgcolor) {\n if (arguments.length === 0) return this._bgcolor;\n this._bgcolor = bgcolor;\n return this;\n }\n\n /**\n * Resize the display.\n * @param {number} width - The new coordinate width of the display, in pixels.\n * @param {number} height - The new coordinate height of the display, in pixels.\n * @param {Array<number>} origin - The new origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {Renderer} - This renderer instance;\n */\n resize(width, height, origin, scaleFactor) {\n this._width = width;\n this._height = height;\n this._origin = origin || [0, 0];\n this._scale = scaleFactor || 1;\n return this;\n }\n\n /**\n * Report a dirty item whose bounds should be redrawn.\n * This base class method does nothing. Subclasses that perform\n * incremental should implement this method.\n * @param {Item} item - The dirty item whose bounds should be redrawn.\n */\n dirty( /*item*/) {}\n\n /**\n * Render an input scenegraph, potentially with a set of dirty items.\n * This method will perform an immediate rendering with available resources.\n * The renderer may also need to perform image loading to perform a complete\n * render. This process can lead to asynchronous re-rendering of the scene\n * after this method returns. To receive notification when rendering is\n * complete, use the renderAsync method instead.\n * @param {object} scene - The root mark of a scenegraph to render.\n * @param {Array} markTypes - Array of the mark types to render.\n * If undefined, render all mark types\n * @return {Renderer} - This renderer instance.\n */\n render(scene, markTypes) {\n const r = this;\n\n // bind arguments into a render call, and cache it\n // this function may be subsequently called for async redraw\n r._call = function () {\n r._render(scene, markTypes);\n };\n\n // invoke the renderer\n r._call();\n\n // clear the cached call for garbage collection\n // async redraws will stash their own copy\n r._call = null;\n return r;\n }\n\n /**\n * Internal rendering method. Renderer subclasses should override this\n * method to actually perform rendering.\n * @param {object} scene - The root mark of a scenegraph to render.\n * @param {Array} markTypes - Array of the mark types to render.\n * If undefined, render all mark types\n */\n _render( /*scene, markTypes*/\n ) {\n // subclasses to override\n }\n\n /**\n * Asynchronous rendering method. Similar to render, but returns a Promise\n * that resolves when all rendering is completed. Sometimes a renderer must\n * perform image loading to get a complete rendering. The returned\n * Promise will not resolve until this process completes.\n * @param {object} scene - The root mark of a scenegraph to render.\n * @param {Array} markTypes - Array of the mark types to render.\n * If undefined, render all mark types\n * @return {Promise} - A Promise that resolves when rendering is complete.\n */\n renderAsync(scene, markTypes) {\n const r = this.render(scene, markTypes);\n return this._ready ? this._ready.then(() => r) : Promise.resolve(r);\n }\n\n /**\n * Internal method for asynchronous resource loading.\n * Proxies method calls to the ImageLoader, and tracks loading\n * progress to invoke a re-render once complete.\n * @param {string} method - The method name to invoke on the ImageLoader.\n * @param {string} uri - The URI for the requested resource.\n * @return {Promise} - A Promise that resolves to the requested resource.\n */\n _load(method, uri) {\n var r = this,\n p = r._loader[method](uri);\n if (!r._ready) {\n // re-render the scene when loading completes\n const call = r._call;\n r._ready = r._loader.ready().then(redraw => {\n if (redraw) call();\n r._ready = null;\n });\n }\n return p;\n }\n\n /**\n * Sanitize a URL to include as a hyperlink in the rendered scene.\n * This method proxies a call to ImageLoader.sanitizeURL, but also tracks\n * image loading progress and invokes a re-render once complete.\n * @param {string} uri - The URI string to sanitize.\n * @return {Promise} - A Promise that resolves to the sanitized URL.\n */\n sanitizeURL(uri) {\n return this._load('sanitizeURL', uri);\n }\n\n /**\n * Requests an image to include in the rendered scene.\n * This method proxies a call to ImageLoader.loadImage, but also tracks\n * image loading progress and invokes a re-render once complete.\n * @param {string} uri - The URI string of the image.\n * @return {Promise} - A Promise that resolves to the loaded Image.\n */\n loadImage(uri) {\n return this._load('loadImage', uri);\n }\n}\n\nconst KeyDownEvent = 'keydown';\nconst KeyPressEvent = 'keypress';\nconst KeyUpEvent = 'keyup';\nconst DragEnterEvent = 'dragenter';\nconst DragLeaveEvent = 'dragleave';\nconst DragOverEvent = 'dragover';\nconst PointerDownEvent = 'pointerdown';\nconst PointerUpEvent = 'pointerup';\nconst PointerMoveEvent = 'pointermove';\nconst PointerOutEvent = 'pointerout';\nconst PointerOverEvent = 'pointerover';\nconst MouseDownEvent = 'mousedown';\nconst MouseUpEvent = 'mouseup';\nconst MouseMoveEvent = 'mousemove';\nconst MouseOutEvent = 'mouseout';\nconst MouseOverEvent = 'mouseover';\nconst ClickEvent = 'click';\nconst DoubleClickEvent = 'dblclick';\nconst WheelEvent = 'wheel';\nconst MouseWheelEvent = 'mousewheel';\nconst TouchStartEvent = 'touchstart';\nconst TouchMoveEvent = 'touchmove';\nconst TouchEndEvent = 'touchend';\nconst Events = [KeyDownEvent, KeyPressEvent, KeyUpEvent, DragEnterEvent, DragLeaveEvent, DragOverEvent, PointerDownEvent, PointerUpEvent, PointerMoveEvent, PointerOutEvent, PointerOverEvent, MouseDownEvent, MouseUpEvent, MouseMoveEvent, MouseOutEvent, MouseOverEvent, ClickEvent, DoubleClickEvent, WheelEvent, MouseWheelEvent, TouchStartEvent, TouchMoveEvent, TouchEndEvent];\nconst TooltipShowEvent = PointerMoveEvent;\nconst TooltipHideEvent = MouseOutEvent;\nconst HrefEvent = ClickEvent;\n\nclass CanvasHandler extends Handler {\n constructor(loader, tooltip) {\n super(loader, tooltip);\n this._down = null;\n this._touch = null;\n this._first = true;\n this._events = {};\n\n // supported events\n this.events = Events;\n this.pointermove = move([PointerMoveEvent, MouseMoveEvent], [PointerOverEvent, MouseOverEvent], [PointerOutEvent, MouseOutEvent]);\n this.dragover = move([DragOverEvent], [DragEnterEvent], [DragLeaveEvent]), this.pointerout = inactive([PointerOutEvent, MouseOutEvent]);\n this.dragleave = inactive([DragLeaveEvent]);\n }\n initialize(el, origin, obj) {\n this._canvas = el && domFind(el, 'canvas');\n\n // add minimal events required for proper state management\n [ClickEvent, MouseDownEvent, PointerDownEvent, PointerMoveEvent, PointerOutEvent, DragLeaveEvent].forEach(type => eventListenerCheck(this, type));\n return super.initialize(el, origin, obj);\n }\n\n // return the backing canvas instance\n canvas() {\n return this._canvas;\n }\n\n // retrieve the current canvas context\n context() {\n return this._canvas.getContext('2d');\n }\n\n // to keep old versions of firefox happy\n DOMMouseScroll(evt) {\n this.fire(MouseWheelEvent, evt);\n }\n pointerdown(evt) {\n this._down = this._active;\n this.fire(PointerDownEvent, evt);\n }\n mousedown(evt) {\n this._down = this._active;\n this.fire(MouseDownEvent, evt);\n }\n click(evt) {\n if (this._down === this._active) {\n this.fire(ClickEvent, evt);\n this._down = null;\n }\n }\n touchstart(evt) {\n this._touch = this.pickEvent(evt.changedTouches[0]);\n if (this._first) {\n this._active = this._touch;\n this._first = false;\n }\n this.fire(TouchStartEvent, evt, true);\n }\n touchmove(evt) {\n this.fire(TouchMoveEvent, evt, true);\n }\n touchend(evt) {\n this.fire(TouchEndEvent, evt, true);\n this._touch = null;\n }\n\n // fire an event\n fire(type, evt, touch) {\n const a = touch ? this._touch : this._active,\n h = this._handlers[type];\n\n // set event type relative to scenegraph items\n evt.vegaType = type;\n\n // handle hyperlinks and tooltips first\n if (type === HrefEvent && a && a.href) {\n this.handleHref(evt, a, a.href);\n } else if (type === TooltipShowEvent || type === TooltipHideEvent) {\n this.handleTooltip(evt, a, type !== TooltipHideEvent);\n }\n\n // invoke all registered handlers\n if (h) {\n for (let i = 0, len = h.length; i < len; ++i) {\n h[i].handler.call(this._obj, evt, a);\n }\n }\n }\n\n // add an event handler\n on(type, handler) {\n const name = this.eventName(type),\n h = this._handlers,\n i = this._handlerIndex(h[name], type, handler);\n if (i < 0) {\n eventListenerCheck(this, type);\n (h[name] || (h[name] = [])).push({\n type: type,\n handler: handler\n });\n }\n return this;\n }\n\n // remove an event handler\n off(type, handler) {\n const name = this.eventName(type),\n h = this._handlers[name],\n i = this._handlerIndex(h, type, handler);\n if (i >= 0) {\n h.splice(i, 1);\n }\n return this;\n }\n pickEvent(evt) {\n const p = point(evt, this._canvas),\n o = this._origin;\n return this.pick(this._scene, p[0], p[1], p[0] - o[0], p[1] - o[1]);\n }\n\n // find the scenegraph item at the current pointer position\n // x, y -- the absolute x, y pointer coordinates on the canvas element\n // gx, gy -- the relative coordinates within the current group\n pick(scene, x, y, gx, gy) {\n const g = this.context(),\n mark = Marks[scene.marktype];\n return mark.pick.call(this, g, scene, x, y, gx, gy);\n }\n}\nconst eventBundle = type => type === TouchStartEvent || type === TouchMoveEvent || type === TouchEndEvent ? [TouchStartEvent, TouchMoveEvent, TouchEndEvent] : [type];\n\n// lazily add listeners to the canvas as needed\nfunction eventListenerCheck(handler, type) {\n eventBundle(type).forEach(_ => addEventListener(handler, _));\n}\nfunction addEventListener(handler, type) {\n const canvas = handler.canvas();\n if (canvas && !handler._events[type]) {\n handler._events[type] = 1;\n canvas.addEventListener(type, handler[type] ? evt => handler[type](evt) : evt => handler.fire(type, evt));\n }\n}\nfunction fireAll(handler, types, event) {\n types.forEach(type => handler.fire(type, event));\n}\nfunction move(moveEvents, overEvents, outEvents) {\n return function (evt) {\n const a = this._active,\n p = this.pickEvent(evt);\n if (p === a) {\n // active item and picked item are the same\n fireAll(this, moveEvents, evt); // fire move\n } else {\n // active item and picked item are different\n if (!a || !a.exit) {\n // fire out for prior active item\n // suppress if active item was removed from scene\n fireAll(this, outEvents, evt);\n }\n this._active = p; // set new active item\n fireAll(this, overEvents, evt); // fire over for new active item\n fireAll(this, moveEvents, evt); // fire move for new active item\n }\n };\n}\nfunction inactive(types) {\n return function (evt) {\n fireAll(this, types, evt);\n this._active = null;\n };\n}\n\nfunction devicePixelRatio() {\n return typeof window !== 'undefined' ? window.devicePixelRatio || 1 : 1;\n}\nfunction resize (canvas, width, height, origin, scaleFactor, opt) {\n const inDOM = typeof HTMLElement !== 'undefined' && canvas instanceof HTMLElement && canvas.parentNode != null,\n context = canvas.getContext('2d'),\n ratio = inDOM ? devicePixelRatio() : scaleFactor;\n canvas.width = width * ratio;\n canvas.height = height * ratio;\n for (const key in opt) {\n context[key] = opt[key];\n }\n if (inDOM && ratio !== 1) {\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n context.pixelRatio = ratio;\n context.setTransform(ratio, 0, 0, ratio, ratio * origin[0], ratio * origin[1]);\n return canvas;\n}\n\nclass CanvasRenderer extends Renderer {\n constructor(loader) {\n super(loader);\n this._options = {};\n this._redraw = false;\n this._dirty = new Bounds();\n this._tempb = new Bounds();\n }\n initialize(el, width, height, origin, scaleFactor, options) {\n this._options = options || {};\n this._canvas = this._options.externalContext ? null : canvas(1, 1, this._options.type); // instantiate a small canvas\n\n if (el && this._canvas) {\n domClear(el, 0).appendChild(this._canvas);\n this._canvas.setAttribute('class', 'marks');\n }\n\n // this method will invoke resize to size the canvas appropriately\n return super.initialize(el, width, height, origin, scaleFactor);\n }\n resize(width, height, origin, scaleFactor) {\n super.resize(width, height, origin, scaleFactor);\n if (this._canvas) {\n // configure canvas size and transform\n resize(this._canvas, this._width, this._height, this._origin, this._scale, this._options.context);\n } else {\n // external context needs to be scaled and positioned to origin\n const ctx = this._options.externalContext;\n if (!ctx) error('CanvasRenderer is missing a valid canvas or context');\n ctx.scale(this._scale, this._scale);\n ctx.translate(this._origin[0], this._origin[1]);\n }\n this._redraw = true;\n return this;\n }\n canvas() {\n return this._canvas;\n }\n context() {\n return this._options.externalContext || (this._canvas ? this._canvas.getContext('2d') : null);\n }\n dirty(item) {\n const b = this._tempb.clear().union(item.bounds);\n let g = item.mark.group;\n while (g) {\n b.translate(g.x || 0, g.y || 0);\n g = g.mark.group;\n }\n this._dirty.union(b);\n }\n _render(scene, markTypes) {\n const g = this.context(),\n o = this._origin,\n w = this._width,\n h = this._height,\n db = this._dirty,\n vb = viewBounds(o, w, h);\n\n // setup\n g.save();\n const b = this._redraw || db.empty() ? (this._redraw = false, vb.expand(1)) : clipToBounds(g, vb.intersect(db), o);\n this.clear(-o[0], -o[1], w, h);\n\n // render\n this.draw(g, scene, b, markTypes);\n\n // takedown\n g.restore();\n db.clear();\n return this;\n }\n draw(ctx, scene, bounds, markTypes) {\n if (scene.marktype !== 'group' && markTypes != null && !markTypes.includes(scene.marktype)) {\n return;\n }\n const mark = Marks[scene.marktype];\n if (scene.clip) clip(ctx, scene);\n mark.draw.call(this, ctx, scene, bounds, markTypes);\n if (scene.clip) ctx.restore();\n }\n clear(x, y, w, h) {\n const opt = this._options,\n g = this.context();\n if (opt.type !== 'pdf' && !opt.externalContext) {\n // calling clear rect voids vector output in pdf mode\n // and could remove external context content (#2615)\n g.clearRect(x, y, w, h);\n }\n if (this._bgcolor != null) {\n g.fillStyle = this._bgcolor;\n g.fillRect(x, y, w, h);\n }\n }\n}\nconst viewBounds = (origin, width, height) => new Bounds().set(0, 0, width, height).translate(-origin[0], -origin[1]);\nfunction clipToBounds(g, b, origin) {\n // expand bounds by 1 pixel, then round to pixel boundaries\n b.expand(1).round();\n\n // align to base pixel grid in case of non-integer scaling (#2425)\n if (g.pixelRatio % 1) {\n b.scale(g.pixelRatio).round().scale(1 / g.pixelRatio);\n }\n\n // to avoid artifacts translate if origin has fractional pixels\n b.translate(-(origin[0] % 1), -(origin[1] % 1));\n\n // set clip path\n g.beginPath();\n g.rect(b.x1, b.y1, b.width(), b.height());\n g.clip();\n return b;\n}\n\nclass SVGHandler extends Handler {\n constructor(loader, tooltip) {\n super(loader, tooltip);\n const h = this;\n h._hrefHandler = listener(h, (evt, item) => {\n if (item && item.href) h.handleHref(evt, item, item.href);\n });\n h._tooltipHandler = listener(h, (evt, item) => {\n h.handleTooltip(evt, item, evt.type !== TooltipHideEvent);\n });\n }\n initialize(el, origin, obj) {\n let svg = this._svg;\n if (svg) {\n svg.removeEventListener(HrefEvent, this._hrefHandler);\n svg.removeEventListener(TooltipShowEvent, this._tooltipHandler);\n svg.removeEventListener(TooltipHideEvent, this._tooltipHandler);\n }\n this._svg = svg = el && domFind(el, 'svg');\n if (svg) {\n svg.addEventListener(HrefEvent, this._hrefHandler);\n svg.addEventListener(TooltipShowEvent, this._tooltipHandler);\n svg.addEventListener(TooltipHideEvent, this._tooltipHandler);\n }\n return super.initialize(el, origin, obj);\n }\n canvas() {\n return this._svg;\n }\n\n // add an event handler\n on(type, handler) {\n const name = this.eventName(type),\n h = this._handlers,\n i = this._handlerIndex(h[name], type, handler);\n if (i < 0) {\n const x = {\n type,\n handler,\n listener: listener(this, handler)\n };\n (h[name] || (h[name] = [])).push(x);\n if (this._svg) {\n this._svg.addEventListener(name, x.listener);\n }\n }\n return this;\n }\n\n // remove an event handler\n off(type, handler) {\n const name = this.eventName(type),\n h = this._handlers[name],\n i = this._handlerIndex(h, type, handler);\n if (i >= 0) {\n if (this._svg) {\n this._svg.removeEventListener(name, h[i].listener);\n }\n h.splice(i, 1);\n }\n return this;\n }\n}\n\n// wrap an event listener for the SVG DOM\nconst listener = (context, handler) => evt => {\n let item = evt.target.__data__;\n item = Array.isArray(item) ? item[0] : item;\n evt.vegaType = evt.type;\n handler.call(context._obj, evt, item);\n};\n\nconst ARIA_HIDDEN = 'aria-hidden';\nconst ARIA_LABEL = 'aria-label';\nconst ARIA_ROLE = 'role';\nconst ARIA_ROLEDESCRIPTION = 'aria-roledescription';\nconst GRAPHICS_OBJECT = 'graphics-object';\nconst GRAPHICS_SYMBOL = 'graphics-symbol';\nconst bundle = (role, roledesc, label) => ({\n [ARIA_ROLE]: role,\n [ARIA_ROLEDESCRIPTION]: roledesc,\n [ARIA_LABEL]: label || undefined\n});\n\n// these roles are covered by related roles\n// we can ignore them, no need to generate attributes\nconst AriaIgnore = toSet(['axis-domain', 'axis-grid', 'axis-label', 'axis-tick', 'axis-title', 'legend-band', 'legend-entry', 'legend-gradient', 'legend-label', 'legend-title', 'legend-symbol', 'title']);\n\n// aria attribute generators for guide roles\nconst AriaGuides = {\n 'axis': {\n desc: 'axis',\n caption: axisCaption\n },\n 'legend': {\n desc: 'legend',\n caption: legendCaption\n },\n 'title-text': {\n desc: 'title',\n caption: item => `Title text '${titleCaption(item)}'`\n },\n 'title-subtitle': {\n desc: 'subtitle',\n caption: item => `Subtitle text '${titleCaption(item)}'`\n }\n};\n\n// aria properties generated for mark item encoding channels\nconst AriaEncode = {\n ariaRole: ARIA_ROLE,\n ariaRoleDescription: ARIA_ROLEDESCRIPTION,\n description: ARIA_LABEL\n};\nfunction ariaItemAttributes(emit, item) {\n const hide = item.aria === false;\n emit(ARIA_HIDDEN, hide || undefined);\n if (hide || item.description == null) {\n for (const prop in AriaEncode) {\n emit(AriaEncode[prop], undefined);\n }\n } else {\n const type = item.mark.marktype;\n emit(ARIA_LABEL, item.description);\n emit(ARIA_ROLE, item.ariaRole || (type === 'group' ? GRAPHICS_OBJECT : GRAPHICS_SYMBOL));\n emit(ARIA_ROLEDESCRIPTION, item.ariaRoleDescription || `${type} mark`);\n }\n}\nfunction ariaMarkAttributes(mark) {\n return mark.aria === false ? {\n [ARIA_HIDDEN]: true\n } : AriaIgnore[mark.role] ? null : AriaGuides[mark.role] ? ariaGuide(mark, AriaGuides[mark.role]) : ariaMark(mark);\n}\nfunction ariaMark(mark) {\n const type = mark.marktype;\n const recurse = type === 'group' || type === 'text' || mark.items.some(_ => _.description != null && _.aria !== false);\n return bundle(recurse ? GRAPHICS_OBJECT : GRAPHICS_SYMBOL, `${type} mark container`, mark.description);\n}\nfunction ariaGuide(mark, opt) {\n try {\n const item = mark.items[0],\n caption = opt.caption || (() => '');\n return bundle(opt.role || GRAPHICS_SYMBOL, opt.desc, item.description || caption(item));\n } catch (err) {\n return null;\n }\n}\nfunction titleCaption(item) {\n return array(item.text).join(' ');\n}\nfunction axisCaption(item) {\n const datum = item.datum,\n orient = item.orient,\n title = datum.title ? extractTitle(item) : null,\n ctx = item.context,\n scale = ctx.scales[datum.scale].value,\n locale = ctx.dataflow.locale(),\n type = scale.type,\n xy = orient === 'left' || orient === 'right' ? 'Y' : 'X';\n return `${xy}-axis` + (title ? ` titled '${title}'` : '') + ` for a ${isDiscrete(type) ? 'discrete' : type} scale` + ` with ${domainCaption(locale, scale, item)}`;\n}\nfunction legendCaption(item) {\n const datum = item.datum,\n title = datum.title ? extractTitle(item) : null,\n type = `${datum.type || ''} legend`.trim(),\n scales = datum.scales,\n props = Object.keys(scales),\n ctx = item.context,\n scale = ctx.scales[scales[props[0]]].value,\n locale = ctx.dataflow.locale();\n return capitalize(type) + (title ? ` titled '${title}'` : '') + ` for ${channelCaption(props)}` + ` with ${domainCaption(locale, scale, item)}`;\n}\nfunction extractTitle(item) {\n try {\n return array(peek(item.items).items[0].text).join(' ');\n } catch (err) {\n return null;\n }\n}\nfunction channelCaption(props) {\n props = props.map(p => p + (p === 'fill' || p === 'stroke' ? ' color' : ''));\n return props.length < 2 ? props[0] : props.slice(0, -1).join(', ') + ' and ' + peek(props);\n}\nfunction capitalize(s) {\n return s.length ? s[0].toUpperCase() + s.slice(1) : s;\n}\n\nconst innerText = val => (val + '').replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\nconst attrText = val => innerText(val).replace(/\"/g, '"').replace(/\\t/g, '	').replace(/\\n/g, '
').replace(/\\r/g, '
');\nfunction markup() {\n let buf = '',\n outer = '',\n inner = '';\n const stack = [],\n clear = () => outer = inner = '',\n push = tag => {\n if (outer) {\n buf += `${outer}>${inner}`;\n clear();\n }\n stack.push(tag);\n },\n attr = (name, value) => {\n if (value != null) outer += ` ${name}=\"${attrText(value)}\"`;\n return m;\n },\n m = {\n open(tag) {\n push(tag);\n outer = '<' + tag;\n for (var _len = arguments.length, attrs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n attrs[_key - 1] = arguments[_key];\n }\n for (const set of attrs) {\n for (const key in set) attr(key, set[key]);\n }\n return m;\n },\n close() {\n const tag = stack.pop();\n if (outer) {\n buf += outer + (inner ? `>${inner}</${tag}>` : '/>');\n } else {\n buf += `</${tag}>`;\n }\n clear();\n return m;\n },\n attr,\n text: t => (inner += innerText(t), m),\n toString: () => buf\n };\n return m;\n}\nconst serializeXML = node => _serialize(markup(), node) + '';\nfunction _serialize(m, node) {\n m.open(node.tagName);\n if (node.hasAttributes()) {\n const attrs = node.attributes,\n n = attrs.length;\n for (let i = 0; i < n; ++i) {\n m.attr(attrs[i].name, attrs[i].value);\n }\n }\n if (node.hasChildNodes()) {\n const children = node.childNodes;\n for (const child of children) {\n child.nodeType === 3 // text node\n ? m.text(child.nodeValue) : _serialize(m, child);\n }\n }\n return m.close();\n}\n\nconst stylesAttr = {\n fill: 'fill',\n fillOpacity: 'fill-opacity',\n stroke: 'stroke',\n strokeOpacity: 'stroke-opacity',\n strokeWidth: 'stroke-width',\n strokeCap: 'stroke-linecap',\n strokeJoin: 'stroke-linejoin',\n strokeDash: 'stroke-dasharray',\n strokeDashOffset: 'stroke-dashoffset',\n strokeMiterLimit: 'stroke-miterlimit',\n opacity: 'opacity'\n};\nconst stylesCss = {\n blend: 'mix-blend-mode'\n};\n\n// ensure miter limit default is consistent with canvas (#2498)\nconst rootAttributes = {\n 'fill': 'none',\n 'stroke-miterlimit': 10\n};\n\nconst RootIndex = 0,\n xmlns = 'http://www.w3.org/2000/xmlns/',\n svgns = metadata.xmlns;\nclass SVGRenderer extends Renderer {\n constructor(loader) {\n super(loader);\n this._dirtyID = 0;\n this._dirty = [];\n this._svg = null;\n this._root = null;\n this._defs = null;\n }\n\n /**\n * Initialize a new SVGRenderer instance.\n * @param {DOMElement} el - The containing DOM element for the display.\n * @param {number} width - The coordinate width of the display, in pixels.\n * @param {number} height - The coordinate height of the display, in pixels.\n * @param {Array<number>} origin - The origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {SVGRenderer} - This renderer instance.\n */\n initialize(el, width, height, origin, scaleFactor) {\n // create the svg definitions cache\n this._defs = {};\n this._clearDefs();\n if (el) {\n this._svg = domChild(el, 0, 'svg', svgns);\n this._svg.setAttributeNS(xmlns, 'xmlns', svgns);\n this._svg.setAttributeNS(xmlns, 'xmlns:xlink', metadata['xmlns:xlink']);\n this._svg.setAttribute('version', metadata['version']);\n this._svg.setAttribute('class', 'marks');\n domClear(el, 1);\n\n // set the svg root group\n this._root = domChild(this._svg, RootIndex, 'g', svgns);\n setAttributes(this._root, rootAttributes);\n\n // ensure no additional child elements\n domClear(this._svg, RootIndex + 1);\n }\n\n // set background color if defined\n this.background(this._bgcolor);\n return super.initialize(el, width, height, origin, scaleFactor);\n }\n\n /**\n * Get / set the background color.\n */\n background(bgcolor) {\n if (arguments.length && this._svg) {\n this._svg.style.setProperty('background-color', bgcolor);\n }\n return super.background(...arguments);\n }\n\n /**\n * Resize the display.\n * @param {number} width - The new coordinate width of the display, in pixels.\n * @param {number} height - The new coordinate height of the display, in pixels.\n * @param {Array<number>} origin - The new origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {SVGRenderer} - This renderer instance;\n */\n resize(width, height, origin, scaleFactor) {\n super.resize(width, height, origin, scaleFactor);\n if (this._svg) {\n setAttributes(this._svg, {\n width: this._width * this._scale,\n height: this._height * this._scale,\n viewBox: `0 0 ${this._width} ${this._height}`\n });\n this._root.setAttribute('transform', `translate(${this._origin})`);\n }\n this._dirty = [];\n return this;\n }\n\n /**\n * Returns the SVG element of the visualization.\n * @return {DOMElement} - The SVG element.\n */\n canvas() {\n return this._svg;\n }\n\n /**\n * Returns an SVG text string for the rendered content,\n * or null if this renderer is currently headless.\n */\n svg() {\n const svg = this._svg,\n bg = this._bgcolor;\n if (!svg) return null;\n let node;\n if (bg) {\n svg.removeAttribute('style');\n node = domChild(svg, RootIndex, 'rect', svgns);\n setAttributes(node, {\n width: this._width,\n height: this._height,\n fill: bg\n });\n }\n const text = serializeXML(svg);\n if (bg) {\n svg.removeChild(node);\n this._svg.style.setProperty('background-color', bg);\n }\n return text;\n }\n\n /**\n * Internal rendering method.\n * @param {object} scene - The root mark of a scenegraph to render.\n * @param {Array} markTypes - Array of the mark types to render.\n * If undefined, render all mark types\n */\n _render(scene, markTypes) {\n // perform spot updates and re-render markup\n if (this._dirtyCheck()) {\n if (this._dirtyAll) this._clearDefs();\n this.mark(this._root, scene, undefined, markTypes);\n domClear(this._root, 1);\n }\n this.defs();\n this._dirty = [];\n ++this._dirtyID;\n return this;\n }\n\n // -- Manage rendering of items marked as dirty --\n\n /**\n * Flag a mark item as dirty.\n * @param {Item} item - The mark item.\n */\n dirty(item) {\n if (item.dirty !== this._dirtyID) {\n item.dirty = this._dirtyID;\n this._dirty.push(item);\n }\n }\n\n /**\n * Check if a mark item is considered dirty.\n * @param {Item} item - The mark item.\n */\n isDirty(item) {\n return this._dirtyAll || !item._svg || !item._svg.ownerSVGElement || item.dirty === this._dirtyID;\n }\n\n /**\n * Internal method to check dirty status and, if possible,\n * make targetted updates without a full rendering pass.\n */\n _dirtyCheck() {\n this._dirtyAll = true;\n const items = this._dirty;\n if (!items.length || !this._dirtyID) return true;\n const id = ++this._dirtyID;\n let item, mark, type, mdef, i, n, o;\n for (i = 0, n = items.length; i < n; ++i) {\n item = items[i];\n mark = item.mark;\n if (mark.marktype !== type) {\n // memoize mark instance lookup\n type = mark.marktype;\n mdef = Marks[type];\n }\n if (mark.zdirty && mark.dirty !== id) {\n this._dirtyAll = false;\n dirtyParents(item, id);\n mark.items.forEach(i => {\n i.dirty = id;\n });\n }\n if (mark.zdirty) continue; // handle in standard drawing pass\n\n if (item.exit) {\n // EXIT\n if (mdef.nested && mark.items.length) {\n // if nested mark with remaining points, update instead\n o = mark.items[0];\n if (o._svg) this._update(mdef, o._svg, o);\n } else if (item._svg) {\n // otherwise remove from DOM\n o = item._svg.parentNode;\n if (o) o.removeChild(item._svg);\n }\n item._svg = null;\n continue;\n }\n item = mdef.nested ? mark.items[0] : item;\n if (item._update === id) continue; // already visited\n\n if (!item._svg || !item._svg.ownerSVGElement) {\n // ENTER\n this._dirtyAll = false;\n dirtyParents(item, id);\n } else {\n // IN-PLACE UPDATE\n this._update(mdef, item._svg, item);\n }\n item._update = id;\n }\n return !this._dirtyAll;\n }\n\n // -- Construct & maintain scenegraph to SVG mapping ---\n\n /**\n * Render a set of mark items.\n * @param {SVGElement} el - The parent element in the SVG tree.\n * @param {object} scene - The mark parent to render.\n * @param {SVGElement} prev - The previous sibling in the SVG tree.\n * @param {Array} markTypes - Array of the mark types to render.\n * If undefined, render all mark types\n */\n mark(el, scene, prev, markTypes) {\n if (!this.isDirty(scene)) {\n return scene._svg;\n }\n const svg = this._svg,\n markType = scene.marktype,\n mdef = Marks[markType],\n events = scene.interactive === false ? 'none' : null,\n isGroup = mdef.tag === 'g';\n const parent = bind(scene, el, prev, 'g', svg);\n if (markType !== 'group' && markTypes != null && !markTypes.includes(markType)) {\n domClear(parent, 0);\n return scene._svg;\n }\n parent.setAttribute('class', cssClass(scene));\n\n // apply aria attributes to parent container element\n const aria = ariaMarkAttributes(scene);\n for (const key in aria) setAttribute(parent, key, aria[key]);\n if (!isGroup) {\n setAttribute(parent, 'pointer-events', events);\n }\n setAttribute(parent, 'clip-path', scene.clip ? clip$1(this, scene, scene.group) : null);\n let sibling = null,\n i = 0;\n const process = item => {\n const dirty = this.isDirty(item),\n node = bind(item, parent, sibling, mdef.tag, svg);\n if (dirty) {\n this._update(mdef, node, item);\n if (isGroup) recurse(this, node, item, markTypes);\n }\n sibling = node;\n ++i;\n };\n if (mdef.nested) {\n if (scene.items.length) process(scene.items[0]);\n } else {\n visit(scene, process);\n }\n domClear(parent, i);\n return parent;\n }\n\n /**\n * Update the attributes of an SVG element for a mark item.\n * @param {object} mdef - The mark definition object\n * @param {SVGElement} el - The SVG element.\n * @param {Item} item - The mark item.\n */\n _update(mdef, el, item) {\n // set dom element and values cache\n // provides access to emit method\n element = el;\n values = el.__values__;\n\n // apply aria-specific properties\n ariaItemAttributes(emit, item);\n\n // apply svg attributes\n mdef.attr(emit, item, this);\n\n // some marks need special treatment\n const extra = mark_extras[mdef.type];\n if (extra) extra.call(this, mdef, el, item);\n\n // apply svg style attributes\n // note: element state may have been modified by 'extra' method\n if (element) this.style(element, item);\n }\n\n /**\n * Update the presentation attributes of an SVG element for a mark item.\n * @param {SVGElement} el - The SVG element.\n * @param {Item} item - The mark item.\n */\n style(el, item) {\n if (item == null) return;\n for (const prop in stylesAttr) {\n let value = prop === 'font' ? fontFamily(item) : item[prop];\n if (value === values[prop]) continue;\n const name = stylesAttr[prop];\n if (value == null) {\n el.removeAttribute(name);\n } else {\n if (isGradient(value)) {\n value = gradientRef(value, this._defs.gradient, href());\n }\n el.setAttribute(name, value + '');\n }\n values[prop] = value;\n }\n for (const prop in stylesCss) {\n setStyle(el, stylesCss[prop], item[prop]);\n }\n }\n\n /**\n * Render SVG defs, as needed.\n * Must be called *after* marks have been processed to ensure the\n * collected state is current and accurate.\n */\n defs() {\n const svg = this._svg,\n defs = this._defs;\n let el = defs.el,\n index = 0;\n for (const id in defs.gradient) {\n if (!el) defs.el = el = domChild(svg, RootIndex + 1, 'defs', svgns);\n index = updateGradient(el, defs.gradient[id], index);\n }\n for (const id in defs.clipping) {\n if (!el) defs.el = el = domChild(svg, RootIndex + 1, 'defs', svgns);\n index = updateClipping(el, defs.clipping[id], index);\n }\n\n // clean-up\n if (el) {\n index === 0 ? (svg.removeChild(el), defs.el = null) : domClear(el, index);\n }\n }\n\n /**\n * Clear defs caches.\n */\n _clearDefs() {\n const def = this._defs;\n def.gradient = {};\n def.clipping = {};\n }\n}\n\n// mark ancestor chain with a dirty id\nfunction dirtyParents(item, id) {\n for (; item && item.dirty !== id; item = item.mark.group) {\n item.dirty = id;\n if (item.mark && item.mark.dirty !== id) {\n item.mark.dirty = id;\n } else return;\n }\n}\n\n// update gradient definitions\nfunction updateGradient(el, grad, index) {\n let i, n, stop;\n if (grad.gradient === 'radial') {\n // SVG radial gradients automatically transform to normalized bbox\n // coordinates, in a way that is cumbersome to replicate in canvas.\n // We wrap the radial gradient in a pattern element, allowing us to\n // maintain a circular gradient that matches what canvas provides.\n let pt = domChild(el, index++, 'pattern', svgns);\n setAttributes(pt, {\n id: patternPrefix + grad.id,\n viewBox: '0,0,1,1',\n width: '100%',\n height: '100%',\n preserveAspectRatio: 'xMidYMid slice'\n });\n pt = domChild(pt, 0, 'rect', svgns);\n setAttributes(pt, {\n width: 1,\n height: 1,\n fill: `url(${href()}#${grad.id})`\n });\n el = domChild(el, index++, 'radialGradient', svgns);\n setAttributes(el, {\n id: grad.id,\n fx: grad.x1,\n fy: grad.y1,\n fr: grad.r1,\n cx: grad.x2,\n cy: grad.y2,\n r: grad.r2\n });\n } else {\n el = domChild(el, index++, 'linearGradient', svgns);\n setAttributes(el, {\n id: grad.id,\n x1: grad.x1,\n x2: grad.x2,\n y1: grad.y1,\n y2: grad.y2\n });\n }\n for (i = 0, n = grad.stops.length; i < n; ++i) {\n stop = domChild(el, i, 'stop', svgns);\n stop.setAttribute('offset', grad.stops[i].offset);\n stop.setAttribute('stop-color', grad.stops[i].color);\n }\n domClear(el, i);\n return index;\n}\n\n// update clipping path definitions\nfunction updateClipping(el, clip, index) {\n let mask;\n el = domChild(el, index, 'clipPath', svgns);\n el.setAttribute('id', clip.id);\n if (clip.path) {\n mask = domChild(el, 0, 'path', svgns);\n mask.setAttribute('d', clip.path);\n } else {\n mask = domChild(el, 0, 'rect', svgns);\n setAttributes(mask, {\n x: 0,\n y: 0,\n width: clip.width,\n height: clip.height\n });\n }\n domClear(el, 1);\n return index + 1;\n}\n\n// Recursively process group contents.\nfunction recurse(renderer, el, group, markTypes) {\n // child 'g' element is second to last among children (path, g, path)\n // other children here are foreground and background path elements\n el = el.lastChild.previousSibling;\n let prev,\n idx = 0;\n visit(group, item => {\n prev = renderer.mark(el, item, prev, markTypes);\n ++idx;\n });\n\n // remove any extraneous DOM elements\n domClear(el, 1 + idx);\n}\n\n// Bind a scenegraph item to an SVG DOM element.\n// Create new SVG elements as needed.\nfunction bind(item, el, sibling, tag, svg) {\n let node = item._svg,\n doc;\n\n // create a new dom node if needed\n if (!node) {\n doc = el.ownerDocument;\n node = domCreate(doc, tag, svgns);\n item._svg = node;\n if (item.mark) {\n node.__data__ = item;\n node.__values__ = {\n fill: 'default'\n };\n\n // if group, create background, content, and foreground elements\n if (tag === 'g') {\n const bg = domCreate(doc, 'path', svgns);\n node.appendChild(bg);\n bg.__data__ = item;\n const cg = domCreate(doc, 'g', svgns);\n node.appendChild(cg);\n cg.__data__ = item;\n const fg = domCreate(doc, 'path', svgns);\n node.appendChild(fg);\n fg.__data__ = item;\n fg.__values__ = {\n fill: 'default'\n };\n }\n }\n }\n\n // (re-)insert if (a) not contained in SVG or (b) sibling order has changed\n if (node.ownerSVGElement !== svg || siblingCheck(node, sibling)) {\n el.insertBefore(node, sibling ? sibling.nextSibling : el.firstChild);\n }\n return node;\n}\n\n// check if two nodes are ordered siblings\nfunction siblingCheck(node, sibling) {\n return node.parentNode && node.parentNode.childNodes.length > 1 && node.previousSibling != sibling; // treat null/undefined the same\n}\n\n// -- Set attributes & styles on SVG elements ---\n\nlet element = null,\n // temp var for current SVG element\n values = null; // temp var for current values hash\n\n// Extra configuration for certain mark types\nconst mark_extras = {\n group(mdef, el, item) {\n const fg = element = el.childNodes[2];\n values = fg.__values__;\n mdef.foreground(emit, item, this);\n values = el.__values__; // use parent's values hash\n element = el.childNodes[1];\n mdef.content(emit, item, this);\n const bg = element = el.childNodes[0];\n mdef.background(emit, item, this);\n const value = item.mark.interactive === false ? 'none' : null;\n if (value !== values.events) {\n setAttribute(fg, 'pointer-events', value);\n setAttribute(bg, 'pointer-events', value);\n values.events = value;\n }\n if (item.strokeForeground && item.stroke) {\n const fill = item.fill;\n setAttribute(fg, 'display', null);\n\n // set style of background\n this.style(bg, item);\n setAttribute(bg, 'stroke', null);\n\n // set style of foreground\n if (fill) item.fill = null;\n values = fg.__values__;\n this.style(fg, item);\n if (fill) item.fill = fill;\n\n // leave element null to prevent downstream styling\n element = null;\n } else {\n // ensure foreground is ignored\n setAttribute(fg, 'display', 'none');\n }\n },\n image(mdef, el, item) {\n if (item.smooth === false) {\n setStyle(el, 'image-rendering', 'optimizeSpeed');\n setStyle(el, 'image-rendering', 'pixelated');\n } else {\n setStyle(el, 'image-rendering', null);\n }\n },\n text(mdef, el, item) {\n const tl = textLines(item);\n let key, value, doc, lh;\n if (isArray(tl)) {\n // multi-line text\n value = tl.map(_ => textValue(item, _));\n key = value.join('\\n'); // content cache key\n\n if (key !== values.text) {\n domClear(el, 0);\n doc = el.ownerDocument;\n lh = lineHeight(item);\n value.forEach((t, i) => {\n const ts = domCreate(doc, 'tspan', svgns);\n ts.__data__ = item; // data binding\n ts.textContent = t;\n if (i) {\n ts.setAttribute('x', 0);\n ts.setAttribute('dy', lh);\n }\n el.appendChild(ts);\n });\n values.text = key;\n }\n } else {\n // single-line text\n value = textValue(item, tl);\n if (value !== values.text) {\n el.textContent = value;\n values.text = value;\n }\n }\n setAttribute(el, 'font-family', fontFamily(item));\n setAttribute(el, 'font-size', fontSize(item) + 'px');\n setAttribute(el, 'font-style', item.fontStyle);\n setAttribute(el, 'font-variant', item.fontVariant);\n setAttribute(el, 'font-weight', item.fontWeight);\n }\n};\nfunction emit(name, value, ns) {\n // early exit if value is unchanged\n if (value === values[name]) return;\n\n // use appropriate method given namespace (ns)\n if (ns) {\n setAttributeNS(element, name, value, ns);\n } else {\n setAttribute(element, name, value);\n }\n\n // note current value for future comparison\n values[name] = value;\n}\nfunction setStyle(el, name, value) {\n if (value !== values[name]) {\n if (value == null) {\n el.style.removeProperty(name);\n } else {\n el.style.setProperty(name, value + '');\n }\n values[name] = value;\n }\n}\nfunction setAttributes(el, attrs) {\n for (const key in attrs) {\n setAttribute(el, key, attrs[key]);\n }\n}\nfunction setAttribute(el, name, value) {\n if (value != null) {\n // if value is provided, update DOM attribute\n el.setAttribute(name, value);\n } else {\n // else remove DOM attribute\n el.removeAttribute(name);\n }\n}\nfunction setAttributeNS(el, name, value, ns) {\n if (value != null) {\n // if value is provided, update DOM attribute\n el.setAttributeNS(ns, name, value);\n } else {\n // else remove DOM attribute\n el.removeAttributeNS(ns, name);\n }\n}\nfunction href() {\n let loc;\n return typeof window === 'undefined' ? '' : (loc = window.location).hash ? loc.href.slice(0, -loc.hash.length) : loc.href;\n}\n\nclass SVGStringRenderer extends Renderer {\n constructor(loader) {\n super(loader);\n this._text = null;\n this._defs = {\n gradient: {},\n clipping: {}\n };\n }\n\n /**\n * Returns the rendered SVG text string,\n * or null if rendering has not yet occurred.\n */\n svg() {\n return this._text;\n }\n\n /**\n * Internal rendering method.\n * @param {object} scene - The root mark of a scenegraph to render.\n */\n _render(scene) {\n const m = markup();\n\n // svg tag\n m.open('svg', extend({}, metadata, {\n class: 'marks',\n width: this._width * this._scale,\n height: this._height * this._scale,\n viewBox: `0 0 ${this._width} ${this._height}`\n }));\n\n // background, if defined\n const bg = this._bgcolor;\n if (bg && bg !== 'transparent' && bg !== 'none') {\n m.open('rect', {\n width: this._width,\n height: this._height,\n fill: bg\n }).close();\n }\n\n // root content group\n m.open('g', rootAttributes, {\n transform: 'translate(' + this._origin + ')'\n });\n this.mark(m, scene);\n m.close(); // </g>\n\n // defs\n this.defs(m);\n\n // get SVG text string\n this._text = m.close() + '';\n return this;\n }\n\n /**\n * Render a set of mark items.\n * @param {object} m - The markup context.\n * @param {object} scene - The mark parent to render.\n */\n mark(m, scene) {\n const mdef = Marks[scene.marktype],\n tag = mdef.tag,\n attrList = [ariaItemAttributes, mdef.attr];\n\n // render opening group tag\n m.open('g', {\n 'class': cssClass(scene),\n 'clip-path': scene.clip ? clip$1(this, scene, scene.group) : null\n }, ariaMarkAttributes(scene), {\n 'pointer-events': tag !== 'g' && scene.interactive === false ? 'none' : null\n });\n\n // render contained elements\n const process = item => {\n const href = this.href(item);\n if (href) m.open('a', href);\n m.open(tag, this.attr(scene, item, attrList, tag !== 'g' ? tag : null));\n if (tag === 'text') {\n const tl = textLines(item);\n if (isArray(tl)) {\n // multi-line text\n const attrs = {\n x: 0,\n dy: lineHeight(item)\n };\n for (let i = 0; i < tl.length; ++i) {\n m.open('tspan', i ? attrs : null).text(textValue(item, tl[i])).close();\n }\n } else {\n // single-line text\n m.text(textValue(item, tl));\n }\n } else if (tag === 'g') {\n const fore = item.strokeForeground,\n fill = item.fill,\n stroke = item.stroke;\n if (fore && stroke) {\n item.stroke = null;\n }\n m.open('path', this.attr(scene, item, mdef.background, 'bgrect')).close();\n\n // recurse for group content\n m.open('g', this.attr(scene, item, mdef.content));\n visit(item, scene => this.mark(m, scene));\n m.close();\n if (fore && stroke) {\n if (fill) item.fill = null;\n item.stroke = stroke;\n m.open('path', this.attr(scene, item, mdef.foreground, 'bgrect')).close();\n if (fill) item.fill = fill;\n } else {\n m.open('path', this.attr(scene, item, mdef.foreground, 'bgfore')).close();\n }\n }\n m.close(); // </tag>\n if (href) m.close(); // </a>\n };\n if (mdef.nested) {\n if (scene.items && scene.items.length) process(scene.items[0]);\n } else {\n visit(scene, process);\n }\n\n // render closing group tag\n return m.close(); // </g>\n }\n\n /**\n * Get href attributes for a hyperlinked mark item.\n * @param {Item} item - The mark item.\n */\n href(item) {\n const href = item.href;\n let attr;\n if (href) {\n if (attr = this._hrefs && this._hrefs[href]) {\n return attr;\n } else {\n this.sanitizeURL(href).then(attr => {\n // rewrite to use xlink namespace\n attr['xlink:href'] = attr.href;\n attr.href = null;\n (this._hrefs || (this._hrefs = {}))[href] = attr;\n });\n }\n }\n return null;\n }\n\n /**\n * Get an object of SVG attributes for a mark item.\n * @param {object} scene - The mark parent.\n * @param {Item} item - The mark item.\n * @param {array|function} attrs - One or more attribute emitters.\n * @param {string} tag - The tag being rendered.\n */\n attr(scene, item, attrs, tag) {\n const object = {},\n emit = (name, value, ns, prefixed) => {\n object[prefixed || name] = value;\n };\n\n // apply mark specific attributes\n if (Array.isArray(attrs)) {\n attrs.forEach(fn => fn(emit, item, this));\n } else {\n attrs(emit, item, this);\n }\n\n // apply style attributes\n if (tag) {\n style(object, item, scene, tag, this._defs);\n }\n return object;\n }\n\n /**\n * Render SVG defs, as needed.\n * Must be called *after* marks have been processed to ensure the\n * collected state is current and accurate.\n * @param {object} m - The markup context.\n */\n defs(m) {\n const gradient = this._defs.gradient,\n clipping = this._defs.clipping,\n count = Object.keys(gradient).length + Object.keys(clipping).length;\n if (count === 0) return; // nothing to do\n\n m.open('defs');\n for (const id in gradient) {\n const def = gradient[id],\n stops = def.stops;\n if (def.gradient === 'radial') {\n // SVG radial gradients automatically transform to normalized bbox\n // coordinates, in a way that is cumbersome to replicate in canvas.\n // We wrap the radial gradient in a pattern element, allowing us to\n // maintain a circular gradient that matches what canvas provides.\n\n m.open('pattern', {\n id: patternPrefix + id,\n viewBox: '0,0,1,1',\n width: '100%',\n height: '100%',\n preserveAspectRatio: 'xMidYMid slice'\n });\n m.open('rect', {\n width: '1',\n height: '1',\n fill: 'url(#' + id + ')'\n }).close();\n m.close(); // </pattern>\n\n m.open('radialGradient', {\n id: id,\n fx: def.x1,\n fy: def.y1,\n fr: def.r1,\n cx: def.x2,\n cy: def.y2,\n r: def.r2\n });\n } else {\n m.open('linearGradient', {\n id: id,\n x1: def.x1,\n x2: def.x2,\n y1: def.y1,\n y2: def.y2\n });\n }\n for (let i = 0; i < stops.length; ++i) {\n m.open('stop', {\n offset: stops[i].offset,\n 'stop-color': stops[i].color\n }).close();\n }\n m.close();\n }\n for (const id in clipping) {\n const def = clipping[id];\n m.open('clipPath', {\n id: id\n });\n if (def.path) {\n m.open('path', {\n d: def.path\n }).close();\n } else {\n m.open('rect', {\n x: 0,\n y: 0,\n width: def.width,\n height: def.height\n }).close();\n }\n m.close();\n }\n m.close();\n }\n}\n\n// Helper function for attr for style presentation attributes\nfunction style(s, item, scene, tag, defs) {\n let styleList;\n if (item == null) return s;\n if (tag === 'bgrect' && scene.interactive === false) {\n s['pointer-events'] = 'none';\n }\n if (tag === 'bgfore') {\n if (scene.interactive === false) {\n s['pointer-events'] = 'none';\n }\n s.display = 'none';\n if (item.fill !== null) return s;\n }\n if (tag === 'image' && item.smooth === false) {\n styleList = ['image-rendering: optimizeSpeed;', 'image-rendering: pixelated;'];\n }\n if (tag === 'text') {\n s['font-family'] = fontFamily(item);\n s['font-size'] = fontSize(item) + 'px';\n s['font-style'] = item.fontStyle;\n s['font-variant'] = item.fontVariant;\n s['font-weight'] = item.fontWeight;\n }\n for (const prop in stylesAttr) {\n let value = item[prop];\n const name = stylesAttr[prop];\n if (value === 'transparent' && (name === 'fill' || name === 'stroke')) ; else if (value != null) {\n if (isGradient(value)) {\n value = gradientRef(value, defs.gradient, '');\n }\n s[name] = value;\n }\n }\n for (const prop in stylesCss) {\n const value = item[prop];\n if (value != null) {\n styleList = styleList || [];\n styleList.push(`${stylesCss[prop]}: ${value};`);\n }\n }\n if (styleList) {\n s.style = styleList.join(' ');\n }\n return s;\n}\n\n/**\n * @typedef {Object} HybridRendererOptions\n *\n * @property {string[]} [svgMarkTypes=['text']] - An array of SVG mark types to render\n * in the SVG layer. All other mark types\n * will be rendered in the Canvas layer.\n * @property {boolean} [svgOnTop=true] - Flag to determine if SVG should be rendered on top.\n * @property {boolean} [debug=false] - Flag to enable or disable debugging mode. When true,\n * the top layer will be stacked below the bottom layer\n * rather than overlaid on top.\n */\n\n/** @type {HybridRendererOptions} */\nconst OPTS = {\n svgMarkTypes: ['text'],\n svgOnTop: true,\n debug: false\n};\n\n/**\n * Configure the HybridRenderer\n *\n * @param {HybridRendererOptions} options - HybridRenderer configuration options.\n */\nfunction setHybridRendererOptions(options) {\n OPTS['svgMarkTypes'] = options.svgMarkTypes ?? ['text'];\n OPTS['svgOnTop'] = options.svgOnTop ?? true;\n OPTS['debug'] = options.debug ?? false;\n}\nclass HybridRenderer extends Renderer {\n constructor(loader) {\n super(loader);\n this._svgRenderer = new SVGRenderer(loader);\n this._canvasRenderer = new CanvasRenderer(loader);\n }\n\n /**\n * Initialize a new HybridRenderer instance.\n * @param {DOMElement} el - The containing DOM element for the display.\n * @param {number} width - The coordinate width of the display, in pixels.\n * @param {number} height - The coordinate height of the display, in pixels.\n * @param {Array<number>} origin - The origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {HybridRenderer} - This renderer instance.\n */\n initialize(el, width, height, origin, scaleFactor) {\n this._root_el = domChild(el, 0, 'div');\n const bottomEl = domChild(this._root_el, 0, 'div');\n const topEl = domChild(this._root_el, 1, 'div');\n this._root_el.style.position = 'relative';\n\n // Set position absolute to overlay svg on top of canvas\n if (!OPTS.debug) {\n bottomEl.style.height = '100%';\n topEl.style.position = 'absolute';\n topEl.style.top = '0';\n topEl.style.left = '0';\n topEl.style.height = '100%';\n topEl.style.width = '100%';\n }\n this._svgEl = OPTS.svgOnTop ? topEl : bottomEl;\n this._canvasEl = OPTS.svgOnTop ? bottomEl : topEl;\n\n // pointer-events to none on SVG layer so that canvas gets all events\n this._svgEl.style.pointerEvents = 'none';\n this._canvasRenderer.initialize(this._canvasEl, width, height, origin, scaleFactor);\n this._svgRenderer.initialize(this._svgEl, width, height, origin, scaleFactor);\n return super.initialize(el, width, height, origin, scaleFactor);\n }\n\n /**\n * Flag a mark item as dirty.\n * @param {Item} item - The mark item.\n */\n dirty(item) {\n if (OPTS.svgMarkTypes.includes(item.mark.marktype)) {\n this._svgRenderer.dirty(item);\n } else {\n this._canvasRenderer.dirty(item);\n }\n return this;\n }\n\n /**\n * Internal rendering method.\n * @param {object} scene - The root mark of a scenegraph to render.\n * @param {Array} markTypes - Array of the mark types to render.\n * If undefined, render all mark types\n */\n _render(scene, markTypes) {\n const allMarkTypes = markTypes ?? ['arc', 'area', 'image', 'line', 'path', 'rect', 'rule', 'shape', 'symbol', 'text', 'trail'];\n const canvasMarkTypes = allMarkTypes.filter(m => !OPTS.svgMarkTypes.includes(m));\n this._svgRenderer.render(scene, OPTS.svgMarkTypes);\n this._canvasRenderer.render(scene, canvasMarkTypes);\n }\n\n /**\n * Resize the display.\n * @param {number} width - The new coordinate width of the display, in pixels.\n * @param {number} height - The new coordinate height of the display, in pixels.\n * @param {Array<number>} origin - The new origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {SVGRenderer} - This renderer instance;\n */\n resize(width, height, origin, scaleFactor) {\n super.resize(width, height, origin, scaleFactor);\n this._svgRenderer.resize(width, height, origin, scaleFactor);\n this._canvasRenderer.resize(width, height, origin, scaleFactor);\n return this;\n }\n background(bgcolor) {\n // Propagate background color to lower canvas renderer\n if (OPTS.svgOnTop) {\n this._canvasRenderer.background(bgcolor);\n } else {\n this._svgRenderer.background(bgcolor);\n }\n return this;\n }\n}\n\nclass HybridHandler extends CanvasHandler {\n constructor(loader, tooltip) {\n super(loader, tooltip);\n }\n initialize(el, origin, obj) {\n const canvas = domChild(domChild(el, 0, 'div'), OPTS.svgOnTop ? 0 : 1, 'div');\n return super.initialize(canvas, origin, obj);\n }\n}\n\nconst Canvas = 'canvas';\nconst Hybrid = 'hybrid';\nconst PNG = 'png';\nconst SVG = 'svg';\nconst None = 'none';\nconst RenderType = {\n Canvas: Canvas,\n PNG: PNG,\n SVG: SVG,\n Hybrid: Hybrid,\n None: None\n};\nconst modules = {};\nmodules[Canvas] = modules[PNG] = {\n renderer: CanvasRenderer,\n headless: CanvasRenderer,\n handler: CanvasHandler\n};\nmodules[SVG] = {\n renderer: SVGRenderer,\n headless: SVGStringRenderer,\n handler: SVGHandler\n};\nmodules[Hybrid] = {\n renderer: HybridRenderer,\n headless: HybridRenderer,\n handler: HybridHandler\n};\nmodules[None] = {};\nfunction renderModule(name, _) {\n name = String(name || '').toLowerCase();\n if (arguments.length > 1) {\n modules[name] = _;\n return this;\n } else {\n return modules[name];\n }\n}\n\nfunction intersect(scene, bounds, filter) {\n const hits = [],\n // intersection results\n box = new Bounds().union(bounds),\n // defensive copy\n type = scene.marktype;\n return type ? intersectMark(scene, box, filter, hits) : type === 'group' ? intersectGroup(scene, box, filter, hits) : error('Intersect scene must be mark node or group item.');\n}\nfunction intersectMark(mark, box, filter, hits) {\n if (visitMark(mark, box, filter)) {\n const items = mark.items,\n type = mark.marktype,\n n = items.length;\n let i = 0;\n if (type === 'group') {\n for (; i < n; ++i) {\n intersectGroup(items[i], box, filter, hits);\n }\n } else {\n for (const test = Marks[type].isect; i < n; ++i) {\n const item = items[i];\n if (intersectItem(item, box, test)) hits.push(item);\n }\n }\n }\n return hits;\n}\nfunction visitMark(mark, box, filter) {\n // process if bounds intersect and if\n // (1) mark is a group mark (so we must recurse), or\n // (2) mark is interactive and passes filter\n return mark.bounds && box.intersects(mark.bounds) && (mark.marktype === 'group' || mark.interactive !== false && (!filter || filter(mark)));\n}\nfunction intersectGroup(group, box, filter, hits) {\n // test intersect against group\n // skip groups by default unless filter says otherwise\n if (filter && filter(group.mark) && intersectItem(group, box, Marks.group.isect)) {\n hits.push(group);\n }\n\n // recursively test children marks\n // translate box to group coordinate space\n const marks = group.items,\n n = marks && marks.length;\n if (n) {\n const x = group.x || 0,\n y = group.y || 0;\n box.translate(-x, -y);\n for (let i = 0; i < n; ++i) {\n intersectMark(marks[i], box, filter, hits);\n }\n box.translate(x, y);\n }\n return hits;\n}\nfunction intersectItem(item, box, test) {\n // test bounds enclosure, bounds intersection, then detailed test\n const bounds = item.bounds;\n return box.encloses(bounds) || box.intersects(bounds) && test(item, box);\n}\n\nconst clipBounds = new Bounds();\nfunction boundClip (mark) {\n const clip = mark.clip;\n if (isFunction(clip)) {\n clip(boundContext(clipBounds.clear()));\n } else if (clip) {\n clipBounds.set(0, 0, mark.group.width, mark.group.height);\n } else return;\n mark.bounds.intersect(clipBounds);\n}\n\nconst TOLERANCE = 1e-9;\nfunction sceneEqual(a, b, key) {\n return a === b ? true : key === 'path' ? pathEqual(a, b) : a instanceof Date && b instanceof Date ? +a === +b : isNumber(a) && isNumber(b) ? Math.abs(a - b) <= TOLERANCE : !a || !b || !isObject(a) && !isObject(b) ? a == b : objectEqual(a, b);\n}\nfunction pathEqual(a, b) {\n return sceneEqual(parse(a), parse(b));\n}\nfunction objectEqual(a, b) {\n var ka = Object.keys(a),\n kb = Object.keys(b),\n key,\n i;\n if (ka.length !== kb.length) return false;\n ka.sort();\n kb.sort();\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] != kb[i]) return false;\n }\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!sceneEqual(a[key], b[key], key)) return false;\n }\n return typeof a === typeof b;\n}\n\nfunction resetSVGDefIds() {\n resetSVGClipId();\n resetSVGGradientId();\n}\n\nexport { Bounds, CanvasHandler, CanvasRenderer, Gradient, GroupItem, Handler, HybridHandler, HybridRenderer, Item, Marks, RenderType, Renderer, ResourceLoader, SVGHandler, SVGRenderer, SVGStringRenderer, Scenegraph, boundClip, boundContext, boundItem, boundMark, boundStroke, domChild, domClear, domCreate, domFind, font, fontFamily, fontSize, intersect, intersectBoxLine, intersectPath, intersectPoint, intersectRule, lineHeight, markup, multiLineOffset, curves as pathCurves, pathEqual, parse as pathParse, vg_rect as pathRectangle, pathRender, symbols as pathSymbols, vg_trail as pathTrail, point, renderModule, resetSVGClipId, resetSVGDefIds, sceneEqual, sceneFromJSON, pickVisit as scenePickVisit, sceneToJSON, visit as sceneVisit, zorder as sceneZOrder, serializeXML, setHybridRendererOptions, textMetrics };\n", "import { Transform, ingest, tupleid, stableCompare } from 'vega-dataflow';\nimport { tickCount, tickFormat, validTicks, tickValues, SymbolLegend, labelFormat, labelValues, GradientLegend, scaleFraction, labelFraction, scale, Sequential, Linear, isContinuous, Time, UTC, Ordinal, scaleImplicit, Log, Sqrt, Pow, Symlog, isLogarithmic, BinOrdinal, isInterpolating, interpolateColors, interpolate, Band, Point, bandSpace, scheme, Threshold, Quantile, Quantize, quantizeInterpolator, interpolateRange, Diverging } from 'vega-scale';\nimport { inherits, isArray, error, fastmap, falsy, isFunction, constant, peek, one, toSet, isString, zoomLog, zoomPow, zoomSymlog, zoomLinear, stringValue } from 'vega-util';\nimport { sum, range } from 'd3-array';\nimport { interpolateRound, interpolate as interpolate$1 } from 'd3-interpolate';\n\n/**\n * Generates axis ticks for visualizing a spatial scale.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Scale} params.scale - The scale to generate ticks for.\n * @param {*} [params.count=10] - The approximate number of ticks, or\n * desired tick interval, to use.\n * @param {Array<*>} [params.values] - The exact tick values to use.\n * These must be legal domain values for the provided scale.\n * If provided, the count argument is ignored.\n * @param {function(*):string} [params.formatSpecifier] - A format specifier\n * to use in conjunction with scale.tickFormat. Legal values are\n * any valid d3 4.0 format specifier.\n * @param {function(*):string} [params.format] - The format function to use.\n * If provided, the formatSpecifier argument is ignored.\n */\nfunction AxisTicks(params) {\n Transform.call(this, null, params);\n}\ninherits(AxisTicks, Transform, {\n transform(_, pulse) {\n if (this.value && !_.modified()) {\n return pulse.StopPropagation;\n }\n var locale = pulse.dataflow.locale(),\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n ticks = this.value,\n scale = _.scale,\n tally = _.count == null ? _.values ? _.values.length : 10 : _.count,\n count = tickCount(scale, tally, _.minstep),\n format = _.format || tickFormat(locale, scale, count, _.formatSpecifier, _.formatType, !!_.values),\n values = _.values ? validTicks(scale, _.values, count) : tickValues(scale, count);\n if (ticks) out.rem = ticks;\n ticks = values.map((value, i) => ingest({\n index: i / (values.length - 1 || 1),\n value: value,\n label: format(value)\n }));\n if (_.extra && ticks.length) {\n // add an extra tick pegged to the initial domain value\n // this is used to generate axes with 'binned' domains\n ticks.push(ingest({\n index: -1,\n extra: {\n value: ticks[0].value\n },\n label: ''\n }));\n }\n out.source = ticks;\n out.add = ticks;\n this.value = ticks;\n return out;\n }\n});\n\n/**\n * Joins a set of data elements against a set of visual items.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): object} [params.item] - An item generator function.\n * @param {function(object): *} [params.key] - The key field associating data and visual items.\n */\nfunction DataJoin(params) {\n Transform.call(this, null, params);\n}\nfunction defaultItemCreate() {\n return ingest({});\n}\nfunction newMap(key) {\n const map = fastmap().test(t => t.exit);\n map.lookup = t => map.get(key(t));\n return map;\n}\ninherits(DataJoin, Transform, {\n transform(_, pulse) {\n var df = pulse.dataflow,\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n item = _.item || defaultItemCreate,\n key = _.key || tupleid,\n map = this.value;\n\n // prevent transient (e.g., hover) requests from\n // cascading across marks derived from marks\n if (isArray(out.encode)) {\n out.encode = null;\n }\n if (map && (_.modified('key') || pulse.modified(key))) {\n error('DataJoin does not support modified key function or fields.');\n }\n if (!map) {\n pulse = pulse.addAll();\n this.value = map = newMap(key);\n }\n pulse.visit(pulse.ADD, t => {\n const k = key(t);\n let x = map.get(k);\n if (x) {\n if (x.exit) {\n map.empty--;\n out.add.push(x);\n } else {\n out.mod.push(x);\n }\n } else {\n x = item(t);\n map.set(k, x);\n out.add.push(x);\n }\n x.datum = t;\n x.exit = false;\n });\n pulse.visit(pulse.MOD, t => {\n const k = key(t),\n x = map.get(k);\n if (x) {\n x.datum = t;\n out.mod.push(x);\n }\n });\n pulse.visit(pulse.REM, t => {\n const k = key(t),\n x = map.get(k);\n if (t === x.datum && !x.exit) {\n out.rem.push(x);\n x.exit = true;\n ++map.empty;\n }\n });\n if (pulse.changed(pulse.ADD_MOD)) out.modifies('datum');\n if (pulse.clean() || _.clean && map.empty > df.cleanThreshold) {\n df.runAfter(map.clean);\n }\n return out;\n }\n});\n\n/**\n * Invokes encoding functions for visual items.\n * @constructor\n * @param {object} params - The parameters to the encoding functions. This\n * parameter object will be passed through to all invoked encoding functions.\n * @param {object} [params.mod=false] - Flag indicating if tuples in the input\n * mod set that are unmodified by encoders should be included in the output.\n * @param {object} param.encoders - The encoding functions\n * @param {function(object, object): boolean} [param.encoders.update] - Update encoding set\n * @param {function(object, object): boolean} [param.encoders.enter] - Enter encoding set\n * @param {function(object, object): boolean} [param.encoders.exit] - Exit encoding set\n */\nfunction Encode(params) {\n Transform.call(this, null, params);\n}\ninherits(Encode, Transform, {\n transform(_, pulse) {\n var out = pulse.fork(pulse.ADD_REM),\n fmod = _.mod || false,\n encoders = _.encoders,\n encode = pulse.encode;\n\n // if an array, the encode directive includes additional sets\n // that must be defined in order for the primary set to be invoked\n // e.g., only run the update set if the hover set is defined\n if (isArray(encode)) {\n if (out.changed() || encode.every(e => encoders[e])) {\n encode = encode[0];\n out.encode = null; // consume targeted encode directive\n } else {\n return pulse.StopPropagation;\n }\n }\n\n // marshall encoder functions\n var reenter = encode === 'enter',\n update = encoders.update || falsy,\n enter = encoders.enter || falsy,\n exit = encoders.exit || falsy,\n set = (encode && !reenter ? encoders[encode] : update) || falsy;\n if (pulse.changed(pulse.ADD)) {\n pulse.visit(pulse.ADD, t => {\n enter(t, _);\n update(t, _);\n });\n out.modifies(enter.output);\n out.modifies(update.output);\n if (set !== falsy && set !== update) {\n pulse.visit(pulse.ADD, t => {\n set(t, _);\n });\n out.modifies(set.output);\n }\n }\n if (pulse.changed(pulse.REM) && exit !== falsy) {\n pulse.visit(pulse.REM, t => {\n exit(t, _);\n });\n out.modifies(exit.output);\n }\n if (reenter || set !== falsy) {\n const flag = pulse.MOD | (_.modified() ? pulse.REFLOW : 0);\n if (reenter) {\n pulse.visit(flag, t => {\n const mod = enter(t, _) || fmod;\n if (set(t, _) || mod) out.mod.push(t);\n });\n if (out.mod.length) out.modifies(enter.output);\n } else {\n pulse.visit(flag, t => {\n if (set(t, _) || fmod) out.mod.push(t);\n });\n }\n if (out.mod.length) out.modifies(set.output);\n }\n return out.changed() ? out : pulse.StopPropagation;\n }\n});\n\n/**\n * Generates legend entries for visualizing a scale.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Scale} params.scale - The scale to generate items for.\n * @param {*} [params.count=5] - The approximate number of items, or\n * desired tick interval, to use.\n * @param {*} [params.limit] - The maximum number of entries to\n * include in a symbol legend.\n * @param {Array<*>} [params.values] - The exact tick values to use.\n * These must be legal domain values for the provided scale.\n * If provided, the count argument is ignored.\n * @param {string} [params.formatSpecifier] - A format specifier\n * to use in conjunction with scale.tickFormat. Legal values are\n * any valid D3 format specifier string.\n * @param {function(*):string} [params.format] - The format function to use.\n * If provided, the formatSpecifier argument is ignored.\n */\nfunction LegendEntries(params) {\n Transform.call(this, [], params);\n}\ninherits(LegendEntries, Transform, {\n transform(_, pulse) {\n if (this.value != null && !_.modified()) {\n return pulse.StopPropagation;\n }\n var locale = pulse.dataflow.locale(),\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n items = this.value,\n type = _.type || SymbolLegend,\n scale = _.scale,\n limit = +_.limit,\n count = tickCount(scale, _.count == null ? 5 : _.count, _.minstep),\n lskip = !!_.values || type === SymbolLegend,\n format = _.format || labelFormat(locale, scale, count, type, _.formatSpecifier, _.formatType, lskip),\n values = _.values || labelValues(scale, count),\n domain,\n fraction,\n size,\n offset,\n ellipsis;\n if (items) out.rem = items;\n if (type === SymbolLegend) {\n if (limit && values.length > limit) {\n pulse.dataflow.warn('Symbol legend count exceeds limit, filtering items.');\n items = values.slice(0, limit - 1);\n ellipsis = true;\n } else {\n items = values;\n }\n if (isFunction(size = _.size)) {\n // if first value maps to size zero, remove from list (vega#717)\n if (!_.values && scale(items[0]) === 0) {\n items = items.slice(1);\n }\n // compute size offset for legend entries\n offset = items.reduce((max, value) => Math.max(max, size(value, _)), 0);\n } else {\n size = constant(offset = size || 8);\n }\n items = items.map((value, index) => ingest({\n index: index,\n label: format(value, index, items),\n value: value,\n offset: offset,\n size: size(value, _)\n }));\n if (ellipsis) {\n ellipsis = values[items.length];\n items.push(ingest({\n index: items.length,\n label: `\\u2026${values.length - items.length} entries`,\n value: ellipsis,\n offset: offset,\n size: size(ellipsis, _)\n }));\n }\n } else if (type === GradientLegend) {\n domain = scale.domain(), fraction = scaleFraction(scale, domain[0], peek(domain));\n\n // if automatic label generation produces 2 or fewer values,\n // use the domain end points instead (fixes vega/vega#1364)\n if (values.length < 3 && !_.values && domain[0] !== peek(domain)) {\n values = [domain[0], peek(domain)];\n }\n items = values.map((value, index) => ingest({\n index: index,\n label: format(value, index, values),\n value: value,\n perc: fraction(value)\n }));\n } else {\n size = values.length - 1;\n fraction = labelFraction(scale);\n items = values.map((value, index) => ingest({\n index: index,\n label: format(value, index, values),\n value: value,\n perc: index ? fraction(value) : 0,\n perc2: index === size ? 1 : fraction(values[index + 1])\n }));\n }\n out.source = items;\n out.add = items;\n this.value = items;\n return out;\n }\n});\n\nconst sourceX = t => t.source.x;\nconst sourceY = t => t.source.y;\nconst targetX = t => t.target.x;\nconst targetY = t => t.target.y;\n\n/**\n * Layout paths linking source and target elements.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nfunction LinkPath(params) {\n Transform.call(this, {}, params);\n}\nLinkPath.Definition = {\n 'type': 'LinkPath',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'sourceX',\n 'type': 'field',\n 'default': 'source.x'\n }, {\n 'name': 'sourceY',\n 'type': 'field',\n 'default': 'source.y'\n }, {\n 'name': 'targetX',\n 'type': 'field',\n 'default': 'target.x'\n }, {\n 'name': 'targetY',\n 'type': 'field',\n 'default': 'target.y'\n }, {\n 'name': 'orient',\n 'type': 'enum',\n 'default': 'vertical',\n 'values': ['horizontal', 'vertical', 'radial']\n }, {\n 'name': 'shape',\n 'type': 'enum',\n 'default': 'line',\n 'values': ['line', 'arc', 'curve', 'diagonal', 'orthogonal']\n }, {\n 'name': 'require',\n 'type': 'signal'\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'path'\n }]\n};\ninherits(LinkPath, Transform, {\n transform(_, pulse) {\n var sx = _.sourceX || sourceX,\n sy = _.sourceY || sourceY,\n tx = _.targetX || targetX,\n ty = _.targetY || targetY,\n as = _.as || 'path',\n orient = _.orient || 'vertical',\n shape = _.shape || 'line',\n path = Paths.get(shape + '-' + orient) || Paths.get(shape);\n if (!path) {\n error('LinkPath unsupported type: ' + _.shape + (_.orient ? '-' + _.orient : ''));\n }\n pulse.visit(pulse.SOURCE, t => {\n t[as] = path(sx(t), sy(t), tx(t), ty(t));\n });\n return pulse.reflow(_.modified()).modifies(as);\n }\n});\nconst line = (sx, sy, tx, ty) => 'M' + sx + ',' + sy + 'L' + tx + ',' + ty;\nconst lineR = (sa, sr, ta, tr) => line(sr * Math.cos(sa), sr * Math.sin(sa), tr * Math.cos(ta), tr * Math.sin(ta));\nconst arc = (sx, sy, tx, ty) => {\n var dx = tx - sx,\n dy = ty - sy,\n rr = Math.hypot(dx, dy) / 2,\n ra = 180 * Math.atan2(dy, dx) / Math.PI;\n return 'M' + sx + ',' + sy + 'A' + rr + ',' + rr + ' ' + ra + ' 0 1' + ' ' + tx + ',' + ty;\n};\nconst arcR = (sa, sr, ta, tr) => arc(sr * Math.cos(sa), sr * Math.sin(sa), tr * Math.cos(ta), tr * Math.sin(ta));\nconst curve = (sx, sy, tx, ty) => {\n const dx = tx - sx,\n dy = ty - sy,\n ix = 0.2 * (dx + dy),\n iy = 0.2 * (dy - dx);\n return 'M' + sx + ',' + sy + 'C' + (sx + ix) + ',' + (sy + iy) + ' ' + (tx + iy) + ',' + (ty - ix) + ' ' + tx + ',' + ty;\n};\nconst curveR = (sa, sr, ta, tr) => curve(sr * Math.cos(sa), sr * Math.sin(sa), tr * Math.cos(ta), tr * Math.sin(ta));\nconst orthoX = (sx, sy, tx, ty) => 'M' + sx + ',' + sy + 'V' + ty + 'H' + tx;\nconst orthoY = (sx, sy, tx, ty) => 'M' + sx + ',' + sy + 'H' + tx + 'V' + ty;\nconst orthoR = (sa, sr, ta, tr) => {\n const sc = Math.cos(sa),\n ss = Math.sin(sa),\n tc = Math.cos(ta),\n ts = Math.sin(ta),\n sf = Math.abs(ta - sa) > Math.PI ? ta <= sa : ta > sa;\n return 'M' + sr * sc + ',' + sr * ss + 'A' + sr + ',' + sr + ' 0 0,' + (sf ? 1 : 0) + ' ' + sr * tc + ',' + sr * ts + 'L' + tr * tc + ',' + tr * ts;\n};\nconst diagonalX = (sx, sy, tx, ty) => {\n const m = (sx + tx) / 2;\n return 'M' + sx + ',' + sy + 'C' + m + ',' + sy + ' ' + m + ',' + ty + ' ' + tx + ',' + ty;\n};\nconst diagonalY = (sx, sy, tx, ty) => {\n const m = (sy + ty) / 2;\n return 'M' + sx + ',' + sy + 'C' + sx + ',' + m + ' ' + tx + ',' + m + ' ' + tx + ',' + ty;\n};\nconst diagonalR = (sa, sr, ta, tr) => {\n const sc = Math.cos(sa),\n ss = Math.sin(sa),\n tc = Math.cos(ta),\n ts = Math.sin(ta),\n mr = (sr + tr) / 2;\n return 'M' + sr * sc + ',' + sr * ss + 'C' + mr * sc + ',' + mr * ss + ' ' + mr * tc + ',' + mr * ts + ' ' + tr * tc + ',' + tr * ts;\n};\nconst Paths = fastmap({\n 'line': line,\n 'line-radial': lineR,\n 'arc': arc,\n 'arc-radial': arcR,\n 'curve': curve,\n 'curve-radial': curveR,\n 'orthogonal-horizontal': orthoX,\n 'orthogonal-vertical': orthoY,\n 'orthogonal-radial': orthoR,\n 'diagonal-horizontal': diagonalX,\n 'diagonal-vertical': diagonalY,\n 'diagonal-radial': diagonalR\n});\n\n/**\n * Pie and donut chart layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size pie segments.\n * @param {number} [params.startAngle=0] - The start angle (in radians) of the layout.\n * @param {number} [params.endAngle=2\u03C0] - The end angle (in radians) of the layout.\n * @param {boolean} [params.sort] - Boolean flag for sorting sectors by value.\n */\nfunction Pie(params) {\n Transform.call(this, null, params);\n}\nPie.Definition = {\n 'type': 'Pie',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'startAngle',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'endAngle',\n 'type': 'number',\n 'default': 6.283185307179586\n }, {\n 'name': 'sort',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['startAngle', 'endAngle']\n }]\n};\ninherits(Pie, Transform, {\n transform(_, pulse) {\n var as = _.as || ['startAngle', 'endAngle'],\n startAngle = as[0],\n endAngle = as[1],\n field = _.field || one,\n start = _.startAngle || 0,\n stop = _.endAngle != null ? _.endAngle : 2 * Math.PI,\n data = pulse.source,\n values = data.map(field),\n n = values.length,\n a = start,\n k = (stop - start) / sum(values),\n index = range(n),\n i,\n t,\n v;\n if (_.sort) {\n index.sort((a, b) => values[a] - values[b]);\n }\n for (i = 0; i < n; ++i) {\n v = values[index[i]];\n t = data[index[i]];\n t[startAngle] = a;\n t[endAngle] = a += v * k;\n }\n this.value = values;\n return pulse.reflow(_.modified()).modifies(as);\n }\n});\n\nconst DEFAULT_COUNT = 5;\nfunction includeZero(scale) {\n const type = scale.type;\n return !scale.bins && (type === Linear || type === Pow || type === Sqrt);\n}\nfunction includePad(type) {\n return isContinuous(type) && type !== Sequential;\n}\nconst SKIP = toSet(['set', 'modified', 'clear', 'type', 'scheme', 'schemeExtent', 'schemeCount', 'domain', 'domainMin', 'domainMid', 'domainMax', 'domainRaw', 'domainImplicit', 'nice', 'zero', 'bins', 'range', 'rangeStep', 'round', 'reverse', 'interpolate', 'interpolateGamma']);\n\n/**\n * Maintains a scale function mapping data values to visual channels.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nfunction Scale(params) {\n Transform.call(this, null, params);\n this.modified(true); // always treat as modified\n}\ninherits(Scale, Transform, {\n transform(_, pulse) {\n var df = pulse.dataflow,\n scale$1 = this.value,\n key = scaleKey(_);\n if (!scale$1 || key !== scale$1.type) {\n this.value = scale$1 = scale(key)();\n }\n for (key in _) if (!SKIP[key]) {\n // padding is a scale property for band/point but not others\n if (key === 'padding' && includePad(scale$1.type)) continue;\n // invoke scale property setter, raise warning if not found\n isFunction(scale$1[key]) ? scale$1[key](_[key]) : df.warn('Unsupported scale property: ' + key);\n }\n configureRange(scale$1, _, configureBins(scale$1, _, configureDomain(scale$1, _, df)));\n return pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n }\n});\nfunction scaleKey(_) {\n var t = _.type,\n d = '',\n n;\n\n // backwards compatibility pre Vega 5.\n if (t === Sequential) return Sequential + '-' + Linear;\n if (isContinuousColor(_)) {\n n = _.rawDomain ? _.rawDomain.length : _.domain ? _.domain.length + +(_.domainMid != null) : 0;\n d = n === 2 ? Sequential + '-' : n === 3 ? Diverging + '-' : '';\n }\n return (d + t || Linear).toLowerCase();\n}\nfunction isContinuousColor(_) {\n const t = _.type;\n return isContinuous(t) && t !== Time && t !== UTC && (_.scheme || _.range && _.range.length && _.range.every(isString));\n}\nfunction configureDomain(scale, _, df) {\n // check raw domain, if provided use that and exit early\n const raw = rawDomain(scale, _.domainRaw, df);\n if (raw > -1) return raw;\n var domain = _.domain,\n type = scale.type,\n zero = _.zero || _.zero === undefined && includeZero(scale),\n n,\n mid;\n if (!domain) return 0;\n\n // adjust domain based on zero, min, max settings\n if (zero || _.domainMin != null || _.domainMax != null || _.domainMid != null) {\n n = (domain = domain.slice()).length - 1 || 1;\n if (zero) {\n if (domain[0] > 0) domain[0] = 0;\n if (domain[n] < 0) domain[n] = 0;\n }\n if (_.domainMin != null) domain[0] = _.domainMin;\n if (_.domainMax != null) domain[n] = _.domainMax;\n if (_.domainMid != null) {\n mid = _.domainMid;\n const i = mid > domain[n] ? n + 1 : mid < domain[0] ? 0 : n;\n if (i !== n) df.warn('Scale domainMid exceeds domain min or max.', mid);\n domain.splice(i, 0, mid);\n }\n }\n\n // adjust continuous domain for minimum pixel padding\n if (includePad(type) && _.padding && domain[0] !== peek(domain)) {\n domain = padDomain(type, domain, _.range, _.padding, _.exponent, _.constant);\n }\n\n // set the scale domain\n scale.domain(domainCheck(type, domain, df));\n\n // if ordinal scale domain is defined, prevent implicit\n // domain construction as side-effect of scale lookup\n if (type === Ordinal) {\n scale.unknown(_.domainImplicit ? scaleImplicit : undefined);\n }\n\n // perform 'nice' adjustment as requested\n if (_.nice && scale.nice) {\n scale.nice(_.nice !== true && tickCount(scale, _.nice) || null);\n }\n\n // return the cardinality of the domain\n return domain.length;\n}\nfunction rawDomain(scale, raw, df) {\n if (raw) {\n scale.domain(domainCheck(scale.type, raw, df));\n return raw.length;\n } else {\n return -1;\n }\n}\nfunction padDomain(type, domain, range, pad, exponent, constant) {\n var span = Math.abs(peek(range) - range[0]),\n frac = span / (span - 2 * pad),\n d = type === Log ? zoomLog(domain, null, frac) : type === Sqrt ? zoomPow(domain, null, frac, 0.5) : type === Pow ? zoomPow(domain, null, frac, exponent || 1) : type === Symlog ? zoomSymlog(domain, null, frac, constant || 1) : zoomLinear(domain, null, frac);\n domain = domain.slice();\n domain[0] = d[0];\n domain[domain.length - 1] = d[1];\n return domain;\n}\nfunction domainCheck(type, domain, df) {\n if (isLogarithmic(type)) {\n // sum signs of domain values\n // if all pos or all neg, abs(sum) === domain.length\n var s = Math.abs(domain.reduce((s, v) => s + (v < 0 ? -1 : v > 0 ? 1 : 0), 0));\n if (s !== domain.length) {\n df.warn('Log scale domain includes zero: ' + stringValue(domain));\n }\n }\n return domain;\n}\nfunction configureBins(scale, _, count) {\n let bins = _.bins;\n if (bins && !isArray(bins)) {\n // generate bin boundary array\n const domain = scale.domain(),\n lo = domain[0],\n hi = peek(domain),\n step = bins.step;\n let start = bins.start == null ? lo : bins.start,\n stop = bins.stop == null ? hi : bins.stop;\n if (!step) error('Scale bins parameter missing step property.');\n if (start < lo) start = step * Math.ceil(lo / step);\n if (stop > hi) stop = step * Math.floor(hi / step);\n bins = range(start, stop + step / 2, step);\n }\n if (bins) {\n // assign bin boundaries to scale instance\n scale.bins = bins;\n } else if (scale.bins) {\n // no current bins, remove bins if previously set\n delete scale.bins;\n }\n\n // special handling for bin-ordinal scales\n if (scale.type === BinOrdinal) {\n if (!bins) {\n // the domain specifies the bins\n scale.bins = scale.domain();\n } else if (!_.domain && !_.domainRaw) {\n // the bins specify the domain\n scale.domain(bins);\n count = bins.length;\n }\n }\n\n // return domain cardinality\n return count;\n}\nfunction configureRange(scale, _, count) {\n var type = scale.type,\n round = _.round || false,\n range = _.range;\n\n // if range step specified, calculate full range extent\n if (_.rangeStep != null) {\n range = configureRangeStep(type, _, count);\n }\n\n // else if a range scheme is defined, use that\n else if (_.scheme) {\n range = configureScheme(type, _, count);\n if (isFunction(range)) {\n if (scale.interpolator) {\n return scale.interpolator(range);\n } else {\n error(`Scale type ${type} does not support interpolating color schemes.`);\n }\n }\n }\n\n // given a range array for an interpolating scale, convert to interpolator\n if (range && isInterpolating(type)) {\n return scale.interpolator(interpolateColors(flip(range, _.reverse), _.interpolate, _.interpolateGamma));\n }\n\n // configure rounding / interpolation\n if (range && _.interpolate && scale.interpolate) {\n scale.interpolate(interpolate(_.interpolate, _.interpolateGamma));\n } else if (isFunction(scale.round)) {\n scale.round(round);\n } else if (isFunction(scale.rangeRound)) {\n scale.interpolate(round ? interpolateRound : interpolate$1);\n }\n if (range) scale.range(flip(range, _.reverse));\n}\nfunction configureRangeStep(type, _, count) {\n if (type !== Band && type !== Point) {\n error('Only band and point scales support rangeStep.');\n }\n\n // calculate full range based on requested step size and padding\n var outer = (_.paddingOuter != null ? _.paddingOuter : _.padding) || 0,\n inner = type === Point ? 1 : (_.paddingInner != null ? _.paddingInner : _.padding) || 0;\n return [0, _.rangeStep * bandSpace(count, inner, outer)];\n}\nfunction configureScheme(type, _, count) {\n var extent = _.schemeExtent,\n name,\n scheme$1;\n if (isArray(_.scheme)) {\n scheme$1 = interpolateColors(_.scheme, _.interpolate, _.interpolateGamma);\n } else {\n name = _.scheme.toLowerCase();\n scheme$1 = scheme(name);\n if (!scheme$1) error(`Unrecognized scheme name: ${_.scheme}`);\n }\n\n // determine size for potential discrete range\n count = type === Threshold ? count + 1 : type === BinOrdinal ? count - 1 : type === Quantile || type === Quantize ? +_.schemeCount || DEFAULT_COUNT : count;\n\n // adjust and/or quantize scheme as appropriate\n return isInterpolating(type) ? adjustScheme(scheme$1, extent, _.reverse) : isFunction(scheme$1) ? quantizeInterpolator(adjustScheme(scheme$1, extent), count) : type === Ordinal ? scheme$1 : scheme$1.slice(0, count);\n}\nfunction adjustScheme(scheme, extent, reverse) {\n return isFunction(scheme) && (extent || reverse) ? interpolateRange(scheme, flip(extent || [0, 1], reverse)) : scheme;\n}\nfunction flip(array, reverse) {\n return reverse ? array.slice().reverse() : array;\n}\n\n/**\n * Sorts scenegraph items in the pulse source array.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - A comparator\n * function for sorting tuples.\n */\nfunction SortItems(params) {\n Transform.call(this, null, params);\n}\ninherits(SortItems, Transform, {\n transform(_, pulse) {\n const mod = _.modified('sort') || pulse.changed(pulse.ADD) || pulse.modified(_.sort.fields) || pulse.modified('datum');\n if (mod) pulse.source.sort(stableCompare(_.sort));\n this.modified(mod);\n return pulse;\n }\n});\n\nconst Zero = 'zero',\n Center = 'center',\n Normalize = 'normalize',\n DefOutput = ['y0', 'y1'];\n\n/**\n * Stack layout for visualization elements.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to stack.\n * @param {Array<function(object): *>} [params.groupby] - An array of accessors to groupby.\n * @param {function(object,object): number} [params.sort] - A comparator for stack sorting.\n * @param {string} [offset='zero'] - Stack baseline offset. One of 'zero', 'center', 'normalize'.\n */\nfunction Stack(params) {\n Transform.call(this, null, params);\n}\nStack.Definition = {\n 'type': 'Stack',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'offset',\n 'type': 'enum',\n 'default': Zero,\n 'values': [Zero, Center, Normalize]\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': DefOutput\n }]\n};\ninherits(Stack, Transform, {\n transform(_, pulse) {\n var as = _.as || DefOutput,\n y0 = as[0],\n y1 = as[1],\n sort = stableCompare(_.sort),\n field = _.field || one,\n stack = _.offset === Center ? stackCenter : _.offset === Normalize ? stackNormalize : stackZero,\n groups,\n i,\n n,\n max;\n\n // partition, sum, and sort the stack groups\n groups = partition(pulse.source, _.groupby, sort, field);\n\n // compute stack layouts per group\n for (i = 0, n = groups.length, max = groups.max; i < n; ++i) {\n stack(groups[i], max, field, y0, y1);\n }\n return pulse.reflow(_.modified()).modifies(as);\n }\n});\nfunction stackCenter(group, max, field, y0, y1) {\n var last = (max - group.sum) / 2,\n m = group.length,\n j = 0,\n t;\n for (; j < m; ++j) {\n t = group[j];\n t[y0] = last;\n t[y1] = last += Math.abs(field(t));\n }\n}\nfunction stackNormalize(group, max, field, y0, y1) {\n var scale = 1 / group.sum,\n last = 0,\n m = group.length,\n j = 0,\n v = 0,\n t;\n for (; j < m; ++j) {\n t = group[j];\n t[y0] = last;\n t[y1] = last = scale * (v += Math.abs(field(t)));\n }\n}\nfunction stackZero(group, max, field, y0, y1) {\n var lastPos = 0,\n lastNeg = 0,\n m = group.length,\n j = 0,\n v,\n t;\n for (; j < m; ++j) {\n t = group[j];\n v = +field(t);\n if (v < 0) {\n t[y0] = lastNeg;\n t[y1] = lastNeg += v;\n } else {\n t[y0] = lastPos;\n t[y1] = lastPos += v;\n }\n }\n}\nfunction partition(data, groupby, sort, field) {\n var groups = [],\n get = f => f(t),\n map,\n i,\n n,\n m,\n t,\n k,\n g,\n s,\n max;\n\n // partition data points into stack groups\n if (groupby == null) {\n groups.push(data.slice());\n } else {\n for (map = {}, i = 0, n = data.length; i < n; ++i) {\n t = data[i];\n k = groupby.map(get);\n g = map[k];\n if (!g) {\n map[k] = g = [];\n groups.push(g);\n }\n g.push(t);\n }\n }\n\n // compute sums of groups, sort groups as needed\n for (k = 0, max = 0, m = groups.length; k < m; ++k) {\n g = groups[k];\n for (i = 0, s = 0, n = g.length; i < n; ++i) {\n s += Math.abs(field(g[i]));\n }\n g.sum = s;\n if (s > max) max = s;\n if (sort) g.sort(sort);\n }\n groups.max = max;\n return groups;\n}\n\nexport { AxisTicks as axisticks, DataJoin as datajoin, Encode as encode, LegendEntries as legendentries, LinkPath as linkpath, Pie as pie, Scale as scale, SortItems as sortitems, Stack as stack };\n", "import { Transform, rederive, ingest, replace } from 'vega-dataflow';\nimport { error, extent, inherits, identity, isArray, isFunction, isNumber, array, constant, one, accessorName, accessorFields, field, extend, toSet, zero } from 'vega-util';\nimport { tickStep, range, max, sum } from 'd3-array';\nimport { bandwidthNRD } from 'vega-statistics';\nimport { getProjectionPath, projectionProperties, projection } from 'vega-projection';\nimport { geoGraticule } from 'd3-geo';\nimport { rgb } from 'd3-color';\nimport { canvas } from 'vega-canvas';\n\nfunction noop() {}\nconst cases = [[], [[[1.0, 1.5], [0.5, 1.0]]], [[[1.5, 1.0], [1.0, 1.5]]], [[[1.5, 1.0], [0.5, 1.0]]], [[[1.0, 0.5], [1.5, 1.0]]], [[[1.0, 1.5], [0.5, 1.0]], [[1.0, 0.5], [1.5, 1.0]]], [[[1.0, 0.5], [1.0, 1.5]]], [[[1.0, 0.5], [0.5, 1.0]]], [[[0.5, 1.0], [1.0, 0.5]]], [[[1.0, 1.5], [1.0, 0.5]]], [[[0.5, 1.0], [1.0, 0.5]], [[1.5, 1.0], [1.0, 1.5]]], [[[1.5, 1.0], [1.0, 0.5]]], [[[0.5, 1.0], [1.5, 1.0]]], [[[1.0, 1.5], [1.5, 1.0]]], [[[0.5, 1.0], [1.0, 1.5]]], []];\n\n// Implementation adapted from d3/d3-contour. Thanks!\nfunction contours () {\n var dx = 1,\n dy = 1,\n smooth = smoothLinear;\n function contours(values, tz) {\n return tz.map(value => contour(values, value));\n }\n\n // Accumulate, smooth contour rings, assign holes to exterior rings.\n // Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js\n function contour(values, value) {\n var polygons = [],\n holes = [];\n isorings(values, value, ring => {\n smooth(ring, values, value);\n if (area(ring) > 0) polygons.push([ring]);else holes.push(ring);\n });\n holes.forEach(hole => {\n for (var i = 0, n = polygons.length, polygon; i < n; ++i) {\n if (contains((polygon = polygons[i])[0], hole) !== -1) {\n polygon.push(hole);\n return;\n }\n }\n });\n return {\n type: 'MultiPolygon',\n value: value,\n coordinates: polygons\n };\n }\n\n // Marching squares with isolines stitched into rings.\n // Based on https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js\n function isorings(values, value, callback) {\n var fragmentByStart = [],\n fragmentByEnd = [],\n x,\n y,\n t0,\n t1,\n t2,\n t3;\n\n // Special case for the first row (y = -1, t2 = t3 = 0).\n x = y = -1;\n t1 = values[0] >= value;\n cases[t1 << 1].forEach(stitch);\n while (++x < dx - 1) {\n t0 = t1, t1 = values[x + 1] >= value;\n cases[t0 | t1 << 1].forEach(stitch);\n }\n cases[t1 << 0].forEach(stitch);\n\n // General case for the intermediate rows.\n while (++y < dy - 1) {\n x = -1;\n t1 = values[y * dx + dx] >= value;\n t2 = values[y * dx] >= value;\n cases[t1 << 1 | t2 << 2].forEach(stitch);\n while (++x < dx - 1) {\n t0 = t1, t1 = values[y * dx + dx + x + 1] >= value;\n t3 = t2, t2 = values[y * dx + x + 1] >= value;\n cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch);\n }\n cases[t1 | t2 << 3].forEach(stitch);\n }\n\n // Special case for the last row (y = dy - 1, t0 = t1 = 0).\n x = -1;\n t2 = values[y * dx] >= value;\n cases[t2 << 2].forEach(stitch);\n while (++x < dx - 1) {\n t3 = t2, t2 = values[y * dx + x + 1] >= value;\n cases[t2 << 2 | t3 << 3].forEach(stitch);\n }\n cases[t2 << 3].forEach(stitch);\n function stitch(line) {\n var start = [line[0][0] + x, line[0][1] + y],\n end = [line[1][0] + x, line[1][1] + y],\n startIndex = index(start),\n endIndex = index(end),\n f,\n g;\n if (f = fragmentByEnd[startIndex]) {\n if (g = fragmentByStart[endIndex]) {\n delete fragmentByEnd[f.end];\n delete fragmentByStart[g.start];\n if (f === g) {\n f.ring.push(end);\n callback(f.ring);\n } else {\n fragmentByStart[f.start] = fragmentByEnd[g.end] = {\n start: f.start,\n end: g.end,\n ring: f.ring.concat(g.ring)\n };\n }\n } else {\n delete fragmentByEnd[f.end];\n f.ring.push(end);\n fragmentByEnd[f.end = endIndex] = f;\n }\n } else if (f = fragmentByStart[endIndex]) {\n if (g = fragmentByEnd[startIndex]) {\n delete fragmentByStart[f.start];\n delete fragmentByEnd[g.end];\n if (f === g) {\n f.ring.push(end);\n callback(f.ring);\n } else {\n fragmentByStart[g.start] = fragmentByEnd[f.end] = {\n start: g.start,\n end: f.end,\n ring: g.ring.concat(f.ring)\n };\n }\n } else {\n delete fragmentByStart[f.start];\n f.ring.unshift(start);\n fragmentByStart[f.start = startIndex] = f;\n }\n } else {\n fragmentByStart[startIndex] = fragmentByEnd[endIndex] = {\n start: startIndex,\n end: endIndex,\n ring: [start, end]\n };\n }\n }\n }\n function index(point) {\n return point[0] * 2 + point[1] * (dx + 1) * 4;\n }\n function smoothLinear(ring, values, value) {\n ring.forEach(point => {\n var x = point[0],\n y = point[1],\n xt = x | 0,\n yt = y | 0,\n v0,\n v1 = values[yt * dx + xt];\n if (x > 0 && x < dx && xt === x) {\n v0 = values[yt * dx + xt - 1];\n point[0] = x + (value - v0) / (v1 - v0) - 0.5;\n }\n if (y > 0 && y < dy && yt === y) {\n v0 = values[(yt - 1) * dx + xt];\n point[1] = y + (value - v0) / (v1 - v0) - 0.5;\n }\n });\n }\n contours.contour = contour;\n contours.size = function (_) {\n if (!arguments.length) return [dx, dy];\n var _0 = Math.floor(_[0]),\n _1 = Math.floor(_[1]);\n if (!(_0 >= 0 && _1 >= 0)) error('invalid size');\n return dx = _0, dy = _1, contours;\n };\n contours.smooth = function (_) {\n return arguments.length ? (smooth = _ ? smoothLinear : noop, contours) : smooth === smoothLinear;\n };\n return contours;\n}\nfunction area(ring) {\n var i = 0,\n n = ring.length,\n area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1];\n while (++i < n) area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1];\n return area;\n}\nfunction contains(ring, hole) {\n var i = -1,\n n = hole.length,\n c;\n while (++i < n) if (c = ringContains(ring, hole[i])) return c;\n return 0;\n}\nfunction ringContains(ring, point) {\n var x = point[0],\n y = point[1],\n contains = -1;\n for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) {\n var pi = ring[i],\n xi = pi[0],\n yi = pi[1],\n pj = ring[j],\n xj = pj[0],\n yj = pj[1];\n if (segmentContains(pi, pj, point)) return 0;\n if (yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi) contains = -contains;\n }\n return contains;\n}\nfunction segmentContains(a, b, c) {\n var i;\n return collinear(a, b, c) && within(a[i = +(a[0] === b[0])], c[i], b[i]);\n}\nfunction collinear(a, b, c) {\n return (b[0] - a[0]) * (c[1] - a[1]) === (c[0] - a[0]) * (b[1] - a[1]);\n}\nfunction within(p, q, r) {\n return p <= q && q <= r || r <= q && q <= p;\n}\n\nfunction quantize (k, nice, zero) {\n return function (values) {\n var ex = extent(values),\n start = zero ? Math.min(ex[0], 0) : ex[0],\n stop = ex[1],\n span = stop - start,\n step = nice ? tickStep(start, stop, k) : span / (k + 1);\n return range(start + step, stop, step);\n };\n}\n\n/**\n * Generate isocontours (level sets) based on input raster grid data.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} [params.field] - The field with raster grid\n * data. If unspecified, the tuple itself is interpreted as a raster grid.\n * @param {Array<number>} [params.thresholds] - Contour threshold array. If\n * specified, the levels, nice, resolve, and zero parameters are ignored.\n * @param {number} [params.levels] - The desired number of contour levels.\n * @param {boolean} [params.nice] - Boolean flag indicating if the contour\n * threshold values should be automatically aligned to \"nice\"\n * human-friendly values. Setting this flag may cause the number of\n * thresholds to deviate from the specified levels.\n * @param {string} [params.resolve] - The method for resolving thresholds\n * across multiple input grids. If 'independent' (the default), threshold\n * calculation will be performed separately for each grid. If 'shared', a\n * single set of threshold values will be used for all input grids.\n * @param {boolean} [params.zero] - Boolean flag indicating if the contour\n * threshold values should include zero.\n * @param {boolean} [params.smooth] - Boolean flag indicating if the contour\n * polygons should be smoothed using linear interpolation. The default is\n * true. The parameter is ignored when using density estimation.\n * @param {boolean} [params.scale] - Optional numerical value by which to\n * scale the output isocontour coordinates. This parameter can be useful\n * to scale the contours to match a desired output resolution.\n * @param {string} [params.as='contour'] - The output field in which to store\n * the generated isocontour data (default 'contour').\n */\nfunction Isocontour(params) {\n Transform.call(this, null, params);\n}\nIsocontour.Definition = {\n 'type': 'Isocontour',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'thresholds',\n 'type': 'number',\n 'array': true\n }, {\n 'name': 'levels',\n 'type': 'number'\n }, {\n 'name': 'nice',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'resolve',\n 'type': 'enum',\n 'values': ['shared', 'independent'],\n 'default': 'independent'\n }, {\n 'name': 'zero',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'smooth',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'scale',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'translate',\n 'type': 'number',\n 'array': true,\n 'expr': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'null': true,\n 'default': 'contour'\n }]\n};\ninherits(Isocontour, Transform, {\n transform(_, pulse) {\n if (this.value && !pulse.changed() && !_.modified()) {\n return pulse.StopPropagation;\n }\n var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n source = pulse.materialize(pulse.SOURCE).source,\n field = _.field || identity,\n contour = contours().smooth(_.smooth !== false),\n tz = _.thresholds || levels(source, field, _),\n as = _.as === null ? null : _.as || 'contour',\n values = [];\n source.forEach(t => {\n const grid = field(t);\n\n // generate contour paths in GeoJSON format\n const paths = contour.size([grid.width, grid.height])(grid.values, isArray(tz) ? tz : tz(grid.values));\n\n // adjust contour path coordinates as needed\n transformPaths(paths, grid, t, _);\n\n // ingest; copy source data properties to output\n paths.forEach(p => {\n values.push(rederive(t, ingest(as != null ? {\n [as]: p\n } : p)));\n });\n });\n if (this.value) out.rem = this.value;\n this.value = out.source = out.add = values;\n return out;\n }\n});\nfunction levels(values, f, _) {\n const q = quantize(_.levels || 10, _.nice, _.zero !== false);\n return _.resolve !== 'shared' ? q : q(values.map(t => max(f(t).values)));\n}\nfunction transformPaths(paths, grid, datum, _) {\n let s = _.scale || grid.scale,\n t = _.translate || grid.translate;\n if (isFunction(s)) s = s(datum, _);\n if (isFunction(t)) t = t(datum, _);\n if ((s === 1 || s == null) && !t) return;\n const sx = (isNumber(s) ? s : s[0]) || 1,\n sy = (isNumber(s) ? s : s[1]) || 1,\n tx = t && t[0] || 0,\n ty = t && t[1] || 0;\n paths.forEach(transform(grid, sx, sy, tx, ty));\n}\nfunction transform(grid, sx, sy, tx, ty) {\n const x1 = grid.x1 || 0,\n y1 = grid.y1 || 0,\n flip = sx * sy < 0;\n function transformPolygon(coordinates) {\n coordinates.forEach(transformRing);\n }\n function transformRing(coordinates) {\n if (flip) coordinates.reverse(); // maintain winding order\n coordinates.forEach(transformPoint);\n }\n function transformPoint(coordinates) {\n coordinates[0] = (coordinates[0] - x1) * sx + tx;\n coordinates[1] = (coordinates[1] - y1) * sy + ty;\n }\n return function (geometry) {\n geometry.coordinates.forEach(transformPolygon);\n return geometry;\n };\n}\n\nfunction radius(bw, data, f) {\n const v = bw >= 0 ? bw : bandwidthNRD(data, f);\n return Math.round((Math.sqrt(4 * v * v + 1) - 1) / 2);\n}\nfunction number(_) {\n return isFunction(_) ? _ : constant(+_);\n}\n\n// Implementation adapted from d3/d3-contour. Thanks!\nfunction density2D () {\n var x = d => d[0],\n y = d => d[1],\n weight = one,\n bandwidth = [-1, -1],\n dx = 960,\n dy = 500,\n k = 2; // log2(cellSize)\n\n function density(data, counts) {\n const rx = radius(bandwidth[0], data, x) >> k,\n // blur x-radius\n ry = radius(bandwidth[1], data, y) >> k,\n // blur y-radius\n ox = rx ? rx + 2 : 0,\n // x-offset padding for blur\n oy = ry ? ry + 2 : 0,\n // y-offset padding for blur\n n = 2 * ox + (dx >> k),\n // grid width\n m = 2 * oy + (dy >> k),\n // grid height\n values0 = new Float32Array(n * m),\n values1 = new Float32Array(n * m);\n let values = values0;\n data.forEach(d => {\n const xi = ox + (+x(d) >> k),\n yi = oy + (+y(d) >> k);\n if (xi >= 0 && xi < n && yi >= 0 && yi < m) {\n values0[xi + yi * n] += +weight(d);\n }\n });\n if (rx > 0 && ry > 0) {\n blurX(n, m, values0, values1, rx);\n blurY(n, m, values1, values0, ry);\n blurX(n, m, values0, values1, rx);\n blurY(n, m, values1, values0, ry);\n blurX(n, m, values0, values1, rx);\n blurY(n, m, values1, values0, ry);\n } else if (rx > 0) {\n blurX(n, m, values0, values1, rx);\n blurX(n, m, values1, values0, rx);\n blurX(n, m, values0, values1, rx);\n values = values1;\n } else if (ry > 0) {\n blurY(n, m, values0, values1, ry);\n blurY(n, m, values1, values0, ry);\n blurY(n, m, values0, values1, ry);\n values = values1;\n }\n\n // scale density estimates\n // density in points per square pixel or probability density\n const s = counts ? Math.pow(2, -2 * k) : 1 / sum(values);\n for (let i = 0, sz = n * m; i < sz; ++i) values[i] *= s;\n return {\n values: values,\n scale: 1 << k,\n width: n,\n height: m,\n x1: ox,\n y1: oy,\n x2: ox + (dx >> k),\n y2: oy + (dy >> k)\n };\n }\n density.x = function (_) {\n return arguments.length ? (x = number(_), density) : x;\n };\n density.y = function (_) {\n return arguments.length ? (y = number(_), density) : y;\n };\n density.weight = function (_) {\n return arguments.length ? (weight = number(_), density) : weight;\n };\n density.size = function (_) {\n if (!arguments.length) return [dx, dy];\n var _0 = +_[0],\n _1 = +_[1];\n if (!(_0 >= 0 && _1 >= 0)) error('invalid size');\n return dx = _0, dy = _1, density;\n };\n density.cellSize = function (_) {\n if (!arguments.length) return 1 << k;\n if (!((_ = +_) >= 1)) error('invalid cell size');\n k = Math.floor(Math.log(_) / Math.LN2);\n return density;\n };\n density.bandwidth = function (_) {\n if (!arguments.length) return bandwidth;\n _ = array(_);\n if (_.length === 1) _ = [+_[0], +_[0]];\n if (_.length !== 2) error('invalid bandwidth');\n return bandwidth = _, density;\n };\n return density;\n}\nfunction blurX(n, m, source, target, r) {\n const w = (r << 1) + 1;\n for (let j = 0; j < m; ++j) {\n for (let i = 0, sr = 0; i < n + r; ++i) {\n if (i < n) {\n sr += source[i + j * n];\n }\n if (i >= r) {\n if (i >= w) {\n sr -= source[i - w + j * n];\n }\n target[i - r + j * n] = sr / Math.min(i + 1, n - 1 + w - i, w);\n }\n }\n }\n}\nfunction blurY(n, m, source, target, r) {\n const w = (r << 1) + 1;\n for (let i = 0; i < n; ++i) {\n for (let j = 0, sr = 0; j < m + r; ++j) {\n if (j < m) {\n sr += source[i + j * n];\n }\n if (j >= r) {\n if (j >= w) {\n sr -= source[i + (j - w) * n];\n }\n target[i + (j - r) * n] = sr / Math.min(j + 1, m - 1 + w - j, w);\n }\n }\n }\n}\n\n/**\n * Perform 2D kernel-density estimation of point data.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array<number>} params.size - The [width, height] extent (in\n * units of input pixels) over which to perform density estimation.\n * @param {function(object): number} params.x - The x-coordinate accessor.\n * @param {function(object): number} params.y - The y-coordinate accessor.\n * @param {function(object): number} [params.weight] - The weight accessor.\n * @param {Array<function(object): *>} [params.groupby] - An array of accessors\n * to groupby.\n * @param {number} [params.cellSize] - Contour density calculation cell size.\n * This parameter determines the level of spatial approximation. For example,\n * the default value of 4 maps to 2x reductions in both x- and y- dimensions.\n * A value of 1 will result in an output raster grid whose dimensions exactly\n * matches the size parameter.\n * @param {Array<number>} [params.bandwidth] - The KDE kernel bandwidths,\n * in pixels. The input can be a two-element array specifying separate\n * x and y bandwidths, or a single-element array specifying both. If the\n * bandwidth is unspecified or less than zero, the bandwidth will be\n * automatically determined.\n * @param {boolean} [params.counts=false] - A boolean flag indicating if the\n * output values should be probability estimates (false, default) or\n * smoothed counts (true).\n * @param {string} [params.as='grid'] - The output field in which to store\n * the generated raster grid (default 'grid').\n */\nfunction KDE2D(params) {\n Transform.call(this, null, params);\n}\nKDE2D.Definition = {\n 'type': 'KDE2D',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2,\n 'required': true\n }, {\n 'name': 'x',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'y',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'weight',\n 'type': 'field'\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'cellSize',\n 'type': 'number'\n }, {\n 'name': 'bandwidth',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'counts',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'grid'\n }]\n};\nconst PARAMS = ['x', 'y', 'weight', 'size', 'cellSize', 'bandwidth'];\nfunction params(obj, _) {\n PARAMS.forEach(param => _[param] != null ? obj[param](_[param]) : 0);\n return obj;\n}\ninherits(KDE2D, Transform, {\n transform(_, pulse) {\n if (this.value && !pulse.changed() && !_.modified()) return pulse.StopPropagation;\n var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n source = pulse.materialize(pulse.SOURCE).source,\n groups = partition(source, _.groupby),\n names = (_.groupby || []).map(accessorName),\n kde = params(density2D(), _),\n as = _.as || 'grid',\n values = [];\n function set(t, vals) {\n for (let i = 0; i < names.length; ++i) t[names[i]] = vals[i];\n return t;\n }\n\n // generate density raster grids\n values = groups.map(g => ingest(set({\n [as]: kde(g, _.counts)\n }, g.dims)));\n if (this.value) out.rem = this.value;\n this.value = out.source = out.add = values;\n return out;\n }\n});\nfunction partition(data, groupby) {\n var groups = [],\n get = f => f(t),\n map,\n i,\n n,\n t,\n k,\n g;\n\n // partition data points into groups\n if (groupby == null) {\n groups.push(data);\n } else {\n for (map = {}, i = 0, n = data.length; i < n; ++i) {\n t = data[i];\n k = groupby.map(get);\n g = map[k];\n if (!g) {\n map[k] = g = [];\n g.dims = k;\n groups.push(g);\n }\n g.push(t);\n }\n }\n return groups;\n}\n\n/**\n * Generate contours based on kernel-density estimation of point data.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array<number>} params.size - The dimensions [width, height] over which to compute contours.\n * If the values parameter is provided, this must be the dimensions of the input data.\n * If density estimation is performed, this is the output view dimensions in pixels.\n * @param {Array<number>} [params.values] - An array of numeric values representing an\n * width x height grid of values over which to compute contours. If unspecified, this\n * transform will instead attempt to compute contours for the kernel density estimate\n * using values drawn from data tuples in the input pulse.\n * @param {function(object): number} [params.x] - The pixel x-coordinate accessor for density estimation.\n * @param {function(object): number} [params.y] - The pixel y-coordinate accessor for density estimation.\n * @param {function(object): number} [params.weight] - The data point weight accessor for density estimation.\n * @param {number} [params.cellSize] - Contour density calculation cell size.\n * @param {number} [params.bandwidth] - Kernel density estimation bandwidth.\n * @param {Array<number>} [params.thresholds] - Contour threshold array. If\n * this parameter is set, the count and nice parameters will be ignored.\n * @param {number} [params.count] - The desired number of contours.\n * @param {boolean} [params.nice] - Boolean flag indicating if the contour\n * threshold values should be automatically aligned to \"nice\"\n * human-friendly values. Setting this flag may cause the number of\n * thresholds to deviate from the specified count.\n * @param {boolean} [params.smooth] - Boolean flag indicating if the contour\n * polygons should be smoothed using linear interpolation. The default is\n * true. The parameter is ignored when using density estimation.\n */\nfunction Contour(params) {\n Transform.call(this, null, params);\n}\nContour.Definition = {\n 'type': 'Contour',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2,\n 'required': true\n }, {\n 'name': 'values',\n 'type': 'number',\n 'array': true\n }, {\n 'name': 'x',\n 'type': 'field'\n }, {\n 'name': 'y',\n 'type': 'field'\n }, {\n 'name': 'weight',\n 'type': 'field'\n }, {\n 'name': 'cellSize',\n 'type': 'number'\n }, {\n 'name': 'bandwidth',\n 'type': 'number'\n }, {\n 'name': 'count',\n 'type': 'number'\n }, {\n 'name': 'nice',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'thresholds',\n 'type': 'number',\n 'array': true\n }, {\n 'name': 'smooth',\n 'type': 'boolean',\n 'default': true\n }]\n};\ninherits(Contour, Transform, {\n transform(_, pulse) {\n if (this.value && !pulse.changed() && !_.modified()) {\n return pulse.StopPropagation;\n }\n var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n contour = contours().smooth(_.smooth !== false),\n values = _.values,\n thresh = _.thresholds || quantize(_.count || 10, _.nice, !!values),\n size = _.size,\n grid,\n post;\n if (!values) {\n values = pulse.materialize(pulse.SOURCE).source;\n grid = params(density2D(), _)(values, true);\n post = transform(grid, grid.scale || 1, grid.scale || 1, 0, 0);\n size = [grid.width, grid.height];\n values = grid.values;\n }\n thresh = isArray(thresh) ? thresh : thresh(values);\n values = contour.size(size)(values, thresh);\n if (post) values.forEach(post);\n if (this.value) out.rem = this.value;\n this.value = out.source = out.add = (values || []).map(ingest);\n return out;\n }\n});\n\nconst Feature = 'Feature';\nconst FeatureCollection = 'FeatureCollection';\nconst MultiPoint = 'MultiPoint';\n\n/**\n * Consolidate an array of [longitude, latitude] points or GeoJSON features\n * into a combined GeoJSON object. This transform is particularly useful for\n * combining geo data for a Projection's fit argument. The resulting GeoJSON\n * data is available as this transform's value. Input pulses are unchanged.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array<function(object): *>} [params.fields] - A two-element array\n * of field accessors for the longitude and latitude values.\n * @param {function(object): *} params.geojson - A field accessor for\n * retrieving GeoJSON feature data.\n */\nfunction GeoJSON(params) {\n Transform.call(this, null, params);\n}\nGeoJSON.Definition = {\n 'type': 'GeoJSON',\n 'metadata': {},\n 'params': [{\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'geojson',\n 'type': 'field'\n }]\n};\ninherits(GeoJSON, Transform, {\n transform(_, pulse) {\n var features = this._features,\n points = this._points,\n fields = _.fields,\n lon = fields && fields[0],\n lat = fields && fields[1],\n geojson = _.geojson || !fields && identity,\n flag = pulse.ADD,\n mod;\n mod = _.modified() || pulse.changed(pulse.REM) || pulse.modified(accessorFields(geojson)) || lon && pulse.modified(accessorFields(lon)) || lat && pulse.modified(accessorFields(lat));\n if (!this.value || mod) {\n flag = pulse.SOURCE;\n this._features = features = [];\n this._points = points = [];\n }\n if (geojson) {\n pulse.visit(flag, t => features.push(geojson(t)));\n }\n if (lon && lat) {\n pulse.visit(flag, t => {\n var x = lon(t),\n y = lat(t);\n if (x != null && y != null && (x = +x) === x && (y = +y) === y) {\n points.push([x, y]);\n }\n });\n features = features.concat({\n type: Feature,\n geometry: {\n type: MultiPoint,\n coordinates: points\n }\n });\n }\n this.value = {\n type: FeatureCollection,\n features: features\n };\n }\n});\n\n/**\n * Map GeoJSON data to an SVG path string.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(number, number): *} params.projection - The cartographic\n * projection to apply.\n * @param {function(object): *} [params.field] - The field with GeoJSON data,\n * or null if the tuple itself is a GeoJSON feature.\n * @param {string} [params.as='path'] - The output field in which to store\n * the generated path data (default 'path').\n */\nfunction GeoPath(params) {\n Transform.call(this, null, params);\n}\nGeoPath.Definition = {\n 'type': 'GeoPath',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'projection',\n 'type': 'projection'\n }, {\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'pointRadius',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'path'\n }]\n};\ninherits(GeoPath, Transform, {\n transform(_, pulse) {\n var out = pulse.fork(pulse.ALL),\n path = this.value,\n field = _.field || identity,\n as = _.as || 'path',\n flag = out.SOURCE;\n if (!path || _.modified()) {\n // parameters updated, reset and reflow\n this.value = path = getProjectionPath(_.projection);\n out.materialize().reflow();\n } else {\n flag = field === identity || pulse.modified(field.fields) ? out.ADD_MOD : out.ADD;\n }\n const prev = initPath(path, _.pointRadius);\n out.visit(flag, t => t[as] = path(field(t)));\n path.pointRadius(prev);\n return out.modifies(as);\n }\n});\nfunction initPath(path, pointRadius) {\n const prev = path.pointRadius();\n path.context(null);\n if (pointRadius != null) {\n path.pointRadius(pointRadius);\n }\n return prev;\n}\n\n/**\n * Geo-code a longitude/latitude point to an x/y coordinate.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(number, number): *} params.projection - The cartographic\n * projection to apply.\n * @param {Array<function(object): *>} params.fields - A two-element array of\n * field accessors for the longitude and latitude values.\n * @param {Array<string>} [params.as] - A two-element array of field names\n * under which to store the result. Defaults to ['x','y'].\n */\nfunction GeoPoint(params) {\n Transform.call(this, null, params);\n}\nGeoPoint.Definition = {\n 'type': 'GeoPoint',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'projection',\n 'type': 'projection',\n 'required': true\n }, {\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'required': true,\n 'length': 2\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['x', 'y']\n }]\n};\ninherits(GeoPoint, Transform, {\n transform(_, pulse) {\n var proj = _.projection,\n lon = _.fields[0],\n lat = _.fields[1],\n as = _.as || ['x', 'y'],\n x = as[0],\n y = as[1],\n mod;\n function set(t) {\n const xy = proj([lon(t), lat(t)]);\n if (xy) {\n t[x] = xy[0];\n t[y] = xy[1];\n } else {\n t[x] = undefined;\n t[y] = undefined;\n }\n }\n if (_.modified()) {\n // parameters updated, reflow\n pulse = pulse.materialize().reflow(true).visit(pulse.SOURCE, set);\n } else {\n mod = pulse.modified(lon.fields) || pulse.modified(lat.fields);\n pulse.visit(mod ? pulse.ADD_MOD : pulse.ADD, set);\n }\n return pulse.modifies(as);\n }\n});\n\n/**\n * Annotate items with a geopath shape generator.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(number, number): *} params.projection - The cartographic\n * projection to apply.\n * @param {function(object): *} [params.field] - The field with GeoJSON data,\n * or null if the tuple itself is a GeoJSON feature.\n * @param {string} [params.as='shape'] - The output field in which to store\n * the generated path data (default 'shape').\n */\nfunction GeoShape(params) {\n Transform.call(this, null, params);\n}\nGeoShape.Definition = {\n 'type': 'GeoShape',\n 'metadata': {\n 'modifies': true,\n 'nomod': true\n },\n 'params': [{\n 'name': 'projection',\n 'type': 'projection'\n }, {\n 'name': 'field',\n 'type': 'field',\n 'default': 'datum'\n }, {\n 'name': 'pointRadius',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'shape'\n }]\n};\ninherits(GeoShape, Transform, {\n transform(_, pulse) {\n var out = pulse.fork(pulse.ALL),\n shape = this.value,\n as = _.as || 'shape',\n flag = out.ADD;\n if (!shape || _.modified()) {\n // parameters updated, reset and reflow\n this.value = shape = shapeGenerator(getProjectionPath(_.projection), _.field || field('datum'), _.pointRadius);\n out.materialize().reflow();\n flag = out.SOURCE;\n }\n out.visit(flag, t => t[as] = shape);\n return out.modifies(as);\n }\n});\nfunction shapeGenerator(path, field, pointRadius) {\n const shape = pointRadius == null ? _ => path(field(_)) : _ => {\n var prev = path.pointRadius(),\n value = path.pointRadius(pointRadius)(field(_));\n path.pointRadius(prev);\n return value;\n };\n shape.context = _ => {\n path.context(_);\n return shape;\n };\n return shape;\n}\n\n/**\n * GeoJSON feature generator for creating graticules.\n * @constructor\n */\nfunction Graticule(params) {\n Transform.call(this, [], params);\n this.generator = geoGraticule();\n}\nGraticule.Definition = {\n 'type': 'Graticule',\n 'metadata': {\n 'changes': true,\n 'generates': true\n },\n 'params': [{\n 'name': 'extent',\n 'type': 'array',\n 'array': true,\n 'length': 2,\n 'content': {\n 'type': 'number',\n 'array': true,\n 'length': 2\n }\n }, {\n 'name': 'extentMajor',\n 'type': 'array',\n 'array': true,\n 'length': 2,\n 'content': {\n 'type': 'number',\n 'array': true,\n 'length': 2\n }\n }, {\n 'name': 'extentMinor',\n 'type': 'array',\n 'array': true,\n 'length': 2,\n 'content': {\n 'type': 'number',\n 'array': true,\n 'length': 2\n }\n }, {\n 'name': 'step',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'stepMajor',\n 'type': 'number',\n 'array': true,\n 'length': 2,\n 'default': [90, 360]\n }, {\n 'name': 'stepMinor',\n 'type': 'number',\n 'array': true,\n 'length': 2,\n 'default': [10, 10]\n }, {\n 'name': 'precision',\n 'type': 'number',\n 'default': 2.5\n }]\n};\ninherits(Graticule, Transform, {\n transform(_, pulse) {\n var src = this.value,\n gen = this.generator,\n t;\n if (!src.length || _.modified()) {\n for (const prop in _) {\n if (isFunction(gen[prop])) {\n gen[prop](_[prop]);\n }\n }\n }\n t = gen();\n if (src.length) {\n pulse.mod.push(replace(src[0], t));\n } else {\n pulse.add.push(ingest(t));\n }\n src[0] = t;\n return pulse;\n }\n});\n\n/**\n * Render a heatmap image for input raster grid data.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} [params.field] - The field with raster grid\n * data. If unspecified, the tuple itself is interpreted as a raster grid.\n * @param {string} [params.color] - A constant color value or function for\n * individual pixel color. If a function, it will be invoked with an input\n * object that includes $x, $y, $value, and $max fields for the grid.\n * @param {number} [params.opacity] - A constant opacity value or function for\n * individual pixel opacity. If a function, it will be invoked with an input\n * object that includes $x, $y, $value, and $max fields for the grid.\n * @param {string} [params.resolve] - The method for resolving maximum values\n * across multiple input grids. If 'independent' (the default), maximum\n * calculation will be performed separately for each grid. If 'shared',\n * a single global maximum will be used for all input grids.\n * @param {string} [params.as='image'] - The output field in which to store\n * the generated bitmap canvas images (default 'image').\n */\nfunction Heatmap(params) {\n Transform.call(this, null, params);\n}\nHeatmap.Definition = {\n 'type': 'heatmap',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'color',\n 'type': 'string',\n 'expr': true\n }, {\n 'name': 'opacity',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'resolve',\n 'type': 'enum',\n 'values': ['shared', 'independent'],\n 'default': 'independent'\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'image'\n }]\n};\ninherits(Heatmap, Transform, {\n transform(_, pulse) {\n if (!pulse.changed() && !_.modified()) {\n return pulse.StopPropagation;\n }\n var source = pulse.materialize(pulse.SOURCE).source,\n shared = _.resolve === 'shared',\n field = _.field || identity,\n opacity = opacity_(_.opacity, _),\n color = color_(_.color, _),\n as = _.as || 'image',\n obj = {\n $x: 0,\n $y: 0,\n $value: 0,\n $max: shared ? max(source.map(t => max(field(t).values))) : 0\n };\n source.forEach(t => {\n const v = field(t);\n\n // build proxy data object\n const o = extend({}, t, obj);\n // set maximum value if not globally shared\n if (!shared) o.$max = max(v.values || []);\n\n // generate canvas image\n // optimize color/opacity if not pixel-dependent\n t[as] = toCanvas(v, o, color.dep ? color : constant(color(o)), opacity.dep ? opacity : constant(opacity(o)));\n });\n return pulse.reflow(true).modifies(as);\n }\n});\n\n// get image color function\nfunction color_(color, _) {\n let f;\n if (isFunction(color)) {\n f = obj => rgb(color(obj, _));\n f.dep = dependency(color);\n } else {\n // default to mid-grey\n f = constant(rgb(color || '#888'));\n }\n return f;\n}\n\n// get image opacity function\nfunction opacity_(opacity, _) {\n let f;\n if (isFunction(opacity)) {\n f = obj => opacity(obj, _);\n f.dep = dependency(opacity);\n } else if (opacity) {\n f = constant(opacity);\n } else {\n // default to [0, max] opacity gradient\n f = obj => obj.$value / obj.$max || 0;\n f.dep = true;\n }\n return f;\n}\n\n// check if function depends on individual pixel data\nfunction dependency(f) {\n if (!isFunction(f)) return false;\n const set = toSet(accessorFields(f));\n return set.$x || set.$y || set.$value || set.$max;\n}\n\n// render raster grid to canvas\nfunction toCanvas(grid, obj, color, opacity) {\n const n = grid.width,\n m = grid.height,\n x1 = grid.x1 || 0,\n y1 = grid.y1 || 0,\n x2 = grid.x2 || n,\n y2 = grid.y2 || m,\n val = grid.values,\n value = val ? i => val[i] : zero,\n can = canvas(x2 - x1, y2 - y1),\n ctx = can.getContext('2d'),\n img = ctx.getImageData(0, 0, x2 - x1, y2 - y1),\n pix = img.data;\n for (let j = y1, k = 0; j < y2; ++j) {\n obj.$y = j - y1;\n for (let i = x1, r = j * n; i < x2; ++i, k += 4) {\n obj.$x = i - x1;\n obj.$value = value(i + r);\n const v = color(obj);\n pix[k + 0] = v.r;\n pix[k + 1] = v.g;\n pix[k + 2] = v.b;\n pix[k + 3] = ~~(255 * opacity(obj));\n }\n }\n ctx.putImageData(img, 0, 0);\n return can;\n}\n\n/**\n * Maintains a cartographic projection.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nfunction Projection(params) {\n Transform.call(this, null, params);\n this.modified(true); // always treat as modified\n}\ninherits(Projection, Transform, {\n transform(_, pulse) {\n let proj = this.value;\n if (!proj || _.modified('type')) {\n this.value = proj = create(_.type);\n projectionProperties.forEach(prop => {\n if (_[prop] != null) set(proj, prop, _[prop]);\n });\n } else {\n projectionProperties.forEach(prop => {\n if (_.modified(prop)) set(proj, prop, _[prop]);\n });\n }\n if (_.pointRadius != null) proj.path.pointRadius(_.pointRadius);\n if (_.fit) fit(proj, _);\n return pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n }\n});\nfunction fit(proj, _) {\n const data = collectGeoJSON(_.fit);\n _.extent ? proj.fitExtent(_.extent, data) : _.size ? proj.fitSize(_.size, data) : 0;\n}\nfunction create(type) {\n const constructor = projection((type || 'mercator').toLowerCase());\n if (!constructor) error('Unrecognized projection type: ' + type);\n return constructor();\n}\nfunction set(proj, key, value) {\n if (isFunction(proj[key])) proj[key](value);\n}\nfunction collectGeoJSON(data) {\n data = array(data);\n return data.length === 1 ? data[0] : {\n type: FeatureCollection,\n features: data.reduce((a, f) => a.concat(featurize(f)), [])\n };\n}\nfunction featurize(f) {\n return f.type === FeatureCollection ? f.features : array(f).filter(d => d != null).map(d => d.type === Feature ? d : {\n type: Feature,\n geometry: d\n });\n}\n\nexport { Contour as contour, GeoJSON as geojson, GeoPath as geopath, GeoPoint as geopoint, GeoShape as geoshape, Graticule as graticule, Heatmap as heatmap, Isocontour as isocontour, KDE2D as kde2d, Projection as projection };\n", "export var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var tau = pi * 2;\n\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var ceil = Math.ceil;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var hypot = Math.hypot;\nexport var log = Math.log;\nexport var pow = Math.pow;\nexport var sin = Math.sin;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sqrt = Math.sqrt;\nexport var tan = Math.tan;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function haversin(x) {\n return (x = sin(x / 2)) * x;\n}\n", "export default function noop() {}\n", "function streamGeometry(geometry, stream) {\n if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n streamGeometryType[geometry.type](geometry, stream);\n }\n}\n\nvar streamObjectType = {\n Feature: function(object, stream) {\n streamGeometry(object.geometry, stream);\n },\n FeatureCollection: function(object, stream) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n) streamGeometry(features[i].geometry, stream);\n }\n};\n\nvar streamGeometryType = {\n Sphere: function(object, stream) {\n stream.sphere();\n },\n Point: function(object, stream) {\n object = object.coordinates;\n stream.point(object[0], object[1], object[2]);\n },\n MultiPoint: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n },\n LineString: function(object, stream) {\n streamLine(object.coordinates, stream, 0);\n },\n MultiLineString: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamLine(coordinates[i], stream, 0);\n },\n Polygon: function(object, stream) {\n streamPolygon(object.coordinates, stream);\n },\n MultiPolygon: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamPolygon(coordinates[i], stream);\n },\n GeometryCollection: function(object, stream) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n) streamGeometry(geometries[i], stream);\n }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n var i = -1, n = coordinates.length - closed, coordinate;\n stream.lineStart();\n while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n var i = -1, n = coordinates.length;\n stream.polygonStart();\n while (++i < n) streamLine(coordinates[i], stream, 1);\n stream.polygonEnd();\n}\n\nexport default function(object, stream) {\n if (object && streamObjectType.hasOwnProperty(object.type)) {\n streamObjectType[object.type](object, stream);\n } else {\n streamGeometry(object, stream);\n }\n}\n", "import {Adder} from \"d3-array\";\nimport {atan2, cos, quarterPi, radians, sin, tau} from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\n\nexport var areaRingSum = new Adder();\n\n// hello?\n\nvar areaSum = new Adder(),\n lambda00,\n phi00,\n lambda0,\n cosPhi0,\n sinPhi0;\n\nexport var areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaRingSum = new Adder();\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n var areaRing = +areaRingSum;\n areaSum.add(areaRing < 0 ? tau + areaRing : areaRing);\n this.lineStart = this.lineEnd = this.point = noop;\n },\n sphere: function() {\n areaSum.add(tau);\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaRingEnd() {\n areaPoint(lambda00, phi00);\n}\n\nfunction areaPointFirst(lambda, phi) {\n areaStream.point = areaPoint;\n lambda00 = lambda, phi00 = phi;\n lambda *= radians, phi *= radians;\n lambda0 = lambda, cosPhi0 = cos(phi = phi / 2 + quarterPi), sinPhi0 = sin(phi);\n}\n\nfunction areaPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n phi = phi / 2 + quarterPi; // half the angular distance from south pole\n\n // Spherical excess E for a spherical triangle with vertices: south pole,\n // previous point, current point. Uses a formula derived from Cagnoli\u2019s\n // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).\n var dLambda = lambda - lambda0,\n sdLambda = dLambda >= 0 ? 1 : -1,\n adLambda = sdLambda * dLambda,\n cosPhi = cos(phi),\n sinPhi = sin(phi),\n k = sinPhi0 * sinPhi,\n u = cosPhi0 * cosPhi + k * cos(adLambda),\n v = k * sdLambda * sin(adLambda);\n areaRingSum.add(atan2(v, u));\n\n // Advance the previous points.\n lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;\n}\n\nexport default function(object) {\n areaSum = new Adder();\n stream(object, areaStream);\n return areaSum * 2;\n}\n", "import {asin, atan2, cos, sin, sqrt} from \"./math.js\";\n\nexport function spherical(cartesian) {\n return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nexport function cartesian(spherical) {\n var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);\n return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n}\n\nexport function cartesianDot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nexport function cartesianCross(a, b) {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// TODO return a\nexport function cartesianAddInPlace(a, b) {\n a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nexport function cartesianScale(vector, k) {\n return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nexport function cartesianNormalizeInPlace(d) {\n var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n d[0] /= l, d[1] /= l, d[2] /= l;\n}\n", "import {Adder} from \"d3-array\";\nimport {areaStream, areaRingSum} from \"./area.js\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport {abs, degrees, epsilon, radians} from \"./math.js\";\nimport stream from \"./stream.js\";\n\nvar lambda0, phi0, lambda1, phi1, // bounds\n lambda2, // previous lambda-coordinate\n lambda00, phi00, // first point\n p0, // previous 3D point\n deltaSum,\n ranges,\n range;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: boundsLineStart,\n lineEnd: boundsLineEnd,\n polygonStart: function() {\n boundsStream.point = boundsRingPoint;\n boundsStream.lineStart = boundsRingStart;\n boundsStream.lineEnd = boundsRingEnd;\n deltaSum = new Adder();\n areaStream.polygonStart();\n },\n polygonEnd: function() {\n areaStream.polygonEnd();\n boundsStream.point = boundsPoint;\n boundsStream.lineStart = boundsLineStart;\n boundsStream.lineEnd = boundsLineEnd;\n if (areaRingSum < 0) lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n else if (deltaSum > epsilon) phi1 = 90;\n else if (deltaSum < -epsilon) phi0 = -90;\n range[0] = lambda0, range[1] = lambda1;\n },\n sphere: function() {\n lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n }\n};\n\nfunction boundsPoint(lambda, phi) {\n ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n}\n\nfunction linePoint(lambda, phi) {\n var p = cartesian([lambda * radians, phi * radians]);\n if (p0) {\n var normal = cartesianCross(p0, p),\n equatorial = [normal[1], -normal[0], 0],\n inflection = cartesianCross(equatorial, normal);\n cartesianNormalizeInPlace(inflection);\n inflection = spherical(inflection);\n var delta = lambda - lambda2,\n sign = delta > 0 ? 1 : -1,\n lambdai = inflection[0] * degrees * sign,\n phii,\n antimeridian = abs(delta) > 180;\n if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = inflection[1] * degrees;\n if (phii > phi1) phi1 = phii;\n } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = -inflection[1] * degrees;\n if (phii < phi0) phi0 = phii;\n } else {\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n }\n if (antimeridian) {\n if (lambda < lambda2) {\n if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n }\n } else {\n if (lambda1 >= lambda0) {\n if (lambda < lambda0) lambda0 = lambda;\n if (lambda > lambda1) lambda1 = lambda;\n } else {\n if (lambda > lambda2) {\n if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n }\n }\n }\n } else {\n ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n }\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n p0 = p, lambda2 = lambda;\n}\n\nfunction boundsLineStart() {\n boundsStream.point = linePoint;\n}\n\nfunction boundsLineEnd() {\n range[0] = lambda0, range[1] = lambda1;\n boundsStream.point = boundsPoint;\n p0 = null;\n}\n\nfunction boundsRingPoint(lambda, phi) {\n if (p0) {\n var delta = lambda - lambda2;\n deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);\n } else {\n lambda00 = lambda, phi00 = phi;\n }\n areaStream.point(lambda, phi);\n linePoint(lambda, phi);\n}\n\nfunction boundsRingStart() {\n areaStream.lineStart();\n}\n\nfunction boundsRingEnd() {\n boundsRingPoint(lambda00, phi00);\n areaStream.lineEnd();\n if (abs(deltaSum) > epsilon) lambda0 = -(lambda1 = 180);\n range[0] = lambda0, range[1] = lambda1;\n p0 = null;\n}\n\n// Finds the left-right distance between two longitudes.\n// This is almost the same as (lambda1 - lambda0 + 360\u00B0) % 360\u00B0, except that we want\n// the distance between \u00B1180\u00B0 to be 360\u00B0.\nfunction angle(lambda0, lambda1) {\n return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;\n}\n\nfunction rangeCompare(a, b) {\n return a[0] - b[0];\n}\n\nfunction rangeContains(range, x) {\n return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n}\n\nexport default function(feature) {\n var i, n, a, b, merged, deltaMax, delta;\n\n phi1 = lambda1 = -(lambda0 = phi0 = Infinity);\n ranges = [];\n stream(feature, boundsStream);\n\n // First, sort ranges by their minimum longitudes.\n if (n = ranges.length) {\n ranges.sort(rangeCompare);\n\n // Then, merge any ranges that overlap.\n for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {\n b = ranges[i];\n if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {\n if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n } else {\n merged.push(a = b);\n }\n }\n\n // Finally, find the largest gap between the merged ranges.\n // The final bounding box will be the inverse of this gap.\n for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {\n b = merged[i];\n if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0 = b[0], lambda1 = a[1];\n }\n }\n\n ranges = range = null;\n\n return lambda0 === Infinity || phi0 === Infinity\n ? [[NaN, NaN], [NaN, NaN]]\n : [[lambda0, phi0], [lambda1, phi1]];\n}\n", "import {Adder} from \"d3-array\";\nimport {asin, atan2, cos, degrees, epsilon, epsilon2, hypot, radians, sin, sqrt} from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\n\nvar W0, W1,\n X0, Y0, Z0,\n X1, Y1, Z1,\n X2, Y2, Z2,\n lambda00, phi00, // first point\n x0, y0, z0; // previous point\n\nvar centroidStream = {\n sphere: noop,\n point: centroidPoint,\n lineStart: centroidLineStart,\n lineEnd: centroidLineEnd,\n polygonStart: function() {\n centroidStream.lineStart = centroidRingStart;\n centroidStream.lineEnd = centroidRingEnd;\n },\n polygonEnd: function() {\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n }\n};\n\n// Arithmetic mean of Cartesian vectors.\nfunction centroidPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi);\n centroidPointCartesian(cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi));\n}\n\nfunction centroidPointCartesian(x, y, z) {\n ++W0;\n X0 += (x - X0) / W0;\n Y0 += (y - Y0) / W0;\n Z0 += (z - Z0) / W0;\n}\n\nfunction centroidLineStart() {\n centroidStream.point = centroidLinePointFirst;\n}\n\nfunction centroidLinePointFirst(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi);\n x0 = cosPhi * cos(lambda);\n y0 = cosPhi * sin(lambda);\n z0 = sin(phi);\n centroidStream.point = centroidLinePoint;\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLinePoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi),\n x = cosPhi * cos(lambda),\n y = cosPhi * sin(lambda),\n z = sin(phi),\n w = atan2(sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);\n W1 += w;\n X1 += w * (x0 + (x0 = x));\n Y1 += w * (y0 + (y0 = y));\n Z1 += w * (z0 + (z0 = z));\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLineEnd() {\n centroidStream.point = centroidPoint;\n}\n\n// See J. E. Brock, The Inertia Tensor for a Spherical Triangle,\n// J. Applied Mechanics 42, 239 (1975).\nfunction centroidRingStart() {\n centroidStream.point = centroidRingPointFirst;\n}\n\nfunction centroidRingEnd() {\n centroidRingPoint(lambda00, phi00);\n centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingPointFirst(lambda, phi) {\n lambda00 = lambda, phi00 = phi;\n lambda *= radians, phi *= radians;\n centroidStream.point = centroidRingPoint;\n var cosPhi = cos(phi);\n x0 = cosPhi * cos(lambda);\n y0 = cosPhi * sin(lambda);\n z0 = sin(phi);\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidRingPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi),\n x = cosPhi * cos(lambda),\n y = cosPhi * sin(lambda),\n z = sin(phi),\n cx = y0 * z - z0 * y,\n cy = z0 * x - x0 * z,\n cz = x0 * y - y0 * x,\n m = hypot(cx, cy, cz),\n w = asin(m), // line weight = angle\n v = m && -w / m; // area weight multiplier\n X2.add(v * cx);\n Y2.add(v * cy);\n Z2.add(v * cz);\n W1 += w;\n X1 += w * (x0 + (x0 = x));\n Y1 += w * (y0 + (y0 = y));\n Z1 += w * (z0 + (z0 = z));\n centroidPointCartesian(x0, y0, z0);\n}\n\nexport default function(object) {\n W0 = W1 =\n X0 = Y0 = Z0 =\n X1 = Y1 = Z1 = 0;\n X2 = new Adder();\n Y2 = new Adder();\n Z2 = new Adder();\n stream(object, centroidStream);\n\n var x = +X2,\n y = +Y2,\n z = +Z2,\n m = hypot(x, y, z);\n\n // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.\n if (m < epsilon2) {\n x = X1, y = Y1, z = Z1;\n // If the feature has zero length, fall back to arithmetic mean of point vectors.\n if (W1 < epsilon) x = X0, y = Y0, z = Z0;\n m = hypot(x, y, z);\n // If the feature still has an undefined ccentroid, then return.\n if (m < epsilon2) return [NaN, NaN];\n }\n\n return [atan2(y, x) * degrees, asin(z / m) * degrees];\n}\n", "export default function(a, b) {\n\n function compose(x, y) {\n return x = a(x, y), b(x[0], x[1]);\n }\n\n if (a.invert && b.invert) compose.invert = function(x, y) {\n return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n };\n\n return compose;\n}\n", "import compose from \"./compose.js\";\nimport {abs, asin, atan2, cos, degrees, pi, radians, sin, tau} from \"./math.js\";\n\nfunction rotationIdentity(lambda, phi) {\n if (abs(lambda) > pi) lambda -= Math.round(lambda / tau) * tau;\n return [lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nexport function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n : rotationLambda(deltaLambda))\n : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n return function(lambda, phi) {\n lambda += deltaLambda;\n if (abs(lambda) > pi) lambda -= Math.round(lambda / tau) * tau;\n return [lambda, phi];\n };\n}\n\nfunction rotationLambda(deltaLambda) {\n var rotation = forwardRotationLambda(deltaLambda);\n rotation.invert = forwardRotationLambda(-deltaLambda);\n return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n var cosDeltaPhi = cos(deltaPhi),\n sinDeltaPhi = sin(deltaPhi),\n cosDeltaGamma = cos(deltaGamma),\n sinDeltaGamma = sin(deltaGamma);\n\n function rotation(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaPhi + x * sinDeltaPhi;\n return [\n atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n asin(k * cosDeltaGamma + y * sinDeltaGamma)\n ];\n }\n\n rotation.invert = function(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaGamma - y * sinDeltaGamma;\n return [\n atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n asin(k * cosDeltaPhi - x * sinDeltaPhi)\n ];\n };\n\n return rotation;\n}\n\nexport default function(rotate) {\n rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n function forward(coordinates) {\n coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n }\n\n forward.invert = function(coordinates) {\n coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n };\n\n return forward;\n}\n", "import {cartesian, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport constant from \"./constant.js\";\nimport {acos, cos, degrees, epsilon, radians, sin, tau} from \"./math.js\";\nimport {rotateRadians} from \"./rotation.js\";\n\n// Generates a circle centered at [0\u00B0, 0\u00B0], with a given radius and precision.\nexport function circleStream(stream, radius, delta, direction, t0, t1) {\n if (!delta) return;\n var cosRadius = cos(radius),\n sinRadius = sin(radius),\n step = direction * delta;\n if (t0 == null) {\n t0 = radius + direction * tau;\n t1 = radius - step / 2;\n } else {\n t0 = circleRadius(cosRadius, t0);\n t1 = circleRadius(cosRadius, t1);\n if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;\n }\n for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);\n stream.point(point[0], point[1]);\n }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n point = cartesian(point), point[0] -= cosRadius;\n cartesianNormalizeInPlace(point);\n var radius = acos(-point[1]);\n return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;\n}\n\nexport default function() {\n var center = constant([0, 0]),\n radius = constant(90),\n precision = constant(2),\n ring,\n rotate,\n stream = {point: point};\n\n function point(x, y) {\n ring.push(x = rotate(x, y));\n x[0] *= degrees, x[1] *= degrees;\n }\n\n function circle() {\n var c = center.apply(this, arguments),\n r = radius.apply(this, arguments) * radians,\n p = precision.apply(this, arguments) * radians;\n ring = [];\n rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n circleStream(stream, r, p, 1);\n c = {type: \"Polygon\", coordinates: [ring]};\n ring = rotate = null;\n return c;\n }\n\n circle.center = function(_) {\n return arguments.length ? (center = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), circle) : center;\n };\n\n circle.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), circle) : radius;\n };\n\n circle.precision = function(_) {\n return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant(+_), circle) : precision;\n };\n\n return circle;\n}\n", "import noop from \"../noop.js\";\n\nexport default function() {\n var lines = [],\n line;\n return {\n point: function(x, y, m) {\n line.push([x, y, m]);\n },\n lineStart: function() {\n lines.push(line = []);\n },\n lineEnd: noop,\n rejoin: function() {\n if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n },\n result: function() {\n var result = lines;\n lines = [];\n line = null;\n return result;\n }\n };\n}\n", "import {abs, epsilon} from \"./math.js\";\n\nexport default function(a, b) {\n return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n}\n", "import pointEqual from \"../pointEqual.js\";\nimport {epsilon} from \"../math.js\";\n\nfunction Intersection(point, points, other, entry) {\n this.x = point;\n this.z = points;\n this.o = other; // another intersection\n this.e = entry; // is an entry?\n this.v = false; // visited\n this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\nexport default function(segments, compareIntersection, startInside, interpolate, stream) {\n var subject = [],\n clip = [],\n i,\n n;\n\n segments.forEach(function(segment) {\n if ((n = segment.length - 1) <= 0) return;\n var n, p0 = segment[0], p1 = segment[n], x;\n\n if (pointEqual(p0, p1)) {\n if (!p0[2] && !p1[2]) {\n stream.lineStart();\n for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n stream.lineEnd();\n return;\n }\n // handle degenerate cases by moving the point\n p1[0] += 2 * epsilon;\n }\n\n subject.push(x = new Intersection(p0, segment, null, true));\n clip.push(x.o = new Intersection(p0, null, x, false));\n subject.push(x = new Intersection(p1, segment, null, false));\n clip.push(x.o = new Intersection(p1, null, x, true));\n });\n\n if (!subject.length) return;\n\n clip.sort(compareIntersection);\n link(subject);\n link(clip);\n\n for (i = 0, n = clip.length; i < n; ++i) {\n clip[i].e = startInside = !startInside;\n }\n\n var start = subject[0],\n points,\n point;\n\n while (1) {\n // Find first unvisited intersection.\n var current = start,\n isSubject = true;\n while (current.v) if ((current = current.n) === start) return;\n points = current.z;\n stream.lineStart();\n do {\n current.v = current.o.v = true;\n if (current.e) {\n if (isSubject) {\n for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.n.x, 1, stream);\n }\n current = current.n;\n } else {\n if (isSubject) {\n points = current.p.z;\n for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.p.x, -1, stream);\n }\n current = current.p;\n }\n current = current.o;\n points = current.z;\n isSubject = !isSubject;\n } while (!current.v);\n stream.lineEnd();\n }\n}\n\nfunction link(array) {\n if (!(n = array.length)) return;\n var n,\n i = 0,\n a = array[0],\n b;\n while (++i < n) {\n a.n = b = array[i];\n b.p = a;\n a = b;\n }\n a.n = b = array[0];\n b.p = a;\n}\n", "import {Adder} from \"d3-array\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace} from \"./cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, epsilon2, halfPi, pi, quarterPi, sign, sin, tau} from \"./math.js\";\n\nfunction longitude(point) {\n return abs(point[0]) <= pi ? point[0] : sign(point[0]) * ((abs(point[0]) + pi) % tau - pi);\n}\n\nexport default function(polygon, point) {\n var lambda = longitude(point),\n phi = point[1],\n sinPhi = sin(phi),\n normal = [sin(lambda), -cos(lambda), 0],\n angle = 0,\n winding = 0;\n\n var sum = new Adder();\n\n if (sinPhi === 1) phi = halfPi + epsilon;\n else if (sinPhi === -1) phi = -halfPi - epsilon;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n if (!(m = (ring = polygon[i]).length)) continue;\n var ring,\n m,\n point0 = ring[m - 1],\n lambda0 = longitude(point0),\n phi0 = point0[1] / 2 + quarterPi,\n sinPhi0 = sin(phi0),\n cosPhi0 = cos(phi0);\n\n for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n var point1 = ring[j],\n lambda1 = longitude(point1),\n phi1 = point1[1] / 2 + quarterPi,\n sinPhi1 = sin(phi1),\n cosPhi1 = cos(phi1),\n delta = lambda1 - lambda0,\n sign = delta >= 0 ? 1 : -1,\n absDelta = sign * delta,\n antimeridian = absDelta > pi,\n k = sinPhi0 * sinPhi1;\n\n sum.add(atan2(k * sign * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n angle += antimeridian ? delta + sign * tau : delta;\n\n // Are the longitudes either side of the point\u2019s meridian (lambda),\n // and are the latitudes smaller than the parallel (phi)?\n if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n var arc = cartesianCross(cartesian(point0), cartesian(point1));\n cartesianNormalizeInPlace(arc);\n var intersection = cartesianCross(normal, arc);\n cartesianNormalizeInPlace(intersection);\n var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n winding += antimeridian ^ delta >= 0 ? 1 : -1;\n }\n }\n }\n }\n\n // First, determine whether the South pole is inside or outside:\n //\n // It is inside if:\n // * the polygon winds around it in a clockwise direction.\n // * the polygon does not (cumulatively) wind around it, but has a negative\n // (counter-clockwise) area.\n //\n // Second, count the (signed) number of times a segment crosses a lambda\n // from the point to the South pole. If it is zero, then the point is the\n // same side as the South pole.\n\n return (angle < -epsilon || angle < epsilon && sum < -epsilon2) ^ (winding & 1);\n}\n", "import clipBuffer from \"./buffer.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {epsilon, halfPi} from \"../math.js\";\nimport polygonContains from \"../polygonContains.js\";\nimport {merge} from \"d3-array\";\n\nexport default function(pointVisible, clipLine, interpolate, start) {\n return function(sink) {\n var line = clipLine(sink),\n ringBuffer = clipBuffer(),\n ringSink = clipLine(ringBuffer),\n polygonStarted = false,\n polygon,\n segments,\n ring;\n\n var clip = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n clip.point = pointRing;\n clip.lineStart = ringStart;\n clip.lineEnd = ringEnd;\n segments = [];\n polygon = [];\n },\n polygonEnd: function() {\n clip.point = point;\n clip.lineStart = lineStart;\n clip.lineEnd = lineEnd;\n segments = merge(segments);\n var startInside = polygonContains(polygon, start);\n if (segments.length) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n clipRejoin(segments, compareIntersection, startInside, interpolate, sink);\n } else if (startInside) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n }\n if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n segments = polygon = null;\n },\n sphere: function() {\n sink.polygonStart();\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n sink.polygonEnd();\n }\n };\n\n function point(lambda, phi) {\n if (pointVisible(lambda, phi)) sink.point(lambda, phi);\n }\n\n function pointLine(lambda, phi) {\n line.point(lambda, phi);\n }\n\n function lineStart() {\n clip.point = pointLine;\n line.lineStart();\n }\n\n function lineEnd() {\n clip.point = point;\n line.lineEnd();\n }\n\n function pointRing(lambda, phi) {\n ring.push([lambda, phi]);\n ringSink.point(lambda, phi);\n }\n\n function ringStart() {\n ringSink.lineStart();\n ring = [];\n }\n\n function ringEnd() {\n pointRing(ring[0][0], ring[0][1]);\n ringSink.lineEnd();\n\n var clean = ringSink.clean(),\n ringSegments = ringBuffer.result(),\n i, n = ringSegments.length, m,\n segment,\n point;\n\n ring.pop();\n polygon.push(ring);\n ring = null;\n\n if (!n) return;\n\n // No intersections.\n if (clean & 1) {\n segment = ringSegments[0];\n if ((m = segment.length - 1) > 0) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n sink.lineEnd();\n }\n return;\n }\n\n // Rejoin connected segments.\n // TODO reuse ringBuffer.rejoin()?\n if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n segments.push(ringSegments.filter(validSegment));\n }\n\n return clip;\n };\n}\n\nfunction validSegment(segment) {\n return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])\n - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\n}\n", "import clip from \"./index.js\";\nimport {abs, atan, cos, epsilon, halfPi, pi, sin} from \"../math.js\";\n\nexport default clip(\n function() { return true; },\n clipAntimeridianLine,\n clipAntimeridianInterpolate,\n [-pi, -halfPi]\n);\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n var lambda0 = NaN,\n phi0 = NaN,\n sign0 = NaN,\n clean; // no intersections\n\n return {\n lineStart: function() {\n stream.lineStart();\n clean = 1;\n },\n point: function(lambda1, phi1) {\n var sign1 = lambda1 > 0 ? pi : -pi,\n delta = abs(lambda1 - lambda0);\n if (abs(delta - pi) < epsilon) { // line crosses a pole\n stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n stream.point(lambda1, phi0);\n clean = 0;\n } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian\n if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies\n if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon;\n phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n clean = 0;\n }\n stream.point(lambda0 = lambda1, phi0 = phi1);\n sign0 = sign1;\n },\n lineEnd: function() {\n stream.lineEnd();\n lambda0 = phi0 = NaN;\n },\n clean: function() {\n return 2 - clean; // if intersections, rejoin first and last segments\n }\n };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n var cosPhi0,\n cosPhi1,\n sinLambda0Lambda1 = sin(lambda0 - lambda1);\n return abs(sinLambda0Lambda1) > epsilon\n ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1)\n - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0))\n / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n var phi;\n if (from == null) {\n phi = direction * halfPi;\n stream.point(-pi, phi);\n stream.point(0, phi);\n stream.point(pi, phi);\n stream.point(pi, 0);\n stream.point(pi, -phi);\n stream.point(0, -phi);\n stream.point(-pi, -phi);\n stream.point(-pi, 0);\n stream.point(-pi, phi);\n } else if (abs(from[0] - to[0]) > epsilon) {\n var lambda = from[0] < to[0] ? pi : -pi;\n phi = direction * lambda / 2;\n stream.point(-lambda, phi);\n stream.point(0, phi);\n stream.point(lambda, phi);\n } else {\n stream.point(to[0], to[1]);\n }\n}\n", "import {cartesian, cartesianAddInPlace, cartesianCross, cartesianDot, cartesianScale, spherical} from \"../cartesian.js\";\nimport {circleStream} from \"../circle.js\";\nimport {abs, cos, epsilon, pi, radians, sqrt} from \"../math.js\";\nimport pointEqual from \"../pointEqual.js\";\nimport clip from \"./index.js\";\n\nexport default function(radius) {\n var cr = cos(radius),\n delta = 2 * radians,\n smallRadius = cr > 0,\n notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case\n\n function interpolate(from, to, direction, stream) {\n circleStream(stream, radius, delta, direction, from, to);\n }\n\n function visible(lambda, phi) {\n return cos(lambda) * cos(phi) > cr;\n }\n\n // Takes a line and cuts into visible segments. Return values used for polygon\n // clipping: 0 - there were intersections or the line was empty; 1 - no\n // intersections 2 - there were intersections, and the first and last segments\n // should be rejoined.\n function clipLine(stream) {\n var point0, // previous point\n c0, // code for previous point\n v0, // visibility of previous point\n v00, // visibility of first point\n clean; // no intersections\n return {\n lineStart: function() {\n v00 = v0 = false;\n clean = 1;\n },\n point: function(lambda, phi) {\n var point1 = [lambda, phi],\n point2,\n v = visible(lambda, phi),\n c = smallRadius\n ? v ? 0 : code(lambda, phi)\n : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;\n if (!point0 && (v00 = v0 = v)) stream.lineStart();\n if (v !== v0) {\n point2 = intersect(point0, point1);\n if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2))\n point1[2] = 1;\n }\n if (v !== v0) {\n clean = 0;\n if (v) {\n // outside going in\n stream.lineStart();\n point2 = intersect(point1, point0);\n stream.point(point2[0], point2[1]);\n } else {\n // inside going out\n point2 = intersect(point0, point1);\n stream.point(point2[0], point2[1], 2);\n stream.lineEnd();\n }\n point0 = point2;\n } else if (notHemisphere && point0 && smallRadius ^ v) {\n var t;\n // If the codes for two points are different, or are both zero,\n // and there this segment intersects with the small circle.\n if (!(c & c0) && (t = intersect(point1, point0, true))) {\n clean = 0;\n if (smallRadius) {\n stream.lineStart();\n stream.point(t[0][0], t[0][1]);\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n } else {\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n stream.lineStart();\n stream.point(t[0][0], t[0][1], 3);\n }\n }\n }\n if (v && (!point0 || !pointEqual(point0, point1))) {\n stream.point(point1[0], point1[1]);\n }\n point0 = point1, v0 = v, c0 = c;\n },\n lineEnd: function() {\n if (v0) stream.lineEnd();\n point0 = null;\n },\n // Rejoin first and last segments if there were intersections and the first\n // and last points were visible.\n clean: function() {\n return clean | ((v00 && v0) << 1);\n }\n };\n }\n\n // Intersects the great circle between a and b with the clip circle.\n function intersect(a, b, two) {\n var pa = cartesian(a),\n pb = cartesian(b);\n\n // We have two planes, n1.p = d1 and n2.p = d2.\n // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 \u2A2F n2).\n var n1 = [1, 0, 0], // normal\n n2 = cartesianCross(pa, pb),\n n2n2 = cartesianDot(n2, n2),\n n1n2 = n2[0], // cartesianDot(n1, n2),\n determinant = n2n2 - n1n2 * n1n2;\n\n // Two polar points.\n if (!determinant) return !two && a;\n\n var c1 = cr * n2n2 / determinant,\n c2 = -cr * n1n2 / determinant,\n n1xn2 = cartesianCross(n1, n2),\n A = cartesianScale(n1, c1),\n B = cartesianScale(n2, c2);\n cartesianAddInPlace(A, B);\n\n // Solve |p(t)|^2 = 1.\n var u = n1xn2,\n w = cartesianDot(A, u),\n uu = cartesianDot(u, u),\n t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n if (t2 < 0) return;\n\n var t = sqrt(t2),\n q = cartesianScale(u, (-w - t) / uu);\n cartesianAddInPlace(q, A);\n q = spherical(q);\n\n if (!two) return q;\n\n // Two intersection points.\n var lambda0 = a[0],\n lambda1 = b[0],\n phi0 = a[1],\n phi1 = b[1],\n z;\n\n if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n var delta = lambda1 - lambda0,\n polar = abs(delta - pi) < epsilon,\n meridian = polar || delta < epsilon;\n\n if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n // Check that the first point is between a and b.\n if (meridian\n ? polar\n ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1)\n : phi0 <= q[1] && q[1] <= phi1\n : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n var q1 = cartesianScale(u, (-w + t) / uu);\n cartesianAddInPlace(q1, A);\n return [q, spherical(q1)];\n }\n }\n\n // Generates a 4-bit vector representing the location of a point relative to\n // the small circle's bounding box.\n function code(lambda, phi) {\n var r = smallRadius ? radius : pi - radius,\n code = 0;\n if (lambda < -r) code |= 1; // left\n else if (lambda > r) code |= 2; // right\n if (phi < -r) code |= 4; // below\n else if (phi > r) code |= 8; // above\n return code;\n }\n\n return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);\n}\n", "export default function(a, b, x0, y0, x1, y1) {\n var ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n return true;\n}\n", "import {abs, epsilon} from \"../math.js\";\nimport clipBuffer from \"./buffer.js\";\nimport clipLine from \"./line.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {merge} from \"d3-array\";\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon\u2019s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nexport default function clipRectangle(x0, y0, x1, y1) {\n\n function visible(x, y) {\n return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n }\n\n function interpolate(from, to, direction, stream) {\n var a = 0, a1 = 0;\n if (from == null\n || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n || comparePoint(from, to) < 0 ^ direction > 0) {\n do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n while ((a = (a + direction + 4) % 4) !== a1);\n } else {\n stream.point(to[0], to[1]);\n }\n }\n\n function corner(p, direction) {\n return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3\n : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1\n : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0\n : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n }\n\n function compareIntersection(a, b) {\n return comparePoint(a.x, b.x);\n }\n\n function comparePoint(a, b) {\n var ca = corner(a, 1),\n cb = corner(b, 1);\n return ca !== cb ? ca - cb\n : ca === 0 ? b[1] - a[1]\n : ca === 1 ? a[0] - b[0]\n : ca === 2 ? a[1] - b[1]\n : b[0] - a[0];\n }\n\n return function(stream) {\n var activeStream = stream,\n bufferStream = clipBuffer(),\n segments,\n polygon,\n ring,\n x__, y__, v__, // first point\n x_, y_, v_, // previous point\n first,\n clean;\n\n var clipStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: polygonStart,\n polygonEnd: polygonEnd\n };\n\n function point(x, y) {\n if (visible(x, y)) activeStream.point(x, y);\n }\n\n function polygonInside() {\n var winding = 0;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n }\n }\n\n return winding;\n }\n\n // Buffer geometry within a polygon and then clip it en masse.\n function polygonStart() {\n activeStream = bufferStream, segments = [], polygon = [], clean = true;\n }\n\n function polygonEnd() {\n var startInside = polygonInside(),\n cleanInside = clean && startInside,\n visible = (segments = merge(segments)).length;\n if (cleanInside || visible) {\n stream.polygonStart();\n if (cleanInside) {\n stream.lineStart();\n interpolate(null, null, 1, stream);\n stream.lineEnd();\n }\n if (visible) {\n clipRejoin(segments, compareIntersection, startInside, interpolate, stream);\n }\n stream.polygonEnd();\n }\n activeStream = stream, segments = polygon = ring = null;\n }\n\n function lineStart() {\n clipStream.point = linePoint;\n if (polygon) polygon.push(ring = []);\n first = true;\n v_ = false;\n x_ = y_ = NaN;\n }\n\n // TODO rather than special-case polygons, simply handle them separately.\n // Ideally, coincident intersection points should be jittered to avoid\n // clipping issues.\n function lineEnd() {\n if (segments) {\n linePoint(x__, y__);\n if (v__ && v_) bufferStream.rejoin();\n segments.push(bufferStream.result());\n }\n clipStream.point = point;\n if (v_) activeStream.lineEnd();\n }\n\n function linePoint(x, y) {\n var v = visible(x, y);\n if (polygon) ring.push([x, y]);\n if (first) {\n x__ = x, y__ = y, v__ = v;\n first = false;\n if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n }\n } else {\n if (v && v_) activeStream.point(x, y);\n else {\n var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n if (clipLine(a, b, x0, y0, x1, y1)) {\n if (!v_) {\n activeStream.lineStart();\n activeStream.point(a[0], a[1]);\n }\n activeStream.point(b[0], b[1]);\n if (!v) activeStream.lineEnd();\n clean = false;\n } else if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n clean = false;\n }\n }\n }\n x_ = x, y_ = y, v_ = v;\n }\n\n return clipStream;\n };\n}\n", "import {range} from \"d3-array\";\nimport {abs, ceil, epsilon} from \"./math.js\";\n\nfunction graticuleX(y0, y1, dy) {\n var y = range(y0, y1 - epsilon, dy).concat(y1);\n return function(x) { return y.map(function(y) { return [x, y]; }); };\n}\n\nfunction graticuleY(x0, x1, dx) {\n var x = range(x0, x1 - epsilon, dx).concat(x1);\n return function(y) { return x.map(function(x) { return [x, y]; }); };\n}\n\nexport default function graticule() {\n var x1, x0, X1, X0,\n y1, y0, Y1, Y0,\n dx = 10, dy = dx, DX = 90, DY = 360,\n x, y, X, Y,\n precision = 2.5;\n\n function graticule() {\n return {type: \"MultiLineString\", coordinates: lines()};\n }\n\n function lines() {\n return range(ceil(X0 / DX) * DX, X1, DX).map(X)\n .concat(range(ceil(Y0 / DY) * DY, Y1, DY).map(Y))\n .concat(range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon; }).map(x))\n .concat(range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon; }).map(y));\n }\n\n graticule.lines = function() {\n return lines().map(function(coordinates) { return {type: \"LineString\", coordinates: coordinates}; });\n };\n\n graticule.outline = function() {\n return {\n type: \"Polygon\",\n coordinates: [\n X(X0).concat(\n Y(Y1).slice(1),\n X(X1).reverse().slice(1),\n Y(Y0).reverse().slice(1))\n ]\n };\n };\n\n graticule.extent = function(_) {\n if (!arguments.length) return graticule.extentMinor();\n return graticule.extentMajor(_).extentMinor(_);\n };\n\n graticule.extentMajor = function(_) {\n if (!arguments.length) return [[X0, Y0], [X1, Y1]];\n X0 = +_[0][0], X1 = +_[1][0];\n Y0 = +_[0][1], Y1 = +_[1][1];\n if (X0 > X1) _ = X0, X0 = X1, X1 = _;\n if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;\n return graticule.precision(precision);\n };\n\n graticule.extentMinor = function(_) {\n if (!arguments.length) return [[x0, y0], [x1, y1]];\n x0 = +_[0][0], x1 = +_[1][0];\n y0 = +_[0][1], y1 = +_[1][1];\n if (x0 > x1) _ = x0, x0 = x1, x1 = _;\n if (y0 > y1) _ = y0, y0 = y1, y1 = _;\n return graticule.precision(precision);\n };\n\n graticule.step = function(_) {\n if (!arguments.length) return graticule.stepMinor();\n return graticule.stepMajor(_).stepMinor(_);\n };\n\n graticule.stepMajor = function(_) {\n if (!arguments.length) return [DX, DY];\n DX = +_[0], DY = +_[1];\n return graticule;\n };\n\n graticule.stepMinor = function(_) {\n if (!arguments.length) return [dx, dy];\n dx = +_[0], dy = +_[1];\n return graticule;\n };\n\n graticule.precision = function(_) {\n if (!arguments.length) return precision;\n precision = +_;\n x = graticuleX(y0, y1, 90);\n y = graticuleY(x0, x1, precision);\n X = graticuleX(Y0, Y1, 90);\n Y = graticuleY(X0, X1, precision);\n return graticule;\n };\n\n return graticule\n .extentMajor([[-180, -90 + epsilon], [180, 90 - epsilon]])\n .extentMinor([[-180, -80 - epsilon], [180, 80 + epsilon]]);\n}\n\nexport function graticule10() {\n return graticule()();\n}\n", "export default x => x;\n", "import {Adder} from \"d3-array\";\nimport {abs} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar areaSum = new Adder(),\n areaRingSum = new Adder(),\n x00,\n y00,\n x0,\n y0;\n\nvar areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop;\n areaSum.add(abs(areaRingSum));\n areaRingSum = new Adder();\n },\n result: function() {\n var area = areaSum / 2;\n areaSum = new Adder();\n return area;\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaPointFirst(x, y) {\n areaStream.point = areaPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction areaPoint(x, y) {\n areaRingSum.add(y0 * x - x0 * y);\n x0 = x, y0 = y;\n}\n\nfunction areaRingEnd() {\n areaPoint(x00, y00);\n}\n\nexport default areaStream;\n", "import noop from \"../noop.js\";\n\nvar x0 = Infinity,\n y0 = x0,\n x1 = -x0,\n y1 = x1;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop,\n result: function() {\n var bounds = [[x0, y0], [x1, y1]];\n x1 = y1 = -(y0 = x0 = Infinity);\n return bounds;\n }\n};\n\nfunction boundsPoint(x, y) {\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n}\n\nexport default boundsStream;\n", "import {sqrt} from \"../math.js\";\n\n// TODO Enforce positive area for exterior, negative area for interior?\n\nvar X0 = 0,\n Y0 = 0,\n Z0 = 0,\n X1 = 0,\n Y1 = 0,\n Z1 = 0,\n X2 = 0,\n Y2 = 0,\n Z2 = 0,\n x00,\n y00,\n x0,\n y0;\n\nvar centroidStream = {\n point: centroidPoint,\n lineStart: centroidLineStart,\n lineEnd: centroidLineEnd,\n polygonStart: function() {\n centroidStream.lineStart = centroidRingStart;\n centroidStream.lineEnd = centroidRingEnd;\n },\n polygonEnd: function() {\n centroidStream.point = centroidPoint;\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n },\n result: function() {\n var centroid = Z2 ? [X2 / Z2, Y2 / Z2]\n : Z1 ? [X1 / Z1, Y1 / Z1]\n : Z0 ? [X0 / Z0, Y0 / Z0]\n : [NaN, NaN];\n X0 = Y0 = Z0 =\n X1 = Y1 = Z1 =\n X2 = Y2 = Z2 = 0;\n return centroid;\n }\n};\n\nfunction centroidPoint(x, y) {\n X0 += x;\n Y0 += y;\n ++Z0;\n}\n\nfunction centroidLineStart() {\n centroidStream.point = centroidPointFirstLine;\n}\n\nfunction centroidPointFirstLine(x, y) {\n centroidStream.point = centroidPointLine;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidPointLine(x, y) {\n var dx = x - x0, dy = y - y0, z = sqrt(dx * dx + dy * dy);\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidLineEnd() {\n centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingStart() {\n centroidStream.point = centroidPointFirstRing;\n}\n\nfunction centroidRingEnd() {\n centroidPointRing(x00, y00);\n}\n\nfunction centroidPointFirstRing(x, y) {\n centroidStream.point = centroidPointRing;\n centroidPoint(x00 = x0 = x, y00 = y0 = y);\n}\n\nfunction centroidPointRing(x, y) {\n var dx = x - x0,\n dy = y - y0,\n z = sqrt(dx * dx + dy * dy);\n\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n\n z = y0 * x - x0 * y;\n X2 += z * (x0 + x);\n Y2 += z * (y0 + y);\n Z2 += z * 3;\n centroidPoint(x0 = x, y0 = y);\n}\n\nexport default centroidStream;\n", "import {tau} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nexport default function PathContext(context) {\n this._context = context;\n}\n\nPathContext.prototype = {\n _radius: 4.5,\n pointRadius: function(_) {\n return this._radius = _, this;\n },\n polygonStart: function() {\n this._line = 0;\n },\n polygonEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line === 0) this._context.closePath();\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._context.moveTo(x, y);\n this._point = 1;\n break;\n }\n case 1: {\n this._context.lineTo(x, y);\n break;\n }\n default: {\n this._context.moveTo(x + this._radius, y);\n this._context.arc(x, y, this._radius, 0, tau);\n break;\n }\n }\n },\n result: noop\n};\n", "import {Adder} from \"d3-array\";\nimport {sqrt} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar lengthSum = new Adder(),\n lengthRing,\n x00,\n y00,\n x0,\n y0;\n\nvar lengthStream = {\n point: noop,\n lineStart: function() {\n lengthStream.point = lengthPointFirst;\n },\n lineEnd: function() {\n if (lengthRing) lengthPoint(x00, y00);\n lengthStream.point = noop;\n },\n polygonStart: function() {\n lengthRing = true;\n },\n polygonEnd: function() {\n lengthRing = null;\n },\n result: function() {\n var length = +lengthSum;\n lengthSum = new Adder();\n return length;\n }\n};\n\nfunction lengthPointFirst(x, y) {\n lengthStream.point = lengthPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction lengthPoint(x, y) {\n x0 -= x, y0 -= y;\n lengthSum.add(sqrt(x0 * x0 + y0 * y0));\n x0 = x, y0 = y;\n}\n\nexport default lengthStream;\n", "// Simple caching for constant-radius points.\nlet cacheDigits, cacheAppend, cacheRadius, cacheCircle;\n\nexport default class PathString {\n constructor(digits) {\n this._append = digits == null ? append : appendRound(digits);\n this._radius = 4.5;\n this._ = \"\";\n }\n pointRadius(_) {\n this._radius = +_;\n return this;\n }\n polygonStart() {\n this._line = 0;\n }\n polygonEnd() {\n this._line = NaN;\n }\n lineStart() {\n this._point = 0;\n }\n lineEnd() {\n if (this._line === 0) this._ += \"Z\";\n this._point = NaN;\n }\n point(x, y) {\n switch (this._point) {\n case 0: {\n this._append`M${x},${y}`;\n this._point = 1;\n break;\n }\n case 1: {\n this._append`L${x},${y}`;\n break;\n }\n default: {\n this._append`M${x},${y}`;\n if (this._radius !== cacheRadius || this._append !== cacheAppend) {\n const r = this._radius;\n const s = this._;\n this._ = \"\"; // stash the old string so we can cache the circle path fragment\n this._append`m0,${r}a${r},${r} 0 1,1 0,${-2 * r}a${r},${r} 0 1,1 0,${2 * r}z`;\n cacheRadius = r;\n cacheAppend = this._append;\n cacheCircle = this._;\n this._ = s;\n }\n this._ += cacheCircle;\n break;\n }\n }\n }\n result() {\n const result = this._;\n this._ = \"\";\n return result.length ? result : null;\n }\n}\n\nfunction append(strings) {\n let i = 1;\n this._ += strings[0];\n for (const j = strings.length; i < j; ++i) {\n this._ += arguments[i] + strings[i];\n }\n}\n\nfunction appendRound(digits) {\n const d = Math.floor(digits);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${digits}`);\n if (d > 15) return append;\n if (d !== cacheDigits) {\n const k = 10 ** d;\n cacheDigits = d;\n cacheAppend = function append(strings) {\n let i = 1;\n this._ += strings[0];\n for (const j = strings.length; i < j; ++i) {\n this._ += Math.round(arguments[i] * k) / k + strings[i];\n }\n };\n }\n return cacheAppend;\n}\n", "import identity from \"../identity.js\";\nimport stream from \"../stream.js\";\nimport pathArea from \"./area.js\";\nimport pathBounds from \"./bounds.js\";\nimport pathCentroid from \"./centroid.js\";\nimport PathContext from \"./context.js\";\nimport pathMeasure from \"./measure.js\";\nimport PathString from \"./string.js\";\n\nexport default function(projection, context) {\n let digits = 3,\n pointRadius = 4.5,\n projectionStream,\n contextStream;\n\n function path(object) {\n if (object) {\n if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n stream(object, projectionStream(contextStream));\n }\n return contextStream.result();\n }\n\n path.area = function(object) {\n stream(object, projectionStream(pathArea));\n return pathArea.result();\n };\n\n path.measure = function(object) {\n stream(object, projectionStream(pathMeasure));\n return pathMeasure.result();\n };\n\n path.bounds = function(object) {\n stream(object, projectionStream(pathBounds));\n return pathBounds.result();\n };\n\n path.centroid = function(object) {\n stream(object, projectionStream(pathCentroid));\n return pathCentroid.result();\n };\n\n path.projection = function(_) {\n if (!arguments.length) return projection;\n projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream;\n return path;\n };\n\n path.context = function(_) {\n if (!arguments.length) return context;\n contextStream = _ == null ? (context = null, new PathString(digits)) : new PathContext(context = _);\n if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n return path;\n };\n\n path.pointRadius = function(_) {\n if (!arguments.length) return pointRadius;\n pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n return path;\n };\n\n path.digits = function(_) {\n if (!arguments.length) return digits;\n if (_ == null) digits = null;\n else {\n const d = Math.floor(_);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n digits = d;\n }\n if (context === null) contextStream = new PathString(digits);\n return path;\n };\n\n return path.projection(projection).digits(digits).context(context);\n}\n", "export default function(methods) {\n return {\n stream: transformer(methods)\n };\n}\n\nexport function transformer(methods) {\n return function(stream) {\n var s = new TransformStream;\n for (var key in methods) s[key] = methods[key];\n s.stream = stream;\n return s;\n };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n constructor: TransformStream,\n point: function(x, y) { this.stream.point(x, y); },\n sphere: function() { this.stream.sphere(); },\n lineStart: function() { this.stream.lineStart(); },\n lineEnd: function() { this.stream.lineEnd(); },\n polygonStart: function() { this.stream.polygonStart(); },\n polygonEnd: function() { this.stream.polygonEnd(); }\n};\n", "import {default as geoStream} from \"../stream.js\";\nimport boundsStream from \"../path/bounds.js\";\n\nfunction fit(projection, fitBounds, object) {\n var clip = projection.clipExtent && projection.clipExtent();\n projection.scale(150).translate([0, 0]);\n if (clip != null) projection.clipExtent(null);\n geoStream(object, projection.stream(boundsStream));\n fitBounds(boundsStream.result());\n if (clip != null) projection.clipExtent(clip);\n return projection;\n}\n\nexport function fitExtent(projection, extent, object) {\n return fit(projection, function(b) {\n var w = extent[1][0] - extent[0][0],\n h = extent[1][1] - extent[0][1],\n k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nexport function fitSize(projection, size, object) {\n return fitExtent(projection, [[0, 0], size], object);\n}\n\nexport function fitWidth(projection, width, object) {\n return fit(projection, function(b) {\n var w = +width,\n k = w / (b[1][0] - b[0][0]),\n x = (w - k * (b[1][0] + b[0][0])) / 2,\n y = -k * b[0][1];\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nexport function fitHeight(projection, height, object) {\n return fit(projection, function(b) {\n var h = +height,\n k = h / (b[1][1] - b[0][1]),\n x = -k * b[0][0],\n y = (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n", "import {cartesian} from \"../cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, radians, sqrt} from \"../math.js\";\nimport {transformer} from \"../transform.js\";\n\nvar maxDepth = 16, // maximum depth of subdivision\n cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n\nexport default function(project, delta2) {\n return +delta2 ? resample(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n return transformer({\n point: function(x, y) {\n x = project(x, y);\n this.stream.point(x[0], x[1]);\n }\n });\n}\n\nfunction resample(project, delta2) {\n\n function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n var dx = x1 - x0,\n dy = y1 - y0,\n d2 = dx * dx + dy * dy;\n if (d2 > 4 * delta2 && depth--) {\n var a = a0 + a1,\n b = b0 + b1,\n c = c0 + c1,\n m = sqrt(a * a + b * b + c * c),\n phi2 = asin(c /= m),\n lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),\n p = project(lambda2, phi2),\n x2 = p[0],\n y2 = p[1],\n dx2 = x2 - x0,\n dy2 = y2 - y0,\n dz = dy * dx2 - dx * dy2;\n if (dz * dz / d2 > delta2 // perpendicular projected distance\n || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n stream.point(x2, y2);\n resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n }\n }\n }\n return function(stream) {\n var lambda00, x00, y00, a00, b00, c00, // first point\n lambda0, x0, y0, a0, b0, c0; // previous point\n\n var resampleStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n };\n\n function point(x, y) {\n x = project(x, y);\n stream.point(x[0], x[1]);\n }\n\n function lineStart() {\n x0 = NaN;\n resampleStream.point = linePoint;\n stream.lineStart();\n }\n\n function linePoint(lambda, phi) {\n var c = cartesian([lambda, phi]), p = project(lambda, phi);\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n stream.point(x0, y0);\n }\n\n function lineEnd() {\n resampleStream.point = point;\n stream.lineEnd();\n }\n\n function ringStart() {\n lineStart();\n resampleStream.point = ringPoint;\n resampleStream.lineEnd = ringEnd;\n }\n\n function ringPoint(lambda, phi) {\n linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n resampleStream.point = linePoint;\n }\n\n function ringEnd() {\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n resampleStream.lineEnd = lineEnd;\n lineEnd();\n }\n\n return resampleStream;\n };\n}\n", "import clipAntimeridian from \"../clip/antimeridian.js\";\nimport clipCircle from \"../clip/circle.js\";\nimport clipRectangle from \"../clip/rectangle.js\";\nimport compose from \"../compose.js\";\nimport identity from \"../identity.js\";\nimport {cos, degrees, radians, sin, sqrt} from \"../math.js\";\nimport {rotateRadians} from \"../rotation.js\";\nimport {transformer} from \"../transform.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\nimport resample from \"./resample.js\";\n\nvar transformRadians = transformer({\n point: function(x, y) {\n this.stream.point(x * radians, y * radians);\n }\n});\n\nfunction transformRotate(rotate) {\n return transformer({\n point: function(x, y) {\n var r = rotate(x, y);\n return this.stream.point(r[0], r[1]);\n }\n });\n}\n\nfunction scaleTranslate(k, dx, dy, sx, sy) {\n function transform(x, y) {\n x *= sx; y *= sy;\n return [dx + k * x, dy - k * y];\n }\n transform.invert = function(x, y) {\n return [(x - dx) / k * sx, (dy - y) / k * sy];\n };\n return transform;\n}\n\nfunction scaleTranslateRotate(k, dx, dy, sx, sy, alpha) {\n if (!alpha) return scaleTranslate(k, dx, dy, sx, sy);\n var cosAlpha = cos(alpha),\n sinAlpha = sin(alpha),\n a = cosAlpha * k,\n b = sinAlpha * k,\n ai = cosAlpha / k,\n bi = sinAlpha / k,\n ci = (sinAlpha * dy - cosAlpha * dx) / k,\n fi = (sinAlpha * dx + cosAlpha * dy) / k;\n function transform(x, y) {\n x *= sx; y *= sy;\n return [a * x - b * y + dx, dy - b * x - a * y];\n }\n transform.invert = function(x, y) {\n return [sx * (ai * x - bi * y + ci), sy * (fi - bi * x - ai * y)];\n };\n return transform;\n}\n\nexport default function projection(project) {\n return projectionMutator(function() { return project; })();\n}\n\nexport function projectionMutator(projectAt) {\n var project,\n k = 150, // scale\n x = 480, y = 250, // translate\n lambda = 0, phi = 0, // center\n deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate\n alpha = 0, // post-rotate angle\n sx = 1, // reflectX\n sy = 1, // reflectX\n theta = null, preclip = clipAntimeridian, // pre-clip angle\n x0 = null, y0, x1, y1, postclip = identity, // post-clip extent\n delta2 = 0.5, // precision\n projectResample,\n projectTransform,\n projectRotateTransform,\n cache,\n cacheStream;\n\n function projection(point) {\n return projectRotateTransform(point[0] * radians, point[1] * radians);\n }\n\n function invert(point) {\n point = projectRotateTransform.invert(point[0], point[1]);\n return point && [point[0] * degrees, point[1] * degrees];\n }\n\n projection.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\n };\n\n projection.preclip = function(_) {\n return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\n };\n\n projection.postclip = function(_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n };\n\n projection.clipAngle = function(_) {\n return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n };\n\n projection.clipExtent = function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n projection.scale = function(_) {\n return arguments.length ? (k = +_, recenter()) : k;\n };\n\n projection.translate = function(_) {\n return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n };\n\n projection.center = function(_) {\n return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n };\n\n projection.rotate = function(_) {\n return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\n };\n\n projection.angle = function(_) {\n return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees;\n };\n\n projection.reflectX = function(_) {\n return arguments.length ? (sx = _ ? -1 : 1, recenter()) : sx < 0;\n };\n\n projection.reflectY = function(_) {\n return arguments.length ? (sy = _ ? -1 : 1, recenter()) : sy < 0;\n };\n\n projection.precision = function(_) {\n return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n };\n\n projection.fitExtent = function(extent, object) {\n return fitExtent(projection, extent, object);\n };\n\n projection.fitSize = function(size, object) {\n return fitSize(projection, size, object);\n };\n\n projection.fitWidth = function(width, object) {\n return fitWidth(projection, width, object);\n };\n\n projection.fitHeight = function(height, object) {\n return fitHeight(projection, height, object);\n };\n\n function recenter() {\n var center = scaleTranslateRotate(k, 0, 0, sx, sy, alpha).apply(null, project(lambda, phi)),\n transform = scaleTranslateRotate(k, x - center[0], y - center[1], sx, sy, alpha);\n rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);\n projectTransform = compose(project, transform);\n projectRotateTransform = compose(rotate, projectTransform);\n projectResample = resample(projectTransform, delta2);\n return reset();\n }\n\n function reset() {\n cache = cacheStream = null;\n return projection;\n }\n\n return function() {\n project = projectAt.apply(this, arguments);\n projection.invert = project.invert && invert;\n return recenter();\n };\n}\n", "import {degrees, pi, radians} from \"../math.js\";\nimport {projectionMutator} from \"./index.js\";\n\nexport function conicProjection(projectAt) {\n var phi0 = 0,\n phi1 = pi / 3,\n m = projectionMutator(projectAt),\n p = m(phi0, phi1);\n\n p.parallels = function(_) {\n return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees, phi1 * degrees];\n };\n\n return p;\n}\n", "import {asin, cos, sin} from \"../math.js\";\n\nexport function cylindricalEqualAreaRaw(phi0) {\n var cosPhi0 = cos(phi0);\n\n function forward(lambda, phi) {\n return [lambda * cosPhi0, sin(phi) / cosPhi0];\n }\n\n forward.invert = function(x, y) {\n return [x / cosPhi0, asin(y * cosPhi0)];\n };\n\n return forward;\n}\n", "import {abs, asin, atan2, cos, epsilon, pi, sign, sin, sqrt} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {cylindricalEqualAreaRaw} from \"./cylindricalEqualArea.js\";\n\nexport function conicEqualAreaRaw(y0, y1) {\n var sy0 = sin(y0), n = (sy0 + sin(y1)) / 2;\n\n // Are the parallels symmetrical around the Equator?\n if (abs(n) < epsilon) return cylindricalEqualAreaRaw(y0);\n\n var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;\n\n function project(x, y) {\n var r = sqrt(c - 2 * n * sin(y)) / n;\n return [r * sin(x *= n), r0 - r * cos(x)];\n }\n\n project.invert = function(x, y) {\n var r0y = r0 - y,\n l = atan2(x, abs(r0y)) * sign(r0y);\n if (r0y * n < 0)\n l -= pi * sign(x) * sign(r0y);\n return [l / n, asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicEqualAreaRaw)\n .scale(155.424)\n .center([0, 33.6442]);\n}\n", "import conicEqualArea from \"./conicEqualArea.js\";\n\nexport default function() {\n return conicEqualArea()\n .parallels([29.5, 45.5])\n .scale(1070)\n .translate([480, 250])\n .rotate([96, 0])\n .center([-0.6, 38.7]);\n}\n", "import {epsilon} from \"../math.js\";\nimport albers from \"./albers.js\";\nimport conicEqualArea from \"./conicEqualArea.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\n\n// The projections must have mutually exclusive clip regions on the sphere,\n// as this will avoid emitting interleaving lines and polygons.\nfunction multiplex(streams) {\n var n = streams.length;\n return {\n point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },\n sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },\n lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },\n lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },\n polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },\n polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }\n };\n}\n\n// A composite projection for the United States, configured by default for\n// 960\u00D7500. The projection also works quite well at 960\u00D7600 if you change the\n// scale to 1285 and adjust the translate accordingly. The set of standard\n// parallels for each region comes from USGS, which is published here:\n// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers\nexport default function() {\n var cache,\n cacheStream,\n lower48 = albers(), lower48Point,\n alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338\n hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007\n point, pointStream = {point: function(x, y) { point = [x, y]; }};\n\n function albersUsa(coordinates) {\n var x = coordinates[0], y = coordinates[1];\n return point = null,\n (lower48Point.point(x, y), point)\n || (alaskaPoint.point(x, y), point)\n || (hawaiiPoint.point(x, y), point);\n }\n\n albersUsa.invert = function(coordinates) {\n var k = lower48.scale(),\n t = lower48.translate(),\n x = (coordinates[0] - t[0]) / k,\n y = (coordinates[1] - t[1]) / k;\n return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska\n : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii\n : lower48).invert(coordinates);\n };\n\n albersUsa.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);\n };\n\n albersUsa.precision = function(_) {\n if (!arguments.length) return lower48.precision();\n lower48.precision(_), alaska.precision(_), hawaii.precision(_);\n return reset();\n };\n\n albersUsa.scale = function(_) {\n if (!arguments.length) return lower48.scale();\n lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);\n return albersUsa.translate(lower48.translate());\n };\n\n albersUsa.translate = function(_) {\n if (!arguments.length) return lower48.translate();\n var k = lower48.scale(), x = +_[0], y = +_[1];\n\n lower48Point = lower48\n .translate(_)\n .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])\n .stream(pointStream);\n\n alaskaPoint = alaska\n .translate([x - 0.307 * k, y + 0.201 * k])\n .clipExtent([[x - 0.425 * k + epsilon, y + 0.120 * k + epsilon], [x - 0.214 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n\n hawaiiPoint = hawaii\n .translate([x - 0.205 * k, y + 0.212 * k])\n .clipExtent([[x - 0.214 * k + epsilon, y + 0.166 * k + epsilon], [x - 0.115 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n\n return reset();\n };\n\n albersUsa.fitExtent = function(extent, object) {\n return fitExtent(albersUsa, extent, object);\n };\n\n albersUsa.fitSize = function(size, object) {\n return fitSize(albersUsa, size, object);\n };\n\n albersUsa.fitWidth = function(width, object) {\n return fitWidth(albersUsa, width, object);\n };\n\n albersUsa.fitHeight = function(height, object) {\n return fitHeight(albersUsa, height, object);\n };\n\n function reset() {\n cache = cacheStream = null;\n return albersUsa;\n }\n\n return albersUsa.scale(1070);\n}\n", "import {asin, atan2, cos, sin, sqrt} from \"../math.js\";\n\nexport function azimuthalRaw(scale) {\n return function(x, y) {\n var cx = cos(x),\n cy = cos(y),\n k = scale(cx * cy);\n if (k === Infinity) return [2, 0];\n return [\n k * cy * sin(x),\n k * sin(y)\n ];\n }\n}\n\nexport function azimuthalInvert(angle) {\n return function(x, y) {\n var z = sqrt(x * x + y * y),\n c = angle(z),\n sc = sin(c),\n cc = cos(c);\n return [\n atan2(x * sc, z * cc),\n asin(z && y * sc / z)\n ];\n }\n}\n", "import {asin, sqrt} from \"../math.js\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {\n return sqrt(2 / (1 + cxcy));\n});\n\nazimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {\n return 2 * asin(z / 2);\n});\n\nexport default function() {\n return projection(azimuthalEqualAreaRaw)\n .scale(124.75)\n .clipAngle(180 - 1e-3);\n}\n", "import {acos, sin} from \"../math.js\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport var azimuthalEquidistantRaw = azimuthalRaw(function(c) {\n return (c = acos(c)) && c / sin(c);\n});\n\nazimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {\n return z;\n});\n\nexport default function() {\n return projection(azimuthalEquidistantRaw)\n .scale(79.4188)\n .clipAngle(180 - 1e-3);\n}\n", "import {atan, exp, halfPi, log, pi, tan, tau} from \"../math.js\";\nimport rotation from \"../rotation.js\";\nimport projection from \"./index.js\";\n\nexport function mercatorRaw(lambda, phi) {\n return [lambda, log(tan((halfPi + phi) / 2))];\n}\n\nmercatorRaw.invert = function(x, y) {\n return [x, 2 * atan(exp(y)) - halfPi];\n};\n\nexport default function() {\n return mercatorProjection(mercatorRaw)\n .scale(961 / tau);\n}\n\nexport function mercatorProjection(project) {\n var m = projection(project),\n center = m.center,\n scale = m.scale,\n translate = m.translate,\n clipExtent = m.clipExtent,\n x0 = null, y0, x1, y1; // clip extent\n\n m.scale = function(_) {\n return arguments.length ? (scale(_), reclip()) : scale();\n };\n\n m.translate = function(_) {\n return arguments.length ? (translate(_), reclip()) : translate();\n };\n\n m.center = function(_) {\n return arguments.length ? (center(_), reclip()) : center();\n };\n\n m.clipExtent = function(_) {\n return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n function reclip() {\n var k = pi * scale(),\n t = m(rotation(m.rotate()).invert([0, 0]));\n return clipExtent(x0 == null\n ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw\n ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]\n : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);\n }\n\n return reclip();\n}\n", "import {abs, atan, atan2, cos, epsilon, halfPi, log, pi, pow, sign, sin, sqrt, tan} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {mercatorRaw} from \"./mercator.js\";\n\nfunction tany(y) {\n return tan((halfPi + y) / 2);\n}\n\nexport function conicConformalRaw(y0, y1) {\n var cy0 = cos(y0),\n n = y0 === y1 ? sin(y0) : log(cy0 / cos(y1)) / log(tany(y1) / tany(y0)),\n f = cy0 * pow(tany(y0), n) / n;\n\n if (!n) return mercatorRaw;\n\n function project(x, y) {\n if (f > 0) { if (y < -halfPi + epsilon) y = -halfPi + epsilon; }\n else { if (y > halfPi - epsilon) y = halfPi - epsilon; }\n var r = f / pow(tany(y), n);\n return [r * sin(n * x), f - r * cos(n * x)];\n }\n\n project.invert = function(x, y) {\n var fy = f - y, r = sign(n) * sqrt(x * x + fy * fy),\n l = atan2(x, abs(fy)) * sign(fy);\n if (fy * n < 0)\n l -= pi * sign(x) * sign(fy);\n return [l / n, 2 * atan(pow(f / r, 1 / n)) - halfPi];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicConformalRaw)\n .scale(109.5)\n .parallels([30, 30]);\n}\n", "import projection from \"./index.js\";\n\nexport function equirectangularRaw(lambda, phi) {\n return [lambda, phi];\n}\n\nequirectangularRaw.invert = equirectangularRaw;\n\nexport default function() {\n return projection(equirectangularRaw)\n .scale(152.63);\n}\n", "import {abs, atan2, cos, epsilon, pi, sign, sin, sqrt} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {equirectangularRaw} from \"./equirectangular.js\";\n\nexport function conicEquidistantRaw(y0, y1) {\n var cy0 = cos(y0),\n n = y0 === y1 ? sin(y0) : (cy0 - cos(y1)) / (y1 - y0),\n g = cy0 / n + y0;\n\n if (abs(n) < epsilon) return equirectangularRaw;\n\n function project(x, y) {\n var gy = g - y, nx = n * x;\n return [gy * sin(nx), g - gy * cos(nx)];\n }\n\n project.invert = function(x, y) {\n var gy = g - y,\n l = atan2(x, abs(gy)) * sign(gy);\n if (gy * n < 0)\n l -= pi * sign(x) * sign(gy);\n return [l / n, g - sign(n) * sqrt(x * x + gy * gy)];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicEquidistantRaw)\n .scale(131.154)\n .center([0, 13.9389]);\n}\n", "import projection from \"./index.js\";\nimport {abs, asin, cos, epsilon2, sin, sqrt} from \"../math.js\";\n\nvar A1 = 1.340264,\n A2 = -0.081106,\n A3 = 0.000893,\n A4 = 0.003796,\n M = sqrt(3) / 2,\n iterations = 12;\n\nexport function equalEarthRaw(lambda, phi) {\n var l = asin(M * sin(phi)), l2 = l * l, l6 = l2 * l2 * l2;\n return [\n lambda * cos(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))),\n l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2))\n ];\n}\n\nequalEarthRaw.invert = function(x, y) {\n var l = y, l2 = l * l, l6 = l2 * l2 * l2;\n for (var i = 0, delta, fy, fpy; i < iterations; ++i) {\n fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y;\n fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2);\n l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2;\n if (abs(delta) < epsilon2) break;\n }\n return [\n M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / cos(l),\n asin(sin(l) / M)\n ];\n};\n\nexport default function() {\n return projection(equalEarthRaw)\n .scale(177.158);\n}\n", "import {atan, cos, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function gnomonicRaw(x, y) {\n var cy = cos(y), k = cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n}\n\ngnomonicRaw.invert = azimuthalInvert(atan);\n\nexport default function() {\n return projection(gnomonicRaw)\n .scale(144.049)\n .clipAngle(60);\n}\n", "import clipRectangle from \"../clip/rectangle.js\";\nimport identity from \"../identity.js\";\nimport {transformer} from \"../transform.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\nimport {cos, degrees, radians, sin} from \"../math.js\";\n\nexport default function() {\n var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, // scale, translate and reflect\n alpha = 0, ca, sa, // angle\n x0 = null, y0, x1, y1, // clip extent\n kx = 1, ky = 1,\n transform = transformer({\n point: function(x, y) {\n var p = projection([x, y])\n this.stream.point(p[0], p[1]);\n }\n }),\n postclip = identity,\n cache,\n cacheStream;\n\n function reset() {\n kx = k * sx;\n ky = k * sy;\n cache = cacheStream = null;\n return projection;\n }\n\n function projection (p) {\n var x = p[0] * kx, y = p[1] * ky;\n if (alpha) {\n var t = y * ca - x * sa;\n x = x * ca + y * sa;\n y = t;\n } \n return [x + tx, y + ty];\n }\n projection.invert = function(p) {\n var x = p[0] - tx, y = p[1] - ty;\n if (alpha) {\n var t = y * ca + x * sa;\n x = x * ca - y * sa;\n y = t;\n }\n return [x / kx, y / ky];\n };\n projection.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = transform(postclip(cacheStream = stream));\n };\n projection.postclip = function(_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n };\n projection.clipExtent = function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n projection.scale = function(_) {\n return arguments.length ? (k = +_, reset()) : k;\n };\n projection.translate = function(_) {\n return arguments.length ? (tx = +_[0], ty = +_[1], reset()) : [tx, ty];\n }\n projection.angle = function(_) {\n return arguments.length ? (alpha = _ % 360 * radians, sa = sin(alpha), ca = cos(alpha), reset()) : alpha * degrees;\n };\n projection.reflectX = function(_) {\n return arguments.length ? (sx = _ ? -1 : 1, reset()) : sx < 0;\n };\n projection.reflectY = function(_) {\n return arguments.length ? (sy = _ ? -1 : 1, reset()) : sy < 0;\n };\n projection.fitExtent = function(extent, object) {\n return fitExtent(projection, extent, object);\n };\n projection.fitSize = function(size, object) {\n return fitSize(projection, size, object);\n };\n projection.fitWidth = function(width, object) {\n return fitWidth(projection, width, object);\n };\n projection.fitHeight = function(height, object) {\n return fitHeight(projection, height, object);\n };\n\n return projection;\n}\n", "import projection from \"./index.js\";\nimport {abs, epsilon} from \"../math.js\";\n\nexport function naturalEarth1Raw(lambda, phi) {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n return [\n lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))),\n phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4)))\n ];\n}\n\nnaturalEarth1Raw.invert = function(x, y) {\n var phi = y, i = 25, delta;\n do {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) /\n (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));\n } while (abs(delta) > epsilon && --i > 0);\n return [\n x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))),\n phi\n ];\n};\n\nexport default function() {\n return projection(naturalEarth1Raw)\n .scale(175.295);\n}\n", "import {asin, cos, epsilon, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function orthographicRaw(x, y) {\n return [cos(y) * sin(x), sin(y)];\n}\n\northographicRaw.invert = azimuthalInvert(asin);\n\nexport default function() {\n return projection(orthographicRaw)\n .scale(249.5)\n .clipAngle(90 + epsilon);\n}\n", "import {atan, cos, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function stereographicRaw(x, y) {\n var cy = cos(y), k = 1 + cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n}\n\nstereographicRaw.invert = azimuthalInvert(function(z) {\n return 2 * atan(z);\n});\n\nexport default function() {\n return projection(stereographicRaw)\n .scale(250)\n .clipAngle(142);\n}\n", "import {atan, exp, halfPi, log, tan} from \"../math.js\";\nimport {mercatorProjection} from \"./mercator.js\";\n\nexport function transverseMercatorRaw(lambda, phi) {\n return [log(tan((halfPi + phi) / 2)), -lambda];\n}\n\ntransverseMercatorRaw.invert = function(x, y) {\n return [-y, 2 * atan(exp(x)) - halfPi];\n};\n\nexport default function() {\n var m = mercatorProjection(transverseMercatorRaw),\n center = m.center,\n rotate = m.rotate;\n\n m.center = function(_) {\n return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);\n };\n\n m.rotate = function(_) {\n return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);\n };\n\n return rotate([0, 0, 90])\n .scale(159.155);\n}\n", "export var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var ceil = Math.ceil;\nexport var cos = Math.cos;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var log = Math.log;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var pow = Math.pow;\nexport var round = Math.round;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sin = Math.sin;\nexport var tan = Math.tan;\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var sqrt1_2 = Math.SQRT1_2;\nexport var sqrt2 = sqrt(2);\nexport var sqrtPi = sqrt(pi);\nexport var tau = pi * 2;\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport function sinci(x) {\n return x ? x / Math.sin(x) : 1;\n}\n\nexport function asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function sqrt(x) {\n return x > 0 ? Math.sqrt(x) : 0;\n}\n\nexport function tanh(x) {\n x = exp(2 * x);\n return (x - 1) / (x + 1);\n}\n\nexport function sinh(x) {\n return (exp(x) - exp(-x)) / 2;\n}\n\nexport function cosh(x) {\n return (exp(x) + exp(-x)) / 2;\n}\n\nexport function arsinh(x) {\n return log(x + sqrt(x * x + 1));\n}\n\nexport function arcosh(x) {\n return log(x + sqrt(x * x - 1));\n}\n", "import {geoProjection as projection} from \"d3-geo\";\nimport {abs, asin, cos, epsilon, halfPi, pi, sin, sqrt2} from \"./math.js\";\n\nexport function mollweideBromleyTheta(cp, phi) {\n var cpsinPhi = cp * sin(phi), i = 30, delta;\n do phi -= delta = (phi + sin(phi) - cpsinPhi) / (1 + cos(phi));\n while (abs(delta) > epsilon && --i > 0);\n return phi / 2;\n}\n\nexport function mollweideBromleyRaw(cx, cy, cp) {\n\n function forward(lambda, phi) {\n return [cx * lambda * cos(phi = mollweideBromleyTheta(cp, phi)), cy * sin(phi)];\n }\n\n forward.invert = function(x, y) {\n return y = asin(y / cy), [x / (cx * cos(y)), asin((2 * y + sin(2 * y)) / cp)];\n };\n\n return forward;\n}\n\nexport var mollweideRaw = mollweideBromleyRaw(sqrt2 / halfPi, sqrt2, pi);\n\nexport default function() {\n return projection(mollweideRaw)\n .scale(169.529);\n}\n", "import { geoPath, geoAlbers, geoAlbersUsa, geoAzimuthalEqualArea, geoAzimuthalEquidistant, geoConicConformal, geoConicEqualArea, geoConicEquidistant, geoEqualEarth, geoEquirectangular, geoGnomonic, geoIdentity, geoMercator, geoNaturalEarth1, geoOrthographic, geoStereographic, geoTransverseMercator } from 'd3-geo';\nimport { geoMollweide } from 'd3-geo-projection';\nimport { registerScale } from 'vega-scale';\n\nconst defaultPath = geoPath();\nconst projectionProperties = [\n// standard properties in d3-geo\n'clipAngle', 'clipExtent', 'scale', 'translate', 'center', 'rotate', 'parallels', 'precision', 'reflectX', 'reflectY',\n// extended properties in d3-geo-projections\n'coefficient', 'distance', 'fraction', 'lobes', 'parallel', 'radius', 'ratio', 'spacing', 'tilt'];\n\n/**\n * Augment projections with their type and a copy method.\n */\nfunction create(type, constructor) {\n return function projection() {\n const p = constructor();\n p.type = type;\n p.path = geoPath().projection(p);\n p.copy = p.copy || function () {\n const c = projection();\n projectionProperties.forEach(prop => {\n if (p[prop]) c[prop](p[prop]());\n });\n c.path.pointRadius(p.path.pointRadius());\n return c;\n };\n return registerScale(p);\n };\n}\nfunction projection(type, proj) {\n if (!type || typeof type !== 'string') {\n throw new Error('Projection type must be a name string.');\n }\n type = type.toLowerCase();\n if (arguments.length > 1) {\n projections[type] = create(type, proj);\n return this;\n } else {\n return projections[type] || null;\n }\n}\nfunction getProjectionPath(proj) {\n return proj && proj.path || defaultPath;\n}\nconst projections = {\n // base d3-geo projection types\n albers: geoAlbers,\n albersusa: geoAlbersUsa,\n azimuthalequalarea: geoAzimuthalEqualArea,\n azimuthalequidistant: geoAzimuthalEquidistant,\n conicconformal: geoConicConformal,\n conicequalarea: geoConicEqualArea,\n conicequidistant: geoConicEquidistant,\n equalEarth: geoEqualEarth,\n equirectangular: geoEquirectangular,\n gnomonic: geoGnomonic,\n identity: geoIdentity,\n mercator: geoMercator,\n mollweide: geoMollweide,\n naturalEarth1: geoNaturalEarth1,\n orthographic: geoOrthographic,\n stereographic: geoStereographic,\n transversemercator: geoTransverseMercator\n};\nfor (const key in projections) {\n projection(key, projections[key]);\n}\n\nexport { getProjectionPath, projection, projectionProperties };\n", "import { Transform } from 'vega-dataflow';\nimport { inherits, array, isFunction, accessorFields, hasOwnProperty, error } from 'vega-util';\nimport { forceSimulation, forceCenter, forceCollide, forceManyBody, forceLink, forceX, forceY } from 'd3-force';\n\nconst ForceMap = {\n center: forceCenter,\n collide: forceCollide,\n nbody: forceManyBody,\n link: forceLink,\n x: forceX,\n y: forceY\n};\nconst Forces = 'forces',\n ForceParams = ['alpha', 'alphaMin', 'alphaTarget', 'velocityDecay', 'forces'],\n ForceConfig = ['static', 'iterations'],\n ForceOutput = ['x', 'y', 'vx', 'vy'];\n\n/**\n * Force simulation layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array<object>} params.forces - The forces to apply.\n */\nfunction Force(params) {\n Transform.call(this, null, params);\n}\nForce.Definition = {\n 'type': 'Force',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'static',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'restart',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'iterations',\n 'type': 'number',\n 'default': 300\n }, {\n 'name': 'alpha',\n 'type': 'number',\n 'default': 1\n }, {\n 'name': 'alphaMin',\n 'type': 'number',\n 'default': 0.001\n }, {\n 'name': 'alphaTarget',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'velocityDecay',\n 'type': 'number',\n 'default': 0.4\n }, {\n 'name': 'forces',\n 'type': 'param',\n 'array': true,\n 'params': [{\n 'key': {\n 'force': 'center'\n },\n 'params': [{\n 'name': 'x',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'y',\n 'type': 'number',\n 'default': 0\n }]\n }, {\n 'key': {\n 'force': 'collide'\n },\n 'params': [{\n 'name': 'radius',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'strength',\n 'type': 'number',\n 'default': 0.7\n }, {\n 'name': 'iterations',\n 'type': 'number',\n 'default': 1\n }]\n }, {\n 'key': {\n 'force': 'nbody'\n },\n 'params': [{\n 'name': 'strength',\n 'type': 'number',\n 'default': -30,\n 'expr': true\n }, {\n 'name': 'theta',\n 'type': 'number',\n 'default': 0.9\n }, {\n 'name': 'distanceMin',\n 'type': 'number',\n 'default': 1\n }, {\n 'name': 'distanceMax',\n 'type': 'number'\n }]\n }, {\n 'key': {\n 'force': 'link'\n },\n 'params': [{\n 'name': 'links',\n 'type': 'data'\n }, {\n 'name': 'id',\n 'type': 'field'\n }, {\n 'name': 'distance',\n 'type': 'number',\n 'default': 30,\n 'expr': true\n }, {\n 'name': 'strength',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'iterations',\n 'type': 'number',\n 'default': 1\n }]\n }, {\n 'key': {\n 'force': 'x'\n },\n 'params': [{\n 'name': 'strength',\n 'type': 'number',\n 'default': 0.1\n }, {\n 'name': 'x',\n 'type': 'field'\n }]\n }, {\n 'key': {\n 'force': 'y'\n },\n 'params': [{\n 'name': 'strength',\n 'type': 'number',\n 'default': 0.1\n }, {\n 'name': 'y',\n 'type': 'field'\n }]\n }]\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'modify': false,\n 'default': ForceOutput\n }]\n};\ninherits(Force, Transform, {\n transform(_, pulse) {\n var sim = this.value,\n change = pulse.changed(pulse.ADD_REM),\n params = _.modified(ForceParams),\n iters = _.iterations || 300;\n\n // configure simulation\n if (!sim) {\n this.value = sim = simulation(pulse.source, _);\n sim.on('tick', rerun(pulse.dataflow, this));\n if (!_.static) {\n change = true;\n sim.tick(); // ensure we run on init\n }\n pulse.modifies('index');\n } else {\n if (change) {\n pulse.modifies('index');\n sim.nodes(pulse.source);\n }\n if (params || pulse.changed(pulse.MOD)) {\n setup(sim, _, 0, pulse);\n }\n }\n\n // run simulation\n if (params || change || _.modified(ForceConfig) || pulse.changed() && _.restart) {\n sim.alpha(Math.max(sim.alpha(), _.alpha || 1)).alphaDecay(1 - Math.pow(sim.alphaMin(), 1 / iters));\n if (_.static) {\n for (sim.stop(); --iters >= 0;) sim.tick();\n } else {\n if (sim.stopped()) sim.restart();\n if (!change) return pulse.StopPropagation; // defer to sim ticks\n }\n }\n return this.finish(_, pulse);\n },\n finish(_, pulse) {\n const dataflow = pulse.dataflow;\n\n // inspect dependencies, touch link source data\n for (let args = this._argops, j = 0, m = args.length, arg; j < m; ++j) {\n arg = args[j];\n if (arg.name !== Forces || arg.op._argval.force !== 'link') {\n continue;\n }\n for (var ops = arg.op._argops, i = 0, n = ops.length, op; i < n; ++i) {\n if (ops[i].name === 'links' && (op = ops[i].op.source)) {\n dataflow.pulse(op, dataflow.changeset().reflow());\n break;\n }\n }\n }\n\n // reflow all nodes\n return pulse.reflow(_.modified()).modifies(ForceOutput);\n }\n});\nfunction rerun(df, op) {\n return () => df.touch(op).run();\n}\nfunction simulation(nodes, _) {\n const sim = forceSimulation(nodes),\n stop = sim.stop,\n restart = sim.restart;\n let stopped = false;\n sim.stopped = () => stopped;\n sim.restart = () => (stopped = false, restart());\n sim.stop = () => (stopped = true, stop());\n return setup(sim, _, true).on('end', () => stopped = true);\n}\nfunction setup(sim, _, init, pulse) {\n var f = array(_.forces),\n i,\n n,\n p,\n name;\n for (i = 0, n = ForceParams.length; i < n; ++i) {\n p = ForceParams[i];\n if (p !== Forces && _.modified(p)) sim[p](_[p]);\n }\n for (i = 0, n = f.length; i < n; ++i) {\n name = Forces + i;\n p = init || _.modified(Forces, i) ? getForce(f[i]) : pulse && modified(f[i], pulse) ? sim.force(name) : null;\n if (p) sim.force(name, p);\n }\n for (n = sim.numForces || 0; i < n; ++i) {\n sim.force(Forces + i, null); // remove\n }\n sim.numForces = f.length;\n return sim;\n}\nfunction modified(f, pulse) {\n var k, v;\n for (k in f) {\n if (isFunction(v = f[k]) && pulse.modified(accessorFields(v))) return 1;\n }\n return 0;\n}\nfunction getForce(_) {\n var f, p;\n if (!hasOwnProperty(ForceMap, _.force)) {\n error('Unrecognized force: ' + _.force);\n }\n f = ForceMap[_.force]();\n for (p in _) {\n if (isFunction(f[p])) setForceParam(f[p], _[p], _);\n }\n return f;\n}\nfunction setForceParam(f, v, _) {\n f(isFunction(v) ? d => v(d, _) : v);\n}\n\nexport { Force as force };\n", "export default function(x, y) {\n var nodes, strength = 1;\n\n if (x == null) x = 0;\n if (y == null) y = 0;\n\n function force() {\n var i,\n n = nodes.length,\n node,\n sx = 0,\n sy = 0;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i], sx += node.x, sy += node.y;\n }\n\n for (sx = (sx / n - x) * strength, sy = (sy / n - y) * strength, i = 0; i < n; ++i) {\n node = nodes[i], node.x -= sx, node.y -= sy;\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = +_, force) : x;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = +_, force) : y;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n return force;\n}\n", "export default function(d) {\n const x = +this._x.call(null, d),\n y = +this._y.call(null, d);\n return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n var parent,\n node = tree._root,\n leaf = {data: d},\n x0 = tree._x0,\n y0 = tree._y0,\n x1 = tree._x1,\n y1 = tree._y1,\n xm,\n ym,\n xp,\n yp,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return tree._root = leaf, tree;\n\n // Find the existing leaf for the new point, or add it.\n while (node.length) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n }\n\n // Is the new point is exactly coincident with the existing point?\n xp = +tree._x.call(null, node.data);\n yp = +tree._y.call(null, node.data);\n if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n // Otherwise, split the leaf node until the old and new point are separated.\n do {\n parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n var d, i, n = data.length,\n x,\n y,\n xz = new Array(n),\n yz = new Array(n),\n x0 = Infinity,\n y0 = Infinity,\n x1 = -Infinity,\n y1 = -Infinity;\n\n // Compute the points and their extent.\n for (i = 0; i < n; ++i) {\n if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n xz[i] = x;\n yz[i] = y;\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n }\n\n // If there were no (valid) points, abort.\n if (x0 > x1 || y0 > y1) return this;\n\n // Expand the tree to cover the new points.\n this.cover(x0, y0).cover(x1, y1);\n\n // Add the new points.\n for (i = 0; i < n; ++i) {\n add(this, xz[i], yz[i], data[i]);\n }\n\n return this;\n}\n", "export default function(x, y) {\n if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n var x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1;\n\n // If the quadtree has no extent, initialize them.\n // Integer extent are necessary so that if we later double the extent,\n // the existing quadrant boundaries don\u2019t change due to floating point error!\n if (isNaN(x0)) {\n x1 = (x0 = Math.floor(x)) + 1;\n y1 = (y0 = Math.floor(y)) + 1;\n }\n\n // Otherwise, double repeatedly to cover.\n else {\n var z = x1 - x0 || 1,\n node = this._root,\n parent,\n i;\n\n while (x0 > x || x >= x1 || y0 > y || y >= y1) {\n i = (y < y0) << 1 | (x < x0);\n parent = new Array(4), parent[i] = node, node = parent, z *= 2;\n switch (i) {\n case 0: x1 = x0 + z, y1 = y0 + z; break;\n case 1: x0 = x1 - z, y1 = y0 + z; break;\n case 2: x1 = x0 + z, y0 = y1 - z; break;\n case 3: x0 = x1 - z, y0 = y1 - z; break;\n }\n }\n\n if (this._root && this._root.length) this._root = node;\n }\n\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n return this;\n}\n", "export default function() {\n var data = [];\n this.visit(function(node) {\n if (!node.length) do data.push(node.data); while (node = node.next)\n });\n return data;\n}\n", "export default function(_) {\n return arguments.length\n ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}\n", "export default function(node, x0, y0, x1, y1) {\n this.node = node;\n this.x0 = x0;\n this.y0 = y0;\n this.x1 = x1;\n this.y1 = y1;\n}\n", "import Quad from \"./quad.js\";\n\nexport default function(x, y, radius) {\n var data,\n x0 = this._x0,\n y0 = this._y0,\n x1,\n y1,\n x2,\n y2,\n x3 = this._x1,\n y3 = this._y1,\n quads = [],\n node = this._root,\n q,\n i;\n\n if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n if (radius == null) radius = Infinity;\n else {\n x0 = x - radius, y0 = y - radius;\n x3 = x + radius, y3 = y + radius;\n radius *= radius;\n }\n\n while (q = quads.pop()) {\n\n // Stop searching if this quadrant can\u2019t contain a closer node.\n if (!(node = q.node)\n || (x1 = q.x0) > x3\n || (y1 = q.y0) > y3\n || (x2 = q.x1) < x0\n || (y2 = q.y1) < y0) continue;\n\n // Bisect the current quadrant.\n if (node.length) {\n var xm = (x1 + x2) / 2,\n ym = (y1 + y2) / 2;\n\n quads.push(\n new Quad(node[3], xm, ym, x2, y2),\n new Quad(node[2], x1, ym, xm, y2),\n new Quad(node[1], xm, y1, x2, ym),\n new Quad(node[0], x1, y1, xm, ym)\n );\n\n // Visit the closest quadrant first.\n if (i = (y >= ym) << 1 | (x >= xm)) {\n q = quads[quads.length - 1];\n quads[quads.length - 1] = quads[quads.length - 1 - i];\n quads[quads.length - 1 - i] = q;\n }\n }\n\n // Visit this point. (Visiting coincident points isn\u2019t necessary!)\n else {\n var dx = x - +this._x.call(null, node.data),\n dy = y - +this._y.call(null, node.data),\n d2 = dx * dx + dy * dy;\n if (d2 < radius) {\n var d = Math.sqrt(radius = d2);\n x0 = x - d, y0 = y - d;\n x3 = x + d, y3 = y + d;\n data = node.data;\n }\n }\n }\n\n return data;\n}\n", "export default function(d) {\n if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n var parent,\n node = this._root,\n retainer,\n previous,\n next,\n x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1,\n x,\n y,\n xm,\n ym,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return this;\n\n // Find the leaf node for the point.\n // While descending, also retain the deepest parent with a non-removed sibling.\n if (node.length) while (true) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n if (!node.length) break;\n if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n }\n\n // Find the point to remove.\n while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n if (next = node.next) delete node.next;\n\n // If there are multiple coincident points, remove just the point.\n if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n // If this is the root point, remove it.\n if (!parent) return this._root = next, this;\n\n // Remove this leaf.\n next ? parent[i] = next : delete parent[i];\n\n // If the parent now contains exactly one leaf, collapse superfluous parents.\n if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n && node === (parent[3] || parent[2] || parent[1] || parent[0])\n && !node.length) {\n if (retainer) retainer[j] = node;\n else this._root = node;\n }\n\n return this;\n}\n\nexport function removeAll(data) {\n for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n return this;\n}\n", "export default function() {\n return this._root;\n}\n", "export default function() {\n var size = 0;\n this.visit(function(node) {\n if (!node.length) do ++size; while (node = node.next)\n });\n return size;\n}\n", "import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n }\n }\n return this;\n}\n", "import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], next = [], q;\n if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n var node = q.node;\n if (node.length) {\n var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n }\n next.push(q);\n }\n while (q = next.pop()) {\n callback(q.node, q.x0, q.y0, q.x1, q.y1);\n }\n return this;\n}\n", "export function defaultX(d) {\n return d[0];\n}\n\nexport default function(_) {\n return arguments.length ? (this._x = _, this) : this._x;\n}\n", "export function defaultY(d) {\n return d[1];\n}\n\nexport default function(_) {\n return arguments.length ? (this._y = _, this) : this._y;\n}\n", "import tree_add, {addAll as tree_addAll} from \"./add.js\";\nimport tree_cover from \"./cover.js\";\nimport tree_data from \"./data.js\";\nimport tree_extent from \"./extent.js\";\nimport tree_find from \"./find.js\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove.js\";\nimport tree_root from \"./root.js\";\nimport tree_size from \"./size.js\";\nimport tree_visit from \"./visit.js\";\nimport tree_visitAfter from \"./visitAfter.js\";\nimport tree_x, {defaultX} from \"./x.js\";\nimport tree_y, {defaultY} from \"./y.js\";\n\nexport default function quadtree(nodes, x, y) {\n var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\n return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n this._x = x;\n this._y = y;\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n var copy = {data: leaf.data}, next = copy;\n while (leaf = leaf.next) next = next.next = {data: leaf.data};\n return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n node = this._root,\n nodes,\n child;\n\n if (!node) return copy;\n\n if (!node.length) return copy._root = leaf_copy(node), copy;\n\n nodes = [{source: node, target: copy._root = new Array(4)}];\n while (node = nodes.pop()) {\n for (var i = 0; i < 4; ++i) {\n if (child = node.source[i]) {\n if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n else node.target[i] = leaf_copy(child);\n }\n }\n }\n\n return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\n", "export default function(x) {\n return function() {\n return x;\n };\n}\n", "export default function(random) {\n return (random() - 0.5) * 1e-6;\n}\n", "import {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction x(d) {\n return d.x + d.vx;\n}\n\nfunction y(d) {\n return d.y + d.vy;\n}\n\nexport default function(radius) {\n var nodes,\n radii,\n random,\n strength = 1,\n iterations = 1;\n\n if (typeof radius !== \"function\") radius = constant(radius == null ? 1 : +radius);\n\n function force() {\n var i, n = nodes.length,\n tree,\n node,\n xi,\n yi,\n ri,\n ri2;\n\n for (var k = 0; k < iterations; ++k) {\n tree = quadtree(nodes, x, y).visitAfter(prepare);\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n ri = radii[node.index], ri2 = ri * ri;\n xi = node.x + node.vx;\n yi = node.y + node.vy;\n tree.visit(apply);\n }\n }\n\n function apply(quad, x0, y0, x1, y1) {\n var data = quad.data, rj = quad.r, r = ri + rj;\n if (data) {\n if (data.index > node.index) {\n var x = xi - data.x - data.vx,\n y = yi - data.y - data.vy,\n l = x * x + y * y;\n if (l < r * r) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n l = (r - (l = Math.sqrt(l))) / l * strength;\n node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));\n node.vy += (y *= l) * r;\n data.vx -= x * (r = 1 - r);\n data.vy -= y * r;\n }\n }\n return;\n }\n return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;\n }\n }\n\n function prepare(quad) {\n if (quad.data) return quad.r = radii[quad.data.index];\n for (var i = quad.r = 0; i < 4; ++i) {\n if (quad[i] && quad[i].r > quad.r) {\n quad.r = quad[i].r;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n radii = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes);\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n force.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : radius;\n };\n\n return force;\n}\n", "import constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction index(d) {\n return d.index;\n}\n\nfunction find(nodeById, nodeId) {\n var node = nodeById.get(nodeId);\n if (!node) throw new Error(\"node not found: \" + nodeId);\n return node;\n}\n\nexport default function(links) {\n var id = index,\n strength = defaultStrength,\n strengths,\n distance = constant(30),\n distances,\n nodes,\n count,\n bias,\n random,\n iterations = 1;\n\n if (links == null) links = [];\n\n function defaultStrength(link) {\n return 1 / Math.min(count[link.source.index], count[link.target.index]);\n }\n\n function force(alpha) {\n for (var k = 0, n = links.length; k < iterations; ++k) {\n for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {\n link = links[i], source = link.source, target = link.target;\n x = target.x + target.vx - source.x - source.vx || jiggle(random);\n y = target.y + target.vy - source.y - source.vy || jiggle(random);\n l = Math.sqrt(x * x + y * y);\n l = (l - distances[i]) / l * alpha * strengths[i];\n x *= l, y *= l;\n target.vx -= x * (b = bias[i]);\n target.vy -= y * b;\n source.vx += x * (b = 1 - b);\n source.vy += y * b;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n\n var i,\n n = nodes.length,\n m = links.length,\n nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d])),\n link;\n\n for (i = 0, count = new Array(n); i < m; ++i) {\n link = links[i], link.index = i;\n if (typeof link.source !== \"object\") link.source = find(nodeById, link.source);\n if (typeof link.target !== \"object\") link.target = find(nodeById, link.target);\n count[link.source.index] = (count[link.source.index] || 0) + 1;\n count[link.target.index] = (count[link.target.index] || 0) + 1;\n }\n\n for (i = 0, bias = new Array(m); i < m; ++i) {\n link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);\n }\n\n strengths = new Array(m), initializeStrength();\n distances = new Array(m), initializeDistance();\n }\n\n function initializeStrength() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n strengths[i] = +strength(links[i], i, links);\n }\n }\n\n function initializeDistance() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n distances[i] = +distance(links[i], i, links);\n }\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.links = function(_) {\n return arguments.length ? (links = _, initialize(), force) : links;\n };\n\n force.id = function(_) {\n return arguments.length ? (id = _, force) : id;\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initializeStrength(), force) : strength;\n };\n\n force.distance = function(_) {\n return arguments.length ? (distance = typeof _ === \"function\" ? _ : constant(+_), initializeDistance(), force) : distance;\n };\n\n return force;\n}\n", "var noop = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n", "var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we\u2019ve set an alarm, if we haven\u2019t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n", "import {Timer, now} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer, total = delay;\n if (delay == null) return t.restart(callback, delay, time), t;\n t._restart = t.restart;\n t.restart = function(callback, delay, time) {\n delay = +delay, time = time == null ? now() : +time;\n t._restart(function tick(elapsed) {\n elapsed += total;\n t._restart(tick, total += delay, time);\n callback(elapsed);\n }, delay, time);\n }\n t.restart(callback, delay, time);\n return t;\n}\n", "// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a = 1664525;\nconst c = 1013904223;\nconst m = 4294967296; // 2^32\n\nexport default function() {\n let s = 1;\n return () => (s = (a * s + c) % m) / m;\n}\n", "import {dispatch} from \"d3-dispatch\";\nimport {timer} from \"d3-timer\";\nimport lcg from \"./lcg.js\";\n\nexport function x(d) {\n return d.x;\n}\n\nexport function y(d) {\n return d.y;\n}\n\nvar initialRadius = 10,\n initialAngle = Math.PI * (3 - Math.sqrt(5));\n\nexport default function(nodes) {\n var simulation,\n alpha = 1,\n alphaMin = 0.001,\n alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n alphaTarget = 0,\n velocityDecay = 0.6,\n forces = new Map(),\n stepper = timer(step),\n event = dispatch(\"tick\", \"end\"),\n random = lcg();\n\n if (nodes == null) nodes = [];\n\n function step() {\n tick();\n event.call(\"tick\", simulation);\n if (alpha < alphaMin) {\n stepper.stop();\n event.call(\"end\", simulation);\n }\n }\n\n function tick(iterations) {\n var i, n = nodes.length, node;\n\n if (iterations === undefined) iterations = 1;\n\n for (var k = 0; k < iterations; ++k) {\n alpha += (alphaTarget - alpha) * alphaDecay;\n\n forces.forEach(function(force) {\n force(alpha);\n });\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (node.fx == null) node.x += node.vx *= velocityDecay;\n else node.x = node.fx, node.vx = 0;\n if (node.fy == null) node.y += node.vy *= velocityDecay;\n else node.y = node.fy, node.vy = 0;\n }\n }\n\n return simulation;\n }\n\n function initializeNodes() {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.index = i;\n if (node.fx != null) node.x = node.fx;\n if (node.fy != null) node.y = node.fy;\n if (isNaN(node.x) || isNaN(node.y)) {\n var radius = initialRadius * Math.sqrt(0.5 + i), angle = i * initialAngle;\n node.x = radius * Math.cos(angle);\n node.y = radius * Math.sin(angle);\n }\n if (isNaN(node.vx) || isNaN(node.vy)) {\n node.vx = node.vy = 0;\n }\n }\n }\n\n function initializeForce(force) {\n if (force.initialize) force.initialize(nodes, random);\n return force;\n }\n\n initializeNodes();\n\n return simulation = {\n tick: tick,\n\n restart: function() {\n return stepper.restart(step), simulation;\n },\n\n stop: function() {\n return stepper.stop(), simulation;\n },\n\n nodes: function(_) {\n return arguments.length ? (nodes = _, initializeNodes(), forces.forEach(initializeForce), simulation) : nodes;\n },\n\n alpha: function(_) {\n return arguments.length ? (alpha = +_, simulation) : alpha;\n },\n\n alphaMin: function(_) {\n return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n },\n\n alphaDecay: function(_) {\n return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n },\n\n alphaTarget: function(_) {\n return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n },\n\n velocityDecay: function(_) {\n return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n },\n\n randomSource: function(_) {\n return arguments.length ? (random = _, forces.forEach(initializeForce), simulation) : random;\n },\n\n force: function(name, _) {\n return arguments.length > 1 ? ((_ == null ? forces.delete(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n },\n\n find: function(x, y, radius) {\n var i = 0,\n n = nodes.length,\n dx,\n dy,\n d2,\n node,\n closest;\n\n if (radius == null) radius = Infinity;\n else radius *= radius;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n dx = x - node.x;\n dy = y - node.y;\n d2 = dx * dx + dy * dy;\n if (d2 < radius) closest = node, radius = d2;\n }\n\n return closest;\n },\n\n on: function(name, _) {\n return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n }\n };\n}\n", "import {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\nimport {x, y} from \"./simulation.js\";\n\nexport default function() {\n var nodes,\n node,\n random,\n alpha,\n strength = constant(-30),\n strengths,\n distanceMin2 = 1,\n distanceMax2 = Infinity,\n theta2 = 0.81;\n\n function force(_) {\n var i, n = nodes.length, tree = quadtree(nodes, x, y).visitAfter(accumulate);\n for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n strengths = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes);\n }\n\n function accumulate(quad) {\n var strength = 0, q, c, weight = 0, x, y, i;\n\n // For internal nodes, accumulate forces from child quadrants.\n if (quad.length) {\n for (x = y = i = 0; i < 4; ++i) {\n if ((q = quad[i]) && (c = Math.abs(q.value))) {\n strength += q.value, weight += c, x += c * q.x, y += c * q.y;\n }\n }\n quad.x = x / weight;\n quad.y = y / weight;\n }\n\n // For leaf nodes, accumulate forces from coincident quadrants.\n else {\n q = quad;\n q.x = q.data.x;\n q.y = q.data.y;\n do strength += strengths[q.data.index];\n while (q = q.next);\n }\n\n quad.value = strength;\n }\n\n function apply(quad, x1, _, x2) {\n if (!quad.value) return true;\n\n var x = quad.x - node.x,\n y = quad.y - node.y,\n w = x2 - x1,\n l = x * x + y * y;\n\n // Apply the Barnes-Hut approximation if possible.\n // Limit forces for very close nodes; randomize direction if coincident.\n if (w * w / theta2 < l) {\n if (l < distanceMax2) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n node.vx += x * quad.value * alpha / l;\n node.vy += y * quad.value * alpha / l;\n }\n return true;\n }\n\n // Otherwise, process points directly.\n else if (quad.length || l >= distanceMax2) return;\n\n // Limit forces for very close nodes; randomize direction if coincident.\n if (quad.data !== node || quad.next) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n }\n\n do if (quad.data !== node) {\n w = strengths[quad.data.index] * alpha / l;\n node.vx += x * w;\n node.vy += y * w;\n } while (quad = quad.next);\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.distanceMin = function(_) {\n return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);\n };\n\n force.distanceMax = function(_) {\n return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);\n };\n\n force.theta = function(_) {\n return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);\n };\n\n return force;\n}\n", "import constant from \"./constant.js\";\n\nexport default function(x) {\n var strength = constant(0.1),\n nodes,\n strengths,\n xz;\n\n if (typeof x !== \"function\") x = constant(x == null ? 0 : +x);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n xz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : x;\n };\n\n return force;\n}\n", "import constant from \"./constant.js\";\n\nexport default function(y) {\n var strength = constant(0.1),\n nodes,\n strengths,\n yz;\n\n if (typeof y !== \"function\") y = constant(y == null ? 0 : +y);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n yz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : y;\n };\n\n return force;\n}\n", "import { Transform, isTuple, ingest, tupleid, stableCompare } from 'vega-dataflow';\nimport { inherits, error, array, one, truthy, hasOwnProperty } from 'vega-util';\nimport { hierarchy, pack, partition, stratify, tree, cluster, treemap, treemapBinary, treemapDice, treemapSlice, treemapSliceDice, treemapSquarify, treemapResquarify } from 'd3-hierarchy';\n\n// Build lookup table mapping tuple keys to tree node instances\nfunction lookup (tree, key, filter) {\n const map = {};\n tree.each(node => {\n const t = node.data;\n if (filter(t)) map[key(t)] = node;\n });\n tree.lookup = map;\n return tree;\n}\n\n/**\n * Nest tuples into a tree structure, grouped by key values.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array<function(object): *>} params.keys - The key fields to nest by, in order.\n * @param {boolean} [params.generate=false] - A boolean flag indicating if\n * non-leaf nodes generated by this transform should be included in the\n * output. The default (false) includes only the input data (leaf nodes)\n * in the data stream.\n */\nfunction Nest(params) {\n Transform.call(this, null, params);\n}\nNest.Definition = {\n 'type': 'Nest',\n 'metadata': {\n 'treesource': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'keys',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'generate',\n 'type': 'boolean'\n }]\n};\nconst children = n => n.values;\ninherits(Nest, Transform, {\n transform(_, pulse) {\n if (!pulse.source) {\n error('Nest transform requires an upstream data source.');\n }\n var gen = _.generate,\n mod = _.modified(),\n out = pulse.clone(),\n tree = this.value;\n if (!tree || mod || pulse.changed()) {\n // collect nodes to remove\n if (tree) {\n tree.each(node => {\n if (node.children && isTuple(node.data)) {\n out.rem.push(node.data);\n }\n });\n }\n\n // generate new tree structure\n this.value = tree = hierarchy({\n values: array(_.keys).reduce((n, k) => {\n n.key(k);\n return n;\n }, nest()).entries(out.source)\n }, children);\n\n // collect nodes to add\n if (gen) {\n tree.each(node => {\n if (node.children) {\n node = ingest(node.data);\n out.add.push(node);\n out.source.push(node);\n }\n });\n }\n\n // build lookup table\n lookup(tree, tupleid, tupleid);\n }\n out.source.root = tree;\n return out;\n }\n});\nfunction nest() {\n const keys = [],\n nest = {\n entries: array => entries(apply(array, 0), 0),\n key: d => (keys.push(d), nest)\n };\n function apply(array, depth) {\n if (depth >= keys.length) {\n return array;\n }\n const n = array.length,\n key = keys[depth++],\n valuesByKey = {},\n result = {};\n let i = -1,\n keyValue,\n value,\n values;\n while (++i < n) {\n keyValue = key(value = array[i]) + '';\n if (values = valuesByKey[keyValue]) {\n values.push(value);\n } else {\n valuesByKey[keyValue] = [value];\n }\n }\n for (keyValue in valuesByKey) {\n result[keyValue] = apply(valuesByKey[keyValue], depth);\n }\n return result;\n }\n function entries(map, depth) {\n if (++depth > keys.length) return map;\n const array = [];\n for (const key in map) {\n array.push({\n key,\n values: entries(map[key], depth)\n });\n }\n return array;\n }\n return nest;\n}\n\n/**\n * Abstract class for tree layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nfunction HierarchyLayout(params) {\n Transform.call(this, null, params);\n}\nconst defaultSeparation = (a, b) => a.parent === b.parent ? 1 : 2;\ninherits(HierarchyLayout, Transform, {\n transform(_, pulse) {\n if (!pulse.source || !pulse.source.root) {\n error(this.constructor.name + ' transform requires a backing tree data source.');\n }\n const layout = this.layout(_.method),\n fields = this.fields,\n root = pulse.source.root,\n as = _.as || fields;\n if (_.field) root.sum(_.field);else root.count();\n if (_.sort) root.sort(stableCompare(_.sort, d => d.data));\n setParams(layout, this.params, _);\n if (layout.separation) {\n layout.separation(_.separation !== false ? defaultSeparation : one);\n }\n try {\n this.value = layout(root);\n } catch (err) {\n error(err);\n }\n root.each(node => setFields(node, fields, as));\n return pulse.reflow(_.modified()).modifies(as).modifies('leaf');\n }\n});\nfunction setParams(layout, params, _) {\n for (let p, i = 0, n = params.length; i < n; ++i) {\n p = params[i];\n if (p in _) layout[p](_[p]);\n }\n}\nfunction setFields(node, fields, as) {\n const t = node.data,\n n = fields.length - 1;\n for (let i = 0; i < n; ++i) {\n t[as[i]] = node[fields[i]];\n }\n t[as[n]] = node.children ? node.children.length : 0;\n}\n\nconst Output$3 = ['x', 'y', 'r', 'depth', 'children'];\n\n/**\n * Packed circle tree layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size nodes.\n */\nfunction Pack(params) {\n HierarchyLayout.call(this, params);\n}\nPack.Definition = {\n 'type': 'Pack',\n 'metadata': {\n 'tree': true,\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'padding',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'radius',\n 'type': 'field',\n 'default': null\n }, {\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': Output$3.length,\n 'default': Output$3\n }]\n};\ninherits(Pack, HierarchyLayout, {\n layout: pack,\n params: ['radius', 'size', 'padding'],\n fields: Output$3\n});\n\nconst Output$2 = ['x0', 'y0', 'x1', 'y1', 'depth', 'children'];\n\n/**\n * Partition tree layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size nodes.\n */\nfunction Partition(params) {\n HierarchyLayout.call(this, params);\n}\nPartition.Definition = {\n 'type': 'Partition',\n 'metadata': {\n 'tree': true,\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'padding',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'round',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': Output$2.length,\n 'default': Output$2\n }]\n};\ninherits(Partition, HierarchyLayout, {\n layout: partition,\n params: ['size', 'round', 'padding'],\n fields: Output$2\n});\n\n/**\n * Stratify a collection of tuples into a tree structure based on\n * id and parent id fields.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.key - Unique key field for each tuple.\n * @param {function(object): *} params.parentKey - Field with key for parent tuple.\n */\nfunction Stratify(params) {\n Transform.call(this, null, params);\n}\nStratify.Definition = {\n 'type': 'Stratify',\n 'metadata': {\n 'treesource': true\n },\n 'params': [{\n 'name': 'key',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'parentKey',\n 'type': 'field',\n 'required': true\n }]\n};\ninherits(Stratify, Transform, {\n transform(_, pulse) {\n if (!pulse.source) {\n error('Stratify transform requires an upstream data source.');\n }\n let tree = this.value;\n const mod = _.modified(),\n out = pulse.fork(pulse.ALL).materialize(pulse.SOURCE),\n run = !tree || mod || pulse.changed(pulse.ADD_REM) || pulse.modified(_.key.fields) || pulse.modified(_.parentKey.fields);\n\n // prevent upstream source pollution\n out.source = out.source.slice();\n if (run) {\n tree = out.source.length ? lookup(stratify().id(_.key).parentId(_.parentKey)(out.source), _.key, truthy) : lookup(stratify()([{}]), _.key, _.key);\n }\n out.source.root = this.value = tree;\n return out;\n }\n});\n\nconst Layouts = {\n tidy: tree,\n cluster: cluster\n};\nconst Output$1 = ['x', 'y', 'depth', 'children'];\n\n/**\n * Tree layout. Depending on the method parameter, performs either\n * Reingold-Tilford 'tidy' layout or dendrogram 'cluster' layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nfunction Tree(params) {\n HierarchyLayout.call(this, params);\n}\nTree.Definition = {\n 'type': 'Tree',\n 'metadata': {\n 'tree': true,\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'method',\n 'type': 'enum',\n 'default': 'tidy',\n 'values': ['tidy', 'cluster']\n }, {\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'nodeSize',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'separation',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': Output$1.length,\n 'default': Output$1\n }]\n};\ninherits(Tree, HierarchyLayout, {\n /**\n * Tree layout generator. Supports both 'tidy' and 'cluster' layouts.\n */\n layout(method) {\n const m = method || 'tidy';\n if (hasOwnProperty(Layouts, m)) return Layouts[m]();else error('Unrecognized Tree layout method: ' + m);\n },\n params: ['size', 'nodeSize'],\n fields: Output$1\n});\n\n/**\n * Generate tuples representing links between tree nodes.\n * The resulting tuples will contain 'source' and 'target' fields,\n * which point to parent and child node tuples, respectively.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nfunction TreeLinks(params) {\n Transform.call(this, [], params);\n}\nTreeLinks.Definition = {\n 'type': 'TreeLinks',\n 'metadata': {\n 'tree': true,\n 'generates': true,\n 'changes': true\n },\n 'params': []\n};\ninherits(TreeLinks, Transform, {\n transform(_, pulse) {\n const links = this.value,\n tree = pulse.source && pulse.source.root,\n out = pulse.fork(pulse.NO_SOURCE),\n lut = {};\n if (!tree) error('TreeLinks transform requires a tree data source.');\n if (pulse.changed(pulse.ADD_REM)) {\n // remove previous links\n out.rem = links;\n\n // build lookup table of valid tuples\n pulse.visit(pulse.SOURCE, t => lut[tupleid(t)] = 1);\n\n // generate links for all edges incident on valid tuples\n tree.each(node => {\n const t = node.data,\n p = node.parent && node.parent.data;\n if (p && lut[tupleid(t)] && lut[tupleid(p)]) {\n out.add.push(ingest({\n source: p,\n target: t\n }));\n }\n });\n this.value = out.add;\n } else if (pulse.changed(pulse.MOD)) {\n // build lookup table of modified tuples\n pulse.visit(pulse.MOD, t => lut[tupleid(t)] = 1);\n\n // gather links incident on modified tuples\n links.forEach(link => {\n if (lut[tupleid(link.source)] || lut[tupleid(link.target)]) {\n out.mod.push(link);\n }\n });\n }\n return out;\n }\n});\n\nconst Tiles = {\n binary: treemapBinary,\n dice: treemapDice,\n slice: treemapSlice,\n slicedice: treemapSliceDice,\n squarify: treemapSquarify,\n resquarify: treemapResquarify\n};\nconst Output = ['x0', 'y0', 'x1', 'y1', 'depth', 'children'];\n\n/**\n * Treemap layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size nodes.\n */\nfunction Treemap(params) {\n HierarchyLayout.call(this, params);\n}\nTreemap.Definition = {\n 'type': 'Treemap',\n 'metadata': {\n 'tree': true,\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'method',\n 'type': 'enum',\n 'default': 'squarify',\n 'values': ['squarify', 'resquarify', 'binary', 'dice', 'slice', 'slicedice']\n }, {\n 'name': 'padding',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingInner',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingOuter',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingTop',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingRight',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingBottom',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingLeft',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'ratio',\n 'type': 'number',\n 'default': 1.618033988749895\n }, {\n 'name': 'round',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': Output.length,\n 'default': Output\n }]\n};\ninherits(Treemap, HierarchyLayout, {\n /**\n * Treemap layout generator. Adds 'method' and 'ratio' parameters\n * to configure the underlying tile method.\n */\n layout() {\n const x = treemap();\n x.ratio = _ => {\n const t = x.tile();\n if (t.ratio) x.tile(t.ratio(_));\n };\n x.method = _ => {\n if (hasOwnProperty(Tiles, _)) x.tile(Tiles[_]);else error('Unrecognized Treemap layout method: ' + _);\n };\n return x;\n },\n params: ['method', 'ratio', 'size', 'round', 'padding', 'paddingInner', 'paddingOuter', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft'],\n fields: Output\n});\n\nexport { Nest as nest, Pack as pack, Partition as partition, Stratify as stratify, Tree as tree, TreeLinks as treelinks, Treemap as treemap };\n", "function defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\nfunction meanX(children) {\n return children.reduce(meanXReduce, 0) / children.length;\n}\n\nfunction meanXReduce(x, c) {\n return x + c.x;\n}\n\nfunction maxY(children) {\n return 1 + children.reduce(maxYReduce, 0);\n}\n\nfunction maxYReduce(y, c) {\n return Math.max(y, c.y);\n}\n\nfunction leafLeft(node) {\n var children;\n while (children = node.children) node = children[0];\n return node;\n}\n\nfunction leafRight(node) {\n var children;\n while (children = node.children) node = children[children.length - 1];\n return node;\n}\n\nexport default function() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = false;\n\n function cluster(root) {\n var previousNode,\n x = 0;\n\n // First walk, computing the initial x & y values.\n root.eachAfter(function(node) {\n var children = node.children;\n if (children) {\n node.x = meanX(children);\n node.y = maxY(children);\n } else {\n node.x = previousNode ? x += separation(node, previousNode) : 0;\n node.y = 0;\n previousNode = node;\n }\n });\n\n var left = leafLeft(root),\n right = leafRight(root),\n x0 = left.x - separation(left, right) / 2,\n x1 = right.x + separation(right, left) / 2;\n\n // Second walk, normalizing x & y to the desired size.\n return root.eachAfter(nodeSize ? function(node) {\n node.x = (node.x - root.x) * dx;\n node.y = (root.y - node.y) * dy;\n } : function(node) {\n node.x = (node.x - x0) / (x1 - x0) * dx;\n node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;\n });\n }\n\n cluster.separation = function(x) {\n return arguments.length ? (separation = x, cluster) : separation;\n };\n\n cluster.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);\n };\n\n cluster.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);\n };\n\n return cluster;\n}\n", "function count(node) {\n var sum = 0,\n children = node.children,\n i = children && children.length;\n if (!i) sum = 1;\n else while (--i >= 0) sum += children[i].value;\n node.value = sum;\n}\n\nexport default function() {\n return this.eachAfter(count);\n}\n", "export default function(callback, that) {\n let index = -1;\n for (const node of this) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n", "export default function(callback, that) {\n var node = this, nodes = [node], children, i, index = -1;\n while (node = nodes.pop()) {\n callback.call(that, node, ++index, this);\n if (children = node.children) {\n for (i = children.length - 1; i >= 0; --i) {\n nodes.push(children[i]);\n }\n }\n }\n return this;\n}\n", "export default function(callback, that) {\n var node = this, nodes = [node], next = [], children, i, n, index = -1;\n while (node = nodes.pop()) {\n next.push(node);\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n nodes.push(children[i]);\n }\n }\n }\n while (node = next.pop()) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n", "export default function(callback, that) {\n let index = -1;\n for (const node of this) {\n if (callback.call(that, node, ++index, this)) {\n return node;\n }\n }\n}\n", "export default function(value) {\n return this.eachAfter(function(node) {\n var sum = +value(node.data) || 0,\n children = node.children,\n i = children && children.length;\n while (--i >= 0) sum += children[i].value;\n node.value = sum;\n });\n}\n", "export default function(compare) {\n return this.eachBefore(function(node) {\n if (node.children) {\n node.children.sort(compare);\n }\n });\n}\n", "export default function(end) {\n var start = this,\n ancestor = leastCommonAncestor(start, end),\n nodes = [start];\n while (start !== ancestor) {\n start = start.parent;\n nodes.push(start);\n }\n var k = nodes.length;\n while (end !== ancestor) {\n nodes.splice(k, 0, end);\n end = end.parent;\n }\n return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = a.ancestors(),\n bNodes = b.ancestors(),\n c = null;\n a = aNodes.pop();\n b = bNodes.pop();\n while (a === b) {\n c = a;\n a = aNodes.pop();\n b = bNodes.pop();\n }\n return c;\n}\n", "export default function() {\n var node = this, nodes = [node];\n while (node = node.parent) {\n nodes.push(node);\n }\n return nodes;\n}\n", "export default function() {\n return Array.from(this);\n}\n", "export default function() {\n var leaves = [];\n this.eachBefore(function(node) {\n if (!node.children) {\n leaves.push(node);\n }\n });\n return leaves;\n}\n", "export default function() {\n var root = this, links = [];\n root.each(function(node) {\n if (node !== root) { // Don\u2019t include the root\u2019s parent, if any.\n links.push({source: node.parent, target: node});\n }\n });\n return links;\n}\n", "export default function*() {\n var node = this, current, next = [node], children, i, n;\n do {\n current = next.reverse(), next = [];\n while (node = current.pop()) {\n yield node;\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n next.push(children[i]);\n }\n }\n }\n } while (next.length);\n}\n", "import node_count from \"./count.js\";\nimport node_each from \"./each.js\";\nimport node_eachBefore from \"./eachBefore.js\";\nimport node_eachAfter from \"./eachAfter.js\";\nimport node_find from \"./find.js\";\nimport node_sum from \"./sum.js\";\nimport node_sort from \"./sort.js\";\nimport node_path from \"./path.js\";\nimport node_ancestors from \"./ancestors.js\";\nimport node_descendants from \"./descendants.js\";\nimport node_leaves from \"./leaves.js\";\nimport node_links from \"./links.js\";\nimport node_iterator from \"./iterator.js\";\n\nexport default function hierarchy(data, children) {\n if (data instanceof Map) {\n data = [undefined, data];\n if (children === undefined) children = mapChildren;\n } else if (children === undefined) {\n children = objectChildren;\n }\n\n var root = new Node(data),\n node,\n nodes = [root],\n child,\n childs,\n i,\n n;\n\n while (node = nodes.pop()) {\n if ((childs = children(node.data)) && (n = (childs = Array.from(childs)).length)) {\n node.children = childs;\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = childs[i] = new Node(childs[i]));\n child.parent = node;\n child.depth = node.depth + 1;\n }\n }\n }\n\n return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n return hierarchy(this).eachBefore(copyData);\n}\n\nfunction objectChildren(d) {\n return d.children;\n}\n\nfunction mapChildren(d) {\n return Array.isArray(d) ? d[1] : null;\n}\n\nfunction copyData(node) {\n if (node.data.value !== undefined) node.value = node.data.value;\n node.data = node.data.data;\n}\n\nexport function computeHeight(node) {\n var height = 0;\n do node.height = height;\n while ((node = node.parent) && (node.height < ++height));\n}\n\nexport function Node(data) {\n this.data = data;\n this.depth =\n this.height = 0;\n this.parent = null;\n}\n\nNode.prototype = hierarchy.prototype = {\n constructor: Node,\n count: node_count,\n each: node_each,\n eachAfter: node_eachAfter,\n eachBefore: node_eachBefore,\n find: node_find,\n sum: node_sum,\n sort: node_sort,\n path: node_path,\n ancestors: node_ancestors,\n descendants: node_descendants,\n leaves: node_leaves,\n links: node_links,\n copy: node_copy,\n [Symbol.iterator]: node_iterator\n};\n", "export function optional(f) {\n return f == null ? null : required(f);\n}\n\nexport function required(f) {\n if (typeof f !== \"function\") throw new Error;\n return f;\n}\n", "export function constantZero() {\n return 0;\n}\n\nexport default function(x) {\n return function() {\n return x;\n };\n}\n", "// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a = 1664525;\nconst c = 1013904223;\nconst m = 4294967296; // 2^32\n\nexport default function() {\n let s = 1;\n return () => (s = (a * s + c) % m) / m;\n}\n", "export default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n\nexport function shuffle(array, random) {\n let m = array.length,\n t,\n i;\n\n while (m) {\n i = random() * m-- | 0;\n t = array[m];\n array[m] = array[i];\n array[i] = t;\n }\n\n return array;\n}\n", "import {shuffle} from \"../array.js\";\nimport lcg from \"../lcg.js\";\n\nexport default function(circles) {\n return packEncloseRandom(circles, lcg());\n}\n\nexport function packEncloseRandom(circles, random) {\n var i = 0, n = (circles = shuffle(Array.from(circles), random)).length, B = [], p, e;\n\n while (i < n) {\n p = circles[i];\n if (e && enclosesWeak(e, p)) ++i;\n else e = encloseBasis(B = extendBasis(B, p)), i = 0;\n }\n\n return e;\n}\n\nfunction extendBasis(B, p) {\n var i, j;\n\n if (enclosesWeakAll(p, B)) return [p];\n\n // If we get here then B must have at least one element.\n for (i = 0; i < B.length; ++i) {\n if (enclosesNot(p, B[i])\n && enclosesWeakAll(encloseBasis2(B[i], p), B)) {\n return [B[i], p];\n }\n }\n\n // If we get here then B must have at least two elements.\n for (i = 0; i < B.length - 1; ++i) {\n for (j = i + 1; j < B.length; ++j) {\n if (enclosesNot(encloseBasis2(B[i], B[j]), p)\n && enclosesNot(encloseBasis2(B[i], p), B[j])\n && enclosesNot(encloseBasis2(B[j], p), B[i])\n && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) {\n return [B[i], B[j], p];\n }\n }\n }\n\n // If we get here then something is very wrong.\n throw new Error;\n}\n\nfunction enclosesNot(a, b) {\n var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y;\n return dr < 0 || dr * dr < dx * dx + dy * dy;\n}\n\nfunction enclosesWeak(a, b) {\n var dr = a.r - b.r + Math.max(a.r, b.r, 1) * 1e-9, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction enclosesWeakAll(a, B) {\n for (var i = 0; i < B.length; ++i) {\n if (!enclosesWeak(a, B[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction encloseBasis(B) {\n switch (B.length) {\n case 1: return encloseBasis1(B[0]);\n case 2: return encloseBasis2(B[0], B[1]);\n case 3: return encloseBasis3(B[0], B[1], B[2]);\n }\n}\n\nfunction encloseBasis1(a) {\n return {\n x: a.x,\n y: a.y,\n r: a.r\n };\n}\n\nfunction encloseBasis2(a, b) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,\n l = Math.sqrt(x21 * x21 + y21 * y21);\n return {\n x: (x1 + x2 + x21 / l * r21) / 2,\n y: (y1 + y2 + y21 / l * r21) / 2,\n r: (l + r1 + r2) / 2\n };\n}\n\nfunction encloseBasis3(a, b, c) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x3 = c.x, y3 = c.y, r3 = c.r,\n a2 = x1 - x2,\n a3 = x1 - x3,\n b2 = y1 - y2,\n b3 = y1 - y3,\n c2 = r2 - r1,\n c3 = r3 - r1,\n d1 = x1 * x1 + y1 * y1 - r1 * r1,\n d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2,\n d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3,\n ab = a3 * b2 - a2 * b3,\n xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1,\n xb = (b3 * c2 - b2 * c3) / ab,\n ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1,\n yb = (a2 * c3 - a3 * c2) / ab,\n A = xb * xb + yb * yb - 1,\n B = 2 * (r1 + xa * xb + ya * yb),\n C = xa * xa + ya * ya - r1 * r1,\n r = -(Math.abs(A) > 1e-6 ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);\n return {\n x: x1 + xa + xb * r,\n y: y1 + ya + yb * r,\n r: r\n };\n}\n", "import array from \"../array.js\";\nimport lcg from \"../lcg.js\";\nimport {packEncloseRandom} from \"./enclose.js\";\n\nfunction place(b, a, c) {\n var dx = b.x - a.x, x, a2,\n dy = b.y - a.y, y, b2,\n d2 = dx * dx + dy * dy;\n if (d2) {\n a2 = a.r + c.r, a2 *= a2;\n b2 = b.r + c.r, b2 *= b2;\n if (a2 > b2) {\n x = (d2 + b2 - a2) / (2 * d2);\n y = Math.sqrt(Math.max(0, b2 / d2 - x * x));\n c.x = b.x - x * dx - y * dy;\n c.y = b.y - x * dy + y * dx;\n } else {\n x = (d2 + a2 - b2) / (2 * d2);\n y = Math.sqrt(Math.max(0, a2 / d2 - x * x));\n c.x = a.x + x * dx - y * dy;\n c.y = a.y + x * dy + y * dx;\n }\n } else {\n c.x = a.x + c.r;\n c.y = a.y;\n }\n}\n\nfunction intersects(a, b) {\n var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction score(node) {\n var a = node._,\n b = node.next._,\n ab = a.r + b.r,\n dx = (a.x * b.r + b.x * a.r) / ab,\n dy = (a.y * b.r + b.y * a.r) / ab;\n return dx * dx + dy * dy;\n}\n\nfunction Node(circle) {\n this._ = circle;\n this.next = null;\n this.previous = null;\n}\n\nexport function packSiblingsRandom(circles, random) {\n if (!(n = (circles = array(circles)).length)) return 0;\n\n var a, b, c, n, aa, ca, i, j, k, sj, sk;\n\n // Place the first circle.\n a = circles[0], a.x = 0, a.y = 0;\n if (!(n > 1)) return a.r;\n\n // Place the second circle.\n b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;\n if (!(n > 2)) return a.r + b.r;\n\n // Place the third circle.\n place(b, a, c = circles[2]);\n\n // Initialize the front-chain using the first three circles a, b and c.\n a = new Node(a), b = new Node(b), c = new Node(c);\n a.next = c.previous = b;\n b.next = a.previous = c;\n c.next = b.previous = a;\n\n // Attempt to place each remaining circle\u2026\n pack: for (i = 3; i < n; ++i) {\n place(a._, b._, c = circles[i]), c = new Node(c);\n\n // Find the closest intersecting circle on the front-chain, if any.\n // \u201CCloseness\u201D is determined by linear distance along the front-chain.\n // \u201CAhead\u201D or \u201Cbehind\u201D is likewise determined by linear distance.\n j = b.next, k = a.previous, sj = b._.r, sk = a._.r;\n do {\n if (sj <= sk) {\n if (intersects(j._, c._)) {\n b = j, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sj += j._.r, j = j.next;\n } else {\n if (intersects(k._, c._)) {\n a = k, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sk += k._.r, k = k.previous;\n }\n } while (j !== k.next);\n\n // Success! Insert the new circle c between a and b.\n c.previous = a, c.next = b, a.next = b.previous = b = c;\n\n // Compute the new closest circle pair to the centroid.\n aa = score(a);\n while ((c = c.next) !== b) {\n if ((ca = score(c)) < aa) {\n a = c, aa = ca;\n }\n }\n b = a.next;\n }\n\n // Compute the enclosing circle of the front chain.\n a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = packEncloseRandom(a, random);\n\n // Translate the circles to put the enclosing circle around the origin.\n for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;\n\n return c.r;\n}\n\nexport default function(circles) {\n packSiblingsRandom(circles, lcg());\n return circles;\n}\n", "import {optional} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\nimport lcg from \"../lcg.js\";\nimport {packSiblingsRandom} from \"./siblings.js\";\n\nfunction defaultRadius(d) {\n return Math.sqrt(d.value);\n}\n\nexport default function() {\n var radius = null,\n dx = 1,\n dy = 1,\n padding = constantZero;\n\n function pack(root) {\n const random = lcg();\n root.x = dx / 2, root.y = dy / 2;\n if (radius) {\n root.eachBefore(radiusLeaf(radius))\n .eachAfter(packChildrenRandom(padding, 0.5, random))\n .eachBefore(translateChild(1));\n } else {\n root.eachBefore(radiusLeaf(defaultRadius))\n .eachAfter(packChildrenRandom(constantZero, 1, random))\n .eachAfter(packChildrenRandom(padding, root.r / Math.min(dx, dy), random))\n .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));\n }\n return root;\n }\n\n pack.radius = function(x) {\n return arguments.length ? (radius = optional(x), pack) : radius;\n };\n\n pack.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];\n };\n\n pack.padding = function(x) {\n return arguments.length ? (padding = typeof x === \"function\" ? x : constant(+x), pack) : padding;\n };\n\n return pack;\n}\n\nfunction radiusLeaf(radius) {\n return function(node) {\n if (!node.children) {\n node.r = Math.max(0, +radius(node) || 0);\n }\n };\n}\n\nfunction packChildrenRandom(padding, k, random) {\n return function(node) {\n if (children = node.children) {\n var children,\n i,\n n = children.length,\n r = padding(node) * k || 0,\n e;\n\n if (r) for (i = 0; i < n; ++i) children[i].r += r;\n e = packSiblingsRandom(children, random);\n if (r) for (i = 0; i < n; ++i) children[i].r -= r;\n node.r = e + r;\n }\n };\n}\n\nfunction translateChild(k) {\n return function(node) {\n var parent = node.parent;\n node.r *= k;\n if (parent) {\n node.x = parent.x + k * node.x;\n node.y = parent.y + k * node.y;\n }\n };\n}\n", "export default function(node) {\n node.x0 = Math.round(node.x0);\n node.y0 = Math.round(node.y0);\n node.x1 = Math.round(node.x1);\n node.y1 = Math.round(node.y1);\n}\n", "export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (x1 - x0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.y0 = y0, node.y1 = y1;\n node.x0 = x0, node.x1 = x0 += node.value * k;\n }\n}\n", "import roundNode from \"./treemap/round.js\";\nimport treemapDice from \"./treemap/dice.js\";\n\nexport default function() {\n var dx = 1,\n dy = 1,\n padding = 0,\n round = false;\n\n function partition(root) {\n var n = root.height + 1;\n root.x0 =\n root.y0 = padding;\n root.x1 = dx;\n root.y1 = dy / n;\n root.eachBefore(positionNode(dy, n));\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(dy, n) {\n return function(node) {\n if (node.children) {\n treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);\n }\n var x0 = node.x0,\n y0 = node.y0,\n x1 = node.x1 - padding,\n y1 = node.y1 - padding;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n };\n }\n\n partition.round = function(x) {\n return arguments.length ? (round = !!x, partition) : round;\n };\n\n partition.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];\n };\n\n partition.padding = function(x) {\n return arguments.length ? (padding = +x, partition) : padding;\n };\n\n return partition;\n}\n", "import {optional} from \"./accessors.js\";\nimport {Node, computeHeight} from \"./hierarchy/index.js\";\n\nvar preroot = {depth: -1},\n ambiguous = {},\n imputed = {};\n\nfunction defaultId(d) {\n return d.id;\n}\n\nfunction defaultParentId(d) {\n return d.parentId;\n}\n\nexport default function() {\n var id = defaultId,\n parentId = defaultParentId,\n path;\n\n function stratify(data) {\n var nodes = Array.from(data),\n currentId = id,\n currentParentId = parentId,\n n,\n d,\n i,\n root,\n parent,\n node,\n nodeId,\n nodeKey,\n nodeByKey = new Map;\n\n if (path != null) {\n const I = nodes.map((d, i) => normalize(path(d, i, data)));\n const P = I.map(parentof);\n const S = new Set(I).add(\"\");\n for (const i of P) {\n if (!S.has(i)) {\n S.add(i);\n I.push(i);\n P.push(parentof(i));\n nodes.push(imputed);\n }\n }\n currentId = (_, i) => I[i];\n currentParentId = (_, i) => P[i];\n }\n\n for (i = 0, n = nodes.length; i < n; ++i) {\n d = nodes[i], node = nodes[i] = new Node(d);\n if ((nodeId = currentId(d, i, data)) != null && (nodeId += \"\")) {\n nodeKey = node.id = nodeId;\n nodeByKey.set(nodeKey, nodeByKey.has(nodeKey) ? ambiguous : node);\n }\n if ((nodeId = currentParentId(d, i, data)) != null && (nodeId += \"\")) {\n node.parent = nodeId;\n }\n }\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (nodeId = node.parent) {\n parent = nodeByKey.get(nodeId);\n if (!parent) throw new Error(\"missing: \" + nodeId);\n if (parent === ambiguous) throw new Error(\"ambiguous: \" + nodeId);\n if (parent.children) parent.children.push(node);\n else parent.children = [node];\n node.parent = parent;\n } else {\n if (root) throw new Error(\"multiple roots\");\n root = node;\n }\n }\n\n if (!root) throw new Error(\"no root\");\n\n // When imputing internal nodes, only introduce roots if needed.\n // Then replace the imputed marker data with null.\n if (path != null) {\n while (root.data === imputed && root.children.length === 1) {\n root = root.children[0], --n;\n }\n for (let i = nodes.length - 1; i >= 0; --i) {\n node = nodes[i];\n if (node.data !== imputed) break;\n node.data = null;\n }\n }\n\n root.parent = preroot;\n root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);\n root.parent = null;\n if (n > 0) throw new Error(\"cycle\");\n\n return root;\n }\n\n stratify.id = function(x) {\n return arguments.length ? (id = optional(x), stratify) : id;\n };\n\n stratify.parentId = function(x) {\n return arguments.length ? (parentId = optional(x), stratify) : parentId;\n };\n\n stratify.path = function(x) {\n return arguments.length ? (path = optional(x), stratify) : path;\n };\n\n return stratify;\n}\n\n// To normalize a path, we coerce to a string, strip the trailing slash if any\n// (as long as the trailing slash is not immediately preceded by another slash),\n// and add leading slash if missing.\nfunction normalize(path) {\n path = `${path}`;\n let i = path.length;\n if (slash(path, i - 1) && !slash(path, i - 2)) path = path.slice(0, -1);\n return path[0] === \"/\" ? path : `/${path}`;\n}\n\n// Walk backwards to find the first slash that is not the leading slash, e.g.:\n// \"/foo/bar\" \u21E5 \"/foo\", \"/foo\" \u21E5 \"/\", \"/\" \u21A6 \"\". (The root is special-cased\n// because the id of the root must be a truthy value.)\nfunction parentof(path) {\n let i = path.length;\n if (i < 2) return \"\";\n while (--i > 1) if (slash(path, i)) break;\n return path.slice(0, i);\n}\n\n// Slashes can be escaped; to determine whether a slash is a path delimiter, we\n// count the number of preceding backslashes escaping the forward slash: an odd\n// number indicates an escaped forward slash.\nfunction slash(path, i) {\n if (path[i] === \"/\") {\n let k = 0;\n while (i > 0 && path[--i] === \"\\\\\") ++k;\n if ((k & 1) === 0) return true;\n }\n return false;\n}\n", "import {Node} from \"./hierarchy/index.js\";\n\nfunction defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\n// function radialSeparation(a, b) {\n// return (a.parent === b.parent ? 1 : 2) / a.depth;\n// }\n\n// This function is used to traverse the left contour of a subtree (or\n// subforest). It returns the successor of v on this contour. This successor is\n// either given by the leftmost child of v or by the thread of v. The function\n// returns null if and only if v is on the highest level of its subtree.\nfunction nextLeft(v) {\n var children = v.children;\n return children ? children[0] : v.t;\n}\n\n// This function works analogously to nextLeft.\nfunction nextRight(v) {\n var children = v.children;\n return children ? children[children.length - 1] : v.t;\n}\n\n// Shifts the current subtree rooted at w+. This is done by increasing\n// prelim(w+) and mod(w+) by shift.\nfunction moveSubtree(wm, wp, shift) {\n var change = shift / (wp.i - wm.i);\n wp.c -= change;\n wp.s += shift;\n wm.c += change;\n wp.z += shift;\n wp.m += shift;\n}\n\n// All other shifts, applied to the smaller subtrees between w- and w+, are\n// performed by this function. To prepare the shifts, we have to adjust\n// change(w+), shift(w+), and change(w-).\nfunction executeShifts(v) {\n var shift = 0,\n change = 0,\n children = v.children,\n i = children.length,\n w;\n while (--i >= 0) {\n w = children[i];\n w.z += shift;\n w.m += shift;\n shift += w.s + (change += w.c);\n }\n}\n\n// If vi-\u2019s ancestor is a sibling of v, returns vi-\u2019s ancestor. Otherwise,\n// returns the specified (default) ancestor.\nfunction nextAncestor(vim, v, ancestor) {\n return vim.a.parent === v.parent ? vim.a : ancestor;\n}\n\nfunction TreeNode(node, i) {\n this._ = node;\n this.parent = null;\n this.children = null;\n this.A = null; // default ancestor\n this.a = this; // ancestor\n this.z = 0; // prelim\n this.m = 0; // mod\n this.c = 0; // change\n this.s = 0; // shift\n this.t = null; // thread\n this.i = i; // number\n}\n\nTreeNode.prototype = Object.create(Node.prototype);\n\nfunction treeRoot(root) {\n var tree = new TreeNode(root, 0),\n node,\n nodes = [tree],\n child,\n children,\n i,\n n;\n\n while (node = nodes.pop()) {\n if (children = node._.children) {\n node.children = new Array(n = children.length);\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new TreeNode(children[i], i));\n child.parent = node;\n }\n }\n }\n\n (tree.parent = new TreeNode(null, 0)).children = [tree];\n return tree;\n}\n\n// Node-link tree diagram using the Reingold-Tilford \"tidy\" algorithm\nexport default function() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = null;\n\n function tree(root) {\n var t = treeRoot(root);\n\n // Compute the layout using Buchheim et al.\u2019s algorithm.\n t.eachAfter(firstWalk), t.parent.m = -t.z;\n t.eachBefore(secondWalk);\n\n // If a fixed node size is specified, scale x and y.\n if (nodeSize) root.eachBefore(sizeNode);\n\n // If a fixed tree size is specified, scale x and y based on the extent.\n // Compute the left-most, right-most, and depth-most nodes for extents.\n else {\n var left = root,\n right = root,\n bottom = root;\n root.eachBefore(function(node) {\n if (node.x < left.x) left = node;\n if (node.x > right.x) right = node;\n if (node.depth > bottom.depth) bottom = node;\n });\n var s = left === right ? 1 : separation(left, right) / 2,\n tx = s - left.x,\n kx = dx / (right.x + s + tx),\n ky = dy / (bottom.depth || 1);\n root.eachBefore(function(node) {\n node.x = (node.x + tx) * kx;\n node.y = node.depth * ky;\n });\n }\n\n return root;\n }\n\n // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is\n // applied recursively to the children of v, as well as the function\n // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the\n // node v is placed to the midpoint of its outermost children.\n function firstWalk(v) {\n var children = v.children,\n siblings = v.parent.children,\n w = v.i ? siblings[v.i - 1] : null;\n if (children) {\n executeShifts(v);\n var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n if (w) {\n v.z = w.z + separation(v._, w._);\n v.m = v.z - midpoint;\n } else {\n v.z = midpoint;\n }\n } else if (w) {\n v.z = w.z + separation(v._, w._);\n }\n v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n }\n\n // Computes all real x-coordinates by summing up the modifiers recursively.\n function secondWalk(v) {\n v._.x = v.z + v.parent.m;\n v.m += v.parent.m;\n }\n\n // The core of the algorithm. Here, a new subtree is combined with the\n // previous subtrees. Threads are used to traverse the inside and outside\n // contours of the left and right subtree up to the highest common level. The\n // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the\n // superscript o means outside and i means inside, the subscript - means left\n // subtree and + means right subtree. For summing up the modifiers along the\n // contour, we use respective variables si+, si-, so-, and so+. Whenever two\n // nodes of the inside contours conflict, we compute the left one of the\n // greatest uncommon ancestors using the function ANCESTOR and call MOVE\n // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.\n // Finally, we add a new thread (if necessary).\n function apportion(v, w, ancestor) {\n if (w) {\n var vip = v,\n vop = v,\n vim = w,\n vom = vip.parent.children[0],\n sip = vip.m,\n sop = vop.m,\n sim = vim.m,\n som = vom.m,\n shift;\n while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {\n vom = nextLeft(vom);\n vop = nextRight(vop);\n vop.a = v;\n shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n if (shift > 0) {\n moveSubtree(nextAncestor(vim, v, ancestor), v, shift);\n sip += shift;\n sop += shift;\n }\n sim += vim.m;\n sip += vip.m;\n som += vom.m;\n sop += vop.m;\n }\n if (vim && !nextRight(vop)) {\n vop.t = vim;\n vop.m += sim - sop;\n }\n if (vip && !nextLeft(vom)) {\n vom.t = vip;\n vom.m += sip - som;\n ancestor = v;\n }\n }\n return ancestor;\n }\n\n function sizeNode(node) {\n node.x *= dx;\n node.y = node.depth * dy;\n }\n\n tree.separation = function(x) {\n return arguments.length ? (separation = x, tree) : separation;\n };\n\n tree.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);\n };\n\n tree.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);\n };\n\n return tree;\n}\n", "export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (y1 - y0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.x0 = x0, node.x1 = x1;\n node.y0 = y0, node.y1 = y0 += node.value * k;\n }\n}\n", "import treemapDice from \"./dice.js\";\nimport treemapSlice from \"./slice.js\";\n\nexport var phi = (1 + Math.sqrt(5)) / 2;\n\nexport function squarifyRatio(ratio, parent, x0, y0, x1, y1) {\n var rows = [],\n nodes = parent.children,\n row,\n nodeValue,\n i0 = 0,\n i1 = 0,\n n = nodes.length,\n dx, dy,\n value = parent.value,\n sumValue,\n minValue,\n maxValue,\n newRatio,\n minRatio,\n alpha,\n beta;\n\n while (i0 < n) {\n dx = x1 - x0, dy = y1 - y0;\n\n // Find the next non-empty node.\n do sumValue = nodes[i1++].value; while (!sumValue && i1 < n);\n minValue = maxValue = sumValue;\n alpha = Math.max(dy / dx, dx / dy) / (value * ratio);\n beta = sumValue * sumValue * alpha;\n minRatio = Math.max(maxValue / beta, beta / minValue);\n\n // Keep adding nodes while the aspect ratio maintains or improves.\n for (; i1 < n; ++i1) {\n sumValue += nodeValue = nodes[i1].value;\n if (nodeValue < minValue) minValue = nodeValue;\n if (nodeValue > maxValue) maxValue = nodeValue;\n beta = sumValue * sumValue * alpha;\n newRatio = Math.max(maxValue / beta, beta / minValue);\n if (newRatio > minRatio) { sumValue -= nodeValue; break; }\n minRatio = newRatio;\n }\n\n // Position and record the row orientation.\n rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});\n if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);\n else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);\n value -= sumValue, i0 = i1;\n }\n\n return rows;\n}\n\nexport default (function custom(ratio) {\n\n function squarify(parent, x0, y0, x1, y1) {\n squarifyRatio(ratio, parent, x0, y0, x1, y1);\n }\n\n squarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return squarify;\n})(phi);\n", "import roundNode from \"./round.js\";\nimport squarify from \"./squarify.js\";\nimport {required} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\n\nexport default function() {\n var tile = squarify,\n round = false,\n dx = 1,\n dy = 1,\n paddingStack = [0],\n paddingInner = constantZero,\n paddingTop = constantZero,\n paddingRight = constantZero,\n paddingBottom = constantZero,\n paddingLeft = constantZero;\n\n function treemap(root) {\n root.x0 =\n root.y0 = 0;\n root.x1 = dx;\n root.y1 = dy;\n root.eachBefore(positionNode);\n paddingStack = [0];\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(node) {\n var p = paddingStack[node.depth],\n x0 = node.x0 + p,\n y0 = node.y0 + p,\n x1 = node.x1 - p,\n y1 = node.y1 - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n if (node.children) {\n p = paddingStack[node.depth + 1] = paddingInner(node) / 2;\n x0 += paddingLeft(node) - p;\n y0 += paddingTop(node) - p;\n x1 -= paddingRight(node) - p;\n y1 -= paddingBottom(node) - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n tile(node, x0, y0, x1, y1);\n }\n }\n\n treemap.round = function(x) {\n return arguments.length ? (round = !!x, treemap) : round;\n };\n\n treemap.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];\n };\n\n treemap.tile = function(x) {\n return arguments.length ? (tile = required(x), treemap) : tile;\n };\n\n treemap.padding = function(x) {\n return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();\n };\n\n treemap.paddingInner = function(x) {\n return arguments.length ? (paddingInner = typeof x === \"function\" ? x : constant(+x), treemap) : paddingInner;\n };\n\n treemap.paddingOuter = function(x) {\n return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();\n };\n\n treemap.paddingTop = function(x) {\n return arguments.length ? (paddingTop = typeof x === \"function\" ? x : constant(+x), treemap) : paddingTop;\n };\n\n treemap.paddingRight = function(x) {\n return arguments.length ? (paddingRight = typeof x === \"function\" ? x : constant(+x), treemap) : paddingRight;\n };\n\n treemap.paddingBottom = function(x) {\n return arguments.length ? (paddingBottom = typeof x === \"function\" ? x : constant(+x), treemap) : paddingBottom;\n };\n\n treemap.paddingLeft = function(x) {\n return arguments.length ? (paddingLeft = typeof x === \"function\" ? x : constant(+x), treemap) : paddingLeft;\n };\n\n return treemap;\n}\n", "export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n i, n = nodes.length,\n sum, sums = new Array(n + 1);\n\n for (sums[0] = sum = i = 0; i < n; ++i) {\n sums[i + 1] = sum += nodes[i].value;\n }\n\n partition(0, n, parent.value, x0, y0, x1, y1);\n\n function partition(i, j, value, x0, y0, x1, y1) {\n if (i >= j - 1) {\n var node = nodes[i];\n node.x0 = x0, node.y0 = y0;\n node.x1 = x1, node.y1 = y1;\n return;\n }\n\n var valueOffset = sums[i],\n valueTarget = (value / 2) + valueOffset,\n k = i + 1,\n hi = j - 1;\n\n while (k < hi) {\n var mid = k + hi >>> 1;\n if (sums[mid] < valueTarget) k = mid + 1;\n else hi = mid;\n }\n\n if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k;\n\n var valueLeft = sums[k] - valueOffset,\n valueRight = value - valueLeft;\n\n if ((x1 - x0) > (y1 - y0)) {\n var xk = value ? (x0 * valueRight + x1 * valueLeft) / value : x1;\n partition(i, k, valueLeft, x0, y0, xk, y1);\n partition(k, j, valueRight, xk, y0, x1, y1);\n } else {\n var yk = value ? (y0 * valueRight + y1 * valueLeft) / value : y1;\n partition(i, k, valueLeft, x0, y0, x1, yk);\n partition(k, j, valueRight, x0, yk, x1, y1);\n }\n }\n}\n", "import dice from \"./dice.js\";\nimport slice from \"./slice.js\";\n\nexport default function(parent, x0, y0, x1, y1) {\n (parent.depth & 1 ? slice : dice)(parent, x0, y0, x1, y1);\n}\n", "import treemapDice from \"./dice.js\";\nimport treemapSlice from \"./slice.js\";\nimport {phi, squarifyRatio} from \"./squarify.js\";\n\nexport default (function custom(ratio) {\n\n function resquarify(parent, x0, y0, x1, y1) {\n if ((rows = parent._squarify) && (rows.ratio === ratio)) {\n var rows,\n row,\n nodes,\n i,\n j = -1,\n n,\n m = rows.length,\n value = parent.value;\n\n while (++j < m) {\n row = rows[j], nodes = row.children;\n for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value;\n if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += (y1 - y0) * row.value / value : y1);\n else treemapSlice(row, x0, y0, value ? x0 += (x1 - x0) * row.value / value : x1, y1);\n value -= row.value;\n }\n } else {\n parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);\n rows.ratio = ratio;\n }\n }\n\n resquarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return resquarify;\n})(phi);\n", "import { Marks, textMetrics } from 'vega-scenegraph';\nimport { canvas } from 'vega-canvas';\nimport { rederive, Transform } from 'vega-dataflow';\nimport { inherits, error, array, isFunction } from 'vega-util';\n\n// bit mask for getting first 2 bytes of alpha value\nconst ALPHA_MASK = 0xff000000;\nfunction baseBitmaps($, data) {\n const bitmap = $.bitmap();\n // when there is no base mark but data points are to be avoided\n (data || []).forEach(d => bitmap.set($(d.boundary[0]), $(d.boundary[3])));\n return [bitmap, undefined];\n}\nfunction markBitmaps($, baseMark, avoidMarks, labelInside, isGroupArea) {\n // create canvas\n const width = $.width,\n height = $.height,\n border = labelInside || isGroupArea,\n context = canvas(width, height).getContext('2d'),\n baseMarkContext = canvas(width, height).getContext('2d'),\n strokeContext = border && canvas(width, height).getContext('2d');\n\n // render all marks to be avoided into canvas\n avoidMarks.forEach(items => draw(context, items, false));\n draw(baseMarkContext, baseMark, false);\n if (border) {\n draw(strokeContext, baseMark, true);\n }\n\n // get canvas buffer, create bitmaps\n const buffer = getBuffer(context, width, height),\n baseMarkBuffer = getBuffer(baseMarkContext, width, height),\n strokeBuffer = border && getBuffer(strokeContext, width, height),\n layer1 = $.bitmap(),\n layer2 = border && $.bitmap();\n\n // populate bitmap layers\n let x, y, u, v, index, alpha, strokeAlpha, baseMarkAlpha;\n for (y = 0; y < height; ++y) {\n for (x = 0; x < width; ++x) {\n index = y * width + x;\n alpha = buffer[index] & ALPHA_MASK;\n baseMarkAlpha = baseMarkBuffer[index] & ALPHA_MASK;\n strokeAlpha = border && strokeBuffer[index] & ALPHA_MASK;\n if (alpha || strokeAlpha || baseMarkAlpha) {\n u = $(x);\n v = $(y);\n if (!isGroupArea && (alpha || baseMarkAlpha)) layer1.set(u, v); // update interior bitmap\n if (border && (alpha || strokeAlpha)) layer2.set(u, v); // update border bitmap\n }\n }\n }\n return [layer1, layer2];\n}\nfunction getBuffer(context, width, height) {\n return new Uint32Array(context.getImageData(0, 0, width, height).data.buffer);\n}\nfunction draw(context, items, interior) {\n if (!items.length) return;\n const type = items[0].mark.marktype;\n if (type === 'group') {\n items.forEach(group => {\n group.items.forEach(mark => draw(context, mark.items, interior));\n });\n } else {\n Marks[type].draw(context, {\n items: interior ? items.map(prepare) : items\n });\n }\n}\n\n/**\n * Prepare item before drawing into canvas (setting stroke and opacity)\n * @param {object} source item to be prepared\n * @returns prepared item\n */\nfunction prepare(source) {\n const item = rederive(source, {});\n if (item.stroke && item.strokeOpacity !== 0 || item.fill && item.fillOpacity !== 0) {\n return {\n ...item,\n strokeOpacity: 1,\n stroke: '#000',\n fillOpacity: 0\n };\n }\n return item;\n}\n\nconst DIV = 5,\n // bit shift from x, y index to bit vector array index\n MOD = 31,\n // bit mask for index lookup within a bit vector\n SIZE = 32,\n // individual bit vector size\n RIGHT0 = new Uint32Array(SIZE + 1),\n // left-anchored bit vectors, full -> 0\n RIGHT1 = new Uint32Array(SIZE + 1); // right-anchored bit vectors, 0 -> full\n\nRIGHT1[0] = 0;\nRIGHT0[0] = ~RIGHT1[0];\nfor (let i = 1; i <= SIZE; ++i) {\n RIGHT1[i] = RIGHT1[i - 1] << 1 | 1;\n RIGHT0[i] = ~RIGHT1[i];\n}\nfunction Bitmap (w, h) {\n const array = new Uint32Array(~~((w * h + SIZE) / SIZE));\n function _set(index, mask) {\n array[index] |= mask;\n }\n function _clear(index, mask) {\n array[index] &= mask;\n }\n return {\n array: array,\n get: (x, y) => {\n const index = y * w + x;\n return array[index >>> DIV] & 1 << (index & MOD);\n },\n set: (x, y) => {\n const index = y * w + x;\n _set(index >>> DIV, 1 << (index & MOD));\n },\n clear: (x, y) => {\n const index = y * w + x;\n _clear(index >>> DIV, ~(1 << (index & MOD)));\n },\n getRange: (x, y, x2, y2) => {\n let r = y2,\n start,\n end,\n indexStart,\n indexEnd;\n for (; r >= y; --r) {\n start = r * w + x;\n end = r * w + x2;\n indexStart = start >>> DIV;\n indexEnd = end >>> DIV;\n if (indexStart === indexEnd) {\n if (array[indexStart] & RIGHT0[start & MOD] & RIGHT1[(end & MOD) + 1]) {\n return true;\n }\n } else {\n if (array[indexStart] & RIGHT0[start & MOD]) return true;\n if (array[indexEnd] & RIGHT1[(end & MOD) + 1]) return true;\n for (let i = indexStart + 1; i < indexEnd; ++i) {\n if (array[i]) return true;\n }\n }\n }\n return false;\n },\n setRange: (x, y, x2, y2) => {\n let start, end, indexStart, indexEnd, i;\n for (; y <= y2; ++y) {\n start = y * w + x;\n end = y * w + x2;\n indexStart = start >>> DIV;\n indexEnd = end >>> DIV;\n if (indexStart === indexEnd) {\n _set(indexStart, RIGHT0[start & MOD] & RIGHT1[(end & MOD) + 1]);\n } else {\n _set(indexStart, RIGHT0[start & MOD]);\n _set(indexEnd, RIGHT1[(end & MOD) + 1]);\n for (i = indexStart + 1; i < indexEnd; ++i) _set(i, 0xffffffff);\n }\n }\n },\n clearRange: (x, y, x2, y2) => {\n let start, end, indexStart, indexEnd, i;\n for (; y <= y2; ++y) {\n start = y * w + x;\n end = y * w + x2;\n indexStart = start >>> DIV;\n indexEnd = end >>> DIV;\n if (indexStart === indexEnd) {\n _clear(indexStart, RIGHT1[start & MOD] | RIGHT0[(end & MOD) + 1]);\n } else {\n _clear(indexStart, RIGHT1[start & MOD]);\n _clear(indexEnd, RIGHT0[(end & MOD) + 1]);\n for (i = indexStart + 1; i < indexEnd; ++i) _clear(i, 0);\n }\n }\n },\n outOfBounds: (x, y, x2, y2) => x < 0 || y < 0 || y2 >= h || x2 >= w\n };\n}\n\nfunction scaler (width, height, padding) {\n const ratio = Math.max(1, Math.sqrt(width * height / 1e6)),\n w = ~~((width + 2 * padding + ratio) / ratio),\n h = ~~((height + 2 * padding + ratio) / ratio),\n scale = _ => ~~((_ + padding) / ratio);\n scale.invert = _ => _ * ratio - padding;\n scale.bitmap = () => Bitmap(w, h);\n scale.ratio = ratio;\n scale.padding = padding;\n scale.width = width;\n scale.height = height;\n return scale;\n}\n\nfunction placeAreaLabelNaive ($, bitmaps, avoidBaseMark, markIndex) {\n const width = $.width,\n height = $.height;\n\n // try to place a label within an input area mark\n return function (d) {\n const items = d.datum.datum.items[markIndex].items,\n // area points\n n = items.length,\n // number of points\n textHeight = d.datum.fontSize,\n // label width\n textWidth = textMetrics.width(d.datum, d.datum.text); // label height\n\n let maxAreaWidth = 0,\n x1,\n x2,\n y1,\n y2,\n x,\n y,\n areaWidth;\n\n // for each area sample point\n for (let i = 0; i < n; ++i) {\n x1 = items[i].x;\n y1 = items[i].y;\n x2 = items[i].x2 === undefined ? x1 : items[i].x2;\n y2 = items[i].y2 === undefined ? y1 : items[i].y2;\n x = (x1 + x2) / 2;\n y = (y1 + y2) / 2;\n areaWidth = Math.abs(x2 - x1 + y2 - y1);\n if (areaWidth >= maxAreaWidth) {\n maxAreaWidth = areaWidth;\n d.x = x;\n d.y = y;\n }\n }\n x = textWidth / 2;\n y = textHeight / 2;\n x1 = d.x - x;\n x2 = d.x + x;\n y1 = d.y - y;\n y2 = d.y + y;\n d.align = 'center';\n if (x1 < 0 && x2 <= width) {\n d.align = 'left';\n } else if (0 <= x1 && width < x2) {\n d.align = 'right';\n }\n d.baseline = 'middle';\n if (y1 < 0 && y2 <= height) {\n d.baseline = 'top';\n } else if (0 <= y1 && height < y2) {\n d.baseline = 'bottom';\n }\n return true;\n };\n}\n\nfunction outOfBounds(x, y, textWidth, textHeight, width, height) {\n let r = textWidth / 2;\n return x - r < 0 || x + r > width || y - (r = textHeight / 2) < 0 || y + r > height;\n}\nfunction collision($, x, y, textHeight, textWidth, h, bm0, bm1) {\n const w = textWidth * h / (textHeight * 2),\n x1 = $(x - w),\n x2 = $(x + w),\n y1 = $(y - (h = h / 2)),\n y2 = $(y + h);\n return bm0.outOfBounds(x1, y1, x2, y2) || bm0.getRange(x1, y1, x2, y2) || bm1 && bm1.getRange(x1, y1, x2, y2);\n}\n\nfunction placeAreaLabelReducedSearch ($, bitmaps, avoidBaseMark, markIndex) {\n const width = $.width,\n height = $.height,\n bm0 = bitmaps[0],\n // where labels have been placed\n bm1 = bitmaps[1]; // area outlines\n\n function tryLabel(_x, _y, maxSize, textWidth, textHeight) {\n const x = $.invert(_x),\n y = $.invert(_y);\n let lo = maxSize,\n hi = height,\n mid;\n if (!outOfBounds(x, y, textWidth, textHeight, width, height) && !collision($, x, y, textHeight, textWidth, lo, bm0, bm1) && !collision($, x, y, textHeight, textWidth, textHeight, bm0, null)) {\n // if the label fits at the current sample point,\n // perform binary search to find the largest font size that fits\n while (hi - lo >= 1) {\n mid = (lo + hi) / 2;\n if (collision($, x, y, textHeight, textWidth, mid, bm0, bm1)) {\n hi = mid;\n } else {\n lo = mid;\n }\n }\n // place label if current lower bound exceeds prior max font size\n if (lo > maxSize) {\n return [x, y, lo, true];\n }\n }\n }\n\n // try to place a label within an input area mark\n return function (d) {\n const items = d.datum.datum.items[markIndex].items,\n // area points\n n = items.length,\n // number of points\n textHeight = d.datum.fontSize,\n // label width\n textWidth = textMetrics.width(d.datum, d.datum.text); // label height\n\n let maxSize = avoidBaseMark ? textHeight : 0,\n labelPlaced = false,\n labelPlaced2 = false,\n maxAreaWidth = 0,\n x1,\n x2,\n y1,\n y2,\n x,\n y,\n _x,\n _y,\n _x1,\n _xMid,\n _x2,\n _y1,\n _yMid,\n _y2,\n areaWidth,\n result,\n swapTmp;\n\n // for each area sample point\n for (let i = 0; i < n; ++i) {\n x1 = items[i].x;\n y1 = items[i].y;\n x2 = items[i].x2 === undefined ? x1 : items[i].x2;\n y2 = items[i].y2 === undefined ? y1 : items[i].y2;\n if (x1 > x2) {\n swapTmp = x1;\n x1 = x2;\n x2 = swapTmp;\n }\n if (y1 > y2) {\n swapTmp = y1;\n y1 = y2;\n y2 = swapTmp;\n }\n _x1 = $(x1);\n _x2 = $(x2);\n _xMid = ~~((_x1 + _x2) / 2);\n _y1 = $(y1);\n _y2 = $(y2);\n _yMid = ~~((_y1 + _y2) / 2);\n\n // search along the line from mid point between the 2 border to lower border\n for (_x = _xMid; _x >= _x1; --_x) {\n for (_y = _yMid; _y >= _y1; --_y) {\n result = tryLabel(_x, _y, maxSize, textWidth, textHeight);\n if (result) {\n [d.x, d.y, maxSize, labelPlaced] = result;\n }\n }\n }\n\n // search along the line from mid point between the 2 border to upper border\n for (_x = _xMid; _x <= _x2; ++_x) {\n for (_y = _yMid; _y <= _y2; ++_y) {\n result = tryLabel(_x, _y, maxSize, textWidth, textHeight);\n if (result) {\n [d.x, d.y, maxSize, labelPlaced] = result;\n }\n }\n }\n\n // place label at slice center if not placed through other means\n // and if we're not avoiding overlap with other areas\n if (!labelPlaced && !avoidBaseMark) {\n // one span is zero, hence we can add\n areaWidth = Math.abs(x2 - x1 + y2 - y1);\n x = (x1 + x2) / 2;\n y = (y1 + y2) / 2;\n\n // place label if it fits and improves the max area width\n if (areaWidth >= maxAreaWidth && !outOfBounds(x, y, textWidth, textHeight, width, height) && !collision($, x, y, textHeight, textWidth, textHeight, bm0, null)) {\n maxAreaWidth = areaWidth;\n d.x = x;\n d.y = y;\n labelPlaced2 = true;\n }\n }\n }\n\n // record current label placement information, update label bitmap\n if (labelPlaced || labelPlaced2) {\n x = textWidth / 2;\n y = textHeight / 2;\n bm0.setRange($(d.x - x), $(d.y - y), $(d.x + x), $(d.y + y));\n d.align = 'center';\n d.baseline = 'middle';\n return true;\n } else {\n return false;\n }\n };\n}\n\n// pixel direction offsets for flood fill search\nconst X_DIR = [-1, -1, 1, 1];\nconst Y_DIR = [-1, 1, -1, 1];\nfunction placeAreaLabelFloodFill ($, bitmaps, avoidBaseMark, markIndex) {\n const width = $.width,\n height = $.height,\n bm0 = bitmaps[0],\n // where labels have been placed\n bm1 = bitmaps[1],\n // area outlines\n bm2 = $.bitmap(); // flood-fill visitations\n\n // try to place a label within an input area mark\n return function (d) {\n const items = d.datum.datum.items[markIndex].items,\n // area points\n n = items.length,\n // number of points\n textHeight = d.datum.fontSize,\n // label width\n textWidth = textMetrics.width(d.datum, d.datum.text),\n // label height\n stack = []; // flood fill stack\n\n let maxSize = avoidBaseMark ? textHeight : 0,\n labelPlaced = false,\n labelPlaced2 = false,\n maxAreaWidth = 0,\n x1,\n x2,\n y1,\n y2,\n x,\n y,\n _x,\n _y,\n lo,\n hi,\n mid,\n areaWidth;\n\n // for each area sample point\n for (let i = 0; i < n; ++i) {\n x1 = items[i].x;\n y1 = items[i].y;\n x2 = items[i].x2 === undefined ? x1 : items[i].x2;\n y2 = items[i].y2 === undefined ? y1 : items[i].y2;\n\n // add scaled center point to stack\n stack.push([$((x1 + x2) / 2), $((y1 + y2) / 2)]);\n\n // perform flood fill, visit points\n while (stack.length) {\n [_x, _y] = stack.pop();\n\n // exit if point already marked\n if (bm0.get(_x, _y) || bm1.get(_x, _y) || bm2.get(_x, _y)) continue;\n\n // mark point in flood fill bitmap\n // add search points for all (in bound) directions\n bm2.set(_x, _y);\n for (let j = 0; j < 4; ++j) {\n x = _x + X_DIR[j];\n y = _y + Y_DIR[j];\n if (!bm2.outOfBounds(x, y, x, y)) stack.push([x, y]);\n }\n\n // unscale point back to x, y space\n x = $.invert(_x);\n y = $.invert(_y);\n lo = maxSize;\n hi = height; // TODO: make this bound smaller\n\n if (!outOfBounds(x, y, textWidth, textHeight, width, height) && !collision($, x, y, textHeight, textWidth, lo, bm0, bm1) && !collision($, x, y, textHeight, textWidth, textHeight, bm0, null)) {\n // if the label fits at the current sample point,\n // perform binary search to find the largest font size that fits\n while (hi - lo >= 1) {\n mid = (lo + hi) / 2;\n if (collision($, x, y, textHeight, textWidth, mid, bm0, bm1)) {\n hi = mid;\n } else {\n lo = mid;\n }\n }\n // place label if current lower bound exceeds prior max font size\n if (lo > maxSize) {\n d.x = x;\n d.y = y;\n maxSize = lo;\n labelPlaced = true;\n }\n }\n }\n\n // place label at slice center if not placed through other means\n // and if we're not avoiding overlap with other areas\n if (!labelPlaced && !avoidBaseMark) {\n // one span is zero, hence we can add\n areaWidth = Math.abs(x2 - x1 + y2 - y1);\n x = (x1 + x2) / 2;\n y = (y1 + y2) / 2;\n\n // place label if it fits and improves the max area width\n if (areaWidth >= maxAreaWidth && !outOfBounds(x, y, textWidth, textHeight, width, height) && !collision($, x, y, textHeight, textWidth, textHeight, bm0, null)) {\n maxAreaWidth = areaWidth;\n d.x = x;\n d.y = y;\n labelPlaced2 = true;\n }\n }\n }\n\n // record current label placement information, update label bitmap\n if (labelPlaced || labelPlaced2) {\n x = textWidth / 2;\n y = textHeight / 2;\n bm0.setRange($(d.x - x), $(d.y - y), $(d.x + x), $(d.y + y));\n d.align = 'center';\n d.baseline = 'middle';\n return true;\n } else {\n return false;\n }\n };\n}\n\nconst Aligns = ['right', 'center', 'left'],\n Baselines = ['bottom', 'middle', 'top'];\nfunction placeMarkLabel ($, bitmaps, anchors, offsets) {\n const width = $.width,\n height = $.height,\n bm0 = bitmaps[0],\n bm1 = bitmaps[1],\n n = offsets.length;\n return function (d) {\n const boundary = d.boundary,\n textHeight = d.datum.fontSize;\n\n // can not be placed if the mark is not visible in the graph bound\n if (boundary[2] < 0 || boundary[5] < 0 || boundary[0] > width || boundary[3] > height) {\n return false;\n }\n let textWidth = d.textWidth ?? 0,\n dx,\n dy,\n isInside,\n sizeFactor,\n insideFactor,\n x1,\n x2,\n y1,\n y2,\n xc,\n yc,\n _x1,\n _x2,\n _y1,\n _y2;\n\n // for each anchor and offset\n for (let i = 0; i < n; ++i) {\n dx = (anchors[i] & 0x3) - 1;\n dy = (anchors[i] >>> 0x2 & 0x3) - 1;\n isInside = dx === 0 && dy === 0 || offsets[i] < 0;\n sizeFactor = dx && dy ? Math.SQRT1_2 : 1;\n insideFactor = offsets[i] < 0 ? -1 : 1;\n x1 = boundary[1 + dx] + offsets[i] * dx * sizeFactor;\n yc = boundary[4 + dy] + insideFactor * textHeight * dy / 2 + offsets[i] * dy * sizeFactor;\n y1 = yc - textHeight / 2;\n y2 = yc + textHeight / 2;\n _x1 = $(x1);\n _y1 = $(y1);\n _y2 = $(y2);\n if (!textWidth) {\n // to avoid finding width of text label,\n if (!test(_x1, _x1, _y1, _y2, bm0, bm1, x1, x1, y1, y2, boundary, isInside)) {\n // skip this anchor/offset option if we fail to place a label with 1px width\n continue;\n } else {\n // Otherwise, find the label width\n textWidth = textMetrics.width(d.datum, d.datum.text);\n }\n }\n xc = x1 + insideFactor * textWidth * dx / 2;\n x1 = xc - textWidth / 2;\n x2 = xc + textWidth / 2;\n _x1 = $(x1);\n _x2 = $(x2);\n if (test(_x1, _x2, _y1, _y2, bm0, bm1, x1, x2, y1, y2, boundary, isInside)) {\n // place label if the position is placeable\n d.x = !dx ? xc : dx * insideFactor < 0 ? x2 : x1;\n d.y = !dy ? yc : dy * insideFactor < 0 ? y2 : y1;\n d.align = Aligns[dx * insideFactor + 1];\n d.baseline = Baselines[dy * insideFactor + 1];\n bm0.setRange(_x1, _y1, _x2, _y2);\n return true;\n }\n }\n return false;\n };\n}\n\n// Test if a label with the given dimensions can be added without overlap\nfunction test(_x1, _x2, _y1, _y2, bm0, bm1, x1, x2, y1, y2, boundary, isInside) {\n return !(bm0.outOfBounds(_x1, _y1, _x2, _y2) || (isInside && bm1 || bm0).getRange(_x1, _y1, _x2, _y2));\n}\n\n// 8-bit representation of anchors\nconst TOP = 0x0,\n MIDDLE = 0x4,\n BOTTOM = 0x8,\n LEFT = 0x0,\n CENTER = 0x1,\n RIGHT = 0x2;\n\n// Mapping from text anchor to number representation\nconst anchorCode = {\n 'top-left': TOP + LEFT,\n 'top': TOP + CENTER,\n 'top-right': TOP + RIGHT,\n 'left': MIDDLE + LEFT,\n 'middle': MIDDLE + CENTER,\n 'right': MIDDLE + RIGHT,\n 'bottom-left': BOTTOM + LEFT,\n 'bottom': BOTTOM + CENTER,\n 'bottom-right': BOTTOM + RIGHT\n};\nconst placeAreaLabel = {\n 'naive': placeAreaLabelNaive,\n 'reduced-search': placeAreaLabelReducedSearch,\n 'floodfill': placeAreaLabelFloodFill\n};\nfunction labelLayout (texts, size, compare, offset, anchor, avoidMarks, avoidBaseMark, lineAnchor, markIndex, padding, method) {\n // early exit for empty data\n if (!texts.length) return texts;\n const positions = Math.max(offset.length, anchor.length),\n offsets = getOffsets(offset, positions),\n anchors = getAnchors(anchor, positions),\n marktype = markType(texts[0].datum),\n grouptype = marktype === 'group' && texts[0].datum.items[markIndex].marktype,\n isGroupArea = grouptype === 'area',\n boundary = markBoundary(marktype, grouptype, lineAnchor, markIndex),\n infPadding = padding === null || padding === Infinity,\n isNaiveGroupArea = isGroupArea && method === 'naive';\n let maxTextWidth = -1,\n maxTextHeight = -1;\n\n // prepare text mark data for placing\n const data = texts.map(d => {\n const textWidth = infPadding ? textMetrics.width(d, d.text) : undefined;\n maxTextWidth = Math.max(maxTextWidth, textWidth);\n maxTextHeight = Math.max(maxTextHeight, d.fontSize);\n return {\n datum: d,\n opacity: 0,\n x: undefined,\n y: undefined,\n align: undefined,\n baseline: undefined,\n boundary: boundary(d),\n textWidth\n };\n });\n padding = padding === null || padding === Infinity ? Math.max(maxTextWidth, maxTextHeight) + Math.max(...offset) : padding;\n const $ = scaler(size[0], size[1], padding);\n let bitmaps;\n if (!isNaiveGroupArea) {\n // sort labels in priority order, if comparator is provided\n if (compare) {\n data.sort((a, b) => compare(a.datum, b.datum));\n }\n\n // flag indicating if label can be placed inside its base mark\n let labelInside = false;\n for (let i = 0; i < anchors.length && !labelInside; ++i) {\n // label inside if anchor is at center\n // label inside if offset to be inside the mark bound\n labelInside = anchors[i] === 0x5 || offsets[i] < 0;\n }\n\n // extract data information from base mark when base mark is to be avoided\n // base mark is implicitly avoided if it is a group area\n const baseMark = (marktype && avoidBaseMark || isGroupArea) && texts.map(d => d.datum);\n\n // generate bitmaps for layout calculation\n bitmaps = avoidMarks.length || baseMark ? markBitmaps($, baseMark || [], avoidMarks, labelInside, isGroupArea) : baseBitmaps($, avoidBaseMark && data);\n }\n\n // generate label placement function\n const place = isGroupArea ? placeAreaLabel[method]($, bitmaps, avoidBaseMark, markIndex) : placeMarkLabel($, bitmaps, anchors, offsets);\n\n // place all labels\n data.forEach(d => d.opacity = +place(d));\n return data;\n}\nfunction getOffsets(_, count) {\n const offsets = new Float64Array(count),\n n = _.length;\n for (let i = 0; i < n; ++i) offsets[i] = _[i] || 0;\n for (let i = n; i < count; ++i) offsets[i] = offsets[n - 1];\n return offsets;\n}\nfunction getAnchors(_, count) {\n const anchors = new Int8Array(count),\n n = _.length;\n for (let i = 0; i < n; ++i) anchors[i] |= anchorCode[_[i]];\n for (let i = n; i < count; ++i) anchors[i] = anchors[n - 1];\n return anchors;\n}\nfunction markType(item) {\n return item && item.mark && item.mark.marktype;\n}\n\n/**\n * Factory function for function for getting base mark boundary, depending\n * on mark and group type. When mark type is undefined, line or area: boundary\n * is the coordinate of each data point. When base mark is grouped line,\n * boundary is either at the start or end of the line depending on the\n * value of lineAnchor. Otherwise, use bounds of base mark.\n */\nfunction markBoundary(marktype, grouptype, lineAnchor, markIndex) {\n const xy = d => [d.x, d.x, d.x, d.y, d.y, d.y];\n if (!marktype) {\n return xy; // no reactive geometry\n } else if (marktype === 'line' || marktype === 'area') {\n return d => xy(d.datum);\n } else if (grouptype === 'line') {\n return d => {\n const items = d.datum.items[markIndex].items;\n return xy(items.length ? items[lineAnchor === 'start' ? 0 : items.length - 1] : {\n x: NaN,\n y: NaN\n });\n };\n } else {\n return d => {\n const b = d.datum.bounds;\n return [b.x1, (b.x1 + b.x2) / 2, b.x2, b.y1, (b.y1 + b.y2) / 2, b.y2];\n };\n }\n}\n\nconst Output = ['x', 'y', 'opacity', 'align', 'baseline'];\nconst Anchors = ['top-left', 'left', 'bottom-left', 'top', 'bottom', 'top-right', 'right', 'bottom-right'];\n\n/**\n * Compute text label layout to annotate marks.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array<number>} params.size - The size of the layout, provided as a [width, height] array.\n * @param {function(*,*): number} [params.sort] - An optional\n * comparator function for sorting label data in priority order.\n * @param {Array<string>} [params.anchor] - Label anchor points relative to the base mark bounding box.\n * The available options are 'top-left', 'left', 'bottom-left', 'top',\n * 'bottom', 'top-right', 'right', 'bottom-right', 'middle'.\n * @param {Array<number>} [params.offset] - Label offsets (in pixels) from the base mark bounding box.\n * This parameter is parallel to the list of anchor points.\n * @param {number | null} [params.padding=0] - The amount (in pixels) that a label may exceed the layout size.\n * If this parameter is null, a label may exceed the layout size without any boundary.\n * @param {string} [params.lineAnchor='end'] - For group line mark labels only, indicates the anchor\n * position for labels. One of 'start' or 'end'.\n * @param {string} [params.markIndex=0] - For group mark labels only, an index indicating\n * which mark within the group should be labeled.\n * @param {Array<number>} [params.avoidMarks] - A list of additional mark names for which the label\n * layout should avoid overlap.\n * @param {boolean} [params.avoidBaseMark=true] - Boolean flag indicating if labels should avoid\n * overlap with the underlying base mark being labeled.\n * @param {string} [params.method='naive'] - For area make labels only, a method for\n * place labels. One of 'naive', 'reduced-search', or 'floodfill'.\n * @param {Array<string>} [params.as] - The output fields written by the transform.\n * The default is ['x', 'y', 'opacity', 'align', 'baseline'].\n */\nfunction Label(params) {\n Transform.call(this, null, params);\n}\nLabel.Definition = {\n type: 'Label',\n metadata: {\n modifies: true\n },\n params: [{\n name: 'size',\n type: 'number',\n array: true,\n length: 2,\n required: true\n }, {\n name: 'sort',\n type: 'compare'\n }, {\n name: 'anchor',\n type: 'string',\n array: true,\n default: Anchors\n }, {\n name: 'offset',\n type: 'number',\n array: true,\n default: [1]\n }, {\n name: 'padding',\n type: 'number',\n default: 0,\n null: true\n }, {\n name: 'lineAnchor',\n type: 'string',\n values: ['start', 'end'],\n default: 'end'\n }, {\n name: 'markIndex',\n type: 'number',\n default: 0\n }, {\n name: 'avoidBaseMark',\n type: 'boolean',\n default: true\n }, {\n name: 'avoidMarks',\n type: 'data',\n array: true\n }, {\n name: 'method',\n type: 'string',\n default: 'naive'\n }, {\n name: 'as',\n type: 'string',\n array: true,\n length: Output.length,\n default: Output\n }]\n};\ninherits(Label, Transform, {\n transform(_, pulse) {\n function modp(param) {\n const p = _[param];\n return isFunction(p) && pulse.modified(p.fields);\n }\n const mod = _.modified();\n if (!(mod || pulse.changed(pulse.ADD_REM) || modp('sort'))) return;\n if (!_.size || _.size.length !== 2) {\n error('Size parameter should be specified as a [width, height] array.');\n }\n const as = _.as || Output;\n\n // run label layout\n labelLayout(pulse.materialize(pulse.SOURCE).source || [], _.size, _.sort, array(_.offset == null ? 1 : _.offset), array(_.anchor || Anchors), _.avoidMarks || [], _.avoidBaseMark !== false, _.lineAnchor || 'end', _.markIndex || 0, _.padding === undefined ? 0 : _.padding, _.method || 'naive').forEach(l => {\n // write layout results to data stream\n const t = l.datum;\n t[as[0]] = l.x;\n t[as[1]] = l.y;\n t[as[2]] = l.opacity;\n t[as[3]] = l.align;\n t[as[4]] = l.baseline;\n });\n return pulse.reflow(mod).modifies(as);\n }\n});\n\nexport { Label as label };\n", "import { regressionLoess, sampleCurve, regressionConstant, regressionLinear, regressionLog, regressionExp, regressionPow, regressionQuad, regressionPoly } from 'vega-statistics';\nimport { Transform, ingest } from 'vega-dataflow';\nimport { inherits, accessorName, hasOwnProperty, error, extent } from 'vega-util';\n\nfunction partition (data, groupby) {\n var groups = [],\n get = function (f) {\n return f(t);\n },\n map,\n i,\n n,\n t,\n k,\n g;\n\n // partition data points into stack groups\n if (groupby == null) {\n groups.push(data);\n } else {\n for (map = {}, i = 0, n = data.length; i < n; ++i) {\n t = data[i];\n k = groupby.map(get);\n g = map[k];\n if (!g) {\n map[k] = g = [];\n g.dims = k;\n groups.push(g);\n }\n g.push(t);\n }\n }\n return groups;\n}\n\n/**\n * Compute locally-weighted regression fits for one or more data groups.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.x - An accessor for the predictor data field.\n * @param {function(object): *} params.y - An accessor for the predicted data field.\n * @param {Array<function(object): *>} [params.groupby] - An array of accessors to groupby.\n * @param {number} [params.bandwidth=0.3] - The loess bandwidth.\n */\nfunction Loess(params) {\n Transform.call(this, null, params);\n}\nLoess.Definition = {\n 'type': 'Loess',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'x',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'y',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'bandwidth',\n 'type': 'number',\n 'default': 0.3\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true\n }]\n};\ninherits(Loess, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n if (!this.value || pulse.changed() || _.modified()) {\n const source = pulse.materialize(pulse.SOURCE).source,\n groups = partition(source, _.groupby),\n names = (_.groupby || []).map(accessorName),\n m = names.length,\n as = _.as || [accessorName(_.x), accessorName(_.y)],\n values = [];\n groups.forEach(g => {\n regressionLoess(g, _.x, _.y, _.bandwidth || 0.3).forEach(p => {\n const t = {};\n for (let i = 0; i < m; ++i) {\n t[names[i]] = g.dims[i];\n }\n t[as[0]] = p[0];\n t[as[1]] = p[1];\n values.push(ingest(t));\n });\n });\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n }\n return out;\n }\n});\n\nconst Methods = {\n constant: regressionConstant,\n linear: regressionLinear,\n log: regressionLog,\n exp: regressionExp,\n pow: regressionPow,\n quad: regressionQuad,\n poly: regressionPoly\n};\nconst degreesOfFreedom = (method, order) => method === 'poly' ? order : method === 'quad' ? 2 : 1;\n\n/**\n * Compute regression fits for one or more data groups.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.x - An accessor for the predictor data field.\n * @param {function(object): *} params.y - An accessor for the predicted data field.\n * @param {string} [params.method='linear'] - The regression method to apply.\n * @param {Array<function(object): *>} [params.groupby] - An array of accessors to groupby.\n * @param {Array<number>} [params.extent] - The domain extent over which to plot the regression line.\n * @param {number} [params.order=3] - The polynomial order. Only applies to the 'poly' method.\n */\nfunction Regression(params) {\n Transform.call(this, null, params);\n}\nRegression.Definition = {\n 'type': 'Regression',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'x',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'y',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'method',\n 'type': 'string',\n 'default': 'linear',\n 'values': Object.keys(Methods)\n }, {\n 'name': 'order',\n 'type': 'number',\n 'default': 3\n }, {\n 'name': 'extent',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'params',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true\n }]\n};\ninherits(Regression, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n if (!this.value || pulse.changed() || _.modified()) {\n const source = pulse.materialize(pulse.SOURCE).source,\n groups = partition(source, _.groupby),\n names = (_.groupby || []).map(accessorName),\n method = _.method || 'linear',\n order = _.order == null ? 3 : _.order,\n dof = degreesOfFreedom(method, order),\n as = _.as || [accessorName(_.x), accessorName(_.y)],\n fit = Methods[method],\n values = [];\n let domain = _.extent;\n if (!hasOwnProperty(Methods, method)) {\n error('Invalid regression method: ' + method);\n }\n if (domain != null) {\n if (method === 'log' && domain[0] <= 0) {\n pulse.dataflow.warn('Ignoring extent with values <= 0 for log regression.');\n domain = null;\n }\n }\n groups.forEach(g => {\n const n = g.length;\n if (n <= dof) {\n pulse.dataflow.warn('Skipping regression with more parameters than data points.');\n return;\n }\n const model = fit(g, _.x, _.y, order);\n if (_.params) {\n // if parameter vectors requested return those\n values.push(ingest({\n keys: g.dims,\n coef: model.coef,\n rSquared: model.rSquared\n }));\n return;\n }\n const dom = domain || extent(g, _.x),\n add = p => {\n const t = {};\n for (let i = 0; i < names.length; ++i) {\n t[names[i]] = g.dims[i];\n }\n t[as[0]] = p[0];\n t[as[1]] = p[1];\n values.push(ingest(t));\n };\n if (method === 'linear' || method === 'constant') {\n // for linear or constant regression we only need the end points\n dom.forEach(x => add([x, model.predict(x)]));\n } else {\n // otherwise return trend line sample points\n sampleCurve(model.predict, dom, 25, 200).forEach(add);\n }\n });\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n }\n return out;\n }\n});\n\nexport { Loess as loess, Regression as regression };\n", "import { Transform } from 'vega-dataflow';\nimport { inherits } from 'vega-util';\nimport { Delaunay } from 'd3-delaunay';\n\nfunction Voronoi(params) {\n Transform.call(this, null, params);\n}\nVoronoi.Definition = {\n 'type': 'Voronoi',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'x',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'y',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'extent',\n 'type': 'array',\n 'array': true,\n 'length': 2,\n 'default': [[-1e5, -1e5], [1e5, 1e5]],\n 'content': {\n 'type': 'number',\n 'array': true,\n 'length': 2\n }\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'path'\n }]\n};\nconst defaultExtent = [-1e5, -1e5, 1e5, 1e5];\ninherits(Voronoi, Transform, {\n transform(_, pulse) {\n const as = _.as || 'path',\n data = pulse.source;\n\n // nothing to do if no data\n if (!data || !data.length) return pulse;\n\n // configure and construct voronoi diagram\n let s = _.size;\n s = s ? [0, 0, s[0], s[1]] : (s = _.extent) ? [s[0][0], s[0][1], s[1][0], s[1][1]] : defaultExtent;\n const voronoi = this.value = Delaunay.from(data, _.x, _.y).voronoi(s);\n\n // map polygons to paths\n for (let i = 0, n = data.length; i < n; ++i) {\n const polygon = voronoi.cellPolygon(i);\n data[i][as] = polygon && !isPoint(polygon) ? toPathString(polygon) : null;\n }\n return pulse.reflow(_.modified()).modifies(as);\n }\n});\n\n// suppress duplicated end point vertices\nfunction toPathString(p) {\n const x = p[0][0],\n y = p[0][1];\n let n = p.length - 1;\n for (; p[n][0] === x && p[n][1] === y; --n);\n return 'M' + p.slice(0, n + 1).join('L') + 'Z';\n}\nfunction isPoint(p) {\n return p.length === 2 && p[0][0] === p[1][0] && p[0][1] === p[1][1];\n}\n\nexport { Voronoi as voronoi };\n", "export const epsilon = 1.1102230246251565e-16;\nexport const splitter = 134217729;\nexport const resulterrbound = (3 + 8 * epsilon) * epsilon;\n\n// fast_expansion_sum_zeroelim routine from oritinal code\nexport function sum(elen, e, flen, f, h) {\n let Q, Qnew, hh, bvirt;\n let enow = e[0];\n let fnow = f[0];\n let eindex = 0;\n let findex = 0;\n if ((fnow > enow) === (fnow > -enow)) {\n Q = enow;\n enow = e[++eindex];\n } else {\n Q = fnow;\n fnow = f[++findex];\n }\n let hindex = 0;\n if (eindex < elen && findex < flen) {\n if ((fnow > enow) === (fnow > -enow)) {\n Qnew = enow + Q;\n hh = Q - (Qnew - enow);\n enow = e[++eindex];\n } else {\n Qnew = fnow + Q;\n hh = Q - (Qnew - fnow);\n fnow = f[++findex];\n }\n Q = Qnew;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n while (eindex < elen && findex < flen) {\n if ((fnow > enow) === (fnow > -enow)) {\n Qnew = Q + enow;\n bvirt = Qnew - Q;\n hh = Q - (Qnew - bvirt) + (enow - bvirt);\n enow = e[++eindex];\n } else {\n Qnew = Q + fnow;\n bvirt = Qnew - Q;\n hh = Q - (Qnew - bvirt) + (fnow - bvirt);\n fnow = f[++findex];\n }\n Q = Qnew;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n }\n }\n while (eindex < elen) {\n Qnew = Q + enow;\n bvirt = Qnew - Q;\n hh = Q - (Qnew - bvirt) + (enow - bvirt);\n enow = e[++eindex];\n Q = Qnew;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n }\n while (findex < flen) {\n Qnew = Q + fnow;\n bvirt = Qnew - Q;\n hh = Q - (Qnew - bvirt) + (fnow - bvirt);\n fnow = f[++findex];\n Q = Qnew;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n }\n if (Q !== 0 || hindex === 0) {\n h[hindex++] = Q;\n }\n return hindex;\n}\n\nexport function sum_three(alen, a, blen, b, clen, c, tmp, out) {\n return sum(sum(alen, a, blen, b, tmp), tmp, clen, c, out);\n}\n\n// scale_expansion_zeroelim routine from oritinal code\nexport function scale(elen, e, b, h) {\n let Q, sum, hh, product1, product0;\n let bvirt, c, ahi, alo, bhi, blo;\n\n c = splitter * b;\n bhi = c - (c - b);\n blo = b - bhi;\n let enow = e[0];\n Q = enow * b;\n c = splitter * enow;\n ahi = c - (c - enow);\n alo = enow - ahi;\n hh = alo * blo - (Q - ahi * bhi - alo * bhi - ahi * blo);\n let hindex = 0;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n for (let i = 1; i < elen; i++) {\n enow = e[i];\n product1 = enow * b;\n c = splitter * enow;\n ahi = c - (c - enow);\n alo = enow - ahi;\n product0 = alo * blo - (product1 - ahi * bhi - alo * bhi - ahi * blo);\n sum = Q + product0;\n bvirt = sum - Q;\n hh = Q - (sum - bvirt) + (product0 - bvirt);\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n Q = product1 + sum;\n hh = sum - (Q - product1);\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n }\n if (Q !== 0 || hindex === 0) {\n h[hindex++] = Q;\n }\n return hindex;\n}\n\nexport function negate(elen, e) {\n for (let i = 0; i < elen; i++) e[i] = -e[i];\n return elen;\n}\n\nexport function estimate(elen, e) {\n let Q = e[0];\n for (let i = 1; i < elen; i++) Q += e[i];\n return Q;\n}\n\nexport function vec(n) {\n return new Float64Array(n);\n}\n", "import {epsilon, splitter, resulterrbound, estimate, vec, sum} from './util.js';\n\nconst ccwerrboundA = (3 + 16 * epsilon) * epsilon;\nconst ccwerrboundB = (2 + 12 * epsilon) * epsilon;\nconst ccwerrboundC = (9 + 64 * epsilon) * epsilon * epsilon;\n\nconst B = vec(4);\nconst C1 = vec(8);\nconst C2 = vec(12);\nconst D = vec(16);\nconst u = vec(4);\n\nfunction orient2dadapt(ax, ay, bx, by, cx, cy, detsum) {\n let acxtail, acytail, bcxtail, bcytail;\n let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3;\n\n const acx = ax - cx;\n const bcx = bx - cx;\n const acy = ay - cy;\n const bcy = by - cy;\n\n s1 = acx * bcy;\n c = splitter * acx;\n ahi = c - (c - acx);\n alo = acx - ahi;\n c = splitter * bcy;\n bhi = c - (c - bcy);\n blo = bcy - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = acy * bcx;\n c = splitter * acy;\n ahi = c - (c - acy);\n alo = acy - ahi;\n c = splitter * bcx;\n bhi = c - (c - bcx);\n blo = bcx - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n B[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n B[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n B[2] = _j - (u3 - bvirt) + (_i - bvirt);\n B[3] = u3;\n\n let det = estimate(4, B);\n let errbound = ccwerrboundB * detsum;\n if (det >= errbound || -det >= errbound) {\n return det;\n }\n\n bvirt = ax - acx;\n acxtail = ax - (acx + bvirt) + (bvirt - cx);\n bvirt = bx - bcx;\n bcxtail = bx - (bcx + bvirt) + (bvirt - cx);\n bvirt = ay - acy;\n acytail = ay - (acy + bvirt) + (bvirt - cy);\n bvirt = by - bcy;\n bcytail = by - (bcy + bvirt) + (bvirt - cy);\n\n if (acxtail === 0 && acytail === 0 && bcxtail === 0 && bcytail === 0) {\n return det;\n }\n\n errbound = ccwerrboundC * detsum + resulterrbound * Math.abs(det);\n det += (acx * bcytail + bcy * acxtail) - (acy * bcxtail + bcx * acytail);\n if (det >= errbound || -det >= errbound) return det;\n\n s1 = acxtail * bcy;\n c = splitter * acxtail;\n ahi = c - (c - acxtail);\n alo = acxtail - ahi;\n c = splitter * bcy;\n bhi = c - (c - bcy);\n blo = bcy - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = acytail * bcx;\n c = splitter * acytail;\n ahi = c - (c - acytail);\n alo = acytail - ahi;\n c = splitter * bcx;\n bhi = c - (c - bcx);\n blo = bcx - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n u[3] = u3;\n const C1len = sum(4, B, 4, u, C1);\n\n s1 = acx * bcytail;\n c = splitter * acx;\n ahi = c - (c - acx);\n alo = acx - ahi;\n c = splitter * bcytail;\n bhi = c - (c - bcytail);\n blo = bcytail - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = acy * bcxtail;\n c = splitter * acy;\n ahi = c - (c - acy);\n alo = acy - ahi;\n c = splitter * bcxtail;\n bhi = c - (c - bcxtail);\n blo = bcxtail - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n u[3] = u3;\n const C2len = sum(C1len, C1, 4, u, C2);\n\n s1 = acxtail * bcytail;\n c = splitter * acxtail;\n ahi = c - (c - acxtail);\n alo = acxtail - ahi;\n c = splitter * bcytail;\n bhi = c - (c - bcytail);\n blo = bcytail - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = acytail * bcxtail;\n c = splitter * acytail;\n ahi = c - (c - acytail);\n alo = acytail - ahi;\n c = splitter * bcxtail;\n bhi = c - (c - bcxtail);\n blo = bcxtail - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n u[3] = u3;\n const Dlen = sum(C2len, C2, 4, u, D);\n\n return D[Dlen - 1];\n}\n\nexport function orient2d(ax, ay, bx, by, cx, cy) {\n const detleft = (ay - cy) * (bx - cx);\n const detright = (ax - cx) * (by - cy);\n const det = detleft - detright;\n\n const detsum = Math.abs(detleft + detright);\n if (Math.abs(det) >= ccwerrboundA * detsum) return det;\n\n return -orient2dadapt(ax, ay, bx, by, cx, cy, detsum);\n}\n\nexport function orient2dfast(ax, ay, bx, by, cx, cy) {\n return (ay - cy) * (bx - cx) - (ax - cx) * (by - cy);\n}\n", "import {epsilon, splitter, resulterrbound, estimate, vec, sum, scale} from './util.js';\n\nconst o3derrboundA = (7 + 56 * epsilon) * epsilon;\nconst o3derrboundB = (3 + 28 * epsilon) * epsilon;\nconst o3derrboundC = (26 + 288 * epsilon) * epsilon * epsilon;\n\nconst bc = vec(4);\nconst ca = vec(4);\nconst ab = vec(4);\nconst at_b = vec(4);\nconst at_c = vec(4);\nconst bt_c = vec(4);\nconst bt_a = vec(4);\nconst ct_a = vec(4);\nconst ct_b = vec(4);\nconst bct = vec(8);\nconst cat = vec(8);\nconst abt = vec(8);\nconst u = vec(4);\n\nconst _8 = vec(8);\nconst _8b = vec(8);\nconst _16 = vec(8);\nconst _12 = vec(12);\n\nlet fin = vec(192);\nlet fin2 = vec(192);\n\nfunction finadd(finlen, alen, a) {\n finlen = sum(finlen, fin, alen, a, fin2);\n const tmp = fin; fin = fin2; fin2 = tmp;\n return finlen;\n}\n\nfunction tailinit(xtail, ytail, ax, ay, bx, by, a, b) {\n let bvirt, c, ahi, alo, bhi, blo, _i, _j, _k, _0, s1, s0, t1, t0, u3, negate;\n if (xtail === 0) {\n if (ytail === 0) {\n a[0] = 0;\n b[0] = 0;\n return 1;\n } else {\n negate = -ytail;\n s1 = negate * ax;\n c = splitter * negate;\n ahi = c - (c - negate);\n alo = negate - ahi;\n c = splitter * ax;\n bhi = c - (c - ax);\n blo = ax - bhi;\n a[0] = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n a[1] = s1;\n s1 = ytail * bx;\n c = splitter * ytail;\n ahi = c - (c - ytail);\n alo = ytail - ahi;\n c = splitter * bx;\n bhi = c - (c - bx);\n blo = bx - bhi;\n b[0] = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n b[1] = s1;\n return 2;\n }\n } else {\n if (ytail === 0) {\n s1 = xtail * ay;\n c = splitter * xtail;\n ahi = c - (c - xtail);\n alo = xtail - ahi;\n c = splitter * ay;\n bhi = c - (c - ay);\n blo = ay - bhi;\n a[0] = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n a[1] = s1;\n negate = -xtail;\n s1 = negate * by;\n c = splitter * negate;\n ahi = c - (c - negate);\n alo = negate - ahi;\n c = splitter * by;\n bhi = c - (c - by);\n blo = by - bhi;\n b[0] = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n b[1] = s1;\n return 2;\n } else {\n s1 = xtail * ay;\n c = splitter * xtail;\n ahi = c - (c - xtail);\n alo = xtail - ahi;\n c = splitter * ay;\n bhi = c - (c - ay);\n blo = ay - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = ytail * ax;\n c = splitter * ytail;\n ahi = c - (c - ytail);\n alo = ytail - ahi;\n c = splitter * ax;\n bhi = c - (c - ax);\n blo = ax - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n a[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n a[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n a[2] = _j - (u3 - bvirt) + (_i - bvirt);\n a[3] = u3;\n s1 = ytail * bx;\n c = splitter * ytail;\n ahi = c - (c - ytail);\n alo = ytail - ahi;\n c = splitter * bx;\n bhi = c - (c - bx);\n blo = bx - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = xtail * by;\n c = splitter * xtail;\n ahi = c - (c - xtail);\n alo = xtail - ahi;\n c = splitter * by;\n bhi = c - (c - by);\n blo = by - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n b[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n b[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n b[2] = _j - (u3 - bvirt) + (_i - bvirt);\n b[3] = u3;\n return 4;\n }\n }\n}\n\nfunction tailadd(finlen, a, b, k, z) {\n let bvirt, c, ahi, alo, bhi, blo, _i, _j, _k, _0, s1, s0, u3;\n s1 = a * b;\n c = splitter * a;\n ahi = c - (c - a);\n alo = a - ahi;\n c = splitter * b;\n bhi = c - (c - b);\n blo = b - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n c = splitter * k;\n bhi = c - (c - k);\n blo = k - bhi;\n _i = s0 * k;\n c = splitter * s0;\n ahi = c - (c - s0);\n alo = s0 - ahi;\n u[0] = alo * blo - (_i - ahi * bhi - alo * bhi - ahi * blo);\n _j = s1 * k;\n c = splitter * s1;\n ahi = c - (c - s1);\n alo = s1 - ahi;\n _0 = alo * blo - (_j - ahi * bhi - alo * bhi - ahi * blo);\n _k = _i + _0;\n bvirt = _k - _i;\n u[1] = _i - (_k - bvirt) + (_0 - bvirt);\n u3 = _j + _k;\n u[2] = _k - (u3 - _j);\n u[3] = u3;\n finlen = finadd(finlen, 4, u);\n if (z !== 0) {\n c = splitter * z;\n bhi = c - (c - z);\n blo = z - bhi;\n _i = s0 * z;\n c = splitter * s0;\n ahi = c - (c - s0);\n alo = s0 - ahi;\n u[0] = alo * blo - (_i - ahi * bhi - alo * bhi - ahi * blo);\n _j = s1 * z;\n c = splitter * s1;\n ahi = c - (c - s1);\n alo = s1 - ahi;\n _0 = alo * blo - (_j - ahi * bhi - alo * bhi - ahi * blo);\n _k = _i + _0;\n bvirt = _k - _i;\n u[1] = _i - (_k - bvirt) + (_0 - bvirt);\n u3 = _j + _k;\n u[2] = _k - (u3 - _j);\n u[3] = u3;\n finlen = finadd(finlen, 4, u);\n }\n return finlen;\n}\n\nfunction orient3dadapt(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, permanent) {\n let finlen;\n let adxtail, bdxtail, cdxtail;\n let adytail, bdytail, cdytail;\n let adztail, bdztail, cdztail;\n let bvirt, c, ahi, alo, bhi, blo, _i, _j, _k, _0, s1, s0, t1, t0, u3;\n\n const adx = ax - dx;\n const bdx = bx - dx;\n const cdx = cx - dx;\n const ady = ay - dy;\n const bdy = by - dy;\n const cdy = cy - dy;\n const adz = az - dz;\n const bdz = bz - dz;\n const cdz = cz - dz;\n\n s1 = bdx * cdy;\n c = splitter * bdx;\n ahi = c - (c - bdx);\n alo = bdx - ahi;\n c = splitter * cdy;\n bhi = c - (c - cdy);\n blo = cdy - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = cdx * bdy;\n c = splitter * cdx;\n ahi = c - (c - cdx);\n alo = cdx - ahi;\n c = splitter * bdy;\n bhi = c - (c - bdy);\n blo = bdy - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n bc[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n bc[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n bc[2] = _j - (u3 - bvirt) + (_i - bvirt);\n bc[3] = u3;\n s1 = cdx * ady;\n c = splitter * cdx;\n ahi = c - (c - cdx);\n alo = cdx - ahi;\n c = splitter * ady;\n bhi = c - (c - ady);\n blo = ady - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = adx * cdy;\n c = splitter * adx;\n ahi = c - (c - adx);\n alo = adx - ahi;\n c = splitter * cdy;\n bhi = c - (c - cdy);\n blo = cdy - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n ca[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n ca[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n ca[2] = _j - (u3 - bvirt) + (_i - bvirt);\n ca[3] = u3;\n s1 = adx * bdy;\n c = splitter * adx;\n ahi = c - (c - adx);\n alo = adx - ahi;\n c = splitter * bdy;\n bhi = c - (c - bdy);\n blo = bdy - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = bdx * ady;\n c = splitter * bdx;\n ahi = c - (c - bdx);\n alo = bdx - ahi;\n c = splitter * ady;\n bhi = c - (c - ady);\n blo = ady - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n ab[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n ab[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n ab[2] = _j - (u3 - bvirt) + (_i - bvirt);\n ab[3] = u3;\n\n finlen = sum(\n sum(\n scale(4, bc, adz, _8), _8,\n scale(4, ca, bdz, _8b), _8b, _16), _16,\n scale(4, ab, cdz, _8), _8, fin);\n\n let det = estimate(finlen, fin);\n let errbound = o3derrboundB * permanent;\n if (det >= errbound || -det >= errbound) {\n return det;\n }\n\n bvirt = ax - adx;\n adxtail = ax - (adx + bvirt) + (bvirt - dx);\n bvirt = bx - bdx;\n bdxtail = bx - (bdx + bvirt) + (bvirt - dx);\n bvirt = cx - cdx;\n cdxtail = cx - (cdx + bvirt) + (bvirt - dx);\n bvirt = ay - ady;\n adytail = ay - (ady + bvirt) + (bvirt - dy);\n bvirt = by - bdy;\n bdytail = by - (bdy + bvirt) + (bvirt - dy);\n bvirt = cy - cdy;\n cdytail = cy - (cdy + bvirt) + (bvirt - dy);\n bvirt = az - adz;\n adztail = az - (adz + bvirt) + (bvirt - dz);\n bvirt = bz - bdz;\n bdztail = bz - (bdz + bvirt) + (bvirt - dz);\n bvirt = cz - cdz;\n cdztail = cz - (cdz + bvirt) + (bvirt - dz);\n\n if (adxtail === 0 && bdxtail === 0 && cdxtail === 0 &&\n adytail === 0 && bdytail === 0 && cdytail === 0 &&\n adztail === 0 && bdztail === 0 && cdztail === 0) {\n return det;\n }\n\n errbound = o3derrboundC * permanent + resulterrbound * Math.abs(det);\n det +=\n adz * (bdx * cdytail + cdy * bdxtail - (bdy * cdxtail + cdx * bdytail)) + adztail * (bdx * cdy - bdy * cdx) +\n bdz * (cdx * adytail + ady * cdxtail - (cdy * adxtail + adx * cdytail)) + bdztail * (cdx * ady - cdy * adx) +\n cdz * (adx * bdytail + bdy * adxtail - (ady * bdxtail + bdx * adytail)) + cdztail * (adx * bdy - ady * bdx);\n if (det >= errbound || -det >= errbound) {\n return det;\n }\n\n const at_len = tailinit(adxtail, adytail, bdx, bdy, cdx, cdy, at_b, at_c);\n const bt_len = tailinit(bdxtail, bdytail, cdx, cdy, adx, ady, bt_c, bt_a);\n const ct_len = tailinit(cdxtail, cdytail, adx, ady, bdx, bdy, ct_a, ct_b);\n\n const bctlen = sum(bt_len, bt_c, ct_len, ct_b, bct);\n finlen = finadd(finlen, scale(bctlen, bct, adz, _16), _16);\n\n const catlen = sum(ct_len, ct_a, at_len, at_c, cat);\n finlen = finadd(finlen, scale(catlen, cat, bdz, _16), _16);\n\n const abtlen = sum(at_len, at_b, bt_len, bt_a, abt);\n finlen = finadd(finlen, scale(abtlen, abt, cdz, _16), _16);\n\n if (adztail !== 0) {\n finlen = finadd(finlen, scale(4, bc, adztail, _12), _12);\n finlen = finadd(finlen, scale(bctlen, bct, adztail, _16), _16);\n }\n if (bdztail !== 0) {\n finlen = finadd(finlen, scale(4, ca, bdztail, _12), _12);\n finlen = finadd(finlen, scale(catlen, cat, bdztail, _16), _16);\n }\n if (cdztail !== 0) {\n finlen = finadd(finlen, scale(4, ab, cdztail, _12), _12);\n finlen = finadd(finlen, scale(abtlen, abt, cdztail, _16), _16);\n }\n\n if (adxtail !== 0) {\n if (bdytail !== 0) {\n finlen = tailadd(finlen, adxtail, bdytail, cdz, cdztail);\n }\n if (cdytail !== 0) {\n finlen = tailadd(finlen, -adxtail, cdytail, bdz, bdztail);\n }\n }\n if (bdxtail !== 0) {\n if (cdytail !== 0) {\n finlen = tailadd(finlen, bdxtail, cdytail, adz, adztail);\n }\n if (adytail !== 0) {\n finlen = tailadd(finlen, -bdxtail, adytail, cdz, cdztail);\n }\n }\n if (cdxtail !== 0) {\n if (adytail !== 0) {\n finlen = tailadd(finlen, cdxtail, adytail, bdz, bdztail);\n }\n if (bdytail !== 0) {\n finlen = tailadd(finlen, -cdxtail, bdytail, adz, adztail);\n }\n }\n\n return fin[finlen - 1];\n}\n\nexport function orient3d(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz) {\n const adx = ax - dx;\n const bdx = bx - dx;\n const cdx = cx - dx;\n const ady = ay - dy;\n const bdy = by - dy;\n const cdy = cy - dy;\n const adz = az - dz;\n const bdz = bz - dz;\n const cdz = cz - dz;\n\n const bdxcdy = bdx * cdy;\n const cdxbdy = cdx * bdy;\n\n const cdxady = cdx * ady;\n const adxcdy = adx * cdy;\n\n const adxbdy = adx * bdy;\n const bdxady = bdx * ady;\n\n const det =\n adz * (bdxcdy - cdxbdy) +\n bdz * (cdxady - adxcdy) +\n cdz * (adxbdy - bdxady);\n\n const permanent =\n (Math.abs(bdxcdy) + Math.abs(cdxbdy)) * Math.abs(adz) +\n (Math.abs(cdxady) + Math.abs(adxcdy)) * Math.abs(bdz) +\n (Math.abs(adxbdy) + Math.abs(bdxady)) * Math.abs(cdz);\n\n const errbound = o3derrboundA * permanent;\n if (det > errbound || -det > errbound) {\n return det;\n }\n\n return orient3dadapt(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, permanent);\n}\n\nexport function orient3dfast(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz) {\n const adx = ax - dx;\n const bdx = bx - dx;\n const cdx = cx - dx;\n const ady = ay - dy;\n const bdy = by - dy;\n const cdy = cy - dy;\n const adz = az - dz;\n const bdz = bz - dz;\n const cdz = cz - dz;\n\n return adx * (bdy * cdz - bdz * cdy) +\n bdx * (cdy * adz - cdz * ady) +\n cdx * (ady * bdz - adz * bdy);\n}\n", "import {epsilon, splitter, resulterrbound, estimate, vec, sum, sum_three, scale} from './util.js';\n\nconst iccerrboundA = (10 + 96 * epsilon) * epsilon;\nconst iccerrboundB = (4 + 48 * epsilon) * epsilon;\nconst iccerrboundC = (44 + 576 * epsilon) * epsilon * epsilon;\n\nconst bc = vec(4);\nconst ca = vec(4);\nconst ab = vec(4);\nconst aa = vec(4);\nconst bb = vec(4);\nconst cc = vec(4);\nconst u = vec(4);\nconst v = vec(4);\nconst axtbc = vec(8);\nconst aytbc = vec(8);\nconst bxtca = vec(8);\nconst bytca = vec(8);\nconst cxtab = vec(8);\nconst cytab = vec(8);\nconst abt = vec(8);\nconst bct = vec(8);\nconst cat = vec(8);\nconst abtt = vec(4);\nconst bctt = vec(4);\nconst catt = vec(4);\n\nconst _8 = vec(8);\nconst _16 = vec(16);\nconst _16b = vec(16);\nconst _16c = vec(16);\nconst _32 = vec(32);\nconst _32b = vec(32);\nconst _48 = vec(48);\nconst _64 = vec(64);\n\nlet fin = vec(1152);\nlet fin2 = vec(1152);\n\nfunction finadd(finlen, a, alen) {\n finlen = sum(finlen, fin, a, alen, fin2);\n const tmp = fin; fin = fin2; fin2 = tmp;\n return finlen;\n}\n\nfunction incircleadapt(ax, ay, bx, by, cx, cy, dx, dy, permanent) {\n let finlen;\n let adxtail, bdxtail, cdxtail, adytail, bdytail, cdytail;\n let axtbclen, aytbclen, bxtcalen, bytcalen, cxtablen, cytablen;\n let abtlen, bctlen, catlen;\n let abttlen, bcttlen, cattlen;\n let n1, n0;\n\n let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3;\n\n const adx = ax - dx;\n const bdx = bx - dx;\n const cdx = cx - dx;\n const ady = ay - dy;\n const bdy = by - dy;\n const cdy = cy - dy;\n\n s1 = bdx * cdy;\n c = splitter * bdx;\n ahi = c - (c - bdx);\n alo = bdx - ahi;\n c = splitter * cdy;\n bhi = c - (c - cdy);\n blo = cdy - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = cdx * bdy;\n c = splitter * cdx;\n ahi = c - (c - cdx);\n alo = cdx - ahi;\n c = splitter * bdy;\n bhi = c - (c - bdy);\n blo = bdy - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n bc[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n bc[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n bc[2] = _j - (u3 - bvirt) + (_i - bvirt);\n bc[3] = u3;\n s1 = cdx * ady;\n c = splitter * cdx;\n ahi = c - (c - cdx);\n alo = cdx - ahi;\n c = splitter * ady;\n bhi = c - (c - ady);\n blo = ady - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = adx * cdy;\n c = splitter * adx;\n ahi = c - (c - adx);\n alo = adx - ahi;\n c = splitter * cdy;\n bhi = c - (c - cdy);\n blo = cdy - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n ca[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n ca[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n ca[2] = _j - (u3 - bvirt) + (_i - bvirt);\n ca[3] = u3;\n s1 = adx * bdy;\n c = splitter * adx;\n ahi = c - (c - adx);\n alo = adx - ahi;\n c = splitter * bdy;\n bhi = c - (c - bdy);\n blo = bdy - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = bdx * ady;\n c = splitter * bdx;\n ahi = c - (c - bdx);\n alo = bdx - ahi;\n c = splitter * ady;\n bhi = c - (c - ady);\n blo = ady - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n ab[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n ab[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n ab[2] = _j - (u3 - bvirt) + (_i - bvirt);\n ab[3] = u3;\n\n finlen = sum(\n sum(\n sum(\n scale(scale(4, bc, adx, _8), _8, adx, _16), _16,\n scale(scale(4, bc, ady, _8), _8, ady, _16b), _16b, _32), _32,\n sum(\n scale(scale(4, ca, bdx, _8), _8, bdx, _16), _16,\n scale(scale(4, ca, bdy, _8), _8, bdy, _16b), _16b, _32b), _32b, _64), _64,\n sum(\n scale(scale(4, ab, cdx, _8), _8, cdx, _16), _16,\n scale(scale(4, ab, cdy, _8), _8, cdy, _16b), _16b, _32), _32, fin);\n\n let det = estimate(finlen, fin);\n let errbound = iccerrboundB * permanent;\n if (det >= errbound || -det >= errbound) {\n return det;\n }\n\n bvirt = ax - adx;\n adxtail = ax - (adx + bvirt) + (bvirt - dx);\n bvirt = ay - ady;\n adytail = ay - (ady + bvirt) + (bvirt - dy);\n bvirt = bx - bdx;\n bdxtail = bx - (bdx + bvirt) + (bvirt - dx);\n bvirt = by - bdy;\n bdytail = by - (bdy + bvirt) + (bvirt - dy);\n bvirt = cx - cdx;\n cdxtail = cx - (cdx + bvirt) + (bvirt - dx);\n bvirt = cy - cdy;\n cdytail = cy - (cdy + bvirt) + (bvirt - dy);\n if (adxtail === 0 && bdxtail === 0 && cdxtail === 0 && adytail === 0 && bdytail === 0 && cdytail === 0) {\n return det;\n }\n\n errbound = iccerrboundC * permanent + resulterrbound * Math.abs(det);\n det += ((adx * adx + ady * ady) * ((bdx * cdytail + cdy * bdxtail) - (bdy * cdxtail + cdx * bdytail)) +\n 2 * (adx * adxtail + ady * adytail) * (bdx * cdy - bdy * cdx)) +\n ((bdx * bdx + bdy * bdy) * ((cdx * adytail + ady * cdxtail) - (cdy * adxtail + adx * cdytail)) +\n 2 * (bdx * bdxtail + bdy * bdytail) * (cdx * ady - cdy * adx)) +\n ((cdx * cdx + cdy * cdy) * ((adx * bdytail + bdy * adxtail) - (ady * bdxtail + bdx * adytail)) +\n 2 * (cdx * cdxtail + cdy * cdytail) * (adx * bdy - ady * bdx));\n\n if (det >= errbound || -det >= errbound) {\n return det;\n }\n\n if (bdxtail !== 0 || bdytail !== 0 || cdxtail !== 0 || cdytail !== 0) {\n s1 = adx * adx;\n c = splitter * adx;\n ahi = c - (c - adx);\n alo = adx - ahi;\n s0 = alo * alo - (s1 - ahi * ahi - (ahi + ahi) * alo);\n t1 = ady * ady;\n c = splitter * ady;\n ahi = c - (c - ady);\n alo = ady - ahi;\n t0 = alo * alo - (t1 - ahi * ahi - (ahi + ahi) * alo);\n _i = s0 + t0;\n bvirt = _i - s0;\n aa[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 + t1;\n bvirt = _i - _0;\n aa[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n u3 = _j + _i;\n bvirt = u3 - _j;\n aa[2] = _j - (u3 - bvirt) + (_i - bvirt);\n aa[3] = u3;\n }\n if (cdxtail !== 0 || cdytail !== 0 || adxtail !== 0 || adytail !== 0) {\n s1 = bdx * bdx;\n c = splitter * bdx;\n ahi = c - (c - bdx);\n alo = bdx - ahi;\n s0 = alo * alo - (s1 - ahi * ahi - (ahi + ahi) * alo);\n t1 = bdy * bdy;\n c = splitter * bdy;\n ahi = c - (c - bdy);\n alo = bdy - ahi;\n t0 = alo * alo - (t1 - ahi * ahi - (ahi + ahi) * alo);\n _i = s0 + t0;\n bvirt = _i - s0;\n bb[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 + t1;\n bvirt = _i - _0;\n bb[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n u3 = _j + _i;\n bvirt = u3 - _j;\n bb[2] = _j - (u3 - bvirt) + (_i - bvirt);\n bb[3] = u3;\n }\n if (adxtail !== 0 || adytail !== 0 || bdxtail !== 0 || bdytail !== 0) {\n s1 = cdx * cdx;\n c = splitter * cdx;\n ahi = c - (c - cdx);\n alo = cdx - ahi;\n s0 = alo * alo - (s1 - ahi * ahi - (ahi + ahi) * alo);\n t1 = cdy * cdy;\n c = splitter * cdy;\n ahi = c - (c - cdy);\n alo = cdy - ahi;\n t0 = alo * alo - (t1 - ahi * ahi - (ahi + ahi) * alo);\n _i = s0 + t0;\n bvirt = _i - s0;\n cc[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 + t1;\n bvirt = _i - _0;\n cc[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n u3 = _j + _i;\n bvirt = u3 - _j;\n cc[2] = _j - (u3 - bvirt) + (_i - bvirt);\n cc[3] = u3;\n }\n\n if (adxtail !== 0) {\n axtbclen = scale(4, bc, adxtail, axtbc);\n finlen = finadd(finlen, sum_three(\n scale(axtbclen, axtbc, 2 * adx, _16), _16,\n scale(scale(4, cc, adxtail, _8), _8, bdy, _16b), _16b,\n scale(scale(4, bb, adxtail, _8), _8, -cdy, _16c), _16c, _32, _48), _48);\n }\n if (adytail !== 0) {\n aytbclen = scale(4, bc, adytail, aytbc);\n finlen = finadd(finlen, sum_three(\n scale(aytbclen, aytbc, 2 * ady, _16), _16,\n scale(scale(4, bb, adytail, _8), _8, cdx, _16b), _16b,\n scale(scale(4, cc, adytail, _8), _8, -bdx, _16c), _16c, _32, _48), _48);\n }\n if (bdxtail !== 0) {\n bxtcalen = scale(4, ca, bdxtail, bxtca);\n finlen = finadd(finlen, sum_three(\n scale(bxtcalen, bxtca, 2 * bdx, _16), _16,\n scale(scale(4, aa, bdxtail, _8), _8, cdy, _16b), _16b,\n scale(scale(4, cc, bdxtail, _8), _8, -ady, _16c), _16c, _32, _48), _48);\n }\n if (bdytail !== 0) {\n bytcalen = scale(4, ca, bdytail, bytca);\n finlen = finadd(finlen, sum_three(\n scale(bytcalen, bytca, 2 * bdy, _16), _16,\n scale(scale(4, cc, bdytail, _8), _8, adx, _16b), _16b,\n scale(scale(4, aa, bdytail, _8), _8, -cdx, _16c), _16c, _32, _48), _48);\n }\n if (cdxtail !== 0) {\n cxtablen = scale(4, ab, cdxtail, cxtab);\n finlen = finadd(finlen, sum_three(\n scale(cxtablen, cxtab, 2 * cdx, _16), _16,\n scale(scale(4, bb, cdxtail, _8), _8, ady, _16b), _16b,\n scale(scale(4, aa, cdxtail, _8), _8, -bdy, _16c), _16c, _32, _48), _48);\n }\n if (cdytail !== 0) {\n cytablen = scale(4, ab, cdytail, cytab);\n finlen = finadd(finlen, sum_three(\n scale(cytablen, cytab, 2 * cdy, _16), _16,\n scale(scale(4, aa, cdytail, _8), _8, bdx, _16b), _16b,\n scale(scale(4, bb, cdytail, _8), _8, -adx, _16c), _16c, _32, _48), _48);\n }\n\n if (adxtail !== 0 || adytail !== 0) {\n if (bdxtail !== 0 || bdytail !== 0 || cdxtail !== 0 || cdytail !== 0) {\n s1 = bdxtail * cdy;\n c = splitter * bdxtail;\n ahi = c - (c - bdxtail);\n alo = bdxtail - ahi;\n c = splitter * cdy;\n bhi = c - (c - cdy);\n blo = cdy - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = bdx * cdytail;\n c = splitter * bdx;\n ahi = c - (c - bdx);\n alo = bdx - ahi;\n c = splitter * cdytail;\n bhi = c - (c - cdytail);\n blo = cdytail - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 + t0;\n bvirt = _i - s0;\n u[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 + t1;\n bvirt = _i - _0;\n u[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n u3 = _j + _i;\n bvirt = u3 - _j;\n u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n u[3] = u3;\n s1 = cdxtail * -bdy;\n c = splitter * cdxtail;\n ahi = c - (c - cdxtail);\n alo = cdxtail - ahi;\n c = splitter * -bdy;\n bhi = c - (c - -bdy);\n blo = -bdy - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = cdx * -bdytail;\n c = splitter * cdx;\n ahi = c - (c - cdx);\n alo = cdx - ahi;\n c = splitter * -bdytail;\n bhi = c - (c - -bdytail);\n blo = -bdytail - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 + t0;\n bvirt = _i - s0;\n v[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 + t1;\n bvirt = _i - _0;\n v[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n u3 = _j + _i;\n bvirt = u3 - _j;\n v[2] = _j - (u3 - bvirt) + (_i - bvirt);\n v[3] = u3;\n bctlen = sum(4, u, 4, v, bct);\n s1 = bdxtail * cdytail;\n c = splitter * bdxtail;\n ahi = c - (c - bdxtail);\n alo = bdxtail - ahi;\n c = splitter * cdytail;\n bhi = c - (c - cdytail);\n blo = cdytail - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = cdxtail * bdytail;\n c = splitter * cdxtail;\n ahi = c - (c - cdxtail);\n alo = cdxtail - ahi;\n c = splitter * bdytail;\n bhi = c - (c - bdytail);\n blo = bdytail - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n bctt[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n bctt[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n bctt[2] = _j - (u3 - bvirt) + (_i - bvirt);\n bctt[3] = u3;\n bcttlen = 4;\n } else {\n bct[0] = 0;\n bctlen = 1;\n bctt[0] = 0;\n bcttlen = 1;\n }\n if (adxtail !== 0) {\n const len = scale(bctlen, bct, adxtail, _16c);\n finlen = finadd(finlen, sum(\n scale(axtbclen, axtbc, adxtail, _16), _16,\n scale(len, _16c, 2 * adx, _32), _32, _48), _48);\n\n const len2 = scale(bcttlen, bctt, adxtail, _8);\n finlen = finadd(finlen, sum_three(\n scale(len2, _8, 2 * adx, _16), _16,\n scale(len2, _8, adxtail, _16b), _16b,\n scale(len, _16c, adxtail, _32), _32, _32b, _64), _64);\n\n if (bdytail !== 0) {\n finlen = finadd(finlen, scale(scale(4, cc, adxtail, _8), _8, bdytail, _16), _16);\n }\n if (cdytail !== 0) {\n finlen = finadd(finlen, scale(scale(4, bb, -adxtail, _8), _8, cdytail, _16), _16);\n }\n }\n if (adytail !== 0) {\n const len = scale(bctlen, bct, adytail, _16c);\n finlen = finadd(finlen, sum(\n scale(aytbclen, aytbc, adytail, _16), _16,\n scale(len, _16c, 2 * ady, _32), _32, _48), _48);\n\n const len2 = scale(bcttlen, bctt, adytail, _8);\n finlen = finadd(finlen, sum_three(\n scale(len2, _8, 2 * ady, _16), _16,\n scale(len2, _8, adytail, _16b), _16b,\n scale(len, _16c, adytail, _32), _32, _32b, _64), _64);\n }\n }\n if (bdxtail !== 0 || bdytail !== 0) {\n if (cdxtail !== 0 || cdytail !== 0 || adxtail !== 0 || adytail !== 0) {\n s1 = cdxtail * ady;\n c = splitter * cdxtail;\n ahi = c - (c - cdxtail);\n alo = cdxtail - ahi;\n c = splitter * ady;\n bhi = c - (c - ady);\n blo = ady - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = cdx * adytail;\n c = splitter * cdx;\n ahi = c - (c - cdx);\n alo = cdx - ahi;\n c = splitter * adytail;\n bhi = c - (c - adytail);\n blo = adytail - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 + t0;\n bvirt = _i - s0;\n u[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 + t1;\n bvirt = _i - _0;\n u[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n u3 = _j + _i;\n bvirt = u3 - _j;\n u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n u[3] = u3;\n n1 = -cdy;\n n0 = -cdytail;\n s1 = adxtail * n1;\n c = splitter * adxtail;\n ahi = c - (c - adxtail);\n alo = adxtail - ahi;\n c = splitter * n1;\n bhi = c - (c - n1);\n blo = n1 - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = adx * n0;\n c = splitter * adx;\n ahi = c - (c - adx);\n alo = adx - ahi;\n c = splitter * n0;\n bhi = c - (c - n0);\n blo = n0 - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 + t0;\n bvirt = _i - s0;\n v[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 + t1;\n bvirt = _i - _0;\n v[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n u3 = _j + _i;\n bvirt = u3 - _j;\n v[2] = _j - (u3 - bvirt) + (_i - bvirt);\n v[3] = u3;\n catlen = sum(4, u, 4, v, cat);\n s1 = cdxtail * adytail;\n c = splitter * cdxtail;\n ahi = c - (c - cdxtail);\n alo = cdxtail - ahi;\n c = splitter * adytail;\n bhi = c - (c - adytail);\n blo = adytail - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = adxtail * cdytail;\n c = splitter * adxtail;\n ahi = c - (c - adxtail);\n alo = adxtail - ahi;\n c = splitter * cdytail;\n bhi = c - (c - cdytail);\n blo = cdytail - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n catt[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n catt[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n catt[2] = _j - (u3 - bvirt) + (_i - bvirt);\n catt[3] = u3;\n cattlen = 4;\n } else {\n cat[0] = 0;\n catlen = 1;\n catt[0] = 0;\n cattlen = 1;\n }\n if (bdxtail !== 0) {\n const len = scale(catlen, cat, bdxtail, _16c);\n finlen = finadd(finlen, sum(\n scale(bxtcalen, bxtca, bdxtail, _16), _16,\n scale(len, _16c, 2 * bdx, _32), _32, _48), _48);\n\n const len2 = scale(cattlen, catt, bdxtail, _8);\n finlen = finadd(finlen, sum_three(\n scale(len2, _8, 2 * bdx, _16), _16,\n scale(len2, _8, bdxtail, _16b), _16b,\n scale(len, _16c, bdxtail, _32), _32, _32b, _64), _64);\n\n if (cdytail !== 0) {\n finlen = finadd(finlen, scale(scale(4, aa, bdxtail, _8), _8, cdytail, _16), _16);\n }\n if (adytail !== 0) {\n finlen = finadd(finlen, scale(scale(4, cc, -bdxtail, _8), _8, adytail, _16), _16);\n }\n }\n if (bdytail !== 0) {\n const len = scale(catlen, cat, bdytail, _16c);\n finlen = finadd(finlen, sum(\n scale(bytcalen, bytca, bdytail, _16), _16,\n scale(len, _16c, 2 * bdy, _32), _32, _48), _48);\n\n const len2 = scale(cattlen, catt, bdytail, _8);\n finlen = finadd(finlen, sum_three(\n scale(len2, _8, 2 * bdy, _16), _16,\n scale(len2, _8, bdytail, _16b), _16b,\n scale(len, _16c, bdytail, _32), _32, _32b, _64), _64);\n }\n }\n if (cdxtail !== 0 || cdytail !== 0) {\n if (adxtail !== 0 || adytail !== 0 || bdxtail !== 0 || bdytail !== 0) {\n s1 = adxtail * bdy;\n c = splitter * adxtail;\n ahi = c - (c - adxtail);\n alo = adxtail - ahi;\n c = splitter * bdy;\n bhi = c - (c - bdy);\n blo = bdy - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = adx * bdytail;\n c = splitter * adx;\n ahi = c - (c - adx);\n alo = adx - ahi;\n c = splitter * bdytail;\n bhi = c - (c - bdytail);\n blo = bdytail - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 + t0;\n bvirt = _i - s0;\n u[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 + t1;\n bvirt = _i - _0;\n u[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n u3 = _j + _i;\n bvirt = u3 - _j;\n u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n u[3] = u3;\n n1 = -ady;\n n0 = -adytail;\n s1 = bdxtail * n1;\n c = splitter * bdxtail;\n ahi = c - (c - bdxtail);\n alo = bdxtail - ahi;\n c = splitter * n1;\n bhi = c - (c - n1);\n blo = n1 - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = bdx * n0;\n c = splitter * bdx;\n ahi = c - (c - bdx);\n alo = bdx - ahi;\n c = splitter * n0;\n bhi = c - (c - n0);\n blo = n0 - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 + t0;\n bvirt = _i - s0;\n v[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 + t1;\n bvirt = _i - _0;\n v[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n u3 = _j + _i;\n bvirt = u3 - _j;\n v[2] = _j - (u3 - bvirt) + (_i - bvirt);\n v[3] = u3;\n abtlen = sum(4, u, 4, v, abt);\n s1 = adxtail * bdytail;\n c = splitter * adxtail;\n ahi = c - (c - adxtail);\n alo = adxtail - ahi;\n c = splitter * bdytail;\n bhi = c - (c - bdytail);\n blo = bdytail - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = bdxtail * adytail;\n c = splitter * bdxtail;\n ahi = c - (c - bdxtail);\n alo = bdxtail - ahi;\n c = splitter * adytail;\n bhi = c - (c - adytail);\n blo = adytail - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n abtt[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n abtt[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n abtt[2] = _j - (u3 - bvirt) + (_i - bvirt);\n abtt[3] = u3;\n abttlen = 4;\n } else {\n abt[0] = 0;\n abtlen = 1;\n abtt[0] = 0;\n abttlen = 1;\n }\n if (cdxtail !== 0) {\n const len = scale(abtlen, abt, cdxtail, _16c);\n finlen = finadd(finlen, sum(\n scale(cxtablen, cxtab, cdxtail, _16), _16,\n scale(len, _16c, 2 * cdx, _32), _32, _48), _48);\n\n const len2 = scale(abttlen, abtt, cdxtail, _8);\n finlen = finadd(finlen, sum_three(\n scale(len2, _8, 2 * cdx, _16), _16,\n scale(len2, _8, cdxtail, _16b), _16b,\n scale(len, _16c, cdxtail, _32), _32, _32b, _64), _64);\n\n if (adytail !== 0) {\n finlen = finadd(finlen, scale(scale(4, bb, cdxtail, _8), _8, adytail, _16), _16);\n }\n if (bdytail !== 0) {\n finlen = finadd(finlen, scale(scale(4, aa, -cdxtail, _8), _8, bdytail, _16), _16);\n }\n }\n if (cdytail !== 0) {\n const len = scale(abtlen, abt, cdytail, _16c);\n finlen = finadd(finlen, sum(\n scale(cytablen, cytab, cdytail, _16), _16,\n scale(len, _16c, 2 * cdy, _32), _32, _48), _48);\n\n const len2 = scale(abttlen, abtt, cdytail, _8);\n finlen = finadd(finlen, sum_three(\n scale(len2, _8, 2 * cdy, _16), _16,\n scale(len2, _8, cdytail, _16b), _16b,\n scale(len, _16c, cdytail, _32), _32, _32b, _64), _64);\n }\n }\n\n return fin[finlen - 1];\n}\n\nexport function incircle(ax, ay, bx, by, cx, cy, dx, dy) {\n const adx = ax - dx;\n const bdx = bx - dx;\n const cdx = cx - dx;\n const ady = ay - dy;\n const bdy = by - dy;\n const cdy = cy - dy;\n\n const bdxcdy = bdx * cdy;\n const cdxbdy = cdx * bdy;\n const alift = adx * adx + ady * ady;\n\n const cdxady = cdx * ady;\n const adxcdy = adx * cdy;\n const blift = bdx * bdx + bdy * bdy;\n\n const adxbdy = adx * bdy;\n const bdxady = bdx * ady;\n const clift = cdx * cdx + cdy * cdy;\n\n const det =\n alift * (bdxcdy - cdxbdy) +\n blift * (cdxady - adxcdy) +\n clift * (adxbdy - bdxady);\n\n const permanent =\n (Math.abs(bdxcdy) + Math.abs(cdxbdy)) * alift +\n (Math.abs(cdxady) + Math.abs(adxcdy)) * blift +\n (Math.abs(adxbdy) + Math.abs(bdxady)) * clift;\n\n const errbound = iccerrboundA * permanent;\n\n if (det > errbound || -det > errbound) {\n return det;\n }\n return incircleadapt(ax, ay, bx, by, cx, cy, dx, dy, permanent);\n}\n\nexport function incirclefast(ax, ay, bx, by, cx, cy, dx, dy) {\n const adx = ax - dx;\n const ady = ay - dy;\n const bdx = bx - dx;\n const bdy = by - dy;\n const cdx = cx - dx;\n const cdy = cy - dy;\n\n const abdet = adx * bdy - bdx * ady;\n const bcdet = bdx * cdy - cdx * bdy;\n const cadet = cdx * ady - adx * cdy;\n const alift = adx * adx + ady * ady;\n const blift = bdx * bdx + bdy * bdy;\n const clift = cdx * cdx + cdy * cdy;\n\n return alift * bcdet + blift * cadet + clift * abdet;\n}\n", "import {epsilon, splitter, resulterrbound, estimate, vec, sum, sum_three, scale, negate} from './util.js';\n\nconst isperrboundA = (16 + 224 * epsilon) * epsilon;\nconst isperrboundB = (5 + 72 * epsilon) * epsilon;\nconst isperrboundC = (71 + 1408 * epsilon) * epsilon * epsilon;\n\nconst ab = vec(4);\nconst bc = vec(4);\nconst cd = vec(4);\nconst de = vec(4);\nconst ea = vec(4);\nconst ac = vec(4);\nconst bd = vec(4);\nconst ce = vec(4);\nconst da = vec(4);\nconst eb = vec(4);\n\nconst abc = vec(24);\nconst bcd = vec(24);\nconst cde = vec(24);\nconst dea = vec(24);\nconst eab = vec(24);\nconst abd = vec(24);\nconst bce = vec(24);\nconst cda = vec(24);\nconst deb = vec(24);\nconst eac = vec(24);\n\nconst adet = vec(1152);\nconst bdet = vec(1152);\nconst cdet = vec(1152);\nconst ddet = vec(1152);\nconst edet = vec(1152);\nconst abdet = vec(2304);\nconst cddet = vec(2304);\nconst cdedet = vec(3456);\nconst deter = vec(5760);\n\nconst _8 = vec(8);\nconst _8b = vec(8);\nconst _8c = vec(8);\nconst _16 = vec(16);\nconst _24 = vec(24);\nconst _48 = vec(48);\nconst _48b = vec(48);\nconst _96 = vec(96);\nconst _192 = vec(192);\nconst _384x = vec(384);\nconst _384y = vec(384);\nconst _384z = vec(384);\nconst _768 = vec(768);\n\nfunction sum_three_scale(a, b, c, az, bz, cz, out) {\n return sum_three(\n scale(4, a, az, _8), _8,\n scale(4, b, bz, _8b), _8b,\n scale(4, c, cz, _8c), _8c, _16, out);\n}\n\nfunction liftexact(alen, a, blen, b, clen, c, dlen, d, x, y, z, out) {\n const len = sum(\n sum(alen, a, blen, b, _48), _48,\n negate(sum(clen, c, dlen, d, _48b), _48b), _48b, _96);\n\n return sum_three(\n scale(scale(len, _96, x, _192), _192, x, _384x), _384x,\n scale(scale(len, _96, y, _192), _192, y, _384y), _384y,\n scale(scale(len, _96, z, _192), _192, z, _384z), _384z, _768, out);\n}\n\nfunction insphereexact(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, ez) {\n let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3;\n\n s1 = ax * by;\n c = splitter * ax;\n ahi = c - (c - ax);\n alo = ax - ahi;\n c = splitter * by;\n bhi = c - (c - by);\n blo = by - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = bx * ay;\n c = splitter * bx;\n ahi = c - (c - bx);\n alo = bx - ahi;\n c = splitter * ay;\n bhi = c - (c - ay);\n blo = ay - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n ab[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n ab[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n ab[2] = _j - (u3 - bvirt) + (_i - bvirt);\n ab[3] = u3;\n s1 = bx * cy;\n c = splitter * bx;\n ahi = c - (c - bx);\n alo = bx - ahi;\n c = splitter * cy;\n bhi = c - (c - cy);\n blo = cy - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = cx * by;\n c = splitter * cx;\n ahi = c - (c - cx);\n alo = cx - ahi;\n c = splitter * by;\n bhi = c - (c - by);\n blo = by - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n bc[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n bc[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n bc[2] = _j - (u3 - bvirt) + (_i - bvirt);\n bc[3] = u3;\n s1 = cx * dy;\n c = splitter * cx;\n ahi = c - (c - cx);\n alo = cx - ahi;\n c = splitter * dy;\n bhi = c - (c - dy);\n blo = dy - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = dx * cy;\n c = splitter * dx;\n ahi = c - (c - dx);\n alo = dx - ahi;\n c = splitter * cy;\n bhi = c - (c - cy);\n blo = cy - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n cd[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n cd[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n cd[2] = _j - (u3 - bvirt) + (_i - bvirt);\n cd[3] = u3;\n s1 = dx * ey;\n c = splitter * dx;\n ahi = c - (c - dx);\n alo = dx - ahi;\n c = splitter * ey;\n bhi = c - (c - ey);\n blo = ey - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = ex * dy;\n c = splitter * ex;\n ahi = c - (c - ex);\n alo = ex - ahi;\n c = splitter * dy;\n bhi = c - (c - dy);\n blo = dy - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n de[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n de[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n de[2] = _j - (u3 - bvirt) + (_i - bvirt);\n de[3] = u3;\n s1 = ex * ay;\n c = splitter * ex;\n ahi = c - (c - ex);\n alo = ex - ahi;\n c = splitter * ay;\n bhi = c - (c - ay);\n blo = ay - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = ax * ey;\n c = splitter * ax;\n ahi = c - (c - ax);\n alo = ax - ahi;\n c = splitter * ey;\n bhi = c - (c - ey);\n blo = ey - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n ea[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n ea[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n ea[2] = _j - (u3 - bvirt) + (_i - bvirt);\n ea[3] = u3;\n s1 = ax * cy;\n c = splitter * ax;\n ahi = c - (c - ax);\n alo = ax - ahi;\n c = splitter * cy;\n bhi = c - (c - cy);\n blo = cy - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = cx * ay;\n c = splitter * cx;\n ahi = c - (c - cx);\n alo = cx - ahi;\n c = splitter * ay;\n bhi = c - (c - ay);\n blo = ay - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n ac[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n ac[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n ac[2] = _j - (u3 - bvirt) + (_i - bvirt);\n ac[3] = u3;\n s1 = bx * dy;\n c = splitter * bx;\n ahi = c - (c - bx);\n alo = bx - ahi;\n c = splitter * dy;\n bhi = c - (c - dy);\n blo = dy - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = dx * by;\n c = splitter * dx;\n ahi = c - (c - dx);\n alo = dx - ahi;\n c = splitter * by;\n bhi = c - (c - by);\n blo = by - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n bd[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n bd[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n bd[2] = _j - (u3 - bvirt) + (_i - bvirt);\n bd[3] = u3;\n s1 = cx * ey;\n c = splitter * cx;\n ahi = c - (c - cx);\n alo = cx - ahi;\n c = splitter * ey;\n bhi = c - (c - ey);\n blo = ey - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = ex * cy;\n c = splitter * ex;\n ahi = c - (c - ex);\n alo = ex - ahi;\n c = splitter * cy;\n bhi = c - (c - cy);\n blo = cy - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n ce[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n ce[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n ce[2] = _j - (u3 - bvirt) + (_i - bvirt);\n ce[3] = u3;\n s1 = dx * ay;\n c = splitter * dx;\n ahi = c - (c - dx);\n alo = dx - ahi;\n c = splitter * ay;\n bhi = c - (c - ay);\n blo = ay - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = ax * dy;\n c = splitter * ax;\n ahi = c - (c - ax);\n alo = ax - ahi;\n c = splitter * dy;\n bhi = c - (c - dy);\n blo = dy - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n da[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n da[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n da[2] = _j - (u3 - bvirt) + (_i - bvirt);\n da[3] = u3;\n s1 = ex * by;\n c = splitter * ex;\n ahi = c - (c - ex);\n alo = ex - ahi;\n c = splitter * by;\n bhi = c - (c - by);\n blo = by - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = bx * ey;\n c = splitter * bx;\n ahi = c - (c - bx);\n alo = bx - ahi;\n c = splitter * ey;\n bhi = c - (c - ey);\n blo = ey - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n eb[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n eb[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n eb[2] = _j - (u3 - bvirt) + (_i - bvirt);\n eb[3] = u3;\n\n const abclen = sum_three_scale(ab, bc, ac, cz, az, -bz, abc);\n const bcdlen = sum_three_scale(bc, cd, bd, dz, bz, -cz, bcd);\n const cdelen = sum_three_scale(cd, de, ce, ez, cz, -dz, cde);\n const dealen = sum_three_scale(de, ea, da, az, dz, -ez, dea);\n const eablen = sum_three_scale(ea, ab, eb, bz, ez, -az, eab);\n const abdlen = sum_three_scale(ab, bd, da, dz, az, bz, abd);\n const bcelen = sum_three_scale(bc, ce, eb, ez, bz, cz, bce);\n const cdalen = sum_three_scale(cd, da, ac, az, cz, dz, cda);\n const deblen = sum_three_scale(de, eb, bd, bz, dz, ez, deb);\n const eaclen = sum_three_scale(ea, ac, ce, cz, ez, az, eac);\n\n const deterlen = sum_three(\n liftexact(cdelen, cde, bcelen, bce, deblen, deb, bcdlen, bcd, ax, ay, az, adet), adet,\n liftexact(dealen, dea, cdalen, cda, eaclen, eac, cdelen, cde, bx, by, bz, bdet), bdet,\n sum_three(\n liftexact(eablen, eab, deblen, deb, abdlen, abd, dealen, dea, cx, cy, cz, cdet), cdet,\n liftexact(abclen, abc, eaclen, eac, bcelen, bce, eablen, eab, dx, dy, dz, ddet), ddet,\n liftexact(bcdlen, bcd, abdlen, abd, cdalen, cda, abclen, abc, ex, ey, ez, edet), edet, cddet, cdedet), cdedet, abdet, deter);\n\n return deter[deterlen - 1];\n}\n\nconst xdet = vec(96);\nconst ydet = vec(96);\nconst zdet = vec(96);\nconst fin = vec(1152);\n\nfunction liftadapt(a, b, c, az, bz, cz, x, y, z, out) {\n const len = sum_three_scale(a, b, c, az, bz, cz, _24);\n return sum_three(\n scale(scale(len, _24, x, _48), _48, x, xdet), xdet,\n scale(scale(len, _24, y, _48), _48, y, ydet), ydet,\n scale(scale(len, _24, z, _48), _48, z, zdet), zdet, _192, out);\n}\n\nfunction insphereadapt(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, ez, permanent) {\n let ab3, bc3, cd3, da3, ac3, bd3;\n\n let aextail, bextail, cextail, dextail;\n let aeytail, beytail, ceytail, deytail;\n let aeztail, beztail, ceztail, deztail;\n\n let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0;\n\n const aex = ax - ex;\n const bex = bx - ex;\n const cex = cx - ex;\n const dex = dx - ex;\n const aey = ay - ey;\n const bey = by - ey;\n const cey = cy - ey;\n const dey = dy - ey;\n const aez = az - ez;\n const bez = bz - ez;\n const cez = cz - ez;\n const dez = dz - ez;\n\n s1 = aex * bey;\n c = splitter * aex;\n ahi = c - (c - aex);\n alo = aex - ahi;\n c = splitter * bey;\n bhi = c - (c - bey);\n blo = bey - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = bex * aey;\n c = splitter * bex;\n ahi = c - (c - bex);\n alo = bex - ahi;\n c = splitter * aey;\n bhi = c - (c - aey);\n blo = aey - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n ab[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n ab[1] = _0 - (_i + bvirt) + (bvirt - t1);\n ab3 = _j + _i;\n bvirt = ab3 - _j;\n ab[2] = _j - (ab3 - bvirt) + (_i - bvirt);\n ab[3] = ab3;\n s1 = bex * cey;\n c = splitter * bex;\n ahi = c - (c - bex);\n alo = bex - ahi;\n c = splitter * cey;\n bhi = c - (c - cey);\n blo = cey - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = cex * bey;\n c = splitter * cex;\n ahi = c - (c - cex);\n alo = cex - ahi;\n c = splitter * bey;\n bhi = c - (c - bey);\n blo = bey - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n bc[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n bc[1] = _0 - (_i + bvirt) + (bvirt - t1);\n bc3 = _j + _i;\n bvirt = bc3 - _j;\n bc[2] = _j - (bc3 - bvirt) + (_i - bvirt);\n bc[3] = bc3;\n s1 = cex * dey;\n c = splitter * cex;\n ahi = c - (c - cex);\n alo = cex - ahi;\n c = splitter * dey;\n bhi = c - (c - dey);\n blo = dey - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = dex * cey;\n c = splitter * dex;\n ahi = c - (c - dex);\n alo = dex - ahi;\n c = splitter * cey;\n bhi = c - (c - cey);\n blo = cey - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n cd[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n cd[1] = _0 - (_i + bvirt) + (bvirt - t1);\n cd3 = _j + _i;\n bvirt = cd3 - _j;\n cd[2] = _j - (cd3 - bvirt) + (_i - bvirt);\n cd[3] = cd3;\n s1 = dex * aey;\n c = splitter * dex;\n ahi = c - (c - dex);\n alo = dex - ahi;\n c = splitter * aey;\n bhi = c - (c - aey);\n blo = aey - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = aex * dey;\n c = splitter * aex;\n ahi = c - (c - aex);\n alo = aex - ahi;\n c = splitter * dey;\n bhi = c - (c - dey);\n blo = dey - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n da[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n da[1] = _0 - (_i + bvirt) + (bvirt - t1);\n da3 = _j + _i;\n bvirt = da3 - _j;\n da[2] = _j - (da3 - bvirt) + (_i - bvirt);\n da[3] = da3;\n s1 = aex * cey;\n c = splitter * aex;\n ahi = c - (c - aex);\n alo = aex - ahi;\n c = splitter * cey;\n bhi = c - (c - cey);\n blo = cey - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = cex * aey;\n c = splitter * cex;\n ahi = c - (c - cex);\n alo = cex - ahi;\n c = splitter * aey;\n bhi = c - (c - aey);\n blo = aey - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n ac[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n ac[1] = _0 - (_i + bvirt) + (bvirt - t1);\n ac3 = _j + _i;\n bvirt = ac3 - _j;\n ac[2] = _j - (ac3 - bvirt) + (_i - bvirt);\n ac[3] = ac3;\n s1 = bex * dey;\n c = splitter * bex;\n ahi = c - (c - bex);\n alo = bex - ahi;\n c = splitter * dey;\n bhi = c - (c - dey);\n blo = dey - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = dex * bey;\n c = splitter * dex;\n ahi = c - (c - dex);\n alo = dex - ahi;\n c = splitter * bey;\n bhi = c - (c - bey);\n blo = bey - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n bd[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n bd[1] = _0 - (_i + bvirt) + (bvirt - t1);\n bd3 = _j + _i;\n bvirt = bd3 - _j;\n bd[2] = _j - (bd3 - bvirt) + (_i - bvirt);\n bd[3] = bd3;\n\n const finlen = sum(\n sum(\n negate(liftadapt(bc, cd, bd, dez, bez, -cez, aex, aey, aez, adet), adet), adet,\n liftadapt(cd, da, ac, aez, cez, dez, bex, bey, bez, bdet), bdet, abdet), abdet,\n sum(\n negate(liftadapt(da, ab, bd, bez, dez, aez, cex, cey, cez, cdet), cdet), cdet,\n liftadapt(ab, bc, ac, cez, aez, -bez, dex, dey, dez, ddet), ddet, cddet), cddet, fin);\n\n let det = estimate(finlen, fin);\n let errbound = isperrboundB * permanent;\n if (det >= errbound || -det >= errbound) {\n return det;\n }\n\n bvirt = ax - aex;\n aextail = ax - (aex + bvirt) + (bvirt - ex);\n bvirt = ay - aey;\n aeytail = ay - (aey + bvirt) + (bvirt - ey);\n bvirt = az - aez;\n aeztail = az - (aez + bvirt) + (bvirt - ez);\n bvirt = bx - bex;\n bextail = bx - (bex + bvirt) + (bvirt - ex);\n bvirt = by - bey;\n beytail = by - (bey + bvirt) + (bvirt - ey);\n bvirt = bz - bez;\n beztail = bz - (bez + bvirt) + (bvirt - ez);\n bvirt = cx - cex;\n cextail = cx - (cex + bvirt) + (bvirt - ex);\n bvirt = cy - cey;\n ceytail = cy - (cey + bvirt) + (bvirt - ey);\n bvirt = cz - cez;\n ceztail = cz - (cez + bvirt) + (bvirt - ez);\n bvirt = dx - dex;\n dextail = dx - (dex + bvirt) + (bvirt - ex);\n bvirt = dy - dey;\n deytail = dy - (dey + bvirt) + (bvirt - ey);\n bvirt = dz - dez;\n deztail = dz - (dez + bvirt) + (bvirt - ez);\n if (aextail === 0 && aeytail === 0 && aeztail === 0 &&\n bextail === 0 && beytail === 0 && beztail === 0 &&\n cextail === 0 && ceytail === 0 && ceztail === 0 &&\n dextail === 0 && deytail === 0 && deztail === 0) {\n return det;\n }\n\n errbound = isperrboundC * permanent + resulterrbound * Math.abs(det);\n\n const abeps = (aex * beytail + bey * aextail) - (aey * bextail + bex * aeytail);\n const bceps = (bex * ceytail + cey * bextail) - (bey * cextail + cex * beytail);\n const cdeps = (cex * deytail + dey * cextail) - (cey * dextail + dex * ceytail);\n const daeps = (dex * aeytail + aey * dextail) - (dey * aextail + aex * deytail);\n const aceps = (aex * ceytail + cey * aextail) - (aey * cextail + cex * aeytail);\n const bdeps = (bex * deytail + dey * bextail) - (bey * dextail + dex * beytail);\n det +=\n (((bex * bex + bey * bey + bez * bez) * ((cez * daeps + dez * aceps + aez * cdeps) +\n (ceztail * da3 + deztail * ac3 + aeztail * cd3)) + (dex * dex + dey * dey + dez * dez) *\n ((aez * bceps - bez * aceps + cez * abeps) + (aeztail * bc3 - beztail * ac3 + ceztail * ab3))) -\n ((aex * aex + aey * aey + aez * aez) * ((bez * cdeps - cez * bdeps + dez * bceps) +\n (beztail * cd3 - ceztail * bd3 + deztail * bc3)) + (cex * cex + cey * cey + cez * cez) *\n ((dez * abeps + aez * bdeps + bez * daeps) + (deztail * ab3 + aeztail * bd3 + beztail * da3)))) +\n 2 * (((bex * bextail + bey * beytail + bez * beztail) * (cez * da3 + dez * ac3 + aez * cd3) +\n (dex * dextail + dey * deytail + dez * deztail) * (aez * bc3 - bez * ac3 + cez * ab3)) -\n ((aex * aextail + aey * aeytail + aez * aeztail) * (bez * cd3 - cez * bd3 + dez * bc3) +\n (cex * cextail + cey * ceytail + cez * ceztail) * (dez * ab3 + aez * bd3 + bez * da3)));\n\n if (det >= errbound || -det >= errbound) {\n return det;\n }\n\n return insphereexact(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, ez);\n}\n\nexport function insphere(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, ez) {\n const aex = ax - ex;\n const bex = bx - ex;\n const cex = cx - ex;\n const dex = dx - ex;\n const aey = ay - ey;\n const bey = by - ey;\n const cey = cy - ey;\n const dey = dy - ey;\n const aez = az - ez;\n const bez = bz - ez;\n const cez = cz - ez;\n const dez = dz - ez;\n\n const aexbey = aex * bey;\n const bexaey = bex * aey;\n const ab = aexbey - bexaey;\n const bexcey = bex * cey;\n const cexbey = cex * bey;\n const bc = bexcey - cexbey;\n const cexdey = cex * dey;\n const dexcey = dex * cey;\n const cd = cexdey - dexcey;\n const dexaey = dex * aey;\n const aexdey = aex * dey;\n const da = dexaey - aexdey;\n const aexcey = aex * cey;\n const cexaey = cex * aey;\n const ac = aexcey - cexaey;\n const bexdey = bex * dey;\n const dexbey = dex * bey;\n const bd = bexdey - dexbey;\n\n const alift = aex * aex + aey * aey + aez * aez;\n const blift = bex * bex + bey * bey + bez * bez;\n const clift = cex * cex + cey * cey + cez * cez;\n const dlift = dex * dex + dey * dey + dez * dez;\n\n const det =\n (clift * (dez * ab + aez * bd + bez * da) - dlift * (aez * bc - bez * ac + cez * ab)) +\n (alift * (bez * cd - cez * bd + dez * bc) - blift * (cez * da + dez * ac + aez * cd));\n\n const aezplus = Math.abs(aez);\n const bezplus = Math.abs(bez);\n const cezplus = Math.abs(cez);\n const dezplus = Math.abs(dez);\n const aexbeyplus = Math.abs(aexbey) + Math.abs(bexaey);\n const bexceyplus = Math.abs(bexcey) + Math.abs(cexbey);\n const cexdeyplus = Math.abs(cexdey) + Math.abs(dexcey);\n const dexaeyplus = Math.abs(dexaey) + Math.abs(aexdey);\n const aexceyplus = Math.abs(aexcey) + Math.abs(cexaey);\n const bexdeyplus = Math.abs(bexdey) + Math.abs(dexbey);\n const permanent =\n (cexdeyplus * bezplus + bexdeyplus * cezplus + bexceyplus * dezplus) * alift +\n (dexaeyplus * cezplus + aexceyplus * dezplus + cexdeyplus * aezplus) * blift +\n (aexbeyplus * dezplus + bexdeyplus * aezplus + dexaeyplus * bezplus) * clift +\n (bexceyplus * aezplus + aexceyplus * bezplus + aexbeyplus * cezplus) * dlift;\n\n const errbound = isperrboundA * permanent;\n if (det > errbound || -det > errbound) {\n return det;\n }\n return -insphereadapt(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, ez, permanent);\n}\n\nexport function inspherefast(pax, pay, paz, pbx, pby, pbz, pcx, pcy, pcz, pdx, pdy, pdz, pex, pey, pez) {\n const aex = pax - pex;\n const bex = pbx - pex;\n const cex = pcx - pex;\n const dex = pdx - pex;\n const aey = pay - pey;\n const bey = pby - pey;\n const cey = pcy - pey;\n const dey = pdy - pey;\n const aez = paz - pez;\n const bez = pbz - pez;\n const cez = pcz - pez;\n const dez = pdz - pez;\n\n const ab = aex * bey - bex * aey;\n const bc = bex * cey - cex * bey;\n const cd = cex * dey - dex * cey;\n const da = dex * aey - aex * dey;\n const ac = aex * cey - cex * aey;\n const bd = bex * dey - dex * bey;\n\n const abc = aez * bc - bez * ac + cez * ab;\n const bcd = bez * cd - cez * bd + dez * bc;\n const cda = cez * da + dez * ac + aez * cd;\n const dab = dez * ab + aez * bd + bez * da;\n\n const alift = aex * aex + aey * aey + aez * aez;\n const blift = bex * bex + bey * bey + bez * bez;\n const clift = cex * cex + cey * cey + cez * cez;\n const dlift = dex * dex + dey * dey + dez * dez;\n\n return (clift * dab - dlift * abc) + (alift * bcd - blift * cda);\n}\n", "\nconst EPSILON = Math.pow(2, -52);\nconst EDGE_STACK = new Uint32Array(512);\n\nimport {orient2d} from 'robust-predicates';\n\nexport default class Delaunator {\n\n static from(points, getX = defaultGetX, getY = defaultGetY) {\n const n = points.length;\n const coords = new Float64Array(n * 2);\n\n for (let i = 0; i < n; i++) {\n const p = points[i];\n coords[2 * i] = getX(p);\n coords[2 * i + 1] = getY(p);\n }\n\n return new Delaunator(coords);\n }\n\n constructor(coords) {\n const n = coords.length >> 1;\n if (n > 0 && typeof coords[0] !== 'number') throw new Error('Expected coords to contain numbers.');\n\n this.coords = coords;\n\n // arrays that will store the triangulation graph\n const maxTriangles = Math.max(2 * n - 5, 0);\n this._triangles = new Uint32Array(maxTriangles * 3);\n this._halfedges = new Int32Array(maxTriangles * 3);\n\n // temporary arrays for tracking the edges of the advancing convex hull\n this._hashSize = Math.ceil(Math.sqrt(n));\n this._hullPrev = new Uint32Array(n); // edge to prev edge\n this._hullNext = new Uint32Array(n); // edge to next edge\n this._hullTri = new Uint32Array(n); // edge to adjacent triangle\n this._hullHash = new Int32Array(this._hashSize); // angular edge hash\n\n // temporary arrays for sorting points\n this._ids = new Uint32Array(n);\n this._dists = new Float64Array(n);\n\n this.update();\n }\n\n update() {\n const {coords, _hullPrev: hullPrev, _hullNext: hullNext, _hullTri: hullTri, _hullHash: hullHash} = this;\n const n = coords.length >> 1;\n\n // populate an array of point indices; calculate input data bbox\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n\n for (let i = 0; i < n; i++) {\n const x = coords[2 * i];\n const y = coords[2 * i + 1];\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n this._ids[i] = i;\n }\n const cx = (minX + maxX) / 2;\n const cy = (minY + maxY) / 2;\n\n let i0, i1, i2;\n\n // pick a seed point close to the center\n for (let i = 0, minDist = Infinity; i < n; i++) {\n const d = dist(cx, cy, coords[2 * i], coords[2 * i + 1]);\n if (d < minDist) {\n i0 = i;\n minDist = d;\n }\n }\n const i0x = coords[2 * i0];\n const i0y = coords[2 * i0 + 1];\n\n // find the point closest to the seed\n for (let i = 0, minDist = Infinity; i < n; i++) {\n if (i === i0) continue;\n const d = dist(i0x, i0y, coords[2 * i], coords[2 * i + 1]);\n if (d < minDist && d > 0) {\n i1 = i;\n minDist = d;\n }\n }\n let i1x = coords[2 * i1];\n let i1y = coords[2 * i1 + 1];\n\n let minRadius = Infinity;\n\n // find the third point which forms the smallest circumcircle with the first two\n for (let i = 0; i < n; i++) {\n if (i === i0 || i === i1) continue;\n const r = circumradius(i0x, i0y, i1x, i1y, coords[2 * i], coords[2 * i + 1]);\n if (r < minRadius) {\n i2 = i;\n minRadius = r;\n }\n }\n let i2x = coords[2 * i2];\n let i2y = coords[2 * i2 + 1];\n\n if (minRadius === Infinity) {\n // order collinear points by dx (or dy if all x are identical)\n // and return the list as a hull\n for (let i = 0; i < n; i++) {\n this._dists[i] = (coords[2 * i] - coords[0]) || (coords[2 * i + 1] - coords[1]);\n }\n quicksort(this._ids, this._dists, 0, n - 1);\n const hull = new Uint32Array(n);\n let j = 0;\n for (let i = 0, d0 = -Infinity; i < n; i++) {\n const id = this._ids[i];\n const d = this._dists[id];\n if (d > d0) {\n hull[j++] = id;\n d0 = d;\n }\n }\n this.hull = hull.subarray(0, j);\n this.triangles = new Uint32Array(0);\n this.halfedges = new Uint32Array(0);\n return;\n }\n\n // swap the order of the seed points for counter-clockwise orientation\n if (orient2d(i0x, i0y, i1x, i1y, i2x, i2y) < 0) {\n const i = i1;\n const x = i1x;\n const y = i1y;\n i1 = i2;\n i1x = i2x;\n i1y = i2y;\n i2 = i;\n i2x = x;\n i2y = y;\n }\n\n const center = circumcenter(i0x, i0y, i1x, i1y, i2x, i2y);\n this._cx = center.x;\n this._cy = center.y;\n\n for (let i = 0; i < n; i++) {\n this._dists[i] = dist(coords[2 * i], coords[2 * i + 1], center.x, center.y);\n }\n\n // sort the points by distance from the seed triangle circumcenter\n quicksort(this._ids, this._dists, 0, n - 1);\n\n // set up the seed triangle as the starting hull\n this._hullStart = i0;\n let hullSize = 3;\n\n hullNext[i0] = hullPrev[i2] = i1;\n hullNext[i1] = hullPrev[i0] = i2;\n hullNext[i2] = hullPrev[i1] = i0;\n\n hullTri[i0] = 0;\n hullTri[i1] = 1;\n hullTri[i2] = 2;\n\n hullHash.fill(-1);\n hullHash[this._hashKey(i0x, i0y)] = i0;\n hullHash[this._hashKey(i1x, i1y)] = i1;\n hullHash[this._hashKey(i2x, i2y)] = i2;\n\n this.trianglesLen = 0;\n this._addTriangle(i0, i1, i2, -1, -1, -1);\n\n for (let k = 0, xp, yp; k < this._ids.length; k++) {\n const i = this._ids[k];\n const x = coords[2 * i];\n const y = coords[2 * i + 1];\n\n // skip near-duplicate points\n if (k > 0 && Math.abs(x - xp) <= EPSILON && Math.abs(y - yp) <= EPSILON) continue;\n xp = x;\n yp = y;\n\n // skip seed triangle points\n if (i === i0 || i === i1 || i === i2) continue;\n\n // find a visible edge on the convex hull using edge hash\n let start = 0;\n for (let j = 0, key = this._hashKey(x, y); j < this._hashSize; j++) {\n start = hullHash[(key + j) % this._hashSize];\n if (start !== -1 && start !== hullNext[start]) break;\n }\n\n start = hullPrev[start];\n let e = start, q;\n while (q = hullNext[e], orient2d(x, y, coords[2 * e], coords[2 * e + 1], coords[2 * q], coords[2 * q + 1]) >= 0) {\n e = q;\n if (e === start) {\n e = -1;\n break;\n }\n }\n if (e === -1) continue; // likely a near-duplicate point; skip it\n\n // add the first triangle from the point\n let t = this._addTriangle(e, i, hullNext[e], -1, -1, hullTri[e]);\n\n // recursively flip triangles from the point until they satisfy the Delaunay condition\n hullTri[i] = this._legalize(t + 2);\n hullTri[e] = t; // keep track of boundary triangles on the hull\n hullSize++;\n\n // walk forward through the hull, adding more triangles and flipping recursively\n let n = hullNext[e];\n while (q = hullNext[n], orient2d(x, y, coords[2 * n], coords[2 * n + 1], coords[2 * q], coords[2 * q + 1]) < 0) {\n t = this._addTriangle(n, i, q, hullTri[i], -1, hullTri[n]);\n hullTri[i] = this._legalize(t + 2);\n hullNext[n] = n; // mark as removed\n hullSize--;\n n = q;\n }\n\n // walk backward from the other side, adding more triangles and flipping\n if (e === start) {\n while (q = hullPrev[e], orient2d(x, y, coords[2 * q], coords[2 * q + 1], coords[2 * e], coords[2 * e + 1]) < 0) {\n t = this._addTriangle(q, i, e, -1, hullTri[e], hullTri[q]);\n this._legalize(t + 2);\n hullTri[q] = t;\n hullNext[e] = e; // mark as removed\n hullSize--;\n e = q;\n }\n }\n\n // update the hull indices\n this._hullStart = hullPrev[i] = e;\n hullNext[e] = hullPrev[n] = i;\n hullNext[i] = n;\n\n // save the two new edges in the hash table\n hullHash[this._hashKey(x, y)] = i;\n hullHash[this._hashKey(coords[2 * e], coords[2 * e + 1])] = e;\n }\n\n this.hull = new Uint32Array(hullSize);\n for (let i = 0, e = this._hullStart; i < hullSize; i++) {\n this.hull[i] = e;\n e = hullNext[e];\n }\n\n // trim typed triangle mesh arrays\n this.triangles = this._triangles.subarray(0, this.trianglesLen);\n this.halfedges = this._halfedges.subarray(0, this.trianglesLen);\n }\n\n _hashKey(x, y) {\n return Math.floor(pseudoAngle(x - this._cx, y - this._cy) * this._hashSize) % this._hashSize;\n }\n\n _legalize(a) {\n const {_triangles: triangles, _halfedges: halfedges, coords} = this;\n\n let i = 0;\n let ar = 0;\n\n // recursion eliminated with a fixed-size stack\n while (true) {\n const b = halfedges[a];\n\n /* if the pair of triangles doesn't satisfy the Delaunay condition\n * (p1 is inside the circumcircle of [p0, pl, pr]), flip them,\n * then do the same check/flip recursively for the new pair of triangles\n *\n * pl pl\n * /||\\ / \\\n * al/ || \\bl al/ \\a\n * / || \\ / \\\n * / a||b \\ flip /___ar___\\\n * p0\\ || /p1 => p0\\---bl---/p1\n * \\ || / \\ /\n * ar\\ || /br b\\ /br\n * \\||/ \\ /\n * pr pr\n */\n const a0 = a - a % 3;\n ar = a0 + (a + 2) % 3;\n\n if (b === -1) { // convex hull edge\n if (i === 0) break;\n a = EDGE_STACK[--i];\n continue;\n }\n\n const b0 = b - b % 3;\n const al = a0 + (a + 1) % 3;\n const bl = b0 + (b + 2) % 3;\n\n const p0 = triangles[ar];\n const pr = triangles[a];\n const pl = triangles[al];\n const p1 = triangles[bl];\n\n const illegal = inCircle(\n coords[2 * p0], coords[2 * p0 + 1],\n coords[2 * pr], coords[2 * pr + 1],\n coords[2 * pl], coords[2 * pl + 1],\n coords[2 * p1], coords[2 * p1 + 1]);\n\n if (illegal) {\n triangles[a] = p1;\n triangles[b] = p0;\n\n const hbl = halfedges[bl];\n\n // edge swapped on the other side of the hull (rare); fix the halfedge reference\n if (hbl === -1) {\n let e = this._hullStart;\n do {\n if (this._hullTri[e] === bl) {\n this._hullTri[e] = a;\n break;\n }\n e = this._hullPrev[e];\n } while (e !== this._hullStart);\n }\n this._link(a, hbl);\n this._link(b, halfedges[ar]);\n this._link(ar, bl);\n\n const br = b0 + (b + 1) % 3;\n\n // don't worry about hitting the cap: it can only happen on extremely degenerate input\n if (i < EDGE_STACK.length) {\n EDGE_STACK[i++] = br;\n }\n } else {\n if (i === 0) break;\n a = EDGE_STACK[--i];\n }\n }\n\n return ar;\n }\n\n _link(a, b) {\n this._halfedges[a] = b;\n if (b !== -1) this._halfedges[b] = a;\n }\n\n // add a new triangle given vertex indices and adjacent half-edge ids\n _addTriangle(i0, i1, i2, a, b, c) {\n const t = this.trianglesLen;\n\n this._triangles[t] = i0;\n this._triangles[t + 1] = i1;\n this._triangles[t + 2] = i2;\n\n this._link(t, a);\n this._link(t + 1, b);\n this._link(t + 2, c);\n\n this.trianglesLen += 3;\n\n return t;\n }\n}\n\n// monotonically increases with real angle, but doesn't need expensive trigonometry\nfunction pseudoAngle(dx, dy) {\n const p = dx / (Math.abs(dx) + Math.abs(dy));\n return (dy > 0 ? 3 - p : 1 + p) / 4; // [0..1]\n}\n\nfunction dist(ax, ay, bx, by) {\n const dx = ax - bx;\n const dy = ay - by;\n return dx * dx + dy * dy;\n}\n\nfunction inCircle(ax, ay, bx, by, cx, cy, px, py) {\n const dx = ax - px;\n const dy = ay - py;\n const ex = bx - px;\n const ey = by - py;\n const fx = cx - px;\n const fy = cy - py;\n\n const ap = dx * dx + dy * dy;\n const bp = ex * ex + ey * ey;\n const cp = fx * fx + fy * fy;\n\n return dx * (ey * cp - bp * fy) -\n dy * (ex * cp - bp * fx) +\n ap * (ex * fy - ey * fx) < 0;\n}\n\nfunction circumradius(ax, ay, bx, by, cx, cy) {\n const dx = bx - ax;\n const dy = by - ay;\n const ex = cx - ax;\n const ey = cy - ay;\n\n const bl = dx * dx + dy * dy;\n const cl = ex * ex + ey * ey;\n const d = 0.5 / (dx * ey - dy * ex);\n\n const x = (ey * bl - dy * cl) * d;\n const y = (dx * cl - ex * bl) * d;\n\n return x * x + y * y;\n}\n\nfunction circumcenter(ax, ay, bx, by, cx, cy) {\n const dx = bx - ax;\n const dy = by - ay;\n const ex = cx - ax;\n const ey = cy - ay;\n\n const bl = dx * dx + dy * dy;\n const cl = ex * ex + ey * ey;\n const d = 0.5 / (dx * ey - dy * ex);\n\n const x = ax + (ey * bl - dy * cl) * d;\n const y = ay + (dx * cl - ex * bl) * d;\n\n return {x, y};\n}\n\nfunction quicksort(ids, dists, left, right) {\n if (right - left <= 20) {\n for (let i = left + 1; i <= right; i++) {\n const temp = ids[i];\n const tempDist = dists[temp];\n let j = i - 1;\n while (j >= left && dists[ids[j]] > tempDist) ids[j + 1] = ids[j--];\n ids[j + 1] = temp;\n }\n } else {\n const median = (left + right) >> 1;\n let i = left + 1;\n let j = right;\n swap(ids, median, i);\n if (dists[ids[left]] > dists[ids[right]]) swap(ids, left, right);\n if (dists[ids[i]] > dists[ids[right]]) swap(ids, i, right);\n if (dists[ids[left]] > dists[ids[i]]) swap(ids, left, i);\n\n const temp = ids[i];\n const tempDist = dists[temp];\n while (true) {\n do i++; while (dists[ids[i]] < tempDist);\n do j--; while (dists[ids[j]] > tempDist);\n if (j < i) break;\n swap(ids, i, j);\n }\n ids[left + 1] = ids[j];\n ids[j] = temp;\n\n if (right - i + 1 >= j - left) {\n quicksort(ids, dists, i, right);\n quicksort(ids, dists, left, j - 1);\n } else {\n quicksort(ids, dists, left, j - 1);\n quicksort(ids, dists, i, right);\n }\n }\n}\n\nfunction swap(arr, i, j) {\n const tmp = arr[i];\n arr[i] = arr[j];\n arr[j] = tmp;\n}\n\nfunction defaultGetX(p) {\n return p[0];\n}\nfunction defaultGetY(p) {\n return p[1];\n}\n", "const epsilon = 1e-6;\n\nexport default class Path {\n constructor() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n }\n moveTo(x, y) {\n this._ += `M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n }\n closePath() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n }\n lineTo(x, y) {\n this._ += `L${this._x1 = +x},${this._y1 = +y}`;\n }\n arc(x, y, r) {\n x = +x, y = +y, r = +r;\n const x0 = x + r;\n const y0 = y;\n if (r < 0) throw new Error(\"negative radius\");\n if (this._x1 === null) this._ += `M${x0},${y0}`;\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) this._ += \"L\" + x0 + \",\" + y0;\n if (!r) return;\n this._ += `A${r},${r},0,1,1,${x - r},${y}A${r},${r},0,1,1,${this._x1 = x0},${this._y1 = y0}`;\n }\n rect(x, y, w, h) {\n this._ += `M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${+w}v${+h}h${-w}Z`;\n }\n value() {\n return this._ || null;\n }\n}\n", "export default class Polygon {\n constructor() {\n this._ = [];\n }\n moveTo(x, y) {\n this._.push([x, y]);\n }\n closePath() {\n this._.push(this._[0].slice());\n }\n lineTo(x, y) {\n this._.push([x, y]);\n }\n value() {\n return this._.length ? this._ : null;\n }\n}\n", "import Path from \"./path.js\";\nimport Polygon from \"./polygon.js\";\n\nexport default class Voronoi {\n constructor(delaunay, [xmin, ymin, xmax, ymax] = [0, 0, 960, 500]) {\n if (!((xmax = +xmax) >= (xmin = +xmin)) || !((ymax = +ymax) >= (ymin = +ymin))) throw new Error(\"invalid bounds\");\n this.delaunay = delaunay;\n this._circumcenters = new Float64Array(delaunay.points.length * 2);\n this.vectors = new Float64Array(delaunay.points.length * 2);\n this.xmax = xmax, this.xmin = xmin;\n this.ymax = ymax, this.ymin = ymin;\n this._init();\n }\n update() {\n this.delaunay.update();\n this._init();\n return this;\n }\n _init() {\n const {delaunay: {points, hull, triangles}, vectors} = this;\n let bx, by; // lazily computed barycenter of the hull\n\n // Compute circumcenters.\n const circumcenters = this.circumcenters = this._circumcenters.subarray(0, triangles.length / 3 * 2);\n for (let i = 0, j = 0, n = triangles.length, x, y; i < n; i += 3, j += 2) {\n const t1 = triangles[i] * 2;\n const t2 = triangles[i + 1] * 2;\n const t3 = triangles[i + 2] * 2;\n const x1 = points[t1];\n const y1 = points[t1 + 1];\n const x2 = points[t2];\n const y2 = points[t2 + 1];\n const x3 = points[t3];\n const y3 = points[t3 + 1];\n\n const dx = x2 - x1;\n const dy = y2 - y1;\n const ex = x3 - x1;\n const ey = y3 - y1;\n const ab = (dx * ey - dy * ex) * 2;\n\n if (Math.abs(ab) < 1e-9) {\n // For a degenerate triangle, the circumcenter is at the infinity, in a\n // direction orthogonal to the halfedge and away from the \u201Ccenter\u201D of\n // the diagram <bx, by>, defined as the hull\u2019s barycenter.\n if (bx === undefined) {\n bx = by = 0;\n for (const i of hull) bx += points[i * 2], by += points[i * 2 + 1];\n bx /= hull.length, by /= hull.length;\n }\n const a = 1e9 * Math.sign((bx - x1) * ey - (by - y1) * ex);\n x = (x1 + x3) / 2 - a * ey;\n y = (y1 + y3) / 2 + a * ex;\n } else {\n const d = 1 / ab;\n const bl = dx * dx + dy * dy;\n const cl = ex * ex + ey * ey;\n x = x1 + (ey * bl - dy * cl) * d;\n y = y1 + (dx * cl - ex * bl) * d;\n }\n circumcenters[j] = x;\n circumcenters[j + 1] = y;\n }\n\n // Compute exterior cell rays.\n let h = hull[hull.length - 1];\n let p0, p1 = h * 4;\n let x0, x1 = points[2 * h];\n let y0, y1 = points[2 * h + 1];\n vectors.fill(0);\n for (let i = 0; i < hull.length; ++i) {\n h = hull[i];\n p0 = p1, x0 = x1, y0 = y1;\n p1 = h * 4, x1 = points[2 * h], y1 = points[2 * h + 1];\n vectors[p0 + 2] = vectors[p1] = y0 - y1;\n vectors[p0 + 3] = vectors[p1 + 1] = x1 - x0;\n }\n }\n render(context) {\n const buffer = context == null ? context = new Path : undefined;\n const {delaunay: {halfedges, inedges, hull}, circumcenters, vectors} = this;\n if (hull.length <= 1) return null;\n for (let i = 0, n = halfedges.length; i < n; ++i) {\n const j = halfedges[i];\n if (j < i) continue;\n const ti = Math.floor(i / 3) * 2;\n const tj = Math.floor(j / 3) * 2;\n const xi = circumcenters[ti];\n const yi = circumcenters[ti + 1];\n const xj = circumcenters[tj];\n const yj = circumcenters[tj + 1];\n this._renderSegment(xi, yi, xj, yj, context);\n }\n let h0, h1 = hull[hull.length - 1];\n for (let i = 0; i < hull.length; ++i) {\n h0 = h1, h1 = hull[i];\n const t = Math.floor(inedges[h1] / 3) * 2;\n const x = circumcenters[t];\n const y = circumcenters[t + 1];\n const v = h0 * 4;\n const p = this._project(x, y, vectors[v + 2], vectors[v + 3]);\n if (p) this._renderSegment(x, y, p[0], p[1], context);\n }\n return buffer && buffer.value();\n }\n renderBounds(context) {\n const buffer = context == null ? context = new Path : undefined;\n context.rect(this.xmin, this.ymin, this.xmax - this.xmin, this.ymax - this.ymin);\n return buffer && buffer.value();\n }\n renderCell(i, context) {\n const buffer = context == null ? context = new Path : undefined;\n const points = this._clip(i);\n if (points === null || !points.length) return;\n context.moveTo(points[0], points[1]);\n let n = points.length;\n while (points[0] === points[n-2] && points[1] === points[n-1] && n > 1) n -= 2;\n for (let i = 2; i < n; i += 2) {\n if (points[i] !== points[i-2] || points[i+1] !== points[i-1])\n context.lineTo(points[i], points[i + 1]);\n }\n context.closePath();\n return buffer && buffer.value();\n }\n *cellPolygons() {\n const {delaunay: {points}} = this;\n for (let i = 0, n = points.length / 2; i < n; ++i) {\n const cell = this.cellPolygon(i);\n if (cell) cell.index = i, yield cell;\n }\n }\n cellPolygon(i) {\n const polygon = new Polygon;\n this.renderCell(i, polygon);\n return polygon.value();\n }\n _renderSegment(x0, y0, x1, y1, context) {\n let S;\n const c0 = this._regioncode(x0, y0);\n const c1 = this._regioncode(x1, y1);\n if (c0 === 0 && c1 === 0) {\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n } else if (S = this._clipSegment(x0, y0, x1, y1, c0, c1)) {\n context.moveTo(S[0], S[1]);\n context.lineTo(S[2], S[3]);\n }\n }\n contains(i, x, y) {\n if ((x = +x, x !== x) || (y = +y, y !== y)) return false;\n return this.delaunay._step(i, x, y) === i;\n }\n *neighbors(i) {\n const ci = this._clip(i);\n if (ci) for (const j of this.delaunay.neighbors(i)) {\n const cj = this._clip(j);\n // find the common edge\n if (cj) loop: for (let ai = 0, li = ci.length; ai < li; ai += 2) {\n for (let aj = 0, lj = cj.length; aj < lj; aj += 2) {\n if (ci[ai] === cj[aj]\n && ci[ai + 1] === cj[aj + 1]\n && ci[(ai + 2) % li] === cj[(aj + lj - 2) % lj]\n && ci[(ai + 3) % li] === cj[(aj + lj - 1) % lj]) {\n yield j;\n break loop;\n }\n }\n }\n }\n }\n _cell(i) {\n const {circumcenters, delaunay: {inedges, halfedges, triangles}} = this;\n const e0 = inedges[i];\n if (e0 === -1) return null; // coincident point\n const points = [];\n let e = e0;\n do {\n const t = Math.floor(e / 3);\n points.push(circumcenters[t * 2], circumcenters[t * 2 + 1]);\n e = e % 3 === 2 ? e - 2 : e + 1;\n if (triangles[e] !== i) break; // bad triangulation\n e = halfedges[e];\n } while (e !== e0 && e !== -1);\n return points;\n }\n _clip(i) {\n // degenerate case (1 valid point: return the box)\n if (i === 0 && this.delaunay.hull.length === 1) {\n return [this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax, this.xmin, this.ymin];\n }\n const points = this._cell(i);\n if (points === null) return null;\n const {vectors: V} = this;\n const v = i * 4;\n return this._simplify(V[v] || V[v + 1]\n ? this._clipInfinite(i, points, V[v], V[v + 1], V[v + 2], V[v + 3])\n : this._clipFinite(i, points));\n }\n _clipFinite(i, points) {\n const n = points.length;\n let P = null;\n let x0, y0, x1 = points[n - 2], y1 = points[n - 1];\n let c0, c1 = this._regioncode(x1, y1);\n let e0, e1 = 0;\n for (let j = 0; j < n; j += 2) {\n x0 = x1, y0 = y1, x1 = points[j], y1 = points[j + 1];\n c0 = c1, c1 = this._regioncode(x1, y1);\n if (c0 === 0 && c1 === 0) {\n e0 = e1, e1 = 0;\n if (P) P.push(x1, y1);\n else P = [x1, y1];\n } else {\n let S, sx0, sy0, sx1, sy1;\n if (c0 === 0) {\n if ((S = this._clipSegment(x0, y0, x1, y1, c0, c1)) === null) continue;\n [sx0, sy0, sx1, sy1] = S;\n } else {\n if ((S = this._clipSegment(x1, y1, x0, y0, c1, c0)) === null) continue;\n [sx1, sy1, sx0, sy0] = S;\n e0 = e1, e1 = this._edgecode(sx0, sy0);\n if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n if (P) P.push(sx0, sy0);\n else P = [sx0, sy0];\n }\n e0 = e1, e1 = this._edgecode(sx1, sy1);\n if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n if (P) P.push(sx1, sy1);\n else P = [sx1, sy1];\n }\n }\n if (P) {\n e0 = e1, e1 = this._edgecode(P[0], P[1]);\n if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n } else if (this.contains(i, (this.xmin + this.xmax) / 2, (this.ymin + this.ymax) / 2)) {\n return [this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax, this.xmin, this.ymin];\n }\n return P;\n }\n _clipSegment(x0, y0, x1, y1, c0, c1) {\n // for more robustness, always consider the segment in the same order\n const flip = c0 < c1;\n if (flip) [x0, y0, x1, y1, c0, c1] = [x1, y1, x0, y0, c1, c0];\n while (true) {\n if (c0 === 0 && c1 === 0) return flip ? [x1, y1, x0, y0] : [x0, y0, x1, y1];\n if (c0 & c1) return null;\n let x, y, c = c0 || c1;\n if (c & 0b1000) x = x0 + (x1 - x0) * (this.ymax - y0) / (y1 - y0), y = this.ymax;\n else if (c & 0b0100) x = x0 + (x1 - x0) * (this.ymin - y0) / (y1 - y0), y = this.ymin;\n else if (c & 0b0010) y = y0 + (y1 - y0) * (this.xmax - x0) / (x1 - x0), x = this.xmax;\n else y = y0 + (y1 - y0) * (this.xmin - x0) / (x1 - x0), x = this.xmin;\n if (c0) x0 = x, y0 = y, c0 = this._regioncode(x0, y0);\n else x1 = x, y1 = y, c1 = this._regioncode(x1, y1);\n }\n }\n _clipInfinite(i, points, vx0, vy0, vxn, vyn) {\n let P = Array.from(points), p;\n if (p = this._project(P[0], P[1], vx0, vy0)) P.unshift(p[0], p[1]);\n if (p = this._project(P[P.length - 2], P[P.length - 1], vxn, vyn)) P.push(p[0], p[1]);\n if (P = this._clipFinite(i, P)) {\n for (let j = 0, n = P.length, c0, c1 = this._edgecode(P[n - 2], P[n - 1]); j < n; j += 2) {\n c0 = c1, c1 = this._edgecode(P[j], P[j + 1]);\n if (c0 && c1) j = this._edge(i, c0, c1, P, j), n = P.length;\n }\n } else if (this.contains(i, (this.xmin + this.xmax) / 2, (this.ymin + this.ymax) / 2)) {\n P = [this.xmin, this.ymin, this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax];\n }\n return P;\n }\n _edge(i, e0, e1, P, j) {\n while (e0 !== e1) {\n let x, y;\n switch (e0) {\n case 0b0101: e0 = 0b0100; continue; // top-left\n case 0b0100: e0 = 0b0110, x = this.xmax, y = this.ymin; break; // top\n case 0b0110: e0 = 0b0010; continue; // top-right\n case 0b0010: e0 = 0b1010, x = this.xmax, y = this.ymax; break; // right\n case 0b1010: e0 = 0b1000; continue; // bottom-right\n case 0b1000: e0 = 0b1001, x = this.xmin, y = this.ymax; break; // bottom\n case 0b1001: e0 = 0b0001; continue; // bottom-left\n case 0b0001: e0 = 0b0101, x = this.xmin, y = this.ymin; break; // left\n }\n // Note: this implicitly checks for out of bounds: if P[j] or P[j+1] are\n // undefined, the conditional statement will be executed.\n if ((P[j] !== x || P[j + 1] !== y) && this.contains(i, x, y)) {\n P.splice(j, 0, x, y), j += 2;\n }\n }\n return j;\n }\n _project(x0, y0, vx, vy) {\n let t = Infinity, c, x, y;\n if (vy < 0) { // top\n if (y0 <= this.ymin) return null;\n if ((c = (this.ymin - y0) / vy) < t) y = this.ymin, x = x0 + (t = c) * vx;\n } else if (vy > 0) { // bottom\n if (y0 >= this.ymax) return null;\n if ((c = (this.ymax - y0) / vy) < t) y = this.ymax, x = x0 + (t = c) * vx;\n }\n if (vx > 0) { // right\n if (x0 >= this.xmax) return null;\n if ((c = (this.xmax - x0) / vx) < t) x = this.xmax, y = y0 + (t = c) * vy;\n } else if (vx < 0) { // left\n if (x0 <= this.xmin) return null;\n if ((c = (this.xmin - x0) / vx) < t) x = this.xmin, y = y0 + (t = c) * vy;\n }\n return [x, y];\n }\n _edgecode(x, y) {\n return (x === this.xmin ? 0b0001\n : x === this.xmax ? 0b0010 : 0b0000)\n | (y === this.ymin ? 0b0100\n : y === this.ymax ? 0b1000 : 0b0000);\n }\n _regioncode(x, y) {\n return (x < this.xmin ? 0b0001\n : x > this.xmax ? 0b0010 : 0b0000)\n | (y < this.ymin ? 0b0100\n : y > this.ymax ? 0b1000 : 0b0000);\n }\n _simplify(P) {\n if (P && P.length > 4) {\n for (let i = 0; i < P.length; i+= 2) {\n const j = (i + 2) % P.length, k = (i + 4) % P.length;\n if (P[i] === P[j] && P[j] === P[k] || P[i + 1] === P[j + 1] && P[j + 1] === P[k + 1]) {\n P.splice(j, 2), i -= 2;\n }\n }\n if (!P.length) P = null;\n }\n return P;\n }\n}\n", "import Delaunator from \"delaunator\";\nimport Path from \"./path.js\";\nimport Polygon from \"./polygon.js\";\nimport Voronoi from \"./voronoi.js\";\n\nconst tau = 2 * Math.PI, pow = Math.pow;\n\nfunction pointX(p) {\n return p[0];\n}\n\nfunction pointY(p) {\n return p[1];\n}\n\n// A triangulation is collinear if all its triangles have a non-null area\nfunction collinear(d) {\n const {triangles, coords} = d;\n for (let i = 0; i < triangles.length; i += 3) {\n const a = 2 * triangles[i],\n b = 2 * triangles[i + 1],\n c = 2 * triangles[i + 2],\n cross = (coords[c] - coords[a]) * (coords[b + 1] - coords[a + 1])\n - (coords[b] - coords[a]) * (coords[c + 1] - coords[a + 1]);\n if (cross > 1e-10) return false;\n }\n return true;\n}\n\nfunction jitter(x, y, r) {\n return [x + Math.sin(x + y) * r, y + Math.cos(x - y) * r];\n}\n\nexport default class Delaunay {\n static from(points, fx = pointX, fy = pointY, that) {\n return new Delaunay(\"length\" in points\n ? flatArray(points, fx, fy, that)\n : Float64Array.from(flatIterable(points, fx, fy, that)));\n }\n constructor(points) {\n this._delaunator = new Delaunator(points);\n this.inedges = new Int32Array(points.length / 2);\n this._hullIndex = new Int32Array(points.length / 2);\n this.points = this._delaunator.coords;\n this._init();\n }\n update() {\n this._delaunator.update();\n this._init();\n return this;\n }\n _init() {\n const d = this._delaunator, points = this.points;\n\n // check for collinear\n if (d.hull && d.hull.length > 2 && collinear(d)) {\n this.collinear = Int32Array.from({length: points.length/2}, (_,i) => i)\n .sort((i, j) => points[2 * i] - points[2 * j] || points[2 * i + 1] - points[2 * j + 1]); // for exact neighbors\n const e = this.collinear[0], f = this.collinear[this.collinear.length - 1],\n bounds = [ points[2 * e], points[2 * e + 1], points[2 * f], points[2 * f + 1] ],\n r = 1e-8 * Math.hypot(bounds[3] - bounds[1], bounds[2] - bounds[0]);\n for (let i = 0, n = points.length / 2; i < n; ++i) {\n const p = jitter(points[2 * i], points[2 * i + 1], r);\n points[2 * i] = p[0];\n points[2 * i + 1] = p[1];\n }\n this._delaunator = new Delaunator(points);\n } else {\n delete this.collinear;\n }\n\n const halfedges = this.halfedges = this._delaunator.halfedges;\n const hull = this.hull = this._delaunator.hull;\n const triangles = this.triangles = this._delaunator.triangles;\n const inedges = this.inedges.fill(-1);\n const hullIndex = this._hullIndex.fill(-1);\n\n // Compute an index from each point to an (arbitrary) incoming halfedge\n // Used to give the first neighbor of each point; for this reason,\n // on the hull we give priority to exterior halfedges\n for (let e = 0, n = halfedges.length; e < n; ++e) {\n const p = triangles[e % 3 === 2 ? e - 2 : e + 1];\n if (halfedges[e] === -1 || inedges[p] === -1) inedges[p] = e;\n }\n for (let i = 0, n = hull.length; i < n; ++i) {\n hullIndex[hull[i]] = i;\n }\n\n // degenerate case: 1 or 2 (distinct) points\n if (hull.length <= 2 && hull.length > 0) {\n this.triangles = new Int32Array(3).fill(-1);\n this.halfedges = new Int32Array(3).fill(-1);\n this.triangles[0] = hull[0];\n inedges[hull[0]] = 1;\n if (hull.length === 2) {\n inedges[hull[1]] = 0;\n this.triangles[1] = hull[1];\n this.triangles[2] = hull[1];\n }\n }\n }\n voronoi(bounds) {\n return new Voronoi(this, bounds);\n }\n *neighbors(i) {\n const {inedges, hull, _hullIndex, halfedges, triangles, collinear} = this;\n\n // degenerate case with several collinear points\n if (collinear) {\n const l = collinear.indexOf(i);\n if (l > 0) yield collinear[l - 1];\n if (l < collinear.length - 1) yield collinear[l + 1];\n return;\n }\n\n const e0 = inedges[i];\n if (e0 === -1) return; // coincident point\n let e = e0, p0 = -1;\n do {\n yield p0 = triangles[e];\n e = e % 3 === 2 ? e - 2 : e + 1;\n if (triangles[e] !== i) return; // bad triangulation\n e = halfedges[e];\n if (e === -1) {\n const p = hull[(_hullIndex[i] + 1) % hull.length];\n if (p !== p0) yield p;\n return;\n }\n } while (e !== e0);\n }\n find(x, y, i = 0) {\n if ((x = +x, x !== x) || (y = +y, y !== y)) return -1;\n const i0 = i;\n let c;\n while ((c = this._step(i, x, y)) >= 0 && c !== i && c !== i0) i = c;\n return c;\n }\n _step(i, x, y) {\n const {inedges, hull, _hullIndex, halfedges, triangles, points} = this;\n if (inedges[i] === -1 || !points.length) return (i + 1) % (points.length >> 1);\n let c = i;\n let dc = pow(x - points[i * 2], 2) + pow(y - points[i * 2 + 1], 2);\n const e0 = inedges[i];\n let e = e0;\n do {\n let t = triangles[e];\n const dt = pow(x - points[t * 2], 2) + pow(y - points[t * 2 + 1], 2);\n if (dt < dc) dc = dt, c = t;\n e = e % 3 === 2 ? e - 2 : e + 1;\n if (triangles[e] !== i) break; // bad triangulation\n e = halfedges[e];\n if (e === -1) {\n e = hull[(_hullIndex[i] + 1) % hull.length];\n if (e !== t) {\n if (pow(x - points[e * 2], 2) + pow(y - points[e * 2 + 1], 2) < dc) return e;\n }\n break;\n }\n } while (e !== e0);\n return c;\n }\n render(context) {\n const buffer = context == null ? context = new Path : undefined;\n const {points, halfedges, triangles} = this;\n for (let i = 0, n = halfedges.length; i < n; ++i) {\n const j = halfedges[i];\n if (j < i) continue;\n const ti = triangles[i] * 2;\n const tj = triangles[j] * 2;\n context.moveTo(points[ti], points[ti + 1]);\n context.lineTo(points[tj], points[tj + 1]);\n }\n this.renderHull(context);\n return buffer && buffer.value();\n }\n renderPoints(context, r) {\n if (r === undefined && (!context || typeof context.moveTo !== \"function\")) r = context, context = null;\n r = r == undefined ? 2 : +r;\n const buffer = context == null ? context = new Path : undefined;\n const {points} = this;\n for (let i = 0, n = points.length; i < n; i += 2) {\n const x = points[i], y = points[i + 1];\n context.moveTo(x + r, y);\n context.arc(x, y, r, 0, tau);\n }\n return buffer && buffer.value();\n }\n renderHull(context) {\n const buffer = context == null ? context = new Path : undefined;\n const {hull, points} = this;\n const h = hull[0] * 2, n = hull.length;\n context.moveTo(points[h], points[h + 1]);\n for (let i = 1; i < n; ++i) {\n const h = 2 * hull[i];\n context.lineTo(points[h], points[h + 1]);\n }\n context.closePath();\n return buffer && buffer.value();\n }\n hullPolygon() {\n const polygon = new Polygon;\n this.renderHull(polygon);\n return polygon.value();\n }\n renderTriangle(i, context) {\n const buffer = context == null ? context = new Path : undefined;\n const {points, triangles} = this;\n const t0 = triangles[i *= 3] * 2;\n const t1 = triangles[i + 1] * 2;\n const t2 = triangles[i + 2] * 2;\n context.moveTo(points[t0], points[t0 + 1]);\n context.lineTo(points[t1], points[t1 + 1]);\n context.lineTo(points[t2], points[t2 + 1]);\n context.closePath();\n return buffer && buffer.value();\n }\n *trianglePolygons() {\n const {triangles} = this;\n for (let i = 0, n = triangles.length / 3; i < n; ++i) {\n yield this.trianglePolygon(i);\n }\n }\n trianglePolygon(i) {\n const polygon = new Polygon;\n this.renderTriangle(i, polygon);\n return polygon.value();\n }\n}\n\nfunction flatArray(points, fx, fy, that) {\n const n = points.length;\n const array = new Float64Array(n * 2);\n for (let i = 0; i < n; ++i) {\n const p = points[i];\n array[i * 2] = fx.call(that, p, i, points);\n array[i * 2 + 1] = fy.call(that, p, i, points);\n }\n return array;\n}\n\nfunction* flatIterable(points, fx, fy, that) {\n let i = 0;\n for (const p of points) {\n yield fx.call(that, p, i, points);\n yield fy.call(that, p, i, points);\n ++i;\n }\n}\n", "import { canvas } from 'vega-canvas';\nimport { Transform } from 'vega-dataflow';\nimport { inherits, error, isFunction, constant, extent } from 'vega-util';\nimport { scale } from 'vega-scale';\nimport { random } from 'vega-statistics';\n\n/*\nCopyright (c) 2013, Jason Davies.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n * The name Jason Davies may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL JASON DAVIES BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\nOR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\nADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n// Word cloud layout by Jason Davies, https://www.jasondavies.com/wordcloud/\n// Algorithm due to Jonathan Feinberg, http://static.mrfeinberg.com/bv_ch03.pdf\n\nvar cloudRadians = Math.PI / 180,\n cw = 1 << 11 >> 5,\n ch = 1 << 11;\nfunction cloud () {\n var size = [256, 256],\n text,\n font,\n fontSize,\n fontStyle,\n fontWeight,\n rotate,\n padding,\n spiral = archimedeanSpiral,\n words = [],\n random = Math.random,\n cloud = {};\n cloud.layout = function () {\n var contextAndRatio = getContext(canvas()),\n board = zeroArray((size[0] >> 5) * size[1]),\n bounds = null,\n n = words.length,\n i = -1,\n tags = [],\n data = words.map(d => ({\n text: text(d),\n font: font(d),\n style: fontStyle(d),\n weight: fontWeight(d),\n rotate: rotate(d),\n size: ~~(fontSize(d) + 1e-14),\n padding: padding(d),\n xoff: 0,\n yoff: 0,\n x1: 0,\n y1: 0,\n x0: 0,\n y0: 0,\n hasText: false,\n sprite: null,\n datum: d\n })).sort((a, b) => b.size - a.size);\n while (++i < n) {\n var d = data[i];\n d.x = size[0] * (random() + .5) >> 1;\n d.y = size[1] * (random() + .5) >> 1;\n cloudSprite(contextAndRatio, d, data, i);\n if (d.hasText && place(board, d, bounds)) {\n tags.push(d);\n if (bounds) cloudBounds(bounds, d);else bounds = [{\n x: d.x + d.x0,\n y: d.y + d.y0\n }, {\n x: d.x + d.x1,\n y: d.y + d.y1\n }];\n // Temporary hack\n d.x -= size[0] >> 1;\n d.y -= size[1] >> 1;\n }\n }\n return tags;\n };\n function getContext(canvas) {\n canvas.width = canvas.height = 1;\n var ratio = Math.sqrt(canvas.getContext('2d').getImageData(0, 0, 1, 1).data.length >> 2);\n canvas.width = (cw << 5) / ratio;\n canvas.height = ch / ratio;\n var context = canvas.getContext('2d');\n context.fillStyle = context.strokeStyle = 'red';\n context.textAlign = 'center';\n return {\n context: context,\n ratio: ratio\n };\n }\n function place(board, tag, bounds) {\n var startX = tag.x,\n startY = tag.y,\n maxDelta = Math.hypot(size[0], size[1]),\n s = spiral(size),\n dt = random() < .5 ? 1 : -1,\n t = -dt,\n dxdy,\n dx,\n dy;\n while (dxdy = s(t += dt)) {\n dx = ~~dxdy[0];\n dy = ~~dxdy[1];\n if (Math.min(Math.abs(dx), Math.abs(dy)) >= maxDelta) break;\n tag.x = startX + dx;\n tag.y = startY + dy;\n if (tag.x + tag.x0 < 0 || tag.y + tag.y0 < 0 || tag.x + tag.x1 > size[0] || tag.y + tag.y1 > size[1]) continue;\n // TODO only check for collisions within current bounds.\n if (!bounds || !cloudCollide(tag, board, size[0])) {\n if (!bounds || collideRects(tag, bounds)) {\n var sprite = tag.sprite,\n w = tag.width >> 5,\n sw = size[0] >> 5,\n lx = tag.x - (w << 4),\n sx = lx & 0x7f,\n msx = 32 - sx,\n h = tag.y1 - tag.y0,\n x = (tag.y + tag.y0) * sw + (lx >> 5),\n last;\n for (var j = 0; j < h; j++) {\n last = 0;\n for (var i = 0; i <= w; i++) {\n board[x + i] |= last << msx | (i < w ? (last = sprite[j * w + i]) >>> sx : 0);\n }\n x += sw;\n }\n tag.sprite = null;\n return true;\n }\n }\n }\n return false;\n }\n cloud.words = function (_) {\n if (arguments.length) {\n words = _;\n return cloud;\n } else {\n return words;\n }\n };\n cloud.size = function (_) {\n if (arguments.length) {\n size = [+_[0], +_[1]];\n return cloud;\n } else {\n return size;\n }\n };\n cloud.font = function (_) {\n if (arguments.length) {\n font = functor(_);\n return cloud;\n } else {\n return font;\n }\n };\n cloud.fontStyle = function (_) {\n if (arguments.length) {\n fontStyle = functor(_);\n return cloud;\n } else {\n return fontStyle;\n }\n };\n cloud.fontWeight = function (_) {\n if (arguments.length) {\n fontWeight = functor(_);\n return cloud;\n } else {\n return fontWeight;\n }\n };\n cloud.rotate = function (_) {\n if (arguments.length) {\n rotate = functor(_);\n return cloud;\n } else {\n return rotate;\n }\n };\n cloud.text = function (_) {\n if (arguments.length) {\n text = functor(_);\n return cloud;\n } else {\n return text;\n }\n };\n cloud.spiral = function (_) {\n if (arguments.length) {\n spiral = spirals[_] || _;\n return cloud;\n } else {\n return spiral;\n }\n };\n cloud.fontSize = function (_) {\n if (arguments.length) {\n fontSize = functor(_);\n return cloud;\n } else {\n return fontSize;\n }\n };\n cloud.padding = function (_) {\n if (arguments.length) {\n padding = functor(_);\n return cloud;\n } else {\n return padding;\n }\n };\n cloud.random = function (_) {\n if (arguments.length) {\n random = _;\n return cloud;\n } else {\n return random;\n }\n };\n return cloud;\n}\n\n// Fetches a monochrome sprite bitmap for the specified text.\n// Load in batches for speed.\nfunction cloudSprite(contextAndRatio, d, data, di) {\n if (d.sprite) return;\n var c = contextAndRatio.context,\n ratio = contextAndRatio.ratio;\n c.clearRect(0, 0, (cw << 5) / ratio, ch / ratio);\n var x = 0,\n y = 0,\n maxh = 0,\n n = data.length,\n w,\n w32,\n h,\n i,\n j;\n --di;\n while (++di < n) {\n d = data[di];\n c.save();\n c.font = d.style + ' ' + d.weight + ' ' + ~~((d.size + 1) / ratio) + 'px ' + d.font;\n w = c.measureText(d.text + 'm').width * ratio;\n h = d.size << 1;\n if (d.rotate) {\n var sr = Math.sin(d.rotate * cloudRadians),\n cr = Math.cos(d.rotate * cloudRadians),\n wcr = w * cr,\n wsr = w * sr,\n hcr = h * cr,\n hsr = h * sr;\n w = Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 0x1f >> 5 << 5;\n h = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr));\n } else {\n w = w + 0x1f >> 5 << 5;\n }\n if (h > maxh) maxh = h;\n if (x + w >= cw << 5) {\n x = 0;\n y += maxh;\n maxh = 0;\n }\n if (y + h >= ch) break;\n c.translate((x + (w >> 1)) / ratio, (y + (h >> 1)) / ratio);\n if (d.rotate) c.rotate(d.rotate * cloudRadians);\n c.fillText(d.text, 0, 0);\n if (d.padding) {\n c.lineWidth = 2 * d.padding;\n c.strokeText(d.text, 0, 0);\n }\n c.restore();\n d.width = w;\n d.height = h;\n d.xoff = x;\n d.yoff = y;\n d.x1 = w >> 1;\n d.y1 = h >> 1;\n d.x0 = -d.x1;\n d.y0 = -d.y1;\n d.hasText = true;\n x += w;\n }\n var pixels = c.getImageData(0, 0, (cw << 5) / ratio, ch / ratio).data,\n sprite = [];\n while (--di >= 0) {\n d = data[di];\n if (!d.hasText) continue;\n w = d.width;\n w32 = w >> 5;\n h = d.y1 - d.y0;\n // Zero the buffer\n for (i = 0; i < h * w32; i++) sprite[i] = 0;\n x = d.xoff;\n if (x == null) return;\n y = d.yoff;\n var seen = 0,\n seenRow = -1;\n for (j = 0; j < h; j++) {\n for (i = 0; i < w; i++) {\n var k = w32 * j + (i >> 5),\n m = pixels[(y + j) * (cw << 5) + (x + i) << 2] ? 1 << 31 - i % 32 : 0;\n sprite[k] |= m;\n seen |= m;\n }\n if (seen) seenRow = j;else {\n d.y0++;\n h--;\n j--;\n y++;\n }\n }\n d.y1 = d.y0 + seenRow;\n d.sprite = sprite.slice(0, (d.y1 - d.y0) * w32);\n }\n}\n\n// Use mask-based collision detection.\nfunction cloudCollide(tag, board, sw) {\n sw >>= 5;\n var sprite = tag.sprite,\n w = tag.width >> 5,\n lx = tag.x - (w << 4),\n sx = lx & 0x7f,\n msx = 32 - sx,\n h = tag.y1 - tag.y0,\n x = (tag.y + tag.y0) * sw + (lx >> 5),\n last;\n for (var j = 0; j < h; j++) {\n last = 0;\n for (var i = 0; i <= w; i++) {\n if ((last << msx | (i < w ? (last = sprite[j * w + i]) >>> sx : 0)) & board[x + i]) return true;\n }\n x += sw;\n }\n return false;\n}\nfunction cloudBounds(bounds, d) {\n var b0 = bounds[0],\n b1 = bounds[1];\n if (d.x + d.x0 < b0.x) b0.x = d.x + d.x0;\n if (d.y + d.y0 < b0.y) b0.y = d.y + d.y0;\n if (d.x + d.x1 > b1.x) b1.x = d.x + d.x1;\n if (d.y + d.y1 > b1.y) b1.y = d.y + d.y1;\n}\nfunction collideRects(a, b) {\n return a.x + a.x1 > b[0].x && a.x + a.x0 < b[1].x && a.y + a.y1 > b[0].y && a.y + a.y0 < b[1].y;\n}\nfunction archimedeanSpiral(size) {\n var e = size[0] / size[1];\n return function (t) {\n return [e * (t *= .1) * Math.cos(t), t * Math.sin(t)];\n };\n}\nfunction rectangularSpiral(size) {\n var dy = 4,\n dx = dy * size[0] / size[1],\n x = 0,\n y = 0;\n return function (t) {\n var sign = t < 0 ? -1 : 1;\n // See triangular numbers: T_n = n * (n + 1) / 2.\n switch (Math.sqrt(1 + 4 * sign * t) - sign & 3) {\n case 0:\n x += dx;\n break;\n case 1:\n y += dy;\n break;\n case 2:\n x -= dx;\n break;\n default:\n y -= dy;\n break;\n }\n return [x, y];\n };\n}\n\n// TODO reuse arrays?\nfunction zeroArray(n) {\n var a = [],\n i = -1;\n while (++i < n) a[i] = 0;\n return a;\n}\nfunction functor(d) {\n return typeof d === 'function' ? d : function () {\n return d;\n };\n}\nvar spirals = {\n archimedean: archimedeanSpiral,\n rectangular: rectangularSpiral\n};\n\nconst Output = ['x', 'y', 'font', 'fontSize', 'fontStyle', 'fontWeight', 'angle'];\nconst Params = ['text', 'font', 'rotate', 'fontSize', 'fontStyle', 'fontWeight'];\nfunction Wordcloud(params) {\n Transform.call(this, cloud(), params);\n}\nWordcloud.Definition = {\n 'type': 'Wordcloud',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'font',\n 'type': 'string',\n 'expr': true,\n 'default': 'sans-serif'\n }, {\n 'name': 'fontStyle',\n 'type': 'string',\n 'expr': true,\n 'default': 'normal'\n }, {\n 'name': 'fontWeight',\n 'type': 'string',\n 'expr': true,\n 'default': 'normal'\n }, {\n 'name': 'fontSize',\n 'type': 'number',\n 'expr': true,\n 'default': 14\n }, {\n 'name': 'fontSizeRange',\n 'type': 'number',\n 'array': 'nullable',\n 'default': [10, 50]\n }, {\n 'name': 'rotate',\n 'type': 'number',\n 'expr': true,\n 'default': 0\n }, {\n 'name': 'text',\n 'type': 'field'\n }, {\n 'name': 'spiral',\n 'type': 'string',\n 'values': ['archimedean', 'rectangular']\n }, {\n 'name': 'padding',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 7,\n 'default': Output\n }]\n};\ninherits(Wordcloud, Transform, {\n transform(_, pulse) {\n if (_.size && !(_.size[0] && _.size[1])) {\n error('Wordcloud size dimensions must be non-zero.');\n }\n function modp(param) {\n const p = _[param];\n return isFunction(p) && pulse.modified(p.fields);\n }\n const mod = _.modified();\n if (!(mod || pulse.changed(pulse.ADD_REM) || Params.some(modp))) return;\n const data = pulse.materialize(pulse.SOURCE).source,\n layout = this.value,\n as = _.as || Output;\n let fontSize = _.fontSize || 14,\n range;\n isFunction(fontSize) ? range = _.fontSizeRange : fontSize = constant(fontSize);\n\n // create font size scaling function as needed\n if (range) {\n const fsize = fontSize,\n sizeScale = scale('sqrt')().domain(extent(data, fsize)).range(range);\n fontSize = x => sizeScale(fsize(x));\n }\n data.forEach(t => {\n t[as[0]] = NaN;\n t[as[1]] = NaN;\n t[as[3]] = 0;\n });\n\n // configure layout\n const words = layout.words(data).text(_.text).size(_.size || [500, 500]).padding(_.padding || 1).spiral(_.spiral || 'archimedean').rotate(_.rotate || 0).font(_.font || 'sans-serif').fontStyle(_.fontStyle || 'normal').fontWeight(_.fontWeight || 'normal').fontSize(fontSize).random(random).layout();\n const size = layout.size(),\n dx = size[0] >> 1,\n dy = size[1] >> 1,\n n = words.length;\n for (let i = 0, w, t; i < n; ++i) {\n w = words[i];\n t = w.datum;\n t[as[0]] = w.x + dx;\n t[as[1]] = w.y + dy;\n t[as[2]] = w.font;\n t[as[3]] = w.size;\n t[as[4]] = w.style;\n t[as[5]] = w.weight;\n t[as[6]] = w.rotate;\n }\n return pulse.reflow(mod).modifies(as);\n }\n});\n\nexport { Wordcloud as wordcloud };\n", "import { bisectLeft, bisectRight, permute } from 'd3-array';\nimport { Transform } from 'vega-dataflow';\nimport { inherits } from 'vega-util';\n\nconst array8 = n => new Uint8Array(n);\nconst array16 = n => new Uint16Array(n);\nconst array32 = n => new Uint32Array(n);\n\n/**\n * Maintains CrossFilter state.\n */\nfunction Bitmaps() {\n let width = 8,\n data = [],\n seen = array32(0),\n curr = array(0, width),\n prev = array(0, width);\n return {\n data: () => data,\n seen: () => seen = lengthen(seen, data.length),\n add(array) {\n for (let i = 0, j = data.length, n = array.length, t; i < n; ++i) {\n t = array[i];\n t._index = j++;\n data.push(t);\n }\n },\n remove(num, map) {\n // map: index -> boolean (true => remove)\n const n = data.length,\n copy = Array(n - num),\n reindex = data; // reuse old data array for index map\n let t, i, j;\n\n // seek forward to first removal\n for (i = 0; !map[i] && i < n; ++i) {\n copy[i] = data[i];\n reindex[i] = i;\n }\n\n // condense arrays\n for (j = i; i < n; ++i) {\n t = data[i];\n if (!map[i]) {\n reindex[i] = j;\n curr[j] = curr[i];\n prev[j] = prev[i];\n copy[j] = t;\n t._index = j++;\n } else {\n reindex[i] = -1;\n }\n curr[i] = 0; // clear unused bits\n }\n data = copy;\n return reindex;\n },\n size: () => data.length,\n curr: () => curr,\n prev: () => prev,\n reset: k => prev[k] = curr[k],\n all: () => width < 0x101 ? 0xff : width < 0x10001 ? 0xffff : 0xffffffff,\n set(k, one) {\n curr[k] |= one;\n },\n clear(k, one) {\n curr[k] &= ~one;\n },\n resize(n, m) {\n const k = curr.length;\n if (n > k || m > width) {\n width = Math.max(m, width);\n curr = array(n, width, curr);\n prev = array(n, width);\n }\n }\n };\n}\nfunction lengthen(array, length, copy) {\n if (array.length >= length) return array;\n copy = copy || new array.constructor(length);\n copy.set(array);\n return copy;\n}\nfunction array(n, m, array) {\n const copy = (m < 0x101 ? array8 : m < 0x10001 ? array16 : array32)(n);\n if (array) copy.set(array);\n return copy;\n}\n\nfunction Dimension (index, i, query) {\n const bit = 1 << i;\n return {\n one: bit,\n zero: ~bit,\n range: query.slice(),\n bisect: index.bisect,\n index: index.index,\n size: index.size,\n onAdd(added, curr) {\n const dim = this,\n range = dim.bisect(dim.range, added.value),\n idx = added.index,\n lo = range[0],\n hi = range[1],\n n1 = idx.length;\n let i;\n for (i = 0; i < lo; ++i) curr[idx[i]] |= bit;\n for (i = hi; i < n1; ++i) curr[idx[i]] |= bit;\n return dim;\n }\n };\n}\n\n/**\n * Maintains a list of values, sorted by key.\n */\nfunction SortedIndex() {\n let index = array32(0),\n value = [],\n size = 0;\n function insert(key, data, base) {\n if (!data.length) return [];\n const n0 = size,\n n1 = data.length,\n addi = array32(n1);\n let addv = Array(n1),\n oldv,\n oldi,\n i;\n for (i = 0; i < n1; ++i) {\n addv[i] = key(data[i]);\n addi[i] = i;\n }\n addv = sort(addv, addi);\n if (n0) {\n oldv = value;\n oldi = index;\n value = Array(n0 + n1);\n index = array32(n0 + n1);\n merge(base, oldv, oldi, n0, addv, addi, n1, value, index);\n } else {\n if (base > 0) for (i = 0; i < n1; ++i) {\n addi[i] += base;\n }\n value = addv;\n index = addi;\n }\n size = n0 + n1;\n return {\n index: addi,\n value: addv\n };\n }\n function remove(num, map) {\n // map: index -> remove\n const n = size;\n let idx, i, j;\n\n // seek forward to first removal\n for (i = 0; !map[index[i]] && i < n; ++i);\n\n // condense index and value arrays\n for (j = i; i < n; ++i) {\n if (!map[idx = index[i]]) {\n index[j] = idx;\n value[j] = value[i];\n ++j;\n }\n }\n size = n - num;\n }\n function reindex(map) {\n for (let i = 0, n = size; i < n; ++i) {\n index[i] = map[index[i]];\n }\n }\n function bisect(range, array) {\n let n;\n if (array) {\n n = array.length;\n } else {\n array = value;\n n = size;\n }\n return [bisectLeft(array, range[0], 0, n), bisectRight(array, range[1], 0, n)];\n }\n return {\n insert: insert,\n remove: remove,\n bisect: bisect,\n reindex: reindex,\n index: () => index,\n size: () => size\n };\n}\nfunction sort(values, index) {\n values.sort.call(index, (a, b) => {\n const x = values[a],\n y = values[b];\n return x < y ? -1 : x > y ? 1 : 0;\n });\n return permute(values, index);\n}\nfunction merge(base, value0, index0, n0, value1, index1, n1, value, index) {\n let i0 = 0,\n i1 = 0,\n i;\n for (i = 0; i0 < n0 && i1 < n1; ++i) {\n if (value0[i0] < value1[i1]) {\n value[i] = value0[i0];\n index[i] = index0[i0++];\n } else {\n value[i] = value1[i1];\n index[i] = index1[i1++] + base;\n }\n }\n for (; i0 < n0; ++i0, ++i) {\n value[i] = value0[i0];\n index[i] = index0[i0];\n }\n for (; i1 < n1; ++i1, ++i) {\n value[i] = value1[i1];\n index[i] = index1[i1] + base;\n }\n}\n\n/**\n * An indexed multi-dimensional filter.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array<function(object): *>} params.fields - An array of dimension accessors to filter.\n * @param {Array} params.query - An array of per-dimension range queries.\n */\nfunction CrossFilter(params) {\n Transform.call(this, Bitmaps(), params);\n this._indices = null;\n this._dims = null;\n}\nCrossFilter.Definition = {\n 'type': 'CrossFilter',\n 'metadata': {},\n 'params': [{\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'required': true\n }, {\n 'name': 'query',\n 'type': 'array',\n 'array': true,\n 'required': true,\n 'content': {\n 'type': 'number',\n 'array': true,\n 'length': 2\n }\n }]\n};\ninherits(CrossFilter, Transform, {\n transform(_, pulse) {\n if (!this._dims) {\n return this.init(_, pulse);\n } else {\n var init = _.modified('fields') || _.fields.some(f => pulse.modified(f.fields));\n return init ? this.reinit(_, pulse) : this.eval(_, pulse);\n }\n },\n init(_, pulse) {\n const fields = _.fields,\n query = _.query,\n indices = this._indices = {},\n dims = this._dims = [],\n m = query.length;\n let i = 0,\n key,\n index;\n\n // instantiate indices and dimensions\n for (; i < m; ++i) {\n key = fields[i].fname;\n index = indices[key] || (indices[key] = SortedIndex());\n dims.push(Dimension(index, i, query[i]));\n }\n return this.eval(_, pulse);\n },\n reinit(_, pulse) {\n const output = pulse.materialize().fork(),\n fields = _.fields,\n query = _.query,\n indices = this._indices,\n dims = this._dims,\n bits = this.value,\n curr = bits.curr(),\n prev = bits.prev(),\n all = bits.all(),\n out = output.rem = output.add,\n mod = output.mod,\n m = query.length,\n adds = {};\n let add, index, key, mods, remMap, modMap, i, n, f;\n\n // set prev to current state\n prev.set(curr);\n\n // if pulse has remove tuples, process them first\n if (pulse.rem.length) {\n remMap = this.remove(_, pulse, output);\n }\n\n // if pulse has added tuples, add them to state\n if (pulse.add.length) {\n bits.add(pulse.add);\n }\n\n // if pulse has modified tuples, create an index map\n if (pulse.mod.length) {\n modMap = {};\n for (mods = pulse.mod, i = 0, n = mods.length; i < n; ++i) {\n modMap[mods[i]._index] = 1;\n }\n }\n\n // re-initialize indices as needed, update curr bitmap\n for (i = 0; i < m; ++i) {\n f = fields[i];\n if (!dims[i] || _.modified('fields', i) || pulse.modified(f.fields)) {\n key = f.fname;\n if (!(add = adds[key])) {\n indices[key] = index = SortedIndex();\n adds[key] = add = index.insert(f, pulse.source, 0);\n }\n dims[i] = Dimension(index, i, query[i]).onAdd(add, curr);\n }\n }\n\n // visit each tuple\n // if filter state changed, push index to add/rem\n // else if in mod and passes a filter, push index to mod\n for (i = 0, n = bits.data().length; i < n; ++i) {\n if (remMap[i]) {\n // skip if removed tuple\n continue;\n } else if (prev[i] !== curr[i]) {\n // add if state changed\n out.push(i);\n } else if (modMap[i] && curr[i] !== all) {\n // otherwise, pass mods through\n mod.push(i);\n }\n }\n bits.mask = (1 << m) - 1;\n return output;\n },\n eval(_, pulse) {\n const output = pulse.materialize().fork(),\n m = this._dims.length;\n let mask = 0;\n if (pulse.rem.length) {\n this.remove(_, pulse, output);\n mask |= (1 << m) - 1;\n }\n if (_.modified('query') && !_.modified('fields')) {\n mask |= this.update(_, pulse, output);\n }\n if (pulse.add.length) {\n this.insert(_, pulse, output);\n mask |= (1 << m) - 1;\n }\n if (pulse.mod.length) {\n this.modify(pulse, output);\n mask |= (1 << m) - 1;\n }\n this.value.mask = mask;\n return output;\n },\n insert(_, pulse, output) {\n const tuples = pulse.add,\n bits = this.value,\n dims = this._dims,\n indices = this._indices,\n fields = _.fields,\n adds = {},\n out = output.add,\n n = bits.size() + tuples.length,\n m = dims.length;\n let k = bits.size(),\n j,\n key,\n add;\n\n // resize bitmaps and add tuples as needed\n bits.resize(n, m);\n bits.add(tuples);\n const curr = bits.curr(),\n prev = bits.prev(),\n all = bits.all();\n\n // add to dimensional indices\n for (j = 0; j < m; ++j) {\n key = fields[j].fname;\n add = adds[key] || (adds[key] = indices[key].insert(fields[j], tuples, k));\n dims[j].onAdd(add, curr);\n }\n\n // set previous filters, output if passes at least one filter\n for (; k < n; ++k) {\n prev[k] = all;\n if (curr[k] !== all) out.push(k);\n }\n },\n modify(pulse, output) {\n const out = output.mod,\n bits = this.value,\n curr = bits.curr(),\n all = bits.all(),\n tuples = pulse.mod;\n let i, n, k;\n for (i = 0, n = tuples.length; i < n; ++i) {\n k = tuples[i]._index;\n if (curr[k] !== all) out.push(k);\n }\n },\n remove(_, pulse, output) {\n const indices = this._indices,\n bits = this.value,\n curr = bits.curr(),\n prev = bits.prev(),\n all = bits.all(),\n map = {},\n out = output.rem,\n tuples = pulse.rem;\n let i, n, k, f;\n\n // process tuples, output if passes at least one filter\n for (i = 0, n = tuples.length; i < n; ++i) {\n k = tuples[i]._index;\n map[k] = 1; // build index map\n prev[k] = f = curr[k];\n curr[k] = all;\n if (f !== all) out.push(k);\n }\n\n // remove from dimensional indices\n for (k in indices) {\n indices[k].remove(n, map);\n }\n this.reindex(pulse, n, map);\n return map;\n },\n // reindex filters and indices after propagation completes\n reindex(pulse, num, map) {\n const indices = this._indices,\n bits = this.value;\n pulse.runAfter(() => {\n const indexMap = bits.remove(num, map);\n for (const key in indices) indices[key].reindex(indexMap);\n });\n },\n update(_, pulse, output) {\n const dims = this._dims,\n query = _.query,\n stamp = pulse.stamp,\n m = dims.length;\n let mask = 0,\n i,\n q;\n\n // survey how many queries have changed\n output.filters = 0;\n for (q = 0; q < m; ++q) {\n if (_.modified('query', q)) {\n i = q;\n ++mask;\n }\n }\n if (mask === 1) {\n // only one query changed, use more efficient update\n mask = dims[i].one;\n this.incrementOne(dims[i], query[i], output.add, output.rem);\n } else {\n // multiple queries changed, perform full record keeping\n for (q = 0, mask = 0; q < m; ++q) {\n if (!_.modified('query', q)) continue;\n mask |= dims[q].one;\n this.incrementAll(dims[q], query[q], stamp, output.add);\n output.rem = output.add; // duplicate add/rem for downstream resolve\n }\n }\n return mask;\n },\n incrementAll(dim, query, stamp, out) {\n const bits = this.value,\n seen = bits.seen(),\n curr = bits.curr(),\n prev = bits.prev(),\n index = dim.index(),\n old = dim.bisect(dim.range),\n range = dim.bisect(query),\n lo1 = range[0],\n hi1 = range[1],\n lo0 = old[0],\n hi0 = old[1],\n one = dim.one;\n let i, j, k;\n\n // Fast incremental update based on previous lo index.\n if (lo1 < lo0) {\n for (i = lo1, j = Math.min(lo0, hi1); i < j; ++i) {\n k = index[i];\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n curr[k] ^= one;\n }\n } else if (lo1 > lo0) {\n for (i = lo0, j = Math.min(lo1, hi0); i < j; ++i) {\n k = index[i];\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n curr[k] ^= one;\n }\n }\n\n // Fast incremental update based on previous hi index.\n if (hi1 > hi0) {\n for (i = Math.max(lo1, hi0), j = hi1; i < j; ++i) {\n k = index[i];\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n curr[k] ^= one;\n }\n } else if (hi1 < hi0) {\n for (i = Math.max(lo0, hi1), j = hi0; i < j; ++i) {\n k = index[i];\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n curr[k] ^= one;\n }\n }\n dim.range = query.slice();\n },\n incrementOne(dim, query, add, rem) {\n const bits = this.value,\n curr = bits.curr(),\n index = dim.index(),\n old = dim.bisect(dim.range),\n range = dim.bisect(query),\n lo1 = range[0],\n hi1 = range[1],\n lo0 = old[0],\n hi0 = old[1],\n one = dim.one;\n let i, j, k;\n\n // Fast incremental update based on previous lo index.\n if (lo1 < lo0) {\n for (i = lo1, j = Math.min(lo0, hi1); i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n add.push(k);\n }\n } else if (lo1 > lo0) {\n for (i = lo0, j = Math.min(lo1, hi0); i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n rem.push(k);\n }\n }\n\n // Fast incremental update based on previous hi index.\n if (hi1 > hi0) {\n for (i = Math.max(lo1, hi0), j = hi1; i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n add.push(k);\n }\n } else if (hi1 < hi0) {\n for (i = Math.max(lo0, hi1), j = hi0; i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n rem.push(k);\n }\n }\n dim.range = query.slice();\n }\n});\n\n/**\n * Selectively filters tuples by resolving against a filter bitmap.\n * Useful for processing the output of a cross-filter transform.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.ignore - A bit mask indicating which filters to ignore.\n * @param {object} params.filter - The per-tuple filter bitmaps. Typically this\n * parameter value is a reference to a {@link CrossFilter} transform.\n */\nfunction ResolveFilter(params) {\n Transform.call(this, null, params);\n}\nResolveFilter.Definition = {\n 'type': 'ResolveFilter',\n 'metadata': {},\n 'params': [{\n 'name': 'ignore',\n 'type': 'number',\n 'required': true,\n 'description': 'A bit mask indicating which filters to ignore.'\n }, {\n 'name': 'filter',\n 'type': 'object',\n 'required': true,\n 'description': 'Per-tuple filter bitmaps from a CrossFilter transform.'\n }]\n};\ninherits(ResolveFilter, Transform, {\n transform(_, pulse) {\n const ignore = ~(_.ignore || 0),\n // bit mask where zeros -> dims to ignore\n bitmap = _.filter,\n mask = bitmap.mask;\n\n // exit early if no relevant filter changes\n if ((mask & ignore) === 0) return pulse.StopPropagation;\n const output = pulse.fork(pulse.ALL),\n data = bitmap.data(),\n curr = bitmap.curr(),\n prev = bitmap.prev(),\n pass = k => !(curr[k] & ignore) ? data[k] : null;\n\n // propagate all mod tuples that pass the filter\n output.filter(output.MOD, pass);\n\n // determine add & rem tuples via filter functions\n // for efficiency, we do *not* populate new arrays,\n // instead we add filter functions applied downstream\n\n if (!(mask & mask - 1)) {\n // only one filter changed\n output.filter(output.ADD, pass);\n output.filter(output.REM, k => (curr[k] & ignore) === mask ? data[k] : null);\n } else {\n // multiple filters changed\n output.filter(output.ADD, k => {\n const c = curr[k] & ignore,\n f = !c && c ^ prev[k] & ignore;\n return f ? data[k] : null;\n });\n output.filter(output.REM, k => {\n const c = curr[k] & ignore,\n f = c && !(c ^ (c ^ prev[k] & ignore));\n return f ? data[k] : null;\n });\n }\n\n // add filter to source data in case of reflow...\n return output.filter(output.SOURCE, t => pass(t._index));\n }\n});\n\nexport { CrossFilter as crossfilter, ResolveFilter as resolvefilter };\n", "import { error, toSet, isFunction, isString, hasOwnProperty } from 'vega-util';\n\nconst RawCode = 'RawCode';\nconst Literal = 'Literal';\nconst Property = 'Property';\nconst Identifier = 'Identifier';\nconst ArrayExpression = 'ArrayExpression';\nconst BinaryExpression = 'BinaryExpression';\nconst CallExpression = 'CallExpression';\nconst ConditionalExpression = 'ConditionalExpression';\nconst LogicalExpression = 'LogicalExpression';\nconst MemberExpression = 'MemberExpression';\nconst ObjectExpression = 'ObjectExpression';\nconst UnaryExpression = 'UnaryExpression';\nfunction ASTNode(type) {\n this.type = type;\n}\nASTNode.prototype.visit = function (visitor) {\n let c, i, n;\n if (visitor(this)) return 1;\n for (c = children(this), i = 0, n = c.length; i < n; ++i) {\n if (c[i].visit(visitor)) return 1;\n }\n};\nfunction children(node) {\n switch (node.type) {\n case ArrayExpression:\n return node.elements;\n case BinaryExpression:\n case LogicalExpression:\n return [node.left, node.right];\n case CallExpression:\n return [node.callee].concat(node.arguments);\n case ConditionalExpression:\n return [node.test, node.consequent, node.alternate];\n case MemberExpression:\n return [node.object, node.property];\n case ObjectExpression:\n return node.properties;\n case Property:\n return [node.key, node.value];\n case UnaryExpression:\n return [node.argument];\n case Identifier:\n case Literal:\n case RawCode:\n default:\n return [];\n }\n}\n\n/*\n The following expression parser is based on Esprima (http://esprima.org/).\n Original header comment and license for Esprima is included here:\n\n Copyright (C) 2013 Ariya Hidayat <ariya.hidayat@gmail.com>\n Copyright (C) 2013 Thaddee Tyl <thaddee.tyl@gmail.com>\n Copyright (C) 2013 Mathias Bynens <mathias@qiwi.be>\n Copyright (C) 2012 Ariya Hidayat <ariya.hidayat@gmail.com>\n Copyright (C) 2012 Mathias Bynens <mathias@qiwi.be>\n Copyright (C) 2012 Joost-Wim Boekesteijn <joost-wim@boekesteijn.nl>\n Copyright (C) 2012 Kris Kowal <kris.kowal@cixar.com>\n Copyright (C) 2012 Yusuke Suzuki <utatane.tea@gmail.com>\n Copyright (C) 2012 Arpad Borsos <arpad.borsos@googlemail.com>\n Copyright (C) 2011 Ariya Hidayat <ariya.hidayat@gmail.com>\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\nvar TokenName, source, index, length, lookahead;\nvar TokenBooleanLiteral = 1,\n TokenEOF = 2,\n TokenIdentifier = 3,\n TokenKeyword = 4,\n TokenNullLiteral = 5,\n TokenNumericLiteral = 6,\n TokenPunctuator = 7,\n TokenStringLiteral = 8,\n TokenRegularExpression = 9;\nTokenName = {};\nTokenName[TokenBooleanLiteral] = 'Boolean';\nTokenName[TokenEOF] = '<end>';\nTokenName[TokenIdentifier] = 'Identifier';\nTokenName[TokenKeyword] = 'Keyword';\nTokenName[TokenNullLiteral] = 'Null';\nTokenName[TokenNumericLiteral] = 'Numeric';\nTokenName[TokenPunctuator] = 'Punctuator';\nTokenName[TokenStringLiteral] = 'String';\nTokenName[TokenRegularExpression] = 'RegularExpression';\nvar SyntaxArrayExpression = 'ArrayExpression',\n SyntaxBinaryExpression = 'BinaryExpression',\n SyntaxCallExpression = 'CallExpression',\n SyntaxConditionalExpression = 'ConditionalExpression',\n SyntaxIdentifier = 'Identifier',\n SyntaxLiteral = 'Literal',\n SyntaxLogicalExpression = 'LogicalExpression',\n SyntaxMemberExpression = 'MemberExpression',\n SyntaxObjectExpression = 'ObjectExpression',\n SyntaxProperty = 'Property',\n SyntaxUnaryExpression = 'UnaryExpression';\n\n// Error messages should be identical to V8.\nvar MessageUnexpectedToken = 'Unexpected token %0',\n MessageUnexpectedNumber = 'Unexpected number',\n MessageUnexpectedString = 'Unexpected string',\n MessageUnexpectedIdentifier = 'Unexpected identifier',\n MessageUnexpectedReserved = 'Unexpected reserved word',\n MessageUnexpectedEOS = 'Unexpected end of input',\n MessageInvalidRegExp = 'Invalid regular expression',\n MessageUnterminatedRegExp = 'Invalid regular expression: missing /',\n MessageStrictOctalLiteral = 'Octal literals are not allowed in strict mode.',\n MessageStrictDuplicateProperty = 'Duplicate data property in object literal not allowed in strict mode';\nvar ILLEGAL = 'ILLEGAL',\n DISABLED = 'Disabled.';\n\n// See also tools/generate-unicode-regex.py.\nvar RegexNonAsciiIdentifierStart = new RegExp('[\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0370-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0620-\\\\u064A\\\\u066E\\\\u066F\\\\u0671-\\\\u06D3\\\\u06D5\\\\u06E5\\\\u06E6\\\\u06EE\\\\u06EF\\\\u06FA-\\\\u06FC\\\\u06FF\\\\u0710\\\\u0712-\\\\u072F\\\\u074D-\\\\u07A5\\\\u07B1\\\\u07CA-\\\\u07EA\\\\u07F4\\\\u07F5\\\\u07FA\\\\u0800-\\\\u0815\\\\u081A\\\\u0824\\\\u0828\\\\u0840-\\\\u0858\\\\u08A0-\\\\u08B2\\\\u0904-\\\\u0939\\\\u093D\\\\u0950\\\\u0958-\\\\u0961\\\\u0971-\\\\u0980\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BD\\\\u09CE\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E1\\\\u09F0\\\\u09F1\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A72-\\\\u0A74\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABD\\\\u0AD0\\\\u0AE0\\\\u0AE1\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3D\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B61\\\\u0B71\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BD0\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D\\\\u0C58\\\\u0C59\\\\u0C60\\\\u0C61\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBD\\\\u0CDE\\\\u0CE0\\\\u0CE1\\\\u0CF1\\\\u0CF2\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D\\\\u0D4E\\\\u0D60\\\\u0D61\\\\u0D7A-\\\\u0D7F\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0E01-\\\\u0E30\\\\u0E32\\\\u0E33\\\\u0E40-\\\\u0E46\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB0\\\\u0EB2\\\\u0EB3\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F40-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F88-\\\\u0F8C\\\\u1000-\\\\u102A\\\\u103F\\\\u1050-\\\\u1055\\\\u105A-\\\\u105D\\\\u1061\\\\u1065\\\\u1066\\\\u106E-\\\\u1070\\\\u1075-\\\\u1081\\\\u108E\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1711\\\\u1720-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1780-\\\\u17B3\\\\u17D7\\\\u17DC\\\\u1820-\\\\u1877\\\\u1880-\\\\u18A8\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1950-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19C1-\\\\u19C7\\\\u1A00-\\\\u1A16\\\\u1A20-\\\\u1A54\\\\u1AA7\\\\u1B05-\\\\u1B33\\\\u1B45-\\\\u1B4B\\\\u1B83-\\\\u1BA0\\\\u1BAE\\\\u1BAF\\\\u1BBA-\\\\u1BE5\\\\u1C00-\\\\u1C23\\\\u1C4D-\\\\u1C4F\\\\u1C5A-\\\\u1C7D\\\\u1CE9-\\\\u1CEC\\\\u1CEE-\\\\u1CF1\\\\u1CF5\\\\u1CF6\\\\u1D00-\\\\u1DBF\\\\u1E00-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CEE\\\\u2CF2\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D80-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u3029\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA640-\\\\uA66E\\\\uA67F-\\\\uA69D\\\\uA6A0-\\\\uA6EF\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA801\\\\uA803-\\\\uA805\\\\uA807-\\\\uA80A\\\\uA80C-\\\\uA822\\\\uA840-\\\\uA873\\\\uA882-\\\\uA8B3\\\\uA8F2-\\\\uA8F7\\\\uA8FB\\\\uA90A-\\\\uA925\\\\uA930-\\\\uA946\\\\uA960-\\\\uA97C\\\\uA984-\\\\uA9B2\\\\uA9CF\\\\uA9E0-\\\\uA9E4\\\\uA9E6-\\\\uA9EF\\\\uA9FA-\\\\uA9FE\\\\uAA00-\\\\uAA28\\\\uAA40-\\\\uAA42\\\\uAA44-\\\\uAA4B\\\\uAA60-\\\\uAA76\\\\uAA7A\\\\uAA7E-\\\\uAAAF\\\\uAAB1\\\\uAAB5\\\\uAAB6\\\\uAAB9-\\\\uAABD\\\\uAAC0\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEA\\\\uAAF2-\\\\uAAF4\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABE2\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D\\\\uFB1F-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF21-\\\\uFF3A\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]'),\n // eslint-disable-next-line no-misleading-character-class\n RegexNonAsciiIdentifierPart = new RegExp('[\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0300-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u0483-\\\\u0487\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0610-\\\\u061A\\\\u0620-\\\\u0669\\\\u066E-\\\\u06D3\\\\u06D5-\\\\u06DC\\\\u06DF-\\\\u06E8\\\\u06EA-\\\\u06FC\\\\u06FF\\\\u0710-\\\\u074A\\\\u074D-\\\\u07B1\\\\u07C0-\\\\u07F5\\\\u07FA\\\\u0800-\\\\u082D\\\\u0840-\\\\u085B\\\\u08A0-\\\\u08B2\\\\u08E4-\\\\u0963\\\\u0966-\\\\u096F\\\\u0971-\\\\u0983\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BC-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CE\\\\u09D7\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E3\\\\u09E6-\\\\u09F1\\\\u0A01-\\\\u0A03\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A66-\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABC-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AD0\\\\u0AE0-\\\\u0AE3\\\\u0AE6-\\\\u0AEF\\\\u0B01-\\\\u0B03\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3C-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B56\\\\u0B57\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B63\\\\u0B66-\\\\u0B6F\\\\u0B71\\\\u0B82\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD0\\\\u0BD7\\\\u0BE6-\\\\u0BEF\\\\u0C00-\\\\u0C03\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C58\\\\u0C59\\\\u0C60-\\\\u0C63\\\\u0C66-\\\\u0C6F\\\\u0C81-\\\\u0C83\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBC-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CDE\\\\u0CE0-\\\\u0CE3\\\\u0CE6-\\\\u0CEF\\\\u0CF1\\\\u0CF2\\\\u0D01-\\\\u0D03\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4E\\\\u0D57\\\\u0D60-\\\\u0D63\\\\u0D66-\\\\u0D6F\\\\u0D7A-\\\\u0D7F\\\\u0D82\\\\u0D83\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DE6-\\\\u0DEF\\\\u0DF2\\\\u0DF3\\\\u0E01-\\\\u0E3A\\\\u0E40-\\\\u0E4E\\\\u0E50-\\\\u0E59\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB9\\\\u0EBB-\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EC8-\\\\u0ECD\\\\u0ED0-\\\\u0ED9\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F18\\\\u0F19\\\\u0F20-\\\\u0F29\\\\u0F35\\\\u0F37\\\\u0F39\\\\u0F3E-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F71-\\\\u0F84\\\\u0F86-\\\\u0F97\\\\u0F99-\\\\u0FBC\\\\u0FC6\\\\u1000-\\\\u1049\\\\u1050-\\\\u109D\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u135D-\\\\u135F\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1714\\\\u1720-\\\\u1734\\\\u1740-\\\\u1753\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1772\\\\u1773\\\\u1780-\\\\u17D3\\\\u17D7\\\\u17DC\\\\u17DD\\\\u17E0-\\\\u17E9\\\\u180B-\\\\u180D\\\\u1810-\\\\u1819\\\\u1820-\\\\u1877\\\\u1880-\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1946-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19B0-\\\\u19C9\\\\u19D0-\\\\u19D9\\\\u1A00-\\\\u1A1B\\\\u1A20-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F-\\\\u1A89\\\\u1A90-\\\\u1A99\\\\u1AA7\\\\u1AB0-\\\\u1ABD\\\\u1B00-\\\\u1B4B\\\\u1B50-\\\\u1B59\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1BF3\\\\u1C00-\\\\u1C37\\\\u1C40-\\\\u1C49\\\\u1C4D-\\\\u1C7D\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CF6\\\\u1CF8\\\\u1CF9\\\\u1D00-\\\\u1DF5\\\\u1DFC-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u200C\\\\u200D\\\\u203F\\\\u2040\\\\u2054\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u20D0-\\\\u20DC\\\\u20E1\\\\u20E5-\\\\u20F0\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D7F-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2DE0-\\\\u2DFF\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u302F\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u3099\\\\u309A\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA62B\\\\uA640-\\\\uA66F\\\\uA674-\\\\uA67D\\\\uA67F-\\\\uA69D\\\\uA69F-\\\\uA6F1\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA827\\\\uA840-\\\\uA873\\\\uA880-\\\\uA8C4\\\\uA8D0-\\\\uA8D9\\\\uA8E0-\\\\uA8F7\\\\uA8FB\\\\uA900-\\\\uA92D\\\\uA930-\\\\uA953\\\\uA960-\\\\uA97C\\\\uA980-\\\\uA9C0\\\\uA9CF-\\\\uA9D9\\\\uA9E0-\\\\uA9FE\\\\uAA00-\\\\uAA36\\\\uAA40-\\\\uAA4D\\\\uAA50-\\\\uAA59\\\\uAA60-\\\\uAA76\\\\uAA7A-\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEF\\\\uAAF2-\\\\uAAF6\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABEA\\\\uABEC\\\\uABED\\\\uABF0-\\\\uABF9\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE00-\\\\uFE0F\\\\uFE20-\\\\uFE2D\\\\uFE33\\\\uFE34\\\\uFE4D-\\\\uFE4F\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF10-\\\\uFF19\\\\uFF21-\\\\uFF3A\\\\uFF3F\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]');\n\n// Ensure the condition is true, otherwise throw an error.\n// This is only to have a better contract semantic, i.e. another safety net\n// to catch a logic error. The condition shall be fulfilled in normal case.\n// Do NOT use this to enforce a certain condition on any user input.\n\nfunction assert(condition, message) {\n /* istanbul ignore next */\n if (!condition) {\n throw new Error('ASSERT: ' + message);\n }\n}\nfunction isDecimalDigit(ch) {\n return ch >= 0x30 && ch <= 0x39; // 0..9\n}\nfunction isHexDigit(ch) {\n return '0123456789abcdefABCDEF'.includes(ch);\n}\nfunction isOctalDigit(ch) {\n return '01234567'.includes(ch);\n}\n\n// 7.2 White Space\n\nfunction isWhiteSpace(ch) {\n return ch === 0x20 || ch === 0x09 || ch === 0x0B || ch === 0x0C || ch === 0xA0 || ch >= 0x1680 && [0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].includes(ch);\n}\n\n// 7.3 Line Terminators\n\nfunction isLineTerminator(ch) {\n return ch === 0x0A || ch === 0x0D || ch === 0x2028 || ch === 0x2029;\n}\n\n// 7.6 Identifier Names and Identifiers\n\nfunction isIdentifierStart(ch) {\n return ch === 0x24 || ch === 0x5F ||\n // $ (dollar) and _ (underscore)\n ch >= 0x41 && ch <= 0x5A ||\n // A..Z\n ch >= 0x61 && ch <= 0x7A ||\n // a..z\n ch === 0x5C ||\n // \\ (backslash)\n ch >= 0x80 && RegexNonAsciiIdentifierStart.test(String.fromCharCode(ch));\n}\nfunction isIdentifierPart(ch) {\n return ch === 0x24 || ch === 0x5F ||\n // $ (dollar) and _ (underscore)\n ch >= 0x41 && ch <= 0x5A ||\n // A..Z\n ch >= 0x61 && ch <= 0x7A ||\n // a..z\n ch >= 0x30 && ch <= 0x39 ||\n // 0..9\n ch === 0x5C ||\n // \\ (backslash)\n ch >= 0x80 && RegexNonAsciiIdentifierPart.test(String.fromCharCode(ch));\n}\n\n// 7.6.1.1 Keywords\n\nconst keywords = {\n 'if': 1,\n 'in': 1,\n 'do': 1,\n 'var': 1,\n 'for': 1,\n 'new': 1,\n 'try': 1,\n 'let': 1,\n 'this': 1,\n 'else': 1,\n 'case': 1,\n 'void': 1,\n 'with': 1,\n 'enum': 1,\n 'while': 1,\n 'break': 1,\n 'catch': 1,\n 'throw': 1,\n 'const': 1,\n 'yield': 1,\n 'class': 1,\n 'super': 1,\n 'return': 1,\n 'typeof': 1,\n 'delete': 1,\n 'switch': 1,\n 'export': 1,\n 'import': 1,\n 'public': 1,\n 'static': 1,\n 'default': 1,\n 'finally': 1,\n 'extends': 1,\n 'package': 1,\n 'private': 1,\n 'function': 1,\n 'continue': 1,\n 'debugger': 1,\n 'interface': 1,\n 'protected': 1,\n 'instanceof': 1,\n 'implements': 1\n};\nfunction skipComment() {\n while (index < length) {\n const ch = source.charCodeAt(index);\n if (isWhiteSpace(ch) || isLineTerminator(ch)) {\n ++index;\n } else {\n break;\n }\n }\n}\nfunction scanHexEscape(prefix) {\n var i,\n len,\n ch,\n code = 0;\n len = prefix === 'u' ? 4 : 2;\n for (i = 0; i < len; ++i) {\n if (index < length && isHexDigit(source[index])) {\n ch = source[index++];\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n } else {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n return String.fromCharCode(code);\n}\nfunction scanUnicodeCodePointEscape() {\n var ch, code, cu1, cu2;\n ch = source[index];\n code = 0;\n\n // At least, one hex digit is required.\n if (ch === '}') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n while (index < length) {\n ch = source[index++];\n if (!isHexDigit(ch)) {\n break;\n }\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n }\n if (code > 0x10FFFF || ch !== '}') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n // UTF-16 Encoding\n if (code <= 0xFFFF) {\n return String.fromCharCode(code);\n }\n cu1 = (code - 0x10000 >> 10) + 0xD800;\n cu2 = (code - 0x10000 & 1023) + 0xDC00;\n return String.fromCharCode(cu1, cu2);\n}\nfunction getEscapedIdentifier() {\n var ch, id;\n ch = source.charCodeAt(index++);\n id = String.fromCharCode(ch);\n\n // '\\u' (U+005C, U+0075) denotes an escaped character.\n if (ch === 0x5C) {\n if (source.charCodeAt(index) !== 0x75) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n ++index;\n ch = scanHexEscape('u');\n if (!ch || ch === '\\\\' || !isIdentifierStart(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n id = ch;\n }\n while (index < length) {\n ch = source.charCodeAt(index);\n if (!isIdentifierPart(ch)) {\n break;\n }\n ++index;\n id += String.fromCharCode(ch);\n\n // '\\u' (U+005C, U+0075) denotes an escaped character.\n if (ch === 0x5C) {\n id = id.substr(0, id.length - 1);\n if (source.charCodeAt(index) !== 0x75) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n ++index;\n ch = scanHexEscape('u');\n if (!ch || ch === '\\\\' || !isIdentifierPart(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n id += ch;\n }\n }\n return id;\n}\nfunction getIdentifier() {\n var start, ch;\n start = index++;\n while (index < length) {\n ch = source.charCodeAt(index);\n if (ch === 0x5C) {\n // Blackslash (U+005C) marks Unicode escape sequence.\n index = start;\n return getEscapedIdentifier();\n }\n if (isIdentifierPart(ch)) {\n ++index;\n } else {\n break;\n }\n }\n return source.slice(start, index);\n}\nfunction scanIdentifier() {\n var start, id, type;\n start = index;\n\n // Backslash (U+005C) starts an escaped character.\n id = source.charCodeAt(index) === 0x5C ? getEscapedIdentifier() : getIdentifier();\n\n // There is no keyword or literal with only one character.\n // Thus, it must be an identifier.\n if (id.length === 1) {\n type = TokenIdentifier;\n } else if (keywords.hasOwnProperty(id)) {\n // eslint-disable-line no-prototype-builtins\n type = TokenKeyword;\n } else if (id === 'null') {\n type = TokenNullLiteral;\n } else if (id === 'true' || id === 'false') {\n type = TokenBooleanLiteral;\n } else {\n type = TokenIdentifier;\n }\n return {\n type: type,\n value: id,\n start: start,\n end: index\n };\n}\n\n// 7.7 Punctuators\n\nfunction scanPunctuator() {\n var start = index,\n code = source.charCodeAt(index),\n code2,\n ch1 = source[index],\n ch2,\n ch3,\n ch4;\n switch (code) {\n // Check for most common single-character punctuators.\n case 0x2E: // . dot\n case 0x28: // ( open bracket\n case 0x29: // ) close bracket\n case 0x3B: // ; semicolon\n case 0x2C: // , comma\n case 0x7B: // { open curly brace\n case 0x7D: // } close curly brace\n case 0x5B: // [\n case 0x5D: // ]\n case 0x3A: // :\n case 0x3F: // ?\n case 0x7E:\n // ~\n ++index;\n return {\n type: TokenPunctuator,\n value: String.fromCharCode(code),\n start: start,\n end: index\n };\n default:\n code2 = source.charCodeAt(index + 1);\n\n // '=' (U+003D) marks an assignment or comparison operator.\n if (code2 === 0x3D) {\n switch (code) {\n case 0x2B: // +\n case 0x2D: // -\n case 0x2F: // /\n case 0x3C: // <\n case 0x3E: // >\n case 0x5E: // ^\n case 0x7C: // |\n case 0x25: // %\n case 0x26: // &\n case 0x2A:\n // *\n index += 2;\n return {\n type: TokenPunctuator,\n value: String.fromCharCode(code) + String.fromCharCode(code2),\n start: start,\n end: index\n };\n case 0x21: // !\n case 0x3D:\n // =\n index += 2;\n\n // !== and ===\n if (source.charCodeAt(index) === 0x3D) {\n ++index;\n }\n return {\n type: TokenPunctuator,\n value: source.slice(start, index),\n start: start,\n end: index\n };\n }\n }\n }\n\n // 4-character punctuator: >>>=\n\n ch4 = source.substr(index, 4);\n if (ch4 === '>>>=') {\n index += 4;\n return {\n type: TokenPunctuator,\n value: ch4,\n start: start,\n end: index\n };\n }\n\n // 3-character punctuators: === !== >>> <<= >>=\n\n ch3 = ch4.substr(0, 3);\n if (ch3 === '>>>' || ch3 === '<<=' || ch3 === '>>=') {\n index += 3;\n return {\n type: TokenPunctuator,\n value: ch3,\n start: start,\n end: index\n };\n }\n\n // Other 2-character punctuators: ++ -- << >> && ||\n ch2 = ch3.substr(0, 2);\n if (ch1 === ch2[1] && '+-<>&|'.includes(ch1) || ch2 === '=>') {\n index += 2;\n return {\n type: TokenPunctuator,\n value: ch2,\n start: start,\n end: index\n };\n }\n if (ch2 === '//') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n // 1-character punctuators: < > = ! + - * % & | ^ /\n\n if ('<>=!+-*%&|^/'.includes(ch1)) {\n ++index;\n return {\n type: TokenPunctuator,\n value: ch1,\n start: start,\n end: index\n };\n }\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n}\n\n// 7.8.3 Numeric Literals\n\nfunction scanHexLiteral(start) {\n let number = '';\n while (index < length) {\n if (!isHexDigit(source[index])) {\n break;\n }\n number += source[index++];\n }\n if (number.length === 0) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n return {\n type: TokenNumericLiteral,\n value: parseInt('0x' + number, 16),\n start: start,\n end: index\n };\n}\nfunction scanOctalLiteral(start) {\n let number = '0' + source[index++];\n while (index < length) {\n if (!isOctalDigit(source[index])) {\n break;\n }\n number += source[index++];\n }\n if (isIdentifierStart(source.charCodeAt(index)) || isDecimalDigit(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n return {\n type: TokenNumericLiteral,\n value: parseInt(number, 8),\n octal: true,\n start: start,\n end: index\n };\n}\nfunction scanNumericLiteral() {\n var number, start, ch;\n ch = source[index];\n assert(isDecimalDigit(ch.charCodeAt(0)) || ch === '.', 'Numeric literal must start with a decimal digit or a decimal point');\n start = index;\n number = '';\n if (ch !== '.') {\n number = source[index++];\n ch = source[index];\n\n // Hex number starts with '0x'.\n // Octal number starts with '0'.\n if (number === '0') {\n if (ch === 'x' || ch === 'X') {\n ++index;\n return scanHexLiteral(start);\n }\n if (isOctalDigit(ch)) {\n return scanOctalLiteral(start);\n }\n\n // decimal number starts with '0' such as '09' is illegal.\n if (ch && isDecimalDigit(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n ch = source[index];\n }\n if (ch === '.') {\n number += source[index++];\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n ch = source[index];\n }\n if (ch === 'e' || ch === 'E') {\n number += source[index++];\n ch = source[index];\n if (ch === '+' || ch === '-') {\n number += source[index++];\n }\n if (isDecimalDigit(source.charCodeAt(index))) {\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n } else {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n return {\n type: TokenNumericLiteral,\n value: parseFloat(number),\n start: start,\n end: index\n };\n}\n\n// 7.8.4 String Literals\n\nfunction scanStringLiteral() {\n var str = '',\n quote,\n start,\n ch,\n code,\n octal = false;\n quote = source[index];\n assert(quote === '\\'' || quote === '\"', 'String literal must starts with a quote');\n start = index;\n ++index;\n while (index < length) {\n ch = source[index++];\n if (ch === quote) {\n quote = '';\n break;\n } else if (ch === '\\\\') {\n ch = source[index++];\n if (!ch || !isLineTerminator(ch.charCodeAt(0))) {\n switch (ch) {\n case 'u':\n case 'x':\n if (source[index] === '{') {\n ++index;\n str += scanUnicodeCodePointEscape();\n } else {\n str += scanHexEscape(ch);\n }\n break;\n case 'n':\n str += '\\n';\n break;\n case 'r':\n str += '\\r';\n break;\n case 't':\n str += '\\t';\n break;\n case 'b':\n str += '\\b';\n break;\n case 'f':\n str += '\\f';\n break;\n case 'v':\n str += '\\x0B';\n break;\n default:\n if (isOctalDigit(ch)) {\n code = '01234567'.indexOf(ch);\n\n // \\0 is not octal escape sequence\n if (code !== 0) {\n octal = true;\n }\n if (index < length && isOctalDigit(source[index])) {\n octal = true;\n code = code * 8 + '01234567'.indexOf(source[index++]);\n\n // 3 digits are only allowed when string starts\n // with 0, 1, 2, 3\n if ('0123'.includes(ch) && index < length && isOctalDigit(source[index])) {\n code = code * 8 + '01234567'.indexOf(source[index++]);\n }\n }\n str += String.fromCharCode(code);\n } else {\n str += ch;\n }\n break;\n }\n } else {\n if (ch === '\\r' && source[index] === '\\n') {\n ++index;\n }\n }\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n break;\n } else {\n str += ch;\n }\n }\n if (quote !== '') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n return {\n type: TokenStringLiteral,\n value: str,\n octal: octal,\n start: start,\n end: index\n };\n}\nfunction testRegExp(pattern, flags) {\n let tmp = pattern;\n if (flags.includes('u')) {\n // Replace each astral symbol and every Unicode code point\n // escape sequence with a single ASCII symbol to avoid throwing on\n // regular expressions that are only valid in combination with the\n // `/u` flag.\n // Note: replacing with the ASCII symbol `x` might cause false\n // negatives in unlikely scenarios. For example, `[\\u{61}-b]` is a\n // perfectly valid pattern that is equivalent to `[a-b]`, but it\n // would be replaced by `[x-b]` which throws an error.\n tmp = tmp.replace(/\\\\u\\{([0-9a-fA-F]+)\\}/g, ($0, $1) => {\n if (parseInt($1, 16) <= 0x10FFFF) {\n return 'x';\n }\n throwError({}, MessageInvalidRegExp);\n }).replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, 'x');\n }\n\n // First, detect invalid regular expressions.\n try {\n new RegExp(tmp);\n } catch (e) {\n throwError({}, MessageInvalidRegExp);\n }\n\n // Return a regular expression object for this pattern-flag pair, or\n // `null` in case the current environment doesn't support the flags it\n // uses.\n try {\n return new RegExp(pattern, flags);\n } catch (exception) {\n return null;\n }\n}\nfunction scanRegExpBody() {\n var ch, str, classMarker, terminated, body;\n ch = source[index];\n assert(ch === '/', 'Regular expression literal must start with a slash');\n str = source[index++];\n classMarker = false;\n terminated = false;\n while (index < length) {\n ch = source[index++];\n str += ch;\n if (ch === '\\\\') {\n ch = source[index++];\n // ECMA-262 7.8.5\n if (isLineTerminator(ch.charCodeAt(0))) {\n throwError({}, MessageUnterminatedRegExp);\n }\n str += ch;\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n throwError({}, MessageUnterminatedRegExp);\n } else if (classMarker) {\n if (ch === ']') {\n classMarker = false;\n }\n } else {\n if (ch === '/') {\n terminated = true;\n break;\n } else if (ch === '[') {\n classMarker = true;\n }\n }\n }\n if (!terminated) {\n throwError({}, MessageUnterminatedRegExp);\n }\n\n // Exclude leading and trailing slash.\n body = str.substr(1, str.length - 2);\n return {\n value: body,\n literal: str\n };\n}\nfunction scanRegExpFlags() {\n var ch, str, flags;\n str = '';\n flags = '';\n while (index < length) {\n ch = source[index];\n if (!isIdentifierPart(ch.charCodeAt(0))) {\n break;\n }\n ++index;\n if (ch === '\\\\' && index < length) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n } else {\n flags += ch;\n str += ch;\n }\n }\n if (flags.search(/[^gimuy]/g) >= 0) {\n throwError({}, MessageInvalidRegExp, flags);\n }\n return {\n value: flags,\n literal: str\n };\n}\nfunction scanRegExp() {\n var start, body, flags, value;\n lookahead = null;\n skipComment();\n start = index;\n body = scanRegExpBody();\n flags = scanRegExpFlags();\n value = testRegExp(body.value, flags.value);\n return {\n literal: body.literal + flags.literal,\n value: value,\n regex: {\n pattern: body.value,\n flags: flags.value\n },\n start: start,\n end: index\n };\n}\nfunction isIdentifierName(token) {\n return token.type === TokenIdentifier || token.type === TokenKeyword || token.type === TokenBooleanLiteral || token.type === TokenNullLiteral;\n}\nfunction advance() {\n skipComment();\n if (index >= length) {\n return {\n type: TokenEOF,\n start: index,\n end: index\n };\n }\n const ch = source.charCodeAt(index);\n if (isIdentifierStart(ch)) {\n return scanIdentifier();\n }\n\n // Very common: ( and ) and ;\n if (ch === 0x28 || ch === 0x29 || ch === 0x3B) {\n return scanPunctuator();\n }\n\n // String literal starts with single quote (U+0027) or double quote (U+0022).\n if (ch === 0x27 || ch === 0x22) {\n return scanStringLiteral();\n }\n\n // Dot (.) U+002E can also start a floating-point number, hence the need\n // to check the next character.\n if (ch === 0x2E) {\n if (isDecimalDigit(source.charCodeAt(index + 1))) {\n return scanNumericLiteral();\n }\n return scanPunctuator();\n }\n if (isDecimalDigit(ch)) {\n return scanNumericLiteral();\n }\n return scanPunctuator();\n}\nfunction lex() {\n const token = lookahead;\n index = token.end;\n lookahead = advance();\n index = token.end;\n return token;\n}\nfunction peek() {\n const pos = index;\n lookahead = advance();\n index = pos;\n}\nfunction finishArrayExpression(elements) {\n const node = new ASTNode(SyntaxArrayExpression);\n node.elements = elements;\n return node;\n}\nfunction finishBinaryExpression(operator, left, right) {\n const node = new ASTNode(operator === '||' || operator === '&&' ? SyntaxLogicalExpression : SyntaxBinaryExpression);\n node.operator = operator;\n node.left = left;\n node.right = right;\n return node;\n}\nfunction finishCallExpression(callee, args) {\n const node = new ASTNode(SyntaxCallExpression);\n node.callee = callee;\n node.arguments = args;\n return node;\n}\nfunction finishConditionalExpression(test, consequent, alternate) {\n const node = new ASTNode(SyntaxConditionalExpression);\n node.test = test;\n node.consequent = consequent;\n node.alternate = alternate;\n return node;\n}\nfunction finishIdentifier(name) {\n const node = new ASTNode(SyntaxIdentifier);\n node.name = name;\n return node;\n}\nfunction finishLiteral(token) {\n const node = new ASTNode(SyntaxLiteral);\n node.value = token.value;\n node.raw = source.slice(token.start, token.end);\n if (token.regex) {\n if (node.raw === '//') {\n node.raw = '/(?:)/';\n }\n node.regex = token.regex;\n }\n return node;\n}\nfunction finishMemberExpression(accessor, object, property) {\n const node = new ASTNode(SyntaxMemberExpression);\n node.computed = accessor === '[';\n node.object = object;\n node.property = property;\n if (!node.computed) property.member = true;\n return node;\n}\nfunction finishObjectExpression(properties) {\n const node = new ASTNode(SyntaxObjectExpression);\n node.properties = properties;\n return node;\n}\nfunction finishProperty(kind, key, value) {\n const node = new ASTNode(SyntaxProperty);\n node.key = key;\n node.value = value;\n node.kind = kind;\n return node;\n}\nfunction finishUnaryExpression(operator, argument) {\n const node = new ASTNode(SyntaxUnaryExpression);\n node.operator = operator;\n node.argument = argument;\n node.prefix = true;\n return node;\n}\n\n// Throw an exception\n\nfunction throwError(token, messageFormat) {\n var error,\n args = Array.prototype.slice.call(arguments, 2),\n msg = messageFormat.replace(/%(\\d)/g, (whole, index) => {\n assert(index < args.length, 'Message reference must be in range');\n return args[index];\n });\n error = new Error(msg);\n error.index = index;\n error.description = msg;\n throw error;\n}\n\n// Throw an exception because of the token.\n\nfunction throwUnexpected(token) {\n if (token.type === TokenEOF) {\n throwError(token, MessageUnexpectedEOS);\n }\n if (token.type === TokenNumericLiteral) {\n throwError(token, MessageUnexpectedNumber);\n }\n if (token.type === TokenStringLiteral) {\n throwError(token, MessageUnexpectedString);\n }\n if (token.type === TokenIdentifier) {\n throwError(token, MessageUnexpectedIdentifier);\n }\n if (token.type === TokenKeyword) {\n throwError(token, MessageUnexpectedReserved);\n }\n\n // BooleanLiteral, NullLiteral, or Punctuator.\n throwError(token, MessageUnexpectedToken, token.value);\n}\n\n// Expect the next token to match the specified punctuator.\n// If not, an exception will be thrown.\n\nfunction expect(value) {\n const token = lex();\n if (token.type !== TokenPunctuator || token.value !== value) {\n throwUnexpected(token);\n }\n}\n\n// Return true if the next token matches the specified punctuator.\n\nfunction match(value) {\n return lookahead.type === TokenPunctuator && lookahead.value === value;\n}\n\n// Return true if the next token matches the specified keyword\n\nfunction matchKeyword(keyword) {\n return lookahead.type === TokenKeyword && lookahead.value === keyword;\n}\n\n// 11.1.4 Array Initialiser\n\nfunction parseArrayInitialiser() {\n const elements = [];\n index = lookahead.start;\n expect('[');\n while (!match(']')) {\n if (match(',')) {\n lex();\n elements.push(null);\n } else {\n elements.push(parseConditionalExpression());\n if (!match(']')) {\n expect(',');\n }\n }\n }\n lex();\n return finishArrayExpression(elements);\n}\n\n// 11.1.5 Object Initialiser\n\nfunction parseObjectPropertyKey() {\n index = lookahead.start;\n const token = lex();\n\n // Note: This function is called only from parseObjectProperty(), where\n // EOF and Punctuator tokens are already filtered out.\n\n if (token.type === TokenStringLiteral || token.type === TokenNumericLiteral) {\n if (token.octal) {\n throwError(token, MessageStrictOctalLiteral);\n }\n return finishLiteral(token);\n }\n return finishIdentifier(token.value);\n}\nfunction parseObjectProperty() {\n var token, key, id, value;\n index = lookahead.start;\n token = lookahead;\n if (token.type === TokenIdentifier) {\n id = parseObjectPropertyKey();\n expect(':');\n value = parseConditionalExpression();\n return finishProperty('init', id, value);\n }\n if (token.type === TokenEOF || token.type === TokenPunctuator) {\n throwUnexpected(token);\n } else {\n key = parseObjectPropertyKey();\n expect(':');\n value = parseConditionalExpression();\n return finishProperty('init', key, value);\n }\n}\nfunction parseObjectInitialiser() {\n var properties = [],\n property,\n name,\n key,\n map = {},\n toString = String;\n index = lookahead.start;\n expect('{');\n while (!match('}')) {\n property = parseObjectProperty();\n if (property.key.type === SyntaxIdentifier) {\n name = property.key.name;\n } else {\n name = toString(property.key.value);\n }\n key = '$' + name;\n if (Object.prototype.hasOwnProperty.call(map, key)) {\n throwError({}, MessageStrictDuplicateProperty);\n } else {\n map[key] = true;\n }\n properties.push(property);\n if (!match('}')) {\n expect(',');\n }\n }\n expect('}');\n return finishObjectExpression(properties);\n}\n\n// 11.1.6 The Grouping Operator\n\nfunction parseGroupExpression() {\n expect('(');\n const expr = parseExpression();\n expect(')');\n return expr;\n}\n\n// 11.1 Primary Expressions\n\nconst legalKeywords = {\n 'if': 1\n};\nfunction parsePrimaryExpression() {\n var type, token, expr;\n if (match('(')) {\n return parseGroupExpression();\n }\n if (match('[')) {\n return parseArrayInitialiser();\n }\n if (match('{')) {\n return parseObjectInitialiser();\n }\n type = lookahead.type;\n index = lookahead.start;\n if (type === TokenIdentifier || legalKeywords[lookahead.value]) {\n expr = finishIdentifier(lex().value);\n } else if (type === TokenStringLiteral || type === TokenNumericLiteral) {\n if (lookahead.octal) {\n throwError(lookahead, MessageStrictOctalLiteral);\n }\n expr = finishLiteral(lex());\n } else if (type === TokenKeyword) {\n throw new Error(DISABLED);\n } else if (type === TokenBooleanLiteral) {\n token = lex();\n token.value = token.value === 'true';\n expr = finishLiteral(token);\n } else if (type === TokenNullLiteral) {\n token = lex();\n token.value = null;\n expr = finishLiteral(token);\n } else if (match('/') || match('/=')) {\n expr = finishLiteral(scanRegExp());\n peek();\n } else {\n throwUnexpected(lex());\n }\n return expr;\n}\n\n// 11.2 Left-Hand-Side Expressions\n\nfunction parseArguments() {\n const args = [];\n expect('(');\n if (!match(')')) {\n while (index < length) {\n args.push(parseConditionalExpression());\n if (match(')')) {\n break;\n }\n expect(',');\n }\n }\n expect(')');\n return args;\n}\nfunction parseNonComputedProperty() {\n index = lookahead.start;\n const token = lex();\n if (!isIdentifierName(token)) {\n throwUnexpected(token);\n }\n return finishIdentifier(token.value);\n}\nfunction parseNonComputedMember() {\n expect('.');\n return parseNonComputedProperty();\n}\nfunction parseComputedMember() {\n expect('[');\n const expr = parseExpression();\n expect(']');\n return expr;\n}\nfunction parseLeftHandSideExpressionAllowCall() {\n var expr, args, property;\n expr = parsePrimaryExpression();\n for (;;) {\n if (match('.')) {\n property = parseNonComputedMember();\n expr = finishMemberExpression('.', expr, property);\n } else if (match('(')) {\n args = parseArguments();\n expr = finishCallExpression(expr, args);\n } else if (match('[')) {\n property = parseComputedMember();\n expr = finishMemberExpression('[', expr, property);\n } else {\n break;\n }\n }\n return expr;\n}\n\n// 11.3 Postfix Expressions\n\nfunction parsePostfixExpression() {\n const expr = parseLeftHandSideExpressionAllowCall();\n if (lookahead.type === TokenPunctuator) {\n if (match('++') || match('--')) {\n throw new Error(DISABLED);\n }\n }\n return expr;\n}\n\n// 11.4 Unary Operators\n\nfunction parseUnaryExpression() {\n var token, expr;\n if (lookahead.type !== TokenPunctuator && lookahead.type !== TokenKeyword) {\n expr = parsePostfixExpression();\n } else if (match('++') || match('--')) {\n throw new Error(DISABLED);\n } else if (match('+') || match('-') || match('~') || match('!')) {\n token = lex();\n expr = parseUnaryExpression();\n expr = finishUnaryExpression(token.value, expr);\n } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) {\n throw new Error(DISABLED);\n } else {\n expr = parsePostfixExpression();\n }\n return expr;\n}\nfunction binaryPrecedence(token) {\n let prec = 0;\n if (token.type !== TokenPunctuator && token.type !== TokenKeyword) {\n return 0;\n }\n switch (token.value) {\n case '||':\n prec = 1;\n break;\n case '&&':\n prec = 2;\n break;\n case '|':\n prec = 3;\n break;\n case '^':\n prec = 4;\n break;\n case '&':\n prec = 5;\n break;\n case '==':\n case '!=':\n case '===':\n case '!==':\n prec = 6;\n break;\n case '<':\n case '>':\n case '<=':\n case '>=':\n case 'instanceof':\n case 'in':\n prec = 7;\n break;\n case '<<':\n case '>>':\n case '>>>':\n prec = 8;\n break;\n case '+':\n case '-':\n prec = 9;\n break;\n case '*':\n case '/':\n case '%':\n prec = 11;\n break;\n }\n return prec;\n}\n\n// 11.5 Multiplicative Operators\n// 11.6 Additive Operators\n// 11.7 Bitwise Shift Operators\n// 11.8 Relational Operators\n// 11.9 Equality Operators\n// 11.10 Binary Bitwise Operators\n// 11.11 Binary Logical Operators\n\nfunction parseBinaryExpression() {\n var marker, markers, expr, token, prec, stack, right, operator, left, i;\n marker = lookahead;\n left = parseUnaryExpression();\n token = lookahead;\n prec = binaryPrecedence(token);\n if (prec === 0) {\n return left;\n }\n token.prec = prec;\n lex();\n markers = [marker, lookahead];\n right = parseUnaryExpression();\n stack = [left, token, right];\n while ((prec = binaryPrecedence(lookahead)) > 0) {\n // Reduce: make a binary expression from the three topmost entries.\n while (stack.length > 2 && prec <= stack[stack.length - 2].prec) {\n right = stack.pop();\n operator = stack.pop().value;\n left = stack.pop();\n markers.pop();\n expr = finishBinaryExpression(operator, left, right);\n stack.push(expr);\n }\n\n // Shift.\n token = lex();\n token.prec = prec;\n stack.push(token);\n markers.push(lookahead);\n expr = parseUnaryExpression();\n stack.push(expr);\n }\n\n // Final reduce to clean-up the stack.\n i = stack.length - 1;\n expr = stack[i];\n markers.pop();\n while (i > 1) {\n markers.pop();\n expr = finishBinaryExpression(stack[i - 1].value, stack[i - 2], expr);\n i -= 2;\n }\n return expr;\n}\n\n// 11.12 Conditional Operator\n\nfunction parseConditionalExpression() {\n var expr, consequent, alternate;\n expr = parseBinaryExpression();\n if (match('?')) {\n lex();\n consequent = parseConditionalExpression();\n expect(':');\n alternate = parseConditionalExpression();\n expr = finishConditionalExpression(expr, consequent, alternate);\n }\n return expr;\n}\n\n// 11.14 Comma Operator\n\nfunction parseExpression() {\n const expr = parseConditionalExpression();\n if (match(',')) {\n throw new Error(DISABLED); // no sequence expressions\n }\n return expr;\n}\nfunction parser (code) {\n source = code;\n index = 0;\n length = source.length;\n lookahead = null;\n peek();\n const expr = parseExpression();\n if (lookahead.type !== TokenEOF) {\n throw new Error('Unexpect token after expression.');\n }\n return expr;\n}\n\nvar Constants = {\n NaN: 'NaN',\n E: 'Math.E',\n LN2: 'Math.LN2',\n LN10: 'Math.LN10',\n LOG2E: 'Math.LOG2E',\n LOG10E: 'Math.LOG10E',\n PI: 'Math.PI',\n SQRT1_2: 'Math.SQRT1_2',\n SQRT2: 'Math.SQRT2',\n MIN_VALUE: 'Number.MIN_VALUE',\n MAX_VALUE: 'Number.MAX_VALUE'\n};\n\nfunction Functions (codegen) {\n function fncall(name, args, cast, type) {\n let obj = codegen(args[0]);\n if (cast) {\n obj = cast + '(' + obj + ')';\n if (cast.lastIndexOf('new ', 0) === 0) obj = '(' + obj + ')';\n }\n return obj + '.' + name + (type < 0 ? '' : type === 0 ? '()' : '(' + args.slice(1).map(codegen).join(',') + ')');\n }\n function fn(name, cast, type) {\n return args => fncall(name, args, cast, type);\n }\n const DATE = 'new Date',\n STRING = 'String',\n REGEXP = 'RegExp';\n return {\n // MATH functions\n isNaN: 'Number.isNaN',\n isFinite: 'Number.isFinite',\n abs: 'Math.abs',\n acos: 'Math.acos',\n asin: 'Math.asin',\n atan: 'Math.atan',\n atan2: 'Math.atan2',\n ceil: 'Math.ceil',\n cos: 'Math.cos',\n exp: 'Math.exp',\n floor: 'Math.floor',\n hypot: 'Math.hypot',\n log: 'Math.log',\n max: 'Math.max',\n min: 'Math.min',\n pow: 'Math.pow',\n random: 'Math.random',\n round: 'Math.round',\n sin: 'Math.sin',\n sqrt: 'Math.sqrt',\n tan: 'Math.tan',\n clamp: function (args) {\n if (args.length < 3) error('Missing arguments to clamp function.');\n if (args.length > 3) error('Too many arguments to clamp function.');\n const a = args.map(codegen);\n return 'Math.max(' + a[1] + ', Math.min(' + a[2] + ',' + a[0] + '))';\n },\n // DATE functions\n now: 'Date.now',\n utc: 'Date.UTC',\n datetime: DATE,\n date: fn('getDate', DATE, 0),\n day: fn('getDay', DATE, 0),\n year: fn('getFullYear', DATE, 0),\n month: fn('getMonth', DATE, 0),\n hours: fn('getHours', DATE, 0),\n minutes: fn('getMinutes', DATE, 0),\n seconds: fn('getSeconds', DATE, 0),\n milliseconds: fn('getMilliseconds', DATE, 0),\n time: fn('getTime', DATE, 0),\n timezoneoffset: fn('getTimezoneOffset', DATE, 0),\n utcdate: fn('getUTCDate', DATE, 0),\n utcday: fn('getUTCDay', DATE, 0),\n utcyear: fn('getUTCFullYear', DATE, 0),\n utcmonth: fn('getUTCMonth', DATE, 0),\n utchours: fn('getUTCHours', DATE, 0),\n utcminutes: fn('getUTCMinutes', DATE, 0),\n utcseconds: fn('getUTCSeconds', DATE, 0),\n utcmilliseconds: fn('getUTCMilliseconds', DATE, 0),\n // sequence functions\n length: fn('length', null, -1),\n // STRING functions\n parseFloat: 'parseFloat',\n parseInt: 'parseInt',\n upper: fn('toUpperCase', STRING, 0),\n lower: fn('toLowerCase', STRING, 0),\n substring: fn('substring', STRING),\n split: fn('split', STRING),\n trim: fn('trim', STRING, 0),\n // REGEXP functions\n regexp: REGEXP,\n test: fn('test', REGEXP),\n // Control Flow functions\n if: function (args) {\n if (args.length < 3) error('Missing arguments to if function.');\n if (args.length > 3) error('Too many arguments to if function.');\n const a = args.map(codegen);\n return '(' + a[0] + '?' + a[1] + ':' + a[2] + ')';\n }\n };\n}\n\nfunction stripQuotes(s) {\n const n = s && s.length - 1;\n return n && (s[0] === '\"' && s[n] === '\"' || s[0] === '\\'' && s[n] === '\\'') ? s.slice(1, -1) : s;\n}\nfunction codegen (opt) {\n opt = opt || {};\n const allowed = opt.allowed ? toSet(opt.allowed) : {},\n forbidden = opt.forbidden ? toSet(opt.forbidden) : {},\n constants = opt.constants || Constants,\n functions = (opt.functions || Functions)(visit),\n globalvar = opt.globalvar,\n fieldvar = opt.fieldvar,\n outputGlobal = isFunction(globalvar) ? globalvar : id => `${globalvar}[\"${id}\"]`;\n let globals = {},\n fields = {},\n memberDepth = 0;\n function visit(ast) {\n if (isString(ast)) return ast;\n const generator = Generators[ast.type];\n if (generator == null) error('Unsupported type: ' + ast.type);\n return generator(ast);\n }\n const Generators = {\n Literal: n => n.raw,\n Identifier: n => {\n const id = n.name;\n if (memberDepth > 0) {\n return id;\n } else if (hasOwnProperty(forbidden, id)) {\n return error('Illegal identifier: ' + id);\n } else if (hasOwnProperty(constants, id)) {\n return constants[id];\n } else if (hasOwnProperty(allowed, id)) {\n return id;\n } else {\n globals[id] = 1;\n return outputGlobal(id);\n }\n },\n MemberExpression: n => {\n const d = !n.computed,\n o = visit(n.object);\n if (d) memberDepth += 1;\n const p = visit(n.property);\n if (o === fieldvar) {\n // strip quotes to sanitize field name (#1653)\n fields[stripQuotes(p)] = 1;\n }\n if (d) memberDepth -= 1;\n return o + (d ? '.' + p : '[' + p + ']');\n },\n CallExpression: n => {\n if (n.callee.type !== 'Identifier') {\n error('Illegal callee type: ' + n.callee.type);\n }\n const callee = n.callee.name,\n args = n.arguments,\n fn = hasOwnProperty(functions, callee) && functions[callee];\n if (!fn) error('Unrecognized function: ' + callee);\n return isFunction(fn) ? fn(args) : fn + '(' + args.map(visit).join(',') + ')';\n },\n ArrayExpression: n => '[' + n.elements.map(visit).join(',') + ']',\n BinaryExpression: n => '(' + visit(n.left) + ' ' + n.operator + ' ' + visit(n.right) + ')',\n UnaryExpression: n => '(' + n.operator + visit(n.argument) + ')',\n ConditionalExpression: n => '(' + visit(n.test) + '?' + visit(n.consequent) + ':' + visit(n.alternate) + ')',\n LogicalExpression: n => '(' + visit(n.left) + n.operator + visit(n.right) + ')',\n ObjectExpression: n => '{' + n.properties.map(visit).join(',') + '}',\n Property: n => {\n memberDepth += 1;\n const k = visit(n.key);\n memberDepth -= 1;\n return k + ':' + visit(n.value);\n }\n };\n function codegen(ast) {\n const result = {\n code: visit(ast),\n globals: Object.keys(globals),\n fields: Object.keys(fields)\n };\n globals = {};\n fields = {};\n return result;\n }\n codegen.functions = functions;\n codegen.constants = constants;\n return codegen;\n}\n\nexport { ASTNode, ArrayExpression, BinaryExpression, CallExpression, ConditionalExpression, Identifier, Literal, LogicalExpression, MemberExpression, ObjectExpression, Property, RawCode, UnaryExpression, codegen as codegenExpression, Constants as constants, Functions as functions, parser as parseExpression };\n", "import { bisector, union, intersection } from 'd3-array';\nimport { field, isDate, toNumber, isArray, inrange, extend, array, error, peek, hasOwnProperty } from 'vega-util';\nimport { Literal } from 'vega-expression';\n\n// Registers vega-util field accessors to protect against XSS attacks\nconst SELECTION_GETTER = Symbol('vega_selection_getter');\nfunction getter(f) {\n if (!f.getter || !f.getter[SELECTION_GETTER]) {\n f.getter = field(f.field);\n f.getter[SELECTION_GETTER] = true;\n }\n return f.getter;\n}\nconst Intersect = 'intersect';\nconst Union = 'union';\nconst VlMulti = 'vlMulti';\nconst VlPoint = 'vlPoint';\nconst Or = 'or';\nconst And = 'and';\nconst SelectionId = '_vgsid_';\nconst $selectionId = field(SelectionId);\n\nconst TYPE_ENUM = 'E',\n TYPE_RANGE_INC = 'R',\n TYPE_RANGE_EXC = 'R-E',\n TYPE_RANGE_LE = 'R-LE',\n TYPE_RANGE_RE = 'R-RE',\n UNIT_INDEX = 'index:unit';\n\n// TODO: revisit date coercion?\nfunction testPoint(datum, entry) {\n var fields = entry.fields,\n values = entry.values,\n n = fields.length,\n i = 0,\n dval,\n f;\n for (; i < n; ++i) {\n f = fields[i];\n dval = getter(f)(datum);\n if (isDate(dval)) dval = toNumber(dval);\n if (isDate(values[i])) values[i] = toNumber(values[i]);\n if (isArray(values[i]) && isDate(values[i][0])) values[i] = values[i].map(toNumber);\n if (f.type === TYPE_ENUM) {\n // Enumerated fields can either specify individual values (single/multi selections)\n // or an array of values (interval selections).\n if (isArray(values[i]) ? values[i].indexOf(dval) < 0 : dval !== values[i]) {\n return false;\n }\n } else {\n if (f.type === TYPE_RANGE_INC) {\n if (!inrange(dval, values[i])) return false;\n } else if (f.type === TYPE_RANGE_RE) {\n // Discrete selection of bins test within the range [bin_start, bin_end).\n if (!inrange(dval, values[i], true, false)) return false;\n } else if (f.type === TYPE_RANGE_EXC) {\n // 'R-E'/'R-LE' included for completeness.\n if (!inrange(dval, values[i], false, false)) return false;\n } else if (f.type === TYPE_RANGE_LE) {\n if (!inrange(dval, values[i], false, true)) return false;\n }\n }\n }\n return true;\n}\n\n/**\n * Tests if a tuple is contained within an interactive selection.\n * @param {string} name - The name of the data set representing the selection.\n * Tuples in the dataset are of the form\n * {unit: string, fields: array<fielddef>, values: array<*>}.\n * Fielddef is of the form\n * {field: string, channel: string, type: 'E' | 'R'} where\n * 'type' identifies whether tuples in the dataset enumerate\n * values for the field, or specify a continuous range.\n * @param {object} datum - The tuple to test for inclusion.\n * @param {string} op - The set operation for combining selections.\n * One of 'intersect' or 'union' (default).\n * @return {boolean} - True if the datum is in the selection, false otherwise.\n */\nfunction selectionTest(name, datum, op) {\n var data = this.context.data[name],\n entries = data ? data.values.value : [],\n unitIdx = data ? data[UNIT_INDEX] && data[UNIT_INDEX].value : undefined,\n intersect = op === Intersect,\n n = entries.length,\n i = 0,\n entry,\n miss,\n count,\n unit,\n b;\n for (; i < n; ++i) {\n entry = entries[i];\n if (unitIdx && intersect) {\n // multi selections union within the same unit and intersect across units.\n miss = miss || {};\n count = miss[unit = entry.unit] || 0;\n\n // if we've already matched this unit, skip.\n if (count === -1) continue;\n b = testPoint(datum, entry);\n miss[unit] = b ? -1 : ++count;\n\n // if we match and there are no other units return true\n // if we've missed against all tuples in this unit return false\n if (b && unitIdx.size === 1) return true;\n if (!b && count === unitIdx.get(unit).count) return false;\n } else {\n b = testPoint(datum, entry);\n\n // if we find a miss and we do require intersection return false\n // if we find a match and we don't require intersection return true\n if (intersect ^ b) return b;\n }\n }\n\n // if intersecting and we made it here, then we saw no misses\n // if not intersecting, then we saw no matches\n // if no active selections, return false\n return n && intersect;\n}\nconst bisect = bisector($selectionId),\n bisectLeft = bisect.left,\n bisectRight = bisect.right;\nfunction selectionIdTest(name, datum, op) {\n const data = this.context.data[name],\n entries = data ? data.values.value : [],\n unitIdx = data ? data[UNIT_INDEX] && data[UNIT_INDEX].value : undefined,\n intersect = op === Intersect,\n value = $selectionId(datum),\n index = bisectLeft(entries, value);\n if (index === entries.length) return false;\n if ($selectionId(entries[index]) !== value) return false;\n if (unitIdx && intersect) {\n if (unitIdx.size === 1) return true;\n if (bisectRight(entries, value) - index < unitIdx.size) return false;\n }\n return true;\n}\n\n/**\n * Maps an array of scene graph items to an array of selection tuples.\n * @param {string} name - The name of the dataset representing the selection.\n * @param {string} base - The base object that generated tuples extend.\n *\n * @returns {array} An array of selection entries for the given unit.\n */\nfunction selectionTuples(array, base) {\n return array.map(x => extend(base.fields ? {\n values: base.fields.map(f => getter(f)(x.datum))\n } : {\n [SelectionId]: $selectionId(x.datum)\n }, base));\n}\n\n/**\n * Resolves selection for use as a scale domain or reads via the API.\n * @param {string} name - The name of the dataset representing the selection\n * @param {string} [op='union'] - The set operation for combining selections.\n * One of 'intersect' or 'union' (default).\n * @param {boolean} isMulti - Identifies a \"multi\" selection to perform more\n * expensive resolution computation.\n * @param {boolean} vl5 - With Vega-Lite v5, \"multi\" selections are now called \"point\"\n * selections, and thus the resolved tuple should reflect this name.\n * This parameter allows us to reflect this change without triggering\n * a major version bump for Vega.\n * @returns {object} An object of selected fields and values.\n */\nfunction selectionResolve(name, op, isMulti, vl5) {\n var data = this.context.data[name],\n entries = data ? data.values.value : [],\n resolved = {},\n multiRes = {},\n types = {},\n entry,\n fields,\n values,\n unit,\n field,\n value,\n res,\n resUnit,\n type,\n union,\n n = entries.length,\n i = 0,\n j,\n m;\n\n // First union all entries within the same unit.\n for (; i < n; ++i) {\n entry = entries[i];\n unit = entry.unit;\n fields = entry.fields;\n values = entry.values;\n if (fields && values) {\n // Intentional selection stores\n for (j = 0, m = fields.length; j < m; ++j) {\n field = fields[j];\n res = resolved[field.field] || (resolved[field.field] = {});\n resUnit = res[unit] || (res[unit] = []);\n types[field.field] = type = field.type.charAt(0);\n union = ops[`${type}_union`];\n res[unit] = union(resUnit, array(values[j]));\n }\n\n // If the same multi-selection is repeated over views and projected over\n // an encoding, it may operate over different fields making it especially\n // tricky to reliably resolve it. At best, we can de-dupe identical entries\n // but doing so may be more computationally expensive than it is worth.\n // Instead, for now, we simply transform our store representation into\n // a more human-friendly one.\n if (isMulti) {\n resUnit = multiRes[unit] || (multiRes[unit] = []);\n resUnit.push(array(values).reduce((obj, curr, j) => (obj[fields[j].field] = curr, obj), {}));\n }\n } else {\n // Short circuit extensional selectionId stores which hold sorted IDs unique to each unit.\n field = SelectionId;\n value = $selectionId(entry);\n res = resolved[field] || (resolved[field] = {});\n resUnit = res[unit] || (res[unit] = []);\n resUnit.push(value);\n if (isMulti) {\n resUnit = multiRes[unit] || (multiRes[unit] = []);\n resUnit.push({\n [SelectionId]: value\n });\n }\n }\n }\n\n // Then resolve fields across units as per the op.\n op = op || Union;\n if (resolved[SelectionId]) {\n resolved[SelectionId] = ops[`${SelectionId}_${op}`](...Object.values(resolved[SelectionId]));\n } else {\n Object.keys(resolved).forEach(field => {\n resolved[field] = Object.keys(resolved[field]).map(unit => resolved[field][unit]).reduce((acc, curr) => acc === undefined ? curr : ops[`${types[field]}_${op}`](acc, curr));\n });\n }\n entries = Object.keys(multiRes);\n if (isMulti && entries.length) {\n const key = vl5 ? VlPoint : VlMulti;\n resolved[key] = op === Union ? {\n [Or]: entries.reduce((acc, k) => (acc.push(...multiRes[k]), acc), [])\n } : {\n [And]: entries.map(k => ({\n [Or]: multiRes[k]\n }))\n };\n }\n return resolved;\n}\nvar ops = {\n [`${SelectionId}_union`]: union,\n [`${SelectionId}_intersect`]: intersection,\n E_union: function (base, value) {\n if (!base.length) return value;\n var i = 0,\n n = value.length;\n for (; i < n; ++i) if (base.indexOf(value[i]) < 0) base.push(value[i]);\n return base;\n },\n E_intersect: function (base, value) {\n return !base.length ? value : base.filter(v => value.indexOf(v) >= 0);\n },\n R_union: function (base, value) {\n var lo = toNumber(value[0]),\n hi = toNumber(value[1]);\n if (lo > hi) {\n lo = value[1];\n hi = value[0];\n }\n if (!base.length) return [lo, hi];\n if (base[0] > lo) base[0] = lo;\n if (base[1] < hi) base[1] = hi;\n return base;\n },\n R_intersect: function (base, value) {\n var lo = toNumber(value[0]),\n hi = toNumber(value[1]);\n if (lo > hi) {\n lo = value[1];\n hi = value[0];\n }\n if (!base.length) return [lo, hi];\n if (hi < base[0] || base[1] < lo) {\n return [];\n } else {\n if (base[0] < lo) base[0] = lo;\n if (base[1] > hi) base[1] = hi;\n }\n return base;\n }\n};\n\nconst DataPrefix = ':',\n IndexPrefix = '@';\nfunction selectionVisitor(name, args, scope, params) {\n if (args[0].type !== Literal) error('First argument to selection functions must be a string literal.');\n const data = args[0].value,\n op = args.length >= 2 && peek(args).value,\n field = 'unit',\n indexName = IndexPrefix + field,\n dataName = DataPrefix + data;\n\n // eslint-disable-next-line no-prototype-builtins\n if (op === Intersect && !hasOwnProperty(params, indexName)) {\n params[indexName] = scope.getData(data).indataRef(scope, field);\n }\n\n // eslint-disable-next-line no-prototype-builtins\n if (!hasOwnProperty(params, dataName)) {\n params[dataName] = scope.getData(data).tuplesRef();\n }\n}\n\nexport { selectionIdTest, selectionResolve, selectionTest, selectionTuples, selectionVisitor };\n", "import { truthy, error, hasOwnProperty, isFunction, isString, stringValue, extend, isArray, isObject, field, peek, identity, array as array$1, isBoolean, isDate, isNumber, isRegExp, toBoolean, toDate, toNumber, toString, flush, lerp, pad, span, inrange, truncate, quarter, utcquarter, extent, clampRange, panLinear, panLog, panPow, panSymlog, zoomLinear, zoomLog, zoomPow, zoomSymlog } from 'vega-util';\nimport { Literal, codegenExpression, constants, functions, parseExpression, CallExpression } from 'vega-expression';\nimport { isRegisteredScale, bandSpace, scale as scale$1, scaleFraction } from 'vega-scale';\nimport { geoArea as geoArea$1, geoBounds as geoBounds$1, geoCentroid as geoCentroid$1 } from 'd3-geo';\nimport { rgb, lab, hcl, hsl } from 'd3-color';\nimport { isTuple } from 'vega-dataflow';\nimport { Gradient, pathRender, pathParse, Bounds, intersect as intersect$1 } from 'vega-scenegraph';\nimport { selectionVisitor, selectionTest, selectionIdTest, selectionResolve, selectionTuples } from 'vega-selections';\nimport { random, cumulativeNormal, cumulativeLogNormal, cumulativeUniform, densityNormal, densityLogNormal, densityUniform, quantileNormal, quantileLogNormal, quantileUniform, sampleNormal, sampleLogNormal, sampleUniform } from 'vega-statistics';\nimport { utcOffset, utcSequence, timeOffset, timeSequence, timeUnitSpecifier, week, utcweek, dayofyear, utcdayofyear } from 'vega-time';\nimport { range as range$1 } from 'd3-array';\n\nfunction data(name) {\n const data = this.context.data[name];\n return data ? data.values.value : [];\n}\nfunction indata(name, field, value) {\n const index = this.context.data[name]['index:' + field],\n entry = index ? index.value.get(value) : undefined;\n return entry ? entry.count : entry;\n}\nfunction setdata(name, tuples) {\n const df = this.context.dataflow,\n data = this.context.data[name],\n input = data.input;\n df.pulse(input, df.changeset().remove(truthy).insert(tuples));\n return 1;\n}\n\nfunction encode (item, name, retval) {\n if (item) {\n const df = this.context.dataflow,\n target = item.mark.source;\n df.pulse(target, df.changeset().encode(item, name));\n }\n return retval !== undefined ? retval : item;\n}\n\nconst wrap = method => function (value, spec) {\n const locale = this.context.dataflow.locale();\n return value === null ? 'null' : locale[method](spec)(value);\n};\nconst format = wrap('format');\nconst timeFormat = wrap('timeFormat');\nconst utcFormat = wrap('utcFormat');\nconst timeParse = wrap('timeParse');\nconst utcParse = wrap('utcParse');\nconst dateObj = new Date(2000, 0, 1);\nfunction time(month, day, specifier) {\n if (!Number.isInteger(month) || !Number.isInteger(day)) return '';\n dateObj.setYear(2000);\n dateObj.setMonth(month);\n dateObj.setDate(day);\n return timeFormat.call(this, dateObj, specifier);\n}\nfunction monthFormat(month) {\n return time.call(this, month, 1, '%B');\n}\nfunction monthAbbrevFormat(month) {\n return time.call(this, month, 1, '%b');\n}\nfunction dayFormat(day) {\n return time.call(this, 0, 2 + day, '%A');\n}\nfunction dayAbbrevFormat(day) {\n return time.call(this, 0, 2 + day, '%a');\n}\n\nconst DataPrefix = ':';\nconst IndexPrefix = '@';\nconst ScalePrefix = '%';\nconst SignalPrefix = '$';\n\nfunction dataVisitor(name, args, scope, params) {\n if (args[0].type !== Literal) {\n error('First argument to data functions must be a string literal.');\n }\n const data = args[0].value,\n dataName = DataPrefix + data;\n if (!hasOwnProperty(dataName, params)) {\n try {\n params[dataName] = scope.getData(data).tuplesRef();\n } catch (err) {\n // if data set does not exist, there's nothing to track\n }\n }\n}\nfunction indataVisitor(name, args, scope, params) {\n if (args[0].type !== Literal) error('First argument to indata must be a string literal.');\n if (args[1].type !== Literal) error('Second argument to indata must be a string literal.');\n const data = args[0].value,\n field = args[1].value,\n indexName = IndexPrefix + field;\n if (!hasOwnProperty(indexName, params)) {\n params[indexName] = scope.getData(data).indataRef(scope, field);\n }\n}\nfunction scaleVisitor(name, args, scope, params) {\n if (args[0].type === Literal) {\n // add scale dependency\n addScaleDependency(scope, params, args[0].value);\n } else {\n // indirect scale lookup; add all scales as parameters\n for (name in scope.scales) {\n addScaleDependency(scope, params, name);\n }\n }\n}\nfunction addScaleDependency(scope, params, name) {\n const scaleName = ScalePrefix + name;\n if (!hasOwnProperty(params, scaleName)) {\n try {\n params[scaleName] = scope.scaleRef(name);\n } catch (err) {\n // TODO: error handling? warning?\n }\n }\n}\n\nfunction getScale(nameOrFunction, ctx) {\n if (isFunction(nameOrFunction)) {\n return nameOrFunction;\n }\n if (isString(nameOrFunction)) {\n const maybeScale = ctx.scales[nameOrFunction];\n return maybeScale && isRegisteredScale(maybeScale.value) ? maybeScale.value : undefined;\n }\n return undefined;\n}\nfunction internalScaleFunctions(codegen, fnctx, visitors) {\n // add helper method to the 'this' expression function context\n fnctx.__bandwidth = s => s && s.bandwidth ? s.bandwidth() : 0;\n\n // register AST visitors for internal scale functions\n visitors._bandwidth = scaleVisitor;\n visitors._range = scaleVisitor;\n visitors._scale = scaleVisitor;\n\n // resolve scale reference directly to the signal hash argument\n const ref = arg => '_[' + (arg.type === Literal ? stringValue(ScalePrefix + arg.value) : stringValue(ScalePrefix) + '+' + codegen(arg)) + ']';\n\n // define and return internal scale function code generators\n // these internal functions are called by mark encoders\n return {\n _bandwidth: args => `this.__bandwidth(${ref(args[0])})`,\n _range: args => `${ref(args[0])}.range()`,\n _scale: args => `${ref(args[0])}(${codegen(args[1])})`\n };\n}\n\nfunction geoMethod(methodName, globalMethod) {\n return function (projection, geojson, group) {\n if (projection) {\n // projection defined, use it\n const p = getScale(projection, (group || this).context);\n return p && p.path[methodName](geojson);\n } else {\n // projection undefined, use global method\n return globalMethod(geojson);\n }\n };\n}\nconst geoArea = geoMethod('area', geoArea$1);\nconst geoBounds = geoMethod('bounds', geoBounds$1);\nconst geoCentroid = geoMethod('centroid', geoCentroid$1);\nfunction geoScale(projection, group) {\n const p = getScale(projection, (group || this).context);\n return p && p.scale();\n}\n\nfunction inScope (item) {\n const group = this.context.group;\n let value = false;\n if (group) while (item) {\n if (item === group) {\n value = true;\n break;\n }\n item = item.mark.group;\n }\n return value;\n}\n\nfunction log(df, method, args) {\n try {\n df[method].apply(df, ['EXPRESSION'].concat([].slice.call(args)));\n } catch (err) {\n df.warn(err);\n }\n return args[args.length - 1];\n}\nfunction warn() {\n return log(this.context.dataflow, 'warn', arguments);\n}\nfunction info() {\n return log(this.context.dataflow, 'info', arguments);\n}\nfunction debug() {\n return log(this.context.dataflow, 'debug', arguments);\n}\n\n// https://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\nfunction channel_luminance_value(channelValue) {\n const val = channelValue / 255;\n if (val <= 0.03928) {\n return val / 12.92;\n }\n return Math.pow((val + 0.055) / 1.055, 2.4);\n}\nfunction luminance(color) {\n const c = rgb(color),\n r = channel_luminance_value(c.r),\n g = channel_luminance_value(c.g),\n b = channel_luminance_value(c.b);\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n}\n\n// https://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef\nfunction contrast(color1, color2) {\n const lum1 = luminance(color1),\n lum2 = luminance(color2),\n lumL = Math.max(lum1, lum2),\n lumD = Math.min(lum1, lum2);\n return (lumL + 0.05) / (lumD + 0.05);\n}\n\nfunction merge () {\n const args = [].slice.call(arguments);\n args.unshift({});\n return extend(...args);\n}\n\nfunction equal(a, b) {\n return a === b || a !== a && b !== b ? true : isArray(a) ? isArray(b) && a.length === b.length ? equalArray(a, b) : false : isObject(a) && isObject(b) ? equalObject(a, b) : false;\n}\nfunction equalArray(a, b) {\n for (let i = 0, n = a.length; i < n; ++i) {\n if (!equal(a[i], b[i])) return false;\n }\n return true;\n}\nfunction equalObject(a, b) {\n for (const key in a) {\n if (!equal(a[key], b[key])) return false;\n }\n return true;\n}\nfunction removePredicate(props) {\n return _ => equalObject(props, _);\n}\nfunction modify (name, insert, remove, toggle, modify, values) {\n const df = this.context.dataflow,\n data = this.context.data[name],\n input = data.input,\n stamp = df.stamp();\n let changes = data.changes,\n predicate,\n key;\n if (df._trigger === false || !(input.value.length || insert || toggle)) {\n // nothing to do!\n return 0;\n }\n if (!changes || changes.stamp < stamp) {\n data.changes = changes = df.changeset();\n changes.stamp = stamp;\n df.runAfter(() => {\n data.modified = true;\n df.pulse(input, changes).run();\n }, true, 1);\n }\n if (remove) {\n predicate = remove === true ? truthy : isArray(remove) || isTuple(remove) ? remove : removePredicate(remove);\n changes.remove(predicate);\n }\n if (insert) {\n changes.insert(insert);\n }\n if (toggle) {\n predicate = removePredicate(toggle);\n if (input.value.some(predicate)) {\n changes.remove(predicate);\n } else {\n changes.insert(toggle);\n }\n }\n if (modify) {\n for (key in values) {\n changes.modify(modify, key, values[key]);\n }\n }\n return 1;\n}\n\nfunction pinchDistance(event) {\n const t = event.touches,\n dx = t[0].clientX - t[1].clientX,\n dy = t[0].clientY - t[1].clientY;\n return Math.hypot(dx, dy);\n}\nfunction pinchAngle(event) {\n const t = event.touches;\n return Math.atan2(t[0].clientY - t[1].clientY, t[0].clientX - t[1].clientX);\n}\n\n// memoize accessor functions\nconst accessors = {};\nfunction pluck (data, name) {\n const accessor = accessors[name] || (accessors[name] = field(name));\n return isArray(data) ? data.map(accessor) : accessor(data);\n}\n\nfunction array(seq) {\n return isArray(seq) || ArrayBuffer.isView(seq) ? seq : null;\n}\nfunction sequence(seq) {\n return array(seq) || (isString(seq) ? seq : null);\n}\nfunction join(seq) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n return array(seq).join(...args);\n}\nfunction indexof(seq) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n return sequence(seq).indexOf(...args);\n}\nfunction lastindexof(seq) {\n for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n return sequence(seq).lastIndexOf(...args);\n}\nfunction slice(seq) {\n for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n return sequence(seq).slice(...args);\n}\nfunction replace(str, pattern, repl) {\n if (isFunction(repl)) error('Function argument passed to replace.');\n return String(str).replace(pattern, repl);\n}\nfunction reverse(seq) {\n return array(seq).slice().reverse();\n}\n\nfunction bandspace(count, paddingInner, paddingOuter) {\n return bandSpace(count || 0, paddingInner || 0, paddingOuter || 0);\n}\nfunction bandwidth(name, group) {\n const s = getScale(name, (group || this).context);\n return s && s.bandwidth ? s.bandwidth() : 0;\n}\nfunction copy(name, group) {\n const s = getScale(name, (group || this).context);\n return s ? s.copy() : undefined;\n}\nfunction domain(name, group) {\n const s = getScale(name, (group || this).context);\n return s ? s.domain() : [];\n}\nfunction invert(name, range, group) {\n const s = getScale(name, (group || this).context);\n return !s ? undefined : isArray(range) ? (s.invertRange || s.invert)(range) : (s.invert || s.invertExtent)(range);\n}\nfunction range(name, group) {\n const s = getScale(name, (group || this).context);\n return s && s.range ? s.range() : [];\n}\nfunction scale(name, value, group) {\n const s = getScale(name, (group || this).context);\n return s ? s(value) : undefined;\n}\n\nfunction scaleGradient (scale, p0, p1, count, group) {\n scale = getScale(scale, (group || this).context);\n const gradient = Gradient(p0, p1);\n let stops = scale.domain(),\n min = stops[0],\n max = peek(stops),\n fraction = identity;\n if (!(max - min)) {\n // expand scale if domain has zero span, fix #1479\n scale = (scale.interpolator ? scale$1('sequential')().interpolator(scale.interpolator()) : scale$1('linear')().interpolate(scale.interpolate()).range(scale.range())).domain([min = 0, max = 1]);\n } else {\n fraction = scaleFraction(scale, min, max);\n }\n if (scale.ticks) {\n stops = scale.ticks(+count || 15);\n if (min !== stops[0]) stops.unshift(min);\n if (max !== peek(stops)) stops.push(max);\n }\n stops.forEach(_ => gradient.stop(fraction(_), scale(_)));\n return gradient;\n}\n\nfunction geoShape(projection, geojson, group) {\n const p = getScale(projection, (group || this).context);\n return function (context) {\n return p ? p.path.context(context)(geojson) : '';\n };\n}\nfunction pathShape(path) {\n let p = null;\n return function (context) {\n return context ? pathRender(context, p = p || pathParse(path)) : path;\n };\n}\n\nconst datum = d => d.data;\nfunction treeNodes(name, context) {\n const tree = data.call(context, name);\n return tree.root && tree.root.lookup || {};\n}\nfunction treePath(name, source, target) {\n const nodes = treeNodes(name, this),\n s = nodes[source],\n t = nodes[target];\n return s && t ? s.path(t).map(datum) : undefined;\n}\nfunction treeAncestors(name, node) {\n const n = treeNodes(name, this)[node];\n return n ? n.ancestors().map(datum) : undefined;\n}\n\nconst _window = () => typeof window !== 'undefined' && window || null;\nfunction screen() {\n const w = _window();\n return w ? w.screen : {};\n}\nfunction windowSize() {\n const w = _window();\n return w ? [w.innerWidth, w.innerHeight] : [undefined, undefined];\n}\nfunction containerSize() {\n const view = this.context.dataflow,\n el = view.container && view.container();\n return el ? [el.clientWidth, el.clientHeight] : [undefined, undefined];\n}\n\nfunction intersect (b, opt, group) {\n if (!b) return [];\n const [u, v] = b,\n box = new Bounds().set(u[0], u[1], v[0], v[1]),\n scene = group || this.context.dataflow.scenegraph().root;\n return intersect$1(scene, box, filter(opt));\n}\nfunction filter(opt) {\n let p = null;\n if (opt) {\n const types = array$1(opt.marktype),\n names = array$1(opt.markname);\n p = _ => (!types.length || types.some(t => _.marktype === t)) && (!names.length || names.some(s => _.name === s));\n }\n return p;\n}\n\n/**\n * Appends a new point to the lasso\n *\n * @param {*} lasso the lasso in pixel space\n * @param {*} x the x coordinate in pixel space\n * @param {*} y the y coordinate in pixel space\n * @param {*} minDist the minimum distance, in pixels, that thenew point needs to be apart from the last point\n * @returns a new array containing the lasso with the new point\n */\nfunction lassoAppend(lasso, x, y) {\n let minDist = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 5;\n lasso = array$1(lasso);\n const last = lasso[lasso.length - 1];\n\n // Add point to lasso if its the first point or distance to last point exceed minDist\n return last === undefined || Math.hypot(last[0] - x, last[1] - y) > minDist ? [...lasso, [x, y]] : lasso;\n}\n\n/**\n * Generates a svg path command which draws a lasso\n *\n * @param {*} lasso the lasso in pixel space in the form [[x,y], [x,y], ...]\n * @returns the svg path command that draws the lasso\n */\nfunction lassoPath(lasso) {\n return array$1(lasso).reduce((svg, _ref, i) => {\n let [x, y] = _ref;\n return svg += i == 0 ? `M ${x},${y} ` : i === lasso.length - 1 ? ' Z' : `L ${x},${y} `;\n }, '');\n}\n\n/**\n * Inverts the lasso from pixel space to an array of vega scenegraph tuples\n *\n * @param {*} data the dataset\n * @param {*} pixelLasso the lasso in pixel space, [[x,y], [x,y], ...]\n * @param {*} unit the unit where the lasso is defined\n *\n * @returns an array of vega scenegraph tuples\n */\nfunction intersectLasso(markname, pixelLasso, unit) {\n const {\n x,\n y,\n mark\n } = unit;\n const bb = new Bounds().set(Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER, Number.MIN_SAFE_INTEGER, Number.MIN_SAFE_INTEGER);\n\n // Get bounding box around lasso\n for (const [px, py] of pixelLasso) {\n if (px < bb.x1) bb.x1 = px;\n if (px > bb.x2) bb.x2 = px;\n if (py < bb.y1) bb.y1 = py;\n if (py > bb.y2) bb.y2 = py;\n }\n\n // Translate bb against unit coordinates\n bb.translate(x, y);\n const intersection = intersect([[bb.x1, bb.y1], [bb.x2, bb.y2]], markname, mark);\n\n // Check every point against the lasso\n return intersection.filter(tuple => pointInPolygon(tuple.x, tuple.y, pixelLasso));\n}\n\n/**\n * Performs a test if a point is inside a polygon based on the idea from\n * https://wrf.ecse.rpi.edu/Research/Short_Notes/pnpoly.html\n *\n * This method will not need the same start/end point since it wraps around the edges of the array\n *\n * @param {*} test a point to test against\n * @param {*} polygon a polygon in the form [[x,y], [x,y], ...]\n * @returns true if the point lies inside the polygon, false otherwise\n */\nfunction pointInPolygon(testx, testy, polygon) {\n let intersections = 0;\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n const [prevX, prevY] = polygon[j];\n const [x, y] = polygon[i];\n\n // count intersections\n if (y > testy != prevY > testy && testx < (prevX - x) * (testy - y) / (prevY - y) + x) {\n intersections++;\n }\n }\n\n // point is in polygon if intersection count is odd\n return intersections & 1;\n}\n\n// Expression function context object\nconst functionContext = {\n random() {\n return random();\n },\n // override default\n cumulativeNormal,\n cumulativeLogNormal,\n cumulativeUniform,\n densityNormal,\n densityLogNormal,\n densityUniform,\n quantileNormal,\n quantileLogNormal,\n quantileUniform,\n sampleNormal,\n sampleLogNormal,\n sampleUniform,\n isArray,\n isBoolean,\n isDate,\n isDefined(_) {\n return _ !== undefined;\n },\n isNumber,\n isObject,\n isRegExp,\n isString,\n isTuple,\n isValid(_) {\n return _ != null && _ === _;\n },\n toBoolean,\n toDate(_) {\n return toDate(_);\n },\n // suppress extra arguments\n toNumber,\n toString,\n indexof,\n join,\n lastindexof,\n replace,\n reverse,\n slice,\n flush,\n lerp,\n merge,\n pad,\n peek,\n pluck,\n span,\n inrange,\n truncate,\n rgb,\n lab,\n hcl,\n hsl,\n luminance,\n contrast,\n sequence: range$1,\n format,\n utcFormat,\n utcParse,\n utcOffset,\n utcSequence,\n timeFormat,\n timeParse,\n timeOffset,\n timeSequence,\n timeUnitSpecifier,\n monthFormat,\n monthAbbrevFormat,\n dayFormat,\n dayAbbrevFormat,\n quarter,\n utcquarter,\n week,\n utcweek,\n dayofyear,\n utcdayofyear,\n warn,\n info,\n debug,\n extent(_) {\n return extent(_);\n },\n // suppress extra arguments\n inScope,\n intersect,\n clampRange,\n pinchDistance,\n pinchAngle,\n screen,\n containerSize,\n windowSize,\n bandspace,\n setdata,\n pathShape,\n panLinear,\n panLog,\n panPow,\n panSymlog,\n zoomLinear,\n zoomLog,\n zoomPow,\n zoomSymlog,\n encode,\n modify,\n lassoAppend,\n lassoPath,\n intersectLasso\n};\nconst eventFunctions = ['view', 'item', 'group', 'xy', 'x', 'y'],\n // event functions\n eventPrefix = 'event.vega.',\n // event function prefix\n thisPrefix = 'this.',\n // function context prefix\n astVisitors = {}; // AST visitors for dependency analysis\n\n// export code generator parameters\nconst codegenParams = {\n forbidden: ['_'],\n allowed: ['datum', 'event', 'item'],\n fieldvar: 'datum',\n globalvar: id => `_[${stringValue(SignalPrefix + id)}]`,\n functions: buildFunctions,\n constants: constants,\n visitors: astVisitors\n};\n\n// export code generator\nconst codeGenerator = codegenExpression(codegenParams);\n\n// Build expression function registry\nfunction buildFunctions(codegen) {\n const fn = functions(codegen);\n eventFunctions.forEach(name => fn[name] = eventPrefix + name);\n for (const name in functionContext) {\n fn[name] = thisPrefix + name;\n }\n extend(fn, internalScaleFunctions(codegen, functionContext, astVisitors));\n return fn;\n}\n\n// Register an expression function\nfunction expressionFunction(name, fn, visitor) {\n if (arguments.length === 1) {\n return functionContext[name];\n }\n\n // register with the functionContext\n functionContext[name] = fn;\n\n // if there is an astVisitor register that, too\n if (visitor) astVisitors[name] = visitor;\n\n // if the code generator has already been initialized,\n // we need to also register the function with it\n if (codeGenerator) codeGenerator.functions[name] = thisPrefix + name;\n return this;\n}\n\n// register expression functions with ast visitors\nexpressionFunction('bandwidth', bandwidth, scaleVisitor);\nexpressionFunction('copy', copy, scaleVisitor);\nexpressionFunction('domain', domain, scaleVisitor);\nexpressionFunction('range', range, scaleVisitor);\nexpressionFunction('invert', invert, scaleVisitor);\nexpressionFunction('scale', scale, scaleVisitor);\nexpressionFunction('gradient', scaleGradient, scaleVisitor);\nexpressionFunction('geoArea', geoArea, scaleVisitor);\nexpressionFunction('geoBounds', geoBounds, scaleVisitor);\nexpressionFunction('geoCentroid', geoCentroid, scaleVisitor);\nexpressionFunction('geoShape', geoShape, scaleVisitor);\nexpressionFunction('geoScale', geoScale, scaleVisitor);\nexpressionFunction('indata', indata, indataVisitor);\nexpressionFunction('data', data, dataVisitor);\nexpressionFunction('treePath', treePath, dataVisitor);\nexpressionFunction('treeAncestors', treeAncestors, dataVisitor);\n\n// register Vega-Lite selection functions\nexpressionFunction('vlSelectionTest', selectionTest, selectionVisitor);\nexpressionFunction('vlSelectionIdTest', selectionIdTest, selectionVisitor);\nexpressionFunction('vlSelectionResolve', selectionResolve, selectionVisitor);\nexpressionFunction('vlSelectionTuples', selectionTuples);\n\nfunction parser (expr, scope) {\n const params = {};\n\n // parse the expression to an abstract syntax tree (ast)\n let ast;\n try {\n expr = isString(expr) ? expr : stringValue(expr) + '';\n ast = parseExpression(expr);\n } catch (err) {\n error('Expression parse error: ' + expr);\n }\n\n // analyze ast function calls for dependencies\n ast.visit(node => {\n if (node.type !== CallExpression) return;\n const name = node.callee.name,\n visit = codegenParams.visitors[name];\n if (visit) visit(name, node.arguments, scope, params);\n });\n\n // perform code generation\n const gen = codeGenerator(ast);\n\n // collect signal dependencies\n gen.globals.forEach(name => {\n const signalName = SignalPrefix + name;\n if (!hasOwnProperty(params, signalName) && scope.getSignal(name)) {\n params[signalName] = scope.signalRef(name);\n }\n });\n\n // return generated expression code and dependencies\n return {\n $expr: extend({\n code: gen.code\n }, scope.options.ast ? {\n ast\n } : null),\n $fields: gen.fields,\n $params: params\n };\n}\n\nexport { DataPrefix, IndexPrefix, ScalePrefix, SignalPrefix, bandspace, bandwidth, codeGenerator, codegenParams, containerSize, contrast, copy, data, dataVisitor, dayAbbrevFormat, dayFormat, debug, domain, encode, expressionFunction, format, functionContext, geoArea, geoBounds, geoCentroid, geoScale, geoShape, inScope, indata, indataVisitor, indexof, info, invert, join, lastindexof, luminance, merge, modify, monthAbbrevFormat, monthFormat, parser as parseExpression, pathShape, pinchAngle, pinchDistance, pluck, range, replace, reverse, scale, scaleGradient, scaleVisitor, screen, setdata, slice, timeFormat, timeParse, treeAncestors, treePath, utcFormat, utcParse, warn, windowSize };\n", "import { toSet, stringValue, error, isArray, isObject, hasOwnProperty, accessor, key, field, array, compare, truthy } from 'vega-util';\nimport { tupleid } from 'vega-dataflow';\n\n/**\n * Parse a serialized dataflow specification.\n */\nfunction parse (spec) {\n const ctx = this,\n operators = spec.operators || [];\n\n // parse background\n if (spec.background) {\n ctx.background = spec.background;\n }\n\n // parse event configuration\n if (spec.eventConfig) {\n ctx.eventConfig = spec.eventConfig;\n }\n\n // parse locale configuration\n if (spec.locale) {\n ctx.locale = spec.locale;\n }\n\n // parse operators\n operators.forEach(entry => ctx.parseOperator(entry));\n\n // parse operator parameters\n operators.forEach(entry => ctx.parseOperatorParameters(entry));\n\n // parse streams\n (spec.streams || []).forEach(entry => ctx.parseStream(entry));\n\n // parse updates\n (spec.updates || []).forEach(entry => ctx.parseUpdate(entry));\n return ctx.resolve();\n}\n\nconst Skip = toSet(['rule']),\n Swap = toSet(['group', 'image', 'rect']);\nfunction adjustSpatial(encode, marktype) {\n let code = '';\n if (Skip[marktype]) return code;\n if (encode.x2) {\n if (encode.x) {\n if (Swap[marktype]) {\n code += 'if(o.x>o.x2)$=o.x,o.x=o.x2,o.x2=$;';\n }\n code += 'o.width=o.x2-o.x;';\n } else {\n code += 'o.x=o.x2-(o.width||0);';\n }\n }\n if (encode.xc) {\n code += 'o.x=o.xc-(o.width||0)/2;';\n }\n if (encode.y2) {\n if (encode.y) {\n if (Swap[marktype]) {\n code += 'if(o.y>o.y2)$=o.y,o.y=o.y2,o.y2=$;';\n }\n code += 'o.height=o.y2-o.y;';\n } else {\n code += 'o.y=o.y2-(o.height||0);';\n }\n }\n if (encode.yc) {\n code += 'o.y=o.yc-(o.height||0)/2;';\n }\n return code;\n}\nfunction canonicalType(type) {\n return (type + '').toLowerCase();\n}\nfunction isOperator(type) {\n return canonicalType(type) === 'operator';\n}\nfunction isCollect(type) {\n return canonicalType(type) === 'collect';\n}\n\nfunction expression(ctx, args, code) {\n // wrap code in return statement if expression does not terminate\n if (!code.endsWith(';')) {\n code = 'return(' + code + ');';\n }\n const fn = Function(...args.concat(code));\n return ctx && ctx.functions ? fn.bind(ctx.functions) : fn;\n}\n\n// generate code for comparing a single field\nfunction _compare(u, v, lt, gt) {\n return `((u = ${u}) < (v = ${v}) || u == null) && v != null ? ${lt}\n : (u > v || v == null) && u != null ? ${gt}\n : ((v = v instanceof Date ? +v : v), (u = u instanceof Date ? +u : u)) !== u && v === v ? ${lt}\n : v !== v && u === u ? ${gt} : `;\n}\nvar expressionCodegen = {\n /**\n * Parse an expression used to update an operator value.\n */\n operator: (ctx, expr) => expression(ctx, ['_'], expr.code),\n /**\n * Parse an expression provided as an operator parameter value.\n */\n parameter: (ctx, expr) => expression(ctx, ['datum', '_'], expr.code),\n /**\n * Parse an expression applied to an event stream.\n */\n event: (ctx, expr) => expression(ctx, ['event'], expr.code),\n /**\n * Parse an expression used to handle an event-driven operator update.\n */\n handler: (ctx, expr) => {\n const code = `var datum=event.item&&event.item.datum;return ${expr.code};`;\n return expression(ctx, ['_', 'event'], code);\n },\n /**\n * Parse an expression that performs visual encoding.\n */\n encode: (ctx, encode) => {\n const {\n marktype,\n channels\n } = encode;\n let code = 'var o=item,datum=o.datum,m=0,$;';\n for (const name in channels) {\n const o = 'o[' + stringValue(name) + ']';\n code += `$=${channels[name].code};if(${o}!==$)${o}=$,m=1;`;\n }\n code += adjustSpatial(channels, marktype);\n code += 'return m;';\n return expression(ctx, ['item', '_'], code);\n },\n /**\n * Optimized code generators for access and comparison.\n */\n codegen: {\n get(path) {\n const ref = `[${path.map(stringValue).join('][')}]`;\n const get = Function('_', `return _${ref};`);\n get.path = ref;\n return get;\n },\n comparator(fields, orders) {\n let t;\n const map = (f, i) => {\n const o = orders[i];\n let u, v;\n if (f.path) {\n u = `a${f.path}`;\n v = `b${f.path}`;\n } else {\n (t = t || {})['f' + i] = f;\n u = `this.f${i}(a)`;\n v = `this.f${i}(b)`;\n }\n return _compare(u, v, -o, o);\n };\n const fn = Function('a', 'b', 'var u, v; return ' + fields.map(map).join('') + '0;');\n return t ? fn.bind(t) : fn;\n }\n }\n};\n\n/**\n * Parse a dataflow operator.\n */\nfunction parseOperator(spec) {\n const ctx = this;\n if (isOperator(spec.type) || !spec.type) {\n ctx.operator(spec, spec.update ? ctx.operatorExpression(spec.update) : null);\n } else {\n ctx.transform(spec, spec.type);\n }\n}\n\n/**\n * Parse and assign operator parameters.\n */\nfunction parseOperatorParameters(spec) {\n const ctx = this;\n if (spec.params) {\n const op = ctx.get(spec.id);\n if (!op) error('Invalid operator id: ' + spec.id);\n ctx.dataflow.connect(op, op.parameters(ctx.parseParameters(spec.params), spec.react, spec.initonly));\n }\n}\n\n/**\n * Parse a set of operator parameters.\n */\nfunction parseParameters(spec, params) {\n params = params || {};\n const ctx = this;\n for (const key in spec) {\n const value = spec[key];\n params[key] = isArray(value) ? value.map(v => parseParameter(v, ctx, params)) : parseParameter(value, ctx, params);\n }\n return params;\n}\n\n/**\n * Parse a single parameter.\n */\nfunction parseParameter(spec, ctx, params) {\n if (!spec || !isObject(spec)) return spec;\n for (let i = 0, n = PARSERS.length, p; i < n; ++i) {\n p = PARSERS[i];\n if (hasOwnProperty(spec, p.key)) {\n return p.parse(spec, ctx, params);\n }\n }\n return spec;\n}\n\n/** Reference parsers. */\nvar PARSERS = [{\n key: '$ref',\n parse: getOperator\n}, {\n key: '$key',\n parse: getKey\n}, {\n key: '$expr',\n parse: getExpression\n}, {\n key: '$field',\n parse: getField\n}, {\n key: '$encode',\n parse: getEncode\n}, {\n key: '$compare',\n parse: getCompare\n}, {\n key: '$context',\n parse: getContext\n}, {\n key: '$subflow',\n parse: getSubflow\n}, {\n key: '$tupleid',\n parse: getTupleId\n}];\n\n/**\n * Resolve an operator reference.\n */\nfunction getOperator(_, ctx) {\n return ctx.get(_.$ref) || error('Operator not defined: ' + _.$ref);\n}\n\n/**\n * Resolve an expression reference.\n */\nfunction getExpression(_, ctx, params) {\n if (_.$params) {\n // parse expression parameters\n ctx.parseParameters(_.$params, params);\n }\n const k = 'e:' + _.$expr.code;\n return ctx.fn[k] || (ctx.fn[k] = accessor(ctx.parameterExpression(_.$expr), _.$fields));\n}\n\n/**\n * Resolve a key accessor reference.\n */\nfunction getKey(_, ctx) {\n const k = 'k:' + _.$key + '_' + !!_.$flat;\n return ctx.fn[k] || (ctx.fn[k] = key(_.$key, _.$flat, ctx.expr.codegen));\n}\n\n/**\n * Resolve a field accessor reference.\n */\nfunction getField(_, ctx) {\n if (!_.$field) return null;\n const k = 'f:' + _.$field + '_' + _.$name;\n return ctx.fn[k] || (ctx.fn[k] = field(_.$field, _.$name, ctx.expr.codegen));\n}\n\n/**\n * Resolve a comparator function reference.\n */\nfunction getCompare(_, ctx) {\n // As of Vega 5.5.3, $tupleid sort is no longer used.\n // Keep here for now for backwards compatibility.\n const k = 'c:' + _.$compare + '_' + _.$order,\n c = array(_.$compare).map(_ => _ && _.$tupleid ? tupleid : _);\n return ctx.fn[k] || (ctx.fn[k] = compare(c, _.$order, ctx.expr.codegen));\n}\n\n/**\n * Resolve an encode operator reference.\n */\nfunction getEncode(_, ctx) {\n const spec = _.$encode,\n encode = {};\n for (const name in spec) {\n const enc = spec[name];\n encode[name] = accessor(ctx.encodeExpression(enc.$expr), enc.$fields);\n encode[name].output = enc.$output;\n }\n return encode;\n}\n\n/**\n * Resolve a context reference.\n */\nfunction getContext(_, ctx) {\n return ctx;\n}\n\n/**\n * Resolve a recursive subflow specification.\n */\nfunction getSubflow(_, ctx) {\n const spec = _.$subflow;\n return function (dataflow, key, parent) {\n const subctx = ctx.fork().parse(spec),\n op = subctx.get(spec.operators[0].id),\n p = subctx.signals.parent;\n if (p) p.set(parent);\n op.detachSubflow = () => ctx.detach(subctx);\n return op;\n };\n}\n\n/**\n * Resolve a tuple id reference.\n */\nfunction getTupleId() {\n return tupleid;\n}\n\n/**\n * Parse an event stream specification.\n */\nfunction parseStream (spec) {\n var ctx = this,\n filter = spec.filter != null ? ctx.eventExpression(spec.filter) : undefined,\n stream = spec.stream != null ? ctx.get(spec.stream) : undefined,\n args;\n if (spec.source) {\n stream = ctx.events(spec.source, spec.type, filter);\n } else if (spec.merge) {\n args = spec.merge.map(_ => ctx.get(_));\n stream = args[0].merge.apply(args[0], args.slice(1));\n }\n if (spec.between) {\n args = spec.between.map(_ => ctx.get(_));\n stream = stream.between(args[0], args[1]);\n }\n if (spec.filter) {\n stream = stream.filter(filter);\n }\n if (spec.throttle != null) {\n stream = stream.throttle(+spec.throttle);\n }\n if (spec.debounce != null) {\n stream = stream.debounce(+spec.debounce);\n }\n if (stream == null) {\n error('Invalid stream definition: ' + JSON.stringify(spec));\n }\n if (spec.consume) stream.consume(true);\n ctx.stream(spec, stream);\n}\n\n/**\n * Parse an event-driven operator update.\n */\nfunction parseUpdate (spec) {\n var ctx = this,\n srcid = isObject(srcid = spec.source) ? srcid.$ref : srcid,\n source = ctx.get(srcid),\n target = null,\n update = spec.update,\n params = undefined;\n if (!source) error('Source not defined: ' + spec.source);\n target = spec.target && spec.target.$expr ? ctx.eventExpression(spec.target.$expr) : ctx.get(spec.target);\n if (update && update.$expr) {\n if (update.$params) {\n params = ctx.parseParameters(update.$params);\n }\n update = ctx.handlerExpression(update.$expr);\n }\n ctx.update(spec, source, target, update, params);\n}\n\nconst SKIP = {\n skip: true\n};\nfunction getState(options) {\n var ctx = this,\n state = {};\n if (options.signals) {\n var signals = state.signals = {};\n Object.keys(ctx.signals).forEach(key => {\n const op = ctx.signals[key];\n if (options.signals(key, op)) {\n signals[key] = op.value;\n }\n });\n }\n if (options.data) {\n var data = state.data = {};\n Object.keys(ctx.data).forEach(key => {\n const dataset = ctx.data[key];\n if (options.data(key, dataset)) {\n data[key] = dataset.input.value;\n }\n });\n }\n if (ctx.subcontext && options.recurse !== false) {\n state.subcontext = ctx.subcontext.map(ctx => ctx.getState(options));\n }\n return state;\n}\nfunction setState(state) {\n var ctx = this,\n df = ctx.dataflow,\n data = state.data,\n signals = state.signals;\n Object.keys(signals || {}).forEach(key => {\n df.update(ctx.signals[key], signals[key], SKIP);\n });\n Object.keys(data || {}).forEach(key => {\n df.pulse(ctx.data[key].input, df.changeset().remove(truthy).insert(data[key]));\n });\n (state.subcontext || []).forEach((substate, i) => {\n const subctx = ctx.subcontext[i];\n if (subctx) subctx.setState(substate);\n });\n}\n\n/**\n * Context objects store the current parse state.\n * Enables lookup of parsed operators, event streams, accessors, etc.\n * Provides a 'fork' method for creating child contexts for subflows.\n */\nfunction context (df, transforms, functions, expr) {\n return new Context(df, transforms, functions, expr);\n}\nfunction Context(df, transforms, functions, expr) {\n this.dataflow = df;\n this.transforms = transforms;\n this.events = df.events.bind(df);\n this.expr = expr || expressionCodegen, this.signals = {};\n this.scales = {};\n this.nodes = {};\n this.data = {};\n this.fn = {};\n if (functions) {\n this.functions = Object.create(functions);\n this.functions.context = this;\n }\n}\nfunction Subcontext(ctx) {\n this.dataflow = ctx.dataflow;\n this.transforms = ctx.transforms;\n this.events = ctx.events;\n this.expr = ctx.expr;\n this.signals = Object.create(ctx.signals);\n this.scales = Object.create(ctx.scales);\n this.nodes = Object.create(ctx.nodes);\n this.data = Object.create(ctx.data);\n this.fn = Object.create(ctx.fn);\n if (ctx.functions) {\n this.functions = Object.create(ctx.functions);\n this.functions.context = this;\n }\n}\nContext.prototype = Subcontext.prototype = {\n fork() {\n const ctx = new Subcontext(this);\n (this.subcontext || (this.subcontext = [])).push(ctx);\n return ctx;\n },\n detach(ctx) {\n this.subcontext = this.subcontext.filter(c => c !== ctx);\n\n // disconnect all nodes in the subcontext\n // wipe out targets first for better efficiency\n const keys = Object.keys(ctx.nodes);\n for (const key of keys) ctx.nodes[key]._targets = null;\n for (const key of keys) ctx.nodes[key].detach();\n ctx.nodes = null;\n },\n get(id) {\n return this.nodes[id];\n },\n set(id, node) {\n return this.nodes[id] = node;\n },\n add(spec, op) {\n const ctx = this,\n df = ctx.dataflow,\n data = spec.value;\n ctx.set(spec.id, op);\n if (isCollect(spec.type) && data) {\n if (data.$ingest) {\n df.ingest(op, data.$ingest, data.$format);\n } else if (data.$request) {\n df.preload(op, data.$request, data.$format);\n } else {\n df.pulse(op, df.changeset().insert(data));\n }\n }\n if (spec.root) {\n ctx.root = op;\n }\n if (spec.parent) {\n let p = ctx.get(spec.parent.$ref);\n if (p) {\n df.connect(p, [op]);\n op.targets().add(p);\n } else {\n (ctx.unresolved = ctx.unresolved || []).push(() => {\n p = ctx.get(spec.parent.$ref);\n df.connect(p, [op]);\n op.targets().add(p);\n });\n }\n }\n if (spec.signal) {\n ctx.signals[spec.signal] = op;\n }\n if (spec.scale) {\n ctx.scales[spec.scale] = op;\n }\n if (spec.data) {\n for (const name in spec.data) {\n const data = ctx.data[name] || (ctx.data[name] = {});\n spec.data[name].forEach(role => data[role] = op);\n }\n }\n },\n resolve() {\n (this.unresolved || []).forEach(fn => fn());\n delete this.unresolved;\n return this;\n },\n operator(spec, update) {\n this.add(spec, this.dataflow.add(spec.value, update));\n },\n transform(spec, type) {\n this.add(spec, this.dataflow.add(this.transforms[canonicalType(type)]));\n },\n stream(spec, stream) {\n this.set(spec.id, stream);\n },\n update(spec, stream, target, update, params) {\n this.dataflow.on(stream, target, update, params, spec.options);\n },\n // expression parsing\n operatorExpression(expr) {\n return this.expr.operator(this, expr);\n },\n parameterExpression(expr) {\n return this.expr.parameter(this, expr);\n },\n eventExpression(expr) {\n return this.expr.event(this, expr);\n },\n handlerExpression(expr) {\n return this.expr.handler(this, expr);\n },\n encodeExpression(encode) {\n return this.expr.encode(this, encode);\n },\n // parse methods\n parse,\n parseOperator,\n parseOperatorParameters,\n parseParameters,\n parseStream,\n parseUpdate,\n // state methods\n getState,\n setState\n};\n\nexport { context };\n", "import { isString, hasOwnProperty, error, truthy, constant, extend, array, isObject, isArray, toSet, debounce, isDate, inherits, stringValue } from 'vega-util';\nimport { changeset, isChangeSet, EventStream, transforms, Dataflow, asyncCallback } from 'vega-dataflow';\nimport { point, renderModule, CanvasHandler, RenderType, Scenegraph } from 'vega-scenegraph';\nimport { tickStep } from 'd3-array';\nimport { functionContext } from 'vega-functions';\nimport { context } from 'vega-runtime';\nimport { interval } from 'd3-timer';\nimport { locale } from 'vega-format';\n\n// initialize aria role and label attributes\nfunction initializeAria(view) {\n const el = view.container();\n if (el) {\n el.setAttribute('role', 'graphics-document');\n el.setAttribute('aria-roleDescription', 'visualization');\n ariaLabel(el, view.description());\n }\n}\n\n// update aria-label if we have a DOM container element\nfunction ariaLabel(el, desc) {\n if (el) desc == null ? el.removeAttribute('aria-label') : el.setAttribute('aria-label', desc);\n}\n\nfunction background (view) {\n // respond to background signal\n view.add(null, _ => {\n view._background = _.bg;\n view._resize = 1;\n return _.bg;\n }, {\n bg: view._signals.background\n });\n}\n\nconst Default = 'default';\nfunction cursor (view) {\n // get cursor signal, add to dataflow if needed\n const cursor = view._signals.cursor || (view._signals.cursor = view.add({\n user: Default,\n item: null\n }));\n\n // evaluate cursor on each pointermove event\n view.on(view.events('view', 'pointermove'), cursor, (_, event) => {\n const value = cursor.value,\n user = value ? isString(value) ? value : value.user : Default,\n item = event.item && event.item.cursor || null;\n return value && user === value.user && item == value.item ? value : {\n user: user,\n item: item\n };\n });\n\n // when cursor signal updates, set visible cursor\n view.add(null, function (_) {\n let user = _.cursor,\n item = this.value;\n if (!isString(user)) {\n item = user.item;\n user = user.user;\n }\n setCursor(view, user && user !== Default ? user : item || user);\n return item;\n }, {\n cursor: cursor\n });\n}\nfunction setCursor(view, cursor) {\n const el = view.globalCursor() ? typeof document !== 'undefined' && document.body : view.container();\n if (el) {\n return cursor == null ? el.style.removeProperty('cursor') : el.style.cursor = cursor;\n }\n}\n\nfunction dataref(view, name) {\n var data = view._runtime.data;\n if (!hasOwnProperty(data, name)) {\n error('Unrecognized data set: ' + name);\n }\n return data[name];\n}\nfunction data(name, values) {\n return arguments.length < 2 ? dataref(this, name).values.value : change.call(this, name, changeset().remove(truthy).insert(values));\n}\nfunction change(name, changes) {\n if (!isChangeSet(changes)) {\n error('Second argument to changes must be a changeset.');\n }\n const dataset = dataref(this, name);\n dataset.modified = true;\n return this.pulse(dataset.input, changes);\n}\nfunction insert(name, _) {\n return change.call(this, name, changeset().insert(_));\n}\nfunction remove(name, _) {\n return change.call(this, name, changeset().remove(_));\n}\n\nfunction width(view) {\n var padding = view.padding();\n return Math.max(0, view._viewWidth + padding.left + padding.right);\n}\nfunction height(view) {\n var padding = view.padding();\n return Math.max(0, view._viewHeight + padding.top + padding.bottom);\n}\nfunction offset(view) {\n var padding = view.padding(),\n origin = view._origin;\n return [padding.left + origin[0], padding.top + origin[1]];\n}\nfunction resizeRenderer(view) {\n var origin = offset(view),\n w = width(view),\n h = height(view);\n view._renderer.background(view.background());\n view._renderer.resize(w, h, origin);\n view._handler.origin(origin);\n view._resizeListeners.forEach(handler => {\n try {\n handler(w, h);\n } catch (error) {\n view.error(error);\n }\n });\n}\n\n/**\n * Extend an event with additional view-specific methods.\n * Adds a new property ('vega') to an event that provides a number\n * of methods for querying information about the current interaction.\n * The vega object provides the following methods:\n * view - Returns the backing View instance.\n * item - Returns the currently active scenegraph item (if any).\n * group - Returns the currently active scenegraph group (if any).\n * This method accepts a single string-typed argument indicating the name\n * of the desired parent group. The scenegraph will be traversed from\n * the item up towards the root to search for a matching group. If no\n * argument is provided the enclosing group for the active item is\n * returned, unless the item it itself a group, in which case it is\n * returned directly.\n * xy - Returns a two-element array containing the x and y coordinates for\n * mouse or touch events. For touch events, this is based on the first\n * elements in the changedTouches array. This method accepts a single\n * argument: either an item instance or mark name that should serve as\n * the reference coordinate system. If no argument is provided the\n * top-level view coordinate system is assumed.\n * x - Returns the current x-coordinate, accepts the same arguments as xy.\n * y - Returns the current y-coordinate, accepts the same arguments as xy.\n * @param {Event} event - The input event to extend.\n * @param {Item} item - The currently active scenegraph item (if any).\n * @return {Event} - The extended input event.\n */\nfunction eventExtend (view, event, item) {\n var r = view._renderer,\n el = r && r.canvas(),\n p,\n e,\n translate;\n if (el) {\n translate = offset(view);\n e = event.changedTouches ? event.changedTouches[0] : event;\n p = point(e, el);\n p[0] -= translate[0];\n p[1] -= translate[1];\n }\n event.dataflow = view;\n event.item = item;\n event.vega = extension(view, item, p);\n return event;\n}\nfunction extension(view, item, point) {\n const itemGroup = item ? item.mark.marktype === 'group' ? item : item.mark.group : null;\n function group(name) {\n var g = itemGroup,\n i;\n if (name) for (i = item; i; i = i.mark.group) {\n if (i.mark.name === name) {\n g = i;\n break;\n }\n }\n return g && g.mark && g.mark.interactive ? g : {};\n }\n function xy(item) {\n if (!item) return point;\n if (isString(item)) item = group(item);\n const p = point.slice();\n while (item) {\n p[0] -= item.x || 0;\n p[1] -= item.y || 0;\n item = item.mark && item.mark.group;\n }\n return p;\n }\n return {\n view: constant(view),\n item: constant(item || {}),\n group: group,\n xy: xy,\n x: item => xy(item)[0],\n y: item => xy(item)[1]\n };\n}\n\nconst VIEW = 'view',\n TIMER = 'timer',\n WINDOW = 'window',\n NO_TRAP = {\n trap: false\n };\n\n/**\n * Initialize event handling configuration.\n * @param {object} config - The configuration settings.\n * @return {object}\n */\nfunction initializeEventConfig(config) {\n const events = extend({\n defaults: {}\n }, config);\n const unpack = (obj, keys) => {\n keys.forEach(k => {\n if (isArray(obj[k])) obj[k] = toSet(obj[k]);\n });\n };\n unpack(events.defaults, ['prevent', 'allow']);\n unpack(events, ['view', 'window', 'selector']);\n return events;\n}\nfunction trackEventListener(view, sources, type, handler) {\n view._eventListeners.push({\n type: type,\n sources: array(sources),\n handler: handler\n });\n}\nfunction prevent(view, type) {\n var def = view._eventConfig.defaults,\n prevent = def.prevent,\n allow = def.allow;\n return prevent === false || allow === true ? false : prevent === true || allow === false ? true : prevent ? prevent[type] : allow ? !allow[type] : view.preventDefault();\n}\nfunction permit(view, key, type) {\n const rule = view._eventConfig && view._eventConfig[key];\n if (rule === false || isObject(rule) && !rule[type]) {\n view.warn(`Blocked ${key} ${type} event listener.`);\n return false;\n }\n return true;\n}\n\n/**\n * Create a new event stream from an event source.\n * @param {object} source - The event source to monitor.\n * @param {string} type - The event type.\n * @param {function(object): boolean} [filter] - Event filter function.\n * @return {EventStream}\n */\nfunction events(source, type, filter) {\n var view = this,\n s = new EventStream(filter),\n send = function (e, item) {\n view.runAsync(null, () => {\n if (source === VIEW && prevent(view, type)) {\n e.preventDefault();\n }\n s.receive(eventExtend(view, e, item));\n });\n },\n sources;\n if (source === TIMER) {\n if (permit(view, 'timer', type)) {\n view.timer(send, type);\n }\n } else if (source === VIEW) {\n if (permit(view, 'view', type)) {\n // send traps errors, so use {trap: false} option\n view.addEventListener(type, send, NO_TRAP);\n }\n } else {\n if (source === WINDOW) {\n if (permit(view, 'window', type) && typeof window !== 'undefined') {\n sources = [window];\n }\n } else if (typeof document !== 'undefined') {\n if (permit(view, 'selector', type)) {\n sources = Array.from(document.querySelectorAll(source));\n }\n }\n if (!sources) {\n view.warn('Can not resolve event source: ' + source);\n } else {\n for (var i = 0, n = sources.length; i < n; ++i) {\n sources[i].addEventListener(type, send);\n }\n trackEventListener(view, sources, type, send);\n }\n }\n return s;\n}\n\nfunction itemFilter(event) {\n return event.item;\n}\nfunction markTarget(event) {\n // grab upstream collector feeding the mark operator\n return event.item.mark.source;\n}\nfunction invoke(name) {\n return function (_, event) {\n return event.vega.view().changeset().encode(event.item, name);\n };\n}\nfunction hover (hoverSet, leaveSet) {\n hoverSet = [hoverSet || 'hover'];\n leaveSet = [leaveSet || 'update', hoverSet[0]];\n\n // invoke hover set upon pointerover\n this.on(this.events('view', 'pointerover', itemFilter), markTarget, invoke(hoverSet));\n\n // invoke leave set upon pointerout\n this.on(this.events('view', 'pointerout', itemFilter), markTarget, invoke(leaveSet));\n return this;\n}\n\n/**\n * Finalize a View instance that is being removed.\n * Cancel any running timers.\n * Remove all external event listeners.\n * Remove any currently displayed tooltip.\n */\nfunction finalize () {\n var tooltip = this._tooltip,\n timers = this._timers,\n handlers = this._handler.handlers(),\n listeners = this._eventListeners,\n n,\n m,\n e,\n h,\n t;\n n = timers.length;\n while (--n >= 0) {\n timers[n].stop();\n }\n n = listeners.length;\n while (--n >= 0) {\n e = listeners[n];\n m = e.sources.length;\n while (--m >= 0) {\n e.sources[m].removeEventListener(e.type, e.handler);\n }\n }\n if (tooltip) {\n tooltip.call(this, this._handler, null, null, null);\n }\n\n // turn off all registered handlers\n n = handlers.length;\n while (--n >= 0) {\n t = handlers[n].type;\n h = handlers[n].handler;\n this._handler.off(t, h);\n }\n return this;\n}\n\nfunction element (tag, attr, text) {\n const el = document.createElement(tag);\n for (const key in attr) el.setAttribute(key, attr[key]);\n if (text != null) el.textContent = text;\n return el;\n}\n\nconst BindClass = 'vega-bind',\n NameClass = 'vega-bind-name',\n RadioClass = 'vega-bind-radio';\n\n/**\n * Bind a signal to an external HTML input element. The resulting two-way\n * binding will propagate input changes to signals, and propagate signal\n * changes to the input element state. If this view instance has no parent\n * element, we assume the view is headless and no bindings are created.\n * @param {Element|string} el - The parent DOM element to which the input\n * element should be appended as a child. If string-valued, this argument\n * will be treated as a CSS selector. If null or undefined, the parent\n * element of this view will be used as the element.\n * @param {object} param - The binding parameters which specify the signal\n * to bind to, the input element type, and type-specific configuration.\n * @return {View} - This view instance.\n */\nfunction bind (view, el, binding) {\n if (!el) return;\n const param = binding.param;\n let bind = binding.state;\n if (!bind) {\n bind = binding.state = {\n elements: null,\n active: false,\n set: null,\n update: value => {\n if (value != view.signal(param.signal)) {\n view.runAsync(null, () => {\n bind.source = true;\n view.signal(param.signal, value);\n });\n }\n }\n };\n if (param.debounce) {\n bind.update = debounce(param.debounce, bind.update);\n }\n }\n const create = param.input == null && param.element ? target : generate;\n create(bind, el, param, view);\n if (!bind.active) {\n view.on(view._signals[param.signal], null, () => {\n bind.source ? bind.source = false : bind.set(view.signal(param.signal));\n });\n bind.active = true;\n }\n return bind;\n}\n\n/**\n * Bind the signal to an external EventTarget.\n */\nfunction target(bind, node, param, view) {\n const type = param.event || 'input';\n const handler = () => bind.update(node.value);\n\n // initialize signal value to external input value\n view.signal(param.signal, node.value);\n\n // listen for changes on the element\n node.addEventListener(type, handler);\n\n // register with view, so we can remove it upon finalization\n trackEventListener(view, node, type, handler);\n\n // propagate change to element\n bind.set = value => {\n node.value = value;\n node.dispatchEvent(event(type));\n };\n}\nfunction event(type) {\n return typeof Event !== 'undefined' ? new Event(type) : {\n type\n };\n}\n\n/**\n * Generate an HTML input form element and bind it to a signal.\n */\nfunction generate(bind, el, param, view) {\n const value = view.signal(param.signal);\n const div = element('div', {\n 'class': BindClass\n });\n const wrapper = param.input === 'radio' ? div : div.appendChild(element('label'));\n wrapper.appendChild(element('span', {\n 'class': NameClass\n }, param.name || param.signal));\n el.appendChild(div);\n let input = form;\n switch (param.input) {\n case 'checkbox':\n input = checkbox;\n break;\n case 'select':\n input = select;\n break;\n case 'radio':\n input = radio;\n break;\n case 'range':\n input = range;\n break;\n }\n input(bind, wrapper, param, value);\n}\n\n/**\n * Generates an arbitrary input form element.\n * The input type is controlled via user-provided parameters.\n */\nfunction form(bind, el, param, value) {\n const node = element('input');\n for (const key in param) {\n if (key !== 'signal' && key !== 'element') {\n node.setAttribute(key === 'input' ? 'type' : key, param[key]);\n }\n }\n node.setAttribute('name', param.signal);\n node.value = value;\n el.appendChild(node);\n node.addEventListener('input', () => bind.update(node.value));\n bind.elements = [node];\n bind.set = value => node.value = value;\n}\n\n/**\n * Generates a checkbox input element.\n */\nfunction checkbox(bind, el, param, value) {\n const attr = {\n type: 'checkbox',\n name: param.signal\n };\n if (value) attr.checked = true;\n const node = element('input', attr);\n el.appendChild(node);\n node.addEventListener('change', () => bind.update(node.checked));\n bind.elements = [node];\n bind.set = value => node.checked = !!value || null;\n}\n\n/**\n * Generates a selection list input element.\n */\nfunction select(bind, el, param, value) {\n const node = element('select', {\n name: param.signal\n }),\n labels = param.labels || [];\n param.options.forEach((option, i) => {\n const attr = {\n value: option\n };\n if (valuesEqual(option, value)) attr.selected = true;\n node.appendChild(element('option', attr, (labels[i] || option) + ''));\n });\n el.appendChild(node);\n node.addEventListener('change', () => {\n bind.update(param.options[node.selectedIndex]);\n });\n bind.elements = [node];\n bind.set = value => {\n for (let i = 0, n = param.options.length; i < n; ++i) {\n if (valuesEqual(param.options[i], value)) {\n node.selectedIndex = i;\n return;\n }\n }\n };\n}\n\n/**\n * Generates a radio button group.\n */\nfunction radio(bind, el, param, value) {\n const group = element('span', {\n 'class': RadioClass\n }),\n labels = param.labels || [];\n el.appendChild(group);\n bind.elements = param.options.map((option, i) => {\n const attr = {\n type: 'radio',\n name: param.signal,\n value: option\n };\n if (valuesEqual(option, value)) attr.checked = true;\n const input = element('input', attr);\n input.addEventListener('change', () => bind.update(option));\n const label = element('label', {}, (labels[i] || option) + '');\n label.prepend(input);\n group.appendChild(label);\n return input;\n });\n bind.set = value => {\n const nodes = bind.elements,\n n = nodes.length;\n for (let i = 0; i < n; ++i) {\n if (valuesEqual(nodes[i].value, value)) nodes[i].checked = true;\n }\n };\n}\n\n/**\n * Generates a slider input element.\n */\nfunction range(bind, el, param, value) {\n value = value !== undefined ? value : (+param.max + +param.min) / 2;\n const max = param.max != null ? param.max : Math.max(100, +value) || 100,\n min = param.min || Math.min(0, max, +value) || 0,\n step = param.step || tickStep(min, max, 100);\n const node = element('input', {\n type: 'range',\n name: param.signal,\n min: min,\n max: max,\n step: step\n });\n node.value = value;\n const span = element('span', {}, +value);\n el.appendChild(node);\n el.appendChild(span);\n const update = () => {\n span.textContent = node.value;\n bind.update(+node.value);\n };\n\n // subscribe to both input and change\n node.addEventListener('input', update);\n node.addEventListener('change', update);\n bind.elements = [node];\n bind.set = value => {\n node.value = value;\n span.textContent = value;\n };\n}\nfunction valuesEqual(a, b) {\n return a === b || a + '' === b + '';\n}\n\nfunction initializeRenderer (view, r, el, constructor, scaleFactor, opt) {\n r = r || new constructor(view.loader());\n return r.initialize(el, width(view), height(view), offset(view), scaleFactor, opt).background(view.background());\n}\n\nfunction trap (view, fn) {\n return !fn ? null : function () {\n try {\n fn.apply(this, arguments);\n } catch (error) {\n view.error(error);\n }\n };\n}\n\nfunction initializeHandler (view, prevHandler, el, constructor) {\n // instantiate scenegraph handler\n const handler = new constructor(view.loader(), trap(view, view.tooltip())).scene(view.scenegraph().root).initialize(el, offset(view), view);\n\n // transfer event handlers\n if (prevHandler) {\n prevHandler.handlers().forEach(h => {\n handler.on(h.type, h.handler);\n });\n }\n return handler;\n}\n\nfunction initialize (el, elBind) {\n const view = this,\n type = view._renderType,\n config = view._eventConfig.bind,\n module = renderModule(type);\n\n // containing dom element\n el = view._el = el ? lookup(view, el, true) : null;\n\n // initialize aria attributes\n initializeAria(view);\n\n // select appropriate renderer & handler\n if (!module) view.error('Unrecognized renderer type: ' + type);\n const Handler = module.handler || CanvasHandler,\n Renderer = el ? module.renderer : module.headless;\n\n // initialize renderer and input handler\n view._renderer = !Renderer ? null : initializeRenderer(view, view._renderer, el, Renderer);\n view._handler = initializeHandler(view, view._handler, el, Handler);\n view._redraw = true;\n\n // initialize signal bindings\n if (el && config !== 'none') {\n elBind = elBind ? view._elBind = lookup(view, elBind, true) : el.appendChild(element('form', {\n 'class': 'vega-bindings'\n }));\n view._bind.forEach(_ => {\n if (_.param.element && config !== 'container') {\n _.element = lookup(view, _.param.element, !!_.param.input);\n }\n });\n view._bind.forEach(_ => {\n bind(view, _.element || elBind, _);\n });\n }\n return view;\n}\nfunction lookup(view, el, clear) {\n if (typeof el === 'string') {\n if (typeof document !== 'undefined') {\n el = document.querySelector(el);\n if (!el) {\n view.error('Signal bind element not found: ' + el);\n return null;\n }\n } else {\n view.error('DOM document instance not found.');\n return null;\n }\n }\n if (el && clear) {\n try {\n el.textContent = '';\n } catch (e) {\n el = null;\n view.error(e);\n }\n }\n return el;\n}\n\nconst number = _ => +_ || 0;\nconst paddingObject = _ => ({\n top: _,\n bottom: _,\n left: _,\n right: _\n});\nfunction padding (_) {\n return isObject(_) ? {\n top: number(_.top),\n bottom: number(_.bottom),\n left: number(_.left),\n right: number(_.right)\n } : paddingObject(number(_));\n}\n\n/**\n * Render the current scene in a headless fashion.\n * This method is asynchronous, returning a Promise instance.\n * @return {Promise} - A Promise that resolves to a renderer.\n */\nasync function renderHeadless (view, type, scaleFactor, opt) {\n const module = renderModule(type),\n ctr = module && module.headless;\n if (!ctr) error('Unrecognized renderer type: ' + type);\n await view.runAsync();\n return initializeRenderer(view, null, null, ctr, scaleFactor, opt).renderAsync(view._scenegraph.root);\n}\n\n/**\n * Produce an image URL for the visualization. Depending on the type\n * parameter, the generated URL contains data for either a PNG or SVG image.\n * The URL can be used (for example) to download images of the visualization.\n * This method is asynchronous, returning a Promise instance.\n * @param {string} type - The image type. One of 'svg', 'png' or 'canvas'.\n * The 'canvas' and 'png' types are synonyms for a PNG image.\n * @return {Promise} - A promise that resolves to an image URL.\n */\nasync function renderToImageURL (type, scaleFactor) {\n if (type !== RenderType.Canvas && type !== RenderType.SVG && type !== RenderType.PNG) {\n error('Unrecognized image type: ' + type);\n }\n const r = await renderHeadless(this, type, scaleFactor);\n return type === RenderType.SVG ? toBlobURL(r.svg(), 'image/svg+xml') : r.canvas().toDataURL('image/png');\n}\nfunction toBlobURL(data, mime) {\n const blob = new Blob([data], {\n type: mime\n });\n return window.URL.createObjectURL(blob);\n}\n\n/**\n * Produce a Canvas instance containing a rendered visualization.\n * This method is asynchronous, returning a Promise instance.\n * @return {Promise} - A promise that resolves to a Canvas instance.\n */\nasync function renderToCanvas (scaleFactor, opt) {\n const r = await renderHeadless(this, RenderType.Canvas, scaleFactor, opt);\n return r.canvas();\n}\n\n/**\n * Produce a rendered SVG string of the visualization.\n * This method is asynchronous, returning a Promise instance.\n * @return {Promise} - A promise that resolves to an SVG string.\n */\nasync function renderToSVG (scaleFactor) {\n const r = await renderHeadless(this, RenderType.SVG, scaleFactor);\n return r.svg();\n}\n\nfunction runtime (view, spec, expr) {\n return context(view, transforms, functionContext, expr).parse(spec);\n}\n\nfunction scale(name) {\n var scales = this._runtime.scales;\n if (!hasOwnProperty(scales, name)) {\n error('Unrecognized scale or projection: ' + name);\n }\n return scales[name].value;\n}\n\nvar Width = 'width',\n Height = 'height',\n Padding = 'padding',\n Skip = {\n skip: true\n };\nfunction viewWidth(view, width) {\n var a = view.autosize(),\n p = view.padding();\n return width - (a && a.contains === Padding ? p.left + p.right : 0);\n}\nfunction viewHeight(view, height) {\n var a = view.autosize(),\n p = view.padding();\n return height - (a && a.contains === Padding ? p.top + p.bottom : 0);\n}\nfunction initializeResize(view) {\n var s = view._signals,\n w = s[Width],\n h = s[Height],\n p = s[Padding];\n function resetSize() {\n view._autosize = view._resize = 1;\n }\n\n // respond to width signal\n view._resizeWidth = view.add(null, _ => {\n view._width = _.size;\n view._viewWidth = viewWidth(view, _.size);\n resetSize();\n }, {\n size: w\n });\n\n // respond to height signal\n view._resizeHeight = view.add(null, _ => {\n view._height = _.size;\n view._viewHeight = viewHeight(view, _.size);\n resetSize();\n }, {\n size: h\n });\n\n // respond to padding signal\n const resizePadding = view.add(null, resetSize, {\n pad: p\n });\n\n // set rank to run immediately after source signal\n view._resizeWidth.rank = w.rank + 1;\n view._resizeHeight.rank = h.rank + 1;\n resizePadding.rank = p.rank + 1;\n}\nfunction resizeView(viewWidth, viewHeight, width, height, origin, auto) {\n this.runAfter(view => {\n let rerun = 0;\n\n // reset autosize flag\n view._autosize = 0;\n\n // width value changed: update signal, skip resize op\n if (view.width() !== width) {\n rerun = 1;\n view.signal(Width, width, Skip); // set width, skip update calc\n view._resizeWidth.skip(true); // skip width resize handler\n }\n\n // height value changed: update signal, skip resize op\n if (view.height() !== height) {\n rerun = 1;\n view.signal(Height, height, Skip); // set height, skip update calc\n view._resizeHeight.skip(true); // skip height resize handler\n }\n\n // view width changed: update view property, set resize flag\n if (view._viewWidth !== viewWidth) {\n view._resize = 1;\n view._viewWidth = viewWidth;\n }\n\n // view height changed: update view property, set resize flag\n if (view._viewHeight !== viewHeight) {\n view._resize = 1;\n view._viewHeight = viewHeight;\n }\n\n // origin changed: update view property, set resize flag\n if (view._origin[0] !== origin[0] || view._origin[1] !== origin[1]) {\n view._resize = 1;\n view._origin = origin;\n }\n\n // run dataflow on width/height signal change\n if (rerun) view.run('enter');\n if (auto) view.runAfter(v => v.resize());\n }, false, 1);\n}\n\n/**\n * Get the current view state, consisting of signal values and/or data sets.\n * @param {object} [options] - Options flags indicating which state to export.\n * If unspecified, all signals and data sets will be exported.\n * @param {function(string, Operator):boolean} [options.signals] - Optional\n * predicate function for testing if a signal should be included in the\n * exported state. If unspecified, all signals will be included, except for\n * those named 'parent' or those which refer to a Transform value.\n * @param {function(string, object):boolean} [options.data] - Optional\n * predicate function for testing if a data set's input should be included\n * in the exported state. If unspecified, all data sets that have been\n * explicitly modified will be included.\n * @param {boolean} [options.recurse=true] - Flag indicating if the exported\n * state should recursively include state from group mark sub-contexts.\n * @return {object} - An object containing the exported state values.\n */\nfunction getState(options) {\n return this._runtime.getState(options || {\n data: dataTest,\n signals: signalTest,\n recurse: true\n });\n}\nfunction dataTest(name, data) {\n return data.modified && isArray(data.input.value) && !name.startsWith('_:vega:_');\n}\nfunction signalTest(name, op) {\n return !(name === 'parent' || op instanceof transforms.proxy);\n}\n\n/**\n * Sets the current view state and updates the view by invoking run.\n * @param {object} state - A state object containing signal and/or\n * data set values, following the format used by the getState method.\n * @return {View} - This view instance.\n */\nfunction setState(state) {\n this.runAsync(null, v => {\n v._trigger = false;\n v._runtime.setState(state);\n }, v => {\n v._trigger = true;\n });\n return this;\n}\n\nfunction timer (callback, delay) {\n function tick(elapsed) {\n callback({\n timestamp: Date.now(),\n elapsed: elapsed\n });\n }\n this._timers.push(interval(tick, delay));\n}\n\nfunction defaultTooltip (handler, event, item, value) {\n const el = handler.element();\n if (el) el.setAttribute('title', formatTooltip(value));\n}\nfunction formatTooltip(value) {\n return value == null ? '' : isArray(value) ? formatArray(value) : isObject(value) && !isDate(value) ? formatObject(value) : value + '';\n}\nfunction formatObject(obj) {\n return Object.keys(obj).map(key => {\n const v = obj[key];\n return key + ': ' + (isArray(v) ? formatArray(v) : formatValue(v));\n }).join('\\n');\n}\nfunction formatArray(value) {\n return '[' + value.map(formatValue).join(', ') + ']';\n}\nfunction formatValue(value) {\n return isArray(value) ? '[\\u2026]' : isObject(value) && !isDate(value) ? '{\\u2026}' : value;\n}\n\nfunction watchPixelRatio () {\n // based on https://developer.mozilla.org/en-US/docs/Web/API/Window/devicePixelRatio#monitoring_screen_resolution_or_zoom_level_changes\n if (this.renderer() === 'canvas' && this._renderer._canvas) {\n let remove = null;\n const updatePixelRatio = () => {\n if (remove != null) {\n remove();\n }\n const media = matchMedia(`(resolution: ${window.devicePixelRatio}dppx)`);\n media.addEventListener('change', updatePixelRatio);\n remove = () => {\n media.removeEventListener('change', updatePixelRatio);\n };\n this._renderer._canvas.getContext('2d').pixelRatio = window.devicePixelRatio || 1;\n this._redraw = true;\n this._resize = 1;\n this.resize().runAsync();\n };\n updatePixelRatio();\n }\n}\n\n/**\n * Create a new View instance from a Vega dataflow runtime specification.\n * The generated View will not immediately be ready for display. Callers\n * should also invoke the initialize method (e.g., to set the parent\n * DOM element in browser-based deployment) and then invoke the run\n * method to evaluate the dataflow graph. Rendering will automatically\n * be performed upon dataflow runs.\n * @constructor\n * @param {object} spec - The Vega dataflow runtime specification.\n */\nfunction View(spec, options) {\n const view = this;\n options = options || {};\n Dataflow.call(view);\n if (options.loader) view.loader(options.loader);\n if (options.logger) view.logger(options.logger);\n if (options.logLevel != null) view.logLevel(options.logLevel);\n if (options.locale || spec.locale) {\n const loc = extend({}, spec.locale, options.locale);\n view.locale(locale(loc.number, loc.time));\n }\n view._el = null;\n view._elBind = null;\n view._renderType = options.renderer || RenderType.Canvas;\n view._scenegraph = new Scenegraph();\n const root = view._scenegraph.root;\n\n // initialize renderer, handler and event management\n view._renderer = null;\n view._tooltip = options.tooltip || defaultTooltip, view._redraw = true;\n view._handler = new CanvasHandler().scene(root);\n view._globalCursor = false;\n view._preventDefault = false;\n view._timers = [];\n view._eventListeners = [];\n view._resizeListeners = [];\n\n // initialize event configuration\n view._eventConfig = initializeEventConfig(spec.eventConfig);\n view.globalCursor(view._eventConfig.globalCursor);\n\n // initialize dataflow graph\n const ctx = runtime(view, spec, options.expr);\n view._runtime = ctx;\n view._signals = ctx.signals;\n view._bind = (spec.bindings || []).map(_ => ({\n state: null,\n param: extend({}, _)\n }));\n\n // initialize scenegraph\n if (ctx.root) ctx.root.set(root);\n root.source = ctx.data.root.input;\n view.pulse(ctx.data.root.input, view.changeset().insert(root.items));\n\n // initialize view size\n view._width = view.width();\n view._height = view.height();\n view._viewWidth = viewWidth(view, view._width);\n view._viewHeight = viewHeight(view, view._height);\n view._origin = [0, 0];\n view._resize = 0;\n view._autosize = 1;\n initializeResize(view);\n\n // initialize background color\n background(view);\n\n // initialize cursor\n cursor(view);\n\n // initialize view description\n view.description(spec.description);\n\n // initialize hover proessing, if requested\n if (options.hover) view.hover();\n\n // initialize DOM container(s) and renderer\n if (options.container) view.initialize(options.container, options.bind);\n if (options.watchPixelRatio) view._watchPixelRatio();\n}\nfunction lookupSignal(view, name) {\n return hasOwnProperty(view._signals, name) ? view._signals[name] : error('Unrecognized signal name: ' + stringValue(name));\n}\nfunction findOperatorHandler(op, handler) {\n const h = (op._targets || []).filter(op => op._update && op._update.handler === handler);\n return h.length ? h[0] : null;\n}\nfunction addOperatorListener(view, name, op, handler) {\n let h = findOperatorHandler(op, handler);\n if (!h) {\n h = trap(view, () => handler(name, op.value));\n h.handler = handler;\n view.on(op, null, h);\n }\n return view;\n}\nfunction removeOperatorListener(view, op, handler) {\n const h = findOperatorHandler(op, handler);\n if (h) op._targets.remove(h);\n return view;\n}\ninherits(View, Dataflow, {\n // -- DATAFLOW / RENDERING ----\n\n async evaluate(encode, prerun, postrun) {\n // evaluate dataflow and prerun\n await Dataflow.prototype.evaluate.call(this, encode, prerun);\n\n // render as needed\n if (this._redraw || this._resize) {\n try {\n if (this._renderer) {\n if (this._resize) {\n this._resize = 0;\n resizeRenderer(this);\n }\n await this._renderer.renderAsync(this._scenegraph.root);\n }\n this._redraw = false;\n } catch (e) {\n this.error(e);\n }\n }\n\n // evaluate postrun\n if (postrun) asyncCallback(this, postrun);\n return this;\n },\n dirty(item) {\n this._redraw = true;\n this._renderer && this._renderer.dirty(item);\n },\n // -- GET / SET ----\n\n description(text) {\n if (arguments.length) {\n const desc = text != null ? text + '' : null;\n if (desc !== this._desc) ariaLabel(this._el, this._desc = desc);\n return this;\n }\n return this._desc;\n },\n container() {\n return this._el;\n },\n scenegraph() {\n return this._scenegraph;\n },\n origin() {\n return this._origin.slice();\n },\n signal(name, value, options) {\n const op = lookupSignal(this, name);\n return arguments.length === 1 ? op.value : this.update(op, value, options);\n },\n width(_) {\n return arguments.length ? this.signal('width', _) : this.signal('width');\n },\n height(_) {\n return arguments.length ? this.signal('height', _) : this.signal('height');\n },\n padding(_) {\n return arguments.length ? this.signal('padding', padding(_)) : padding(this.signal('padding'));\n },\n autosize(_) {\n return arguments.length ? this.signal('autosize', _) : this.signal('autosize');\n },\n background(_) {\n return arguments.length ? this.signal('background', _) : this.signal('background');\n },\n renderer(type) {\n if (!arguments.length) return this._renderType;\n if (!renderModule(type)) error('Unrecognized renderer type: ' + type);\n if (type !== this._renderType) {\n this._renderType = type;\n this._resetRenderer();\n }\n return this;\n },\n tooltip(handler) {\n if (!arguments.length) return this._tooltip;\n if (handler !== this._tooltip) {\n this._tooltip = handler;\n this._resetRenderer();\n }\n return this;\n },\n loader(loader) {\n if (!arguments.length) return this._loader;\n if (loader !== this._loader) {\n Dataflow.prototype.loader.call(this, loader);\n this._resetRenderer();\n }\n return this;\n },\n resize() {\n // set flag to perform autosize\n this._autosize = 1;\n // touch autosize signal to ensure top-level ViewLayout runs\n return this.touch(lookupSignal(this, 'autosize'));\n },\n _resetRenderer() {\n if (this._renderer) {\n this._renderer = null;\n this.initialize(this._el, this._elBind);\n }\n },\n // -- SIZING ----\n _resizeView: resizeView,\n // -- EVENT HANDLING ----\n\n addEventListener(type, handler, options) {\n let callback = handler;\n if (!(options && options.trap === false)) {\n // wrap callback in error handler\n callback = trap(this, handler);\n callback.raw = handler;\n }\n this._handler.on(type, callback);\n return this;\n },\n removeEventListener(type, handler) {\n var handlers = this._handler.handlers(type),\n i = handlers.length,\n h,\n t;\n\n // search registered handlers, remove if match found\n while (--i >= 0) {\n t = handlers[i].type;\n h = handlers[i].handler;\n if (type === t && (handler === h || handler === h.raw)) {\n this._handler.off(t, h);\n break;\n }\n }\n return this;\n },\n addResizeListener(handler) {\n const l = this._resizeListeners;\n if (!l.includes(handler)) {\n // add handler if it isn't already registered\n // note: error trapping handled elsewhere, so\n // no need to wrap handlers here\n l.push(handler);\n }\n return this;\n },\n removeResizeListener(handler) {\n var l = this._resizeListeners,\n i = l.indexOf(handler);\n if (i >= 0) {\n l.splice(i, 1);\n }\n return this;\n },\n addSignalListener(name, handler) {\n return addOperatorListener(this, name, lookupSignal(this, name), handler);\n },\n removeSignalListener(name, handler) {\n return removeOperatorListener(this, lookupSignal(this, name), handler);\n },\n addDataListener(name, handler) {\n return addOperatorListener(this, name, dataref(this, name).values, handler);\n },\n removeDataListener(name, handler) {\n return removeOperatorListener(this, dataref(this, name).values, handler);\n },\n globalCursor(_) {\n if (arguments.length) {\n if (this._globalCursor !== !!_) {\n const prev = setCursor(this, null); // clear previous cursor\n this._globalCursor = !!_;\n if (prev) setCursor(this, prev); // swap cursor\n }\n return this;\n } else {\n return this._globalCursor;\n }\n },\n preventDefault(_) {\n if (arguments.length) {\n this._preventDefault = _;\n return this;\n } else {\n return this._preventDefault;\n }\n },\n timer,\n events,\n finalize,\n hover,\n // -- DATA ----\n data,\n change,\n insert,\n remove,\n // -- SCALES --\n scale,\n // -- INITIALIZATION ----\n initialize,\n // -- HEADLESS RENDERING ----\n toImageURL: renderToImageURL,\n toCanvas: renderToCanvas,\n toSVG: renderToSVG,\n // -- SAVE / RESTORE STATE ----\n getState,\n setState,\n // RE-RENDER ON ZOOM\n _watchPixelRatio: watchPixelRatio\n});\n\nexport { View };\n", "const VIEW = 'view',\n LBRACK = '[',\n RBRACK = ']',\n LBRACE = '{',\n RBRACE = '}',\n COLON = ':',\n COMMA = ',',\n NAME = '@',\n GT = '>',\n ILLEGAL = /[[\\]{}]/,\n DEFAULT_MARKS = {\n '*': 1,\n arc: 1,\n area: 1,\n group: 1,\n image: 1,\n line: 1,\n path: 1,\n rect: 1,\n rule: 1,\n shape: 1,\n symbol: 1,\n text: 1,\n trail: 1\n };\nlet DEFAULT_SOURCE, MARKS;\n\n/**\n * Parse an event selector string.\n * Returns an array of event stream definitions.\n */\nfunction eventSelector (selector, source, marks) {\n DEFAULT_SOURCE = source || VIEW;\n MARKS = marks || DEFAULT_MARKS;\n return parseMerge(selector.trim()).map(parseSelector);\n}\nfunction isMarkType(type) {\n return MARKS[type];\n}\nfunction find(s, i, endChar, pushChar, popChar) {\n const n = s.length;\n let count = 0,\n c;\n for (; i < n; ++i) {\n c = s[i];\n if (!count && c === endChar) return i;else if (popChar && popChar.indexOf(c) >= 0) --count;else if (pushChar && pushChar.indexOf(c) >= 0) ++count;\n }\n return i;\n}\nfunction parseMerge(s) {\n const output = [],\n n = s.length;\n let start = 0,\n i = 0;\n while (i < n) {\n i = find(s, i, COMMA, LBRACK + LBRACE, RBRACK + RBRACE);\n output.push(s.substring(start, i).trim());\n start = ++i;\n }\n if (output.length === 0) {\n throw 'Empty event selector: ' + s;\n }\n return output;\n}\nfunction parseSelector(s) {\n return s[0] === '[' ? parseBetween(s) : parseStream(s);\n}\nfunction parseBetween(s) {\n const n = s.length;\n let i = 1,\n b;\n i = find(s, i, RBRACK, LBRACK, RBRACK);\n if (i === n) {\n throw 'Empty between selector: ' + s;\n }\n b = parseMerge(s.substring(1, i));\n if (b.length !== 2) {\n throw 'Between selector must have two elements: ' + s;\n }\n s = s.slice(i + 1).trim();\n if (s[0] !== GT) {\n throw 'Expected \\'>\\' after between selector: ' + s;\n }\n b = b.map(parseSelector);\n const stream = parseSelector(s.slice(1).trim());\n if (stream.between) {\n return {\n between: b,\n stream: stream\n };\n } else {\n stream.between = b;\n }\n return stream;\n}\nfunction parseStream(s) {\n const stream = {\n source: DEFAULT_SOURCE\n },\n source = [];\n let throttle = [0, 0],\n markname = 0,\n start = 0,\n n = s.length,\n i = 0,\n j,\n filter;\n\n // extract throttle from end\n if (s[n - 1] === RBRACE) {\n i = s.lastIndexOf(LBRACE);\n if (i >= 0) {\n try {\n throttle = parseThrottle(s.substring(i + 1, n - 1));\n } catch (e) {\n throw 'Invalid throttle specification: ' + s;\n }\n s = s.slice(0, i).trim();\n n = s.length;\n } else throw 'Unmatched right brace: ' + s;\n i = 0;\n }\n if (!n) throw s;\n\n // set name flag based on first char\n if (s[0] === NAME) markname = ++i;\n\n // extract first part of multi-part stream selector\n j = find(s, i, COLON);\n if (j < n) {\n source.push(s.substring(start, j).trim());\n start = i = ++j;\n }\n\n // extract remaining part of stream selector\n i = find(s, i, LBRACK);\n if (i === n) {\n source.push(s.substring(start, n).trim());\n } else {\n source.push(s.substring(start, i).trim());\n filter = [];\n start = ++i;\n if (start === n) throw 'Unmatched left bracket: ' + s;\n }\n\n // extract filters\n while (i < n) {\n i = find(s, i, RBRACK);\n if (i === n) throw 'Unmatched left bracket: ' + s;\n filter.push(s.substring(start, i).trim());\n if (i < n - 1 && s[++i] !== LBRACK) throw 'Expected left bracket: ' + s;\n start = ++i;\n }\n\n // marshall event stream specification\n if (!(n = source.length) || ILLEGAL.test(source[n - 1])) {\n throw 'Invalid event selector: ' + s;\n }\n if (n > 1) {\n stream.type = source[1];\n if (markname) {\n stream.markname = source[0].slice(1);\n } else if (isMarkType(source[0])) {\n stream.marktype = source[0];\n } else {\n stream.source = source[0];\n }\n } else {\n stream.type = source[0];\n }\n if (stream.type.slice(-1) === '!') {\n stream.consume = true;\n stream.type = stream.type.slice(0, -1);\n }\n if (filter != null) stream.filter = filter;\n if (throttle[0]) stream.throttle = throttle[0];\n if (throttle[1]) stream.debounce = throttle[1];\n return stream;\n}\nfunction parseThrottle(s) {\n const a = s.split(COMMA);\n if (!s.length || a.length > 2) throw s;\n return a.map(_ => {\n const x = +_;\n if (x !== x) throw s;\n return x;\n });\n}\n\nexport { eventSelector as parseSelector };\n", "import { isObject, isArray, extend, hasOwnProperty, array, stringValue, peek, error, isString, splitAccessPath, mergeConfig } from 'vega-util';\nimport { parseExpression } from 'vega-functions';\nimport { parseSelector } from 'vega-event-selector';\nimport { isValidScaleType, isDiscrete, isQuantile, isContinuous, isDiscretizing } from 'vega-scale';\nimport { definition as definition$1 } from 'vega-dataflow';\n\nfunction parseAutosize (spec) {\n return isObject(spec) ? spec : {\n type: spec || 'pad'\n };\n}\n\nconst number = _ => +_ || 0;\nconst paddingObject = _ => ({\n top: _,\n bottom: _,\n left: _,\n right: _\n});\nfunction parsePadding (spec) {\n return !isObject(spec) ? paddingObject(number(spec)) : spec.signal ? spec : {\n top: number(spec.top),\n bottom: number(spec.bottom),\n left: number(spec.left),\n right: number(spec.right)\n };\n}\n\nconst encoder = _ => isObject(_) && !isArray(_) ? extend({}, _) : {\n value: _\n};\nfunction addEncode(object, name, value, set) {\n if (value != null) {\n const isEncoder = isObject(value) && !isArray(value) || isArray(value) && value.length && isObject(value[0]);\n\n // Always assign signal to update, even if the signal is from the enter block\n if (isEncoder) {\n object.update[name] = value;\n } else {\n object[set || 'enter'][name] = {\n value: value\n };\n }\n return 1;\n } else {\n return 0;\n }\n}\nfunction addEncoders(object, enter, update) {\n for (const name in enter) {\n addEncode(object, name, enter[name]);\n }\n for (const name in update) {\n addEncode(object, name, update[name], 'update');\n }\n}\nfunction extendEncode(encode, extra, skip) {\n for (const name in extra) {\n if (skip && hasOwnProperty(skip, name)) continue;\n encode[name] = extend(encode[name] || {}, extra[name]);\n }\n return encode;\n}\nfunction has(key, encode) {\n return encode && (encode.enter && encode.enter[key] || encode.update && encode.update[key]);\n}\n\nconst MarkRole = 'mark';\nconst FrameRole = 'frame';\nconst ScopeRole = 'scope';\nconst AxisRole = 'axis';\nconst AxisDomainRole = 'axis-domain';\nconst AxisGridRole = 'axis-grid';\nconst AxisLabelRole = 'axis-label';\nconst AxisTickRole = 'axis-tick';\nconst AxisTitleRole = 'axis-title';\nconst LegendRole = 'legend';\nconst LegendBandRole = 'legend-band';\nconst LegendEntryRole = 'legend-entry';\nconst LegendGradientRole = 'legend-gradient';\nconst LegendLabelRole = 'legend-label';\nconst LegendSymbolRole = 'legend-symbol';\nconst LegendTitleRole = 'legend-title';\nconst TitleRole = 'title';\nconst TitleTextRole = 'title-text';\nconst TitleSubtitleRole = 'title-subtitle';\n\nfunction applyDefaults (encode, type, role, style, config) {\n const defaults = {},\n enter = {};\n let update, key, skip, props;\n\n // if text mark, apply global lineBreak settings (#2370)\n key = 'lineBreak';\n if (type === 'text' && config[key] != null && !has(key, encode)) {\n applyDefault(defaults, key, config[key]);\n }\n\n // ignore legend and axis roles\n if (role == 'legend' || String(role).startsWith('axis')) {\n role = null;\n }\n\n // resolve mark config\n props = role === FrameRole ? config.group : role === MarkRole ? extend({}, config.mark, config[type]) : null;\n for (key in props) {\n // do not apply defaults if relevant fields are defined\n skip = has(key, encode) || (key === 'fill' || key === 'stroke') && (has('fill', encode) || has('stroke', encode));\n if (!skip) applyDefault(defaults, key, props[key]);\n }\n\n // resolve styles, apply with increasing precedence\n array(style).forEach(name => {\n const props = config.style && config.style[name];\n for (const key in props) {\n if (!has(key, encode)) {\n applyDefault(defaults, key, props[key]);\n }\n }\n });\n encode = extend({}, encode); // defensive copy\n for (key in defaults) {\n props = defaults[key];\n if (props.signal) {\n (update = update || {})[key] = props;\n } else {\n enter[key] = props;\n }\n }\n encode.enter = extend(enter, encode.enter);\n if (update) encode.update = extend(update, encode.update);\n return encode;\n}\nfunction applyDefault(defaults, key, value) {\n defaults[key] = value && value.signal ? {\n signal: value.signal\n } : {\n value: value\n };\n}\n\nconst scaleRef = scale => isString(scale) ? stringValue(scale) : scale.signal ? `(${scale.signal})` : field(scale);\nfunction entry$1(enc) {\n if (enc.gradient != null) {\n return gradient(enc);\n }\n let value = enc.signal ? `(${enc.signal})` : enc.color ? color(enc.color) : enc.field != null ? field(enc.field) : enc.value !== undefined ? stringValue(enc.value) : undefined;\n if (enc.scale != null) {\n value = scale(enc, value);\n }\n if (value === undefined) {\n value = null;\n }\n if (enc.exponent != null) {\n value = `pow(${value},${property(enc.exponent)})`;\n }\n if (enc.mult != null) {\n value += `*${property(enc.mult)}`;\n }\n if (enc.offset != null) {\n value += `+${property(enc.offset)}`;\n }\n if (enc.round) {\n value = `round(${value})`;\n }\n return value;\n}\nconst _color = (type, x, y, z) => `(${type}(${[x, y, z].map(entry$1).join(',')})+'')`;\nfunction color(enc) {\n return enc.c ? _color('hcl', enc.h, enc.c, enc.l) : enc.h || enc.s ? _color('hsl', enc.h, enc.s, enc.l) : enc.l || enc.a ? _color('lab', enc.l, enc.a, enc.b) : enc.r || enc.g || enc.b ? _color('rgb', enc.r, enc.g, enc.b) : null;\n}\nfunction gradient(enc) {\n // map undefined to null; expression lang does not allow undefined\n const args = [enc.start, enc.stop, enc.count].map(_ => _ == null ? null : stringValue(_));\n\n // trim null inputs from the end\n while (args.length && peek(args) == null) args.pop();\n args.unshift(scaleRef(enc.gradient));\n return `gradient(${args.join(',')})`;\n}\nfunction property(property) {\n return isObject(property) ? '(' + entry$1(property) + ')' : property;\n}\nfunction field(ref) {\n return resolveField(isObject(ref) ? ref : {\n datum: ref\n });\n}\nfunction resolveField(ref) {\n let object, level, field;\n if (ref.signal) {\n object = 'datum';\n field = ref.signal;\n } else if (ref.group || ref.parent) {\n level = Math.max(1, ref.level || 1);\n object = 'item';\n while (level-- > 0) {\n object += '.mark.group';\n }\n if (ref.parent) {\n field = ref.parent;\n object += '.datum';\n } else {\n field = ref.group;\n }\n } else if (ref.datum) {\n object = 'datum';\n field = ref.datum;\n } else {\n error('Invalid field reference: ' + stringValue(ref));\n }\n if (!ref.signal) {\n field = isString(field) ? splitAccessPath(field).map(stringValue).join('][') : resolveField(field);\n }\n return object + '[' + field + ']';\n}\nfunction scale(enc, value) {\n const scale = scaleRef(enc.scale);\n if (enc.range != null) {\n // pull value from scale range\n value = `lerp(_range(${scale}), ${+enc.range})`;\n } else {\n // run value through scale and/or pull scale bandwidth\n if (value !== undefined) value = `_scale(${scale}, ${value})`;\n if (enc.band) {\n value = (value ? value + '+' : '') + `_bandwidth(${scale})` + (+enc.band === 1 ? '' : '*' + property(enc.band));\n if (enc.extra) {\n // include logic to handle extraneous elements\n value = `(datum.extra ? _scale(${scale}, datum.extra.value) : ${value})`;\n }\n }\n if (value == null) value = '0';\n }\n return value;\n}\n\nfunction rule (enc) {\n let code = '';\n enc.forEach(rule => {\n const value = entry$1(rule);\n code += rule.test ? `(${rule.test})?${value}:` : value;\n });\n\n // if no else clause, terminate with null (#1366)\n if (peek(code) === ':') {\n code += 'null';\n }\n return code;\n}\n\nfunction parseEncode (encode, type, role, style, scope, params) {\n const enc = {};\n params = params || {};\n params.encoders = {\n $encode: enc\n };\n encode = applyDefaults(encode, type, role, style, scope.config);\n for (const key in encode) {\n enc[key] = parseBlock(encode[key], type, params, scope);\n }\n return params;\n}\nfunction parseBlock(block, marktype, params, scope) {\n const channels = {},\n fields = {};\n for (const name in block) {\n if (block[name] != null) {\n // skip any null entries\n channels[name] = parse$1(expr(block[name]), scope, params, fields);\n }\n }\n return {\n $expr: {\n marktype,\n channels\n },\n $fields: Object.keys(fields),\n $output: Object.keys(block)\n };\n}\nfunction expr(enc) {\n return isArray(enc) ? rule(enc) : entry$1(enc);\n}\nfunction parse$1(code, scope, params, fields) {\n const expr = parseExpression(code, scope);\n expr.$fields.forEach(name => fields[name] = 1);\n extend(params, expr.$params);\n return expr.$expr;\n}\n\nconst OUTER = 'outer',\n OUTER_INVALID = ['value', 'update', 'init', 'react', 'bind'];\nfunction outerError(prefix, name) {\n error(prefix + ' for \"outer\" push: ' + stringValue(name));\n}\nfunction parseSignal (signal, scope) {\n const name = signal.name;\n if (signal.push === OUTER) {\n // signal must already be defined, raise error if not\n if (!scope.signals[name]) outerError('No prior signal definition', name);\n // signal push must not use properties reserved for standard definition\n OUTER_INVALID.forEach(prop => {\n if (signal[prop] !== undefined) outerError('Invalid property ', prop);\n });\n } else {\n // define a new signal in the current scope\n const op = scope.addSignal(name, signal.value);\n if (signal.react === false) op.react = false;\n if (signal.bind) scope.addBinding(name, signal.bind);\n }\n}\n\nfunction Entry(type, value, params, parent) {\n this.id = -1;\n this.type = type;\n this.value = value;\n this.params = params;\n if (parent) this.parent = parent;\n}\nfunction entry(type, value, params, parent) {\n return new Entry(type, value, params, parent);\n}\nfunction operator(value, params) {\n return entry('operator', value, params);\n}\n\n// -----\n\nfunction ref(op) {\n const ref = {\n $ref: op.id\n };\n // if operator not yet registered, cache ref to resolve later\n if (op.id < 0) (op.refs = op.refs || []).push(ref);\n return ref;\n}\nfunction fieldRef$1(field, name) {\n return name ? {\n $field: field,\n $name: name\n } : {\n $field: field\n };\n}\nconst keyFieldRef = fieldRef$1('key');\nfunction compareRef(fields, orders) {\n return {\n $compare: fields,\n $order: orders\n };\n}\nfunction keyRef(fields, flat) {\n const ref = {\n $key: fields\n };\n if (flat) ref.$flat = true;\n return ref;\n}\n\n// -----\n\nconst Ascending = 'ascending';\nconst Descending = 'descending';\nfunction sortKey(sort) {\n return !isObject(sort) ? '' : (sort.order === Descending ? '-' : '+') + aggrField(sort.op, sort.field);\n}\nfunction aggrField(op, field) {\n return (op && op.signal ? '$' + op.signal : op || '') + (op && field ? '_' : '') + (field && field.signal ? '$' + field.signal : field || '');\n}\n\n// -----\n\nconst Scope$1 = 'scope';\nconst View = 'view';\nfunction isSignal(_) {\n return _ && _.signal;\n}\nfunction isExpr$1(_) {\n return _ && _.expr;\n}\nfunction hasSignal(_) {\n if (isSignal(_)) return true;\n if (isObject(_)) for (const key in _) {\n if (hasSignal(_[key])) return true;\n }\n return false;\n}\nfunction value(specValue, defaultValue) {\n return specValue != null ? specValue : defaultValue;\n}\nfunction deref(v) {\n return v && v.signal || v;\n}\n\nconst Timer = 'timer';\nfunction parseStream(stream, scope) {\n const method = stream.merge ? mergeStream : stream.stream ? nestedStream : stream.type ? eventStream : error('Invalid stream specification: ' + stringValue(stream));\n return method(stream, scope);\n}\nfunction eventSource(source) {\n return source === Scope$1 ? View : source || View;\n}\nfunction mergeStream(stream, scope) {\n const list = stream.merge.map(s => parseStream(s, scope)),\n entry = streamParameters({\n merge: list\n }, stream, scope);\n return scope.addStream(entry).id;\n}\nfunction nestedStream(stream, scope) {\n const id = parseStream(stream.stream, scope),\n entry = streamParameters({\n stream: id\n }, stream, scope);\n return scope.addStream(entry).id;\n}\nfunction eventStream(stream, scope) {\n let id;\n if (stream.type === Timer) {\n id = scope.event(Timer, stream.throttle);\n stream = {\n between: stream.between,\n filter: stream.filter\n };\n } else {\n id = scope.event(eventSource(stream.source), stream.type);\n }\n const entry = streamParameters({\n stream: id\n }, stream, scope);\n return Object.keys(entry).length === 1 ? id : scope.addStream(entry).id;\n}\nfunction streamParameters(entry, stream, scope) {\n let param = stream.between;\n if (param) {\n if (param.length !== 2) {\n error('Stream \"between\" parameter must have 2 entries: ' + stringValue(stream));\n }\n entry.between = [parseStream(param[0], scope), parseStream(param[1], scope)];\n }\n param = stream.filter ? [].concat(stream.filter) : [];\n if (stream.marktype || stream.markname || stream.markrole) {\n // add filter for mark type, name and/or role\n param.push(filterMark(stream.marktype, stream.markname, stream.markrole));\n }\n if (stream.source === Scope$1) {\n // add filter to limit events from sub-scope only\n param.push('inScope(event.item)');\n }\n if (param.length) {\n entry.filter = parseExpression('(' + param.join(')&&(') + ')', scope).$expr;\n }\n if ((param = stream.throttle) != null) {\n entry.throttle = +param;\n }\n if ((param = stream.debounce) != null) {\n entry.debounce = +param;\n }\n if (stream.consume) {\n entry.consume = true;\n }\n return entry;\n}\nfunction filterMark(type, name, role) {\n const item = 'event.item';\n return item + (type && type !== '*' ? '&&' + item + '.mark.marktype===\\'' + type + '\\'' : '') + (role ? '&&' + item + '.mark.role===\\'' + role + '\\'' : '') + (name ? '&&' + item + '.mark.name===\\'' + name + '\\'' : '');\n}\n\n// bypass expression parser for internal operator references\nconst OP_VALUE_EXPR = {\n code: '_.$value',\n ast: {\n type: 'Identifier',\n value: 'value'\n }\n};\nfunction parseUpdate (spec, scope, target) {\n const encode = spec.encode,\n entry = {\n target: target\n };\n let events = spec.events,\n update = spec.update,\n sources = [];\n if (!events) {\n error('Signal update missing events specification.');\n }\n\n // interpret as an event selector string\n if (isString(events)) {\n events = parseSelector(events, scope.isSubscope() ? Scope$1 : View);\n }\n\n // separate event streams from signal updates\n events = array(events).filter(s => s.signal || s.scale ? (sources.push(s), 0) : 1);\n\n // merge internal operator listeners\n if (sources.length > 1) {\n sources = [mergeSources(sources)];\n }\n\n // merge event streams, include as source\n if (events.length) {\n sources.push(events.length > 1 ? {\n merge: events\n } : events[0]);\n }\n if (encode != null) {\n if (update) error('Signal encode and update are mutually exclusive.');\n update = 'encode(item(),' + stringValue(encode) + ')';\n }\n\n // resolve update value\n entry.update = isString(update) ? parseExpression(update, scope) : update.expr != null ? parseExpression(update.expr, scope) : update.value != null ? update.value : update.signal != null ? {\n $expr: OP_VALUE_EXPR,\n $params: {\n $value: scope.signalRef(update.signal)\n }\n } : error('Invalid signal update specification.');\n if (spec.force) {\n entry.options = {\n force: true\n };\n }\n sources.forEach(source => scope.addUpdate(extend(streamSource(source, scope), entry)));\n}\nfunction streamSource(stream, scope) {\n return {\n source: stream.signal ? scope.signalRef(stream.signal) : stream.scale ? scope.scaleRef(stream.scale) : parseStream(stream, scope)\n };\n}\nfunction mergeSources(sources) {\n return {\n signal: '[' + sources.map(s => s.scale ? 'scale(\"' + s.scale + '\")' : s.signal) + ']'\n };\n}\n\nfunction parseSignalUpdates (signal, scope) {\n const op = scope.getSignal(signal.name);\n let expr = signal.update;\n if (signal.init) {\n if (expr) {\n error('Signals can not include both init and update expressions.');\n } else {\n expr = signal.init;\n op.initonly = true;\n }\n }\n if (expr) {\n expr = parseExpression(expr, scope);\n op.update = expr.$expr;\n op.params = expr.$params;\n }\n if (signal.on) {\n signal.on.forEach(_ => parseUpdate(_, scope, op.id));\n }\n}\n\nconst transform = name => (params, value, parent) => entry(name, value, params || undefined, parent);\nconst Aggregate = transform('aggregate');\nconst AxisTicks = transform('axisticks');\nconst Bound = transform('bound');\nconst Collect = transform('collect');\nconst Compare = transform('compare');\nconst DataJoin = transform('datajoin');\nconst Encode = transform('encode');\nconst Expression = transform('expression');\nconst Facet = transform('facet');\nconst Field = transform('field');\nconst Key = transform('key');\nconst LegendEntries = transform('legendentries');\nconst Load = transform('load');\nconst Mark = transform('mark');\nconst MultiExtent = transform('multiextent');\nconst MultiValues = transform('multivalues');\nconst Overlap = transform('overlap');\nconst Params = transform('params');\nconst PreFacet = transform('prefacet');\nconst Projection = transform('projection');\nconst Proxy = transform('proxy');\nconst Relay = transform('relay');\nconst Render = transform('render');\nconst Scale = transform('scale');\nconst Sieve = transform('sieve');\nconst SortItems = transform('sortitems');\nconst ViewLayout = transform('viewlayout');\nconst Values = transform('values');\n\nlet FIELD_REF_ID = 0;\nconst MULTIDOMAIN_SORT_OPS = {\n min: 'min',\n max: 'max',\n count: 'sum'\n};\nfunction initScale(spec, scope) {\n const type = spec.type || 'linear';\n if (!isValidScaleType(type)) {\n error('Unrecognized scale type: ' + stringValue(type));\n }\n scope.addScale(spec.name, {\n type,\n domain: undefined\n });\n}\nfunction parseScale(spec, scope) {\n const params = scope.getScale(spec.name).params;\n let key;\n params.domain = parseScaleDomain(spec.domain, spec, scope);\n if (spec.range != null) {\n params.range = parseScaleRange(spec, scope, params);\n }\n if (spec.interpolate != null) {\n parseScaleInterpolate(spec.interpolate, params);\n }\n if (spec.nice != null) {\n params.nice = parseScaleNice(spec.nice, scope);\n }\n if (spec.bins != null) {\n params.bins = parseScaleBins(spec.bins, scope);\n }\n for (key in spec) {\n if (hasOwnProperty(params, key) || key === 'name') continue;\n params[key] = parseLiteral(spec[key], scope);\n }\n}\nfunction parseLiteral(v, scope) {\n return !isObject(v) ? v : v.signal ? scope.signalRef(v.signal) : error('Unsupported object: ' + stringValue(v));\n}\nfunction parseArray(v, scope) {\n return v.signal ? scope.signalRef(v.signal) : v.map(v => parseLiteral(v, scope));\n}\nfunction dataLookupError(name) {\n error('Can not find data set: ' + stringValue(name));\n}\n\n// -- SCALE DOMAIN ----\n\nfunction parseScaleDomain(domain, spec, scope) {\n if (!domain) {\n if (spec.domainMin != null || spec.domainMax != null) {\n error('No scale domain defined for domainMin/domainMax to override.');\n }\n return; // default domain\n }\n return domain.signal ? scope.signalRef(domain.signal) : (isArray(domain) ? explicitDomain : domain.fields ? multipleDomain : singularDomain)(domain, spec, scope);\n}\nfunction explicitDomain(domain, spec, scope) {\n return domain.map(v => parseLiteral(v, scope));\n}\nfunction singularDomain(domain, spec, scope) {\n const data = scope.getData(domain.data);\n if (!data) dataLookupError(domain.data);\n return isDiscrete(spec.type) ? data.valuesRef(scope, domain.field, parseSort(domain.sort, false)) : isQuantile(spec.type) ? data.domainRef(scope, domain.field) : data.extentRef(scope, domain.field);\n}\nfunction multipleDomain(domain, spec, scope) {\n const data = domain.data,\n fields = domain.fields.reduce((dom, d) => {\n d = isString(d) ? {\n data: data,\n field: d\n } : isArray(d) || d.signal ? fieldRef(d, scope) : d;\n dom.push(d);\n return dom;\n }, []);\n return (isDiscrete(spec.type) ? ordinalMultipleDomain : isQuantile(spec.type) ? quantileMultipleDomain : numericMultipleDomain)(domain, scope, fields);\n}\nfunction fieldRef(data, scope) {\n const name = '_:vega:_' + FIELD_REF_ID++,\n coll = Collect({});\n if (isArray(data)) {\n coll.value = {\n $ingest: data\n };\n } else if (data.signal) {\n const code = 'setdata(' + stringValue(name) + ',' + data.signal + ')';\n coll.params.input = scope.signalRef(code);\n }\n scope.addDataPipeline(name, [coll, Sieve({})]);\n return {\n data: name,\n field: 'data'\n };\n}\nfunction ordinalMultipleDomain(domain, scope, fields) {\n const sort = parseSort(domain.sort, true);\n let a, v;\n\n // get value counts for each domain field\n const counts = fields.map(f => {\n const data = scope.getData(f.data);\n if (!data) dataLookupError(f.data);\n return data.countsRef(scope, f.field, sort);\n });\n\n // aggregate the results from each domain field\n const p = {\n groupby: keyFieldRef,\n pulse: counts\n };\n if (sort) {\n a = sort.op || 'count';\n v = sort.field ? aggrField(a, sort.field) : 'count';\n p.ops = [MULTIDOMAIN_SORT_OPS[a]];\n p.fields = [scope.fieldRef(v)];\n p.as = [v];\n }\n a = scope.add(Aggregate(p));\n\n // collect aggregate output\n const c = scope.add(Collect({\n pulse: ref(a)\n }));\n\n // extract values for combined domain\n v = scope.add(Values({\n field: keyFieldRef,\n sort: scope.sortRef(sort),\n pulse: ref(c)\n }));\n return ref(v);\n}\nfunction parseSort(sort, multidomain) {\n if (sort) {\n if (!sort.field && !sort.op) {\n if (isObject(sort)) sort.field = 'key';else sort = {\n field: 'key'\n };\n } else if (!sort.field && sort.op !== 'count') {\n error('No field provided for sort aggregate op: ' + sort.op);\n } else if (multidomain && sort.field) {\n if (sort.op && !MULTIDOMAIN_SORT_OPS[sort.op]) {\n error('Multiple domain scales can not be sorted using ' + sort.op);\n }\n }\n }\n return sort;\n}\nfunction quantileMultipleDomain(domain, scope, fields) {\n // get value arrays for each domain field\n const values = fields.map(f => {\n const data = scope.getData(f.data);\n if (!data) dataLookupError(f.data);\n return data.domainRef(scope, f.field);\n });\n\n // combine value arrays\n return ref(scope.add(MultiValues({\n values: values\n })));\n}\nfunction numericMultipleDomain(domain, scope, fields) {\n // get extents for each domain field\n const extents = fields.map(f => {\n const data = scope.getData(f.data);\n if (!data) dataLookupError(f.data);\n return data.extentRef(scope, f.field);\n });\n\n // combine extents\n return ref(scope.add(MultiExtent({\n extents: extents\n })));\n}\n\n// -- SCALE BINS -----\n\nfunction parseScaleBins(v, scope) {\n return v.signal || isArray(v) ? parseArray(v, scope) : scope.objectProperty(v);\n}\n\n// -- SCALE NICE -----\n\nfunction parseScaleNice(nice, scope) {\n return nice.signal ? scope.signalRef(nice.signal) : isObject(nice) ? {\n interval: parseLiteral(nice.interval),\n step: parseLiteral(nice.step)\n } : parseLiteral(nice);\n}\n\n// -- SCALE INTERPOLATION -----\n\nfunction parseScaleInterpolate(interpolate, params) {\n params.interpolate = parseLiteral(interpolate.type || interpolate);\n if (interpolate.gamma != null) {\n params.interpolateGamma = parseLiteral(interpolate.gamma);\n }\n}\n\n// -- SCALE RANGE -----\n\nfunction parseScaleRange(spec, scope, params) {\n const config = scope.config.range;\n let range = spec.range;\n if (range.signal) {\n return scope.signalRef(range.signal);\n } else if (isString(range)) {\n if (config && hasOwnProperty(config, range)) {\n spec = extend({}, spec, {\n range: config[range]\n });\n return parseScaleRange(spec, scope, params);\n } else if (range === 'width') {\n range = [0, {\n signal: 'width'\n }];\n } else if (range === 'height') {\n range = isDiscrete(spec.type) ? [0, {\n signal: 'height'\n }] : [{\n signal: 'height'\n }, 0];\n } else {\n error('Unrecognized scale range value: ' + stringValue(range));\n }\n } else if (range.scheme) {\n params.scheme = isArray(range.scheme) ? parseArray(range.scheme, scope) : parseLiteral(range.scheme, scope);\n if (range.extent) params.schemeExtent = parseArray(range.extent, scope);\n if (range.count) params.schemeCount = parseLiteral(range.count, scope);\n return;\n } else if (range.step) {\n params.rangeStep = parseLiteral(range.step, scope);\n return;\n } else if (isDiscrete(spec.type) && !isArray(range)) {\n return parseScaleDomain(range, spec, scope);\n } else if (!isArray(range)) {\n error('Unsupported range type: ' + stringValue(range));\n }\n return range.map(v => (isArray(v) ? parseArray : parseLiteral)(v, scope));\n}\n\nfunction parseProjection (proj, scope) {\n const config = scope.config.projection || {},\n params = {};\n for (const name in proj) {\n if (name === 'name') continue;\n params[name] = parseParameter$1(proj[name], name, scope);\n }\n\n // apply projection defaults from config\n for (const name in config) {\n if (params[name] == null) {\n params[name] = parseParameter$1(config[name], name, scope);\n }\n }\n scope.addProjection(proj.name, params);\n}\nfunction parseParameter$1(_, name, scope) {\n return isArray(_) ? _.map(_ => parseParameter$1(_, name, scope)) : !isObject(_) ? _ : _.signal ? scope.signalRef(_.signal) : name === 'fit' ? _ : error('Unsupported parameter object: ' + stringValue(_));\n}\n\nconst Top = 'top';\nconst Left = 'left';\nconst Right = 'right';\nconst Bottom = 'bottom';\nconst Center = 'center';\nconst Vertical = 'vertical';\nconst Start = 'start';\nconst Middle = 'middle';\nconst End = 'end';\nconst Index = 'index';\nconst Label = 'label';\nconst Offset = 'offset';\nconst Perc = 'perc';\nconst Perc2 = 'perc2';\nconst Value = 'value';\nconst GuideLabelStyle = 'guide-label';\nconst GuideTitleStyle = 'guide-title';\nconst GroupTitleStyle = 'group-title';\nconst GroupSubtitleStyle = 'group-subtitle';\nconst Symbols = 'symbol';\nconst Gradient = 'gradient';\nconst Discrete = 'discrete';\nconst Size = 'size';\nconst Shape = 'shape';\nconst Fill = 'fill';\nconst Stroke = 'stroke';\nconst StrokeWidth = 'strokeWidth';\nconst StrokeDash = 'strokeDash';\nconst Opacity = 'opacity';\n\n// Encoding channels supported by legends\n// In priority order of 'canonical' scale\nconst LegendScales = [Size, Shape, Fill, Stroke, StrokeWidth, StrokeDash, Opacity];\nconst Skip = {\n name: 1,\n style: 1,\n interactive: 1\n};\nconst zero = {\n value: 0\n};\nconst one = {\n value: 1\n};\n\nconst GroupMark = 'group';\nconst RectMark = 'rect';\nconst RuleMark = 'rule';\nconst SymbolMark = 'symbol';\nconst TextMark = 'text';\n\nfunction guideGroup (mark) {\n mark.type = GroupMark;\n mark.interactive = mark.interactive || false;\n return mark;\n}\n\nfunction lookup(spec, config) {\n const _ = (name, dflt) => value(spec[name], value(config[name], dflt));\n _.isVertical = s => Vertical === value(spec.direction, config.direction || (s ? config.symbolDirection : config.gradientDirection));\n _.gradientLength = () => value(spec.gradientLength, config.gradientLength || config.gradientWidth);\n _.gradientThickness = () => value(spec.gradientThickness, config.gradientThickness || config.gradientHeight);\n _.entryColumns = () => value(spec.columns, value(config.columns, +_.isVertical(true)));\n return _;\n}\nfunction getEncoding(name, encode) {\n const v = encode && (encode.update && encode.update[name] || encode.enter && encode.enter[name]);\n return v && v.signal ? v : v ? v.value : null;\n}\nfunction getStyle(name, scope, style) {\n const s = scope.config.style[style];\n return s && s[name];\n}\nfunction anchorExpr(s, e, m) {\n return `item.anchor === '${Start}' ? ${s} : item.anchor === '${End}' ? ${e} : ${m}`;\n}\nconst alignExpr$1 = anchorExpr(stringValue(Left), stringValue(Right), stringValue(Center));\nfunction tickBand(_) {\n const v = _('tickBand');\n let offset = _('tickOffset'),\n band,\n extra;\n if (!v) {\n // if no tick band entry, fall back on other properties\n band = _('bandPosition');\n extra = _('tickExtra');\n } else if (v.signal) {\n // if signal, augment code to interpret values\n band = {\n signal: `(${v.signal}) === 'extent' ? 1 : 0.5`\n };\n extra = {\n signal: `(${v.signal}) === 'extent'`\n };\n if (!isObject(offset)) {\n offset = {\n signal: `(${v.signal}) === 'extent' ? 0 : ${offset}`\n };\n }\n } else if (v === 'extent') {\n // if constant, simply set values\n band = 1;\n extra = true;\n offset = 0;\n } else {\n band = 0.5;\n extra = false;\n }\n return {\n extra,\n band,\n offset\n };\n}\nfunction extendOffset(value, offset) {\n return !offset ? value : !value ? offset : !isObject(value) ? {\n value,\n offset\n } : Object.assign({}, value, {\n offset: extendOffset(value.offset, offset)\n });\n}\n\nfunction guideMark (mark, extras) {\n if (extras) {\n mark.name = extras.name;\n mark.style = extras.style || mark.style;\n mark.interactive = !!extras.interactive;\n mark.encode = extendEncode(mark.encode, extras, Skip);\n } else {\n mark.interactive = false;\n }\n return mark;\n}\n\nfunction legendGradient (spec, scale, config, userEncode) {\n const _ = lookup(spec, config),\n vertical = _.isVertical(),\n thickness = _.gradientThickness(),\n length = _.gradientLength();\n let enter, start, stop, width, height;\n if (vertical) {\n start = [0, 1];\n stop = [0, 0];\n width = thickness;\n height = length;\n } else {\n start = [0, 0];\n stop = [1, 0];\n width = length;\n height = thickness;\n }\n const encode = {\n enter: enter = {\n opacity: zero,\n x: zero,\n y: zero,\n width: encoder(width),\n height: encoder(height)\n },\n update: extend({}, enter, {\n opacity: one,\n fill: {\n gradient: scale,\n start: start,\n stop: stop\n }\n }),\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n stroke: _('gradientStrokeColor'),\n strokeWidth: _('gradientStrokeWidth')\n }, {\n // update\n opacity: _('gradientOpacity')\n });\n return guideMark({\n type: RectMark,\n role: LegendGradientRole,\n encode\n }, userEncode);\n}\n\nfunction legendGradientDiscrete (spec, scale, config, userEncode, dataRef) {\n const _ = lookup(spec, config),\n vertical = _.isVertical(),\n thickness = _.gradientThickness(),\n length = _.gradientLength();\n let u,\n v,\n uu,\n vv,\n adjust = '';\n vertical ? (u = 'y', uu = 'y2', v = 'x', vv = 'width', adjust = '1-') : (u = 'x', uu = 'x2', v = 'y', vv = 'height');\n const enter = {\n opacity: zero,\n fill: {\n scale: scale,\n field: Value\n }\n };\n enter[u] = {\n signal: adjust + 'datum.' + Perc,\n mult: length\n };\n enter[v] = zero;\n enter[uu] = {\n signal: adjust + 'datum.' + Perc2,\n mult: length\n };\n enter[vv] = encoder(thickness);\n const encode = {\n enter: enter,\n update: extend({}, enter, {\n opacity: one\n }),\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n stroke: _('gradientStrokeColor'),\n strokeWidth: _('gradientStrokeWidth')\n }, {\n // update\n opacity: _('gradientOpacity')\n });\n return guideMark({\n type: RectMark,\n role: LegendBandRole,\n key: Value,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nconst alignExpr = `datum.${Perc}<=0?\"${Left}\":datum.${Perc}>=1?\"${Right}\":\"${Center}\"`,\n baselineExpr = `datum.${Perc}<=0?\"${Bottom}\":datum.${Perc}>=1?\"${Top}\":\"${Middle}\"`;\nfunction legendGradientLabels (spec, config, userEncode, dataRef) {\n const _ = lookup(spec, config),\n vertical = _.isVertical(),\n thickness = encoder(_.gradientThickness()),\n length = _.gradientLength();\n let overlap = _('labelOverlap'),\n enter,\n update,\n u,\n v,\n adjust = '';\n const encode = {\n enter: enter = {\n opacity: zero\n },\n update: update = {\n opacity: one,\n text: {\n field: Label\n }\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n fill: _('labelColor'),\n fillOpacity: _('labelOpacity'),\n font: _('labelFont'),\n fontSize: _('labelFontSize'),\n fontStyle: _('labelFontStyle'),\n fontWeight: _('labelFontWeight'),\n limit: value(spec.labelLimit, config.gradientLabelLimit)\n });\n if (vertical) {\n enter.align = {\n value: 'left'\n };\n enter.baseline = update.baseline = {\n signal: baselineExpr\n };\n u = 'y';\n v = 'x';\n adjust = '1-';\n } else {\n enter.align = update.align = {\n signal: alignExpr\n };\n enter.baseline = {\n value: 'top'\n };\n u = 'x';\n v = 'y';\n }\n enter[u] = update[u] = {\n signal: adjust + 'datum.' + Perc,\n mult: length\n };\n enter[v] = update[v] = thickness;\n thickness.offset = value(spec.labelOffset, config.gradientLabelOffset) || 0;\n overlap = overlap ? {\n separation: _('labelSeparation'),\n method: overlap,\n order: 'datum.' + Index\n } : undefined;\n\n // type, role, style, key, dataRef, encode, extras\n return guideMark({\n type: TextMark,\n role: LegendLabelRole,\n style: GuideLabelStyle,\n key: Value,\n from: dataRef,\n encode,\n overlap\n }, userEncode);\n}\n\n// userEncode is top-level, includes entries, symbols, labels\nfunction legendSymbolGroups (spec, config, userEncode, dataRef, columns) {\n const _ = lookup(spec, config),\n entries = userEncode.entries,\n interactive = !!(entries && entries.interactive),\n name = entries ? entries.name : undefined,\n height = _('clipHeight'),\n symbolOffset = _('symbolOffset'),\n valueRef = {\n data: 'value'\n },\n xSignal = `(${columns}) ? datum.${Offset} : datum.${Size}`,\n yEncode = height ? encoder(height) : {\n field: Size\n },\n index = `datum.${Index}`,\n ncols = `max(1, ${columns})`;\n let encode, enter, update, nrows, sort;\n yEncode.mult = 0.5;\n\n // -- LEGEND SYMBOLS --\n encode = {\n enter: enter = {\n opacity: zero,\n x: {\n signal: xSignal,\n mult: 0.5,\n offset: symbolOffset\n },\n y: yEncode\n },\n update: update = {\n opacity: one,\n x: enter.x,\n y: enter.y\n },\n exit: {\n opacity: zero\n }\n };\n let baseFill = null,\n baseStroke = null;\n if (!spec.fill) {\n baseFill = config.symbolBaseFillColor;\n baseStroke = config.symbolBaseStrokeColor;\n }\n addEncoders(encode, {\n fill: _('symbolFillColor', baseFill),\n shape: _('symbolType'),\n size: _('symbolSize'),\n stroke: _('symbolStrokeColor', baseStroke),\n strokeDash: _('symbolDash'),\n strokeDashOffset: _('symbolDashOffset'),\n strokeWidth: _('symbolStrokeWidth')\n }, {\n // update\n opacity: _('symbolOpacity')\n });\n LegendScales.forEach(scale => {\n if (spec[scale]) {\n update[scale] = enter[scale] = {\n scale: spec[scale],\n field: Value\n };\n }\n });\n const symbols = guideMark({\n type: SymbolMark,\n role: LegendSymbolRole,\n key: Value,\n from: valueRef,\n clip: height ? true : undefined,\n encode\n }, userEncode.symbols);\n\n // -- LEGEND LABELS --\n const labelOffset = encoder(symbolOffset);\n labelOffset.offset = _('labelOffset');\n encode = {\n enter: enter = {\n opacity: zero,\n x: {\n signal: xSignal,\n offset: labelOffset\n },\n y: yEncode\n },\n update: update = {\n opacity: one,\n text: {\n field: Label\n },\n x: enter.x,\n y: enter.y\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n align: _('labelAlign'),\n baseline: _('labelBaseline'),\n fill: _('labelColor'),\n fillOpacity: _('labelOpacity'),\n font: _('labelFont'),\n fontSize: _('labelFontSize'),\n fontStyle: _('labelFontStyle'),\n fontWeight: _('labelFontWeight'),\n limit: _('labelLimit')\n });\n const labels = guideMark({\n type: TextMark,\n role: LegendLabelRole,\n style: GuideLabelStyle,\n key: Value,\n from: valueRef,\n encode\n }, userEncode.labels);\n\n // -- LEGEND ENTRY GROUPS --\n encode = {\n enter: {\n noBound: {\n value: !height\n },\n // ignore width/height in bounds calc\n width: zero,\n height: height ? encoder(height) : zero,\n opacity: zero\n },\n exit: {\n opacity: zero\n },\n update: update = {\n opacity: one,\n row: {\n signal: null\n },\n column: {\n signal: null\n }\n }\n };\n\n // annotate and sort groups to ensure correct ordering\n if (_.isVertical(true)) {\n nrows = `ceil(item.mark.items.length / ${ncols})`;\n update.row.signal = `${index}%${nrows}`;\n update.column.signal = `floor(${index} / ${nrows})`;\n sort = {\n field: ['row', index]\n };\n } else {\n update.row.signal = `floor(${index} / ${ncols})`;\n update.column.signal = `${index} % ${ncols}`;\n sort = {\n field: index\n };\n }\n // handle zero column case (implies infinite columns)\n update.column.signal = `(${columns})?${update.column.signal}:${index}`;\n\n // facet legend entries into sub-groups\n dataRef = {\n facet: {\n data: dataRef,\n name: 'value',\n groupby: Index\n }\n };\n return guideGroup({\n role: ScopeRole,\n from: dataRef,\n encode: extendEncode(encode, entries, Skip),\n marks: [symbols, labels],\n name,\n interactive,\n sort\n });\n}\nfunction legendSymbolLayout(spec, config) {\n const _ = lookup(spec, config);\n\n // layout parameters for legend entries\n return {\n align: _('gridAlign'),\n columns: _.entryColumns(),\n center: {\n row: true,\n column: false\n },\n padding: {\n row: _('rowPadding'),\n column: _('columnPadding')\n }\n };\n}\n\n// expression logic for align, anchor, angle, and baseline calculation\nconst isL = 'item.orient === \"left\"',\n isR = 'item.orient === \"right\"',\n isLR = `(${isL} || ${isR})`,\n isVG = `datum.vgrad && ${isLR}`,\n baseline = anchorExpr('\"top\"', '\"bottom\"', '\"middle\"'),\n alignFlip = anchorExpr('\"right\"', '\"left\"', '\"center\"'),\n exprAlign = `datum.vgrad && ${isR} ? (${alignFlip}) : (${isLR} && !(datum.vgrad && ${isL})) ? \"left\" : ${alignExpr$1}`,\n exprAnchor = `item._anchor || (${isLR} ? \"middle\" : \"start\")`,\n exprAngle = `${isVG} ? (${isL} ? -90 : 90) : 0`,\n exprBaseline = `${isLR} ? (datum.vgrad ? (${isR} ? \"bottom\" : \"top\") : ${baseline}) : \"top\"`;\nfunction legendTitle (spec, config, userEncode, dataRef) {\n const _ = lookup(spec, config);\n const encode = {\n enter: {\n opacity: zero\n },\n update: {\n opacity: one,\n x: {\n field: {\n group: 'padding'\n }\n },\n y: {\n field: {\n group: 'padding'\n }\n }\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n orient: _('titleOrient'),\n _anchor: _('titleAnchor'),\n anchor: {\n signal: exprAnchor\n },\n angle: {\n signal: exprAngle\n },\n align: {\n signal: exprAlign\n },\n baseline: {\n signal: exprBaseline\n },\n text: spec.title,\n fill: _('titleColor'),\n fillOpacity: _('titleOpacity'),\n font: _('titleFont'),\n fontSize: _('titleFontSize'),\n fontStyle: _('titleFontStyle'),\n fontWeight: _('titleFontWeight'),\n limit: _('titleLimit'),\n lineHeight: _('titleLineHeight')\n }, {\n // require update\n align: _('titleAlign'),\n baseline: _('titleBaseline')\n });\n return guideMark({\n type: TextMark,\n role: LegendTitleRole,\n style: GuideTitleStyle,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nfunction clip (clip, scope) {\n let expr;\n if (isObject(clip)) {\n if (clip.signal) {\n expr = clip.signal;\n } else if (clip.path) {\n expr = 'pathShape(' + param(clip.path) + ')';\n } else if (clip.sphere) {\n expr = 'geoShape(' + param(clip.sphere) + ', {type: \"Sphere\"})';\n }\n }\n return expr ? scope.signalRef(expr) : !!clip;\n}\nfunction param(value) {\n return isObject(value) && value.signal ? value.signal : stringValue(value);\n}\n\nfunction getRole (spec) {\n const role = spec.role || '';\n return role.startsWith('axis') || role.startsWith('legend') || role.startsWith('title') ? role : spec.type === GroupMark ? ScopeRole : role || MarkRole;\n}\n\nfunction definition (spec) {\n return {\n marktype: spec.type,\n name: spec.name || undefined,\n role: spec.role || getRole(spec),\n zindex: +spec.zindex || undefined,\n aria: spec.aria,\n description: spec.description\n };\n}\n\nfunction interactive (spec, scope) {\n return spec && spec.signal ? scope.signalRef(spec.signal) : spec === false ? false : true;\n}\n\n/**\n * Parse a data transform specification.\n */\nfunction parseTransform (spec, scope) {\n const def = definition$1(spec.type);\n if (!def) error('Unrecognized transform type: ' + stringValue(spec.type));\n const t = entry(def.type.toLowerCase(), null, parseParameters(def, spec, scope));\n if (spec.signal) scope.addSignal(spec.signal, scope.proxy(t));\n t.metadata = def.metadata || {};\n return t;\n}\n\n/**\n * Parse all parameters of a data transform.\n */\nfunction parseParameters(def, spec, scope) {\n const params = {},\n n = def.params.length;\n for (let i = 0; i < n; ++i) {\n const pdef = def.params[i];\n params[pdef.name] = parseParameter(pdef, spec, scope);\n }\n return params;\n}\n\n/**\n * Parse a data transform parameter.\n */\nfunction parseParameter(def, spec, scope) {\n const type = def.type,\n value = spec[def.name];\n if (type === 'index') {\n return parseIndexParameter(def, spec, scope);\n } else if (value === undefined) {\n if (def.required) {\n error('Missing required ' + stringValue(spec.type) + ' parameter: ' + stringValue(def.name));\n }\n return;\n } else if (type === 'param') {\n return parseSubParameters(def, spec, scope);\n } else if (type === 'projection') {\n return scope.projectionRef(spec[def.name]);\n }\n return def.array && !isSignal(value) ? value.map(v => parameterValue(def, v, scope)) : parameterValue(def, value, scope);\n}\n\n/**\n * Parse a single parameter value.\n */\nfunction parameterValue(def, value, scope) {\n const type = def.type;\n if (isSignal(value)) {\n return isExpr(type) ? error('Expression references can not be signals.') : isField(type) ? scope.fieldRef(value) : isCompare(type) ? scope.compareRef(value) : scope.signalRef(value.signal);\n } else {\n const expr = def.expr || isField(type);\n return expr && outerExpr(value) ? scope.exprRef(value.expr, value.as) : expr && outerField(value) ? fieldRef$1(value.field, value.as) : isExpr(type) ? parseExpression(value, scope) : isData(type) ? ref(scope.getData(value).values) : isField(type) ? fieldRef$1(value) : isCompare(type) ? scope.compareRef(value) : value;\n }\n}\n\n/**\n * Parse parameter for accessing an index of another data set.\n */\nfunction parseIndexParameter(def, spec, scope) {\n if (!isString(spec.from)) {\n error('Lookup \"from\" parameter must be a string literal.');\n }\n return scope.getData(spec.from).lookupRef(scope, spec.key);\n}\n\n/**\n * Parse a parameter that contains one or more sub-parameter objects.\n */\nfunction parseSubParameters(def, spec, scope) {\n const value = spec[def.name];\n if (def.array) {\n if (!isArray(value)) {\n // signals not allowed!\n error('Expected an array of sub-parameters. Instead: ' + stringValue(value));\n }\n return value.map(v => parseSubParameter(def, v, scope));\n } else {\n return parseSubParameter(def, value, scope);\n }\n}\n\n/**\n * Parse a sub-parameter object.\n */\nfunction parseSubParameter(def, value, scope) {\n const n = def.params.length;\n let pdef;\n\n // loop over defs to find matching key\n for (let i = 0; i < n; ++i) {\n pdef = def.params[i];\n for (const k in pdef.key) {\n if (pdef.key[k] !== value[k]) {\n pdef = null;\n break;\n }\n }\n if (pdef) break;\n }\n // raise error if matching key not found\n if (!pdef) error('Unsupported parameter: ' + stringValue(value));\n\n // parse params, create Params transform, return ref\n const params = extend(parseParameters(pdef, value, scope), pdef.key);\n return ref(scope.add(Params(params)));\n}\n\n// -- Utilities -----\n\nconst outerExpr = _ => _ && _.expr;\nconst outerField = _ => _ && _.field;\nconst isData = _ => _ === 'data';\nconst isExpr = _ => _ === 'expr';\nconst isField = _ => _ === 'field';\nconst isCompare = _ => _ === 'compare';\n\nfunction parseData$1 (from, group, scope) {\n let facet, key, op, dataRef, parent;\n\n // if no source data, generate singleton datum\n if (!from) {\n dataRef = ref(scope.add(Collect(null, [{}])));\n }\n\n // if faceted, process facet specification\n else if (facet = from.facet) {\n if (!group) error('Only group marks can be faceted.');\n\n // use pre-faceted source data, if available\n if (facet.field != null) {\n dataRef = parent = getDataRef(facet, scope);\n } else {\n // generate facet aggregates if no direct data specification\n if (!from.data) {\n op = parseTransform(extend({\n type: 'aggregate',\n groupby: array(facet.groupby)\n }, facet.aggregate), scope);\n op.params.key = scope.keyRef(facet.groupby);\n op.params.pulse = getDataRef(facet, scope);\n dataRef = parent = ref(scope.add(op));\n } else {\n parent = ref(scope.getData(from.data).aggregate);\n }\n key = scope.keyRef(facet.groupby, true);\n }\n }\n\n // if not yet defined, get source data reference\n if (!dataRef) {\n dataRef = getDataRef(from, scope);\n }\n return {\n key: key,\n pulse: dataRef,\n parent: parent\n };\n}\nfunction getDataRef(from, scope) {\n return from.$ref ? from : from.data && from.data.$ref ? from.data : ref(scope.getData(from.data).output);\n}\n\nfunction DataScope(scope, input, output, values, aggr) {\n this.scope = scope; // parent scope object\n this.input = input; // first operator in pipeline (tuple input)\n this.output = output; // last operator in pipeline (tuple output)\n this.values = values; // operator for accessing tuples (but not tuple flow)\n\n // last aggregate in transform pipeline\n this.aggregate = aggr;\n\n // lookup table of field indices\n this.index = {};\n}\nDataScope.fromEntries = function (scope, entries) {\n const n = entries.length,\n values = entries[n - 1],\n output = entries[n - 2];\n let input = entries[0],\n aggr = null,\n i = 1;\n if (input && input.type === 'load') {\n input = entries[1];\n }\n\n // add operator entries to this scope, wire up pulse chain\n scope.add(entries[0]);\n for (; i < n; ++i) {\n entries[i].params.pulse = ref(entries[i - 1]);\n scope.add(entries[i]);\n if (entries[i].type === 'aggregate') aggr = entries[i];\n }\n return new DataScope(scope, input, output, values, aggr);\n};\nfunction fieldKey(field) {\n return isString(field) ? field : null;\n}\nfunction addSortField(scope, p, sort) {\n const as = aggrField(sort.op, sort.field);\n let s;\n if (p.ops) {\n for (let i = 0, n = p.as.length; i < n; ++i) {\n if (p.as[i] === as) return;\n }\n } else {\n p.ops = ['count'];\n p.fields = [null];\n p.as = ['count'];\n }\n if (sort.op) {\n p.ops.push((s = sort.op.signal) ? scope.signalRef(s) : sort.op);\n p.fields.push(scope.fieldRef(sort.field));\n p.as.push(as);\n }\n}\nfunction cache(scope, ds, name, optype, field, counts, index) {\n const cache = ds[name] || (ds[name] = {}),\n sort = sortKey(counts);\n let k = fieldKey(field),\n v,\n op;\n if (k != null) {\n scope = ds.scope;\n k = k + (sort ? '|' + sort : '');\n v = cache[k];\n }\n if (!v) {\n const params = counts ? {\n field: keyFieldRef,\n pulse: ds.countsRef(scope, field, counts)\n } : {\n field: scope.fieldRef(field),\n pulse: ref(ds.output)\n };\n if (sort) params.sort = scope.sortRef(counts);\n op = scope.add(entry(optype, undefined, params));\n if (index) ds.index[field] = op;\n v = ref(op);\n if (k != null) cache[k] = v;\n }\n return v;\n}\nDataScope.prototype = {\n countsRef(scope, field, sort) {\n const ds = this,\n cache = ds.counts || (ds.counts = {}),\n k = fieldKey(field);\n let v, a, p;\n if (k != null) {\n scope = ds.scope;\n v = cache[k];\n }\n if (!v) {\n p = {\n groupby: scope.fieldRef(field, 'key'),\n pulse: ref(ds.output)\n };\n if (sort && sort.field) addSortField(scope, p, sort);\n a = scope.add(Aggregate(p));\n v = scope.add(Collect({\n pulse: ref(a)\n }));\n v = {\n agg: a,\n ref: ref(v)\n };\n if (k != null) cache[k] = v;\n } else if (sort && sort.field) {\n addSortField(scope, v.agg.params, sort);\n }\n return v.ref;\n },\n tuplesRef() {\n return ref(this.values);\n },\n extentRef(scope, field) {\n return cache(scope, this, 'extent', 'extent', field, false);\n },\n domainRef(scope, field) {\n return cache(scope, this, 'domain', 'values', field, false);\n },\n valuesRef(scope, field, sort) {\n return cache(scope, this, 'vals', 'values', field, sort || true);\n },\n lookupRef(scope, field) {\n return cache(scope, this, 'lookup', 'tupleindex', field, false);\n },\n indataRef(scope, field) {\n return cache(scope, this, 'indata', 'tupleindex', field, true, true);\n }\n};\n\nfunction parseFacet (spec, scope, group) {\n const facet = spec.from.facet,\n name = facet.name,\n data = getDataRef(facet, scope);\n let op;\n if (!facet.name) {\n error('Facet must have a name: ' + stringValue(facet));\n }\n if (!facet.data) {\n error('Facet must reference a data set: ' + stringValue(facet));\n }\n if (facet.field) {\n op = scope.add(PreFacet({\n field: scope.fieldRef(facet.field),\n pulse: data\n }));\n } else if (facet.groupby) {\n op = scope.add(Facet({\n key: scope.keyRef(facet.groupby),\n group: ref(scope.proxy(group.parent)),\n pulse: data\n }));\n } else {\n error('Facet must specify groupby or field: ' + stringValue(facet));\n }\n\n // initialize facet subscope\n const subscope = scope.fork(),\n source = subscope.add(Collect()),\n values = subscope.add(Sieve({\n pulse: ref(source)\n }));\n subscope.addData(name, new DataScope(subscope, source, source, values));\n subscope.addSignal('parent', null);\n\n // parse faceted subflow\n op.params.subflow = {\n $subflow: subscope.parse(spec).toRuntime()\n };\n}\n\nfunction parseSubflow (spec, scope, input) {\n const op = scope.add(PreFacet({\n pulse: input.pulse\n })),\n subscope = scope.fork();\n subscope.add(Sieve());\n subscope.addSignal('parent', null);\n\n // parse group mark subflow\n op.params.subflow = {\n $subflow: subscope.parse(spec).toRuntime()\n };\n}\n\nfunction parseTrigger (spec, scope, name) {\n const remove = spec.remove,\n insert = spec.insert,\n toggle = spec.toggle,\n modify = spec.modify,\n values = spec.values,\n op = scope.add(operator());\n const update = 'if(' + spec.trigger + ',modify(\"' + name + '\",' + [insert, remove, toggle, modify, values].map(_ => _ == null ? 'null' : _).join(',') + '),0)';\n const expr = parseExpression(update, scope);\n op.update = expr.$expr;\n op.params = expr.$params;\n}\n\nfunction parseMark (spec, scope) {\n const role = getRole(spec),\n group = spec.type === GroupMark,\n facet = spec.from && spec.from.facet,\n overlap = spec.overlap;\n let layout = spec.layout || role === ScopeRole || role === FrameRole,\n ops,\n op,\n store,\n enc,\n name,\n layoutRef,\n boundRef;\n const nested = role === MarkRole || layout || facet;\n\n // resolve input data\n const input = parseData$1(spec.from, group, scope);\n\n // data join to map tuples to visual items\n op = scope.add(DataJoin({\n key: input.key || (spec.key ? fieldRef$1(spec.key) : undefined),\n pulse: input.pulse,\n clean: !group\n }));\n const joinRef = ref(op);\n\n // collect visual items\n op = store = scope.add(Collect({\n pulse: joinRef\n }));\n\n // connect visual items to scenegraph\n op = scope.add(Mark({\n markdef: definition(spec),\n interactive: interactive(spec.interactive, scope),\n clip: clip(spec.clip, scope),\n context: {\n $context: true\n },\n groups: scope.lookup(),\n parent: scope.signals.parent ? scope.signalRef('parent') : null,\n index: scope.markpath(),\n pulse: ref(op)\n }));\n const markRef = ref(op);\n\n // add visual encoders\n op = enc = scope.add(Encode(parseEncode(spec.encode, spec.type, role, spec.style, scope, {\n mod: false,\n pulse: markRef\n })));\n\n // monitor parent marks to propagate changes\n op.params.parent = scope.encode();\n\n // add post-encoding transforms, if defined\n if (spec.transform) {\n spec.transform.forEach(_ => {\n const tx = parseTransform(_, scope),\n md = tx.metadata;\n if (md.generates || md.changes) {\n error('Mark transforms should not generate new data.');\n }\n if (!md.nomod) enc.params.mod = true; // update encode mod handling\n tx.params.pulse = ref(op);\n scope.add(op = tx);\n });\n }\n\n // if item sort specified, perform post-encoding\n if (spec.sort) {\n op = scope.add(SortItems({\n sort: scope.compareRef(spec.sort),\n pulse: ref(op)\n }));\n }\n const encodeRef = ref(op);\n\n // add view layout operator if needed\n if (facet || layout) {\n layout = scope.add(ViewLayout({\n layout: scope.objectProperty(spec.layout),\n legends: scope.legends,\n mark: markRef,\n pulse: encodeRef\n }));\n layoutRef = ref(layout);\n }\n\n // compute bounding boxes\n const bound = scope.add(Bound({\n mark: markRef,\n pulse: layoutRef || encodeRef\n }));\n boundRef = ref(bound);\n\n // if group mark, recurse to parse nested content\n if (group) {\n // juggle layout & bounds to ensure they run *after* any faceting transforms\n if (nested) {\n ops = scope.operators;\n ops.pop();\n if (layout) ops.pop();\n }\n scope.pushState(encodeRef, layoutRef || boundRef, joinRef);\n facet ? parseFacet(spec, scope, input) // explicit facet\n : nested ? parseSubflow(spec, scope, input) // standard mark group\n : scope.parse(spec); // guide group, we can avoid nested scopes\n scope.popState();\n if (nested) {\n if (layout) ops.push(layout);\n ops.push(bound);\n }\n }\n\n // if requested, add overlap removal transform\n if (overlap) {\n boundRef = parseOverlap(overlap, boundRef, scope);\n }\n\n // render / sieve items\n const render = scope.add(Render({\n pulse: boundRef\n })),\n sieve = scope.add(Sieve({\n pulse: ref(render)\n }, undefined, scope.parent()));\n\n // if mark is named, make accessible as reactive geometry\n // add trigger updates if defined\n if (spec.name != null) {\n name = spec.name;\n scope.addData(name, new DataScope(scope, store, render, sieve));\n if (spec.on) spec.on.forEach(on => {\n if (on.insert || on.remove || on.toggle) {\n error('Marks only support modify triggers.');\n }\n parseTrigger(on, scope, name);\n });\n }\n}\nfunction parseOverlap(overlap, source, scope) {\n const method = overlap.method,\n bound = overlap.bound,\n sep = overlap.separation;\n const params = {\n separation: isSignal(sep) ? scope.signalRef(sep.signal) : sep,\n method: isSignal(method) ? scope.signalRef(method.signal) : method,\n pulse: source\n };\n if (overlap.order) {\n params.sort = scope.compareRef({\n field: overlap.order\n });\n }\n if (bound) {\n const tol = bound.tolerance;\n params.boundTolerance = isSignal(tol) ? scope.signalRef(tol.signal) : +tol;\n params.boundScale = scope.scaleRef(bound.scale);\n params.boundOrient = bound.orient;\n }\n return ref(scope.add(Overlap(params)));\n}\n\nfunction parseLegend (spec, scope) {\n const config = scope.config.legend,\n encode = spec.encode || {},\n _ = lookup(spec, config),\n legendEncode = encode.legend || {},\n name = legendEncode.name || undefined,\n interactive = legendEncode.interactive,\n style = legendEncode.style,\n scales = {};\n let scale = 0,\n entryLayout,\n params,\n children;\n\n // resolve scales and 'canonical' scale name\n LegendScales.forEach(s => spec[s] ? (scales[s] = spec[s], scale = scale || spec[s]) : 0);\n if (!scale) error('Missing valid scale for legend.');\n\n // resolve legend type (symbol, gradient, or discrete gradient)\n const type = legendType(spec, scope.scaleType(scale));\n\n // single-element data source for legend group\n const datum = {\n title: spec.title != null,\n scales: scales,\n type: type,\n vgrad: type !== 'symbol' && _.isVertical()\n };\n const dataRef = ref(scope.add(Collect(null, [datum])));\n\n // encoding properties for legend entry sub-group\n const entryEncode = {\n enter: {\n x: {\n value: 0\n },\n y: {\n value: 0\n }\n }\n };\n\n // data source for legend values\n const entryRef = ref(scope.add(LegendEntries(params = {\n type: type,\n scale: scope.scaleRef(scale),\n count: scope.objectProperty(_('tickCount')),\n limit: scope.property(_('symbolLimit')),\n values: scope.objectProperty(spec.values),\n minstep: scope.property(spec.tickMinStep),\n formatType: scope.property(spec.formatType),\n formatSpecifier: scope.property(spec.format)\n })));\n\n // continuous gradient legend\n if (type === Gradient) {\n children = [legendGradient(spec, scale, config, encode.gradient), legendGradientLabels(spec, config, encode.labels, entryRef)];\n // adjust default tick count based on the gradient length\n params.count = params.count || scope.signalRef(`max(2,2*floor((${deref(_.gradientLength())})/100))`);\n }\n\n // discrete gradient legend\n else if (type === Discrete) {\n children = [legendGradientDiscrete(spec, scale, config, encode.gradient, entryRef), legendGradientLabels(spec, config, encode.labels, entryRef)];\n }\n\n // symbol legend\n else {\n // determine legend symbol group layout\n entryLayout = legendSymbolLayout(spec, config);\n children = [legendSymbolGroups(spec, config, encode, entryRef, deref(entryLayout.columns))];\n // pass symbol size information to legend entry generator\n params.size = sizeExpression(spec, scope, children[0].marks);\n }\n\n // generate legend marks\n children = [guideGroup({\n role: LegendEntryRole,\n from: dataRef,\n encode: entryEncode,\n marks: children,\n layout: entryLayout,\n interactive\n })];\n\n // include legend title if defined\n if (datum.title) {\n children.push(legendTitle(spec, config, encode.title, dataRef));\n }\n\n // parse legend specification\n return parseMark(guideGroup({\n role: LegendRole,\n from: dataRef,\n encode: extendEncode(buildLegendEncode(_, spec, config), legendEncode, Skip),\n marks: children,\n aria: _('aria'),\n description: _('description'),\n zindex: _('zindex'),\n name,\n interactive,\n style\n }), scope);\n}\nfunction legendType(spec, scaleType) {\n let type = spec.type || Symbols;\n if (!spec.type && scaleCount(spec) === 1 && (spec.fill || spec.stroke)) {\n type = isContinuous(scaleType) ? Gradient : isDiscretizing(scaleType) ? Discrete : Symbols;\n }\n return type !== Gradient ? type : isDiscretizing(scaleType) ? Discrete : Gradient;\n}\nfunction scaleCount(spec) {\n return LegendScales.reduce((count, type) => count + (spec[type] ? 1 : 0), 0);\n}\nfunction buildLegendEncode(_, spec, config) {\n const encode = {\n enter: {},\n update: {}\n };\n addEncoders(encode, {\n orient: _('orient'),\n offset: _('offset'),\n padding: _('padding'),\n titlePadding: _('titlePadding'),\n cornerRadius: _('cornerRadius'),\n fill: _('fillColor'),\n stroke: _('strokeColor'),\n strokeWidth: config.strokeWidth,\n strokeDash: config.strokeDash,\n x: _('legendX'),\n y: _('legendY'),\n // accessibility support\n format: spec.format,\n formatType: spec.formatType\n });\n return encode;\n}\nfunction sizeExpression(spec, scope, marks) {\n const size = deref(getChannel('size', spec, marks)),\n strokeWidth = deref(getChannel('strokeWidth', spec, marks)),\n fontSize = deref(getFontSize(marks[1].encode, scope, GuideLabelStyle));\n return parseExpression(`max(ceil(sqrt(${size})+${strokeWidth}),${fontSize})`, scope);\n}\nfunction getChannel(name, spec, marks) {\n return spec[name] ? `scale(\"${spec[name]}\",datum)` : getEncoding(name, marks[0].encode);\n}\nfunction getFontSize(encode, scope, style) {\n return getEncoding('fontSize', encode) || getStyle('fontSize', scope, style);\n}\n\nconst angleExpr = `item.orient===\"${Left}\"?-90:item.orient===\"${Right}\"?90:0`;\nfunction parseTitle (spec, scope) {\n spec = isString(spec) ? {\n text: spec\n } : spec;\n const _ = lookup(spec, scope.config.title),\n encode = spec.encode || {},\n userEncode = encode.group || {},\n name = userEncode.name || undefined,\n interactive = userEncode.interactive,\n style = userEncode.style,\n children = [];\n\n // single-element data source for group title\n const datum = {},\n dataRef = ref(scope.add(Collect(null, [datum])));\n\n // include title text\n children.push(buildTitle(spec, _, titleEncode(spec), dataRef));\n\n // include subtitle text\n if (spec.subtitle) {\n children.push(buildSubTitle(spec, _, encode.subtitle, dataRef));\n }\n\n // parse title specification\n return parseMark(guideGroup({\n role: TitleRole,\n from: dataRef,\n encode: groupEncode(_, userEncode),\n marks: children,\n aria: _('aria'),\n description: _('description'),\n zindex: _('zindex'),\n name,\n interactive,\n style\n }), scope);\n}\n\n// provide backwards-compatibility for title custom encode;\n// the top-level encode block has been *deprecated*.\nfunction titleEncode(spec) {\n const encode = spec.encode;\n return encode && encode.title || extend({\n name: spec.name,\n interactive: spec.interactive,\n style: spec.style\n }, encode);\n}\nfunction groupEncode(_, userEncode) {\n const encode = {\n enter: {},\n update: {}\n };\n addEncoders(encode, {\n orient: _('orient'),\n anchor: _('anchor'),\n align: {\n signal: alignExpr$1\n },\n angle: {\n signal: angleExpr\n },\n limit: _('limit'),\n frame: _('frame'),\n offset: _('offset') || 0,\n padding: _('subtitlePadding')\n });\n return extendEncode(encode, userEncode, Skip);\n}\nfunction buildTitle(spec, _, userEncode, dataRef) {\n const zero = {\n value: 0\n },\n text = spec.text,\n encode = {\n enter: {\n opacity: zero\n },\n update: {\n opacity: {\n value: 1\n }\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n text: text,\n align: {\n signal: 'item.mark.group.align'\n },\n angle: {\n signal: 'item.mark.group.angle'\n },\n limit: {\n signal: 'item.mark.group.limit'\n },\n baseline: 'top',\n dx: _('dx'),\n dy: _('dy'),\n fill: _('color'),\n font: _('font'),\n fontSize: _('fontSize'),\n fontStyle: _('fontStyle'),\n fontWeight: _('fontWeight'),\n lineHeight: _('lineHeight')\n }, {\n // update\n align: _('align'),\n angle: _('angle'),\n baseline: _('baseline')\n });\n return guideMark({\n type: TextMark,\n role: TitleTextRole,\n style: GroupTitleStyle,\n from: dataRef,\n encode\n }, userEncode);\n}\nfunction buildSubTitle(spec, _, userEncode, dataRef) {\n const zero = {\n value: 0\n },\n text = spec.subtitle,\n encode = {\n enter: {\n opacity: zero\n },\n update: {\n opacity: {\n value: 1\n }\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n text: text,\n align: {\n signal: 'item.mark.group.align'\n },\n angle: {\n signal: 'item.mark.group.angle'\n },\n limit: {\n signal: 'item.mark.group.limit'\n },\n baseline: 'top',\n dx: _('dx'),\n dy: _('dy'),\n fill: _('subtitleColor'),\n font: _('subtitleFont'),\n fontSize: _('subtitleFontSize'),\n fontStyle: _('subtitleFontStyle'),\n fontWeight: _('subtitleFontWeight'),\n lineHeight: _('subtitleLineHeight')\n }, {\n // update\n align: _('align'),\n angle: _('angle'),\n baseline: _('baseline')\n });\n return guideMark({\n type: TextMark,\n role: TitleSubtitleRole,\n style: GroupSubtitleStyle,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nfunction parseData(data, scope) {\n const transforms = [];\n if (data.transform) {\n data.transform.forEach(tx => {\n transforms.push(parseTransform(tx, scope));\n });\n }\n if (data.on) {\n data.on.forEach(on => {\n parseTrigger(on, scope, data.name);\n });\n }\n scope.addDataPipeline(data.name, analyze(data, scope, transforms));\n}\n\n/**\n * Analyze a data pipeline, add needed operators.\n */\nfunction analyze(data, scope, ops) {\n const output = [];\n let source = null,\n modify = false,\n generate = false,\n upstream,\n i,\n n,\n t,\n m;\n if (data.values) {\n // hard-wired input data set\n if (isSignal(data.values) || hasSignal(data.format)) {\n // if either values is signal or format has signal, use dynamic loader\n output.push(load(scope, data));\n output.push(source = collect());\n } else {\n // otherwise, ingest upon dataflow init\n output.push(source = collect({\n $ingest: data.values,\n $format: data.format\n }));\n }\n } else if (data.url) {\n // load data from external source\n if (hasSignal(data.url) || hasSignal(data.format)) {\n // if either url or format has signal, use dynamic loader\n output.push(load(scope, data));\n output.push(source = collect());\n } else {\n // otherwise, request load upon dataflow init\n output.push(source = collect({\n $request: data.url,\n $format: data.format\n }));\n }\n } else if (data.source) {\n // derives from one or more other data sets\n source = upstream = array(data.source).map(d => ref(scope.getData(d).output));\n output.push(null); // populate later\n }\n\n // scan data transforms, add collectors as needed\n for (i = 0, n = ops.length; i < n; ++i) {\n t = ops[i];\n m = t.metadata;\n if (!source && !m.source) {\n output.push(source = collect());\n }\n output.push(t);\n if (m.generates) generate = true;\n if (m.modifies && !generate) modify = true;\n if (m.source) source = t;else if (m.changes) source = null;\n }\n if (upstream) {\n n = upstream.length - 1;\n output[0] = Relay({\n derive: modify,\n pulse: n ? upstream : upstream[0]\n });\n if (modify || n) {\n // collect derived and multi-pulse tuples\n output.splice(1, 0, collect());\n }\n }\n if (!source) output.push(collect());\n output.push(Sieve({}));\n return output;\n}\nfunction collect(values) {\n const s = Collect({}, values);\n s.metadata = {\n source: true\n };\n return s;\n}\nfunction load(scope, data) {\n return Load({\n url: data.url ? scope.property(data.url) : undefined,\n async: data.async ? scope.property(data.async) : undefined,\n values: data.values ? scope.property(data.values) : undefined,\n format: scope.objectProperty(data.format)\n });\n}\n\nconst isX = orient => orient === Bottom || orient === Top;\n\n// get sign coefficient based on axis orient\nconst getSign = (orient, a, b) => isSignal(orient) ? ifLeftTopExpr(orient.signal, a, b) : orient === Left || orient === Top ? a : b;\n\n// condition on axis x-direction\nconst ifX = (orient, a, b) => isSignal(orient) ? ifXEnc(orient.signal, a, b) : isX(orient) ? a : b;\n\n// condition on axis y-direction\nconst ifY = (orient, a, b) => isSignal(orient) ? ifYEnc(orient.signal, a, b) : isX(orient) ? b : a;\nconst ifTop = (orient, a, b) => isSignal(orient) ? ifTopExpr(orient.signal, a, b) : orient === Top ? {\n value: a\n} : {\n value: b\n};\nconst ifRight = (orient, a, b) => isSignal(orient) ? ifRightExpr(orient.signal, a, b) : orient === Right ? {\n value: a\n} : {\n value: b\n};\nconst ifXEnc = ($orient, a, b) => ifEnc(`${$orient} === '${Top}' || ${$orient} === '${Bottom}'`, a, b);\nconst ifYEnc = ($orient, a, b) => ifEnc(`${$orient} !== '${Top}' && ${$orient} !== '${Bottom}'`, a, b);\nconst ifLeftTopExpr = ($orient, a, b) => ifExpr(`${$orient} === '${Left}' || ${$orient} === '${Top}'`, a, b);\nconst ifTopExpr = ($orient, a, b) => ifExpr(`${$orient} === '${Top}'`, a, b);\nconst ifRightExpr = ($orient, a, b) => ifExpr(`${$orient} === '${Right}'`, a, b);\nconst ifEnc = (test, a, b) => {\n // ensure inputs are encoder objects (or null)\n a = a != null ? encoder(a) : a;\n b = b != null ? encoder(b) : b;\n if (isSimple(a) && isSimple(b)) {\n // if possible generate simple signal expression\n a = a ? a.signal || stringValue(a.value) : null;\n b = b ? b.signal || stringValue(b.value) : null;\n return {\n signal: `${test} ? (${a}) : (${b})`\n };\n } else {\n // otherwise generate rule set\n return [extend({\n test\n }, a)].concat(b || []);\n }\n};\nconst isSimple = enc => enc == null || Object.keys(enc).length === 1;\nconst ifExpr = (test, a, b) => ({\n signal: `${test} ? (${toExpr(a)}) : (${toExpr(b)})`\n});\nconst ifOrient = ($orient, t, b, l, r) => ({\n signal: (l != null ? `${$orient} === '${Left}' ? (${toExpr(l)}) : ` : '') + (b != null ? `${$orient} === '${Bottom}' ? (${toExpr(b)}) : ` : '') + (r != null ? `${$orient} === '${Right}' ? (${toExpr(r)}) : ` : '') + (t != null ? `${$orient} === '${Top}' ? (${toExpr(t)}) : ` : '') + '(null)'\n});\nconst toExpr = v => isSignal(v) ? v.signal : v == null ? null : stringValue(v);\nconst mult = (sign, value) => value === 0 ? 0 : isSignal(sign) ? {\n signal: `(${sign.signal}) * ${value}`\n} : {\n value: sign * value\n};\nconst patch = (value, base) => {\n const s = value.signal;\n return s && s.endsWith('(null)') ? {\n signal: s.slice(0, -6) + base.signal\n } : value;\n};\n\nfunction fallback(prop, config, axisConfig, style) {\n let styleProp;\n if (config && hasOwnProperty(config, prop)) {\n return config[prop];\n } else if (hasOwnProperty(axisConfig, prop)) {\n return axisConfig[prop];\n } else if (prop.startsWith('title')) {\n switch (prop) {\n case 'titleColor':\n styleProp = 'fill';\n break;\n case 'titleFont':\n case 'titleFontSize':\n case 'titleFontWeight':\n styleProp = prop[5].toLowerCase() + prop.slice(6);\n }\n return style[GuideTitleStyle][styleProp];\n } else if (prop.startsWith('label')) {\n switch (prop) {\n case 'labelColor':\n styleProp = 'fill';\n break;\n case 'labelFont':\n case 'labelFontSize':\n styleProp = prop[5].toLowerCase() + prop.slice(6);\n }\n return style[GuideLabelStyle][styleProp];\n }\n return null;\n}\nfunction keys(objects) {\n const map = {};\n for (const obj of objects) {\n if (!obj) continue;\n for (const key in obj) map[key] = 1;\n }\n return Object.keys(map);\n}\nfunction axisConfig (spec, scope) {\n var config = scope.config,\n style = config.style,\n axis = config.axis,\n band = scope.scaleType(spec.scale) === 'band' && config.axisBand,\n orient = spec.orient,\n xy,\n or,\n key;\n if (isSignal(orient)) {\n const xyKeys = keys([config.axisX, config.axisY]),\n orientKeys = keys([config.axisTop, config.axisBottom, config.axisLeft, config.axisRight]);\n xy = {};\n for (key of xyKeys) {\n xy[key] = ifX(orient, fallback(key, config.axisX, axis, style), fallback(key, config.axisY, axis, style));\n }\n or = {};\n for (key of orientKeys) {\n or[key] = ifOrient(orient.signal, fallback(key, config.axisTop, axis, style), fallback(key, config.axisBottom, axis, style), fallback(key, config.axisLeft, axis, style), fallback(key, config.axisRight, axis, style));\n }\n } else {\n xy = orient === Top || orient === Bottom ? config.axisX : config.axisY;\n or = config['axis' + orient[0].toUpperCase() + orient.slice(1)];\n }\n const result = xy || or || band ? extend({}, axis, xy, or, band) : axis;\n return result;\n}\n\nfunction axisDomain (spec, config, userEncode, dataRef) {\n const _ = lookup(spec, config),\n orient = spec.orient;\n let enter, update;\n const encode = {\n enter: enter = {\n opacity: zero\n },\n update: update = {\n opacity: one\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n stroke: _('domainColor'),\n strokeCap: _('domainCap'),\n strokeDash: _('domainDash'),\n strokeDashOffset: _('domainDashOffset'),\n strokeWidth: _('domainWidth'),\n strokeOpacity: _('domainOpacity')\n });\n const pos0 = position(spec, 0);\n const pos1 = position(spec, 1);\n enter.x = update.x = ifX(orient, pos0, zero);\n enter.x2 = update.x2 = ifX(orient, pos1);\n enter.y = update.y = ifY(orient, pos0, zero);\n enter.y2 = update.y2 = ifY(orient, pos1);\n return guideMark({\n type: RuleMark,\n role: AxisDomainRole,\n from: dataRef,\n encode\n }, userEncode);\n}\nfunction position(spec, pos) {\n return {\n scale: spec.scale,\n range: pos\n };\n}\n\nfunction axisGrid (spec, config, userEncode, dataRef, band) {\n const _ = lookup(spec, config),\n orient = spec.orient,\n vscale = spec.gridScale,\n sign = getSign(orient, 1, -1),\n offset = offsetValue(spec.offset, sign);\n let enter, exit, update;\n const encode = {\n enter: enter = {\n opacity: zero\n },\n update: update = {\n opacity: one\n },\n exit: exit = {\n opacity: zero\n }\n };\n addEncoders(encode, {\n stroke: _('gridColor'),\n strokeCap: _('gridCap'),\n strokeDash: _('gridDash'),\n strokeDashOffset: _('gridDashOffset'),\n strokeOpacity: _('gridOpacity'),\n strokeWidth: _('gridWidth')\n });\n const tickPos = {\n scale: spec.scale,\n field: Value,\n band: band.band,\n extra: band.extra,\n offset: band.offset,\n round: _('tickRound')\n };\n const sz = ifX(orient, {\n signal: 'height'\n }, {\n signal: 'width'\n });\n const gridStart = vscale ? {\n scale: vscale,\n range: 0,\n mult: sign,\n offset: offset\n } : {\n value: 0,\n offset: offset\n };\n const gridEnd = vscale ? {\n scale: vscale,\n range: 1,\n mult: sign,\n offset: offset\n } : extend(sz, {\n mult: sign,\n offset: offset\n });\n enter.x = update.x = ifX(orient, tickPos, gridStart);\n enter.y = update.y = ifY(orient, tickPos, gridStart);\n enter.x2 = update.x2 = ifY(orient, gridEnd);\n enter.y2 = update.y2 = ifX(orient, gridEnd);\n exit.x = ifX(orient, tickPos);\n exit.y = ifY(orient, tickPos);\n return guideMark({\n type: RuleMark,\n role: AxisGridRole,\n key: Value,\n from: dataRef,\n encode\n }, userEncode);\n}\nfunction offsetValue(offset, sign) {\n if (sign === 1) ; else if (!isObject(offset)) {\n offset = isSignal(sign) ? {\n signal: `(${sign.signal}) * (${offset || 0})`\n } : sign * (offset || 0);\n } else {\n let entry = offset = extend({}, offset);\n while (entry.mult != null) {\n if (!isObject(entry.mult)) {\n entry.mult = isSignal(sign) // no offset if sign === 1\n ? {\n signal: `(${entry.mult}) * (${sign.signal})`\n } : entry.mult * sign;\n return offset;\n } else {\n entry = entry.mult = extend({}, entry.mult);\n }\n }\n entry.mult = sign;\n }\n return offset;\n}\n\nfunction axisTicks (spec, config, userEncode, dataRef, size, band) {\n const _ = lookup(spec, config),\n orient = spec.orient,\n sign = getSign(orient, -1, 1);\n let enter, exit, update;\n const encode = {\n enter: enter = {\n opacity: zero\n },\n update: update = {\n opacity: one\n },\n exit: exit = {\n opacity: zero\n }\n };\n addEncoders(encode, {\n stroke: _('tickColor'),\n strokeCap: _('tickCap'),\n strokeDash: _('tickDash'),\n strokeDashOffset: _('tickDashOffset'),\n strokeOpacity: _('tickOpacity'),\n strokeWidth: _('tickWidth')\n });\n const tickSize = encoder(size);\n tickSize.mult = sign;\n const tickPos = {\n scale: spec.scale,\n field: Value,\n band: band.band,\n extra: band.extra,\n offset: band.offset,\n round: _('tickRound')\n };\n update.y = enter.y = ifX(orient, zero, tickPos);\n update.y2 = enter.y2 = ifX(orient, tickSize);\n exit.x = ifX(orient, tickPos);\n update.x = enter.x = ifY(orient, zero, tickPos);\n update.x2 = enter.x2 = ifY(orient, tickSize);\n exit.y = ifY(orient, tickPos);\n return guideMark({\n type: RuleMark,\n role: AxisTickRole,\n key: Value,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nfunction flushExpr(scale, threshold, a, b, c) {\n return {\n signal: 'flush(range(\"' + scale + '\"), ' + 'scale(\"' + scale + '\", datum.value), ' + threshold + ',' + a + ',' + b + ',' + c + ')'\n };\n}\nfunction axisLabels (spec, config, userEncode, dataRef, size, band) {\n const _ = lookup(spec, config),\n orient = spec.orient,\n scale = spec.scale,\n sign = getSign(orient, -1, 1),\n flush = deref(_('labelFlush')),\n flushOffset = deref(_('labelFlushOffset')),\n labelAlign = _('labelAlign'),\n labelBaseline = _('labelBaseline');\n let flushOn = flush === 0 || !!flush,\n update;\n const tickSize = encoder(size);\n tickSize.mult = sign;\n tickSize.offset = encoder(_('labelPadding') || 0);\n tickSize.offset.mult = sign;\n const tickPos = {\n scale: scale,\n field: Value,\n band: 0.5,\n offset: extendOffset(band.offset, _('labelOffset'))\n };\n const align = ifX(orient, flushOn ? flushExpr(scale, flush, '\"left\"', '\"right\"', '\"center\"') : {\n value: 'center'\n }, ifRight(orient, 'left', 'right'));\n const baseline = ifX(orient, ifTop(orient, 'bottom', 'top'), flushOn ? flushExpr(scale, flush, '\"top\"', '\"bottom\"', '\"middle\"') : {\n value: 'middle'\n });\n const offsetExpr = flushExpr(scale, flush, `-(${flushOffset})`, flushOffset, 0);\n flushOn = flushOn && flushOffset;\n const enter = {\n opacity: zero,\n x: ifX(orient, tickPos, tickSize),\n y: ifY(orient, tickPos, tickSize)\n };\n const encode = {\n enter: enter,\n update: update = {\n opacity: one,\n text: {\n field: Label\n },\n x: enter.x,\n y: enter.y,\n align,\n baseline\n },\n exit: {\n opacity: zero,\n x: enter.x,\n y: enter.y\n }\n };\n addEncoders(encode, {\n dx: !labelAlign && flushOn ? ifX(orient, offsetExpr) : null,\n dy: !labelBaseline && flushOn ? ifY(orient, offsetExpr) : null\n });\n addEncoders(encode, {\n angle: _('labelAngle'),\n fill: _('labelColor'),\n fillOpacity: _('labelOpacity'),\n font: _('labelFont'),\n fontSize: _('labelFontSize'),\n fontWeight: _('labelFontWeight'),\n fontStyle: _('labelFontStyle'),\n limit: _('labelLimit'),\n lineHeight: _('labelLineHeight')\n }, {\n align: labelAlign,\n baseline: labelBaseline\n });\n const bound = _('labelBound');\n let overlap = _('labelOverlap');\n\n // if overlap method or bound defined, request label overlap removal\n overlap = overlap || bound ? {\n separation: _('labelSeparation'),\n method: overlap,\n order: 'datum.index',\n bound: bound ? {\n scale,\n orient,\n tolerance: bound\n } : null\n } : undefined;\n if (update.align !== align) {\n update.align = patch(update.align, align);\n }\n if (update.baseline !== baseline) {\n update.baseline = patch(update.baseline, baseline);\n }\n return guideMark({\n type: TextMark,\n role: AxisLabelRole,\n style: GuideLabelStyle,\n key: Value,\n from: dataRef,\n encode,\n overlap\n }, userEncode);\n}\n\nfunction axisTitle (spec, config, userEncode, dataRef) {\n const _ = lookup(spec, config),\n orient = spec.orient,\n sign = getSign(orient, -1, 1);\n let enter, update;\n const encode = {\n enter: enter = {\n opacity: zero,\n anchor: encoder(_('titleAnchor', null)),\n align: {\n signal: alignExpr$1\n }\n },\n update: update = extend({}, enter, {\n opacity: one,\n text: encoder(spec.title)\n }),\n exit: {\n opacity: zero\n }\n };\n const titlePos = {\n signal: `lerp(range(\"${spec.scale}\"), ${anchorExpr(0, 1, 0.5)})`\n };\n update.x = ifX(orient, titlePos);\n update.y = ifY(orient, titlePos);\n enter.angle = ifX(orient, zero, mult(sign, 90));\n enter.baseline = ifX(orient, ifTop(orient, Bottom, Top), {\n value: Bottom\n });\n update.angle = enter.angle;\n update.baseline = enter.baseline;\n addEncoders(encode, {\n fill: _('titleColor'),\n fillOpacity: _('titleOpacity'),\n font: _('titleFont'),\n fontSize: _('titleFontSize'),\n fontStyle: _('titleFontStyle'),\n fontWeight: _('titleFontWeight'),\n limit: _('titleLimit'),\n lineHeight: _('titleLineHeight')\n }, {\n // require update\n align: _('titleAlign'),\n angle: _('titleAngle'),\n baseline: _('titleBaseline')\n });\n autoLayout(_, orient, encode, userEncode);\n encode.update.align = patch(encode.update.align, enter.align);\n encode.update.angle = patch(encode.update.angle, enter.angle);\n encode.update.baseline = patch(encode.update.baseline, enter.baseline);\n return guideMark({\n type: TextMark,\n role: AxisTitleRole,\n style: GuideTitleStyle,\n from: dataRef,\n encode\n }, userEncode);\n}\nfunction autoLayout(_, orient, encode, userEncode) {\n const auto = (value, dim) => value != null ? (encode.update[dim] = patch(encoder(value), encode.update[dim]), false) : !has(dim, userEncode) ? true : false;\n const autoY = auto(_('titleX'), 'x'),\n autoX = auto(_('titleY'), 'y');\n encode.enter.auto = autoX === autoY ? encoder(autoX) : ifX(orient, encoder(autoX), encoder(autoY));\n}\n\nfunction parseAxis (spec, scope) {\n const config = axisConfig(spec, scope),\n encode = spec.encode || {},\n axisEncode = encode.axis || {},\n name = axisEncode.name || undefined,\n interactive = axisEncode.interactive,\n style = axisEncode.style,\n _ = lookup(spec, config),\n band = tickBand(_);\n\n // single-element data source for axis group\n const datum = {\n scale: spec.scale,\n ticks: !!_('ticks'),\n labels: !!_('labels'),\n grid: !!_('grid'),\n domain: !!_('domain'),\n title: spec.title != null\n };\n const dataRef = ref(scope.add(Collect({}, [datum])));\n\n // data source for axis ticks\n const ticksRef = ref(scope.add(AxisTicks({\n scale: scope.scaleRef(spec.scale),\n extra: scope.property(band.extra),\n count: scope.objectProperty(spec.tickCount),\n values: scope.objectProperty(spec.values),\n minstep: scope.property(spec.tickMinStep),\n formatType: scope.property(spec.formatType),\n formatSpecifier: scope.property(spec.format)\n })));\n\n // generate axis marks\n const children = [];\n let size;\n\n // include axis gridlines if requested\n if (datum.grid) {\n children.push(axisGrid(spec, config, encode.grid, ticksRef, band));\n }\n\n // include axis ticks if requested\n if (datum.ticks) {\n size = _('tickSize');\n children.push(axisTicks(spec, config, encode.ticks, ticksRef, size, band));\n }\n\n // include axis labels if requested\n if (datum.labels) {\n size = datum.ticks ? size : 0;\n children.push(axisLabels(spec, config, encode.labels, ticksRef, size, band));\n }\n\n // include axis domain path if requested\n if (datum.domain) {\n children.push(axisDomain(spec, config, encode.domain, dataRef));\n }\n\n // include axis title if defined\n if (datum.title) {\n children.push(axisTitle(spec, config, encode.title, dataRef));\n }\n\n // parse axis specification\n return parseMark(guideGroup({\n role: AxisRole,\n from: dataRef,\n encode: extendEncode(buildAxisEncode(_, spec), axisEncode, Skip),\n marks: children,\n aria: _('aria'),\n description: _('description'),\n zindex: _('zindex'),\n name,\n interactive,\n style\n }), scope);\n}\nfunction buildAxisEncode(_, spec) {\n const encode = {\n enter: {},\n update: {}\n };\n addEncoders(encode, {\n orient: _('orient'),\n offset: _('offset') || 0,\n position: value(spec.position, 0),\n titlePadding: _('titlePadding'),\n minExtent: _('minExtent'),\n maxExtent: _('maxExtent'),\n range: {\n signal: `abs(span(range(\"${spec.scale}\")))`\n },\n translate: _('translate'),\n // accessibility support\n format: spec.format,\n formatType: spec.formatType\n });\n return encode;\n}\n\nfunction parseScope (spec, scope, preprocessed) {\n const signals = array(spec.signals),\n scales = array(spec.scales);\n\n // parse signal definitions, if not already preprocessed\n if (!preprocessed) signals.forEach(_ => parseSignal(_, scope));\n\n // parse cartographic projection definitions\n array(spec.projections).forEach(_ => parseProjection(_, scope));\n\n // initialize scale references\n scales.forEach(_ => initScale(_, scope));\n\n // parse data sources\n array(spec.data).forEach(_ => parseData(_, scope));\n\n // parse scale definitions\n scales.forEach(_ => parseScale(_, scope));\n\n // parse signal updates\n (preprocessed || signals).forEach(_ => parseSignalUpdates(_, scope));\n\n // parse axis definitions\n array(spec.axes).forEach(_ => parseAxis(_, scope));\n\n // parse mark definitions\n array(spec.marks).forEach(_ => parseMark(_, scope));\n\n // parse legend definitions\n array(spec.legends).forEach(_ => parseLegend(_, scope));\n\n // parse title, if defined\n if (spec.title) parseTitle(spec.title, scope);\n\n // parse collected lambda (anonymous) expressions\n scope.parseLambdas();\n return scope;\n}\n\nconst rootEncode = spec => extendEncode({\n enter: {\n x: {\n value: 0\n },\n y: {\n value: 0\n }\n },\n update: {\n width: {\n signal: 'width'\n },\n height: {\n signal: 'height'\n }\n }\n}, spec);\nfunction parseView(spec, scope) {\n const config = scope.config;\n\n // add scenegraph root\n const root = ref(scope.root = scope.add(operator()));\n\n // parse top-level signal definitions\n const signals = collectSignals(spec, config);\n signals.forEach(_ => parseSignal(_, scope));\n\n // assign description, event, legend, and locale configuration\n scope.description = spec.description || config.description;\n scope.eventConfig = config.events;\n scope.legends = scope.objectProperty(config.legend && config.legend.layout);\n scope.locale = config.locale;\n\n // store root group item\n const input = scope.add(Collect());\n\n // encode root group item\n const encode = scope.add(Encode(parseEncode(rootEncode(spec.encode), GroupMark, FrameRole, spec.style, scope, {\n pulse: ref(input)\n })));\n\n // perform view layout\n const parent = scope.add(ViewLayout({\n layout: scope.objectProperty(spec.layout),\n legends: scope.legends,\n autosize: scope.signalRef('autosize'),\n mark: root,\n pulse: ref(encode)\n }));\n scope.operators.pop();\n\n // parse remainder of specification\n scope.pushState(ref(encode), ref(parent), null);\n parseScope(spec, scope, signals);\n scope.operators.push(parent);\n\n // bound / render / sieve root item\n let op = scope.add(Bound({\n mark: root,\n pulse: ref(parent)\n }));\n op = scope.add(Render({\n pulse: ref(op)\n }));\n op = scope.add(Sieve({\n pulse: ref(op)\n }));\n\n // track metadata for root item\n scope.addData('root', new DataScope(scope, input, input, op));\n return scope;\n}\nfunction signalObject(name, value) {\n return value && value.signal ? {\n name,\n update: value.signal\n } : {\n name,\n value\n };\n}\n\n/**\n * Collect top-level signals, merging values as needed. Signals\n * defined in the config signals arrays are added only if that\n * signal is not explicitly defined in the specification.\n * Built-in signals (autosize, background, padding, width, height)\n * receive special treatment. They are initialized using the\n * top-level spec property, or, if undefined in the spec, using\n * the corresponding top-level config property. If this property\n * is a signal reference object, the signal expression maps to the\n * signal 'update' property. If the spec's top-level signal array\n * contains an entry that matches a built-in signal, that entry\n * will be merged with the built-in specification, potentially\n * overwriting existing 'value' or 'update' properties.\n */\nfunction collectSignals(spec, config) {\n const _ = name => value(spec[name], config[name]),\n signals = [signalObject('background', _('background')), signalObject('autosize', parseAutosize(_('autosize'))), signalObject('padding', parsePadding(_('padding'))), signalObject('width', _('width') || 0), signalObject('height', _('height') || 0)],\n pre = signals.reduce((p, s) => (p[s.name] = s, p), {}),\n map = {};\n\n // add spec signal array\n array(spec.signals).forEach(s => {\n if (hasOwnProperty(pre, s.name)) {\n // merge if built-in signal\n s = extend(pre[s.name], s);\n } else {\n // otherwise add to signal list\n signals.push(s);\n }\n map[s.name] = s;\n });\n\n // add config signal array\n array(config.signals).forEach(s => {\n if (!hasOwnProperty(map, s.name) && !hasOwnProperty(pre, s.name)) {\n // add to signal list if not already defined\n signals.push(s);\n }\n });\n return signals;\n}\n\nfunction Scope(config, options) {\n this.config = config || {};\n this.options = options || {};\n this.bindings = [];\n this.field = {};\n this.signals = {};\n this.lambdas = {};\n this.scales = {};\n this.events = {};\n this.data = {};\n this.streams = [];\n this.updates = [];\n this.operators = [];\n this.eventConfig = null;\n this.locale = null;\n this._id = 0;\n this._subid = 0;\n this._nextsub = [0];\n this._parent = [];\n this._encode = [];\n this._lookup = [];\n this._markpath = [];\n}\nfunction Subscope(scope) {\n this.config = scope.config;\n this.options = scope.options;\n this.legends = scope.legends;\n this.field = Object.create(scope.field);\n this.signals = Object.create(scope.signals);\n this.lambdas = Object.create(scope.lambdas);\n this.scales = Object.create(scope.scales);\n this.events = Object.create(scope.events);\n this.data = Object.create(scope.data);\n this.streams = [];\n this.updates = [];\n this.operators = [];\n this._id = 0;\n this._subid = ++scope._nextsub[0];\n this._nextsub = scope._nextsub;\n this._parent = scope._parent.slice();\n this._encode = scope._encode.slice();\n this._lookup = scope._lookup.slice();\n this._markpath = scope._markpath;\n}\nScope.prototype = Subscope.prototype = {\n parse(spec) {\n return parseScope(spec, this);\n },\n fork() {\n return new Subscope(this);\n },\n isSubscope() {\n return this._subid > 0;\n },\n toRuntime() {\n this.finish();\n return {\n description: this.description,\n operators: this.operators,\n streams: this.streams,\n updates: this.updates,\n bindings: this.bindings,\n eventConfig: this.eventConfig,\n locale: this.locale\n };\n },\n id() {\n return (this._subid ? this._subid + ':' : 0) + this._id++;\n },\n add(op) {\n this.operators.push(op);\n op.id = this.id();\n // if pre-registration references exist, resolve them now\n if (op.refs) {\n op.refs.forEach(ref => {\n ref.$ref = op.id;\n });\n op.refs = null;\n }\n return op;\n },\n proxy(op) {\n const vref = op instanceof Entry ? ref(op) : op;\n return this.add(Proxy({\n value: vref\n }));\n },\n addStream(stream) {\n this.streams.push(stream);\n stream.id = this.id();\n return stream;\n },\n addUpdate(update) {\n this.updates.push(update);\n return update;\n },\n // Apply metadata\n finish() {\n let name, ds;\n\n // annotate root\n if (this.root) this.root.root = true;\n\n // annotate signals\n for (name in this.signals) {\n this.signals[name].signal = name;\n }\n\n // annotate scales\n for (name in this.scales) {\n this.scales[name].scale = name;\n }\n\n // annotate data sets\n function annotate(op, name, type) {\n let data, list;\n if (op) {\n data = op.data || (op.data = {});\n list = data[name] || (data[name] = []);\n list.push(type);\n }\n }\n for (name in this.data) {\n ds = this.data[name];\n annotate(ds.input, name, 'input');\n annotate(ds.output, name, 'output');\n annotate(ds.values, name, 'values');\n for (const field in ds.index) {\n annotate(ds.index[field], name, 'index:' + field);\n }\n }\n return this;\n },\n // ----\n\n pushState(encode, parent, lookup) {\n this._encode.push(ref(this.add(Sieve({\n pulse: encode\n }))));\n this._parent.push(parent);\n this._lookup.push(lookup ? ref(this.proxy(lookup)) : null);\n this._markpath.push(-1);\n },\n popState() {\n this._encode.pop();\n this._parent.pop();\n this._lookup.pop();\n this._markpath.pop();\n },\n parent() {\n return peek(this._parent);\n },\n encode() {\n return peek(this._encode);\n },\n lookup() {\n return peek(this._lookup);\n },\n markpath() {\n const p = this._markpath;\n return ++p[p.length - 1];\n },\n // ----\n\n fieldRef(field, name) {\n if (isString(field)) return fieldRef$1(field, name);\n if (!field.signal) {\n error('Unsupported field reference: ' + stringValue(field));\n }\n const s = field.signal;\n let f = this.field[s];\n if (!f) {\n const params = {\n name: this.signalRef(s)\n };\n if (name) params.as = name;\n this.field[s] = f = ref(this.add(Field(params)));\n }\n return f;\n },\n compareRef(cmp) {\n let signal = false;\n const check = _ => isSignal(_) ? (signal = true, this.signalRef(_.signal)) : isExpr$1(_) ? (signal = true, this.exprRef(_.expr)) : _;\n const fields = array(cmp.field).map(check),\n orders = array(cmp.order).map(check);\n return signal ? ref(this.add(Compare({\n fields: fields,\n orders: orders\n }))) : compareRef(fields, orders);\n },\n keyRef(fields, flat) {\n let signal = false;\n const check = _ => isSignal(_) ? (signal = true, ref(sig[_.signal])) : _;\n const sig = this.signals;\n fields = array(fields).map(check);\n return signal ? ref(this.add(Key({\n fields: fields,\n flat: flat\n }))) : keyRef(fields, flat);\n },\n sortRef(sort) {\n if (!sort) return sort;\n\n // including id ensures stable sorting\n const a = aggrField(sort.op, sort.field),\n o = sort.order || Ascending;\n return o.signal ? ref(this.add(Compare({\n fields: a,\n orders: this.signalRef(o.signal)\n }))) : compareRef(a, o);\n },\n // ----\n\n event(source, type) {\n const key = source + ':' + type;\n if (!this.events[key]) {\n const id = this.id();\n this.streams.push({\n id: id,\n source: source,\n type: type\n });\n this.events[key] = id;\n }\n return this.events[key];\n },\n // ----\n\n hasOwnSignal(name) {\n return hasOwnProperty(this.signals, name);\n },\n addSignal(name, value) {\n if (this.hasOwnSignal(name)) {\n error('Duplicate signal name: ' + stringValue(name));\n }\n const op = value instanceof Entry ? value : this.add(operator(value));\n return this.signals[name] = op;\n },\n getSignal(name) {\n if (!this.signals[name]) {\n error('Unrecognized signal name: ' + stringValue(name));\n }\n return this.signals[name];\n },\n signalRef(s) {\n if (this.signals[s]) {\n return ref(this.signals[s]);\n } else if (!hasOwnProperty(this.lambdas, s)) {\n this.lambdas[s] = this.add(operator(null));\n }\n return ref(this.lambdas[s]);\n },\n parseLambdas() {\n const code = Object.keys(this.lambdas);\n for (let i = 0, n = code.length; i < n; ++i) {\n const s = code[i],\n e = parseExpression(s, this),\n op = this.lambdas[s];\n op.params = e.$params;\n op.update = e.$expr;\n }\n },\n property(spec) {\n return spec && spec.signal ? this.signalRef(spec.signal) : spec;\n },\n objectProperty(spec) {\n return !spec || !isObject(spec) ? spec : this.signalRef(spec.signal || propertyLambda(spec));\n },\n exprRef(code, name) {\n const params = {\n expr: parseExpression(code, this)\n };\n if (name) params.expr.$name = name;\n return ref(this.add(Expression(params)));\n },\n addBinding(name, bind) {\n if (!this.bindings) {\n error('Nested signals do not support binding: ' + stringValue(name));\n }\n this.bindings.push(extend({\n signal: name\n }, bind));\n },\n // ----\n\n addScaleProj(name, transform) {\n if (hasOwnProperty(this.scales, name)) {\n error('Duplicate scale or projection name: ' + stringValue(name));\n }\n this.scales[name] = this.add(transform);\n },\n addScale(name, params) {\n this.addScaleProj(name, Scale(params));\n },\n addProjection(name, params) {\n this.addScaleProj(name, Projection(params));\n },\n getScale(name) {\n if (!this.scales[name]) {\n error('Unrecognized scale name: ' + stringValue(name));\n }\n return this.scales[name];\n },\n scaleRef(name) {\n return ref(this.getScale(name));\n },\n scaleType(name) {\n return this.getScale(name).params.type;\n },\n projectionRef(name) {\n return this.scaleRef(name);\n },\n projectionType(name) {\n return this.scaleType(name);\n },\n // ----\n\n addData(name, dataScope) {\n if (hasOwnProperty(this.data, name)) {\n error('Duplicate data set name: ' + stringValue(name));\n }\n return this.data[name] = dataScope;\n },\n getData(name) {\n if (!this.data[name]) {\n error('Undefined data set name: ' + stringValue(name));\n }\n return this.data[name];\n },\n addDataPipeline(name, entries) {\n if (hasOwnProperty(this.data, name)) {\n error('Duplicate data set name: ' + stringValue(name));\n }\n return this.addData(name, DataScope.fromEntries(this, entries));\n }\n};\nfunction propertyLambda(spec) {\n return (isArray(spec) ? arrayLambda : objectLambda)(spec);\n}\nfunction arrayLambda(array) {\n const n = array.length;\n let code = '[';\n for (let i = 0; i < n; ++i) {\n const value = array[i];\n code += (i > 0 ? ',' : '') + (isObject(value) ? value.signal || propertyLambda(value) : stringValue(value));\n }\n return code + ']';\n}\nfunction objectLambda(obj) {\n let code = '{',\n i = 0,\n key,\n value;\n for (key in obj) {\n value = obj[key];\n code += (++i > 1 ? ',' : '') + stringValue(key) + ':' + (isObject(value) ? value.signal || propertyLambda(value) : stringValue(value));\n }\n return code + '}';\n}\n\n/**\n * Standard configuration defaults for Vega specification parsing.\n * Users can provide their own (sub-)set of these default values\n * by passing in a config object to the top-level parse method.\n */\nfunction defaults () {\n const defaultFont = 'sans-serif',\n defaultSymbolSize = 30,\n defaultStrokeWidth = 2,\n defaultColor = '#4c78a8',\n black = '#000',\n gray = '#888',\n lightGray = '#ddd';\n return {\n // default visualization description\n description: 'Vega visualization',\n // default padding around visualization\n padding: 0,\n // default for automatic sizing; options: 'none', 'pad', 'fit'\n // or provide an object (e.g., {'type': 'pad', 'resize': true})\n autosize: 'pad',\n // default view background color\n // covers the entire view component\n background: null,\n // default event handling configuration\n // preventDefault for view-sourced event types except 'wheel'\n events: {\n defaults: {\n allow: ['wheel']\n }\n },\n // defaults for top-level group marks\n // accepts mark properties (fill, stroke, etc)\n // covers the data rectangle within group width/height\n group: null,\n // defaults for basic mark types\n // each subset accepts mark properties (fill, stroke, etc)\n mark: null,\n arc: {\n fill: defaultColor\n },\n area: {\n fill: defaultColor\n },\n image: null,\n line: {\n stroke: defaultColor,\n strokeWidth: defaultStrokeWidth\n },\n path: {\n stroke: defaultColor\n },\n rect: {\n fill: defaultColor\n },\n rule: {\n stroke: black\n },\n shape: {\n stroke: defaultColor\n },\n symbol: {\n fill: defaultColor,\n size: 64\n },\n text: {\n fill: black,\n font: defaultFont,\n fontSize: 11\n },\n trail: {\n fill: defaultColor,\n size: defaultStrokeWidth\n },\n // style definitions\n style: {\n // axis & legend labels\n 'guide-label': {\n fill: black,\n font: defaultFont,\n fontSize: 10\n },\n // axis & legend titles\n 'guide-title': {\n fill: black,\n font: defaultFont,\n fontSize: 11,\n fontWeight: 'bold'\n },\n // headers, including chart title\n 'group-title': {\n fill: black,\n font: defaultFont,\n fontSize: 13,\n fontWeight: 'bold'\n },\n // chart subtitle\n 'group-subtitle': {\n fill: black,\n font: defaultFont,\n fontSize: 12\n },\n // defaults for styled point marks in Vega-Lite\n point: {\n size: defaultSymbolSize,\n strokeWidth: defaultStrokeWidth,\n shape: 'circle'\n },\n circle: {\n size: defaultSymbolSize,\n strokeWidth: defaultStrokeWidth\n },\n square: {\n size: defaultSymbolSize,\n strokeWidth: defaultStrokeWidth,\n shape: 'square'\n },\n // defaults for styled group marks in Vega-Lite\n cell: {\n fill: 'transparent',\n stroke: lightGray\n },\n view: {\n fill: 'transparent'\n }\n },\n // defaults for title\n title: {\n orient: 'top',\n anchor: 'middle',\n offset: 4,\n subtitlePadding: 3\n },\n // defaults for axes\n axis: {\n minExtent: 0,\n maxExtent: 200,\n bandPosition: 0.5,\n domain: true,\n domainWidth: 1,\n domainColor: gray,\n grid: false,\n gridWidth: 1,\n gridColor: lightGray,\n labels: true,\n labelAngle: 0,\n labelLimit: 180,\n labelOffset: 0,\n labelPadding: 2,\n ticks: true,\n tickColor: gray,\n tickOffset: 0,\n tickRound: true,\n tickSize: 5,\n tickWidth: 1,\n titlePadding: 4\n },\n // correction for centering bias\n axisBand: {\n tickOffset: -0.5\n },\n // defaults for cartographic projection\n projection: {\n type: 'mercator'\n },\n // defaults for legends\n legend: {\n orient: 'right',\n padding: 0,\n gridAlign: 'each',\n columnPadding: 10,\n rowPadding: 2,\n symbolDirection: 'vertical',\n gradientDirection: 'vertical',\n gradientLength: 200,\n gradientThickness: 16,\n gradientStrokeColor: lightGray,\n gradientStrokeWidth: 0,\n gradientLabelOffset: 2,\n labelAlign: 'left',\n labelBaseline: 'middle',\n labelLimit: 160,\n labelOffset: 4,\n labelOverlap: true,\n symbolLimit: 30,\n symbolType: 'circle',\n symbolSize: 100,\n symbolOffset: 0,\n symbolStrokeWidth: 1.5,\n symbolBaseFillColor: 'transparent',\n symbolBaseStrokeColor: gray,\n titleLimit: 180,\n titleOrient: 'top',\n titlePadding: 5,\n layout: {\n offset: 18,\n direction: 'horizontal',\n left: {\n direction: 'vertical'\n },\n right: {\n direction: 'vertical'\n }\n }\n },\n // defaults for scale ranges\n range: {\n category: {\n scheme: 'tableau10'\n },\n ordinal: {\n scheme: 'blues'\n },\n heatmap: {\n scheme: 'yellowgreenblue'\n },\n ramp: {\n scheme: 'blues'\n },\n diverging: {\n scheme: 'blueorange',\n extent: [1, 0]\n },\n symbol: ['circle', 'square', 'triangle-up', 'cross', 'diamond', 'triangle-right', 'triangle-down', 'triangle-left']\n }\n };\n}\n\nfunction parse (spec, config, options) {\n if (!isObject(spec)) {\n error('Input Vega specification must be an object.');\n }\n config = mergeConfig(defaults(), config, spec.config);\n return parseView(spec, new Scope(config, options)).toRuntime();\n}\n\nexport { AxisDomainRole, AxisGridRole, AxisLabelRole, AxisRole, AxisTickRole, AxisTitleRole, DataScope, FrameRole, LegendEntryRole, LegendLabelRole, LegendRole, LegendSymbolRole, LegendTitleRole, MarkRole, Scope, ScopeRole, defaults as config, parse, parseSignal as signal, parseSignalUpdates as signalUpdates, parseStream as stream };\n", "function adjustSpatial (item, encode, swap) {\n let t;\n if (encode.x2) {\n if (encode.x) {\n if (swap && item.x > item.x2) {\n t = item.x;\n item.x = item.x2;\n item.x2 = t;\n }\n item.width = item.x2 - item.x;\n } else {\n item.x = item.x2 - (item.width || 0);\n }\n }\n if (encode.xc) {\n item.x = item.xc - (item.width || 0) / 2;\n }\n if (encode.y2) {\n if (encode.y) {\n if (swap && item.y > item.y2) {\n t = item.y;\n item.y = item.y2;\n item.y2 = t;\n }\n item.height = item.y2 - item.y;\n } else {\n item.y = item.y2 - (item.height || 0);\n }\n }\n if (encode.yc) {\n item.y = item.yc - (item.height || 0) / 2;\n }\n}\n\nvar Constants = {\n NaN: NaN,\n E: Math.E,\n LN2: Math.LN2,\n LN10: Math.LN10,\n LOG2E: Math.LOG2E,\n LOG10E: Math.LOG10E,\n PI: Math.PI,\n SQRT1_2: Math.SQRT1_2,\n SQRT2: Math.SQRT2,\n MIN_VALUE: Number.MIN_VALUE,\n MAX_VALUE: Number.MAX_VALUE\n};\n\nvar Ops = {\n '*': (a, b) => a * b,\n '+': (a, b) => a + b,\n '-': (a, b) => a - b,\n '/': (a, b) => a / b,\n '%': (a, b) => a % b,\n '>': (a, b) => a > b,\n '<': (a, b) => a < b,\n '<=': (a, b) => a <= b,\n '>=': (a, b) => a >= b,\n '==': (a, b) => a == b,\n '!=': (a, b) => a != b,\n '===': (a, b) => a === b,\n '!==': (a, b) => a !== b,\n '&': (a, b) => a & b,\n '|': (a, b) => a | b,\n '^': (a, b) => a ^ b,\n '<<': (a, b) => a << b,\n '>>': (a, b) => a >> b,\n '>>>': (a, b) => a >>> b\n};\n\nvar Unary = {\n '+': a => +a,\n '-': a => -a,\n '~': a => ~a,\n '!': a => !a\n};\n\nconst slice = Array.prototype.slice;\nconst apply = (m, args, cast) => {\n const obj = cast ? cast(args[0]) : args[0];\n return obj[m].apply(obj, slice.call(args, 1));\n};\nconst datetime = (y, m, d, H, M, S, ms) => new Date(y, m || 0, d != null ? d : 1, H || 0, M || 0, S || 0, ms || 0);\nvar Functions = {\n // math functions\n isNaN: Number.isNaN,\n isFinite: Number.isFinite,\n abs: Math.abs,\n acos: Math.acos,\n asin: Math.asin,\n atan: Math.atan,\n atan2: Math.atan2,\n ceil: Math.ceil,\n cos: Math.cos,\n exp: Math.exp,\n floor: Math.floor,\n log: Math.log,\n max: Math.max,\n min: Math.min,\n pow: Math.pow,\n random: Math.random,\n round: Math.round,\n sin: Math.sin,\n sqrt: Math.sqrt,\n tan: Math.tan,\n clamp: (a, b, c) => Math.max(b, Math.min(c, a)),\n // date functions\n now: Date.now,\n utc: Date.UTC,\n datetime: datetime,\n date: d => new Date(d).getDate(),\n day: d => new Date(d).getDay(),\n year: d => new Date(d).getFullYear(),\n month: d => new Date(d).getMonth(),\n hours: d => new Date(d).getHours(),\n minutes: d => new Date(d).getMinutes(),\n seconds: d => new Date(d).getSeconds(),\n milliseconds: d => new Date(d).getMilliseconds(),\n time: d => new Date(d).getTime(),\n timezoneoffset: d => new Date(d).getTimezoneOffset(),\n utcdate: d => new Date(d).getUTCDate(),\n utcday: d => new Date(d).getUTCDay(),\n utcyear: d => new Date(d).getUTCFullYear(),\n utcmonth: d => new Date(d).getUTCMonth(),\n utchours: d => new Date(d).getUTCHours(),\n utcminutes: d => new Date(d).getUTCMinutes(),\n utcseconds: d => new Date(d).getUTCSeconds(),\n utcmilliseconds: d => new Date(d).getUTCMilliseconds(),\n // sequence functions\n length: x => x.length,\n join: function () {\n return apply('join', arguments);\n },\n indexof: function () {\n return apply('indexOf', arguments);\n },\n lastindexof: function () {\n return apply('lastIndexOf', arguments);\n },\n slice: function () {\n return apply('slice', arguments);\n },\n reverse: x => x.slice().reverse(),\n // string functions\n parseFloat: parseFloat,\n parseInt: parseInt,\n upper: x => String(x).toUpperCase(),\n lower: x => String(x).toLowerCase(),\n substring: function () {\n return apply('substring', arguments, String);\n },\n split: function () {\n return apply('split', arguments, String);\n },\n replace: function () {\n return apply('replace', arguments, String);\n },\n trim: x => String(x).trim(),\n // regexp functions\n regexp: RegExp,\n test: (r, t) => RegExp(r).test(t)\n};\n\nconst EventFunctions = ['view', 'item', 'group', 'xy', 'x', 'y'];\nconst DisallowedMethods = new Set([Function, eval, setTimeout, setInterval]);\nif (typeof setImmediate === 'function') DisallowedMethods.add(setImmediate);\nconst Visitors = {\n Literal: ($, n) => n.value,\n Identifier: ($, n) => {\n const id = n.name;\n return $.memberDepth > 0 ? id : id === 'datum' ? $.datum : id === 'event' ? $.event : id === 'item' ? $.item : Constants[id] || $.params['$' + id];\n },\n MemberExpression: ($, n) => {\n const d = !n.computed,\n o = $(n.object);\n if (d) $.memberDepth += 1;\n const p = $(n.property);\n if (d) $.memberDepth -= 1;\n if (DisallowedMethods.has(o[p])) {\n // eslint-disable-next-line no-console\n console.error(`Prevented interpretation of member \"${p}\" which could lead to insecure code execution`);\n return;\n }\n return o[p];\n },\n CallExpression: ($, n) => {\n const args = n.arguments;\n let name = n.callee.name;\n\n // handle special internal functions used by encoders\n // re-route to corresponding standard function\n if (name.startsWith('_')) {\n name = name.slice(1);\n }\n\n // special case \"if\" due to conditional evaluation of branches\n return name === 'if' ? $(args[0]) ? $(args[1]) : $(args[2]) : ($.fn[name] || Functions[name]).apply($.fn, args.map($));\n },\n ArrayExpression: ($, n) => n.elements.map($),\n BinaryExpression: ($, n) => Ops[n.operator]($(n.left), $(n.right)),\n UnaryExpression: ($, n) => Unary[n.operator]($(n.argument)),\n ConditionalExpression: ($, n) => $(n.test) ? $(n.consequent) : $(n.alternate),\n LogicalExpression: ($, n) => n.operator === '&&' ? $(n.left) && $(n.right) : $(n.left) || $(n.right),\n ObjectExpression: ($, n) => n.properties.reduce((o, p) => {\n $.memberDepth += 1;\n const k = $(p.key);\n $.memberDepth -= 1;\n if (DisallowedMethods.has($(p.value))) {\n // eslint-disable-next-line no-console\n console.error(`Prevented interpretation of property \"${k}\" which could lead to insecure code execution`);\n } else {\n o[k] = $(p.value);\n }\n return o;\n }, {})\n};\nfunction interpret (ast, fn, params, datum, event, item) {\n const $ = n => Visitors[n.type]($, n);\n $.memberDepth = 0;\n $.fn = Object.create(fn);\n $.params = params;\n $.datum = datum;\n $.event = event;\n $.item = item;\n\n // route event functions to annotated vega event context\n EventFunctions.forEach(f => $.fn[f] = function () {\n return event.vega[f](...arguments);\n });\n return $(ast);\n}\n\nvar expression = {\n /**\n * Parse an expression used to update an operator value.\n */\n operator(ctx, expr) {\n const ast = expr.ast,\n fn = ctx.functions;\n return _ => interpret(ast, fn, _);\n },\n /**\n * Parse an expression provided as an operator parameter value.\n */\n parameter(ctx, expr) {\n const ast = expr.ast,\n fn = ctx.functions;\n return (datum, _) => interpret(ast, fn, _, datum);\n },\n /**\n * Parse an expression applied to an event stream.\n */\n event(ctx, expr) {\n const ast = expr.ast,\n fn = ctx.functions;\n return event => interpret(ast, fn, undefined, undefined, event);\n },\n /**\n * Parse an expression used to handle an event-driven operator update.\n */\n handler(ctx, expr) {\n const ast = expr.ast,\n fn = ctx.functions;\n return (_, event) => {\n const datum = event.item && event.item.datum;\n return interpret(ast, fn, _, datum, event);\n };\n },\n /**\n * Parse an expression that performs visual encoding.\n */\n encode(ctx, encode) {\n const {\n marktype,\n channels\n } = encode,\n fn = ctx.functions,\n swap = marktype === 'group' || marktype === 'image' || marktype === 'rect';\n return (item, _) => {\n const datum = item.datum;\n let m = 0,\n v;\n for (const name in channels) {\n v = interpret(channels[name].ast, fn, _, datum, undefined, item);\n if (item[name] !== v) {\n item[name] = v;\n m = 1;\n }\n }\n if (marktype !== 'rule') {\n adjustSpatial(item, channels, swap);\n }\n return m;\n };\n }\n};\n\nexport { expression as expressionInterpreter };\n", "import pkg from '../package.json';\nexport const version = pkg.version;\n\nexport {compile} from './compile/compile';\nexport type {Config} from './config';\nexport {normalize} from './normalize';\nexport type {TopLevelSpec} from './spec';\nexport * from './util';\n", "{\n \"name\": \"vega-lite\",\n \"author\": \"Dominik Moritz, Kanit \\\"Ham\\\" Wongsuphasawat, Arvind Satyanarayan, Jeffrey Heer\",\n \"version\": \"5.23.0\",\n \"collaborators\": [\n \"Kanit Wongsuphasawat (http://kanitw.yellowpigz.com)\",\n \"Dominik Moritz (https://www.domoritz.de)\",\n \"Arvind Satyanarayan (https://arvindsatya.com)\",\n \"Jeffrey Heer (https://jheer.org)\"\n ],\n \"homepage\": \"https://vega.github.io/vega-lite/\",\n \"description\": \"Vega-Lite is a concise high-level language for interactive visualization.\",\n \"keywords\": [\n \"vega\",\n \"chart\",\n \"visualization\"\n ],\n \"main\": \"build/vega-lite.js\",\n \"unpkg\": \"build/vega-lite.min.js\",\n \"jsdelivr\": \"build/vega-lite.min.js\",\n \"module\": \"build/src/index\",\n \"types\": \"build/src/index.d.ts\",\n \"bin\": {\n \"vl2pdf\": \"./bin/vl2pdf\",\n \"vl2png\": \"./bin/vl2png\",\n \"vl2svg\": \"./bin/vl2svg\",\n \"vl2vg\": \"./bin/vl2vg\"\n },\n \"files\": [\n \"bin\",\n \"build\",\n \"src\",\n \"vega-lite*\",\n \"tsconfig.json\"\n ],\n \"scripts\": {\n \"changelog\": \"conventional-changelog -p angular -r 2\",\n \"prebuild\": \"yarn clean:build\",\n \"build\": \"yarn build:only\",\n \"build:only\": \"tsc -p tsconfig.build.json && rollup -c\",\n \"prebuild:examples\": \"yarn build:only\",\n \"build:examples\": \"yarn data && TZ=America/Los_Angeles scripts/build-examples.sh\",\n \"prebuild:examples-full\": \"yarn build:only\",\n \"build:examples-full\": \"TZ=America/Los_Angeles scripts/build-examples.sh 1\",\n \"build:example\": \"TZ=America/Los_Angeles scripts/build-example.sh\",\n \"build:toc\": \"yarn build:jekyll && scripts/generate-toc\",\n \"build:site\": \"rollup -c site/rollup.config.mjs\",\n \"build:jekyll\": \"pushd site && bundle exec jekyll build -q && popd\",\n \"build:versions\": \"scripts/update-version.sh\",\n \"clean\": \"yarn clean:build && del-cli 'site/data/*' 'examples/compiled/*.png' && find site/examples ! -name 'index.md' ! -name 'data' -type f -delete\",\n \"clean:build\": \"del-cli 'build/*' !build/vega-lite-schema.json\",\n \"data\": \"rsync -r node_modules/vega-datasets/data/* site/data\",\n \"build-editor-preview\": \"scripts/build-editor-preview.sh\",\n \"schema\": \"mkdir -p build && ts-json-schema-generator -f tsconfig.json -p src/index.ts -t TopLevelSpec --no-type-check --no-ref-encode > build/vega-lite-schema.json && yarn renameschema && cp build/vega-lite-schema.json site/_data/\",\n \"renameschema\": \"scripts/rename-schema.sh\",\n \"presite\": \"yarn data && yarn schema && yarn build:site && yarn build:versions && scripts/create-example-pages.sh\",\n \"site\": \"yarn site:only\",\n \"site:only\": \"pushd site && bundle exec jekyll serve -I -l && popd\",\n \"prettierbase\": \"prettier '**/*.{md,css,yml}'\",\n \"format\": \"eslint . --fix && yarn prettierbase --write\",\n \"lint\": \"eslint . && yarn prettierbase --check\",\n \"test\": \"yarn jest test/ && yarn lint && yarn schema && yarn jest examples/ && yarn test:runtime\",\n \"test:cover\": \"yarn jest --collectCoverage test/\",\n \"test:inspect\": \"node --inspect-brk ./node_modules/.bin/jest --runInBand test\",\n \"test:runtime\": \"TZ=America/Los_Angeles npx jest test-runtime/ --config test-runtime/jest-config.json\",\n \"test:runtime:generate\": \"yarn build:only && del-cli test-runtime/resources && VL_GENERATE_TESTS=true yarn test:runtime\",\n \"watch\": \"tsc -p tsconfig.build.json -w\",\n \"watch:site\": \"yarn build:site -w\",\n \"watch:test\": \"yarn jest --watch test/\",\n \"watch:test:runtime\": \"TZ=America/Los_Angeles npx jest --watch test-runtime/ --config test-runtime/jest-config.json\",\n \"release\": \"release-it\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/vega/vega-lite.git\"\n },\n \"license\": \"BSD-3-Clause\",\n \"bugs\": {\n \"url\": \"https://github.com/vega/vega-lite/issues\"\n },\n \"devDependencies\": {\n \"@babel/core\": \"^7.26.0\",\n \"@babel/preset-env\": \"^7.26.0\",\n \"@babel/preset-typescript\": \"^7.26.0\",\n \"@release-it/conventional-changelog\": \"^9.0.3\",\n \"@rollup/plugin-alias\": \"^5.1.1\",\n \"@rollup/plugin-babel\": \"^6.0.4\",\n \"@rollup/plugin-commonjs\": \"^28.0.1\",\n \"@rollup/plugin-json\": \"^6.1.0\",\n \"@rollup/plugin-node-resolve\": \"^15.3.0\",\n \"@rollup/plugin-terser\": \"^0.4.4\",\n \"@types/d3\": \"^7.4.3\",\n \"@types/jest\": \"^29.5.14\",\n \"@types/pako\": \"^2.0.3\",\n \"@typescript-eslint/eslint-plugin\": \"^7.17.0\",\n \"@typescript-eslint/parser\": \"^7.17.0\",\n \"ajv\": \"^8.17.1\",\n \"ajv-formats\": \"^3.0.1\",\n \"cheerio\": \"^1.0.0\",\n \"conventional-changelog-cli\": \"^5.0.0\",\n \"d3\": \"^7.9.0\",\n \"del-cli\": \"^6.0.0\",\n \"eslint\": \"^8.57.0\",\n \"eslint-config-prettier\": \"^9.1.0\",\n \"eslint-plugin-jest\": \"^27.9.0\",\n \"eslint-plugin-prettier\": \"^5.2.1\",\n \"fast-json-stable-stringify\": \"~2.1.0\",\n \"highlight.js\": \"^11.10.0\",\n \"jest\": \"^29.7.0\",\n \"jest-dev-server\": \"^10.1.4\",\n \"mkdirp\": \"^3.0.1\",\n \"pako\": \"^2.1.0\",\n \"prettier\": \"^3.3.3\",\n \"puppeteer\": \"^15.0.0\",\n \"release-it\": \"17.10.0\",\n \"rollup\": \"^4.27.3\",\n \"rollup-plugin-bundle-size\": \"^1.0.3\",\n \"serve\": \"^14.2.4\",\n \"terser\": \"^5.36.0\",\n \"ts-jest\": \"^29.2.5\",\n \"ts-json-schema-generator\": \"^2.3.0\",\n \"typescript\": \"~5.7.2\",\n \"vega-cli\": \"^5.30.0\",\n \"vega-datasets\": \"^2.11.0\",\n \"vega-embed\": \"^6.28.0\",\n \"vega-tooltip\": \"^0.35.2\",\n \"yaml-front-matter\": \"^4.1.1\"\n },\n \"dependencies\": {\n \"json-stringify-pretty-compact\": \"~4.0.0\",\n \"tslib\": \"~2.8.1\",\n \"vega-event-selector\": \"~3.0.1\",\n \"vega-expression\": \"~5.1.1\",\n \"vega-util\": \"~1.17.2\",\n \"yargs\": \"~17.7.2\"\n },\n \"peerDependencies\": {\n \"vega\": \"^5.24.0\"\n },\n \"engines\": {\n \"node\": \">=18\"\n },\n \"packageManager\": \"yarn@1.22.22\"\n}\n", "import {hasProperty} from './util';\n\nexport type LogicalComposition<T> = LogicalNot<T> | LogicalAnd<T> | LogicalOr<T> | T;\n\nexport interface LogicalOr<T> {\n or: LogicalComposition<T>[];\n}\n\nexport interface LogicalAnd<T> {\n and: LogicalComposition<T>[];\n}\n\nexport interface LogicalNot<T> {\n not: LogicalComposition<T>;\n}\n\nexport function isLogicalOr(op: LogicalComposition<any>): op is LogicalOr<any> {\n return hasProperty(op, 'or');\n}\n\nexport function isLogicalAnd(op: LogicalComposition<any>): op is LogicalAnd<any> {\n return hasProperty(op, 'and');\n}\n\nexport function isLogicalNot(op: LogicalComposition<any>): op is LogicalNot<any> {\n return hasProperty(op, 'not');\n}\n\nexport function forEachLeaf<T>(op: LogicalComposition<T>, fn: (op: T) => void) {\n if (isLogicalNot(op)) {\n forEachLeaf(op.not, fn);\n } else if (isLogicalAnd(op)) {\n for (const subop of op.and) {\n forEachLeaf(subop, fn);\n }\n } else if (isLogicalOr(op)) {\n for (const subop of op.or) {\n forEachLeaf(subop, fn);\n }\n } else {\n fn(op);\n }\n}\n\nexport function normalizeLogicalComposition<T>(\n op: LogicalComposition<T>,\n normalizer: (o: T) => T\n): LogicalComposition<T> {\n if (isLogicalNot(op)) {\n return {not: normalizeLogicalComposition(op.not, normalizer)};\n } else if (isLogicalAnd(op)) {\n return {and: op.and.map(o => normalizeLogicalComposition(o, normalizer))};\n } else if (isLogicalOr(op)) {\n return {or: op.or.map(o => normalizeLogicalComposition(o, normalizer))};\n } else {\n return normalizer(op);\n }\n}\n", "import {hasOwnProperty, isNumber, isString, splitAccessPath, stringValue, writeConfig, isObject} from 'vega-util';\nimport {isLogicalAnd, isLogicalNot, isLogicalOr, LogicalComposition} from './logical';\n\nexport const duplicate = structuredClone;\n\nexport function never(message: string): never {\n throw new Error(message);\n}\n\n/**\n * Creates an object composed of the picked object properties.\n *\n * var object = {'a': 1, 'b': '2', 'c': 3};\n * pick(object, ['a', 'c']);\n * // \u2192 {'a': 1, 'c': 3}\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function pick<T extends object, K extends keyof T>(obj: T, props: readonly K[]): Pick<T, K> {\n const copy: any = {};\n for (const prop of props) {\n if (hasOwnProperty(obj, prop)) {\n copy[prop] = obj[prop];\n }\n }\n return copy;\n}\n\n/**\n * The opposite of _.pick; this method creates an object composed of the own\n * and inherited enumerable string keyed properties of object that are not omitted.\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function omit<T extends object, K extends keyof T>(obj: T, props: readonly K[]): Omit<T, K> {\n const copy = {...(obj as any)};\n for (const prop of props) {\n delete copy[prop];\n }\n return copy;\n}\n\n/**\n * Monkey patch Set so that `stringify` produces a string representation of sets.\n */\n(Set.prototype as any)['toJSON'] = function () {\n return `Set(${[...this].map(x => stringify(x)).join(',')})`;\n};\n\n/**\n * Converts any object to a string of limited size, or a number.\n */\nexport function hash(a: any): string | number {\n if (isNumber(a)) {\n return a;\n }\n\n const str = isString(a) ? a : stringify(a);\n\n // short strings can be used as hash directly, longer strings are hashed to reduce memory usage\n if (str.length < 250) {\n return str;\n }\n\n // from http://werxltd.com/wp/2010/05/13/javascript-implementation-of-javas-string-hashcode-method/\n let h = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n h = (h << 5) - h + char;\n h = h & h; // Convert to 32bit integer\n }\n return h;\n}\n\nexport function isNullOrFalse(x: any): x is false | null {\n return x === false || x === null;\n}\n\nexport function contains<T>(array: readonly T[], item: T) {\n return array.includes(item);\n}\n\n/**\n * Returns true if any item returns true.\n */\nexport function some<T>(arr: readonly T[], f: (d: T, k?: any, i?: any) => boolean) {\n let i = 0;\n for (const [k, a] of arr.entries()) {\n if (f(a, k, i++)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Returns true if all items return true.\n */\nexport function every<T>(arr: readonly T[], f: (d: T, k?: any, i?: any) => boolean) {\n let i = 0;\n for (const [k, a] of arr.entries()) {\n if (!f(a, k, i++)) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Like TS Partial but applies recursively to all properties.\n */\nexport type DeepPartial<T> = {[P in keyof T]?: DeepPartial<T[P]>};\n\n/**\n * recursively merges src into dest\n */\nexport function mergeDeep<T>(dest: T, ...src: readonly DeepPartial<T>[]): T {\n for (const s of src) {\n deepMerge_(dest, s ?? {});\n }\n return dest;\n}\n\nfunction deepMerge_(dest: any, src: any) {\n for (const property of keys(src)) {\n writeConfig(dest, property, src[property], true);\n }\n}\n\nexport function unique<T>(values: readonly T[], f: (item: T) => string | number): T[] {\n const results: T[] = [];\n const u = {};\n let v: string | number;\n for (const val of values) {\n v = f(val);\n if (v in u) {\n continue;\n }\n (u as any)[v] = 1;\n results.push(val);\n }\n return results;\n}\n\nexport type Dict<T> = Record<string, T>;\n\n/**\n * Returns true if the two dictionaries agree. Applies only to defined values.\n */\nexport function isEqual<T>(dict: Dict<T>, other: Dict<T>) {\n const dictKeys = keys(dict);\n const otherKeys = keys(other);\n if (dictKeys.length !== otherKeys.length) {\n return false;\n }\n for (const key of dictKeys) {\n if (dict[key] !== other[key]) {\n return false;\n }\n }\n return true;\n}\n\nexport function setEqual<T>(a: Set<T>, b: Set<T>) {\n if (a.size !== b.size) {\n return false;\n }\n for (const e of a) {\n if (!b.has(e)) {\n return false;\n }\n }\n return true;\n}\n\nexport function hasIntersection<T>(a: ReadonlySet<T>, b: ReadonlySet<T>) {\n for (const key of a) {\n if (b.has(key)) {\n return true;\n }\n }\n return false;\n}\n\nexport function prefixGenerator(a: ReadonlySet<string>): ReadonlySet<string> {\n const prefixes = new Set<string>();\n for (const x of a) {\n const splitField = splitAccessPath(x);\n // Wrap every element other than the first in `[]`\n const wrappedWithAccessors = splitField.map((y, i) => (i === 0 ? y : `[${y}]`));\n const computedPrefixes = wrappedWithAccessors.map((_, i) => wrappedWithAccessors.slice(0, i + 1).join(''));\n for (const y of computedPrefixes) {\n prefixes.add(y);\n }\n }\n return prefixes;\n}\n\n/**\n * Returns true if a and b have an intersection. Also return true if a or b are undefined\n * since this means we don't know what fields a node produces or depends on.\n */\nexport function fieldIntersection(a: ReadonlySet<string>, b: ReadonlySet<string>): boolean {\n if (a === undefined || b === undefined) {\n return true;\n }\n return hasIntersection(prefixGenerator(a), prefixGenerator(b));\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function isEmpty(obj: object) {\n return keys(obj).length === 0;\n}\n\n// This is a stricter version of Object.keys but with better types. See https://github.com/Microsoft/TypeScript/pull/12253#issuecomment-263132208\nexport const keys = Object.keys as <T>(o: T) => Extract<keyof T, string>[];\n\n// Stricter version from https://github.com/microsoft/TypeScript/issues/51572#issuecomment-1319153323\nexport const vals = Object.values as <T>(obj: T) => Array<T[keyof T]>;\n\n// Stricter version from https://github.com/microsoft/TypeScript/issues/51572#issuecomment-1319153323\nexport const entries = Object.entries as <T>(obj: T) => Array<[keyof T, T[keyof T]]>;\n\n// Using mapped type to declare a collect of flags for a string literal type S\n// https://www.typescriptlang.org/docs/handbook/advanced-types.html#mapped-types\nexport type Flag<S extends string> = {[K in S]: 1};\n\nexport function isBoolean(b: any): b is boolean {\n return b === true || b === false;\n}\n\n/**\n * Convert a string into a valid variable name\n */\nexport function varName(s: string): string {\n // Replace non-alphanumeric characters (anything besides a-zA-Z0-9_) with _\n const alphanumericS = s.replace(/\\W/g, '_');\n\n // Add _ if the string has leading numbers.\n return (s.match(/^\\d+/) ? '_' : '') + alphanumericS;\n}\n\nexport function logicalExpr<T>(op: LogicalComposition<T>, cb: (...args: readonly any[]) => string): string {\n if (isLogicalNot(op)) {\n return `!(${logicalExpr(op.not, cb)})`;\n } else if (isLogicalAnd(op)) {\n return `(${op.and.map((and: LogicalComposition<T>) => logicalExpr(and, cb)).join(') && (')})`;\n } else if (isLogicalOr(op)) {\n return `(${op.or.map((or: LogicalComposition<T>) => logicalExpr(or, cb)).join(') || (')})`;\n } else {\n return cb(op);\n }\n}\n\n/**\n * Delete nested property of an object, and delete the ancestors of the property if they become empty.\n */\nexport function deleteNestedProperty(obj: any, orderedProps: string[]) {\n if (orderedProps.length === 0) {\n return true;\n }\n const prop = orderedProps.shift()!; // eslint-disable-line @typescript-eslint/no-non-null-assertion\n if (prop in obj && deleteNestedProperty(obj[prop], orderedProps)) {\n delete obj[prop];\n }\n return isEmpty(obj);\n}\n\nexport function titleCase(s: string) {\n return s.charAt(0).toUpperCase() + s.substr(1);\n}\n\n/**\n * Converts a path to an access path with datum.\n * @param path The field name.\n * @param datum The string to use for `datum`.\n */\nexport function accessPathWithDatum(path: string, datum = 'datum') {\n const pieces = splitAccessPath(path);\n const prefixes = [];\n for (let i = 1; i <= pieces.length; i++) {\n const prefix = `[${pieces.slice(0, i).map(stringValue).join('][')}]`;\n prefixes.push(`${datum}${prefix}`);\n }\n return prefixes.join(' && ');\n}\n\n/**\n * Return access with datum to the flattened field.\n *\n * @param path The field name.\n * @param datum The string to use for `datum`.\n */\nexport function flatAccessWithDatum(path: string, datum: 'datum' | 'parent' | 'datum.datum' = 'datum') {\n return `${datum}[${stringValue(splitAccessPath(path).join('.'))}]`;\n}\n\n/**\n * Return access with datum to **an unescaped path**.\n *\n * ```ts\n * console.log(accessWithDatumToUnescapedPath(\"vega's favorite\"))\n * // \"datum['vega\\\\'s favorite']\"\n * ```\n *\n * @param path The unescaped path name. E.g., `\"a.b\"`, `\"vega's favorite\"`. (Note\n * that the field defs take escaped strings like `\"a\\\\.b\"`, `\"vega\\\\'s favorite\"`,\n * but this function is for the unescaped field/path)\n */\nexport function accessWithDatumToUnescapedPath(unescapedPath: string) {\n const singleQuoteEscapedPath = unescapedPath.replaceAll(\"'\", \"\\\\'\");\n return `datum['${singleQuoteEscapedPath}']`;\n}\n\nfunction escapePathAccess(string: string) {\n return string.replace(/(\\[|\\]|\\.|'|\")/g, '\\\\$1');\n}\n\n/**\n * Replaces path accesses with access to non-nested field.\n * For example, `foo[\"bar\"].baz` becomes `foo\\\\.bar\\\\.baz`.\n */\nexport function replacePathInField(path: string) {\n return `${splitAccessPath(path).map(escapePathAccess).join('\\\\.')}`;\n}\n\n/**\n * Replace all occurrences of a string with another string.\n *\n * @param string the string to replace in\n * @param find the string to replace\n * @param replacement the replacement\n */\nexport function replaceAll(string: string, find: string, replacement: string) {\n return string.replace(new RegExp(find.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'), 'g'), replacement);\n}\n\n/**\n * Remove path accesses with access from field.\n * For example, `foo[\"bar\"].baz` becomes `foo.bar.baz`.\n */\nexport function removePathFromField(path: string) {\n return `${splitAccessPath(path).join('.')}`;\n}\n\n/**\n * Count the depth of the path. Returns 1 for fields that are not nested.\n */\nexport function accessPathDepth(path: string) {\n if (!path) {\n return 0;\n }\n return splitAccessPath(path).length;\n}\n\n/**\n * This is a replacement for chained || for numeric properties or properties that respect null so that 0 will be included.\n */\nexport function getFirstDefined<T>(...args: readonly T[]): T | undefined {\n return args.find(a => a !== undefined);\n}\n\n// variable used to generate id\nlet idCounter = 42;\n\n/**\n * Returns a new random id every time it gets called.\n *\n * Has side effect!\n */\nexport function uniqueId(prefix?: string) {\n const id = ++idCounter;\n return prefix ? String(prefix) + id : id;\n}\n\n/**\n * Resets the id counter used in uniqueId. This can be useful for testing.\n */\nexport function resetIdCounter() {\n idCounter = 42;\n}\n\nexport function internalField(name: string) {\n return isInternalField(name) ? name : `__${name}`;\n}\n\nexport function isInternalField(name: string) {\n return name.startsWith('__');\n}\n\n/**\n * Normalize angle to be within [0,360).\n */\nexport function normalizeAngle(angle: number) {\n if (angle === undefined) {\n return undefined;\n }\n return ((angle % 360) + 360) % 360;\n}\n\n/**\n * Returns whether the passed in value is a valid number.\n */\nexport function isNumeric(value: number | string): boolean {\n if (isNumber(value)) {\n return true;\n }\n return !isNaN(value as any) && !isNaN(parseFloat(value));\n}\n\nconst clonedProto = Object.getPrototypeOf(structuredClone({}));\n\n/**\n * Compares two values for equality, including arrays and objects.\n *\n * Adapted from https://github.com/epoberezkin/fast-deep-equal.\n */\nexport function deepEqual(a: any, b: any) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n // compare names to avoid issues with structured clone\n if (a.constructor.name !== b.constructor.name) return false;\n\n let length;\n let i: number;\n\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0; ) if (!deepEqual(a[i], b[i])) return false;\n return true;\n }\n\n if (a instanceof Map && b instanceof Map) {\n if (a.size !== b.size) return false;\n for (const e of a.entries()) if (!b.has(e[0])) return false;\n for (const e of a.entries()) if (!deepEqual(e[1], b.get(e[0]))) return false;\n return true;\n }\n\n if (a instanceof Set && b instanceof Set) {\n if (a.size !== b.size) return false;\n for (const e of a.entries()) if (!b.has(e[0])) return false;\n return true;\n }\n\n if (ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n length = (a as any).length;\n if (length != (b as any).length) return false;\n for (i = length; i-- !== 0; ) if ((a as any)[i] !== (b as any)[i]) return false;\n return true;\n }\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n // also compare to structured clone prototype\n if (a.valueOf !== Object.prototype.valueOf && a.valueOf !== clonedProto.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString && a.toString !== clonedProto.toString)\n return a.toString() === b.toString();\n\n const ks = Object.keys(a);\n length = ks.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0; ) if (!Object.prototype.hasOwnProperty.call(b, ks[i])) return false;\n\n for (i = length; i-- !== 0; ) {\n const key = ks[i];\n\n if (!deepEqual(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a !== a && b !== b;\n}\n\n/**\n * Converts any object to a string representation that can be consumed by humans.\n *\n * Adapted from https://github.com/epoberezkin/fast-json-stable-stringify\n */\nexport function stringify(data: any) {\n const seen: any[] = [];\n\n return (function _stringify(node: any) {\n if (node && node.toJSON && typeof node.toJSON === 'function') {\n node = node.toJSON();\n }\n\n if (node === undefined) return undefined;\n if (typeof node == 'number') return isFinite(node) ? '' + node : 'null';\n if (typeof node !== 'object') return JSON.stringify(node);\n\n let i, out;\n if (Array.isArray(node)) {\n out = '[';\n for (i = 0; i < node.length; i++) {\n if (i) out += ',';\n out += _stringify(node[i]) || 'null';\n }\n return out + ']';\n }\n\n if (node === null) return 'null';\n\n if (seen.includes(node)) {\n throw new TypeError('Converting circular structure to JSON');\n }\n\n const seenIndex = seen.push(node) - 1;\n const ks = Object.keys(node).sort();\n out = '';\n for (i = 0; i < ks.length; i++) {\n const key = ks[i];\n const value = _stringify(node[key]);\n\n if (!value) continue;\n if (out) out += ',';\n out += JSON.stringify(key) + ':' + value;\n }\n seen.splice(seenIndex, 1);\n return `{${out}}`;\n })(data);\n}\n\n/**\n * Check if the input object has the property and it's not undefined.\n *\n * @param object the object\n * @param property the property to search\n * @returns if the object has the property and it's not undefined.\n */\nexport function hasProperty<T>(obj: T, key: string | number | symbol): key is keyof T {\n return isObject(obj) && hasOwnProperty(obj, key) && (obj as any)[key] !== undefined;\n}\n", "/*\n * Constants and utilities for encoding channels (Visual variables)\n * such as 'x', 'y', 'color'.\n */\n\nimport {hasOwnProperty} from 'vega-util';\nimport {RangeType} from './compile/scale/type';\nimport {Encoding} from './encoding';\nimport {Mark} from './mark';\nimport {EncodingFacetMapping} from './spec/facet';\nimport {Flag, keys} from './util';\n\nexport type Channel = keyof Encoding<any>;\nexport type ExtendedChannel = Channel | FacetChannel;\n\n// Facet\nexport const ROW = 'row' as const;\nexport const COLUMN = 'column' as const;\n\nexport const FACET = 'facet' as const;\n\n// Position\nexport const X = 'x' as const;\nexport const Y = 'y' as const;\nexport const X2 = 'x2' as const;\nexport const Y2 = 'y2' as const;\n\n// Position Offset\nexport const XOFFSET = 'xOffset' as const;\nexport const YOFFSET = 'yOffset' as const;\n\n// Arc-Position\nexport const RADIUS = 'radius' as const;\nexport const RADIUS2 = 'radius2' as const;\nexport const THETA = 'theta' as const;\nexport const THETA2 = 'theta2' as const;\n\n// Geo Position\nexport const LATITUDE = 'latitude' as const;\nexport const LONGITUDE = 'longitude' as const;\nexport const LATITUDE2 = 'latitude2' as const;\nexport const LONGITUDE2 = 'longitude2' as const;\n\n// Time\nexport const TIME = 'time' as const;\n\n// Mark property with scale\nexport const COLOR = 'color' as const;\n\nexport const FILL = 'fill' as const;\n\nexport const STROKE = 'stroke' as const;\n\nexport const SHAPE = 'shape' as const;\nexport const SIZE = 'size' as const;\n\nexport const ANGLE = 'angle' as const;\n\nexport const OPACITY = 'opacity' as const;\nexport const FILLOPACITY = 'fillOpacity' as const;\n\nexport const STROKEOPACITY = 'strokeOpacity' as const;\n\nexport const STROKEWIDTH = 'strokeWidth' as const;\nexport const STROKEDASH = 'strokeDash' as const;\n\n// Non-scale channel\nexport const TEXT = 'text' as const;\nexport const ORDER = 'order' as const;\nexport const DETAIL = 'detail' as const;\nexport const KEY = 'key' as const;\n\nexport const TOOLTIP = 'tooltip' as const;\nexport const HREF = 'href' as const;\n\nexport const URL = 'url' as const;\nexport const DESCRIPTION = 'description' as const;\n\nconst POSITION_CHANNEL_INDEX = {\n x: 1,\n y: 1,\n x2: 1,\n y2: 1\n} as const;\n\nexport type PositionChannel = keyof typeof POSITION_CHANNEL_INDEX;\n\nconst POLAR_POSITION_CHANNEL_INDEX = {\n theta: 1,\n theta2: 1,\n radius: 1,\n radius2: 1\n} as const;\n\nexport type PolarPositionChannel = keyof typeof POLAR_POSITION_CHANNEL_INDEX;\n\nexport function isPolarPositionChannel(c: Channel): c is PolarPositionChannel {\n return hasOwnProperty(POLAR_POSITION_CHANNEL_INDEX, c);\n}\n\nconst GEO_POSIITON_CHANNEL_INDEX = {\n longitude: 1,\n longitude2: 1,\n latitude: 1,\n latitude2: 1\n} as const;\n\nexport type GeoPositionChannel = keyof typeof GEO_POSIITON_CHANNEL_INDEX;\n\nexport function getPositionChannelFromLatLong(channel: GeoPositionChannel): PositionChannel {\n switch (channel) {\n case LATITUDE:\n return 'y';\n case LATITUDE2:\n return 'y2';\n case LONGITUDE:\n return 'x';\n case LONGITUDE2:\n return 'x2';\n }\n}\n\nexport function isGeoPositionChannel(c: Channel): c is GeoPositionChannel {\n return hasOwnProperty(GEO_POSIITON_CHANNEL_INDEX, c);\n}\n\nexport const GEOPOSITION_CHANNELS = keys(GEO_POSIITON_CHANNEL_INDEX);\n\nconst UNIT_CHANNEL_INDEX: Flag<Channel> = {\n ...POSITION_CHANNEL_INDEX,\n ...POLAR_POSITION_CHANNEL_INDEX,\n\n ...GEO_POSIITON_CHANNEL_INDEX,\n xOffset: 1,\n yOffset: 1,\n\n // color\n color: 1,\n fill: 1,\n stroke: 1,\n\n // time\n time: 1,\n\n // other non-position with scale\n opacity: 1,\n fillOpacity: 1,\n strokeOpacity: 1,\n\n strokeWidth: 1,\n strokeDash: 1,\n size: 1,\n angle: 1,\n shape: 1,\n\n // channels without scales\n order: 1,\n text: 1,\n detail: 1,\n key: 1,\n tooltip: 1,\n href: 1,\n url: 1,\n description: 1\n};\n\nexport type ColorChannel = 'color' | 'fill' | 'stroke';\n\nexport function isColorChannel(channel: Channel): channel is ColorChannel {\n return channel === COLOR || channel === FILL || channel === STROKE;\n}\n\nexport type FacetChannel = keyof EncodingFacetMapping<any, any>;\n\nconst FACET_CHANNEL_INDEX: Flag<keyof EncodingFacetMapping<any, any>> = {\n row: 1,\n column: 1,\n facet: 1\n};\n\nexport const FACET_CHANNELS = keys(FACET_CHANNEL_INDEX);\n\nconst CHANNEL_INDEX = {\n ...UNIT_CHANNEL_INDEX,\n ...FACET_CHANNEL_INDEX\n};\n\nexport const CHANNELS = keys(CHANNEL_INDEX);\n\nconst {order: _o, detail: _d, tooltip: _tt1, ...SINGLE_DEF_CHANNEL_INDEX} = CHANNEL_INDEX;\nconst {row: _r, column: _c, facet: _f, ...SINGLE_DEF_UNIT_CHANNEL_INDEX} = SINGLE_DEF_CHANNEL_INDEX;\n/**\n * Channels that cannot have an array of channelDef.\n * model.fieldDef, getFieldDef only work for these channels.\n *\n * (The only two channels that can have an array of channelDefs are \"detail\" and \"order\".\n * Since there can be multiple fieldDefs for detail and order, getFieldDef/model.fieldDef\n * are not applicable for them. Similarly, selection projection won't work with \"detail\" and \"order\".)\n */\n\nexport const SINGLE_DEF_CHANNELS = keys(SINGLE_DEF_CHANNEL_INDEX);\n\nexport type SingleDefChannel = (typeof SINGLE_DEF_CHANNELS)[number];\n\nexport const SINGLE_DEF_UNIT_CHANNELS = keys(SINGLE_DEF_UNIT_CHANNEL_INDEX);\n\nexport type SingleDefUnitChannel = (typeof SINGLE_DEF_UNIT_CHANNELS)[number];\n\nexport function isSingleDefUnitChannel(str: string): str is SingleDefUnitChannel {\n return hasOwnProperty(SINGLE_DEF_UNIT_CHANNEL_INDEX, str);\n}\n\nexport function isChannel(str: string): str is Channel {\n return hasOwnProperty(CHANNEL_INDEX, str);\n}\n\nexport type SecondaryRangeChannel = 'x2' | 'y2' | 'latitude2' | 'longitude2' | 'theta2' | 'radius2';\n\nexport const SECONDARY_RANGE_CHANNEL: SecondaryRangeChannel[] = [X2, Y2, LATITUDE2, LONGITUDE2, THETA2, RADIUS2];\n\nexport function isSecondaryRangeChannel(c: ExtendedChannel): c is SecondaryRangeChannel {\n const main = getMainRangeChannel(c);\n return main !== c;\n}\n\nexport type MainChannelOf<C extends ExtendedChannel> = C extends 'x2'\n ? 'x'\n : C extends 'y2'\n ? 'y'\n : C extends 'latitude2'\n ? 'latitude'\n : C extends 'longitude2'\n ? 'longitude'\n : C extends 'theta2'\n ? 'theta'\n : C extends 'radius2'\n ? 'radius'\n : C;\n\n/**\n * Get the main channel for a range channel. E.g. `x` for `x2`.\n */\nexport function getMainRangeChannel<C extends ExtendedChannel>(channel: C): MainChannelOf<C> {\n switch (channel) {\n case X2:\n return X as MainChannelOf<C>;\n case Y2:\n return Y as MainChannelOf<C>;\n case LATITUDE2:\n return LATITUDE as MainChannelOf<C>;\n case LONGITUDE2:\n return LONGITUDE as MainChannelOf<C>;\n case THETA2:\n return THETA as MainChannelOf<C>;\n case RADIUS2:\n return RADIUS as MainChannelOf<C>;\n }\n return channel as MainChannelOf<C>;\n}\n\nexport type SecondaryChannelOf<C extends Channel> = C extends 'x'\n ? 'x2'\n : C extends 'y'\n ? 'y2'\n : C extends 'latitude'\n ? 'latitude2'\n : C extends 'longitude'\n ? 'longitude2'\n : C extends 'theta'\n ? 'theta2'\n : C extends 'radius'\n ? 'radius2'\n : undefined;\n\nexport function getVgPositionChannel(channel: PolarPositionChannel | PositionChannel) {\n if (isPolarPositionChannel(channel)) {\n switch (channel) {\n case THETA:\n return 'startAngle';\n case THETA2:\n return 'endAngle';\n case RADIUS:\n return 'outerRadius';\n case RADIUS2:\n return 'innerRadius';\n }\n }\n return channel;\n}\n\n/**\n * Get the main channel for a range channel. E.g. `x` for `x2`.\n */\nexport function getSecondaryRangeChannel<C extends Channel>(channel: C): SecondaryChannelOf<C> | undefined {\n switch (channel) {\n case X:\n return X2 as SecondaryChannelOf<C>;\n case Y:\n return Y2 as SecondaryChannelOf<C>;\n case LATITUDE:\n return LATITUDE2 as SecondaryChannelOf<C>;\n case LONGITUDE:\n return LONGITUDE2 as SecondaryChannelOf<C>;\n case THETA:\n return THETA2 as SecondaryChannelOf<C>;\n case RADIUS:\n return RADIUS2 as SecondaryChannelOf<C>;\n }\n return undefined;\n}\n\nexport function getSizeChannel(channel: PositionChannel): 'width' | 'height';\nexport function getSizeChannel(channel: Channel): 'width' | 'height' | undefined;\nexport function getSizeChannel(channel: Channel): 'width' | 'height' | undefined {\n switch (channel) {\n case X:\n case X2:\n return 'width';\n case Y:\n case Y2:\n return 'height';\n }\n return undefined;\n}\n\n/**\n * Get the main channel for a range channel. E.g. `x` for `x2`.\n */\nexport function getOffsetChannel(channel: Channel) {\n switch (channel) {\n case X:\n return 'xOffset';\n case Y:\n return 'yOffset';\n case X2:\n return 'x2Offset';\n case Y2:\n return 'y2Offset';\n case THETA:\n return 'thetaOffset';\n case RADIUS:\n return 'radiusOffset';\n case THETA2:\n return 'theta2Offset';\n case RADIUS2:\n return 'radius2Offset';\n }\n return undefined;\n}\n\n/**\n * Get the main channel for a range channel. E.g. `x` for `x2`.\n */\nexport function getOffsetScaleChannel(channel: Channel): OffsetScaleChannel {\n switch (channel) {\n case X:\n return 'xOffset';\n case Y:\n return 'yOffset';\n }\n return undefined;\n}\n\nexport function getMainChannelFromOffsetChannel(channel: OffsetScaleChannel): PositionScaleChannel {\n switch (channel) {\n case 'xOffset':\n return 'x';\n case 'yOffset':\n return 'y';\n }\n}\n\n// CHANNELS without COLUMN, ROW\nexport const UNIT_CHANNELS = keys(UNIT_CHANNEL_INDEX);\n\n// NONPOSITION_CHANNELS = UNIT_CHANNELS without X, Y, X2, Y2;\nconst {\n x: _x,\n y: _y,\n // x2 and y2 share the same scale as x and y\n x2: _x2,\n y2: _y2,\n //\n xOffset: _xo,\n yOffset: _yo,\n latitude: _latitude,\n longitude: _longitude,\n latitude2: _latitude2,\n longitude2: _longitude2,\n theta: _theta,\n theta2: _theta2,\n radius: _radius,\n radius2: _radius2,\n // The rest of unit channels then have scale\n ...NONPOSITION_CHANNEL_INDEX\n} = UNIT_CHANNEL_INDEX;\n\nexport const NONPOSITION_CHANNELS = keys(NONPOSITION_CHANNEL_INDEX);\nexport type NonPositionChannel = (typeof NONPOSITION_CHANNELS)[number];\n\nconst POSITION_SCALE_CHANNEL_INDEX = {\n x: 1,\n y: 1\n} as const;\nexport const POSITION_SCALE_CHANNELS = keys(POSITION_SCALE_CHANNEL_INDEX);\nexport type PositionScaleChannel = keyof typeof POSITION_SCALE_CHANNEL_INDEX;\n\nexport function isXorY(channel: ExtendedChannel): channel is PositionScaleChannel {\n return hasOwnProperty(POSITION_SCALE_CHANNEL_INDEX, channel);\n}\n\nexport const POLAR_POSITION_SCALE_CHANNEL_INDEX = {\n theta: 1,\n radius: 1\n} as const;\n\nexport const POLAR_POSITION_SCALE_CHANNELS = keys(POLAR_POSITION_SCALE_CHANNEL_INDEX);\nexport type PolarPositionScaleChannel = keyof typeof POLAR_POSITION_SCALE_CHANNEL_INDEX;\n\nexport function getPositionScaleChannel(sizeType: 'width' | 'height'): PositionScaleChannel {\n return sizeType === 'width' ? X : Y;\n}\n\nconst OFFSET_SCALE_CHANNEL_INDEX: {xOffset: 1; yOffset: 1} = {xOffset: 1, yOffset: 1};\n\nexport const OFFSET_SCALE_CHANNELS = keys(OFFSET_SCALE_CHANNEL_INDEX);\n\nexport type OffsetScaleChannel = (typeof OFFSET_SCALE_CHANNELS)[0];\n\nexport function isXorYOffset(channel: Channel): channel is OffsetScaleChannel {\n return hasOwnProperty(OFFSET_SCALE_CHANNEL_INDEX, channel);\n}\n\nconst TIME_SCALE_CHANNEL_INDEX = {\n time: 1\n} as const;\nexport const TIME_SCALE_CHANNELS = keys(TIME_SCALE_CHANNEL_INDEX);\nexport type TimeScaleChannel = keyof typeof TIME_SCALE_CHANNEL_INDEX;\n\nexport function isTime(channel: ExtendedChannel): channel is TimeScaleChannel {\n return channel in TIME_SCALE_CHANNEL_INDEX;\n}\n\n// NON_POSITION_SCALE_CHANNEL = SCALE_CHANNELS without position / offset\nconst {\n // x2 and y2 share the same scale as x and y\n // text and tooltip have format instead of scale,\n // href has neither format, nor scale\n text: _t,\n tooltip: _tt,\n href: _hr,\n url: _u,\n description: _al,\n // detail and order have no scale\n detail: _dd,\n key: _k,\n order: _oo,\n ...NONPOSITION_SCALE_CHANNEL_INDEX\n} = NONPOSITION_CHANNEL_INDEX;\nexport const NONPOSITION_SCALE_CHANNELS = keys(NONPOSITION_SCALE_CHANNEL_INDEX);\nexport type NonPositionScaleChannel = (typeof NONPOSITION_SCALE_CHANNELS)[number];\n\nexport function isNonPositionScaleChannel(channel: Channel): channel is NonPositionScaleChannel {\n return hasOwnProperty(NONPOSITION_CHANNEL_INDEX, channel);\n}\n\n/**\n * @returns whether Vega supports legends for a particular channel\n */\nexport function supportLegend(channel: NonPositionScaleChannel) {\n switch (channel) {\n case COLOR:\n case FILL:\n case STROKE:\n case SIZE:\n case SHAPE:\n case OPACITY:\n case STROKEWIDTH:\n case STROKEDASH:\n return true;\n case FILLOPACITY:\n case STROKEOPACITY:\n case ANGLE:\n case TIME:\n return false;\n }\n}\n\n// Declare SCALE_CHANNEL_INDEX\nconst SCALE_CHANNEL_INDEX = {\n ...POSITION_SCALE_CHANNEL_INDEX,\n ...POLAR_POSITION_SCALE_CHANNEL_INDEX,\n ...OFFSET_SCALE_CHANNEL_INDEX,\n ...NONPOSITION_SCALE_CHANNEL_INDEX\n};\n\n/** List of channels with scales */\nexport const SCALE_CHANNELS = keys(SCALE_CHANNEL_INDEX);\nexport type ScaleChannel = (typeof SCALE_CHANNELS)[number];\n\nexport function isScaleChannel(channel: ExtendedChannel): channel is ScaleChannel {\n return hasOwnProperty(SCALE_CHANNEL_INDEX, channel);\n}\n\nexport type SupportedMark = Partial<Record<Mark, 'always' | 'binned'>>;\n\n/**\n * Return whether a channel supports a particular mark type.\n * @param channel channel name\n * @param mark the mark type\n * @return whether the mark supports the channel\n */\nexport function supportMark(channel: ExtendedChannel, mark: Mark) {\n return getSupportedMark(channel)[mark];\n}\n\nconst ALL_MARKS: Record<Mark, 'always'> = {\n // all marks\n arc: 'always',\n area: 'always',\n bar: 'always',\n circle: 'always',\n geoshape: 'always',\n image: 'always',\n line: 'always',\n rule: 'always',\n point: 'always',\n rect: 'always',\n square: 'always',\n trail: 'always',\n text: 'always',\n tick: 'always'\n};\n\nconst {geoshape: _g, ...ALL_MARKS_EXCEPT_GEOSHAPE} = ALL_MARKS;\n\n/**\n * Return a dictionary showing whether a channel supports mark type.\n * @param channel\n * @return A dictionary mapping mark types to 'always', 'binned', or undefined\n */\nfunction getSupportedMark(channel: ExtendedChannel): SupportedMark {\n switch (channel) {\n case COLOR:\n case FILL:\n case STROKE:\n // falls through\n\n case DESCRIPTION:\n case DETAIL:\n case KEY:\n case TOOLTIP:\n case HREF:\n case ORDER: // TODO: revise (order might not support rect, which is not stackable?)\n case OPACITY:\n case FILLOPACITY:\n case STROKEOPACITY:\n case STROKEWIDTH:\n\n // falls through\n\n case FACET:\n case ROW: // falls through\n case COLUMN:\n return ALL_MARKS;\n case X:\n case Y:\n case XOFFSET:\n case YOFFSET:\n case LATITUDE:\n case LONGITUDE:\n case TIME:\n // all marks except geoshape. geoshape does not use X, Y -- it uses a projection\n return ALL_MARKS_EXCEPT_GEOSHAPE;\n case X2:\n case Y2:\n case LATITUDE2:\n case LONGITUDE2:\n return {\n area: 'always',\n bar: 'always',\n image: 'always',\n rect: 'always',\n rule: 'always',\n circle: 'binned',\n point: 'binned',\n square: 'binned',\n tick: 'binned',\n line: 'binned',\n trail: 'binned'\n };\n case SIZE:\n return {\n point: 'always',\n tick: 'always',\n rule: 'always',\n circle: 'always',\n square: 'always',\n bar: 'always',\n text: 'always',\n line: 'always',\n trail: 'always'\n };\n case STROKEDASH:\n return {\n line: 'always',\n point: 'always',\n tick: 'always',\n rule: 'always',\n circle: 'always',\n square: 'always',\n bar: 'always',\n geoshape: 'always'\n };\n case SHAPE:\n return {point: 'always', geoshape: 'always'};\n case TEXT:\n return {text: 'always'};\n case ANGLE:\n return {point: 'always', square: 'always', text: 'always'};\n case URL:\n return {image: 'always'};\n case THETA:\n return {text: 'always', arc: 'always'};\n case RADIUS:\n return {text: 'always', arc: 'always'};\n case THETA2:\n case RADIUS2:\n return {arc: 'always'};\n }\n}\n\nexport function rangeType(channel: ExtendedChannel): RangeType {\n switch (channel) {\n case X:\n case Y:\n case THETA:\n case RADIUS:\n case XOFFSET:\n case YOFFSET:\n case SIZE:\n case ANGLE:\n case STROKEWIDTH:\n case OPACITY:\n case FILLOPACITY:\n case STROKEOPACITY:\n case TIME:\n\n // X2 and Y2 use X and Y scales, so they similarly have continuous range. [falls through]\n case X2:\n case Y2:\n case THETA2:\n case RADIUS2:\n return undefined;\n\n case FACET:\n case ROW:\n case COLUMN:\n case SHAPE:\n case STROKEDASH:\n // TEXT, TOOLTIP, URL, and HREF have no scale but have discrete output [falls through]\n case TEXT:\n case TOOLTIP:\n case HREF:\n case URL:\n case DESCRIPTION:\n return 'discrete';\n\n // Color can be either continuous or discrete, depending on scale type.\n case COLOR:\n case FILL:\n case STROKE:\n return 'flexible';\n\n // No scale, no range type.\n\n case LATITUDE:\n case LONGITUDE:\n case LATITUDE2:\n case LONGITUDE2:\n case DETAIL:\n case KEY:\n case ORDER:\n return undefined;\n }\n}\n", "import type {AggregateOp} from 'vega';\nimport {hasOwnProperty, isString} from 'vega-util';\nimport {FieldName} from './channeldef';\nimport {contains, Flag, hasProperty} from './util';\n\nconst AGGREGATE_OP_INDEX: Flag<AggregateOp> = {\n argmax: 1,\n argmin: 1,\n average: 1,\n count: 1,\n distinct: 1,\n exponential: 1,\n exponentialb: 1,\n product: 1,\n max: 1,\n mean: 1,\n median: 1,\n min: 1,\n missing: 1,\n q1: 1,\n q3: 1,\n ci0: 1,\n ci1: 1,\n stderr: 1,\n stdev: 1,\n stdevp: 1,\n sum: 1,\n valid: 1,\n values: 1,\n variance: 1,\n variancep: 1\n};\n\nexport const MULTIDOMAIN_SORT_OP_INDEX = {\n count: 1,\n min: 1,\n max: 1\n};\n\nexport interface ArgminDef {\n argmin: FieldName;\n}\n\nexport interface ArgmaxDef {\n argmax: FieldName;\n}\n\nexport type NonArgAggregateOp = Exclude<AggregateOp, 'argmin' | 'argmax'>;\n\nexport type Aggregate = NonArgAggregateOp | ArgmaxDef | ArgminDef;\n\nexport function isArgminDef(a: Aggregate | string): a is ArgminDef {\n return hasProperty(a, 'argmin');\n}\n\nexport function isArgmaxDef(a: Aggregate | string): a is ArgmaxDef {\n return hasProperty(a, 'argmax');\n}\n\nexport function isAggregateOp(a: string | ArgminDef | ArgmaxDef): a is AggregateOp {\n return isString(a) && hasOwnProperty(AGGREGATE_OP_INDEX, a);\n}\n\nexport const COUNTING_OPS = new Set<NonArgAggregateOp>([\n 'count',\n 'valid',\n 'missing',\n 'distinct'\n]) as ReadonlySet<NonArgAggregateOp>;\n\nexport function isCountingAggregateOp(aggregate?: string | Aggregate): boolean {\n return isString(aggregate) && COUNTING_OPS.has(aggregate as any);\n}\n\nexport function isMinMaxOp(aggregate?: Aggregate | string): boolean {\n return isString(aggregate) && contains(['min', 'max'], aggregate);\n}\n\n/** Additive-based aggregation operations. These can be applied to stack. */\nexport const SUM_OPS = new Set<NonArgAggregateOp>([\n 'count',\n 'sum',\n 'distinct',\n 'valid',\n 'missing'\n]) as ReadonlySet<NonArgAggregateOp>;\n\n/**\n * Aggregation operators that always produce values within the range [domainMin, domainMax].\n */\nexport const SHARED_DOMAIN_OPS = new Set<AggregateOp>([\n 'mean',\n 'average',\n 'median',\n 'q1',\n 'q3',\n 'min',\n 'max'\n]) as ReadonlySet<AggregateOp>;\n", "import {isBoolean, isObject} from 'vega-util';\nimport {\n COLOR,\n COLUMN,\n ExtendedChannel,\n FILL,\n FILLOPACITY,\n OPACITY,\n ROW,\n SHAPE,\n SIZE,\n STROKE,\n STROKEDASH,\n STROKEOPACITY,\n STROKEWIDTH\n} from './channel';\nimport {normalizeBin} from './channeldef';\nimport {ParameterExtent} from './selection';\nimport {entries, hasProperty, keys, varName} from './util';\n\nexport interface BaseBin {\n /**\n * The number base to use for automatic bin determination (default is base 10).\n *\n * __Default value:__ `10`\n *\n */\n base?: number;\n /**\n * An exact step size to use between bins.\n *\n * __Note:__ If provided, options such as maxbins will be ignored.\n */\n step?: number;\n /**\n * An array of allowable step sizes to choose from.\n * @minItems 1\n */\n steps?: number[];\n /**\n * A minimum allowable step size (particularly useful for integer values).\n */\n minstep?: number;\n /**\n * Scale factors indicating allowable subdivisions. The default value is [5, 2], which indicates that for base 10 numbers (the default base), the method may consider dividing bin sizes by 5 and/or 2. For example, for an initial step size of 10, the method can check if bin sizes of 2 (= 10/5), 5 (= 10/2), or 1 (= 10/(5*2)) might also satisfy the given constraints.\n *\n * __Default value:__ `[5, 2]`\n *\n * @minItems 1\n */\n divide?: [number, number];\n /**\n * Maximum number of bins.\n *\n * __Default value:__ `6` for `row`, `column` and `shape` channels; `10` for other channels\n *\n * @minimum 2\n */\n maxbins?: number;\n /**\n * A value in the binned domain at which to anchor the bins, shifting the bin boundaries if necessary to ensure that a boundary aligns with the anchor value.\n *\n * __Default value:__ the minimum bin extent value\n */\n anchor?: number;\n /**\n * If true, attempts to make the bin boundaries use human-friendly boundaries, such as multiples of ten.\n *\n * __Default value:__ `true`\n */\n nice?: boolean;\n}\n\n/**\n * Binning properties or boolean flag for determining whether to bin data or not.\n */\nexport interface BinParams extends BaseBin {\n /**\n * A two-element (`[min, max]`) array indicating the range of desired bin values.\n */\n extent?: BinExtent; // VgBinTransform uses a different extent so we need to pull this out.\n\n /**\n * When set to `true`, Vega-Lite treats the input data as already binned.\n */\n binned?: boolean;\n}\n\nexport type Bin = boolean | BinParams | 'binned' | null;\n\nexport type BinExtent = [number, number] | ParameterExtent;\n\n/**\n * Create a key for the bin configuration. Not for prebinned bin.\n */\nexport function binToString(bin: BinParams | true) {\n if (isBoolean(bin)) {\n bin = normalizeBin(bin, undefined);\n }\n return (\n 'bin' +\n keys(bin)\n .map(p => (isParameterExtent(bin[p]) ? varName(`_${p}_${entries(bin[p])}`) : varName(`_${p}_${bin[p]}`)))\n .join('')\n );\n}\n\n/**\n * Vega-Lite should bin the data.\n */\nexport function isBinning(bin: BinParams | boolean | 'binned'): bin is BinParams | true {\n return bin === true || (isBinParams(bin) && !bin.binned);\n}\n\n/**\n * The data is already binned and so Vega-Lite should not bin it again.\n */\nexport function isBinned(bin: BinParams | boolean | 'binned'): bin is 'binned' | BinParams {\n return bin === 'binned' || (isBinParams(bin) && bin.binned === true);\n}\n\nexport function isBinParams(bin: BinParams | boolean | 'binned'): bin is BinParams {\n return isObject(bin);\n}\n\nexport function isParameterExtent(extent: unknown): extent is ParameterExtent {\n return hasProperty(extent, 'param');\n}\n\nexport function autoMaxBins(channel?: ExtendedChannel): number {\n switch (channel) {\n case ROW:\n case COLUMN:\n case SIZE:\n case COLOR:\n case FILL:\n case STROKE:\n case STROKEWIDTH:\n case OPACITY:\n case FILLOPACITY:\n case STROKEOPACITY:\n // Facets and Size shouldn't have too many bins\n // We choose 6 like shape to simplify the rule [falls through]\n case SHAPE:\n return 6; // Vega's \"shape\" has 6 distinct values\n case STROKEDASH:\n return 4; // We only provide 5 different stroke dash values (but 4 is more effective)\n default:\n return 10;\n }\n}\n", "import {signalRefOrValue} from './compile/common';\nimport {Dict, hasProperty, keys} from './util';\nimport {MappedExclude} from './vega.schema';\n\nexport interface ExprRef {\n /**\n * Vega expression (which can refer to Vega-Lite parameters).\n */\n expr: string;\n}\n\nexport function isExprRef(o: any): o is ExprRef {\n return hasProperty(o, 'expr');\n}\n\nexport function replaceExprRef<T extends Dict<any>>(index: T, {level}: {level: number} = {level: 0}) {\n const props = keys(index || {});\n const newIndex: Dict<any> = {};\n for (const prop of props) {\n newIndex[prop] = level === 0 ? signalRefOrValue(index[prop]) : replaceExprRef(index[prop], {level: level - 1});\n }\n return newIndex as MappedExclude<T, ExprRef>;\n}\n", "import {BaseTitle, SignalRef, Text, TextEncodeEntry, TitleAnchor} from 'vega';\nimport {isArray, isString} from 'vega-util';\nimport {ExprRef} from './expr';\nimport {MarkConfig} from './mark';\nimport {pick} from './util';\nimport {MapExcludeValueRefAndReplaceSignalWith, MappedExcludeValueRef} from './vega.schema';\n\nexport type BaseTitleNoValueRefs<ES extends ExprRef | SignalRef> = MapExcludeValueRefAndReplaceSignalWith<\n Omit<BaseTitle, 'align' | 'baseline'>,\n ES\n> &\n // Since some logic depends on align/baseline, Vega-Lite does NOT allow signal for them.\n MappedExcludeValueRef<Pick<BaseTitle, 'align' | 'baseline'>>;\n\nexport type TitleConfig<ES extends ExprRef | SignalRef> = BaseTitleNoValueRefs<ES>;\n\nexport interface TitleBase<ES extends ExprRef | SignalRef> extends BaseTitleNoValueRefs<ES> {\n /**\n * The anchor position for placing the title. One of `\"start\"`, `\"middle\"`, or `\"end\"`. For example, with an orientation of top these anchor positions map to a left-, center-, or right-aligned title.\n *\n * __Default value:__ `\"middle\"` for [single](https://vega.github.io/vega-lite/docs/spec.html) and [layered](https://vega.github.io/vega-lite/docs/layer.html) views.\n * `\"start\"` for other composite views.\n *\n * __Note:__ [For now](https://github.com/vega/vega-lite/issues/2875), `anchor` is only customizable only for [single](https://vega.github.io/vega-lite/docs/spec.html) and [layered](https://vega.github.io/vega-lite/docs/layer.html) views. For other composite views, `anchor` is always `\"start\"`.\n */\n anchor?: TitleAnchor;\n\n /**\n * A [mark style property](https://vega.github.io/vega-lite/docs/config.html#style) to apply to the title text mark.\n *\n * __Default value:__ `\"group-title\"`.\n */\n style?: string | string[];\n\n /**\n * \tThe integer z-index indicating the layering of the title group relative to other axis, mark and legend groups.\n *\n * __Default value:__ `0`.\n *\n * @TJS-type integer\n * @minimum 0\n */\n zindex?: number;\n\n /**\n * Mark definitions for custom encoding.\n *\n * @hidden\n */\n encoding?: TextEncodeEntry;\n}\n\nexport interface TitleParams<ES extends ExprRef | SignalRef> extends TitleBase<ES> {\n /**\n * The title text.\n */\n text: Text | ES;\n\n /**\n * The subtitle Text.\n */\n subtitle?: Text;\n}\n\nexport function extractTitleConfig(titleConfig: TitleConfig<SignalRef>): {\n titleMarkConfig: MarkConfig<SignalRef>;\n subtitleMarkConfig: MarkConfig<SignalRef>;\n /** These are non-mark title config that need to be hardcoded in the title directive. */\n nonMarkTitleProperties: BaseTitleNoValueRefs<SignalRef>;\n subtitle: BaseTitleNoValueRefs<SignalRef>;\n} {\n const {\n // These are non-mark title config that need to be hardcoded\n anchor,\n frame,\n offset,\n orient,\n angle,\n limit,\n\n // color needs to be redirect to fill\n color,\n\n // subtitle properties\n subtitleColor,\n subtitleFont,\n subtitleFontSize,\n subtitleFontStyle,\n subtitleFontWeight,\n subtitleLineHeight,\n subtitlePadding,\n\n // The rest are mark config.\n ...rest\n } = titleConfig;\n\n const titleMarkConfig: MarkConfig<SignalRef> = {\n ...rest,\n ...(color ? {fill: color} : {})\n };\n\n // These are non-mark title config that need to be hardcoded\n const nonMarkTitleProperties: BaseTitleNoValueRefs<SignalRef> = {\n ...(anchor ? {anchor} : {}),\n ...(frame ? {frame} : {}),\n ...(offset ? {offset} : {}),\n ...(orient ? {orient} : {}),\n ...(angle !== undefined ? {angle} : {}),\n ...(limit !== undefined ? {limit} : {})\n };\n\n // subtitle part can stay in config.title since header titles do not use subtitle\n const subtitle: BaseTitleNoValueRefs<SignalRef> = {\n ...(subtitleColor ? {subtitleColor} : {}),\n ...(subtitleFont ? {subtitleFont} : {}),\n ...(subtitleFontSize ? {subtitleFontSize} : {}),\n ...(subtitleFontStyle ? {subtitleFontStyle} : {}),\n ...(subtitleFontWeight ? {subtitleFontWeight} : {}),\n ...(subtitleLineHeight ? {subtitleLineHeight} : {}),\n ...(subtitlePadding ? {subtitlePadding} : {})\n };\n\n const subtitleMarkConfig = pick(titleConfig, ['align', 'baseline', 'dx', 'dy', 'limit']);\n\n return {titleMarkConfig, subtitleMarkConfig, nonMarkTitleProperties, subtitle};\n}\n\nexport function isText(v: any): v is Text {\n return isString(v) || (isArray(v) && isString(v[0]));\n}\n", "import type {\n AggregateOp,\n BandScale,\n BaseScale,\n BinOrdinalScale,\n ColorValueRef,\n Compare as VgCompare,\n ExprRef as VgExprRef,\n GeoShapeTransform as VgGeoShapeTransform,\n IdentityScale,\n LayoutAlign,\n LinearScale,\n LogScale,\n Mark,\n MarkConfig,\n NumericValueRef,\n OrdinalScale,\n PointScale,\n PowScale,\n ProjectionType,\n QuantileScale,\n QuantizeScale,\n RangeBand,\n RangeRaw,\n RangeScheme,\n ScaleData,\n ScaleDataRef,\n ScaledValueRef,\n ScaleMultiDataRef,\n ScaleMultiFieldsRef,\n SequentialScale,\n SignalRef,\n SortField as VgSortField,\n SqrtScale,\n SymLogScale,\n ThresholdScale,\n TimeInterval,\n TimeIntervalStep,\n TimeScale,\n Title as VgTitle,\n Transforms as VgTransform,\n UnionSortField as VgUnionSortField\n} from 'vega';\nimport {isArray} from 'vega-util';\nimport {Value} from './channeldef';\nimport {ExprRef} from './expr';\nimport {SortOrder} from './sort';\nimport {Dict, Flag, hasProperty, keys} from './util';\n\nexport type {VgSortField, VgUnionSortField, VgCompare, VgTitle, LayoutAlign, ProjectionType, VgExprRef};\n\n// TODO: make recursive (e.g. with https://stackoverflow.com/a/64900252/214950 but needs https://github.com/vega/ts-json-schema-generator/issues/568)\nexport type MappedExclude<T, E> = {\n [P in keyof T]: Exclude<T[P], E>;\n};\n\nexport type MapExcludeAndKeepSignalAs<T, E, S extends ExprRef | SignalRef> = {\n [P in keyof T]: SignalRef extends T[P] ? Exclude<T[P], E> | S : Exclude<T[P], E>;\n};\n\n// Remove ValueRefs from mapped types\nexport type MappedExcludeValueRef<T> = MappedExclude<T, ScaledValueRef<any> | NumericValueRef | ColorValueRef>;\n\nexport type MapExcludeValueRefAndReplaceSignalWith<T, S extends ExprRef | SignalRef> = MapExcludeAndKeepSignalAs<\n T,\n ScaledValueRef<any> | NumericValueRef | ColorValueRef,\n S\n>;\n\nexport interface VgData {\n name: string;\n source?: string;\n values?: any;\n format?: {\n type?: string;\n parse?: string | Dict<unknown>;\n property?: string;\n feature?: string;\n mesh?: string;\n };\n url?: string;\n transform?: VgTransform[];\n}\n\nexport type VgScaleDataRefWithSort = ScaleDataRef & {\n sort?: VgSortField;\n};\n\nexport function isSignalRef(o: any): o is SignalRef {\n return hasProperty(o, 'signal');\n}\n\n// TODO: add type of value (Make it VgValueRef<V extends ValueOrGradient> {value?:V ...})\nexport interface VgValueRef {\n value?: Value<never>; // value should never be a signal so we use never\n field?:\n | string\n | {\n datum?: string;\n group?: string;\n parent?: string;\n };\n signal?: string;\n scale?: string; // TODO: object\n mult?: number;\n offset?: number | VgValueRef;\n band?: boolean | number | VgValueRef;\n test?: string;\n}\n\n// TODO: add vg prefix\nexport type VgScaleMultiDataRefWithSort = ScaleMultiDataRef & {\n fields: (any[] | VgScaleDataRefWithSort | SignalRef)[];\n sort?: VgUnionSortField;\n};\n\nexport type VgMultiFieldsRefWithSort = ScaleMultiFieldsRef & {\n sort?: VgUnionSortField;\n};\n\nexport type VgRange = RangeScheme | ScaleData | RangeBand | RangeRaw;\n\nexport function isVgRangeStep(range: VgRange): range is VgRangeStep {\n return hasProperty(range, 'step');\n}\n\nexport interface VgRangeStep {\n step: number | SignalRef;\n}\n// Domains that are not a union of domains\nexport type VgNonUnionDomain = (null | string | number | boolean | SignalRef)[] | VgScaleDataRefWithSort | SignalRef;\n\nexport type VgDomain = BaseScale['domain'];\n\nexport type VgMarkGroup = any;\n\n/**\n * A combined type for any Vega scales that Vega-Lite can generate\n */\nexport type VgScale = Pick<BaseScale, 'type'> & {\n range?: RangeScheme | RangeBand | ScaleData; // different Vega scales have conflicting range, need to union them here\n nice?: boolean | number | TimeInterval | TimeIntervalStep | SignalRef; // different Vega scales have conflicting range, need to union them here\n zero?: boolean | SignalRef; // LogScale only allow false, making the intersection type overly strict\n} & Omit<\n // Continuous\n Omit<LinearScale, 'type'> &\n Omit<LogScale, 'type'> &\n Omit<SymLogScale, 'type'> &\n Omit<Partial<PowScale>, 'type'> & // use partial so exponent is not required\n Omit<SqrtScale, 'type'> &\n Omit<IdentityScale, 'type'> &\n Omit<TimeScale, 'type'> &\n // Discretizing\n Omit<QuantileScale, 'type'> &\n Omit<QuantizeScale, 'type'> &\n Omit<ThresholdScale, 'type'> &\n Omit<BinOrdinalScale, 'type'> &\n // Sequential\n Omit<SequentialScale, 'type'> &\n // Discrete\n Omit<BandScale, 'type'> &\n Omit<PointScale, 'type'> &\n Omit<OrdinalScale, 'type'>,\n 'range' | 'nice' | 'zero'\n >;\n\nexport interface RowCol<T> {\n row?: T;\n column?: T;\n}\n\nexport interface VgLayout {\n center?: boolean | RowCol<boolean>;\n padding?: number | RowCol<number>;\n headerBand?: number | RowCol<number>;\n footerBand?: number | RowCol<number>;\n\n titleAnchor?: 'start' | 'end' | RowCol<'start' | 'end'>;\n offset?:\n | number\n | {\n rowHeader?: number;\n rowFooter?: number;\n rowTitle?: number;\n columnHeader?: number;\n columnFooter?: number;\n columnTitle?: number;\n };\n bounds?: 'full' | 'flush';\n columns?: number | {signal: string};\n align?: LayoutAlign | RowCol<LayoutAlign>;\n}\n\nexport function isDataRefUnionedDomain(domain: VgDomain): domain is VgScaleMultiDataRefWithSort {\n if (!isArray(domain)) {\n return hasProperty(domain, 'fields') && !hasProperty(domain, 'data');\n }\n return false;\n}\n\nexport function isFieldRefUnionDomain(domain: VgDomain): domain is VgMultiFieldsRefWithSort {\n if (!isArray(domain)) {\n return hasProperty(domain, 'fields') && hasProperty(domain, 'data');\n }\n return false;\n}\n\nexport function isDataRefDomain(domain: VgDomain | any): domain is VgScaleDataRefWithSort {\n if (!isArray(domain)) {\n return hasProperty(domain, 'field') && hasProperty(domain, 'data');\n }\n return false;\n}\n\nexport type VgEncodeChannel =\n | 'x'\n | 'x2'\n | 'xc'\n | 'width'\n | 'y'\n | 'y2'\n | 'yc'\n | 'height'\n | 'opacity'\n | 'fill'\n | 'fillOpacity'\n | 'stroke'\n | 'strokeWidth'\n | 'strokeCap'\n | 'strokeOpacity'\n | 'strokeDash'\n | 'strokeDashOffset'\n | 'strokeMiterLimit'\n | 'strokeJoin'\n | 'strokeOffset'\n | 'strokeForeground'\n | 'cursor'\n | 'clip'\n | 'size'\n | 'shape'\n | 'path'\n | 'innerRadius'\n | 'outerRadius'\n | 'startAngle'\n | 'endAngle'\n | 'interpolate'\n | 'tension'\n | 'orient'\n | 'url'\n | 'align'\n | 'baseline'\n | 'text'\n | 'dir'\n | 'ellipsis'\n | 'limit'\n | 'dx'\n | 'dy'\n | 'radius'\n | 'theta'\n | 'angle'\n | 'font'\n | 'fontSize'\n | 'fontWeight'\n | 'fontStyle'\n | 'tooltip'\n | 'href'\n | 'cursor'\n | 'defined'\n | 'cornerRadius'\n | 'cornerRadiusTopLeft'\n | 'cornerRadiusTopRight'\n | 'cornerRadiusBottomRight'\n | 'cornerRadiusBottomLeft'\n | 'scaleX'\n | 'scaleY';\n\nexport type VgEncodeEntry = Partial<Record<VgEncodeChannel, VgValueRef | (VgValueRef & {test?: string})[]>>;\n\n// TODO: make export interface VgEncodeEntry {\n// x?: VgValueRef<number>\n// y?: VgValueRef<number>\n// ...\n// color?: VgValueRef<string>\n// ...\n// }\n\nexport type VgPostEncodingTransform = VgGeoShapeTransform;\n\nconst VG_MARK_CONFIG_INDEX: Flag<keyof MarkConfig> = {\n aria: 1,\n description: 1,\n ariaRole: 1,\n ariaRoleDescription: 1,\n blend: 1,\n opacity: 1,\n fill: 1,\n fillOpacity: 1,\n stroke: 1,\n strokeCap: 1,\n strokeWidth: 1,\n strokeOpacity: 1,\n strokeDash: 1,\n strokeDashOffset: 1,\n strokeJoin: 1,\n strokeOffset: 1,\n strokeMiterLimit: 1,\n startAngle: 1,\n endAngle: 1,\n padAngle: 1,\n innerRadius: 1,\n outerRadius: 1,\n size: 1,\n shape: 1,\n interpolate: 1,\n tension: 1,\n orient: 1,\n align: 1,\n baseline: 1,\n text: 1,\n dir: 1,\n dx: 1,\n dy: 1,\n ellipsis: 1,\n limit: 1,\n radius: 1,\n theta: 1,\n angle: 1,\n font: 1,\n fontSize: 1,\n fontWeight: 1,\n fontStyle: 1,\n lineBreak: 1,\n lineHeight: 1,\n cursor: 1,\n href: 1,\n tooltip: 1,\n cornerRadius: 1,\n cornerRadiusTopLeft: 1,\n cornerRadiusTopRight: 1,\n cornerRadiusBottomLeft: 1,\n cornerRadiusBottomRight: 1,\n aspect: 1,\n width: 1,\n height: 1,\n url: 1,\n smooth: 1\n\n // commented below are vg channel that do not have mark config.\n // x: 1,\n // y: 1,\n // x2: 1,\n // y2: 1,\n\n // xc'|'yc'\n // clip: 1,\n // path: 1,\n // url: 1,\n};\n\nexport const VG_MARK_CONFIGS = keys(VG_MARK_CONFIG_INDEX);\n\nexport const VG_MARK_INDEX: Flag<Mark['type']> = {\n arc: 1,\n area: 1,\n group: 1,\n image: 1,\n line: 1,\n path: 1,\n rect: 1,\n rule: 1,\n shape: 1,\n symbol: 1,\n text: 1,\n trail: 1\n};\n\n// Vega's cornerRadius channels.\nexport const VG_CORNERRADIUS_CHANNELS = [\n 'cornerRadius',\n 'cornerRadiusTopLeft',\n 'cornerRadiusTopRight',\n 'cornerRadiusBottomLeft',\n 'cornerRadiusBottomRight'\n] as const;\n\nexport interface VgComparator {\n field?: string | string[];\n order?: SortOrder | SortOrder[];\n}\n\nexport interface VgJoinAggregateTransform {\n type: 'joinaggregate';\n as?: string[];\n ops?: AggregateOp[];\n fields?: string[];\n groupby?: string[];\n}\n", "import type {ExprRef, SignalRef, Text} from 'vega';\nimport {array, isArray, stringValue} from 'vega-util';\nimport {AxisConfig, ConditionalAxisProperty} from '../axis';\nimport {\n ConditionalPredicate,\n DatumDef,\n FieldDef,\n FieldDefBase,\n FieldRefOption,\n OrderFieldDef,\n Value,\n ValueDef,\n vgField\n} from '../channeldef';\nimport {Config, StyleConfigIndex} from '../config';\nimport {isExprRef} from '../expr';\nimport {Mark, MarkConfig, MarkDef} from '../mark';\nimport {SortFields} from '../sort';\nimport {isText} from '../title';\nimport {deepEqual, getFirstDefined, hasProperty} from '../util';\nimport {isSignalRef, VgEncodeChannel, VgEncodeEntry, VgValueRef} from '../vega.schema';\nimport {AxisComponentProps} from './axis/component';\nimport {Explicit} from './split';\nimport {UnitModel} from './unit';\n\nexport const BIN_RANGE_DELIMITER = ' \\u2013 ';\n\nexport function signalOrValueRefWithCondition<V extends Value | number[]>(\n val: ConditionalAxisProperty<V, SignalRef | ExprRef>\n): ConditionalAxisProperty<V, SignalRef> {\n const condition = isArray(val.condition)\n ? (val.condition as ConditionalPredicate<ValueDef<any> | ExprRef | SignalRef>[]).map(conditionalSignalRefOrValue)\n : conditionalSignalRefOrValue(val.condition);\n\n return {\n ...signalRefOrValue<ValueDef<any>>(val),\n condition\n };\n}\n\nexport function signalRefOrValue<T>(value: T | SignalRef | ExprRef): T | SignalRef {\n if (isExprRef(value)) {\n const {expr, ...rest} = value;\n return {signal: expr, ...rest};\n }\n return value;\n}\n\nexport function conditionalSignalRefOrValue<T extends FieldDef<any> | DatumDef | ValueDef<any>>(\n value: ConditionalPredicate<T | ExprRef | SignalRef>\n): ConditionalPredicate<T | SignalRef> {\n if (isExprRef(value)) {\n const {expr, ...rest} = value;\n return {signal: expr, ...rest};\n }\n return value;\n}\n\nexport function signalOrValueRef<T>(value: T | SignalRef | ExprRef): {value: T} | SignalRef {\n if (isExprRef(value)) {\n const {expr, ...rest} = value;\n return {signal: expr, ...rest};\n }\n if (isSignalRef(value)) {\n return value;\n }\n return value !== undefined ? {value} : undefined;\n}\n\nexport function exprFromSignalRefOrValue<T extends SignalRef>(ref: Value<T> | SignalRef): string {\n if (isSignalRef(ref)) {\n return ref.signal;\n }\n return stringValue(ref);\n}\nexport function exprFromValueRefOrSignalRef(ref: VgValueRef | SignalRef): string {\n if (isSignalRef(ref)) {\n return ref.signal;\n }\n return stringValue(ref.value);\n}\n\nexport function signalOrStringValue(v: SignalRef | any) {\n if (isSignalRef(v)) {\n return v.signal;\n }\n return v == null ? null : stringValue(v);\n}\n\nexport function applyMarkConfig(e: VgEncodeEntry, model: UnitModel, propsList: (keyof MarkConfig<any>)[]) {\n for (const property of propsList) {\n const value = getMarkConfig(property, model.markDef, model.config);\n if (value !== undefined) {\n (e as any)[property] = signalOrValueRef(value);\n }\n }\n return e;\n}\n\nexport function getStyles(mark: MarkDef): string[] {\n return [].concat(mark.type, mark.style ?? []);\n}\n\nexport function getMarkPropOrConfig<P extends keyof MarkDef, ES extends ExprRef | SignalRef>(\n channel: P,\n mark: MarkDef<Mark, ES>,\n config: Config<SignalRef>,\n opt: {\n vgChannel?: VgEncodeChannel;\n ignoreVgConfig?: boolean;\n } = {}\n): MarkDef<Mark, ES>[P] {\n const {vgChannel, ignoreVgConfig} = opt;\n if (vgChannel && hasProperty(mark, vgChannel)) {\n return mark[vgChannel] as any;\n } else if (mark[channel] !== undefined) {\n return mark[channel];\n } else if (ignoreVgConfig && (!vgChannel || vgChannel === channel)) {\n return undefined;\n }\n\n return getMarkConfig(channel, mark, config, opt);\n}\n\n/**\n * Return property value from style or mark specific config property if exists.\n * Otherwise, return general mark specific config.\n */\nexport function getMarkConfig<P extends keyof MarkDef, ES extends ExprRef | SignalRef>(\n channel: P,\n mark: MarkDef<Mark, ES>,\n config: Config<SignalRef>,\n {vgChannel}: {vgChannel?: VgEncodeChannel} = {}\n): MarkDef<Mark, ES>[P] {\n const cfg = getMarkStyleConfig(channel, mark, config.style) as MarkDef<Mark, ES>[P];\n return getFirstDefined<MarkDef<Mark, ES>[P]>(\n // style config has highest precedence\n vgChannel ? cfg : undefined,\n cfg,\n // then mark-specific config\n vgChannel ? (config[mark.type] as any)[vgChannel] : undefined,\n\n (config[mark.type] as any)[channel], // Need to cast because MarkDef doesn't perfectly match with AnyMarkConfig, but if the type isn't available, we'll get nothing here, which is fine\n\n // If there is vgChannel, skip vl channel.\n // For example, vl size for text is vg fontSize, but config.mark.size is only for point size.\n vgChannel ? (config.mark as any)[vgChannel] : (config.mark as any)[channel] // Need to cast for the same reason as above\n );\n}\n\nexport function getMarkStyleConfig<P extends keyof MarkDef, ES extends ExprRef | SignalRef>(\n prop: P,\n mark: MarkDef<Mark, ES>,\n styleConfigIndex: StyleConfigIndex<SignalRef>\n) {\n return getStyleConfig(prop, getStyles(mark), styleConfigIndex);\n}\n\nexport function getStyleConfig<P extends keyof MarkDef | keyof AxisConfig<SignalRef>>(\n p: P,\n styles: string | string[],\n styleConfigIndex: StyleConfigIndex<SignalRef>\n) {\n styles = array(styles);\n let value;\n for (const style of styles) {\n const styleConfig = styleConfigIndex[style];\n\n if (hasProperty(styleConfig, p)) {\n value = styleConfig[p];\n }\n }\n return value;\n}\n\n/**\n * Return Vega sort parameters (tuple of field and order).\n */\nexport function sortParams(\n orderDef: OrderFieldDef<string> | OrderFieldDef<string>[],\n fieldRefOption?: FieldRefOption\n): SortFields {\n return array(orderDef).reduce(\n (s, orderChannelDef) => {\n s.field.push(vgField(orderChannelDef, fieldRefOption));\n s.order.push(orderChannelDef.sort ?? 'ascending');\n return s;\n },\n {field: [], order: []}\n );\n}\n\nexport type AxisTitleComponent = AxisComponentProps['title'];\n\nexport function mergeTitleFieldDefs(f1: readonly FieldDefBase<string>[], f2: readonly FieldDefBase<string>[]) {\n const merged = [...f1];\n\n f2.forEach(fdToMerge => {\n for (const fieldDef1 of merged) {\n // If already exists, no need to append to merged array\n if (deepEqual(fieldDef1, fdToMerge)) {\n return;\n }\n }\n merged.push(fdToMerge);\n });\n return merged;\n}\n\nexport function mergeTitle(title1: Text | SignalRef, title2: Text | SignalRef) {\n if (deepEqual(title1, title2) || !title2) {\n // if titles are the same or title2 is falsy\n return title1;\n } else if (!title1) {\n // if title1 is falsy\n return title2;\n } else {\n return [...array(title1), ...array(title2)].join(', ');\n }\n}\n\nexport function mergeTitleComponent(v1: Explicit<AxisTitleComponent>, v2: Explicit<AxisTitleComponent>) {\n const v1Val = v1.value;\n const v2Val = v2.value;\n\n if (v1Val == null || v2Val === null) {\n return {\n explicit: v1.explicit,\n value: null\n };\n } else if ((isText(v1Val) || isSignalRef(v1Val)) && (isText(v2Val) || isSignalRef(v2Val))) {\n return {\n explicit: v1.explicit,\n value: mergeTitle(v1Val, v2Val)\n };\n } else if (isText(v1Val) || isSignalRef(v1Val)) {\n return {\n explicit: v1.explicit,\n value: v1Val\n };\n } else if (isText(v2Val) || isSignalRef(v2Val)) {\n return {\n explicit: v1.explicit,\n value: v2Val\n };\n } else if (!isText(v1Val) && !isSignalRef(v1Val) && !isText(v2Val) && !isSignalRef(v2Val)) {\n return {\n explicit: v1.explicit,\n value: mergeTitleFieldDefs(v1Val, v2Val)\n };\n }\n /* istanbul ignore next: Condition should not happen -- only for warning in development. */\n throw new Error('It should never reach here');\n}\n", "/**\n * Collection of all Vega-Lite Error Messages\n */\nimport {AggregateOp, SignalRef, stringValue} from 'vega';\nimport {Aggregate} from '../aggregate';\nimport {\n Channel,\n ExtendedChannel,\n FacetChannel,\n getSizeChannel,\n OffsetScaleChannel,\n PositionScaleChannel,\n ScaleChannel,\n SingleDefUnitChannel\n} from '../channel';\nimport {HiddenCompositeAggregate, TypedFieldDef, Value} from '../channeldef';\nimport {SplitParentProperty} from '../compile/split';\nimport {CompositeMark} from '../compositemark';\nimport {ErrorBarCenter, ErrorBarExtent} from '../compositemark/errorbar';\nimport {DateTime, DateTimeExpr} from '../datetime';\nimport {ExprRef} from '../expr';\nimport {Mark} from '../mark';\nimport {Projection} from '../projection';\nimport {ScaleType} from '../scale';\nimport {GenericSpec} from '../spec';\nimport {Type} from '../type';\nimport {stringify} from '../util';\nimport {VgSortField} from '../vega.schema';\nimport {SelectionProjection} from '../compile/selection/project';\nimport {ParameterExtent} from '../selection';\n\nexport function invalidSpec(spec: GenericSpec<any, any, any, any>) {\n return `Invalid specification ${stringify(\n spec\n )}. Make sure the specification includes at least one of the following properties: \"mark\", \"layer\", \"facet\", \"hconcat\", \"vconcat\", \"concat\", or \"repeat\".`;\n}\n\n// FIT\nexport const FIT_NON_SINGLE = 'Autosize \"fit\" only works for single views and layered views.';\n\nexport function containerSizeNonSingle(name: 'width' | 'height') {\n const uName = name == 'width' ? 'Width' : 'Height';\n return `${uName} \"container\" only works for single views and layered views.`;\n}\n\nexport function containerSizeNotCompatibleWithAutosize(name: 'width' | 'height') {\n const uName = name == 'width' ? 'Width' : 'Height';\n const fitDirection = name == 'width' ? 'x' : 'y';\n return `${uName} \"container\" only works well with autosize \"fit\" or \"fit-${fitDirection}\".`;\n}\n\nexport function droppingFit(channel?: PositionScaleChannel) {\n return channel\n ? `Dropping \"fit-${channel}\" because spec has discrete ${getSizeChannel(channel)}.`\n : `Dropping \"fit\" because spec has discrete size.`;\n}\n\n// VIEW SIZE\n\nexport function unknownField(channel: Channel) {\n return `Unknown field for ${channel}. Cannot calculate view size.`;\n}\n\n// SELECTION\nexport function cannotProjectOnChannelWithoutField(channel: Channel) {\n return `Cannot project a selection on encoding channel \"${channel}\", which has no field.`;\n}\n\nexport function cannotProjectAggregate(channel: Channel, aggregate: Aggregate | HiddenCompositeAggregate) {\n return `Cannot project a selection on encoding channel \"${channel}\" as it uses an aggregate function (\"${aggregate}\").`;\n}\n\nexport function nearestNotSupportForContinuous(mark: string) {\n return `The \"nearest\" transform is not supported for ${mark} marks.`;\n}\n\nexport function selectionNotSupported(mark: CompositeMark) {\n return `Selection not supported for ${mark} yet.`;\n}\n\nexport function selectionNotFound(name: string) {\n return `Cannot find a selection named \"${name}\".`;\n}\n\nexport const SCALE_BINDINGS_CONTINUOUS =\n 'Scale bindings are currently only supported for scales with unbinned, continuous domains.';\n\nexport const SEQUENTIAL_SCALE_DEPRECATED =\n 'Sequntial scales are deprecated. The available quantitative scale type values are linear, log, pow, sqrt, symlog, time and utc';\n\nexport const LEGEND_BINDINGS_MUST_HAVE_PROJECTION =\n 'Legend bindings are only supported for selections over an individual field or encoding channel.';\nexport function cannotLookupVariableParameter(name: string) {\n return `Lookups can only be performed on selection parameters. \"${name}\" is a variable parameter.`;\n}\n\nexport function noSameUnitLookup(name: string) {\n return (\n `Cannot define and lookup the \"${name}\" selection in the same view. ` +\n `Try moving the lookup into a second, layered view?`\n );\n}\n\nexport const NEEDS_SAME_SELECTION = 'The same selection must be used to override scale domains in a layered view.';\n\nexport const INTERVAL_INITIALIZED_WITH_POS =\n 'Interval selections should be initialized using \"x\", \"y\", \"longitude\", or \"latitude\" keys.';\n\n// REPEAT\nexport function noSuchRepeatedValue(field: string) {\n return `Unknown repeated value \"${field}\".`;\n}\n\nexport function columnsNotSupportByRowCol(type: 'facet' | 'repeat') {\n return `The \"columns\" property cannot be used when \"${type}\" has nested row/column.`;\n}\n\nexport const MULTIPLE_TIMER_ANIMATION_SELECTION =\n 'Multiple timer selections in one unit spec are not supported. Ignoring all but the first.';\n\nexport const MULTI_VIEW_ANIMATION_UNSUPPORTED = 'Animation involving facet, layer, or concat is currently unsupported.';\n\nexport function selectionAsScaleDomainWithoutField(field: string) {\n return (\n 'A \"field\" or \"encoding\" must be specified when using a selection as a scale domain. ' +\n `Using \"field\": ${stringValue(field)}.`\n );\n}\n\nexport function selectionAsScaleDomainWrongEncodings(\n encodings: SelectionProjection[],\n encoding: SingleDefUnitChannel,\n extent: ParameterExtent,\n field: string\n) {\n return (\n (!encodings.length ? 'No ' : 'Multiple ') +\n `matching ${stringValue(encoding)} encoding found for selection ${stringValue(extent.param)}. ` +\n `Using \"field\": ${stringValue(field)}.`\n );\n}\n\n// CONCAT / REPEAT\nexport const CONCAT_CANNOT_SHARE_AXIS =\n 'Axes cannot be shared in concatenated or repeated views yet (https://github.com/vega/vega-lite/issues/2415).';\n\n// DATA\nexport function unrecognizedParse(p: string) {\n return `Unrecognized parse \"${p}\".`;\n}\n\nexport function differentParse(field: string, local: string, ancestor: string) {\n return `An ancestor parsed field \"${field}\" as ${ancestor} but a child wants to parse the field as ${local}.`;\n}\n\nexport const ADD_SAME_CHILD_TWICE = 'Attempt to add the same child twice.';\n\n// TRANSFORMS\nexport function invalidTransformIgnored(transform: any) {\n return `Ignoring an invalid transform: ${stringify(transform)}.`;\n}\n\nexport const NO_FIELDS_NEEDS_AS =\n 'If \"from.fields\" is not specified, \"as\" has to be a string that specifies the key to be used for the data from the secondary source.';\n\n// ENCODING & FACET\n\nexport function customFormatTypeNotAllowed(channel: ExtendedChannel) {\n return `Config.customFormatTypes is not true, thus custom format type and format for channel ${channel} are dropped.`;\n}\n\nexport function projectionOverridden<ES extends ExprRef | SignalRef>(opt: {\n parentProjection: Projection<ES>;\n projection: Projection<ES>;\n}) {\n const {parentProjection, projection} = opt;\n return `Layer's shared projection ${stringify(parentProjection)} is overridden by a child projection ${stringify(\n projection\n )}.`;\n}\n\nexport const REPLACE_ANGLE_WITH_THETA = 'Arc marks uses theta channel rather than angle, replacing angle with theta.';\n\nexport function offsetNestedInsideContinuousPositionScaleDropped(mainChannel: PositionScaleChannel) {\n return `${mainChannel}Offset dropped because ${mainChannel} is continuous`;\n}\n\nexport function primitiveChannelDef(\n channel: ExtendedChannel,\n type: 'string' | 'number' | 'boolean',\n value: Exclude<Value, null>\n) {\n return `Channel ${channel} is a ${type}. Converted to {value: ${stringify(value)}}.`;\n}\n\nexport function invalidFieldType(type: Type) {\n return `Invalid field type \"${type}\".`;\n}\n\nexport function invalidFieldTypeForCountAggregate(type: Type, aggregate: Aggregate | string) {\n return `Invalid field type \"${type}\" for aggregate: \"${aggregate}\", using \"quantitative\" instead.`;\n}\n\nexport function invalidAggregate(aggregate: AggregateOp | string) {\n return `Invalid aggregation operator \"${aggregate}\".`;\n}\n\nexport function missingFieldType(channel: Channel, newType: Type) {\n return `Missing type for channel \"${channel}\", using \"${newType}\" instead.`;\n}\nexport function droppingColor(type: 'encoding' | 'property', opt: {fill?: boolean; stroke?: boolean}) {\n const {fill, stroke} = opt;\n return `Dropping color ${type} as the plot also has ${\n fill && stroke ? 'fill and stroke' : fill ? 'fill' : 'stroke'\n }.`;\n}\n\nexport function relativeBandSizeNotSupported(sizeChannel: 'width' | 'height') {\n return `Position range does not support relative band size for ${sizeChannel}.`;\n}\n\nexport function emptyFieldDef(fieldDef: unknown, channel: ExtendedChannel) {\n return `Dropping ${stringify(\n fieldDef\n )} from channel \"${channel}\" since it does not contain any data field, datum, value, or signal.`;\n}\n\nexport const LINE_WITH_VARYING_SIZE =\n 'Line marks cannot encode size with a non-groupby field. You may want to use trail marks instead.';\n\nexport function incompatibleChannel(\n channel: ExtendedChannel,\n markOrFacet: Mark | 'facet' | CompositeMark,\n when?: string\n) {\n return `${channel} dropped as it is incompatible with \"${markOrFacet}\"${when ? ` when ${when}` : ''}.`;\n}\n\nexport function offsetEncodingScaleIgnored(channel: OffsetScaleChannel) {\n return `${channel} encoding has no scale, so specified scale is ignored.`;\n}\n\nexport function invalidEncodingChannel(channel: ExtendedChannel) {\n return `${channel}-encoding is dropped as ${channel} is not a valid encoding channel.`;\n}\n\nexport function channelShouldBeDiscrete(channel: ExtendedChannel) {\n return `${channel} encoding should be discrete (ordinal / nominal / binned).`;\n}\n\nexport function channelShouldBeDiscreteOrDiscretizing(channel: ExtendedChannel) {\n return `${channel} encoding should be discrete (ordinal / nominal / binned) or use a discretizing scale (e.g. threshold).`;\n}\n\nexport function facetChannelDropped(channels: FacetChannel[]) {\n return `Facet encoding dropped as ${channels.join(' and ')} ${channels.length > 1 ? 'are' : 'is'} also specified.`;\n}\n\nexport function discreteChannelCannotEncode(channel: Channel, type: Type) {\n return `Using discrete channel \"${channel}\" to encode \"${type}\" field can be misleading as it does not encode ${\n type === 'ordinal' ? 'order' : 'magnitude'\n }.`;\n}\n\n// MARK\n\nexport function rangeMarkAlignmentCannotBeExpression(align: 'align' | 'baseline') {\n return `The ${align} for range marks cannot be an expression`;\n}\n\nexport function lineWithRange(hasX2: boolean, hasY2: boolean) {\n const channels = hasX2 && hasY2 ? 'x2 and y2' : hasX2 ? 'x2' : 'y2';\n return `Line mark is for continuous lines and thus cannot be used with ${channels}. We will use the rule mark (line segments) instead.`;\n}\n\nexport function orientOverridden(original: string, actual: string) {\n return `Specified orient \"${original}\" overridden with \"${actual}\".`;\n}\n\n// SCALE\nexport const CANNOT_UNION_CUSTOM_DOMAIN_WITH_FIELD_DOMAIN =\n 'Custom domain scale cannot be unioned with default field-based domain.';\n\nexport function cannotUseScalePropertyWithNonColor(prop: string) {\n return `Cannot use the scale property \"${prop}\" with non-color channel.`;\n}\n\nexport function cannotUseRelativeBandSizeWithNonBandScale(scaleType: ScaleType) {\n return `Cannot use the relative band size with ${scaleType} scale.`;\n}\n\nexport function unaggregateDomainHasNoEffectForRawField(fieldDef: TypedFieldDef<string>) {\n return `Using unaggregated domain with raw field has no effect (${stringify(fieldDef)}).`;\n}\n\nexport function unaggregateDomainWithNonSharedDomainOp(aggregate: Aggregate | string) {\n return `Unaggregated domain not applicable for \"${aggregate}\" since it produces values outside the origin domain of the source data.`;\n}\n\nexport function unaggregatedDomainWithLogScale(fieldDef: TypedFieldDef<string>) {\n return `Unaggregated domain is currently unsupported for log scale (${stringify(fieldDef)}).`;\n}\n\nexport function cannotApplySizeToNonOrientedMark(mark: Mark) {\n return `Cannot apply size to non-oriented mark \"${mark}\".`;\n}\n\nexport function scaleTypeNotWorkWithChannel(channel: Channel, scaleType: ScaleType, defaultScaleType: ScaleType) {\n return `Channel \"${channel}\" does not work with \"${scaleType}\" scale. We are using \"${defaultScaleType}\" scale instead.`;\n}\n\nexport function scaleTypeNotWorkWithFieldDef(scaleType: ScaleType, defaultScaleType: ScaleType) {\n return `FieldDef does not work with \"${scaleType}\" scale. We are using \"${defaultScaleType}\" scale instead.`;\n}\n\nexport function scalePropertyNotWorkWithScaleType(scaleType: ScaleType, propName: string, channel: Channel) {\n return `${channel}-scale's \"${propName}\" is dropped as it does not work with ${scaleType} scale.`;\n}\n\nexport function scaleTypeNotWorkWithMark(mark: Mark, scaleType: ScaleType) {\n return `Scale type \"${scaleType}\" does not work with mark \"${mark}\".`;\n}\n\nexport function stepDropped(channel: 'width' | 'height') {\n return `The step for \"${channel}\" is dropped because the ${channel === 'width' ? 'x' : 'y'} is continuous.`;\n}\n\nexport function mergeConflictingProperty<T>(\n property: string | number | symbol,\n propertyOf: SplitParentProperty,\n v1: T,\n v2: T\n) {\n return `Conflicting ${propertyOf.toString()} property \"${property.toString()}\" (${stringify(v1)} and ${stringify(\n v2\n )}). Using ${stringify(v1)}.`;\n}\n\nexport function mergeConflictingDomainProperty<T>(property: 'domains', propertyOf: SplitParentProperty, v1: T, v2: T) {\n return `Conflicting ${propertyOf.toString()} property \"${property.toString()}\" (${stringify(v1)} and ${stringify(\n v2\n )}). Using the union of the two domains.`;\n}\n\nexport function independentScaleMeansIndependentGuide(channel: Channel) {\n return `Setting the scale to be independent for \"${channel}\" means we also have to set the guide (axis or legend) to be independent.`;\n}\n\nexport function domainSortDropped(sort: VgSortField) {\n return `Dropping sort property ${stringify(\n sort\n )} as unioned domains only support boolean or op \"count\", \"min\", and \"max\".`;\n}\n\nexport const MORE_THAN_ONE_SORT =\n 'Domains that should be unioned has conflicting sort properties. Sort will be set to true.';\n\nexport const FACETED_INDEPENDENT_DIFFERENT_SOURCES =\n 'Detected faceted independent scales that union domain of multiple fields from different data sources. We will use the first field. The result view size may be incorrect.';\n\nexport const FACETED_INDEPENDENT_SAME_FIELDS_DIFFERENT_SOURCES =\n 'Detected faceted independent scales that union domain of the same fields from different source. We will assume that this is the same field from a different fork of the same data source. However, if this is not the case, the result view size may be incorrect.';\n\nexport const FACETED_INDEPENDENT_SAME_SOURCE =\n 'Detected faceted independent scales that union domain of multiple fields from the same data source. We will use the first field. The result view size may be incorrect.';\n\n// AXIS\nexport const INVALID_CHANNEL_FOR_AXIS = 'Invalid channel for axis.';\n\n// STACK\nexport function cannotStackRangedMark(channel: Channel) {\n return `Cannot stack \"${channel}\" if there is already \"${channel}2\".`;\n}\n\nexport function stackNonLinearScale(scaleType: ScaleType) {\n return `Stack is applied to a non-linear scale (${scaleType}).`;\n}\n\nexport function stackNonSummativeAggregate(aggregate: Aggregate | string) {\n return `Stacking is applied even though the aggregate function is non-summative (\"${aggregate}\").`;\n}\n\n// TIMEUNIT\nexport function invalidTimeUnit(unitName: string, value: string | number) {\n return `Invalid ${unitName}: ${stringify(value)}.`;\n}\n\nexport function droppedDay(d: DateTime | DateTimeExpr) {\n return `Dropping day from datetime ${stringify(d)} as day cannot be combined with other units.`;\n}\n\nexport function errorBarCenterAndExtentAreNotNeeded(center: ErrorBarCenter, extent: ErrorBarExtent) {\n return `${extent ? 'extent ' : ''}${extent && center ? 'and ' : ''}${center ? 'center ' : ''}${\n extent && center ? 'are ' : 'is '\n }not needed when data are aggregated.`;\n}\n\nexport function errorBarCenterIsUsedWithWrongExtent(\n center: ErrorBarCenter,\n extent: ErrorBarExtent,\n mark: 'errorbar' | 'errorband'\n) {\n return `${center} is not usually used with ${extent} for ${mark}.`;\n}\n\nexport function errorBarContinuousAxisHasCustomizedAggregate(\n aggregate: Aggregate | string,\n compositeMark: CompositeMark\n) {\n return `Continuous axis should not have customized aggregation function ${aggregate}; ${compositeMark} already agregates the axis.`;\n}\n\nexport function errorBand1DNotSupport(property: 'interpolate' | 'tension') {\n return `1D error band does not support ${property}.`;\n}\n\n// CHANNEL\nexport function channelRequiredForBinned(channel: Channel) {\n return `Channel ${channel} is required for \"binned\" bin.`;\n}\n\nexport function channelShouldNotBeUsedForBinned(channel: ExtendedChannel) {\n return `Channel ${channel} should not be used with \"binned\" bin.`;\n}\n\nexport function domainRequiredForThresholdScale(channel: ScaleChannel) {\n return `Domain for ${channel} is required for threshold scale.`;\n}\n", "/**\n * Vega-Lite's singleton logger utility.\n */\n\nimport {Debug, Error as ErrorLevel, Info, logger, LoggerInterface, Warn} from 'vega-util';\nexport * as message from './message';\n\n/**\n * Main (default) Vega Logger instance for Vega-Lite.\n */\nconst main = logger(Warn);\nlet current: LoggerInterface = main;\n\n/**\n * Logger tool for checking if the code throws correct warning.\n */\nexport class LocalLogger implements LoggerInterface {\n public warns: any[] = [];\n public infos: any[] = [];\n public debugs: any[] = [];\n\n #level: number = Warn;\n\n public level(): number;\n public level(_: number): this;\n public level(_?: number) {\n if (_) {\n this.#level = _;\n return this;\n }\n return this.#level;\n }\n\n public warn(...args: readonly any[]) {\n if (this.#level >= Warn) this.warns.push(...args);\n return this;\n }\n\n public info(...args: readonly any[]) {\n if (this.#level >= Info) this.infos.push(...args);\n return this;\n }\n\n public debug(...args: readonly any[]) {\n if (this.#level >= Debug) this.debugs.push(...args);\n return this;\n }\n\n public error(...args: readonly any[]): this {\n if (this.#level >= ErrorLevel) throw Error(...args);\n return this;\n }\n}\n\nexport function wrap(f: (logger: LocalLogger) => void) {\n return () => {\n current = new LocalLogger();\n f(current as LocalLogger);\n reset();\n };\n}\n\n/**\n * Set the singleton logger to be a custom logger.\n */\nexport function set(newLogger: LoggerInterface) {\n current = newLogger;\n return current;\n}\n\n/**\n * Reset the main logger to use the default Vega Logger.\n */\nexport function reset() {\n current = main;\n return current;\n}\n\nexport function error(...args: readonly any[]) {\n current.error(...args);\n}\n\nexport function warn(...args: readonly any[]) {\n current.warn(...args);\n}\n\nexport function info(...args: readonly any[]) {\n current.info(...args);\n}\n\nexport function debug(...args: readonly any[]) {\n current.debug(...args);\n}\n", "// DateTime definition object\n\nimport {isNumber, isObject} from 'vega-util';\nimport * as log from './log';\nimport {TIMEUNIT_PARTS} from './timeunit';\nimport {duplicate, hasProperty, isNumeric, keys} from './util';\n\n/**\n * @minimum 1\n * @maximum 12\n * @TJS-type integer\n */\nexport type Month = number;\n\n/**\n * @minimum 1\n * @maximum 7\n */\nexport type Day = number;\n\n/**\n * Object for defining datetime in Vega-Lite Filter.\n * If both month and quarter are provided, month has higher precedence.\n * `day` cannot be combined with other date.\n * We accept string for month and day names.\n */\nexport interface DateTime {\n /**\n * Integer value representing the year.\n * @TJS-type integer\n */\n year?: number;\n\n /**\n * Integer value representing the quarter of the year (from 1-4).\n * @minimum 1\n * @maximum 4\n * @TJS-type integer\n */\n quarter?: number;\n\n /**\n * One of:\n * (1) integer value representing the month from `1`-`12`. `1` represents January;\n * (2) case-insensitive month name (e.g., `\"January\"`);\n * (3) case-insensitive, 3-character short month name (e.g., `\"Jan\"`).\n */\n month?: Month | string;\n\n /**\n * Integer value representing the date (day of the month) from 1-31.\n * @minimum 1\n * @maximum 31\n * @TJS-type integer\n */\n date?: number;\n\n /**\n * Value representing the day of a week. This can be one of:\n * (1) integer value -- `1` represents Monday;\n * (2) case-insensitive day name (e.g., `\"Monday\"`);\n * (3) case-insensitive, 3-character short day name (e.g., `\"Mon\"`).\n *\n * **Warning:** A DateTime definition object with `day`** should not be combined with `year`, `quarter`, `month`, or `date`.\n */\n day?: Day | string;\n\n /**\n * Integer value representing the hour of a day from 0-23.\n * @minimum 0\n * @maximum 24\n * @TJS-type integer\n */\n hours?: number;\n\n /**\n * Integer value representing the minute segment of time from 0-59.\n * @minimum 0\n * @maximum 60\n * @TJS-type integer\n */\n minutes?: number;\n\n /**\n * Integer value representing the second segment (0-59) of a time value\n * @minimum 0\n * @maximum 60\n * @TJS-type integer\n */\n seconds?: number;\n\n /**\n * Integer value representing the millisecond segment of time.\n * @minimum 0\n * @maximum 1000\n * @TJS-type integer\n */\n milliseconds?: number;\n\n /**\n * A boolean flag indicating if date time is in utc time. If false, the date time is in local time\n */\n utc?: boolean;\n}\n\n/**\n * Internal Object for defining datetime expressions.\n * This is an expression version of DateTime.\n * If both month and quarter are provided, month has higher precedence.\n * `day` cannot be combined with other date.\n */\nexport interface DateTimeExpr {\n year?: string;\n quarter?: string;\n month?: string;\n date?: string;\n day?: string;\n hours?: string;\n minutes?: string;\n seconds?: string;\n milliseconds?: string;\n utc?: boolean;\n}\n\nexport function isDateTime(o: any): o is DateTime {\n if (o && isObject(o)) {\n for (const part of TIMEUNIT_PARTS) {\n if (hasProperty(o, part)) {\n return true;\n }\n }\n }\n return false;\n}\n\nexport const MONTHS = [\n 'january',\n 'february',\n 'march',\n 'april',\n 'may',\n 'june',\n 'july',\n 'august',\n 'september',\n 'october',\n 'november',\n 'december'\n];\nexport const SHORT_MONTHS = MONTHS.map(m => m.substr(0, 3));\n\nexport const DAYS = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];\nexport const SHORT_DAYS = DAYS.map(d => d.substr(0, 3));\n\nfunction normalizeQuarter(q: number | string): number {\n if (isNumeric(q)) {\n q = +q;\n }\n\n if (isNumber(q)) {\n if (q > 4) {\n log.warn(log.message.invalidTimeUnit('quarter', q));\n }\n // We accept 1-based quarter, so need to readjust to 0-based quarter\n return q - 1;\n } else {\n // Invalid quarter\n throw new Error(log.message.invalidTimeUnit('quarter', q));\n }\n}\n\nfunction normalizeMonth(m: string | number): number {\n if (isNumeric(m)) {\n m = +m;\n }\n\n if (isNumber(m)) {\n // We accept 1-based month, so need to readjust to 0-based month\n return m - 1;\n } else {\n const lowerM = m.toLowerCase();\n const monthIndex = MONTHS.indexOf(lowerM);\n if (monthIndex !== -1) {\n return monthIndex; // 0 for january, ...\n }\n const shortM = lowerM.substr(0, 3);\n const shortMonthIndex = SHORT_MONTHS.indexOf(shortM);\n if (shortMonthIndex !== -1) {\n return shortMonthIndex;\n }\n\n // Invalid month\n throw new Error(log.message.invalidTimeUnit('month', m));\n }\n}\n\nfunction normalizeDay(d: string | number): number {\n if (isNumeric(d)) {\n d = +d;\n }\n\n if (isNumber(d)) {\n // mod so that this can be both 0-based where 0 = sunday\n // and 1-based where 7=sunday\n return d % 7;\n } else {\n const lowerD = d.toLowerCase();\n const dayIndex = DAYS.indexOf(lowerD);\n if (dayIndex !== -1) {\n return dayIndex; // 0 for january, ...\n }\n const shortD = lowerD.substr(0, 3);\n const shortDayIndex = SHORT_DAYS.indexOf(shortD);\n if (shortDayIndex !== -1) {\n return shortDayIndex;\n }\n // Invalid day\n throw new Error(log.message.invalidTimeUnit('day', d));\n }\n}\n\n/**\n * @param d the date.\n * @param normalize whether to normalize quarter, month, day. This should probably be true if d is a DateTime.\n * @returns array of date time parts [year, month, day, hours, minutes, seconds, milliseconds]\n */\nfunction dateTimeParts(d: DateTime | DateTimeExpr, normalize: boolean) {\n const parts: (string | number)[] = [];\n\n if (normalize && d.day !== undefined) {\n if (keys(d).length > 1) {\n log.warn(log.message.droppedDay(d));\n d = duplicate(d);\n delete d.day;\n }\n }\n\n if (d.year !== undefined) {\n parts.push(d.year);\n } else {\n // Just like Vega's timeunit transform, set default year to 2012, so domain conversion will be compatible with Vega\n // Note: 2012 is a leap year (and so the date February 29 is respected) that begins on a Sunday (and so days of the week will order properly at the beginning of the year).\n parts.push(2012);\n }\n\n if (d.month !== undefined) {\n const month = normalize ? normalizeMonth(d.month) : d.month;\n parts.push(month);\n } else if (d.quarter !== undefined) {\n const quarter = normalize ? normalizeQuarter(d.quarter) : d.quarter;\n parts.push(isNumber(quarter) ? quarter * 3 : `${quarter}*3`);\n } else {\n parts.push(0); // months start at zero in JS\n }\n\n if (d.date !== undefined) {\n parts.push(d.date);\n } else if (d.day !== undefined) {\n // HACK: Day only works as a standalone unit\n // This is only correct because we always set year to 2006 for day\n const day = normalize ? normalizeDay(d.day) : d.day;\n parts.push(isNumber(day) ? day + 1 : `${day}+1`);\n } else {\n parts.push(1); // Date starts at 1 in JS\n }\n\n // Note: can't use TimeUnit enum here as importing it will create\n // circular dependency problem!\n for (const timeUnit of ['hours', 'minutes', 'seconds', 'milliseconds'] as const) {\n const unit = d[timeUnit];\n parts.push(typeof unit === 'undefined' ? 0 : unit);\n }\n\n return parts;\n}\n\n/**\n * Return Vega expression for a date time.\n *\n * @param d the date time.\n * @returns the Vega expression.\n */\nexport function dateTimeToExpr(d: DateTime) {\n const parts: (string | number)[] = dateTimeParts(d, true);\n\n const string = parts.join(', ');\n\n if (d.utc) {\n return `utc(${string})`;\n } else {\n return `datetime(${string})`;\n }\n}\n\n/**\n * Return Vega expression for a date time expression.\n *\n * @param d the internal date time object with expression.\n * @returns the Vega expression.\n */\nexport function dateTimeExprToExpr(d: DateTimeExpr) {\n const parts: (string | number)[] = dateTimeParts(d, false);\n\n const string = parts.join(', ');\n\n if (d.utc) {\n return `utc(${string})`;\n } else {\n return `datetime(${string})`;\n }\n}\n\n/**\n * @param d the date time.\n * @returns the timestamp.\n */\nexport function dateTimeToTimestamp(d: DateTime) {\n const parts: (string | number)[] = dateTimeParts(d, true);\n\n if (d.utc) {\n return +new Date(Date.UTC(...(parts as [any, any])));\n } else {\n return +new Date(...(parts as [any]));\n }\n}\n", "import {isObject, isString} from 'vega-util';\nimport {DateTime, DateTimeExpr, dateTimeExprToExpr, dateTimeToExpr} from './datetime';\nimport {accessPathWithDatum, keys, stringify, varName} from './util';\nimport {hasOwnProperty} from 'vega';\n\n/** Time Unit that only corresponds to only one part of Date objects. */\nexport const LOCAL_SINGLE_TIMEUNIT_INDEX = {\n year: 1,\n quarter: 1,\n month: 1,\n week: 1,\n day: 1,\n dayofyear: 1,\n date: 1,\n hours: 1,\n minutes: 1,\n seconds: 1,\n milliseconds: 1\n} as const;\n\nexport type LocalSingleTimeUnit = keyof typeof LOCAL_SINGLE_TIMEUNIT_INDEX;\n\nexport const TIMEUNIT_PARTS = keys(LOCAL_SINGLE_TIMEUNIT_INDEX);\n\nexport function isLocalSingleTimeUnit(timeUnit: string): timeUnit is LocalSingleTimeUnit {\n return hasOwnProperty(LOCAL_SINGLE_TIMEUNIT_INDEX, timeUnit);\n}\n\nexport const UTC_SINGLE_TIMEUNIT_INDEX = {\n utcyear: 1,\n utcquarter: 1,\n utcmonth: 1,\n utcweek: 1,\n utcday: 1,\n utcdayofyear: 1,\n utcdate: 1,\n utchours: 1,\n utcminutes: 1,\n utcseconds: 1,\n utcmilliseconds: 1\n} as const;\n\nexport type UtcSingleTimeUnit = keyof typeof UTC_SINGLE_TIMEUNIT_INDEX;\n\nexport type SingleTimeUnit = LocalSingleTimeUnit | UtcSingleTimeUnit;\n\nexport const LOCAL_MULTI_TIMEUNIT_INDEX = {\n yearquarter: 1,\n yearquartermonth: 1,\n\n yearmonth: 1,\n yearmonthdate: 1,\n yearmonthdatehours: 1,\n yearmonthdatehoursminutes: 1,\n yearmonthdatehoursminutesseconds: 1,\n\n yearweek: 1,\n yearweekday: 1,\n yearweekdayhours: 1,\n yearweekdayhoursminutes: 1,\n yearweekdayhoursminutesseconds: 1,\n\n yeardayofyear: 1,\n\n quartermonth: 1,\n\n monthdate: 1,\n monthdatehours: 1,\n monthdatehoursminutes: 1,\n monthdatehoursminutesseconds: 1,\n\n weekday: 1,\n weekdayhours: 1,\n weekdayhoursminutes: 1,\n weekdayhoursminutesseconds: 1,\n\n dayhours: 1,\n dayhoursminutes: 1,\n dayhoursminutesseconds: 1,\n\n hoursminutes: 1,\n hoursminutesseconds: 1,\n\n minutesseconds: 1,\n\n secondsmilliseconds: 1\n} as const;\n\nexport type LocalMultiTimeUnit = keyof typeof LOCAL_MULTI_TIMEUNIT_INDEX;\n\nconst BINNED_LOCAL_TIMEUNIT_INDEX = {\n binnedyear: 1,\n binnedyearquarter: 1,\n binnedyearquartermonth: 1,\n\n binnedyearmonth: 1,\n binnedyearmonthdate: 1,\n binnedyearmonthdatehours: 1,\n binnedyearmonthdatehoursminutes: 1,\n binnedyearmonthdatehoursminutesseconds: 1,\n\n binnedyearweek: 1,\n binnedyearweekday: 1,\n binnedyearweekdayhours: 1,\n binnedyearweekdayhoursminutes: 1,\n binnedyearweekdayhoursminutesseconds: 1,\n\n binnedyeardayofyear: 1\n} as const;\n\ntype BinnedLocalTimeUnit = keyof typeof BINNED_LOCAL_TIMEUNIT_INDEX;\n\nconst BINNED_UTC_TIMEUNIT_INDEX = {\n binnedutcyear: 1,\n binnedutcyearquarter: 1,\n binnedutcyearquartermonth: 1,\n\n binnedutcyearmonth: 1,\n binnedutcyearmonthdate: 1,\n binnedutcyearmonthdatehours: 1,\n binnedutcyearmonthdatehoursminutes: 1,\n binnedutcyearmonthdatehoursminutesseconds: 1,\n\n binnedutcyearweek: 1,\n binnedutcyearweekday: 1,\n binnedutcyearweekdayhours: 1,\n binnedutcyearweekdayhoursminutes: 1,\n binnedutcyearweekdayhoursminutesseconds: 1,\n\n binnedutcyeardayofyear: 1\n};\n\nexport const BINNED_TIMEUNIT_INDEX = {\n ...BINNED_LOCAL_TIMEUNIT_INDEX,\n ...BINNED_UTC_TIMEUNIT_INDEX\n};\n\ntype BinnedUtcTimeUnit = keyof typeof BINNED_UTC_TIMEUNIT_INDEX;\n\nexport type BinnedTimeUnit = BinnedLocalTimeUnit | BinnedUtcTimeUnit;\n\nexport function isBinnedTimeUnit(\n timeUnit: TimeUnit | BinnedTimeUnit | TimeUnitParams | undefined\n): timeUnit is BinnedTimeUnit | TimeUnitParams {\n if (isObject(timeUnit)) {\n return timeUnit.binned;\n }\n return isBinnedTimeUnitString(timeUnit);\n}\n\nexport function isBinnedTimeUnitString(timeUnit: TimeUnit | BinnedTimeUnit | undefined): timeUnit is BinnedTimeUnit {\n return timeUnit && timeUnit.startsWith('binned');\n}\n\nexport const UTC_MULTI_TIMEUNIT_INDEX = {\n utcyearquarter: 1,\n utcyearquartermonth: 1,\n\n utcyearmonth: 1,\n utcyearmonthdate: 1,\n utcyearmonthdatehours: 1,\n utcyearmonthdatehoursminutes: 1,\n utcyearmonthdatehoursminutesseconds: 1,\n\n utcyearweek: 1,\n utcyearweekday: 1,\n utcyearweekdayhours: 1,\n utcyearweekdayhoursminutes: 1,\n utcyearweekdayhoursminutesseconds: 1,\n\n utcyeardayofyear: 1,\n\n utcquartermonth: 1,\n\n utcmonthdate: 1,\n utcmonthdatehours: 1,\n utcmonthdatehoursminutes: 1,\n utcmonthdatehoursminutesseconds: 1,\n\n utcweekday: 1,\n utcweekdayhours: 1,\n utcweekdayhoursminutes: 1,\n utcweekdayhoursminutesseconds: 1,\n\n utcdayhours: 1,\n utcdayhoursminutes: 1,\n utcdayhoursminutesseconds: 1,\n\n utchoursminutes: 1,\n utchoursminutesseconds: 1,\n\n utcminutesseconds: 1,\n\n utcsecondsmilliseconds: 1\n} as const;\n\nexport type UtcMultiTimeUnit = keyof typeof UTC_MULTI_TIMEUNIT_INDEX;\n\nexport type MultiTimeUnit = LocalMultiTimeUnit | UtcMultiTimeUnit;\n\nexport type LocalTimeUnit = LocalSingleTimeUnit | LocalMultiTimeUnit;\nexport type UtcTimeUnit = UtcSingleTimeUnit | UtcMultiTimeUnit;\n\nexport function isUTCTimeUnit(t: string): t is UtcTimeUnit {\n return t.startsWith('utc');\n}\n\nexport function getLocalTimeUnitFromUTCTimeUnit(t: UtcTimeUnit): LocalTimeUnit {\n return t.substring(3) as LocalTimeUnit;\n}\n\nexport type TimeUnit = SingleTimeUnit | MultiTimeUnit;\n\nexport type TimeUnitFormat =\n | 'year'\n | 'year-month'\n | 'year-month-date'\n | 'quarter'\n | 'month'\n | 'date'\n | 'week'\n | 'day'\n | 'hours'\n | 'hours-minutes'\n | 'minutes'\n | 'seconds'\n | 'milliseconds';\n\nexport interface TimeUnitTransformParams {\n /**\n * Defines how date-time values should be binned.\n */\n unit?: TimeUnit;\n\n /**\n * If no `unit` is specified, maxbins is used to infer time units.\n */\n maxbins?: number;\n\n /**\n * The number of steps between bins, in terms of the least\n * significant unit provided.\n */\n step?: number;\n\n /**\n * True to use UTC timezone. Equivalent to using a `utc` prefixed `TimeUnit`.\n */\n utc?: boolean;\n}\n\n/**\n * Time Unit Params for encoding predicate, which can specified if the data is already \"binned\".\n */\nexport interface TimeUnitParams extends TimeUnitTransformParams {\n /**\n * Whether the data has already been binned to this time unit.\n * If true, Vega-Lite will only format the data, marks, and guides,\n * without applying the timeUnit transform to re-bin the data again.\n */\n binned?: boolean;\n}\n\n// matches vega time unit format specifier\nexport type TimeFormatConfig = Partial<Record<TimeUnitFormat, string>>;\n\n// In order of increasing specificity\nexport const VEGALITE_TIMEFORMAT: TimeFormatConfig = {\n 'year-month': '%b %Y ',\n 'year-month-date': '%b %d, %Y '\n};\n\nexport function getTimeUnitParts(timeUnit: TimeUnit): LocalSingleTimeUnit[] {\n return TIMEUNIT_PARTS.filter(part => containsTimeUnit(timeUnit, part));\n}\n\nexport function getSmallestTimeUnitPart(timeUnit: TimeUnit): LocalSingleTimeUnit {\n const parts = getTimeUnitParts(timeUnit);\n return parts[parts.length - 1];\n}\n\n/** Returns true if fullTimeUnit contains the timeUnit, false otherwise. */\nexport function containsTimeUnit(fullTimeUnit: TimeUnit, timeUnit: TimeUnit) {\n const index = fullTimeUnit.indexOf(timeUnit);\n\n if (index < 0) {\n return false;\n }\n\n // exclude milliseconds\n if (index > 0 && timeUnit === 'seconds' && fullTimeUnit.charAt(index - 1) === 'i') {\n return false;\n }\n\n // exclude dayofyear\n if (fullTimeUnit.length > index + 3 && timeUnit === 'day' && fullTimeUnit.charAt(index + 3) === 'o') {\n return false;\n }\n if (index > 0 && timeUnit === 'year' && fullTimeUnit.charAt(index - 1) === 'f') {\n return false;\n }\n\n return true;\n}\n\n/**\n * Returns Vega expression for a given timeUnit and fieldRef\n */\nexport function fieldExpr(fullTimeUnit: TimeUnit, field: string, {end}: {end: boolean} = {end: false}): string {\n const fieldRef = accessPathWithDatum(field);\n\n const utc = isUTCTimeUnit(fullTimeUnit) ? 'utc' : '';\n\n function func(timeUnit: TimeUnit) {\n if (timeUnit === 'quarter') {\n // quarter starting at 0 (0,3,6,9).\n return `(${utc}quarter(${fieldRef})-1)`;\n } else {\n return `${utc}${timeUnit}(${fieldRef})`;\n }\n }\n\n let lastTimeUnit: TimeUnit;\n\n const dateExpr: DateTimeExpr = {};\n\n for (const part of TIMEUNIT_PARTS) {\n if (containsTimeUnit(fullTimeUnit, part)) {\n (dateExpr as any)[part] = func(part);\n lastTimeUnit = part;\n }\n }\n\n if (end) {\n (dateExpr as any)[lastTimeUnit] += '+1';\n }\n\n return dateTimeExprToExpr(dateExpr);\n}\n\nexport function timeUnitSpecifierExpression(timeUnit: TimeUnit) {\n if (!timeUnit) {\n return undefined;\n }\n\n const timeUnitParts = getTimeUnitParts(timeUnit);\n return `timeUnitSpecifier(${stringify(timeUnitParts)}, ${stringify(VEGALITE_TIMEFORMAT)})`;\n}\n\n/**\n * Returns the signal expression used for axis labels for a time unit.\n */\nexport function formatExpression(timeUnit: TimeUnit, field: string, isUTCScale: boolean): string {\n if (!timeUnit) {\n return undefined;\n }\n\n const expr = timeUnitSpecifierExpression(timeUnit);\n\n // We only use utcFormat for utc scale\n // For utc time units, the data is already converted as a part of timeUnit transform.\n // Thus, utc time units should use timeFormat to avoid shifting the time twice.\n const utc = isUTCScale || isUTCTimeUnit(timeUnit);\n\n return `${utc ? 'utc' : 'time'}Format(${field}, ${expr})`;\n}\n\nexport function normalizeTimeUnit(timeUnit: TimeUnit | BinnedTimeUnit | TimeUnitParams): TimeUnitParams {\n if (!timeUnit) {\n return undefined;\n }\n\n let params: TimeUnitParams;\n if (isString(timeUnit)) {\n if (isBinnedTimeUnitString(timeUnit)) {\n params = {\n unit: timeUnit.substring(6) as TimeUnit,\n binned: true\n };\n } else {\n params = {\n unit: timeUnit\n };\n }\n } else if (isObject(timeUnit)) {\n params = {\n ...timeUnit,\n ...(timeUnit.unit ? {unit: timeUnit.unit} : {})\n };\n }\n\n if (isUTCTimeUnit(params.unit)) {\n params.utc = true;\n params.unit = getLocalTimeUnitFromUTCTimeUnit(params.unit);\n }\n\n return params;\n}\n\nexport function timeUnitToString(tu: TimeUnit | TimeUnitTransformParams) {\n const {utc, ...rest} = normalizeTimeUnit(tu);\n\n if (rest.unit) {\n return (\n (utc ? 'utc' : '') +\n keys(rest)\n .map(p => varName(`${p === 'unit' ? '' : `_${p}_`}${rest[p]}`))\n .join('')\n );\n } else {\n // when maxbins is specified instead of units\n return (\n (utc ? 'utc' : '') +\n 'timeunit' +\n keys(rest)\n .map(p => varName(`_${p}_${rest[p]}`))\n .join('')\n );\n }\n}\n\nexport function durationExpr(\n timeUnit: TimeUnit | BinnedTimeUnit | TimeUnitTransformParams,\n wrap: (x: string) => string = x => x\n) {\n const normalizedTimeUnit = normalizeTimeUnit(timeUnit);\n const smallestUnitPart = getSmallestTimeUnitPart(normalizedTimeUnit.unit);\n if (smallestUnitPart && smallestUnitPart !== 'day') {\n const startDate: DateTime = {\n year: 2001, // pick a non-leap year\n month: 1,\n date: 1,\n hours: 0,\n minutes: 0,\n seconds: 0,\n milliseconds: 0\n };\n const {step, part} = getDateTimePartAndStep(smallestUnitPart, normalizedTimeUnit.step);\n const endDate: DateTime = {\n ...startDate,\n [part]: +startDate[part] + step\n };\n\n // Calculate timestamp duration for the smallest unit listed\n return `${wrap(dateTimeToExpr(endDate))} - ${wrap(dateTimeToExpr(startDate))}`;\n }\n return undefined;\n}\n\nconst DATE_PARTS = {\n year: 1,\n month: 1,\n date: 1,\n hours: 1,\n minutes: 1,\n seconds: 1,\n milliseconds: 1\n} as const;\n\ntype DatePart = keyof typeof DATE_PARTS;\n\nexport function isDatePart(timeUnit: LocalSingleTimeUnit): timeUnit is DatePart {\n return hasOwnProperty(DATE_PARTS, timeUnit);\n}\n\nexport function getDateTimePartAndStep(\n timeUnit: LocalSingleTimeUnit,\n step = 1\n): {\n part: keyof DateTime;\n step: number;\n} {\n if (isDatePart(timeUnit)) {\n return {part: timeUnit, step};\n }\n switch (timeUnit) {\n case 'day':\n case 'dayofyear':\n return {part: 'date', step};\n case 'quarter':\n return {part: 'month', step: step * 3};\n case 'week':\n return {part: 'date', step: step * 7};\n }\n}\n", "import type {SignalRef} from 'vega';\nimport {isArray} from 'vega-util';\nimport {FieldName, valueExpr, vgField} from './channeldef';\nimport {DateTime} from './datetime';\nimport {ExprRef, replaceExprRef} from './expr';\nimport {LogicalComposition} from './logical';\nimport {ParameterName} from './parameter';\nimport {fieldExpr as timeUnitFieldExpr, normalizeTimeUnit, TimeUnit, TimeUnitParams, BinnedTimeUnit} from './timeunit';\nimport {hasProperty, stringify} from './util';\nimport {isSignalRef} from './vega.schema';\n\nexport type Predicate =\n // a) FieldPredicate (but we don't type FieldFilter here so the schema has no nesting\n // and thus the documentation shows all of the types clearly)\n | FieldEqualPredicate\n | FieldRangePredicate\n | FieldOneOfPredicate\n | FieldLTPredicate\n | FieldGTPredicate\n | FieldLTEPredicate\n | FieldGTEPredicate\n | FieldValidPredicate\n // b) Selection Predicate\n | ParameterPredicate\n // c) Vega Expression string\n | string;\n\nexport type FieldPredicate =\n | FieldEqualPredicate\n | FieldLTPredicate\n | FieldGTPredicate\n | FieldLTEPredicate\n | FieldGTEPredicate\n | FieldRangePredicate\n | FieldOneOfPredicate\n | FieldValidPredicate;\n\nexport interface ParameterPredicate {\n /**\n * Filter using a parameter name.\n */\n param: ParameterName;\n /**\n * For selection parameters, the predicate of empty selections returns true by default.\n * Override this behavior, by setting this property `empty: false`.\n */\n empty?: boolean;\n}\n\nexport function isSelectionPredicate(predicate: LogicalComposition<Predicate>): predicate is ParameterPredicate {\n return hasProperty(predicate, 'param');\n}\n\nexport interface FieldPredicateBase {\n // TODO: support aggregate\n\n /**\n * Time unit for the field to be tested.\n */\n timeUnit?: TimeUnit | BinnedTimeUnit | TimeUnitParams;\n\n /**\n * Field to be tested.\n */\n field: FieldName;\n}\n\nexport interface FieldEqualPredicate extends FieldPredicateBase {\n /**\n * The value that the field should be equal to.\n */\n equal: string | number | boolean | DateTime | ExprRef | SignalRef;\n}\n\nexport function isFieldEqualPredicate(predicate: any): predicate is FieldEqualPredicate {\n return !!predicate?.field && predicate.equal !== undefined;\n}\n\nexport interface FieldLTPredicate extends FieldPredicateBase {\n /**\n * The value that the field should be less than.\n */\n lt: string | number | DateTime | ExprRef | SignalRef;\n}\n\nexport function isFieldLTPredicate(predicate: any): predicate is FieldLTPredicate {\n return !!predicate?.field && predicate.lt !== undefined;\n}\n\nexport interface FieldLTEPredicate extends FieldPredicateBase {\n /**\n * The value that the field should be less than or equals to.\n */\n lte: string | number | DateTime | ExprRef | SignalRef;\n}\n\nexport function isFieldLTEPredicate(predicate: any): predicate is FieldLTEPredicate {\n return !!predicate?.field && predicate.lte !== undefined;\n}\n\nexport interface FieldGTPredicate extends FieldPredicateBase {\n /**\n * The value that the field should be greater than.\n */\n gt: string | number | DateTime | ExprRef | SignalRef;\n}\n\nexport function isFieldGTPredicate(predicate: any): predicate is FieldGTPredicate {\n return !!predicate?.field && predicate.gt !== undefined;\n}\n\nexport interface FieldGTEPredicate extends FieldPredicateBase {\n /**\n * The value that the field should be greater than or equals to.\n */\n gte: string | number | DateTime | ExprRef | SignalRef;\n}\n\nexport function isFieldGTEPredicate(predicate: any): predicate is FieldGTEPredicate {\n return !!predicate?.field && predicate.gte !== undefined;\n}\n\nexport interface FieldRangePredicate extends FieldPredicateBase {\n /**\n * An array of inclusive minimum and maximum values\n * for a field value of a data item to be included in the filtered data.\n * @maxItems 2\n * @minItems 2\n */\n range: (number | DateTime | null | ExprRef | SignalRef)[] | ExprRef | SignalRef;\n}\n\nexport function isFieldRangePredicate(predicate: any): predicate is FieldRangePredicate {\n if (predicate?.field) {\n if (isArray(predicate.range) && predicate.range.length === 2) {\n return true;\n } else if (isSignalRef(predicate.range)) {\n return true;\n }\n }\n return false;\n}\n\nexport interface FieldOneOfPredicate extends FieldPredicateBase {\n /**\n * A set of values that the `field`'s value should be a member of,\n * for a data item included in the filtered data.\n */\n oneOf: string[] | number[] | boolean[] | DateTime[];\n}\n\nexport interface FieldValidPredicate extends FieldPredicateBase {\n /**\n * If set to true the field's value has to be valid, meaning both not `null` and not [`NaN`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN).\n */\n valid: boolean;\n}\n\nexport function isFieldOneOfPredicate(predicate: any): predicate is FieldOneOfPredicate {\n return (\n !!predicate?.field && (isArray(predicate.oneOf) || isArray(predicate.in)) // backward compatibility\n );\n}\n\nexport function isFieldValidPredicate(predicate: any): predicate is FieldValidPredicate {\n return !!predicate?.field && predicate.valid !== undefined;\n}\n\nexport function isFieldPredicate(\n predicate: Predicate\n): predicate is\n | FieldOneOfPredicate\n | FieldEqualPredicate\n | FieldRangePredicate\n | FieldLTPredicate\n | FieldGTPredicate\n | FieldLTEPredicate\n | FieldGTEPredicate {\n return (\n isFieldOneOfPredicate(predicate) ||\n isFieldEqualPredicate(predicate) ||\n isFieldRangePredicate(predicate) ||\n isFieldLTPredicate(predicate) ||\n isFieldGTPredicate(predicate) ||\n isFieldLTEPredicate(predicate) ||\n isFieldGTEPredicate(predicate)\n );\n}\n\nfunction predicateValueExpr(v: number | string | boolean | DateTime | ExprRef | SignalRef, timeUnit: TimeUnit) {\n return valueExpr(v, {timeUnit, wrapTime: true});\n}\n\nfunction predicateValuesExpr(vals: (number | string | boolean | DateTime)[], timeUnit: TimeUnit) {\n return vals.map(v => predicateValueExpr(v, timeUnit));\n}\n\n// This method is used by Voyager. Do not change its behavior without changing Voyager.\nexport function fieldFilterExpression(predicate: FieldPredicate, useInRange = true) {\n const {field} = predicate;\n const normalizedTimeUnit = normalizeTimeUnit(predicate.timeUnit);\n const {unit, binned} = normalizedTimeUnit || {};\n const rawFieldExpr = vgField(predicate, {expr: 'datum'});\n const fieldExpr = unit\n ? // For timeUnit, cast into integer with time() so we can use ===, inrange, indexOf to compare values directly.\n // TODO: We calculate timeUnit on the fly here. Consider if we would like to consolidate this with timeUnit pipeline\n // TODO: support utc\n `time(${!binned ? timeUnitFieldExpr(unit, field) : rawFieldExpr})`\n : rawFieldExpr;\n\n if (isFieldEqualPredicate(predicate)) {\n return `${fieldExpr}===${predicateValueExpr(predicate.equal, unit)}`;\n } else if (isFieldLTPredicate(predicate)) {\n const upper = predicate.lt;\n return `${fieldExpr}<${predicateValueExpr(upper, unit)}`;\n } else if (isFieldGTPredicate(predicate)) {\n const lower = predicate.gt;\n return `${fieldExpr}>${predicateValueExpr(lower, unit)}`;\n } else if (isFieldLTEPredicate(predicate)) {\n const upper = predicate.lte;\n return `${fieldExpr}<=${predicateValueExpr(upper, unit)}`;\n } else if (isFieldGTEPredicate(predicate)) {\n const lower = predicate.gte;\n return `${fieldExpr}>=${predicateValueExpr(lower, unit)}`;\n } else if (isFieldOneOfPredicate(predicate)) {\n return `indexof([${predicateValuesExpr(predicate.oneOf, unit).join(',')}], ${fieldExpr}) !== -1`;\n } else if (isFieldValidPredicate(predicate)) {\n return fieldValidPredicate(fieldExpr, predicate.valid);\n } else if (isFieldRangePredicate(predicate)) {\n const {range} = replaceExprRef(predicate);\n const lower = isSignalRef(range) ? {signal: `${range.signal}[0]`} : range[0];\n const upper = isSignalRef(range) ? {signal: `${range.signal}[1]`} : range[1];\n\n if (lower !== null && upper !== null && useInRange) {\n return (\n 'inrange(' + fieldExpr + ', [' + predicateValueExpr(lower, unit) + ', ' + predicateValueExpr(upper, unit) + '])'\n );\n }\n\n const exprs = [];\n if (lower !== null) {\n exprs.push(`${fieldExpr} >= ${predicateValueExpr(lower, unit)}`);\n }\n if (upper !== null) {\n exprs.push(`${fieldExpr} <= ${predicateValueExpr(upper, unit)}`);\n }\n\n return exprs.length > 0 ? exprs.join(' && ') : 'true';\n }\n\n /* istanbul ignore next: it should never reach here */\n throw new Error(`Invalid field predicate: ${stringify(predicate)}`);\n}\n\nexport function fieldValidPredicate(fieldExpr: string, valid = true) {\n if (valid) {\n return `isValid(${fieldExpr}) && isFinite(+${fieldExpr})`;\n } else {\n return `!isValid(${fieldExpr}) || !isFinite(+${fieldExpr})`;\n }\n}\n\nexport function normalizePredicate(f: Predicate): Predicate {\n if (isFieldPredicate(f) && f.timeUnit) {\n return {\n ...f,\n timeUnit: normalizeTimeUnit(f.timeUnit)\n };\n }\n return f;\n}\n", "import {hasOwnProperty} from 'vega-util';\nimport {keys} from './util';\n\n/**\n * Data type based on level of measurement\n */\nexport const Type = {\n quantitative: 'quantitative',\n ordinal: 'ordinal',\n temporal: 'temporal',\n nominal: 'nominal',\n geojson: 'geojson'\n} as const;\n\nexport type Type = keyof typeof Type;\n\nexport function isType(t: any): t is Type {\n return hasOwnProperty(Type, t);\n}\n\nexport function isContinuous(type: Type): type is 'quantitative' | 'temporal' {\n return type === 'quantitative' || type === 'temporal';\n}\nexport function isDiscrete(type: Type): type is 'ordinal' | 'nominal' {\n return type === 'ordinal' || type === 'nominal';\n}\n\nexport const QUANTITATIVE = Type.quantitative;\nexport const ORDINAL = Type.ordinal;\nexport const TEMPORAL = Type.temporal;\nexport const NOMINAL = Type.nominal;\n\nexport const GEOJSON = Type.geojson;\n\nexport type StandardType = 'quantitative' | 'ordinal' | 'temporal' | 'nominal';\n\nexport const TYPES = keys(Type);\n\n/**\n * Get full, lowercase type name for a given type.\n * @param type\n * @return Full type name.\n */\nexport function getFullName(type: Type | string): Type | undefined {\n if (type) {\n type = type.toLowerCase();\n switch (type) {\n case 'q':\n case QUANTITATIVE:\n return 'quantitative';\n case 't':\n case TEMPORAL:\n return 'temporal';\n case 'o':\n case ORDINAL:\n return 'ordinal';\n case 'n':\n case NOMINAL:\n return 'nominal';\n case GEOJSON:\n return 'geojson';\n }\n }\n // If we get invalid input, return undefined type.\n return undefined;\n}\n", "import type {\n ColorScheme,\n RangeEnum,\n ScaleBins,\n ScaleInterpolateEnum,\n ScaleInterpolateParams,\n SignalRef,\n TimeInterval,\n TimeIntervalStep\n} from 'vega';\nimport {isString, isObject} from 'vega-util';\nimport * as CHANNEL from './channel';\nimport {Channel, isColorChannel} from './channel';\nimport {DateTime} from './datetime';\nimport {ExprRef} from './expr';\nimport {ScaleInvalidDataConfigMixins} from './invalid';\nimport * as log from './log';\nimport {ParameterExtent} from './selection';\nimport {NOMINAL, ORDINAL, QUANTITATIVE, TEMPORAL, Type} from './type';\nimport {contains, Flag, hasProperty, keys} from './util';\n\nexport const ScaleType = {\n // Continuous - Quantitative\n LINEAR: 'linear',\n LOG: 'log',\n POW: 'pow',\n SQRT: 'sqrt',\n SYMLOG: 'symlog',\n\n IDENTITY: 'identity',\n SEQUENTIAL: 'sequential',\n\n // Continuous - Time\n TIME: 'time',\n UTC: 'utc',\n\n // Discretizing scales\n QUANTILE: 'quantile',\n QUANTIZE: 'quantize',\n THRESHOLD: 'threshold',\n BIN_ORDINAL: 'bin-ordinal',\n\n // Discrete scales\n ORDINAL: 'ordinal',\n POINT: 'point',\n BAND: 'band'\n} as const;\n\ntype ValueOf<T> = T[keyof T];\nexport type ScaleType = ValueOf<typeof ScaleType>;\n\n/**\n * Index for scale categories -- only scale of the same categories can be merged together.\n * Current implementation is trying to be conservative and avoid merging scale type that might not work together\n */\nexport const SCALE_CATEGORY_INDEX: Record<ScaleType, ScaleType | 'numeric' | 'ordinal-position' | 'discretizing'> = {\n linear: 'numeric',\n log: 'numeric',\n pow: 'numeric',\n sqrt: 'numeric',\n symlog: 'numeric',\n identity: 'numeric',\n sequential: 'numeric',\n time: 'time',\n utc: 'time',\n ordinal: 'ordinal',\n 'bin-ordinal': 'bin-ordinal', // TODO: should bin-ordinal support merging with other\n point: 'ordinal-position',\n band: 'ordinal-position',\n quantile: 'discretizing',\n quantize: 'discretizing',\n threshold: 'discretizing'\n};\n\nexport const SCALE_TYPES: ScaleType[] = keys(SCALE_CATEGORY_INDEX);\n\n/**\n * Whether the two given scale types can be merged together.\n */\nexport function scaleCompatible(scaleType1: ScaleType, scaleType2: ScaleType) {\n const scaleCategory1 = SCALE_CATEGORY_INDEX[scaleType1];\n const scaleCategory2 = SCALE_CATEGORY_INDEX[scaleType2];\n return (\n scaleCategory1 === scaleCategory2 ||\n (scaleCategory1 === 'ordinal-position' && scaleCategory2 === 'time') ||\n (scaleCategory2 === 'ordinal-position' && scaleCategory1 === 'time')\n );\n}\n\n/**\n * Index for scale precedence -- high score = higher priority for merging.\n */\nconst SCALE_PRECEDENCE_INDEX: Record<ScaleType, number> = {\n // numeric\n linear: 0,\n log: 1,\n pow: 1,\n sqrt: 1,\n symlog: 1,\n identity: 1,\n sequential: 1,\n // time\n time: 0,\n utc: 0,\n // ordinal-position -- these have higher precedence than continuous scales as they support more types of data\n point: 10,\n band: 11, // band has higher precedence as it is better for interaction\n // non grouped types\n ordinal: 0,\n 'bin-ordinal': 0,\n quantile: 0,\n quantize: 0,\n threshold: 0\n};\n\n/**\n * Return scale categories -- only scale of the same categories can be merged together.\n */\nexport function scaleTypePrecedence(scaleType: ScaleType): number {\n return SCALE_PRECEDENCE_INDEX[scaleType];\n}\n\nexport const QUANTITATIVE_SCALES = new Set<ScaleType>([\n 'linear',\n 'log',\n 'pow',\n 'sqrt',\n 'symlog'\n]) as ReadonlySet<ScaleType>;\n\nexport const CONTINUOUS_TO_CONTINUOUS_SCALES = new Set<ScaleType>([\n ...QUANTITATIVE_SCALES,\n 'time',\n 'utc'\n]) as ReadonlySet<ScaleType>;\n\nexport function isQuantitative(type: ScaleType): type is 'linear' | 'log' | 'pow' | 'sqrt' | 'symlog' {\n return QUANTITATIVE_SCALES.has(type);\n}\n\nexport const CONTINUOUS_TO_DISCRETE_SCALES = new Set<ScaleType>([\n 'quantile',\n 'quantize',\n 'threshold'\n]) as ReadonlySet<ScaleType>;\n\nexport const CONTINUOUS_DOMAIN_SCALES = new Set<ScaleType>([\n ...CONTINUOUS_TO_CONTINUOUS_SCALES,\n ...CONTINUOUS_TO_DISCRETE_SCALES,\n 'sequential',\n 'identity'\n]) as ReadonlySet<ScaleType>;\n\nexport const DISCRETE_DOMAIN_SCALES = new Set<ScaleType>([\n 'ordinal',\n 'bin-ordinal',\n 'point',\n 'band'\n]) as ReadonlySet<ScaleType>;\n\nexport const TIME_SCALE_TYPES = new Set<ScaleType>(['time', 'utc']) as ReadonlySet<ScaleType>;\n\nexport function hasDiscreteDomain(type: ScaleType): type is 'ordinal' | 'bin-ordinal' | 'point' | 'band' {\n return DISCRETE_DOMAIN_SCALES.has(type);\n}\n\nexport function hasContinuousDomain(\n type: ScaleType\n): type is 'linear' | 'log' | 'pow' | 'sqrt' | 'symlog' | 'time' | 'utc' | 'quantile' | 'quantize' | 'threshold' {\n return CONTINUOUS_DOMAIN_SCALES.has(type);\n}\n\nexport function isContinuousToContinuous(\n type: ScaleType\n): type is 'linear' | 'log' | 'pow' | 'sqrt' | 'symlog' | 'time' | 'utc' {\n return CONTINUOUS_TO_CONTINUOUS_SCALES.has(type);\n}\n\nexport function isContinuousToDiscrete(type: ScaleType): type is 'quantile' | 'quantize' | 'threshold' {\n return CONTINUOUS_TO_DISCRETE_SCALES.has(type);\n}\n\nexport interface ScaleConfig<ES extends ExprRef | SignalRef> extends ScaleInvalidDataConfigMixins {\n /**\n * If true, rounds numeric output values to integers.\n * This can be helpful for snapping to the pixel grid.\n * (Only available for `x`, `y`, and `size` scales.)\n */\n round?: boolean | ES;\n\n /**\n * If true, values that exceed the data domain are clamped to either the minimum or maximum range value\n */\n clamp?: boolean | ES;\n\n /**\n * Default inner padding for `x` and `y` band scales with nested `xOffset` and `yOffset` encoding.\n *\n * __Default value:__ `0.2`\n *\n * @minimum 0\n * @maximum 1\n */\n bandWithNestedOffsetPaddingInner?: number | ES;\n\n /**\n * Default outer padding for `x` and `y` band scales with nested `xOffset` and `yOffset` encoding.\n *\n * __Default value:__ `0.2`\n *\n * @minimum 0\n * @maximum 1\n */\n // Note: nested offset always uses band scale, so we don't need \"band\" in the name for brevity.\n bandWithNestedOffsetPaddingOuter?: number | ES;\n\n /**\n * Default inner padding for `x` and `y` band scales.\n *\n * __Default value:__\n * - `nestedOffsetPaddingInner` for x/y scales with nested x/y offset scales.\n * - `barBandPaddingInner` for bar marks (`0.1` by default)\n * - `rectBandPaddingInner` for rect and other marks (`0` by default)\n *\n * @minimum 0\n * @maximum 1\n */\n bandPaddingInner?: number | ES;\n\n /**\n * Default outer padding for `x` and `y` band scales.\n *\n * __Default value:__ `paddingInner/2` (which makes _width/height = number of unique values * step_)\n *\n * @minimum 0\n * @maximum 1\n */\n bandPaddingOuter?: number | ES;\n\n /**\n * Default inner padding for `x` and `y` band-ordinal scales of `\"bar\"` marks.\n *\n * __Default value:__ `0.1`\n *\n * @minimum 0\n * @maximum 1\n */\n barBandPaddingInner?: number | ES;\n\n /**\n * Default inner padding for `x` and `y` band-ordinal scales of `\"rect\"` marks.\n *\n * __Default value:__ `0`\n *\n * @minimum 0\n * @maximum 1\n */\n rectBandPaddingInner?: number | ES;\n\n /**\n * Default inner padding for `x` and `y` band-ordinal scales of `\"tick\"` marks.\n *\n * __Default value:__ `0.25`\n *\n * @minimum 0\n * @maximum 1\n */\n tickBandPaddingInner?: number | ES;\n\n /**\n * Default padding inner for xOffset/yOffset's band scales.\n *\n * __Default Value:__ `0`\n */\n offsetBandPaddingInner?: number | ES;\n\n /**\n * Default padding outer for xOffset/yOffset's band scales.\n *\n * __Default Value:__ `0`\n */\n offsetBandPaddingOuter?: number | ES;\n\n /**\n * Default padding for continuous x/y scales.\n *\n * __Default:__ The bar width for continuous x-scale of a vertical bar and continuous y-scale of a horizontal bar.; `0` otherwise.\n *\n * @minimum 0\n */\n continuousPadding?: number | ES;\n\n /**\n * Default outer padding for `x` and `y` point-ordinal scales.\n *\n * __Default value:__ `0.5` (which makes _width/height = number of unique values * step_)\n *\n * @minimum 0\n * @maximum 1\n */\n pointPadding?: number | ES;\n\n /**\n * Use the source data range before aggregation as scale domain instead of aggregated data for aggregate axis.\n *\n * This is equivalent to setting `domain` to `\"unaggregate\"` for aggregated _quantitative_ fields by default.\n *\n * This property only works with aggregate functions that produce values within the raw data domain (`\"mean\"`, `\"average\"`, `\"median\"`, `\"q1\"`, `\"q3\"`, `\"min\"`, `\"max\"`). For other aggregations that produce values outside of the raw data domain (e.g. `\"count\"`, `\"sum\"`), this property is ignored.\n *\n * __Default value:__ `false`\n */\n useUnaggregatedDomain?: boolean;\n\n // nice should depends on type (quantitative or temporal), so\n // let's not make a config.\n\n // Configs for Range\n\n /**\n * The default max value for mapping quantitative fields to bar's size/bandSize.\n *\n * If undefined (default), we will use the axis's size (width or height) - 1.\n * @minimum 0\n */\n maxBandSize?: number;\n\n /**\n * The default min value for mapping quantitative fields to bar and tick's size/bandSize scale.\n *\n * __Default value:__ `2`\n *\n * @minimum 0\n */\n minBandSize?: number;\n\n /**\n * The default max value for mapping quantitative fields to text's size/fontSize scale.\n *\n * __Default value:__ `40`\n *\n * @minimum 0\n */\n maxFontSize?: number;\n\n /**\n * The default min value for mapping quantitative fields to text's size/fontSize scale.\n *\n * __Default value:__ `8`\n *\n * @minimum 0\n */\n minFontSize?: number;\n\n /**\n * Default minimum opacity for mapping a field to opacity.\n *\n * __Default value:__ `0.3`\n *\n * @minimum 0\n * @maximum 1\n */\n minOpacity?: number;\n\n /**\n * Default max opacity for mapping a field to opacity.\n *\n * __Default value:__ `0.8`\n *\n * @minimum 0\n * @maximum 1\n */\n maxOpacity?: number;\n\n /**\n * Default minimum value for point size scale.\n *\n * __Default value:__ `9`\n *\n * @minimum 0\n */\n minSize?: number;\n\n /**\n * Default max value for point size scale.\n * @minimum 0\n */\n maxSize?: number;\n\n /**\n * Default minimum strokeWidth for the scale of strokeWidth for rule and line marks and of size for trail marks.\n *\n * __Default value:__ `1`\n *\n * @minimum 0\n */\n minStrokeWidth?: number;\n\n /**\n * Default max strokeWidth for the scale of strokeWidth for rule and line marks and of size for trail marks.\n *\n * __Default value:__ `4`\n *\n * @minimum 0\n */\n maxStrokeWidth?: number;\n\n /**\n * Default range cardinality for [`quantile`](https://vega.github.io/vega-lite/docs/scale.html#quantile) scale.\n *\n * __Default value:__ `4`\n *\n * @minimum 0\n */\n quantileCount?: number;\n\n /**\n * Default range cardinality for [`quantize`](https://vega.github.io/vega-lite/docs/scale.html#quantize) scale.\n *\n * __Default value:__ `4`\n *\n * @minimum 0\n */\n quantizeCount?: number;\n\n /**\n * Reverse x-scale by default (useful for right-to-left charts).\n */\n xReverse?: boolean | ES;\n\n /**\n * Default `scale.zero` for [`continuous`](https://vega.github.io/vega-lite/docs/scale.html#continuous) scales except for (1) x/y-scales of non-ranged bar or area charts and (2) size scales.\n *\n * __Default value:__ `true`\n *\n */\n zero?: boolean;\n\n /**\n * Default framerate (frames per second) for time [`band`](https://vega.github.io/vega-lite/docs/scale.html#band) scales.\n *\n * __Default value:__ `2`\n *\n */\n framesPerSecond?: number;\n\n /**\n * Default animation duration (in seconds) for time encodings, except for [`band`](https://vega.github.io/vega-lite/docs/scale.html#band) scales.\n *\n * __Default value:__ `5`\n *\n */\n animationDuration?: number;\n}\n\nexport const defaultScaleConfig: ScaleConfig<SignalRef> = {\n pointPadding: 0.5,\n\n barBandPaddingInner: 0.1,\n rectBandPaddingInner: 0,\n tickBandPaddingInner: 0.25,\n\n bandWithNestedOffsetPaddingInner: 0.2,\n bandWithNestedOffsetPaddingOuter: 0.2,\n\n minBandSize: 2,\n\n minFontSize: 8,\n maxFontSize: 40,\n\n minOpacity: 0.3,\n maxOpacity: 0.8,\n\n // FIXME: revise if these *can* become ratios of width/height step\n minSize: 4, // Point size is area. For square point, 9 = 3 pixel ^ 2, not too small!\n\n minStrokeWidth: 1,\n maxStrokeWidth: 4,\n quantileCount: 4,\n quantizeCount: 4,\n\n zero: true,\n\n framesPerSecond: 2,\n animationDuration: 5\n};\n\nexport interface SchemeParams {\n /**\n * A color scheme name for ordinal scales (e.g., `\"category10\"` or `\"blues\"`).\n *\n * For the full list of supported schemes, please refer to the [Vega Scheme](https://vega.github.io/vega/docs/schemes/#reference) reference.\n */\n name: ColorScheme | SignalRef;\n\n /**\n * The extent of the color range to use. For example `[0.2, 1]` will rescale the color scheme such that color values in the range _[0, 0.2)_ are excluded from the scheme.\n */\n extent?: (number | SignalRef)[] | SignalRef;\n\n /**\n * The number of colors to use in the scheme. This can be useful for scale types such as `\"quantize\"`, which use the length of the scale range to determine the number of discrete bins for the scale domain.\n */\n count?: number | SignalRef;\n}\n\nexport type Domain =\n | (null | string | number | boolean | DateTime | SignalRef)[]\n | 'unaggregated'\n | ParameterExtent\n | SignalRef\n | DomainUnionWith;\n\nexport type Scheme = string | SchemeParams;\n\nexport function isExtendedScheme(scheme: Scheme | SignalRef): scheme is SchemeParams {\n return !isString(scheme) && hasProperty(scheme, 'name');\n}\n\nexport function isParameterDomain(domain: Domain): domain is ParameterExtent {\n return hasProperty(domain, 'param');\n}\n\nexport interface DomainUnionWith {\n /**\n * Customized domain values to be union with the field's values or explicitly defined domain.\n * Should be an array of valid scale domain values.\n */\n unionWith: (number | string | boolean | DateTime)[];\n}\n\nexport function isDomainUnionWith(domain: Domain): domain is DomainUnionWith {\n return hasProperty(domain, 'unionWith');\n}\n\nexport interface FieldRange {\n field: string;\n}\n\nexport function isFieldRange(range: any): range is FieldRange {\n return isObject(range) && 'field' in range;\n}\n\nexport interface Scale<ES extends ExprRef | SignalRef = ExprRef | SignalRef> {\n /**\n * The type of scale. Vega-Lite supports the following categories of scale types:\n *\n * 1) [**Continuous Scales**](https://vega.github.io/vega-lite/docs/scale.html#continuous) -- mapping continuous domains to continuous output ranges ([`\"linear\"`](https://vega.github.io/vega-lite/docs/scale.html#linear), [`\"pow\"`](https://vega.github.io/vega-lite/docs/scale.html#pow), [`\"sqrt\"`](https://vega.github.io/vega-lite/docs/scale.html#sqrt), [`\"symlog\"`](https://vega.github.io/vega-lite/docs/scale.html#symlog), [`\"log\"`](https://vega.github.io/vega-lite/docs/scale.html#log), [`\"time\"`](https://vega.github.io/vega-lite/docs/scale.html#time), [`\"utc\"`](https://vega.github.io/vega-lite/docs/scale.html#utc).\n *\n * 2) [**Discrete Scales**](https://vega.github.io/vega-lite/docs/scale.html#discrete) -- mapping discrete domains to discrete ([`\"ordinal\"`](https://vega.github.io/vega-lite/docs/scale.html#ordinal)) or continuous ([`\"band\"`](https://vega.github.io/vega-lite/docs/scale.html#band) and [`\"point\"`](https://vega.github.io/vega-lite/docs/scale.html#point)) output ranges.\n *\n * 3) [**Discretizing Scales**](https://vega.github.io/vega-lite/docs/scale.html#discretizing) -- mapping continuous domains to discrete output ranges [`\"bin-ordinal\"`](https://vega.github.io/vega-lite/docs/scale.html#bin-ordinal), [`\"quantile\"`](https://vega.github.io/vega-lite/docs/scale.html#quantile), [`\"quantize\"`](https://vega.github.io/vega-lite/docs/scale.html#quantize) and [`\"threshold\"`](https://vega.github.io/vega-lite/docs/scale.html#threshold).\n *\n * __Default value:__ please see the [scale type table](https://vega.github.io/vega-lite/docs/scale.html#type).\n */\n type?: ScaleType;\n\n /**\n * Customized domain values in the form of constant values or dynamic values driven by a parameter.\n *\n * 1) Constant `domain` for _quantitative_ fields can take one of the following forms:\n *\n * - A two-element array with minimum and maximum values. To create a diverging scale, this two-element array can be combined with the `domainMid` property.\n * - An array with more than two entries, for [Piecewise quantitative scales](https://vega.github.io/vega-lite/docs/scale.html#piecewise).\n * - A string value `\"unaggregated\"`, if the input field is aggregated, to indicate that the domain should include the raw data values prior to the aggregation.\n *\n * 2) Constant `domain` for _temporal_ fields can be a two-element array with minimum and maximum values, in the form of either timestamps or the [DateTime definition objects](https://vega.github.io/vega-lite/docs/types.html#datetime).\n *\n * 3) Constant `domain` for _ordinal_ and _nominal_ fields can be an array that lists valid input values.\n *\n * 4) To combine (union) specified constant domain with the field's values, `domain` can be an object with a `unionWith` property that specify constant domain to be combined. For example, `domain: {unionWith: [0, 100]}` for a quantitative scale means that the scale domain always includes `[0, 100]`, but will include other values in the fields beyond `[0, 100]`.\n *\n * 5) Domain can also takes an object defining a field or encoding of a parameter that [interactively determines](https://vega.github.io/vega-lite/docs/selection.html#scale-domains) the scale domain.\n */\n domain?:\n | (null | string | number | boolean | DateTime | ES)[]\n | 'unaggregated'\n | ParameterExtent\n | DomainUnionWith\n | ES;\n\n /**\n * An expression for an array of raw values that, if non-null, directly overrides the _domain_ property.\n * This is useful for supporting interactions such as panning or zooming a scale.\n * The scale may be initially determined using a data-driven domain, then modified in response to user input by setting the rawDomain value.\n */\n domainRaw?: ES;\n\n /**\n * Inserts a single mid-point value into a two-element domain. The mid-point value must lie between the domain minimum and maximum values. This property can be useful for setting a midpoint for [diverging color scales](https://vega.github.io/vega-lite/docs/scale.html#piecewise). The domainMid property is only intended for use with scales supporting continuous, piecewise domains.\n */\n domainMid?: number | ES;\n\n /**\n * Sets the maximum value in the scale domain, overriding the `domain` property. This property is only intended for use with scales having continuous domains.\n */\n domainMax?: number | DateTime | ES;\n\n /**\n * Sets the minimum value in the scale domain, overriding the domain property. This property is only intended for use with scales having continuous domains.\n */\n domainMin?: number | DateTime | ES;\n\n /**\n * If true, reverses the order of the scale range.\n * __Default value:__ `false`.\n */\n reverse?: boolean | ES;\n\n /**\n * The range of the scale. One of:\n *\n * - A string indicating a [pre-defined named scale range](https://vega.github.io/vega-lite/docs/scale.html#range-config) (e.g., example, `\"symbol\"`, or `\"diverging\"`).\n *\n * - For [continuous scales](https://vega.github.io/vega-lite/docs/scale.html#continuous), two-element array indicating minimum and maximum values, or an array with more than two entries for specifying a [piecewise scale](https://vega.github.io/vega-lite/docs/scale.html#piecewise).\n *\n * - For [discrete](https://vega.github.io/vega-lite/docs/scale.html#discrete) and [discretizing](https://vega.github.io/vega-lite/docs/scale.html#discretizing) scales, an array of desired output values or an object with a `field` property representing the range values. For example, if a field `color` contains CSS color names, we can set `range` to `{field: \"color\"}`.\n *\n * __Notes:__\n *\n * 1) For color scales you can also specify a color [`scheme`](https://vega.github.io/vega-lite/docs/scale.html#scheme) instead of `range`.\n *\n * 2) Any directly specified `range` for `x` and `y` channels will be ignored. Range can be customized via the view's corresponding [size](https://vega.github.io/vega-lite/docs/size.html) (`width` and `height`).\n */\n range?: RangeEnum | (number | string | number[] | ES)[] | FieldRange;\n\n /**\n * Sets the maximum value in the scale range, overriding the `range` property or the default range. This property is only intended for use with scales having continuous ranges.\n */\n rangeMax?: number | string | ES;\n\n /**\n * Sets the minimum value in the scale range, overriding the `range` property or the default range. This property is only intended for use with scales having continuous ranges.\n */\n rangeMin?: number | string | ES;\n\n // ordinal\n\n /**\n * A string indicating a color [scheme](https://vega.github.io/vega-lite/docs/scale.html#scheme) name (e.g., `\"category10\"` or `\"blues\"`) or a [scheme parameter object](https://vega.github.io/vega-lite/docs/scale.html#scheme-params).\n *\n * Discrete color schemes may be used with [discrete](https://vega.github.io/vega-lite/docs/scale.html#discrete) or [discretizing](https://vega.github.io/vega-lite/docs/scale.html#discretizing) scales. Continuous color schemes are intended for use with color scales.\n *\n * To set a custom scheme, instead set the list of values [as the scale range](https://vega.github.io/vega-lite/docs/scale.html#2-setting-the-range-property-to-an-array-of-valid-css-color-strings).\n *\n * For the full list of supported schemes, please refer to the [Vega Scheme](https://vega.github.io/vega/docs/schemes/#reference) reference.\n */\n scheme?: ColorScheme | SchemeParams | ES;\n\n /**\n * The alignment of the steps within the scale range.\n *\n * This value must lie in the range `[0,1]`. A value of `0.5` indicates that the steps should be centered within the range. A value of `0` or `1` may be used to shift the bands to one side, say to position them adjacent to an axis.\n *\n * __Default value:__ `0.5`\n */\n align?: number | ES;\n\n /**\n * Bin boundaries can be provided to scales as either an explicit array of bin boundaries or as a bin specification object. The legal values are:\n * - An [array](../types/#Array) literal of bin boundary values. For example, `[0, 5, 10, 15, 20]`. The array must include both starting and ending boundaries. The previous example uses five values to indicate a total of four bin intervals: [0-5), [5-10), [10-15), [15-20]. Array literals may include signal references as elements.\n * - A [bin specification object](https://vega.github.io/vega-lite/docs/scale.html#bins) that indicates the bin _step_ size, and optionally the _start_ and _stop_ boundaries.\n * - An array of bin boundaries over the scale domain. If provided, axes and legends will use the bin boundaries to inform the choice of tick marks and text labels.\n */\n // TODO: add - A [signal reference](../types/#Signal) that resolves to either an array or bin specification object.\n bins?: ScaleBins;\n\n /**\n * If `true`, rounds numeric output values to integers. This can be helpful for snapping to the pixel grid.\n *\n * __Default value:__ `false`.\n */\n round?: boolean | ES;\n\n /**\n * For _[continuous](https://vega.github.io/vega-lite/docs/scale.html#continuous)_ scales, expands the scale domain to accommodate the specified number of pixels on each of the scale range. The scale range must represent pixels for this parameter to function as intended. Padding adjustment is performed\u00A0prior\u00A0to all other adjustments, including the effects of the\u00A0`zero`,\u00A0`nice`,\u00A0`domainMin`, and\u00A0`domainMax`\u00A0properties.\n *\n * For _[band](https://vega.github.io/vega-lite/docs/scale.html#band)_ scales, shortcut for setting `paddingInner` and `paddingOuter` to the same value.\n *\n * For _[point](https://vega.github.io/vega-lite/docs/scale.html#point)_ scales, alias for `paddingOuter`.\n *\n * __Default value:__ For _continuous_ scales, derived from the [scale config](https://vega.github.io/vega-lite/docs/scale.html#config)'s `continuousPadding`.\n * For _band and point_ scales, see `paddingInner` and `paddingOuter`. By default, Vega-Lite sets padding such that _width/height = number of unique values * step_.\n *\n * @minimum 0\n */\n padding?: number | ES;\n\n /**\n * The inner padding (spacing) within each band step of band scales, as a fraction of the step size. This value must lie in the range [0,1].\n *\n * For point scale, this property is invalid as point scales do not have internal band widths (only step sizes between bands).\n *\n * __Default value:__ derived from the [scale config](https://vega.github.io/vega-lite/docs/scale.html#config)'s `bandPaddingInner`.\n *\n * @minimum 0\n * @maximum 1\n */\n paddingInner?: number | ES;\n\n /**\n * The outer padding (spacing) at the ends of the range of band and point scales,\n * as a fraction of the step size. This value must lie in the range [0,1].\n *\n * __Default value:__ derived from the [scale config](https://vega.github.io/vega-lite/docs/scale.html#config)'s `bandPaddingOuter` for band scales and `pointPadding` for point scales.\n * By default, Vega-Lite sets outer padding such that _width/height = number of unique values * step_.\n *\n * @minimum 0\n * @maximum 1\n */\n paddingOuter?: number | ES;\n\n // typical\n /**\n * If `true`, values that exceed the data domain are clamped to either the minimum or maximum range value\n *\n * __Default value:__ derived from the [scale config](https://vega.github.io/vega-lite/docs/config.html#scale-config)'s `clamp` (`true` by default).\n */\n clamp?: boolean | ES;\n\n /**\n * Extending the domain so that it starts and ends on nice round values. This method typically modifies the scale\u2019s domain, and may only extend the bounds to the nearest round value. Nicing is useful if the domain is computed from data and may be irregular. For example, for a domain of _[0.201479\u2026, 0.996679\u2026]_, a nice domain might be _[0.2, 1.0]_.\n *\n * For quantitative scales such as linear, `nice` can be either a boolean flag or a number. If `nice` is a number, it will represent a desired tick count. This allows greater control over the step size used to extend the bounds, guaranteeing that the returned ticks will exactly cover the domain.\n *\n * For temporal fields with time and utc scales, the `nice` value can be a string indicating the desired time interval. Legal values are `\"millisecond\"`, `\"second\"`, `\"minute\"`, `\"hour\"`, `\"day\"`, `\"week\"`, `\"month\"`, and `\"year\"`. Alternatively, `time` and `utc` scales can accept an object-valued interval specifier of the form `{\"interval\": \"month\", \"step\": 3}`, which includes a desired number of interval steps. Here, the domain would snap to quarter (Jan, Apr, Jul, Oct) boundaries.\n *\n * __Default value:__ `true` for unbinned _quantitative_ fields without explicit domain bounds; `false` otherwise.\n *\n */\n nice?: boolean | number | TimeInterval | TimeIntervalStep | ES;\n\n /**\n * The logarithm base of the `log` scale (default `10`).\n */\n base?: number | ES;\n\n /**\n * The exponent of the `pow` scale.\n */\n exponent?: number | ES;\n\n /**\n * A constant determining the slope of the symlog function around zero. Only used for `symlog` scales.\n *\n * __Default value:__ `1`\n */\n constant?: number | ES;\n\n /**\n * If `true`, ensures that a zero baseline value is included in the scale domain.\n *\n * __Default value:__ `true` for x and y channels if the quantitative field is not binned and no custom `domain` is provided; `false` otherwise.\n *\n * __Note:__ Log, time, and utc scales do not support `zero`.\n */\n zero?: boolean | ES;\n\n /**\n * The interpolation method for range values. By default, a general interpolator for numbers, dates, strings and colors (in HCL space) is used. For color ranges, this property allows interpolation in alternative color spaces. Legal values include `rgb`, `hsl`, `hsl-long`, `lab`, `hcl`, `hcl-long`, `cubehelix` and `cubehelix-long` ('-long' variants use longer paths in polar coordinate spaces). If object-valued, this property accepts an object with a string-valued _type_ property and an optional numeric _gamma_ property applicable to rgb and cubehelix interpolators. For more, see the [d3-interpolate documentation](https://github.com/d3/d3-interpolate).\n *\n * * __Default value:__ `hcl`\n */\n interpolate?: ScaleInterpolateEnum | ES | ScaleInterpolateParams;\n}\n\nconst SCALE_PROPERTY_INDEX: Flag<keyof Scale<any>> = {\n type: 1,\n domain: 1,\n domainMax: 1,\n domainMin: 1,\n domainMid: 1,\n domainRaw: 1,\n align: 1,\n range: 1,\n rangeMax: 1,\n rangeMin: 1,\n scheme: 1,\n bins: 1,\n // Other properties\n reverse: 1,\n round: 1,\n // quantitative / time\n clamp: 1,\n nice: 1,\n // quantitative\n base: 1,\n exponent: 1,\n constant: 1,\n interpolate: 1,\n zero: 1, // zero depends on domain\n // band/point\n padding: 1,\n paddingInner: 1,\n paddingOuter: 1\n};\n\nexport const SCALE_PROPERTIES = keys(SCALE_PROPERTY_INDEX);\n\nconst {type, domain, range, rangeMax, rangeMin, scheme, ...NON_TYPE_DOMAIN_RANGE_VEGA_SCALE_PROPERTY_INDEX} =\n SCALE_PROPERTY_INDEX;\n\nexport const NON_TYPE_DOMAIN_RANGE_VEGA_SCALE_PROPERTIES = keys(NON_TYPE_DOMAIN_RANGE_VEGA_SCALE_PROPERTY_INDEX);\n\nexport function scaleTypeSupportProperty(scaleType: ScaleType, propName: keyof Scale): boolean {\n switch (propName) {\n case 'type':\n case 'domain':\n case 'reverse':\n case 'range':\n return true;\n case 'scheme':\n case 'interpolate':\n return !['point', 'band', 'identity'].includes(scaleType);\n case 'bins':\n return !['point', 'band', 'identity', 'ordinal'].includes(scaleType);\n case 'round':\n return isContinuousToContinuous(scaleType) || scaleType === 'band' || scaleType === 'point';\n case 'padding':\n case 'rangeMin':\n case 'rangeMax':\n return isContinuousToContinuous(scaleType) || ['point', 'band'].includes(scaleType);\n case 'paddingOuter':\n case 'align':\n return ['point', 'band'].includes(scaleType);\n case 'paddingInner':\n return scaleType === 'band';\n case 'domainMax':\n case 'domainMid':\n case 'domainMin':\n case 'domainRaw':\n case 'clamp':\n return isContinuousToContinuous(scaleType);\n case 'nice':\n return isContinuousToContinuous(scaleType) || scaleType === 'quantize' || scaleType === 'threshold';\n case 'exponent':\n return scaleType === 'pow';\n case 'base':\n return scaleType === 'log';\n case 'constant':\n return scaleType === 'symlog';\n case 'zero':\n return (\n hasContinuousDomain(scaleType) &&\n !contains(\n [\n 'log', // log scale cannot have zero value\n 'time',\n 'utc', // zero is not meaningful for time\n 'threshold', // threshold requires custom domain so zero does not matter\n 'quantile' // quantile depends on distribution so zero does not matter\n ],\n scaleType\n )\n );\n }\n}\n\n/**\n * Returns undefined if the input channel supports the input scale property name\n */\nexport function channelScalePropertyIncompatability(channel: Channel, propName: keyof Scale): string {\n switch (propName) {\n case 'interpolate':\n case 'scheme':\n case 'domainMid':\n if (!isColorChannel(channel)) {\n return log.message.cannotUseScalePropertyWithNonColor(propName);\n }\n return undefined;\n case 'align':\n case 'type':\n case 'bins':\n case 'domain':\n case 'domainMax':\n case 'domainMin':\n case 'domainRaw':\n case 'range':\n case 'base':\n case 'exponent':\n case 'constant':\n case 'nice':\n case 'padding':\n case 'paddingInner':\n case 'paddingOuter':\n case 'rangeMax':\n case 'rangeMin':\n case 'reverse':\n case 'round':\n case 'clamp':\n case 'zero':\n return undefined; // GOOD!\n }\n}\n\nexport function scaleTypeSupportDataType(specifiedType: ScaleType, fieldDefType: Type): boolean {\n if (contains([ORDINAL, NOMINAL], fieldDefType)) {\n return specifiedType === undefined || hasDiscreteDomain(specifiedType);\n } else if (fieldDefType === TEMPORAL) {\n return contains([ScaleType.TIME, ScaleType.UTC, undefined], specifiedType);\n } else if (fieldDefType === QUANTITATIVE) {\n return isQuantitative(specifiedType) || isContinuousToDiscrete(specifiedType) || specifiedType === undefined;\n }\n\n return true;\n}\n\nexport function channelSupportScaleType(channel: Channel, scaleType: ScaleType, hasNestedOffsetScale = false): boolean {\n if (!CHANNEL.isScaleChannel(channel)) {\n return false;\n }\n switch (channel) {\n case CHANNEL.X:\n case CHANNEL.Y:\n case CHANNEL.XOFFSET:\n case CHANNEL.YOFFSET:\n case CHANNEL.THETA:\n case CHANNEL.RADIUS:\n if (isContinuousToContinuous(scaleType)) {\n return true;\n } else if (scaleType === 'band') {\n return true;\n } else if (scaleType === 'point') {\n /*\n Point scale can't be use if the position has a nested offset scale\n because if there is a nested scale, then it's band.\n */\n return !hasNestedOffsetScale;\n }\n return false;\n case CHANNEL.TIME:\n return contains(['linear', 'band'], scaleType);\n case CHANNEL.SIZE: // TODO: size and opacity can support ordinal with more modification\n case CHANNEL.STROKEWIDTH:\n case CHANNEL.OPACITY:\n case CHANNEL.FILLOPACITY:\n case CHANNEL.STROKEOPACITY:\n case CHANNEL.ANGLE:\n // Although it generally doesn't make sense to use band with size and opacity,\n // it can also work since we use band: 0.5 to get midpoint.\n return (\n isContinuousToContinuous(scaleType) ||\n isContinuousToDiscrete(scaleType) ||\n contains(['band', 'point', 'ordinal'], scaleType)\n );\n case CHANNEL.COLOR:\n case CHANNEL.FILL:\n case CHANNEL.STROKE:\n return scaleType !== 'band'; // band does not make sense with color\n case CHANNEL.STROKEDASH:\n case CHANNEL.SHAPE:\n return scaleType === 'ordinal' || isContinuousToDiscrete(scaleType);\n }\n}\n", "import type {SignalRef} from 'vega';\nimport {ScaleChannel} from './channel';\nimport {Mark, MarkDef} from './mark';\nimport {isObject} from 'vega-util';\n\n/**\n * Mixins for Vega-Lite Spec's Mark Definiton (to add mark.invalid)\n */\nexport interface MarkInvalidMixins {\n /**\n * Invalid data mode, which defines how the marks and corresponding scales should represent invalid values (`null` and `NaN` in continuous scales *without* defined output for invalid values).\n *\n * - `\"filter\"` \u2014 *Exclude* all invalid values from the visualization's *marks* and *scales*.\n * For path marks (for line, area, trail), this option will create paths that connect valid points, as if the data rows with invalid values do not exist.\n *\n * - `\"break-paths-filter-domains\"` \u2014\n * Break path marks (for line, area, trail) at invalid values. For non-path marks, this is equivalent to `\"filter\"`.\n * All *scale* domains will *exclude* these filtered data points.\n *\n * - `\"break-paths-show-domains\"` \u2014\n * Break paths (for line, area, trail) at invalid values. Hide invalid values for non-path marks.\n * All *scale* domains will *include* these filtered data points (for both path and non-path marks).\n *\n * - `\"show\"` or `null` \u2014\n * Show all data points in the marks and scale domains. Each scale will use the output for invalid values defined in `config.scale.invalid`\n * or, if unspecified, by default invalid values will produce the same visual values as zero (if the scale includes zero) or the minimum value (if the scale does not include zero).\n *\n * - `\"break-paths-show-path-domains\"` (default) \u2014\n * This is equivalent to `\"break-paths-show-domains\"` for path-based marks (line/area/trail)\n * and `\"filter\"` for non-path marks.\n *\n * __Note__: If any channel's scale has an output for invalid values defined in `config.scale.invalid`,\n * all values for the scales will be considered \"valid\" since they can produce a reasonable output for the scales.\n * Thus, fields for such channels will not be filtered and will not cause path breaks.\n */\n invalid?: MarkInvalidDataMode | null;\n}\n\nexport type MarkInvalidDataMode =\n | 'filter'\n | 'break-paths-filter-domains'\n | 'break-paths-show-domains'\n | 'break-paths-show-path-domains'\n | 'show';\n\n/**\n * Mixins for Vega-Lite Spec's config.scale\n */\nexport interface ScaleInvalidDataConfigMixins {\n /**\n * An object that defines scale outputs per channel for invalid values (nulls and NaNs on a continuous scale).\n * - The keys in this object are the scale channels.\n * - The values is either `\"zero-or-min\"` (use zero if the scale includes zero or min value otherwise) or a value definition `{value: ...}`.\n *\n * _Example:_ Setting this `config.scale.invalid` property to `{color: {value: '#aaa'}}`\n * will make the visualization color all invalid values with '#aaa'.\n *\n * See [https://vega.github.io/vega-lite/docs/invalid-data.html](Invalid Data Docs) for more details.\n */\n invalid?: ScaleInvalidDataConfig;\n}\n\nexport type ScaleInvalidDataConfig = {\n [c in ScaleChannel]?: ScaleInvalidDataShowAs<c>;\n};\n\nexport type ScaleInvalidDataShowAs<C extends ScaleChannel> = ScaleInvalidDataShowAsValue<C> | 'zero-or-min';\n\nexport type ScaleInvalidDataShowAsValue<C extends ScaleChannel> = {\n value: MarkDef<Mark, SignalRef>[C];\n};\n\nexport function isScaleInvalidDataIncludeAsValue<C extends ScaleChannel>(\n invalidDataMode: ScaleInvalidDataShowAs<C>\n): invalidDataMode is ScaleInvalidDataShowAsValue<C> {\n return isObject(invalidDataMode) && 'value' in invalidDataMode;\n}\n", "import type {Align, Color, Gradient, Orientation, SignalRef, TextBaseline, MarkConfig as VgMarkConfig} from 'vega';\nimport {hasOwnProperty} from 'vega-util';\nimport {CompositeMark, CompositeMarkDef} from './compositemark';\nimport {ExprRef} from './expr';\nimport {MarkInvalidMixins} from './invalid';\nimport {Flag, hasProperty, keys} from './util';\nimport {MapExcludeValueRefAndReplaceSignalWith} from './vega.schema';\n\n/**\n * All types of primitive marks.\n */\nexport const Mark = {\n arc: 'arc',\n area: 'area',\n bar: 'bar',\n image: 'image',\n line: 'line',\n point: 'point',\n rect: 'rect',\n rule: 'rule',\n text: 'text',\n tick: 'tick',\n trail: 'trail',\n circle: 'circle',\n square: 'square',\n geoshape: 'geoshape'\n} as const;\n\nexport const ARC = Mark.arc;\nexport const AREA = Mark.area;\nexport const BAR = Mark.bar;\nexport const IMAGE = Mark.image;\nexport const LINE = Mark.line;\nexport const POINT = Mark.point;\nexport const RECT = Mark.rect;\nexport const RULE = Mark.rule;\nexport const TEXT = Mark.text;\nexport const TICK = Mark.tick;\nexport const TRAIL = Mark.trail;\nexport const CIRCLE = Mark.circle;\nexport const SQUARE = Mark.square;\nexport const GEOSHAPE = Mark.geoshape;\n\nexport type Mark = keyof typeof Mark;\n\nexport function isMark(m: string): m is Mark {\n return hasOwnProperty(Mark, m);\n}\n\nexport const PATH_MARKS = ['line', 'area', 'trail'] as const;\n\nexport type PathMark = (typeof PATH_MARKS)[number];\n\nexport function isPathMark(m: Mark | CompositeMark): m is PathMark {\n return ['line', 'area', 'trail'].includes(m);\n}\n\nexport function isRectBasedMark(m: Mark | CompositeMark): m is 'rect' | 'bar' | 'image' | 'arc' | 'tick' {\n return ['rect', 'bar', 'image', 'arc', 'tick' /* arc is rect/interval in polar coordinate */].includes(m);\n}\n\nexport const PRIMITIVE_MARKS = new Set(keys(Mark));\n\nexport interface ColorMixins<ES extends ExprRef | SignalRef> {\n /**\n * Default color.\n *\n * __Default value:__ <span style=\"color: #4682b4;\">■</span> `\"#4682b4\"`\n *\n * __Note:__\n * - This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).\n * - The `fill` and `stroke` properties have higher precedence than `color` and will override `color`.\n */\n color?: Color | Gradient | ES;\n}\n\nexport interface TooltipContent {\n content: 'encoding' | 'data';\n}\n\nexport interface VLOnlyMarkConfig<ES extends ExprRef | SignalRef> extends ColorMixins<ES>, MarkInvalidMixins {\n /**\n * Whether the mark's color should be used as fill color instead of stroke color.\n *\n * __Default value:__ `false` for all `point`, `line`, and `rule` marks as well as `geoshape` marks for [`graticule`](https://vega.github.io/vega-lite/docs/data.html#graticule) data sources; otherwise, `true`.\n *\n * __Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).\n *\n */\n filled?: boolean;\n\n /**\n * For line and trail marks, this `order` property can be set to `null` or `false` to make the lines use the original order in the data sources.\n */\n order?: null | boolean;\n\n /**\n * Default relative band position for a time unit. If set to `0`, the marks will be positioned at the beginning of the time unit band step.\n * If set to `0.5`, the marks will be positioned in the middle of the time unit band step.\n */\n timeUnitBandPosition?: number;\n\n /**\n * Default relative band size for a time unit. If set to `1`, the bandwidth of the marks will be equal to the time unit band step.\n * If set to `0.5`, bandwidth of the marks will be half of the time unit band step.\n */\n timeUnitBandSize?: number;\n\n /**\n * The end angle of arc marks in radians. A value of 0 indicates up or \u201Cnorth\u201D, increasing values proceed clockwise.\n */\n theta2?: number | ES; // In Vega, this is called endAngle\n\n /**\n * The secondary (inner) radius in pixels of arc marks.\n *\n * __Default value:__ `0`\n * @minimum 0\n */\n radius2?: number | ES; // In Vega, this is called innerRadius\n}\n\nexport interface MarkConfig<ES extends ExprRef | SignalRef>\n extends VLOnlyMarkConfig<ES>,\n MapExcludeValueRefAndReplaceSignalWith<Omit<VgMarkConfig, 'tooltip' | 'fill' | 'stroke'>, ES> {\n // ========== Overriding Vega ==========\n\n /**\n * The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n *\n * - If `tooltip` is `true` or `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used.\n * - If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used.\n * - If set to `null` or `false`, then no tooltip will be used.\n *\n * See the [`tooltip`](https://vega.github.io/vega-lite/docs/tooltip.html) documentation for a detailed discussion about tooltip in Vega-Lite.\n *\n * __Default value:__ `null`\n */\n tooltip?: number | string | boolean | TooltipContent | ES | null; // VL has a special object form for tooltip content\n\n /**\n * Default size for marks.\n * - For `point`/`circle`/`square`, this represents the pixel area of the marks. Note that this value sets the area of the symbol; the side lengths will increase with the square root of this value.\n * - For `bar`, this represents the band size of the bar, in pixels.\n * - For `text`, this represents the font size, in pixels.\n *\n * __Default value:__\n * - `30` for point, circle, square marks; width/height's `step`\n * - `2` for bar marks with discrete dimensions;\n * - `5` for bar marks with continuous dimensions;\n * - `11` for text marks.\n *\n * @minimum 0\n */\n size?: number | ES; // size works beyond symbol marks in VL\n\n /**\n * X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n *\n * The `value` of this channel can be a number or a string `\"width\"` for the width of the plot.\n */\n x?: number | 'width' | ES; // Vega doesn't have 'width'\n\n /**\n * Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n *\n * The `value` of this channel can be a number or a string `\"height\"` for the height of the plot.\n */\n y?: number | 'height' | ES; // Vega doesn't have 'height'\n\n /**\n * X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n *\n * The `value` of this channel can be a number or a string `\"width\"` for the width of the plot.\n */\n x2?: number | 'width' | ES; // Vega doesn't have 'width'\n\n /**\n * Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n *\n * The `value` of this channel can be a number or a string `\"height\"` for the height of the plot.\n */\n y2?: number | 'height' | ES; // Vega doesn't have 'height'\n\n time?: number | ES;\n\n /**\n * Default fill color. This property has higher precedence than `config.color`. Set to `null` to remove fill.\n *\n * __Default value:__ (None)\n *\n */\n fill?: Color | Gradient | null | ES; // docs: Vega doesn't have config.color\n\n /**\n * Default stroke color. This property has higher precedence than `config.color`. Set to `null` to remove stroke.\n *\n * __Default value:__ (None)\n *\n */\n stroke?: Color | Gradient | null | ES; // docs: Vega doesn't have config.color\n\n /**\n * The overall opacity (value between [0,1]).\n *\n * __Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.\n *\n * @minimum 0\n * @maximum 1\n */\n opacity?: number | ES; // docs (different defaults)\n\n /**\n * The orientation of a non-stacked bar, tick, area, and line charts.\n * The value is either horizontal (default) or vertical.\n * - For bar, rule and tick, this determines whether the size of the bar and tick\n * should be applied to x or y dimension.\n * - For area, this property determines the orient property of the Vega output.\n * - For line and trail marks, this property determines the sort order of the points in the line\n * if `config.sortLineBy` is not specified.\n * For stacked charts, this is always determined by the orientation of the stack;\n * therefore explicitly specified value will be ignored.\n */\n orient?: Orientation; // Vega orient doesn't apply to bar/tick/line. Since some logic depends on this property, Vega-Lite does NOT allow signal for orient.\n\n /**\n * The horizontal alignment of the text or ranged marks (area, bar, image, rect, rule). One of `\"left\"`, `\"right\"`, `\"center\"`.\n *\n * __Note:__ Expression reference is *not* supported for range marks.\n */\n align?: Align | ES;\n\n /**\n * For text marks, the vertical text baseline. One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, `\"line-bottom\"`, or an expression reference that provides one of the valid values.\n * The `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`,\n * but are calculated relative to the `lineHeight` rather than `fontSize` alone.\n *\n * For range marks, the vertical alignment of the marks. One of `\"top\"`, `\"middle\"`, `\"bottom\"`.\n *\n * __Note:__ Expression reference is *not* supported for range marks.\n *\n */\n baseline?: TextBaseline | ES;\n\n /**\n * - For arc marks, the arc length in radians if theta2 is not specified, otherwise the start arc angle. (A value of 0 indicates up or \u201Cnorth\u201D, increasing values proceed clockwise.)\n *\n * - For text marks, polar coordinate angle in radians.\n *\n * @minimum 0\n * @maximum 360\n */\n theta?: number | ES; // overriding VG\n\n /**\n *\n * For arc mark, the primary (outer) radius in pixels.\n *\n * For text marks, polar coordinate radial offset, in pixels, of the text from the origin determined by the `x` and `y` properties.\n *\n * __Default value:__ `min(plot_width, plot_height)/2`\n * @minimum 0\n */\n radius?: number | ES; // overriding VG\n\n /**\n * The inner radius in pixels of arc marks. `innerRadius` is an alias for `radius2`.\n *\n * __Default value:__ `0`\n * @minimum 0\n */\n innerRadius?: number | ES;\n\n /**\n * The outer radius in pixels of arc marks. `outerRadius` is an alias for `radius`.\n *\n * __Default value:__ `0`\n * @minimum 0\n */\n outerRadius?: number | ES;\n}\n\nexport interface RectBinSpacingMixins {\n /**\n * Offset between bars for binned field. The ideal value for this is either 0 (preferred by statisticians) or 1 (Vega-Lite default, D3 example style).\n *\n * __Default value:__ `1`\n *\n * @minimum 0\n */\n binSpacing?: number;\n}\n\nexport type AnyMark = CompositeMark | CompositeMarkDef | Mark | MarkDef;\n\nexport function isMarkDef(mark: string | GenericMarkDef<any>): mark is GenericMarkDef<any> {\n return hasProperty(mark, 'type');\n}\n\nexport function isPrimitiveMark(mark: AnyMark): mark is Mark {\n const markType = isMarkDef(mark) ? mark.type : mark;\n return (PRIMITIVE_MARKS as Set<Mark | CompositeMark>).has(markType);\n}\n\nexport const STROKE_CONFIG = [\n 'stroke',\n 'strokeWidth',\n 'strokeDash',\n 'strokeDashOffset',\n 'strokeOpacity',\n 'strokeJoin',\n 'strokeMiterLimit'\n] as const;\n\nexport const FILL_CONFIG = ['fill', 'fillOpacity'] as const;\n\nexport const FILL_STROKE_CONFIG = [...STROKE_CONFIG, ...FILL_CONFIG];\n\nconst VL_ONLY_MARK_CONFIG_INDEX: Flag<keyof VLOnlyMarkConfig<any>> = {\n color: 1,\n filled: 1,\n invalid: 1,\n order: 1,\n radius2: 1,\n theta2: 1,\n timeUnitBandSize: 1,\n timeUnitBandPosition: 1\n};\n\nexport const VL_ONLY_MARK_CONFIG_PROPERTIES = keys(VL_ONLY_MARK_CONFIG_INDEX);\n\nconst VL_ONLY_RECT_CONFIG: (keyof RectConfig<any>)[] = [\n 'binSpacing',\n 'continuousBandSize',\n 'discreteBandSize',\n 'minBandSize'\n];\n\nexport const VL_ONLY_MARK_SPECIFIC_CONFIG_PROPERTY_INDEX: {\n [k in Mark]?: (keyof Required<MarkConfigMixins<any>>[k])[];\n} = {\n area: ['line', 'point'],\n bar: VL_ONLY_RECT_CONFIG,\n rect: VL_ONLY_RECT_CONFIG,\n line: ['point'],\n tick: ['bandSize', 'thickness', ...VL_ONLY_RECT_CONFIG]\n};\n\nexport const defaultMarkConfig: MarkConfig<SignalRef> = {\n color: '#4c78a8',\n invalid: 'break-paths-show-path-domains',\n timeUnitBandSize: 1\n};\n\n// TODO: replace with MarkConfigMixins[Mark] once https://github.com/vega/ts-json-schema-generator/issues/344 is fixed\nexport type AnyMarkConfig<ES extends ExprRef | SignalRef> =\n | MarkConfig<ES>\n | AreaConfig<ES>\n | BarConfig<ES>\n | RectConfig<ES>\n | LineConfig<ES>\n | TickConfig<ES>;\n\nexport interface MarkConfigMixins<ES extends ExprRef | SignalRef> {\n /** Mark Config */\n mark?: MarkConfig<ES>;\n\n // MARK-SPECIFIC CONFIGS\n\n /** Arc-specific Config */\n arc?: RectConfig<ES>;\n\n /** Area-Specific Config */\n area?: AreaConfig<ES>;\n\n /** Bar-Specific Config */\n bar?: BarConfig<ES>;\n\n /** Circle-Specific Config */\n circle?: MarkConfig<ES>;\n\n /** Image-specific Config */\n image?: RectConfig<ES>;\n\n /** Line-Specific Config */\n line?: LineConfig<ES>;\n\n /** Point-Specific Config */\n point?: MarkConfig<ES>;\n\n /** Rect-Specific Config */\n rect?: RectConfig<ES>;\n\n /** Rule-Specific Config */\n rule?: MarkConfig<ES>;\n\n /** Square-Specific Config */\n square?: MarkConfig<ES>;\n\n /** Text-Specific Config */\n text?: MarkConfig<ES>;\n\n /** Tick-Specific Config */\n tick?: TickConfig<ES>;\n\n /** Trail-Specific Config */\n trail?: LineConfig<ES>;\n\n /** Geoshape-Specific Config */\n geoshape?: MarkConfig<ES>;\n}\n\nconst MARK_CONFIG_INDEX: Flag<keyof MarkConfigMixins<any>> = {\n mark: 1,\n arc: 1,\n area: 1,\n bar: 1,\n circle: 1,\n image: 1,\n line: 1,\n point: 1,\n rect: 1,\n rule: 1,\n square: 1,\n text: 1,\n tick: 1,\n trail: 1,\n geoshape: 1\n};\n\nexport const MARK_CONFIGS = keys(MARK_CONFIG_INDEX);\n\nexport interface RectConfig<ES extends ExprRef | SignalRef> extends RectBinSpacingMixins, MarkConfig<ES> {\n /**\n * The default size of the bars on continuous scales.\n *\n * __Default value:__ `5`\n *\n * @minimum 0\n */\n continuousBandSize?: number;\n\n /**\n * The default size of the bars with discrete dimensions. If unspecified, the default size is `step-2`, which provides 2 pixel offset between bars.\n * @minimum 0\n */\n discreteBandSize?: number | RelativeBandSize;\n\n /**\n * The minimum band size for bar and rectangle marks.\n * __Default value:__ `0.25`\n */\n minBandSize?: number | ES;\n}\n\nexport type BandSize = number | RelativeBandSize | SignalRef;\n\nexport interface RelativeBandSize {\n /**\n * The relative band size. For example `0.5` means half of the band scale's band width.\n */\n band: number;\n}\n\nexport function isRelativeBandSize(o: number | RelativeBandSize | ExprRef | SignalRef): o is RelativeBandSize {\n return hasProperty(o, 'band');\n}\n\nexport const BAR_CORNER_RADIUS_INDEX: Partial<\n Record<\n Orientation,\n ('cornerRadiusTopLeft' | 'cornerRadiusTopRight' | 'cornerRadiusBottomLeft' | 'cornerRadiusBottomRight')[]\n >\n> = {\n horizontal: ['cornerRadiusTopRight', 'cornerRadiusBottomRight'],\n vertical: ['cornerRadiusTopLeft', 'cornerRadiusTopRight']\n};\n\nexport interface BarCornerRadiusMixins<ES extends ExprRef | SignalRef> {\n /**\n * - For vertical bars, top-left and top-right corner radius.\n *\n * - For horizontal bars, top-right and bottom-right corner radius.\n */\n cornerRadiusEnd?: number | ES;\n}\n\nexport type BarConfig<ES extends ExprRef | SignalRef> = RectConfig<ES> & BarCornerRadiusMixins<ES>;\n\nexport type OverlayMarkDef<ES extends ExprRef | SignalRef> = MarkConfig<ES> & MarkDefMixins<ES>;\n\nexport interface PointOverlayMixins<ES extends ExprRef | SignalRef> {\n /**\n * A flag for overlaying points on top of line or area marks, or an object defining the properties of the overlayed points.\n *\n * - If this property is `\"transparent\"`, transparent points will be used (for enhancing tooltips and selections).\n *\n * - If this property is an empty object (`{}`) or `true`, filled points with default properties will be used.\n *\n * - If this property is `false`, no points would be automatically added to line or area marks.\n *\n * __Default value:__ `false`.\n */\n point?: boolean | OverlayMarkDef<ES> | 'transparent';\n}\n\nexport interface LineConfig<ES extends ExprRef | SignalRef> extends MarkConfig<ES>, PointOverlayMixins<ES> {}\n\nexport interface LineOverlayMixins<ES extends ExprRef | SignalRef> {\n /**\n * A flag for overlaying line on top of area marks, or an object defining the properties of the overlayed lines.\n *\n * - If this value is an empty object (`{}`) or `true`, lines with default properties will be used.\n *\n * - If this value is `false`, no lines would be automatically added to area marks.\n *\n * __Default value:__ `false`.\n */\n line?: boolean | OverlayMarkDef<ES>;\n}\n\nexport interface AreaConfig<ES extends ExprRef | SignalRef>\n extends MarkConfig<ES>,\n PointOverlayMixins<ES>,\n LineOverlayMixins<ES> {}\n\nexport interface TickThicknessMixins {\n /**\n * Thickness of the tick mark.\n *\n * __Default value:__ `1`\n *\n * @minimum 0\n */\n thickness?: number | SignalRef;\n}\n\nexport interface GenericMarkDef<M> {\n /**\n * The mark type. This could a primitive mark type\n * (one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`,\n * `\"area\"`, `\"point\"`, `\"geoshape\"`, `\"rule\"`, and `\"text\"`)\n * or a composite mark type (`\"boxplot\"`, `\"errorband\"`, `\"errorbar\"`).\n */\n type: M;\n}\n\nexport interface MarkDefMixins<ES extends ExprRef | SignalRef> {\n /**\n * A string or array of strings indicating the name of custom styles to apply to the mark. A style is a named collection of mark property defaults defined within the [style configuration](https://vega.github.io/vega-lite/docs/mark.html#style-config). If style is an array, later styles will override earlier styles. Any [mark properties](https://vega.github.io/vega-lite/docs/encoding.html#mark-prop) explicitly defined within the `encoding` will override a style default.\n *\n * __Default value:__ The mark's name. For example, a bar mark will have style `\"bar\"` by default.\n * __Note:__ Any specified style will augment the default style. For example, a bar mark with `\"style\": \"foo\"` will receive from `config.style.bar` and `config.style.foo` (the specified style `\"foo\"` has higher precedence).\n */\n style?: string | string[];\n\n /**\n * Whether a mark be clipped to the enclosing group\u2019s width and height.\n */\n clip?: boolean | ES;\n\n // Offset properties should not be a part of config\n\n /**\n * Offset for x-position.\n */\n xOffset?: number | ES;\n\n /**\n * Offset for y-position.\n */\n yOffset?: number | ES;\n\n /**\n * Offset for x2-position.\n */\n x2Offset?: number | ES;\n\n /**\n * Offset for y2-position.\n */\n y2Offset?: number | ES;\n\n /**\n * Offset for theta.\n */\n thetaOffset?: number | ES;\n\n /**\n * Offset for theta2.\n */\n theta2Offset?: number | ES;\n\n /**\n * Offset for radius.\n */\n radiusOffset?: number | ES;\n\n /**\n * Offset for radius2.\n */\n radius2Offset?: number | ES;\n}\n\nexport interface RelativeBandSize {\n /**\n * The relative band size. For example `0.5` means half of the band scale's band width.\n */\n band: number;\n}\n\n// Point/Line OverlayMixins are only for area, line, and trail but we don't want to declare multiple types of MarkDef\nexport interface MarkDef<M extends string | Mark = Mark, ES extends ExprRef | SignalRef = ExprRef | SignalRef>\n extends GenericMarkDef<M>,\n Omit<\n MarkConfig<ES> &\n AreaConfig<ES> &\n BarConfig<ES> & // always extends RectConfig\n LineConfig<ES> &\n TickConfig<ES>,\n 'startAngle' | 'endAngle' | 'width' | 'height'\n >,\n MarkDefMixins<ES> {\n // Omit startAngle/endAngle since we use theta/theta2 from Vega-Lite schema to avoid confusion\n // We still support start/endAngle only in config, just in case people use Vega config with Vega-Lite.\n\n /**\n * @hidden\n */\n startAngle?: number | ES;\n /**\n * @hidden\n */\n endAngle?: number | ES;\n\n // Replace width / height to include relative band size\n\n /**\n * Width of the marks. One of:\n *\n * - A number representing a fixed pixel width.\n *\n * - A relative band size definition. For example, `{band: 0.5}` represents half of the band.\n */\n width?: number | ES | RelativeBandSize;\n\n /**\n * Height of the marks. One of:\n *\n * - A number representing a fixed pixel height.\n *\n * - A relative band size definition. For example, `{band: 0.5}` represents half of the band\n */\n height?: number | ES | RelativeBandSize;\n}\n\nconst DEFAULT_RECT_BAND_SIZE = 5;\n\nexport const defaultRectConfig: RectConfig<SignalRef> = {\n binSpacing: 0,\n continuousBandSize: DEFAULT_RECT_BAND_SIZE,\n minBandSize: 0.25,\n timeUnitBandPosition: 0.5\n};\n\nexport const defaultBarConfig: RectConfig<SignalRef> = {\n ...defaultRectConfig,\n binSpacing: 1\n};\n\nexport interface TickConfig<ES extends ExprRef | SignalRef>\n extends MarkConfig<ES>,\n TickThicknessMixins,\n RectConfig<ES> {\n /**\n * The width of the ticks.\n *\n * __Default value:__ 3/4 of step (width step for horizontal ticks and height step for vertical ticks).\n * @minimum 0\n */\n bandSize?: number;\n}\n\nexport const defaultTickConfig: TickConfig<SignalRef> = {\n ...defaultRectConfig,\n thickness: 1\n};\n\nexport function getMarkType(m: string | GenericMarkDef<any>) {\n return isMarkDef(m) ? m.type : m;\n}\n", "import {MarkInvalidDataMode} from '../../invalid';\n\ntype NormalizedMarkInvalidDataMode = Exclude<MarkInvalidDataMode, 'break-paths-show-path-domains'>;\n\nexport function normalizeInvalidDataMode(\n mode: MarkInvalidDataMode | null | undefined,\n {isPath}: {isPath: boolean}\n): NormalizedMarkInvalidDataMode {\n if (mode === undefined || mode === 'break-paths-show-path-domains') {\n return isPath ? 'break-paths-show-domains' : 'filter';\n } else if (mode === null) {\n return 'show';\n }\n return mode;\n}\n", "import {SignalRef} from 'vega';\nimport {ScaleChannel} from '../../channel';\nimport {Config} from '../../config';\nimport {MarkInvalidDataMode} from '../../invalid';\nimport {MarkDef, isPathMark} from '../../mark';\nimport {ScaleType, hasContinuousDomain} from '../../scale';\nimport {getMarkPropOrConfig} from '../common';\nimport {normalizeInvalidDataMode} from './normalizeInvalidDataMode';\n\nexport type ScaleInvalidDataMode =\n // remove 'break-paths-show-path-domains' from MarkInvalidDataMode\n // because it is a macro for '\"filter\"' or `\"break-path-keep-domains`\n | Omit<MarkInvalidDataMode, 'break-paths-show-path-domains'>\n\n // Add always-valid because at scale level, categorical scales can handle any values and thus is always valid.\n | 'always-valid';\n\nexport function getScaleInvalidDataMode<C extends ScaleChannel>({\n markDef,\n config,\n scaleChannel,\n scaleType,\n isCountAggregate\n}: {\n markDef: MarkDef;\n config: Config<SignalRef>;\n scaleChannel: C;\n scaleType: ScaleType;\n isCountAggregate: boolean;\n}): ScaleInvalidDataMode {\n if (!scaleType || !hasContinuousDomain(scaleType) || isCountAggregate) {\n // - Discrete scales can always display null as another category\n // - Count cannot output null values\n return 'always-valid';\n }\n\n const invalidMode = normalizeInvalidDataMode(getMarkPropOrConfig('invalid', markDef, config), {\n isPath: isPathMark(markDef.type)\n });\n\n const scaleOutputForInvalid = config.scale?.invalid?.[scaleChannel];\n if (scaleOutputForInvalid !== undefined) {\n // Regardless of the current invalid mode, if the channel has a default value, we consider the field valid.\n return 'show';\n }\n\n return invalidMode;\n}\nexport function shouldBreakPath(mode: ScaleInvalidDataMode): boolean {\n return mode === 'break-paths-filter-domains' || mode === 'break-paths-show-domains';\n}\n", "import {VgValueRef} from '../../../vega.schema';\nimport {ScaleComponent} from '../../scale/component';\n\nexport interface ScaledZeroOrMinOrMaxProps {\n scaleName: string;\n scale: ScaleComponent;\n mode: 'zeroOrMin' | {zeroOrMax: {widthSignal: string; heightSignal: string}};\n}\n\nexport function scaledZeroOrMinOrMax({scaleName, scale, mode}: ScaledZeroOrMinOrMaxProps): VgValueRef | undefined {\n const domain = `domain('${scaleName}')`;\n\n if (!scale || !scaleName) {\n return undefined;\n }\n const min = `${domain}[0]`;\n const max = `peek(${domain})`; // peek = the last item of the array\n\n // If there is a scale (and hence its name)\n const domainHasZero = scale.domainHasZero();\n // zeroOrMin or zeroOrMax mode\n if (domainHasZero === 'definitely') {\n return {\n scale: scaleName,\n value: 0\n };\n } else if (domainHasZero === 'maybe') {\n const nonZeroValue = mode === 'zeroOrMin' ? min : max;\n return {signal: `scale('${scaleName}', inrange(0, ${domain}) ? 0 : ${nonZeroValue})`};\n } else {\n // domainHasZero === 'definitely-not'\n return {signal: `scale('${scaleName}', ${mode === 'zeroOrMin' ? min : max})`};\n }\n}\n", "import {isCountingAggregateOp} from '../../../aggregate';\nimport {NonPositionScaleChannel, PolarPositionScaleChannel, PositionScaleChannel} from '../../../channel';\nimport {getFieldDef, vgField} from '../../../channeldef';\nimport {ScaleInvalidDataShowAs, isScaleInvalidDataIncludeAsValue} from '../../../invalid';\nimport {fieldValidPredicate} from '../../../predicate';\nimport {VgValueRef, isSignalRef} from '../../../vega.schema';\nimport {getScaleInvalidDataMode} from '../../invalid/ScaleInvalidDataMode';\nimport {ScaleComponent} from '../../scale/component';\nimport {scaledZeroOrMinOrMax} from './scaledZeroOrMinOrMax';\nimport {MidPointParams} from './valueref';\n\nexport function getConditionalValueRefForIncludingInvalidValue<\n C extends PositionScaleChannel | PolarPositionScaleChannel | NonPositionScaleChannel\n>({\n scaleChannel,\n channelDef,\n scale,\n scaleName,\n markDef,\n config\n}: {\n scaleChannel: C;\n} & Pick<MidPointParams, 'scale' | 'scaleName' | 'channelDef' | 'markDef' | 'config'>): VgValueRef | undefined {\n const scaleType = scale?.get('type');\n\n const fieldDef = getFieldDef<string>(channelDef);\n const isCountAggregate = isCountingAggregateOp(fieldDef?.aggregate);\n\n const invalidDataMode = getScaleInvalidDataMode<C>({\n scaleChannel,\n markDef,\n config,\n scaleType,\n isCountAggregate\n });\n\n if (fieldDef && invalidDataMode === 'show') {\n const includeAs: ScaleInvalidDataShowAs<C> = config.scale.invalid?.[scaleChannel] ?? 'zero-or-min';\n return {\n test: fieldValidPredicate(vgField(fieldDef, {expr: 'datum'}), false),\n ...refForInvalidValues(includeAs, scale, scaleName)\n };\n }\n return undefined;\n}\n\nfunction refForInvalidValues<C extends PositionScaleChannel | PolarPositionScaleChannel | NonPositionScaleChannel>(\n includeAs: ScaleInvalidDataShowAs<C>,\n scale: ScaleComponent,\n scaleName: string\n): VgValueRef {\n if (isScaleInvalidDataIncludeAsValue(includeAs)) {\n const {value} = includeAs;\n return isSignalRef(value) ? {signal: value.signal} : {value};\n }\n\n return scaledZeroOrMinOrMax({\n scale,\n scaleName,\n mode: 'zeroOrMin'\n });\n}\n", "/**\n * Utility files for producing Vega ValueRef for marks\n */\nimport type {SignalRef} from 'vega';\nimport {isFunction} from 'vega-util';\nimport {isBinned, isBinning} from '../../../bin';\nimport {Channel, PolarPositionChannel, PositionChannel, X, X2, Y2, getMainRangeChannel} from '../../../channel';\nimport {\n ChannelDef,\n DatumDef,\n FieldDefBase,\n FieldRefOption,\n SecondaryChannelDef,\n SecondaryFieldDef,\n TypedFieldDef,\n Value,\n binRequiresRange,\n getBandPosition,\n isDatumDef,\n isFieldDef,\n isFieldOrDatumDef,\n isTypedFieldDef,\n isValueDef,\n vgField\n} from '../../../channeldef';\nimport {Config} from '../../../config';\nimport {dateTimeToExpr, isDateTime} from '../../../datetime';\nimport {isExprRef} from '../../../expr';\nimport * as log from '../../../log';\nimport {Mark, MarkDef} from '../../../mark';\nimport {hasDiscreteDomain} from '../../../scale';\nimport {StackProperties} from '../../../stack';\nimport {TEMPORAL} from '../../../type';\nimport {contains, stringify} from '../../../util';\nimport {VgValueRef, isSignalRef} from '../../../vega.schema';\nimport {signalOrValueRef} from '../../common';\nimport {ScaleComponent} from '../../scale/component';\nimport {getConditionalValueRefForIncludingInvalidValue} from './invalid';\n\nexport function midPointRefWithPositionInvalidTest(\n params: MidPointParams & {\n channel: PositionChannel | PolarPositionChannel;\n }\n): VgValueRef | VgValueRef[] {\n const {channel, channelDef, markDef, scale, scaleName, config} = params;\n const scaleChannel = getMainRangeChannel(channel);\n const mainRef = midPoint(params);\n\n const valueRefForIncludingInvalid = getConditionalValueRefForIncludingInvalidValue({\n scaleChannel,\n channelDef,\n scale,\n scaleName,\n markDef,\n config\n });\n\n return valueRefForIncludingInvalid !== undefined ? [valueRefForIncludingInvalid, mainRef] : mainRef;\n}\n\nexport function datumDefToExpr(datumDef: DatumDef<string>) {\n const {datum} = datumDef;\n if (isDateTime(datum)) {\n return dateTimeToExpr(datum);\n }\n return `${stringify(datum)}`;\n}\n\nexport function valueRefForFieldOrDatumDef(\n fieldDef: FieldDefBase<string> | DatumDef<string>,\n scaleName: string,\n opt: FieldRefOption,\n encode: {offset?: number | VgValueRef; band?: number | boolean | SignalRef}\n): VgValueRef {\n const ref: VgValueRef = {};\n\n if (scaleName) {\n ref.scale = scaleName;\n }\n\n if (isDatumDef<string>(fieldDef)) {\n const {datum} = fieldDef;\n if (isDateTime(datum)) {\n ref.signal = dateTimeToExpr(datum);\n } else if (isSignalRef(datum)) {\n ref.signal = datum.signal;\n } else if (isExprRef(datum)) {\n ref.signal = datum.expr;\n } else {\n ref.value = datum;\n }\n } else {\n ref.field = vgField(fieldDef, opt);\n }\n\n if (encode) {\n const {offset, band} = encode;\n if (offset) {\n ref.offset = offset;\n }\n if (band) {\n ref.band = band;\n }\n }\n return ref;\n}\n\n/**\n * Signal that returns the middle of a bin from start and end field. Should only be used with x and y.\n */\nexport function interpolatedSignalRef({\n scaleName,\n fieldOrDatumDef,\n fieldOrDatumDef2,\n offset,\n startSuffix,\n endSuffix = 'end',\n bandPosition = 0.5\n}: {\n scaleName: string;\n fieldOrDatumDef: TypedFieldDef<string>;\n fieldOrDatumDef2?: SecondaryFieldDef<string>;\n startSuffix?: string;\n endSuffix?: string;\n offset: number | SignalRef | VgValueRef;\n bandPosition: number | SignalRef;\n}): VgValueRef {\n const expr = !isSignalRef(bandPosition) && 0 < bandPosition && bandPosition < 1 ? 'datum' : undefined;\n const start = vgField(fieldOrDatumDef, {expr, suffix: startSuffix});\n const end =\n fieldOrDatumDef2 !== undefined\n ? vgField(fieldOrDatumDef2, {expr})\n : vgField(fieldOrDatumDef, {suffix: endSuffix, expr});\n\n const ref: VgValueRef = {};\n\n if (bandPosition === 0 || bandPosition === 1) {\n ref.scale = scaleName;\n const field = bandPosition === 0 ? start : end;\n ref.field = field;\n } else {\n const datum = isSignalRef(bandPosition)\n ? `(1-${bandPosition.signal}) * ${start} + ${bandPosition.signal} * ${end}`\n : `${1 - bandPosition} * ${start} + ${bandPosition} * ${end}`;\n ref.signal = `scale(\"${scaleName}\", ${datum})`;\n }\n\n if (offset) {\n ref.offset = offset;\n }\n return ref;\n}\n\nexport function binSizeExpr({scaleName, fieldDef}: {scaleName: string; fieldDef: TypedFieldDef<string>}) {\n const start = vgField(fieldDef, {expr: 'datum'});\n const end = vgField(fieldDef, {expr: 'datum', suffix: 'end'});\n return `abs(scale(\"${scaleName}\", ${end}) - scale(\"${scaleName}\", ${start}))`;\n}\n\nexport interface MidPointParams {\n channel: Channel;\n channelDef: ChannelDef;\n channel2Def?: SecondaryChannelDef<string>;\n\n markDef: MarkDef<Mark, SignalRef>;\n config: Config<SignalRef>;\n\n scaleName: string;\n scale: ScaleComponent;\n stack?: StackProperties;\n offset?: number | SignalRef | VgValueRef;\n defaultRef: VgValueRef | (() => VgValueRef);\n\n bandPosition?: number | SignalRef;\n}\n\n/**\n * @returns {VgValueRef} Value Ref for xc / yc or mid point for other channels.\n */\nexport function midPoint({\n channel,\n channelDef,\n channel2Def,\n markDef,\n config,\n scaleName,\n scale,\n stack,\n offset,\n defaultRef,\n bandPosition\n}: MidPointParams): VgValueRef {\n // TODO: datum support\n if (channelDef) {\n /* istanbul ignore else */\n\n if (isFieldOrDatumDef(channelDef)) {\n const scaleType = scale?.get('type');\n if (isTypedFieldDef(channelDef)) {\n bandPosition ??= getBandPosition({\n fieldDef: channelDef,\n fieldDef2: channel2Def,\n markDef,\n config\n });\n const {bin, timeUnit, type} = channelDef;\n\n if (isBinning(bin) || (bandPosition && timeUnit && type === TEMPORAL)) {\n // Use middle only for x an y to place marks in the center between start and end of the bin range.\n // We do not use the mid point for other channels (e.g. size) so that properties of legends and marks match.\n if (stack?.impute) {\n // For stack, we computed bin_mid so we can impute.\n return valueRefForFieldOrDatumDef(channelDef, scaleName, {binSuffix: 'mid'}, {offset});\n }\n\n if (bandPosition && !hasDiscreteDomain(scaleType)) {\n // if band = 0, no need to call interpolation\n // For non-stack, we can just calculate bin mid on the fly using signal.\n return interpolatedSignalRef({scaleName, fieldOrDatumDef: channelDef, bandPosition, offset});\n }\n return valueRefForFieldOrDatumDef(\n channelDef,\n scaleName,\n binRequiresRange(channelDef, channel) ? {binSuffix: 'range'} : {},\n {\n offset\n }\n );\n } else if (isBinned(bin)) {\n if (isFieldDef(channel2Def)) {\n return interpolatedSignalRef({\n scaleName,\n fieldOrDatumDef: channelDef,\n fieldOrDatumDef2: channel2Def,\n bandPosition,\n offset\n });\n } else {\n const channel2 = channel === X ? X2 : Y2;\n log.warn(log.message.channelRequiredForBinned(channel2));\n }\n }\n }\n\n return valueRefForFieldOrDatumDef(\n channelDef,\n scaleName,\n hasDiscreteDomain(scaleType) ? {binSuffix: 'range'} : {}, // no need for bin suffix if there is no scale\n {\n offset,\n // For band, to get mid point, need to offset by half of the band\n band: scaleType === 'band' ? (bandPosition ?? channelDef.bandPosition ?? 0.5) : undefined\n }\n );\n } else if (isValueDef(channelDef)) {\n const value = channelDef.value;\n const offsetMixins = offset ? {offset} : {};\n\n return {...widthHeightValueOrSignalRef(channel, value), ...offsetMixins};\n }\n\n // If channelDef is neither field def or value def, it's a condition-only def.\n // In such case, we will use default ref.\n }\n\n if (isFunction(defaultRef)) {\n defaultRef = defaultRef();\n }\n\n if (defaultRef) {\n // for non-position, ref could be undefined.\n return {\n ...defaultRef,\n // only include offset when it is non-zero (zero = no offset)\n ...(offset ? {offset} : {})\n };\n }\n return defaultRef;\n}\n\n/**\n * Convert special \"width\" and \"height\" values in Vega-Lite into Vega value ref.\n */\nexport function widthHeightValueOrSignalRef(channel: Channel, value: Value | SignalRef) {\n if (contains(['x', 'x2'], channel) && value === 'width') {\n return {field: {group: 'width'}};\n } else if (contains(['y', 'y2'], channel) && value === 'height') {\n return {field: {group: 'height'}};\n }\n return signalOrValueRef(value);\n}\n", "import type {SignalRef} from 'vega';\nimport {isString} from 'vega-util';\nimport {isBinning} from '../bin';\nimport {\n channelDefType,\n DatumDef,\n FieldDef,\n isFieldDef,\n isFieldOrDatumDefForTimeFormat,\n isPositionFieldOrDatumDef,\n isScaleFieldDef,\n vgField\n} from '../channeldef';\nimport {Config} from '../config';\nimport {fieldValidPredicate} from '../predicate';\nimport {ScaleType} from '../scale';\nimport {formatExpression, normalizeTimeUnit, timeUnitSpecifierExpression} from '../timeunit';\nimport {QUANTITATIVE, Type} from '../type';\nimport {Dict, stringify} from '../util';\nimport {isSignalRef} from '../vega.schema';\nimport {TimeUnit} from './../timeunit';\nimport {datumDefToExpr} from './mark/encode/valueref';\n\nexport function isCustomFormatType(formatType: string) {\n return formatType && formatType !== 'number' && formatType !== 'time';\n}\n\nfunction customFormatExpr(formatType: string, field: string, format: string | Dict<unknown>) {\n return `${formatType}(${field}${format ? `, ${stringify(format)}` : ''})`;\n}\n\nexport const BIN_RANGE_DELIMITER = ' \\u2013 ';\n\nexport function formatSignalRef({\n fieldOrDatumDef,\n format,\n formatType,\n expr,\n normalizeStack,\n config\n}: {\n fieldOrDatumDef: FieldDef<string> | DatumDef<string>;\n format: string | Dict<unknown>;\n formatType: string;\n expr?: 'datum' | 'parent' | 'datum.datum';\n normalizeStack?: boolean;\n config: Config;\n}) {\n if (isCustomFormatType(formatType)) {\n return formatCustomType({\n fieldOrDatumDef,\n format,\n formatType,\n expr,\n config\n });\n }\n\n const field = fieldToFormat(fieldOrDatumDef, expr, normalizeStack);\n const type = channelDefType(fieldOrDatumDef);\n\n if (format === undefined && formatType === undefined && config.customFormatTypes) {\n if (type === 'quantitative') {\n if (normalizeStack && config.normalizedNumberFormatType)\n return formatCustomType({\n fieldOrDatumDef,\n format: config.normalizedNumberFormat,\n formatType: config.normalizedNumberFormatType,\n expr,\n config\n });\n if (config.numberFormatType) {\n return formatCustomType({\n fieldOrDatumDef,\n format: config.numberFormat,\n formatType: config.numberFormatType,\n expr,\n config\n });\n }\n }\n if (\n type === 'temporal' &&\n config.timeFormatType &&\n isFieldDef(fieldOrDatumDef) &&\n fieldOrDatumDef.timeUnit === undefined\n ) {\n return formatCustomType({\n fieldOrDatumDef,\n format: config.timeFormat,\n formatType: config.timeFormatType,\n expr,\n config\n });\n }\n }\n\n if (isFieldOrDatumDefForTimeFormat(fieldOrDatumDef)) {\n const signal = timeFormatExpression({\n field,\n timeUnit: isFieldDef(fieldOrDatumDef) ? normalizeTimeUnit(fieldOrDatumDef.timeUnit)?.unit : undefined,\n format,\n formatType: config.timeFormatType,\n rawTimeFormat: config.timeFormat,\n isUTCScale: isScaleFieldDef(fieldOrDatumDef) && fieldOrDatumDef.scale?.type === ScaleType.UTC\n });\n return signal ? {signal} : undefined;\n }\n\n format = numberFormat({type, specifiedFormat: format, config, normalizeStack});\n if (isFieldDef(fieldOrDatumDef) && isBinning(fieldOrDatumDef.bin)) {\n const endField = vgField(fieldOrDatumDef, {expr, binSuffix: 'end'});\n return {\n signal: binFormatExpression(field, endField, format, formatType, config)\n };\n } else if (format || channelDefType(fieldOrDatumDef) === 'quantitative') {\n return {\n signal: `${formatExpr(field, format)}`\n };\n } else {\n return {signal: `isValid(${field}) ? ${field} : \"\"+${field}`};\n }\n}\n\nfunction fieldToFormat(\n fieldOrDatumDef: FieldDef<string> | DatumDef<string>,\n expr: 'datum' | 'parent' | 'datum.datum',\n normalizeStack: boolean\n) {\n if (isFieldDef(fieldOrDatumDef)) {\n if (normalizeStack) {\n return `${vgField(fieldOrDatumDef, {expr, suffix: 'end'})}-${vgField(fieldOrDatumDef, {\n expr,\n suffix: 'start'\n })}`;\n } else {\n return vgField(fieldOrDatumDef, {expr});\n }\n } else {\n return datumDefToExpr(fieldOrDatumDef);\n }\n}\n\nexport function formatCustomType({\n fieldOrDatumDef,\n format,\n formatType,\n expr,\n normalizeStack,\n config,\n field\n}: {\n fieldOrDatumDef: FieldDef<string> | DatumDef<string>;\n format: string | Dict<unknown>;\n formatType: string;\n expr?: 'datum' | 'parent' | 'datum.datum';\n normalizeStack?: boolean;\n config: Config;\n field?: string; // axis/legend \"use datum.value\"\n}) {\n field ??= fieldToFormat(fieldOrDatumDef, expr, normalizeStack);\n\n if (\n field !== 'datum.value' && // For axis/legend, we can't correctly know the end of the bin from `datum`\n isFieldDef(fieldOrDatumDef) &&\n isBinning(fieldOrDatumDef.bin)\n ) {\n const endField = vgField(fieldOrDatumDef, {expr, binSuffix: 'end'});\n return {\n signal: binFormatExpression(field, endField, format, formatType, config)\n };\n }\n return {signal: customFormatExpr(formatType, field, format)};\n}\n\nexport function guideFormat(\n fieldOrDatumDef: FieldDef<string> | DatumDef<string>,\n type: Type,\n format: string | Dict<unknown>,\n formatType: string | SignalRef,\n config: Config,\n omitTimeFormatConfig: boolean // axis doesn't use config.timeFormat\n) {\n if (isString(formatType) && isCustomFormatType(formatType)) {\n return undefined; // handled in encode block\n } else if (format === undefined && formatType === undefined && config.customFormatTypes) {\n if (channelDefType(fieldOrDatumDef) === 'quantitative') {\n if (\n config.normalizedNumberFormatType &&\n isPositionFieldOrDatumDef(fieldOrDatumDef) &&\n fieldOrDatumDef.stack === 'normalize'\n ) {\n return undefined; // handled in encode block\n }\n if (config.numberFormatType) {\n return undefined; // handled in encode block\n }\n }\n }\n\n if (\n isPositionFieldOrDatumDef(fieldOrDatumDef) &&\n fieldOrDatumDef.stack === 'normalize' &&\n config.normalizedNumberFormat\n ) {\n return numberFormat({\n type: 'quantitative',\n config,\n normalizeStack: true\n });\n }\n\n if (isFieldOrDatumDefForTimeFormat(fieldOrDatumDef)) {\n const timeUnit = isFieldDef(fieldOrDatumDef) ? normalizeTimeUnit(fieldOrDatumDef.timeUnit)?.unit : undefined;\n if (timeUnit === undefined && config.customFormatTypes && config.timeFormatType) {\n return undefined; // hanlded in encode block\n }\n\n return timeFormat({specifiedFormat: format as string, timeUnit, config, omitTimeFormatConfig});\n }\n\n return numberFormat({type, specifiedFormat: format, config});\n}\n\nexport function guideFormatType(\n formatType: string | SignalRef,\n fieldOrDatumDef: FieldDef<string> | DatumDef<string>,\n scaleType: ScaleType\n) {\n if (formatType && (isSignalRef(formatType) || formatType === 'number' || formatType === 'time')) {\n return formatType;\n }\n if (isFieldOrDatumDefForTimeFormat(fieldOrDatumDef) && scaleType !== 'time' && scaleType !== 'utc') {\n return isFieldDef(fieldOrDatumDef) && normalizeTimeUnit(fieldOrDatumDef?.timeUnit)?.utc ? 'utc' : 'time';\n }\n return undefined;\n}\n\n/**\n * Returns number format for a fieldDef.\n */\nexport function numberFormat({\n type,\n specifiedFormat,\n config,\n normalizeStack\n}: {\n type: Type;\n specifiedFormat?: string | Dict<unknown>;\n config: Config;\n normalizeStack?: boolean;\n}) {\n // Specified format in axis/legend has higher precedence than fieldDef.format\n if (isString(specifiedFormat)) {\n return specifiedFormat;\n }\n\n if (type === QUANTITATIVE) {\n // we only apply the default if the field is quantitative\n return normalizeStack ? config.normalizedNumberFormat : config.numberFormat;\n }\n return undefined;\n}\n\n/**\n * Returns time format for a fieldDef for use in guides.\n */\nexport function timeFormat({\n specifiedFormat,\n timeUnit,\n config,\n omitTimeFormatConfig\n}: {\n specifiedFormat?: string;\n timeUnit?: TimeUnit;\n config: Config;\n omitTimeFormatConfig?: boolean;\n}) {\n if (specifiedFormat) {\n return specifiedFormat;\n }\n\n if (timeUnit) {\n return {\n signal: timeUnitSpecifierExpression(timeUnit)\n };\n }\n\n return omitTimeFormatConfig ? undefined : config.timeFormat;\n}\n\nfunction formatExpr(field: string, format: string) {\n return `format(${field}, \"${format || ''}\")`;\n}\n\nfunction binNumberFormatExpr(field: string, format: string | Dict<unknown>, formatType: string, config: Config) {\n if (isCustomFormatType(formatType)) {\n return customFormatExpr(formatType, field, format);\n }\n\n return formatExpr(field, (isString(format) ? format : undefined) ?? config.numberFormat);\n}\n\nexport function binFormatExpression(\n startField: string,\n endField: string,\n format: string | Dict<unknown>,\n formatType: string,\n config: Config\n): string {\n if (format === undefined && formatType === undefined && config.customFormatTypes && config.numberFormatType) {\n return binFormatExpression(startField, endField, config.numberFormat, config.numberFormatType, config);\n }\n const start = binNumberFormatExpr(startField, format, formatType, config);\n const end = binNumberFormatExpr(endField, format, formatType, config);\n return `${fieldValidPredicate(startField, false)} ? \"null\" : ${start} + \"${BIN_RANGE_DELIMITER}\" + ${end}`;\n}\n\n/**\n * Returns the time expression used for axis/legend labels or text mark for a temporal field\n */\nexport function timeFormatExpression({\n field,\n timeUnit,\n format,\n formatType,\n rawTimeFormat,\n isUTCScale\n}: {\n field: string;\n timeUnit?: TimeUnit;\n format?: string | Dict<unknown>;\n formatType?: string;\n rawTimeFormat?: string; // should be provided only for actual text and headers, not axis/legend labels\n isUTCScale?: boolean;\n}): string {\n if (!timeUnit || format) {\n // If there is no time unit, or if user explicitly specifies format for axis/legend/text.\n if (!timeUnit && formatType) {\n return `${formatType}(${field}, '${format}')`;\n }\n format = isString(format) ? format : rawTimeFormat; // only use provided timeFormat if there is no timeUnit.\n return `${isUTCScale ? 'utc' : 'time'}Format(${field}, '${format}')`;\n } else {\n return formatExpression(timeUnit, field, isUTCScale);\n }\n}\n", "import {hasOwnProperty, isArray} from 'vega-util';\nimport {NonArgAggregateOp} from './aggregate';\nimport {FieldName} from './channeldef';\nimport {DateTime} from './datetime';\nimport {hasProperty} from './util';\n\nexport type SortOrder = 'ascending' | 'descending';\n\n/**\n * A sort definition for transform\n */\nexport interface SortField {\n /**\n * The name of the field to sort.\n */\n field: FieldName;\n\n /**\n * Whether to sort the field in ascending or descending order. One of `\"ascending\"` (default), `\"descending\"`, or `null` (no not sort).\n */\n order?: SortOrder | null;\n}\n\nexport interface SortFields {\n field: FieldName[];\n order?: SortOrder[];\n}\n\nexport const DEFAULT_SORT_OP = 'min';\n\n/**\n * A sort definition for sorting a discrete scale in an encoding field definition.\n */\n\nexport interface EncodingSortField<F> {\n /**\n * The data [field](https://vega.github.io/vega-lite/docs/field.html) to sort by.\n *\n * __Default value:__ If unspecified, defaults to the field specified in the outer data reference.\n */\n field?: F; // Field is optional because `\"op\": \"count\"` does not require a field.\n /**\n * An [aggregate operation](https://vega.github.io/vega-lite/docs/aggregate.html#ops) to perform on the field prior to sorting (e.g., `\"count\"`, `\"mean\"` and `\"median\"`).\n * An aggregation is required when there are multiple values of the sort field for each encoded data field.\n * The input data objects will be aggregated, grouped by the encoded data field.\n *\n * For a full list of operations, please see the documentation for [aggregate](https://vega.github.io/vega-lite/docs/aggregate.html#ops).\n *\n * __Default value:__ `\"sum\"` for stacked plots. Otherwise, `\"min\"`.\n */\n op?: NonArgAggregateOp;\n\n /**\n * The sort order. One of `\"ascending\"` (default), `\"descending\"`, or `null` (no not sort).\n */\n order?: SortOrder | null;\n}\n\nexport interface SortByEncoding {\n /**\n * The [encoding channel](https://vega.github.io/vega-lite/docs/encoding.html#channels) to sort by (e.g., `\"x\"`, `\"y\"`)\n */\n encoding: SortByChannel;\n\n /**\n * The sort order. One of `\"ascending\"` (default), `\"descending\"`, or `null` (no not sort).\n */\n order?: SortOrder | null;\n}\n\nexport type SortArray = number[] | string[] | boolean[] | DateTime[];\n\nconst SORT_BY_CHANNEL_INDEX = {\n x: 1,\n y: 1,\n color: 1,\n fill: 1,\n stroke: 1,\n strokeWidth: 1,\n size: 1,\n shape: 1,\n fillOpacity: 1,\n strokeOpacity: 1,\n opacity: 1,\n text: 1\n} as const;\n\nexport type SortByChannel = keyof typeof SORT_BY_CHANNEL_INDEX;\n\nexport function isSortByChannel(c: string): c is SortByChannel {\n return hasOwnProperty(SORT_BY_CHANNEL_INDEX, c);\n}\n\nexport type SortByChannelDesc =\n | '-x'\n | '-y'\n | '-color'\n | '-fill'\n | '-stroke'\n | '-strokeWidth'\n | '-size'\n | '-shape'\n | '-fillOpacity'\n | '-strokeOpacity'\n | '-opacity'\n | '-text';\n\nexport type AllSortString = SortOrder | SortByChannel | SortByChannelDesc;\n\nexport type Sort<F> = SortArray | AllSortString | EncodingSortField<F> | SortByEncoding | null;\n\nexport function isSortByEncoding<F>(sort: Sort<F>): sort is SortByEncoding {\n return hasProperty(sort, 'encoding');\n}\n\nexport function isSortField<F>(sort: Sort<F>): sort is EncodingSortField<F> {\n return sort && ((sort as any).op === 'count' || hasProperty(sort, 'field'));\n}\n\nexport function isSortArray<F>(sort: Sort<F>): sort is SortArray {\n return sort && isArray(sort);\n}\n", "import type {LayoutAlign, SignalRef} from 'vega';\nimport {BinParams} from '../bin';\nimport {ChannelDef, Field, FieldName, TypedFieldDef} from '../channeldef';\nimport {ExprRef} from '../expr';\nimport {Header} from '../header';\nimport {EncodingSortField, SortArray, SortOrder} from '../sort';\nimport {StandardType} from '../type';\nimport {BaseSpec, GenericCompositionLayoutWithColumns, ResolveMixins} from './base';\nimport {GenericLayerSpec, NormalizedLayerSpec} from './layer';\nimport {GenericUnitSpec, NormalizedUnitSpec} from './unit';\nimport {hasProperty} from '../util';\n\nexport interface FacetFieldDef<F extends Field, ES extends ExprRef | SignalRef = ExprRef | SignalRef>\n extends TypedFieldDef<F, StandardType, boolean | BinParams | null> {\n /**\n * An object defining properties of a facet's header.\n */\n header?: Header<ES> | null;\n\n // Note: `\"sort\"` for facet field def is different from encoding field def as it does not support `SortByEncoding`\n\n /**\n * Sort order for the encoded field.\n *\n * For continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n *\n * For discrete fields, `sort` can be one of the following:\n * - `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n * - [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n * - [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n * - `null` indicating no sort.\n *\n * __Default value:__ `\"ascending\"`\n *\n * __Note:__ `null` is not supported for `row` and `column`.\n */\n sort?: SortArray | SortOrder | EncodingSortField<F> | null;\n}\n\nexport type FacetEncodingFieldDef<\n F extends Field,\n ES extends ExprRef | SignalRef = ExprRef | SignalRef\n> = FacetFieldDef<F, ES> & GenericCompositionLayoutWithColumns;\n\nexport interface RowColumnEncodingFieldDef<F extends Field, ES extends ExprRef | SignalRef>\n extends FacetFieldDef<F, ES> {\n // Manually declarae this separated from GenericCompositionLayout as we don't support RowCol object in RowColumnEncodingFieldDef\n\n /**\n * The alignment to apply to row/column facet's subplot.\n * The supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n *\n * - For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n * - For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n * - For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n *\n * __Default value:__ `\"all\"`.\n */\n align?: LayoutAlign;\n\n /**\n * Boolean flag indicating if facet's subviews should be centered relative to their respective rows or columns.\n *\n * __Default value:__ `false`\n */\n center?: boolean;\n\n /**\n * The spacing in pixels between facet's sub-views.\n *\n * __Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)\n */\n spacing?: number;\n}\n\nexport interface FacetMapping<\n F extends Field,\n FD extends FacetFieldDef<F, ExprRef | SignalRef> = FacetFieldDef<F, ExprRef | SignalRef>\n> {\n /**\n * A field definition for the vertical facet of trellis plots.\n */\n row?: FD;\n\n /**\n * A field definition for the horizontal facet of trellis plots.\n */\n column?: FD;\n}\n\nexport function isFacetMapping<F extends Field, ES extends ExprRef | SignalRef>(\n f: FacetFieldDef<F, ES> | FacetMapping<F>\n): f is FacetMapping<F> {\n return hasProperty(f, 'row') || hasProperty(f, 'column');\n}\n\n/**\n * Facet mapping for encoding macro\n */\nexport interface EncodingFacetMapping<F extends Field, ES extends ExprRef | SignalRef = ExprRef | SignalRef>\n extends FacetMapping<F, RowColumnEncodingFieldDef<F, ES>> {\n /**\n * A field definition for the (flexible) facet of trellis plots.\n *\n * If either `row` or `column` is specified, this channel will be ignored.\n */\n facet?: FacetEncodingFieldDef<F, ES>;\n}\n\nexport function isFacetFieldDef<F extends Field>(channelDef: ChannelDef<F>): channelDef is FacetFieldDef<F, any> {\n return hasProperty(channelDef, 'header');\n}\n\n/**\n * Base interface for a facet specification.\n */\nexport interface GenericFacetSpec<U extends GenericUnitSpec<any, any>, L extends GenericLayerSpec<any>, F extends Field>\n extends BaseSpec,\n GenericCompositionLayoutWithColumns,\n ResolveMixins {\n /**\n * Definition for how to facet the data. One of:\n * 1) [a field definition for faceting the plot by one field](https://vega.github.io/vega-lite/docs/facet.html#field-def)\n * 2) [An object that maps `row` and `column` channels to their field definitions](https://vega.github.io/vega-lite/docs/facet.html#mapping)\n */\n facet: FacetFieldDef<F, ExprRef | SignalRef> | FacetMapping<F>;\n\n /**\n * A specification of the view that gets faceted.\n */\n spec: L | U;\n // TODO: replace this with GenericSpec<U> once we support all cases;\n}\n\n/**\n * A facet specification without any shortcut / expansion syntax\n */\nexport type NormalizedFacetSpec = GenericFacetSpec<NormalizedUnitSpec, NormalizedLayerSpec, FieldName>;\n\nexport function isFacetSpec(spec: BaseSpec): spec is GenericFacetSpec<any, any, any> {\n return hasProperty(spec, 'facet');\n}\n", "import {Gradient, ScaleType, SignalRef, Text} from 'vega';\nimport {isArray, isBoolean, isNumber, isString} from 'vega-util';\nimport {Aggregate, isAggregateOp, isArgmaxDef, isArgminDef, isCountingAggregateOp} from './aggregate';\nimport {Axis} from './axis';\nimport {autoMaxBins, Bin, BinParams, binToString, isBinned, isBinning} from './bin';\nimport {\n ANGLE,\n Channel,\n COLOR,\n COLUMN,\n DESCRIPTION,\n DETAIL,\n ExtendedChannel,\n FACET,\n FILL,\n FILLOPACITY,\n getSizeChannel,\n HREF,\n isScaleChannel,\n isSecondaryRangeChannel,\n isXorY,\n KEY,\n LATITUDE,\n LATITUDE2,\n LONGITUDE,\n LONGITUDE2,\n OPACITY,\n ORDER,\n PolarPositionScaleChannel,\n PositionScaleChannel,\n RADIUS,\n RADIUS2,\n ROW,\n SHAPE,\n SIZE,\n STROKE,\n STROKEDASH,\n STROKEOPACITY,\n STROKEWIDTH,\n TEXT,\n THETA,\n THETA2,\n TIME,\n TOOLTIP,\n URL,\n X,\n X2,\n XOFFSET,\n Y,\n Y2,\n YOFFSET\n} from './channel';\nimport {getMarkConfig, getMarkPropOrConfig} from './compile/common';\nimport {isCustomFormatType} from './compile/format';\nimport {CompositeAggregate} from './compositemark';\nimport {Config} from './config';\nimport {DateTime, dateTimeToExpr, isDateTime} from './datetime';\nimport {Encoding} from './encoding';\nimport {ExprRef, isExprRef} from './expr';\nimport {Guide, GuideEncodingConditionalValueDef, TitleMixins} from './guide';\nimport {ImputeParams} from './impute';\nimport {Legend} from './legend';\nimport * as log from './log';\nimport {LogicalComposition} from './logical';\nimport {isRectBasedMark, Mark, MarkDef, RelativeBandSize} from './mark';\nimport {ParameterPredicate, Predicate} from './predicate';\nimport {hasDiscreteDomain, isContinuousToDiscrete, Scale, SCALE_CATEGORY_INDEX} from './scale';\nimport {isSortByChannel, Sort, SortOrder} from './sort';\nimport {isFacetFieldDef} from './spec/facet';\nimport {StackOffset} from './stack';\nimport {\n BinnedTimeUnit,\n getTimeUnitParts,\n isBinnedTimeUnit,\n isLocalSingleTimeUnit,\n normalizeTimeUnit,\n TimeUnit,\n TimeUnitParams,\n timeUnitToString\n} from './timeunit';\nimport {AggregatedFieldDef, WindowFieldDef} from './transform';\nimport {getFullName, QUANTITATIVE, StandardType, Type} from './type';\nimport {\n Dict,\n flatAccessWithDatum,\n getFirstDefined,\n hasProperty,\n internalField,\n omit,\n removePathFromField,\n replacePathInField,\n stringify,\n titleCase\n} from './util';\nimport {isSignalRef} from './vega.schema';\n\nexport type PrimitiveValue = number | string | boolean | null;\n\nexport type Value<ES extends ExprRef | SignalRef = ExprRef | SignalRef> =\n | PrimitiveValue\n | number[]\n | Gradient\n | Text\n | ES;\n\n/**\n * Definition object for a constant value (primitive value or gradient definition) of an encoding channel.\n */\nexport interface ValueDef<V extends Value = Value> {\n /**\n * A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity).\n */\n value: V;\n}\n\nexport type PositionValueDef = ValueDef<number | 'width' | 'height' | ExprRef | SignalRef>;\nexport type NumericValueDef = ValueDef<number | ExprRef | SignalRef>;\n\n/**\n * A ValueDef with Condition<ValueDef | FieldDef> where either the condition or the value are optional.\n * {\n * condition: {field: ...} | {value: ...},\n * value: ...,\n * }\n */\n\n/**\n * @minProperties 1\n */\nexport type ValueDefWithCondition<F extends FieldDef<any> | DatumDef<any>, V extends Value = Value> = Partial<\n ValueDef<V | ExprRef | SignalRef>\n> & {\n /**\n * A field definition or one or more value definition(s) with a parameter predicate.\n */\n condition?:\n | Conditional<F>\n | Conditional<ValueDef<V | ExprRef | SignalRef>>\n | Conditional<ValueDef<V | ExprRef | SignalRef>>[];\n};\n\nexport type StringValueDefWithCondition<F extends Field, T extends Type = StandardType> = ValueDefWithCondition<\n MarkPropFieldOrDatumDef<F, T>,\n string | null\n>;\nexport type TypeForShape = 'nominal' | 'ordinal' | 'geojson';\n\nexport type ConditionalTemplate = FieldDef<any> | DatumDef | ValueDef<any> | ExprRef | SignalRef;\n\nexport type Conditional<CD extends ConditionalTemplate> = ConditionalPredicate<CD> | ConditionalParameter<CD>;\n\nexport type ConditionalPredicate<CD extends ConditionalTemplate> = {\n /**\n * Predicate for triggering the condition\n */\n test: LogicalComposition<Predicate>;\n} & CD;\n\nexport type ConditionalParameter<CD extends ConditionalTemplate> = ParameterPredicate & CD;\n\nexport function isConditionalParameter<T extends ConditionalTemplate>(c: Conditional<T>): c is ConditionalParameter<T> {\n return hasProperty(c, 'param');\n}\n\nexport interface ConditionValueDefMixins<V extends Value = Value> {\n /**\n * One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n *\n * __Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value)\n * since Vega-Lite only allows at most one encoded field per encoding channel.\n */\n condition?: Conditional<ValueDef<V>> | Conditional<ValueDef<V>>[];\n}\n\n/**\n * A FieldDef with Condition<ValueDef>\n * {\n * condition: {value: ...},\n * field: ...,\n * ...\n * }\n */\n\nexport type FieldOrDatumDefWithCondition<F extends FieldDef<any, any> | DatumDef<any>, V extends Value = Value> = F &\n ConditionValueDefMixins<V | ExprRef | SignalRef>;\n\nexport type MarkPropDef<F extends Field, V extends Value, T extends Type = StandardType> =\n | FieldOrDatumDefWithCondition<MarkPropFieldDef<F, T>, V>\n | FieldOrDatumDefWithCondition<DatumDef<F>, V>\n | ValueDefWithCondition<MarkPropFieldOrDatumDef<F, T>, V>;\n\nexport type ColorDef<F extends Field> = MarkPropDef<F, Gradient | string | null>;\nexport type NumericMarkPropDef<F extends Field> = MarkPropDef<F, number>;\n\nexport type NumericArrayMarkPropDef<F extends Field> = MarkPropDef<F, number[]>;\n\nexport type ShapeDef<F extends Field> = MarkPropDef<F, string | null, TypeForShape>;\n\nexport type StringFieldDefWithCondition<F extends Field> = FieldOrDatumDefWithCondition<StringFieldDef<F>, string>;\nexport type TextDef<F extends Field> =\n | FieldOrDatumDefWithCondition<StringFieldDef<F>, Text>\n | FieldOrDatumDefWithCondition<StringDatumDef<F>, Text>\n | ValueDefWithCondition<StringFieldDef<F>, Text>;\n\n/**\n * A ValueDef with optional Condition<ValueDef | FieldDef>\n * {\n * condition: {field: ...} | {value: ...},\n * value: ...,\n * }\n */\n\n/**\n * Reference to a repeated value.\n */\nexport interface RepeatRef {\n repeat: 'row' | 'column' | 'repeat' | 'layer';\n}\n\nexport type FieldName = string;\nexport type Field = FieldName | RepeatRef;\n\nexport function isRepeatRef(field: Field | any): field is RepeatRef {\n return !isString(field) && hasProperty(field, 'repeat');\n}\n\n/** @@hidden */\nexport type HiddenCompositeAggregate = CompositeAggregate;\n\nexport interface FieldDefBase<F, B extends Bin = Bin> extends BandMixins {\n /**\n * __Required.__ A string defining the name of the field from which to pull a data value\n * or an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n *\n * __See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n *\n * __Notes:__\n * 1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\n * If field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\n * See more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n * 2) `field` is not required if `aggregate` is `count`.\n */\n field?: F;\n\n // function\n\n /**\n * Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\n * or [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n *\n * __Default value:__ `undefined` (None)\n *\n * __See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation.\n */\n timeUnit?: TimeUnit | BinnedTimeUnit | TimeUnitParams;\n\n /**\n * Aggregation function for the field\n * (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n *\n * __Default value:__ `undefined` (None)\n *\n * __See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation.\n */\n aggregate?: Aggregate | HiddenCompositeAggregate;\n\n /**\n * A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n *\n * - If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n *\n * - If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n *\n * __Default value:__ `false`\n *\n * __See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation.\n */\n bin?: B;\n}\n\nexport function toFieldDefBase(fieldDef: FieldDef<string>): FieldDefBase<string> {\n const {field, timeUnit, bin, aggregate} = fieldDef;\n return {\n ...(timeUnit ? {timeUnit} : {}),\n ...(bin ? {bin} : {}),\n ...(aggregate ? {aggregate} : {}),\n field\n };\n}\n\nexport interface TypeMixins<T extends Type> {\n /**\n * The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`).\n * It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n *\n * Vega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if:\n * (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit`\n * or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n *\n * __Default value:__\n *\n * 1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n * - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n * - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n * - `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n *\n * 2) For a constant value in data domain (`datum`):\n * - `\"quantitative\"` if the datum is a number\n * - `\"nominal\"` if the datum is a string\n * - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n *\n * __Note:__\n * - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n * - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n * - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n * - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n * - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n * - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n *\n * __See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation.\n */\n type?: T;\n}\n\n/**\n * Definition object for a data field, its type and transformation of an encoding channel.\n */\nexport type TypedFieldDef<\n F extends Field,\n T extends Type = any,\n B extends Bin = boolean | BinParams | 'binned' | null // This is equivalent to Bin but we use the full form so the docs has detailed types\n> = FieldDefBase<F, B> & TitleMixins & TypeMixins<T>;\n\nexport interface SortableFieldDef<\n F extends Field,\n T extends Type = StandardType,\n B extends Bin = boolean | BinParams | null\n> extends TypedFieldDef<F, T, B> {\n /**\n * Sort order for the encoded field.\n *\n * For continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n *\n * For discrete fields, `sort` can be one of the following:\n * - `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n * - [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`.\n * - [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n * - [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n * - `null` indicating no sort.\n *\n * __Default value:__ `\"ascending\"`\n *\n * __Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n *\n * __See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation.\n */\n sort?: Sort<F>;\n}\n\nexport function isSortableFieldDef<F extends Field>(fieldDef: FieldDef<F>): fieldDef is SortableFieldDef<F> {\n return hasProperty(fieldDef, 'sort');\n}\n\nexport type ScaleFieldDef<\n F extends Field,\n T extends Type = StandardType,\n B extends Bin = boolean | BinParams | null\n> = SortableFieldDef<F, T, B> & ScaleMixins;\n\nexport interface ScaleMixins {\n /**\n * An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n *\n * If `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n *\n * __Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n *\n * __See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation.\n */\n scale?: Scale | null;\n}\n\nexport type OffsetDef<F extends Field, T extends Type = StandardType> =\n | ScaleFieldDef<F, T>\n | ScaleDatumDef<F>\n | ValueDef<number>;\n\nexport interface DatumDef<\n F extends Field = string,\n V extends PrimitiveValue | DateTime | ExprRef | SignalRef = PrimitiveValue | DateTime | ExprRef | SignalRef\n> extends Partial<TypeMixins<Type>>,\n BandMixins,\n TitleMixins {\n /**\n * A constant value in data domain.\n */\n datum?: F extends RepeatRef ? V | RepeatRef : V;\n // only apply Repeatref if field (F) can be RepeatRef\n // FIXME(https://github.com/microsoft/TypeScript/issues/37586):\n // `F extends RepeatRef` probably should be `RepeatRef extends F` but there is likely a bug in TS.\n}\n\nexport interface FormatMixins {\n /**\n * When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n *\n * - If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n * - If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n *\n * See the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n *\n * When used with a [custom `formatType`](https://vega.github.io/vega-lite/docs/config.html#custom-format-type), this value will be passed as `format` alongside `datum.value` to the registered function.\n *\n * __Default value:__ Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format.\n */\n format?: string | Dict<unknown>;\n\n /**\n * The format type for labels. One of `\"number\"`, `\"time\"`, or a [registered custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type).\n *\n * __Default value:__\n * - `\"time\"` for temporal fields and ordinal and nominal fields with `timeUnit`.\n * - `\"number\"` for quantitative fields as well as ordinal and nominal fields without `timeUnit`.\n */\n formatType?: 'number' | 'time' | string;\n}\n\nexport type StringDatumDef<F extends Field = string> = DatumDef<F> & FormatMixins;\n\nexport type ScaleDatumDef<F extends Field = string> = ScaleMixins & DatumDef<F>;\n\n/**\n * A field definition of a secondary channel that shares a scale with another primary channel. For example, `x2`, `xError` and `xError2` share the same scale with `x`.\n */\nexport type SecondaryFieldDef<F extends Field> = FieldDefBase<F, null> & TitleMixins; // x2/y2 shouldn't have bin, but we keep bin property for simplicity of the codebase.\n\nexport type Position2Def<F extends Field> = SecondaryFieldDef<F> | DatumDef<F> | PositionValueDef;\n\nexport type SecondaryChannelDef<F extends Field> = Encoding<F>['x2' | 'y2'];\n\n/**\n * Field Def without scale (and without bin: \"binned\" support).\n */\nexport type FieldDefWithoutScale<F extends Field, T extends Type = StandardType> = TypedFieldDef<F, T>;\n\nexport type LatLongFieldDef<F extends Field> = FieldDefBase<F, null> &\n TitleMixins &\n Partial<TypeMixins<'quantitative'>>; // Lat long shouldn't have bin, but we keep bin property for simplicity of the codebase.\n\nexport type LatLongDef<F extends Field> = LatLongFieldDef<F> | DatumDef<F>;\n\nexport type PositionFieldDefBase<F extends Field> = ScaleFieldDef<\n F,\n StandardType,\n boolean | BinParams | 'binned' | null // This is equivalent to Bin but we use the full form so the docs has detailed types\n> &\n PositionBaseMixins;\n\nexport type PositionDatumDefBase<F extends Field> = ScaleDatumDef<F> & PositionBaseMixins;\n\nexport interface PositionBaseMixins {\n /**\n * Type of stacking offset if the field should be stacked.\n * `stack` is only applicable for `x`, `y`, `theta`, and `radius` channels with continuous domains.\n * For example, `stack` of `y` can be used to customize stacking for a vertical bar chart.\n *\n * `stack` can be one of the following values:\n * - `\"zero\"` or `true`: stacking with baseline offset at zero value of the scale (for creating typical stacked [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and [area](https://vega.github.io/vega-lite/docs/stack.html#area) chart).\n * - `\"normalize\"` - stacking with normalized domain (for creating [normalized stacked bar and area charts](https://vega.github.io/vega-lite/docs/stack.html#normalized) and pie charts [with percentage tooltip](https://vega.github.io/vega-lite/docs/arc.html#tooltip)). <br/>\n * -`\"center\"` - stacking with center baseline (for [streamgraph](https://vega.github.io/vega-lite/docs/stack.html#streamgraph)).\n * - `null` or `false` - No-stacking. This will produce layered [bar](https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart) and area chart.\n *\n * __Default value:__ `zero` for plots with all of the following conditions are true:\n * (1) the mark is `bar`, `area`, or `arc`;\n * (2) the stacked measure channel (x or y) has a linear scale;\n * (3) At least one of non-position channels mapped to an unaggregated field that is different from x and y. Otherwise, `null` by default.\n *\n * __See also:__ [`stack`](https://vega.github.io/vega-lite/docs/stack.html) documentation.\n */\n stack?: StackOffset | null | boolean;\n}\n\nexport interface BandMixins {\n /**\n * Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.\n *\n * @minimum 0\n * @maximum 1\n */\n bandPosition?: number;\n}\n\nexport type PositionFieldDef<F extends Field> = PositionFieldDefBase<F> & PositionMixins;\n\nexport type PositionDatumDef<F extends Field> = PositionDatumDefBase<F> & PositionMixins;\n\nexport type PositionDef<F extends Field> = PositionFieldDef<F> | PositionDatumDef<F> | PositionValueDef;\n\nexport interface PositionMixins {\n /**\n * An object defining properties of axis's gridlines, ticks and labels.\n * If `null`, the axis for the encoding channel will be removed.\n *\n * __Default value:__ If undefined, default [axis properties](https://vega.github.io/vega-lite/docs/axis.html) are applied.\n *\n * __See also:__ [`axis`](https://vega.github.io/vega-lite/docs/axis.html) documentation.\n */\n axis?: Axis<ExprRef | SignalRef> | null;\n\n /**\n * An object defining the properties of the Impute Operation to be applied.\n * The field value of the other positional channel is taken as `key` of the `Impute` Operation.\n * The field of the `color` channel if specified is used as `groupby` of the `Impute` Operation.\n *\n * __See also:__ [`impute`](https://vega.github.io/vega-lite/docs/impute.html) documentation.\n */\n impute?: ImputeParams | null;\n}\n\nexport type PolarDef<F extends Field> = PositionFieldDefBase<F> | PositionDatumDefBase<F> | PositionValueDef;\n\nexport type TimeDef<F extends Field> = TimeFieldDef<F>;\nexport interface TimeMixins {\n rescale?: boolean;\n}\nexport type TimeFieldDef<F extends Field> = ScaleFieldDef<F, StandardType> & TimeMixins;\n\nexport function getBandPosition({\n fieldDef,\n fieldDef2,\n markDef: mark,\n config\n}: {\n fieldDef: FieldDef<string> | DatumDef;\n fieldDef2?: SecondaryChannelDef<string>;\n markDef: MarkDef<Mark, SignalRef>;\n config: Config<SignalRef>;\n}): number {\n if (isFieldOrDatumDef(fieldDef) && fieldDef.bandPosition !== undefined) {\n return fieldDef.bandPosition;\n }\n if (isFieldDef(fieldDef)) {\n const {timeUnit, bin} = fieldDef;\n if (timeUnit && !fieldDef2) {\n return getMarkConfig('timeUnitBandPosition', mark, config);\n } else if (isBinning(bin)) {\n return 0.5;\n }\n }\n\n return undefined;\n}\n\nexport function getBandSize({\n channel,\n fieldDef,\n fieldDef2,\n markDef: mark,\n config,\n scaleType,\n useVlSizeChannel\n}: {\n channel: PositionScaleChannel | PolarPositionScaleChannel;\n fieldDef: ChannelDef<string>;\n fieldDef2?: SecondaryChannelDef<string>;\n markDef: MarkDef<Mark, SignalRef>;\n config: Config<SignalRef>;\n scaleType: ScaleType;\n useVlSizeChannel?: boolean;\n}): number | RelativeBandSize | SignalRef {\n const sizeChannel = getSizeChannel(channel);\n const size = getMarkPropOrConfig(useVlSizeChannel ? 'size' : sizeChannel, mark, config, {\n vgChannel: sizeChannel\n });\n\n if (size !== undefined) {\n return size;\n }\n\n if (isFieldDef(fieldDef)) {\n const {timeUnit, bin} = fieldDef;\n\n if (timeUnit && !fieldDef2) {\n return {band: getMarkConfig('timeUnitBandSize', mark, config)};\n } else if (isBinning(bin) && !hasDiscreteDomain(scaleType)) {\n return {band: 1};\n }\n }\n\n if (isRectBasedMark(mark.type)) {\n if (scaleType) {\n if (hasDiscreteDomain(scaleType)) {\n return config[mark.type]?.discreteBandSize || {band: 1};\n } else {\n return config[mark.type]?.continuousBandSize;\n }\n }\n return config[mark.type]?.discreteBandSize;\n }\n\n return undefined;\n}\n\nexport function hasBandEnd(\n fieldDef: FieldDef<string>,\n fieldDef2: SecondaryChannelDef<string>,\n markDef: MarkDef<Mark, SignalRef>,\n config: Config<SignalRef>\n): boolean {\n if (isBinning(fieldDef.bin) || (fieldDef.timeUnit && isTypedFieldDef(fieldDef) && fieldDef.type === 'temporal')) {\n // Need to check bandPosition because non-rect marks (e.g., point) with timeUnit\n // doesn't have to use bandEnd if there is no bandPosition.\n return getBandPosition({fieldDef, fieldDef2, markDef, config}) !== undefined;\n }\n return false;\n}\n\n/**\n * Field definition of a mark property, which can contain a legend.\n */\nexport type MarkPropFieldDef<F extends Field, T extends Type = Type> = ScaleFieldDef<F, T, boolean | BinParams | null> &\n LegendMixins;\n\nexport type MarkPropDatumDef<F extends Field> = LegendMixins & ScaleDatumDef<F>;\n\nexport type MarkPropFieldOrDatumDef<F extends Field, T extends Type = Type> =\n | MarkPropFieldDef<F, T>\n | MarkPropDatumDef<F>;\n\nexport interface LegendMixins {\n /**\n * An object defining properties of the legend.\n * If `null`, the legend for the encoding channel will be removed.\n *\n * __Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n *\n * __See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation.\n */\n legend?: Legend<ExprRef | SignalRef> | null;\n}\n\n// Detail\n\n// Order Path have no scale\n\nexport type OrderFieldDef<F extends Field> = FieldDefWithoutScale<F> & OrderOnlyDef;\n\nexport interface OrderOnlyDef {\n /**\n * The sort order. One of `\"ascending\"` (default) or `\"descending\"`.\n */\n sort?: SortOrder;\n}\n\nexport function isOrderOnlyDef<F extends Field>(\n orderDef: OrderFieldDef<F> | OrderFieldDef<F>[] | OrderValueDef | OrderOnlyDef\n): orderDef is OrderOnlyDef {\n return hasProperty(orderDef, 'sort') && !hasProperty(orderDef, 'field');\n}\n\nexport type OrderValueDef = ConditionValueDefMixins<number> & NumericValueDef;\n\nexport interface StringFieldDef<F extends Field> extends FieldDefWithoutScale<F, StandardType>, FormatMixins {}\n\nexport type FieldDef<F extends Field, T extends Type = any> = SecondaryFieldDef<F> | TypedFieldDef<F, T>;\nexport type ChannelDef<F extends Field = string> = Encoding<F>[keyof Encoding<F>];\n\nexport function isConditionalDef<CD extends ChannelDef<any> | GuideEncodingConditionalValueDef | ExprRef | SignalRef>(\n channelDef: CD\n): channelDef is CD & {condition: Conditional<any>} {\n return hasProperty(channelDef, 'condition');\n}\n\n/**\n * Return if a channelDef is a ConditionalValueDef with ConditionFieldDef\n */\nexport function hasConditionalFieldDef<F extends Field>(\n channelDef: Partial<ChannelDef<F>>\n): channelDef is {condition: Conditional<TypedFieldDef<F>>} {\n const condition = (channelDef as any)?.['condition'];\n return !!condition && !isArray(condition) && isFieldDef(condition);\n}\n\nexport function hasConditionalFieldOrDatumDef<F extends Field>(\n channelDef: ChannelDef<F>\n): channelDef is {condition: Conditional<TypedFieldDef<F>>} {\n const condition = (channelDef as any)?.['condition'];\n return !!condition && !isArray(condition) && isFieldOrDatumDef(condition);\n}\n\nexport function hasConditionalValueDef<F extends Field>(\n channelDef: ChannelDef<F>\n): channelDef is ValueDef<any> & {condition: Conditional<ValueDef<any>> | Conditional<ValueDef<any>>[]} {\n const condition = (channelDef as any)?.['condition'];\n return !!condition && (isArray(condition) || isValueDef(condition));\n}\n\nexport function isFieldDef<F extends Field>(\n channelDef: Partial<ChannelDef<F>> | FieldDefBase<F> | DatumDef<F, any>\n): channelDef is FieldDefBase<F> | TypedFieldDef<F> | SecondaryFieldDef<F> {\n return hasProperty(channelDef, 'field') || (channelDef as any)?.aggregate === 'count';\n}\n\nexport function channelDefType<F extends Field>(channelDef: ChannelDef<F>): Type | undefined {\n return (channelDef as any)?.['type'];\n}\n\nexport function isDatumDef<F extends Field>(\n channelDef: Partial<ChannelDef<F>> | FieldDefBase<F> | DatumDef<F, any>\n): channelDef is DatumDef<F, any> {\n return hasProperty(channelDef, 'datum');\n}\n\nexport function isContinuousFieldOrDatumDef<F extends Field>(\n cd: ChannelDef<F>\n): cd is TypedFieldDef<F> | DatumDef<F, number> {\n // TODO: make datum support DateTime object\n return (isTypedFieldDef(cd) && !isDiscrete(cd)) || isNumericDataDef(cd);\n}\n\nexport function isUnbinnedQuantitativeFieldOrDatumDef<F extends Field>(cd: ChannelDef<F>) {\n // TODO: make datum support DateTime object\n return (isTypedFieldDef(cd) && cd.type === 'quantitative' && !cd.bin) || isNumericDataDef(cd);\n}\n\nexport function isNumericDataDef<F extends Field>(cd: ChannelDef<F>): cd is DatumDef<F, number> {\n return isDatumDef(cd) && isNumber(cd.datum);\n}\n\nexport function isFieldOrDatumDef<F extends Field>(\n channelDef: Partial<ChannelDef<F>>\n): channelDef is FieldDef<F, any> | DatumDef<F> {\n return isFieldDef(channelDef) || isDatumDef(channelDef);\n}\n\nexport function isTypedFieldDef<F extends Field>(channelDef: ChannelDef<F>): channelDef is TypedFieldDef<F> {\n return (\n channelDef &&\n (hasProperty(channelDef, 'field') || (channelDef as any)['aggregate'] === 'count') &&\n hasProperty(channelDef, 'type')\n );\n}\n\nexport function isValueDef<F extends Field>(channelDef: Partial<ChannelDef<F>>): channelDef is ValueDef<any> {\n return hasProperty(channelDef, 'value');\n}\n\nexport function isScaleFieldDef<F extends Field>(channelDef: ChannelDef<F>): channelDef is ScaleFieldDef<F> {\n return hasProperty(channelDef, 'scale') || hasProperty(channelDef, 'sort');\n}\n\nexport function isPositionFieldOrDatumDef<F extends Field>(\n channelDef: ChannelDef<F>\n): channelDef is PositionFieldDef<F> | PositionDatumDef<F> {\n return hasProperty(channelDef, 'axis') || hasProperty(channelDef, 'stack') || hasProperty(channelDef, 'impute');\n}\n\nexport function isMarkPropFieldOrDatumDef<F extends Field>(\n channelDef: ChannelDef<F>\n): channelDef is MarkPropFieldDef<F, any> | MarkPropDatumDef<F> {\n return hasProperty(channelDef, 'legend');\n}\n\nexport function isStringFieldOrDatumDef<F extends Field>(\n channelDef: ChannelDef<F>\n): channelDef is StringFieldDef<F> | StringDatumDef<F> {\n return hasProperty(channelDef, 'format') || hasProperty(channelDef, 'formatType');\n}\n\nexport function toStringFieldDef<F extends Field>(fieldDef: FieldDef<F>): StringFieldDef<F> {\n // omit properties that don't exist in string field defs\n return omit(fieldDef, ['legend', 'axis', 'header', 'scale'] as any[]);\n}\n\nexport interface FieldRefOption {\n /** Exclude bin, aggregate, timeUnit */\n nofn?: boolean;\n /** Wrap the field with datum, parent, or datum.datum (e.g., datum['...'] for Vega Expression */\n expr?: 'datum' | 'parent' | 'datum.datum';\n /** Prepend fn with custom function prefix */\n prefix?: string;\n /** Append suffix to the field ref for bin (default='start') */\n binSuffix?: 'end' | 'range' | 'mid';\n /** Append suffix to the field ref (general) */\n suffix?: string;\n /**\n * Use the field name for `as` in a transform.\n * We will not escape nested accesses because Vega transform outputs cannot be nested.\n */\n forAs?: boolean;\n}\n\nfunction isOpFieldDef(\n fieldDef: FieldDefBase<string> | WindowFieldDef | AggregatedFieldDef\n): fieldDef is WindowFieldDef | AggregatedFieldDef {\n return hasProperty(fieldDef, 'op');\n}\n\n/**\n * Get a Vega field reference from a Vega-Lite field def.\n */\nexport function vgField(\n fieldDef: FieldDefBase<string> | WindowFieldDef | AggregatedFieldDef,\n opt: FieldRefOption = {}\n): string {\n let field = fieldDef.field;\n const prefix = opt.prefix;\n let suffix = opt.suffix;\n\n let argAccessor = ''; // for accessing argmin/argmax field at the end without getting escaped\n\n if (isCount(fieldDef)) {\n field = internalField('count');\n } else {\n let fn: string;\n\n if (!opt.nofn) {\n if (isOpFieldDef(fieldDef)) {\n fn = fieldDef.op;\n } else {\n const {bin, aggregate, timeUnit} = fieldDef;\n if (isBinning(bin)) {\n fn = binToString(bin);\n suffix = (opt.binSuffix ?? '') + (opt.suffix ?? '');\n } else if (aggregate) {\n if (isArgmaxDef(aggregate)) {\n argAccessor = `[\"${field}\"]`;\n field = `argmax_${aggregate.argmax}`;\n } else if (isArgminDef(aggregate)) {\n argAccessor = `[\"${field}\"]`;\n field = `argmin_${aggregate.argmin}`;\n } else {\n fn = String(aggregate);\n }\n } else if (timeUnit && !isBinnedTimeUnit(timeUnit)) {\n fn = timeUnitToString(timeUnit);\n suffix = ((!['range', 'mid'].includes(opt.binSuffix) && opt.binSuffix) || '') + (opt.suffix ?? '');\n }\n }\n }\n\n if (fn) {\n field = field ? `${fn}_${field}` : fn;\n }\n }\n\n if (suffix) {\n field = `${field}_${suffix}`;\n }\n\n if (prefix) {\n field = `${prefix}_${field}`;\n }\n\n if (opt.forAs) {\n return removePathFromField(field);\n } else if (opt.expr) {\n // Expression to access flattened field. No need to escape dots.\n return flatAccessWithDatum(field, opt.expr) + argAccessor;\n } else {\n // We flattened all fields so paths should have become dot.\n return replacePathInField(field) + argAccessor;\n }\n}\n\nexport function isDiscrete(def: TypedFieldDef<Field> | DatumDef<any, any>) {\n switch (def.type) {\n case 'nominal':\n case 'ordinal':\n case 'geojson':\n return true;\n case 'quantitative':\n return isFieldDef(def) && !!def.bin;\n case 'temporal':\n return false;\n }\n throw new Error(log.message.invalidFieldType(def.type));\n}\n\nexport function isDiscretizing(def: TypedFieldDef<Field> | DatumDef<any, any>) {\n return isScaleFieldDef(def) && isContinuousToDiscrete(def.scale?.type);\n}\n\nexport function isCount(fieldDef: FieldDefBase<Field>) {\n return fieldDef.aggregate === 'count';\n}\n\nexport type FieldTitleFormatter = (fieldDef: FieldDefBase<string>, config: Config) => string;\n\nexport function verbalTitleFormatter(fieldDef: FieldDefBase<string>, config: Config) {\n const {field, bin, timeUnit, aggregate} = fieldDef;\n if (aggregate === 'count') {\n return config.countTitle;\n } else if (isBinning(bin)) {\n return `${field} (binned)`;\n } else if (timeUnit && !isBinnedTimeUnit(timeUnit)) {\n const unit = normalizeTimeUnit(timeUnit)?.unit;\n if (unit) {\n return `${field} (${getTimeUnitParts(unit).join('-')})`;\n }\n } else if (aggregate) {\n if (isArgmaxDef(aggregate)) {\n return `${field} for max ${aggregate.argmax}`;\n } else if (isArgminDef(aggregate)) {\n return `${field} for min ${aggregate.argmin}`;\n } else {\n return `${titleCase(aggregate)} of ${field}`;\n }\n }\n return field;\n}\n\nexport function functionalTitleFormatter(fieldDef: FieldDefBase<string>) {\n const {aggregate, bin, timeUnit, field} = fieldDef;\n if (isArgmaxDef(aggregate)) {\n return `${field} for argmax(${aggregate.argmax})`;\n } else if (isArgminDef(aggregate)) {\n return `${field} for argmin(${aggregate.argmin})`;\n }\n\n const timeUnitParams = timeUnit && !isBinnedTimeUnit(timeUnit) ? normalizeTimeUnit(timeUnit) : undefined;\n\n const fn = aggregate || timeUnitParams?.unit || (timeUnitParams?.maxbins && 'timeunit') || (isBinning(bin) && 'bin');\n return fn ? `${fn.toUpperCase()}(${field})` : field;\n}\n\nexport const defaultTitleFormatter: FieldTitleFormatter = (fieldDef: FieldDefBase<string>, config: Config) => {\n switch (config.fieldTitle) {\n case 'plain':\n return fieldDef.field;\n case 'functional':\n return functionalTitleFormatter(fieldDef);\n default:\n return verbalTitleFormatter(fieldDef, config);\n }\n};\n\nlet titleFormatter = defaultTitleFormatter;\n\nexport function setTitleFormatter(formatter: FieldTitleFormatter) {\n titleFormatter = formatter;\n}\n\nexport function resetTitleFormatter() {\n setTitleFormatter(defaultTitleFormatter);\n}\n\nexport function title(\n fieldOrDatumDef: TypedFieldDef<string> | SecondaryFieldDef<string> | DatumDef,\n config: Config,\n {allowDisabling, includeDefault = true}: {allowDisabling: boolean; includeDefault?: boolean}\n) {\n const guideTitle = getGuide(fieldOrDatumDef)?.title;\n\n if (!isFieldDef(fieldOrDatumDef)) {\n return guideTitle ?? fieldOrDatumDef.title;\n }\n const fieldDef = fieldOrDatumDef;\n\n const def = includeDefault ? defaultTitle(fieldDef, config) : undefined;\n\n if (allowDisabling) {\n return getFirstDefined(guideTitle, fieldDef.title, def);\n } else {\n return guideTitle ?? fieldDef.title ?? def;\n }\n}\n\nexport function getGuide(fieldDef: TypedFieldDef<string> | SecondaryFieldDef<string> | DatumDef): Guide {\n if (isPositionFieldOrDatumDef(fieldDef) && fieldDef.axis) {\n return fieldDef.axis;\n } else if (isMarkPropFieldOrDatumDef(fieldDef) && fieldDef.legend) {\n return fieldDef.legend;\n } else if (isFacetFieldDef(fieldDef) && fieldDef.header) {\n return fieldDef.header;\n }\n return undefined;\n}\n\nexport function defaultTitle(fieldDef: FieldDefBase<string>, config: Config) {\n return titleFormatter(fieldDef, config);\n}\n\nexport function getFormatMixins(fieldDef: TypedFieldDef<string> | DatumDef) {\n if (isStringFieldOrDatumDef(fieldDef)) {\n const {format, formatType} = fieldDef;\n return {format, formatType};\n } else {\n const guide = getGuide(fieldDef) ?? {};\n const {format, formatType} = guide;\n return {format, formatType};\n }\n}\n\nexport function defaultType<T extends TypedFieldDef<Field>>(fieldDef: T, channel: ExtendedChannel): Type {\n switch (channel) {\n case 'latitude':\n case 'longitude':\n return 'quantitative';\n\n case 'row':\n case 'column':\n case 'facet':\n case 'shape':\n case 'strokeDash':\n return 'nominal';\n\n case 'order':\n return 'ordinal';\n }\n\n if (isSortableFieldDef(fieldDef) && isArray(fieldDef.sort)) {\n return 'ordinal';\n }\n\n const {aggregate, bin, timeUnit} = fieldDef;\n if (timeUnit) {\n return 'temporal';\n }\n\n if (bin || (aggregate && !isArgmaxDef(aggregate) && !isArgminDef(aggregate))) {\n return 'quantitative';\n }\n\n if (isScaleFieldDef(fieldDef) && fieldDef.scale?.type) {\n switch (SCALE_CATEGORY_INDEX[fieldDef.scale.type]) {\n case 'numeric':\n case 'discretizing':\n return 'quantitative';\n case 'time':\n return 'temporal';\n }\n }\n\n return 'nominal';\n}\n\n/**\n * Returns the fieldDef -- either from the outer channelDef or from the condition of channelDef.\n * @param channelDef\n */\n\nexport function getFieldDef<F extends Field>(channelDef: ChannelDef<F>): FieldDef<F> {\n if (isFieldDef(channelDef)) {\n return channelDef;\n } else if (hasConditionalFieldDef(channelDef)) {\n return channelDef.condition;\n }\n return undefined;\n}\n\nexport function getFieldOrDatumDef<F extends Field = string, CD extends ChannelDef<F> = ChannelDef<F>>(\n channelDef: CD\n): FieldDef<F> | DatumDef<F> {\n if (isFieldOrDatumDef<F>(channelDef)) {\n return channelDef;\n } else if (hasConditionalFieldOrDatumDef(channelDef)) {\n return channelDef.condition;\n }\n return undefined;\n}\n\n/**\n * Convert type to full, lowercase type, or augment the fieldDef with a default type if missing.\n */\nexport function initChannelDef(\n channelDef: ChannelDef<string>,\n channel: ExtendedChannel,\n config: Config,\n opt: {compositeMark?: boolean} = {}\n): ChannelDef<string> {\n if (isString(channelDef) || isNumber(channelDef) || isBoolean(channelDef)) {\n const primitiveType = isString(channelDef) ? 'string' : isNumber(channelDef) ? 'number' : 'boolean';\n log.warn(log.message.primitiveChannelDef(channel, primitiveType, channelDef));\n return {value: channelDef} as ValueDef<any>;\n }\n\n // If a fieldDef contains a field, we need type.\n if (isFieldOrDatumDef(channelDef)) {\n return initFieldOrDatumDef(channelDef, channel, config, opt);\n } else if (hasConditionalFieldOrDatumDef(channelDef)) {\n return {\n ...channelDef,\n // Need to cast as normalizeFieldDef normally return FieldDef, but here we know that it is definitely Condition<FieldDef>\n condition: initFieldOrDatumDef(channelDef.condition, channel, config, opt) as Conditional<TypedFieldDef<string>>\n };\n }\n return channelDef;\n}\n\nexport function initFieldOrDatumDef(\n fd: FieldDef<string, any> | DatumDef,\n channel: ExtendedChannel,\n config: Config,\n opt: {compositeMark?: boolean}\n): FieldDef<string, any> | DatumDef {\n if (isStringFieldOrDatumDef(fd)) {\n const {format, formatType, ...rest} = fd;\n if (isCustomFormatType(formatType) && !config.customFormatTypes) {\n log.warn(log.message.customFormatTypeNotAllowed(channel));\n return initFieldOrDatumDef(rest, channel, config, opt);\n }\n } else {\n const guideType = isPositionFieldOrDatumDef(fd)\n ? 'axis'\n : isMarkPropFieldOrDatumDef(fd)\n ? 'legend'\n : isFacetFieldDef(fd)\n ? 'header'\n : null;\n if (guideType && (fd as any)[guideType]) {\n const {format, formatType, ...newGuide} = (fd as any)[guideType];\n if (isCustomFormatType(formatType) && !config.customFormatTypes) {\n log.warn(log.message.customFormatTypeNotAllowed(channel));\n return initFieldOrDatumDef({...fd, [guideType]: newGuide}, channel, config, opt);\n }\n }\n }\n\n if (isFieldDef(fd)) {\n return initFieldDef(fd, channel, opt);\n }\n return initDatumDef(fd);\n}\n\nfunction initDatumDef(datumDef: DatumDef): DatumDef {\n let type = datumDef['type'];\n if (type) {\n return datumDef;\n }\n const {datum} = datumDef;\n type = isNumber(datum) ? 'quantitative' : isString(datum) ? 'nominal' : isDateTime(datum) ? 'temporal' : undefined;\n\n return {...datumDef, type};\n}\n\nexport function initFieldDef(\n fd: FieldDef<string, any>,\n channel: ExtendedChannel,\n {compositeMark = false}: {compositeMark?: boolean} = {}\n) {\n const {aggregate, timeUnit, bin, field} = fd;\n const fieldDef = {...fd};\n\n // Drop invalid aggregate\n if (!compositeMark && aggregate && !isAggregateOp(aggregate) && !isArgmaxDef(aggregate) && !isArgminDef(aggregate)) {\n log.warn(log.message.invalidAggregate(aggregate));\n delete fieldDef.aggregate;\n }\n\n // Normalize Time Unit\n if (timeUnit) {\n fieldDef.timeUnit = normalizeTimeUnit(timeUnit);\n }\n\n if (field) {\n fieldDef.field = `${field}`;\n }\n\n // Normalize bin\n if (isBinning(bin)) {\n fieldDef.bin = normalizeBin(bin, channel);\n }\n\n if (isBinned(bin) && !isXorY(channel)) {\n log.warn(log.message.channelShouldNotBeUsedForBinned(channel));\n }\n\n // Normalize Type\n if (isTypedFieldDef(fieldDef)) {\n const {type} = fieldDef;\n const fullType = getFullName(type);\n if (type !== fullType) {\n // convert short type to full type\n fieldDef.type = fullType;\n }\n if (type !== 'quantitative') {\n if (isCountingAggregateOp(aggregate)) {\n log.warn(log.message.invalidFieldTypeForCountAggregate(type, aggregate));\n fieldDef.type = 'quantitative';\n }\n }\n } else if (!isSecondaryRangeChannel(channel)) {\n // If type is empty / invalid, then augment with default type\n const newType = defaultType(fieldDef as TypedFieldDef<any>, channel);\n (fieldDef as any)['type'] = newType;\n }\n\n if (isTypedFieldDef(fieldDef)) {\n const {compatible, warning} = channelCompatibility(fieldDef, channel) || {};\n if (compatible === false) {\n log.warn(warning);\n }\n }\n\n if (isSortableFieldDef(fieldDef) && isString(fieldDef.sort)) {\n const {sort} = fieldDef;\n if (isSortByChannel(sort)) {\n return {\n ...fieldDef,\n sort: {encoding: sort}\n };\n }\n const sub = sort.substring(1);\n if (sort.charAt(0) === '-' && isSortByChannel(sub)) {\n return {\n ...fieldDef,\n sort: {encoding: sub, order: 'descending'}\n };\n }\n }\n\n if (isFacetFieldDef(fieldDef)) {\n const {header} = fieldDef;\n if (header) {\n const {orient, ...rest} = header;\n if (orient) {\n return {\n ...fieldDef,\n header: {\n ...rest,\n labelOrient: header.labelOrient || orient,\n titleOrient: header.titleOrient || orient\n }\n };\n }\n }\n }\n\n return fieldDef;\n}\n\nexport function normalizeBin(bin: BinParams | boolean | 'binned', channel?: ExtendedChannel) {\n if (isBoolean(bin)) {\n return {maxbins: autoMaxBins(channel)};\n } else if (bin === 'binned') {\n return {\n binned: true\n };\n } else if (!bin.maxbins && !bin.step) {\n return {...bin, maxbins: autoMaxBins(channel)};\n } else {\n return bin;\n }\n}\n\nconst COMPATIBLE = {compatible: true};\nexport function channelCompatibility(\n fieldDef: TypedFieldDef<Field>,\n channel: ExtendedChannel\n): {compatible: boolean; warning?: string} {\n const type = fieldDef.type;\n\n if (type === 'geojson' && channel !== 'shape') {\n return {\n compatible: false,\n warning: `Channel ${channel} should not be used with a geojson data.`\n };\n }\n\n switch (channel) {\n case ROW:\n case COLUMN:\n case FACET:\n if (!isDiscrete(fieldDef)) {\n return {\n compatible: false,\n warning: log.message.channelShouldBeDiscrete(channel)\n };\n }\n return COMPATIBLE;\n\n case X:\n case Y:\n case XOFFSET:\n case YOFFSET:\n case COLOR:\n case FILL:\n case STROKE:\n case TEXT:\n case DETAIL:\n case KEY:\n case TOOLTIP:\n case HREF:\n case URL:\n case ANGLE:\n case THETA:\n case RADIUS:\n case DESCRIPTION:\n return COMPATIBLE;\n\n case LONGITUDE:\n case LONGITUDE2:\n case LATITUDE:\n case LATITUDE2:\n if (type !== QUANTITATIVE) {\n return {\n compatible: false,\n warning: `Channel ${channel} should be used with a quantitative field only, not ${fieldDef.type} field.`\n };\n }\n return COMPATIBLE;\n\n case OPACITY:\n case FILLOPACITY:\n case STROKEOPACITY:\n case STROKEWIDTH:\n case SIZE:\n case THETA2:\n case RADIUS2:\n case X2:\n case Y2:\n case TIME:\n if (type === 'nominal' && !(fieldDef as any)['sort']) {\n return {\n compatible: false,\n warning: `Channel ${channel} should not be used with an unsorted discrete field.`\n };\n }\n return COMPATIBLE;\n\n case SHAPE:\n case STROKEDASH:\n if (!isDiscrete(fieldDef) && !isDiscretizing(fieldDef)) {\n return {\n compatible: false,\n warning: log.message.channelShouldBeDiscreteOrDiscretizing(channel)\n };\n }\n return COMPATIBLE;\n\n case ORDER:\n if (fieldDef.type === 'nominal' && !('sort' in fieldDef)) {\n return {\n compatible: false,\n warning: `Channel order is inappropriate for nominal field, which has no inherent order.`\n };\n }\n return COMPATIBLE;\n }\n}\n\n/**\n * Check if the field def uses a time format or does not use any format but is temporal\n * (this does not cover field defs that are temporal but use a number format).\n */\nexport function isFieldOrDatumDefForTimeFormat(fieldOrDatumDef: FieldDef<string> | DatumDef): boolean {\n const {formatType} = getFormatMixins(fieldOrDatumDef);\n return formatType === 'time' || (!formatType && isTemporalFieldDef(fieldOrDatumDef));\n}\n\n/**\n * Check if field def has type `temporal`. If you want to also cover field defs that use a time format, use `isFieldOrDatumDefForTimeFormat`.\n */\nexport function isTemporalFieldDef(def: FieldDef<any> | DatumDef): boolean {\n return def && ((def as any)['type'] === 'temporal' || (isFieldDef(def) && !!def.timeUnit));\n}\n\n/**\n * Getting a value associated with a fielddef.\n * Convert the value to Vega expression if applicable (for datetime object, or string if the field def is temporal or has timeUnit)\n */\nexport function valueExpr(\n v: number | string | boolean | DateTime | ExprRef | SignalRef | number[],\n {\n timeUnit,\n type,\n wrapTime,\n undefinedIfExprNotRequired\n }: {\n timeUnit: TimeUnit | TimeUnitParams;\n type?: Type;\n wrapTime?: boolean;\n undefinedIfExprNotRequired?: boolean;\n }\n): string {\n const unit = timeUnit && normalizeTimeUnit(timeUnit)?.unit;\n let isTime = unit || type === 'temporal';\n\n let expr;\n if (isExprRef(v)) {\n expr = v.expr;\n } else if (isSignalRef(v)) {\n expr = v.signal;\n } else if (isDateTime(v)) {\n isTime = true;\n expr = dateTimeToExpr(v);\n } else if (isString(v) || isNumber(v)) {\n if (isTime) {\n expr = `datetime(${stringify(v)})`;\n\n if (isLocalSingleTimeUnit(unit)) {\n // for single timeUnit, we will use dateTimeToExpr to convert number/string to match the timeUnit\n if ((isNumber(v) && v < 10000) || (isString(v) && isNaN(Date.parse(v)))) {\n expr = dateTimeToExpr({[unit]: v});\n }\n }\n }\n }\n if (expr) {\n return wrapTime && isTime ? `time(${expr})` : expr;\n }\n // number or boolean or normal string\n return undefinedIfExprNotRequired ? undefined : stringify(v);\n}\n\n/**\n * Standardize value array -- convert each value to Vega expression if applicable\n */\nexport function valueArray(\n fieldOrDatumDef: TypedFieldDef<string> | DatumDef,\n values: (number | string | boolean | DateTime)[]\n) {\n const {type} = fieldOrDatumDef;\n return values.map(v => {\n const timeUnit =\n isFieldDef(fieldOrDatumDef) && !isBinnedTimeUnit(fieldOrDatumDef.timeUnit) ? fieldOrDatumDef.timeUnit : undefined;\n const expr = valueExpr(v, {\n timeUnit,\n type,\n undefinedIfExprNotRequired: true\n });\n // return signal for the expression if we need an expression\n if (expr !== undefined) {\n return {signal: expr};\n }\n // otherwise just return the original value\n return v;\n });\n}\n\n/**\n * Checks whether a fieldDef for a particular channel requires a computed bin range.\n */\nexport function binRequiresRange(fieldDef: FieldDef<string>, channel: Channel): boolean {\n if (!isBinning(fieldDef.bin)) {\n console.warn('Only call this method for binned field defs.');\n return false;\n }\n\n // We need the range only when the user explicitly forces a binned field to be use discrete scale. In this case, bin range is used in axis and legend labels.\n // We could check whether the axis or legend exists (not disabled) but that seems overkill.\n return isScaleChannel(channel) && ['ordinal', 'nominal'].includes((fieldDef as ScaleFieldDef<string>).type);\n}\n", "import type {\n Align,\n Axis as VgAxis,\n AxisEncode,\n AxisOrient,\n BaseAxis,\n Color,\n FontStyle,\n FontWeight,\n LabelOverlap,\n SignalRef,\n TextBaseline,\n TimeInterval,\n TimeIntervalStep\n} from 'vega';\nimport {ConditionalPredicate, Value, ValueDef} from './channeldef';\nimport {DateTime} from './datetime';\nimport {ExprRef} from './expr';\nimport {Guide, GuideEncodingEntry, TitleMixins, VlOnlyGuideConfig} from './guide';\nimport {Flag, keys} from './util';\nimport {MapExcludeValueRefAndReplaceSignalWith, VgEncodeChannel} from './vega.schema';\nimport {hasOwnProperty} from 'vega-util';\n\nexport type BaseAxisNoValueRefs<ES extends ExprRef | SignalRef> = AxisOverrideMixins<ES> &\n VLOnlyAxisMixins &\n Omit<MapExcludeValueRefAndReplaceSignalWith<BaseAxis, ES>, 'labelOverlap'>;\n\ninterface AxisOverrideMixins<ES extends ExprRef | SignalRef> {\n // Position and tickMinStep are not config in Vega, but are in Vega-Lite. So we just copy them here.\n\n /**\n * The anchor position of the axis in pixels. For x-axes with top or bottom orientation, this sets the axis group x coordinate. For y-axes with left or right orientation, this sets the axis group y coordinate.\n *\n * __Default value__: `0`\n */\n position?: number | ES;\n\n /**\n * The minimum desired step between axis ticks, in terms of scale domain values. For example, a value of `1` indicates that ticks should not be less than 1 unit apart. If `tickMinStep` is specified, the `tickCount` value will be adjusted, if necessary, to enforce the minimum step value.\n */\n tickMinStep?: number | ES;\n\n // ---------- Properties that do not support signal / expression ----------\n /**\n * A boolean flag indicating if the domain (the axis baseline) should be included as part of the axis.\n *\n * __Default value:__ `true`\n */\n domain?: boolean;\n\n /**\n * A boolean flag indicating if grid lines should be included as part of the axis\n *\n * __Default value:__ `true` for [continuous scales](https://vega.github.io/vega-lite/docs/scale.html#continuous) that are not binned; otherwise, `false`.\n */\n grid?: boolean;\n\n /**\n * A boolean flag indicating if labels should be included as part of the axis.\n *\n * __Default value:__ `true`.\n */\n labels?: boolean;\n\n /**\n * Boolean flag indicating if an extra axis tick should be added for the initial position of the axis. This flag is useful for styling axes for `band` scales such that ticks are placed on band boundaries rather in the middle of a band. Use in conjunction with `\"bandPosition\": 1` and an axis `\"padding\"` value of `0`.\n */\n tickExtra?: boolean;\n\n /**\n * Boolean flag indicating if pixel position values should be rounded to the nearest integer.\n *\n * __Default value:__ `true`\n */\n tickRound?: boolean;\n\n /**\n * Boolean value that determines whether the axis should include ticks.\n *\n * __Default value:__ `true`\n */\n ticks?: boolean;\n\n // Override comments to be Vega-Lite specific\n\n /**\n * Indicates if the first and last axis labels should be aligned flush with the scale range. Flush alignment for a horizontal axis will left-align the first label and right-align the last label. For vertical axes, bottom and top text baselines are applied instead. If this property is a number, it also indicates the number of pixels by which to offset the first and last labels; for example, a value of 2 will flush-align the first and last labels and also push them 2 pixels outward from the center of the axis. The additional adjustment can sometimes help the labels better visually group with corresponding axis ticks.\n *\n * __Default value:__ `true` for axis of a continuous x-scale. Otherwise, `false`.\n */\n labelFlush?: boolean | number;\n\n /**\n * The strategy to use for resolving overlap of axis labels. If `false` (the default), no overlap reduction is attempted. If set to `true` or `\"parity\"`, a strategy of removing every other label is used (this works well for standard linear axes). If set to `\"greedy\"`, a linear scan of the labels is performed, removing any labels that overlaps with the last visible label (this often works better for log-scaled axes).\n *\n * __Default value:__ `true` for non-nominal fields with non-log scales; `\"greedy\"` for log scales; otherwise `false`.\n */\n labelOverlap?: LabelOverlap | ES;\n\n /**\n * The offset, in pixels, by which to displace the axis from the edge of the enclosing group or data rectangle.\n *\n * __Default value:__ derived from the [axis config](https://vega.github.io/vega-lite/docs/config.html#facet-scale-config)'s `offset` (`0` by default)\n */\n offset?: number | ES;\n\n /**\n * The orientation of the axis. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`. The orientation can be used to further specialize the axis type (e.g., a y-axis oriented towards the right edge of the chart).\n *\n * __Default value:__ `\"bottom\"` for x-axes and `\"left\"` for y-axes.\n */\n orient?: AxisOrient | ES;\n\n /**\n * A desired number of ticks, for axes visualizing quantitative scales. The resulting number may be different so that values are \"nice\" (multiples of 2, 5, 10) and lie within the underlying scale's range.\n *\n * For scales of type `\"time\"` or `\"utc\"`, the tick count can instead be a time interval specifier. Legal string values are `\"millisecond\"`, `\"second\"`, `\"minute\"`, `\"hour\"`, `\"day\"`, `\"week\"`, `\"month\"`, and `\"year\"`. Alternatively, an object-valued interval specifier of the form `{\"interval\": \"month\", \"step\": 3}` includes a desired number of interval steps. Here, ticks are generated for each quarter (Jan, Apr, Jul, Oct) boundary.\n *\n * __Default value__: Determine using a formula `ceil(width/40)` for x and `ceil(height/40)` for y.\n *\n * @minimum 0\n */\n tickCount?: number | TimeInterval | TimeIntervalStep | ES;\n\n /**\n * Explicitly set the visible axis tick values.\n */\n values?: number[] | string[] | boolean[] | DateTime[] | ES; // Vega already supports Signal -- we have to re-declare here since VL supports special Date Time object that's not valid in Vega.\n\n /**\n * A non-negative integer indicating the z-index of the axis.\n * If zindex is 0, axes should be drawn behind all chart elements.\n * To put them in front, set `zindex` to `1` or more.\n *\n * __Default value:__ `0` (behind the marks).\n *\n * @TJS-type integer\n * @minimum 0\n */\n zindex?: number;\n}\n\ninterface VLOnlyAxisMixins {\n /**\n * [Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels.\n *\n * __Note:__ The label text and value can be assessed via the `label` and `value` properties of the axis's backing `datum` object.\n */\n labelExpr?: string;\n\n /**\n * A string or array of strings indicating the name of custom styles to apply to the axis. A style is a named collection of axis property defined within the [style configuration](https://vega.github.io/vega-lite/docs/mark.html#style-config). If style is an array, later styles will override earlier styles.\n *\n * __Default value:__ (none)\n * __Note:__ Any specified style will augment the default style. For example, an x-axis mark with `\"style\": \"foo\"` will use `config.axisX` and `config.style.foo` (the specified style `\"foo\"` has higher precedence).\n */\n style?: string | string[];\n}\n\nexport type ConditionalAxisProp =\n | 'labelAlign'\n | 'labelBaseline'\n | 'labelColor'\n | 'labelFont'\n | 'labelFontSize'\n | 'labelFontStyle'\n | 'labelFontWeight'\n | 'labelOpacity'\n | 'labelOffset'\n | 'labelPadding'\n | 'gridColor'\n | 'gridDash'\n | 'gridDashOffset'\n | 'gridOpacity'\n | 'gridWidth'\n | 'tickColor'\n | 'tickDash'\n | 'tickDashOffset'\n | 'tickOpacity'\n | 'tickSize'\n | 'tickWidth';\n\nexport const CONDITIONAL_AXIS_PROP_INDEX: Record<\n ConditionalAxisProp,\n {\n part: keyof AxisEncode;\n vgProp: VgEncodeChannel;\n } | null // null if we need to convert condition to signal\n> = {\n labelAlign: {\n part: 'labels',\n vgProp: 'align'\n },\n labelBaseline: {\n part: 'labels',\n vgProp: 'baseline'\n },\n labelColor: {\n part: 'labels',\n vgProp: 'fill'\n },\n labelFont: {\n part: 'labels',\n vgProp: 'font'\n },\n labelFontSize: {\n part: 'labels',\n vgProp: 'fontSize'\n },\n labelFontStyle: {\n part: 'labels',\n vgProp: 'fontStyle'\n },\n labelFontWeight: {\n part: 'labels',\n vgProp: 'fontWeight'\n },\n labelOpacity: {\n part: 'labels',\n vgProp: 'opacity'\n },\n labelOffset: null,\n labelPadding: null, // There is no fixed vgProp for tickSize, need to use signal.\n gridColor: {\n part: 'grid',\n vgProp: 'stroke'\n },\n gridDash: {\n part: 'grid',\n vgProp: 'strokeDash'\n },\n gridDashOffset: {\n part: 'grid',\n vgProp: 'strokeDashOffset'\n },\n gridOpacity: {\n part: 'grid',\n vgProp: 'opacity'\n },\n gridWidth: {\n part: 'grid',\n vgProp: 'strokeWidth'\n },\n tickColor: {\n part: 'ticks',\n vgProp: 'stroke'\n },\n tickDash: {\n part: 'ticks',\n vgProp: 'strokeDash'\n },\n tickDashOffset: {\n part: 'ticks',\n vgProp: 'strokeDashOffset'\n },\n tickOpacity: {\n part: 'ticks',\n vgProp: 'opacity'\n },\n tickSize: null, // There is no fixed vgProp for tickSize, need to use signal.\n tickWidth: {\n part: 'ticks',\n vgProp: 'strokeWidth'\n }\n};\n\nexport type ConditionalAxisProperty<V extends Value | number[], ES extends ExprRef | SignalRef> = (ValueDef<V> | ES) & {\n condition: ConditionalPredicate<ValueDef<V> | ES> | ConditionalPredicate<ValueDef<V> | ES>[];\n};\n\nexport function isConditionalAxisValue<V extends Value | number[], ES extends ExprRef | SignalRef>(\n v: any\n): v is ConditionalAxisProperty<V, ES> {\n return v?.condition;\n}\n\nexport type ConditionalAxisNumber<ES extends ExprRef | SignalRef = ExprRef | SignalRef> = ConditionalAxisProperty<\n number | null,\n ES\n>;\nexport type ConditionalAxisLabelAlign<ES extends ExprRef | SignalRef = ExprRef | SignalRef> = ConditionalAxisProperty<\n Align | null,\n ES\n>;\nexport type ConditionalAxisLabelBaseline<ES extends ExprRef | SignalRef = ExprRef | SignalRef> =\n ConditionalAxisProperty<TextBaseline | null, ES>;\nexport type ConditionalAxisColor<ES extends ExprRef | SignalRef = ExprRef | SignalRef> = ConditionalAxisProperty<\n Color | null,\n ES\n>;\nexport type ConditionalAxisString<ES extends ExprRef | SignalRef = ExprRef | SignalRef> = ConditionalAxisProperty<\n string | null,\n ES\n>;\n\nexport type ConditionalAxisLabelFontStyle<ES extends ExprRef | SignalRef = ExprRef | SignalRef> =\n ConditionalAxisProperty<FontStyle | null, ES>;\nexport type ConditionalAxisLabelFontWeight<ES extends ExprRef | SignalRef = ExprRef | SignalRef> =\n ConditionalAxisProperty<FontWeight | null, ES>;\n\nexport type ConditionalAxisNumberArray<ES extends ExprRef | SignalRef = ExprRef | SignalRef> = ConditionalAxisProperty<\n number[] | null,\n ES\n>;\n\n// Vega axis config is the same as Vega axis base. If this is not the case, add specific type.\nexport type AxisConfigBaseWithConditionalAndSignal<ES extends ExprRef | SignalRef> = Omit<\n BaseAxisNoValueRefs<ES>,\n ConditionalAxisProp | 'title'\n> &\n AxisPropsWithCondition<ES>;\n\nexport interface AxisPropsWithCondition<ES extends ExprRef | SignalRef> {\n labelAlign?: BaseAxisNoValueRefs<ES>['labelAlign'] | ConditionalAxisLabelAlign<ES>;\n labelBaseline?: BaseAxisNoValueRefs<ES>['labelBaseline'] | ConditionalAxisLabelBaseline<ES>;\n labelColor?: BaseAxisNoValueRefs<ES>['labelColor'] | ConditionalAxisColor<ES>;\n labelFont?: BaseAxisNoValueRefs<ES>['labelFont'] | ConditionalAxisString<ES>;\n labelFontSize?: BaseAxisNoValueRefs<ES>['labelFontSize'] | ConditionalAxisNumber<ES>;\n labelFontStyle?: BaseAxisNoValueRefs<ES>['labelFontStyle'] | ConditionalAxisLabelFontStyle<ES>;\n labelFontWeight?: BaseAxisNoValueRefs<ES>['labelFontWeight'] | ConditionalAxisLabelFontWeight<ES>;\n labelLineHeight?: BaseAxisNoValueRefs<ES>['labelLineHeight'] | ConditionalAxisNumber<ES>;\n labelOpacity?: BaseAxisNoValueRefs<ES>['labelOpacity'] | ConditionalAxisNumber<ES>;\n labelOffset?: BaseAxisNoValueRefs<ES>['labelOffset'] | ConditionalAxisNumber<ES>;\n labelPadding?: BaseAxisNoValueRefs<ES>['labelPadding'] | ConditionalAxisNumber<ES>;\n gridColor?: BaseAxisNoValueRefs<ES>['gridColor'] | ConditionalAxisColor<ES>;\n gridDash?: BaseAxisNoValueRefs<ES>['gridDash'] | ConditionalAxisNumberArray<ES>;\n gridDashOffset?: BaseAxisNoValueRefs<ES>['gridDashOffset'] | ConditionalAxisNumber<ES>;\n gridOpacity?: BaseAxisNoValueRefs<ES>['gridOpacity'] | ConditionalAxisNumber<ES>;\n gridWidth?: BaseAxisNoValueRefs<ES>['gridWidth'] | ConditionalAxisNumber<ES>;\n tickColor?: BaseAxisNoValueRefs<ES>['tickColor'] | ConditionalAxisColor<ES>;\n tickDash?: BaseAxisNoValueRefs<ES>['tickDash'] | ConditionalAxisNumberArray<ES>;\n tickDashOffset?: BaseAxisNoValueRefs<ES>['tickDashOffset'] | ConditionalAxisNumber<ES>;\n tickOpacity?: BaseAxisNoValueRefs<ES>['tickOpacity'] | ConditionalAxisNumber<ES>;\n tickSize?: BaseAxisNoValueRefs<ES>['tickSize'] | ConditionalAxisNumber<ES>;\n tickWidth?: BaseAxisNoValueRefs<ES>['tickWidth'] | ConditionalAxisNumber<ES>;\n title?: TitleMixins['title'];\n}\n\nexport type AxisConfig<ES extends ExprRef | SignalRef> = Guide &\n VlOnlyGuideConfig &\n AxisConfigBaseWithConditionalAndSignal<ES> & {\n /**\n * Disable axis by default.\n */\n disable?: boolean;\n };\n\nexport interface Axis<ES extends ExprRef | SignalRef = ExprRef | SignalRef>\n extends AxisConfigBaseWithConditionalAndSignal<ES>,\n Guide {\n /**\n * Mark definitions for custom axis encoding.\n *\n * @hidden\n */\n encoding?: AxisEncoding;\n}\n\nexport type AxisInternal = Axis<SignalRef>;\n\nexport type AxisPart = keyof AxisEncoding;\nexport const AXIS_PARTS: AxisPart[] = ['domain', 'grid', 'labels', 'ticks', 'title'];\n\n/**\n * A dictionary listing whether a certain axis property is applicable for only main axes or only grid axes.\n */\nexport const AXIS_PROPERTY_TYPE: Record<keyof VgAxis, 'main' | 'grid' | 'both'> = {\n grid: 'grid',\n gridCap: 'grid',\n gridColor: 'grid',\n gridDash: 'grid',\n gridDashOffset: 'grid',\n gridOpacity: 'grid',\n gridScale: 'grid',\n gridWidth: 'grid',\n\n orient: 'main',\n\n bandPosition: 'both', // Need to be applied to grid axis too, so the grid will align with ticks.\n\n aria: 'main',\n description: 'main',\n domain: 'main',\n domainCap: 'main',\n domainColor: 'main',\n domainDash: 'main',\n domainDashOffset: 'main',\n domainOpacity: 'main',\n domainWidth: 'main',\n format: 'main',\n formatType: 'main',\n labelAlign: 'main',\n labelAngle: 'main',\n labelBaseline: 'main',\n labelBound: 'main',\n labelColor: 'main',\n labelFlush: 'main',\n labelFlushOffset: 'main',\n labelFont: 'main',\n labelFontSize: 'main',\n labelFontStyle: 'main',\n labelFontWeight: 'main',\n labelLimit: 'main',\n labelLineHeight: 'main',\n labelOffset: 'main',\n labelOpacity: 'main',\n labelOverlap: 'main',\n labelPadding: 'main',\n labels: 'main',\n labelSeparation: 'main',\n maxExtent: 'main',\n minExtent: 'main',\n offset: 'both',\n position: 'main',\n tickCap: 'main',\n tickColor: 'main',\n tickDash: 'main',\n tickDashOffset: 'main',\n tickMinStep: 'both',\n tickOffset: 'both', // Need to be applied to grid axis too, so the grid will align with ticks.\n tickOpacity: 'main',\n tickRound: 'both', // Apply rounding to grid and ticks so they are aligned.\n ticks: 'main',\n tickSize: 'main',\n tickWidth: 'both',\n title: 'main',\n titleAlign: 'main',\n titleAnchor: 'main',\n titleAngle: 'main',\n titleBaseline: 'main',\n titleColor: 'main',\n titleFont: 'main',\n titleFontSize: 'main',\n titleFontStyle: 'main',\n titleFontWeight: 'main',\n titleLimit: 'main',\n titleLineHeight: 'main',\n titleOpacity: 'main',\n titlePadding: 'main',\n titleX: 'main',\n titleY: 'main',\n\n encode: 'both', // we hide this in Vega-Lite\n scale: 'both',\n tickBand: 'both',\n tickCount: 'both',\n tickExtra: 'both',\n translate: 'both',\n values: 'both',\n zindex: 'both' // this is actually set afterward, so it doesn't matter\n};\n\nexport interface AxisEncoding {\n /**\n * Custom encoding for the axis container.\n */\n axis?: GuideEncodingEntry;\n\n /**\n * Custom encoding for the axis domain rule mark.\n */\n domain?: GuideEncodingEntry;\n\n /**\n * Custom encoding for axis gridline rule marks.\n */\n grid?: GuideEncodingEntry;\n\n /**\n * Custom encoding for axis label text marks.\n */\n labels?: GuideEncodingEntry;\n\n /**\n * Custom encoding for axis tick rule marks.\n */\n ticks?: GuideEncodingEntry;\n\n /**\n * Custom encoding for the axis title text mark.\n */\n title?: GuideEncodingEntry;\n}\n\nexport const COMMON_AXIS_PROPERTIES_INDEX: Flag<keyof (VgAxis | Axis<any>)> = {\n orient: 1, // other things can depend on orient\n\n aria: 1,\n bandPosition: 1,\n description: 1,\n domain: 1,\n domainCap: 1,\n domainColor: 1,\n domainDash: 1,\n domainDashOffset: 1,\n domainOpacity: 1,\n domainWidth: 1,\n format: 1,\n formatType: 1,\n grid: 1,\n gridCap: 1,\n gridColor: 1,\n gridDash: 1,\n gridDashOffset: 1,\n gridOpacity: 1,\n gridWidth: 1,\n labelAlign: 1,\n labelAngle: 1,\n labelBaseline: 1,\n labelBound: 1,\n labelColor: 1,\n labelFlush: 1,\n labelFlushOffset: 1,\n labelFont: 1,\n labelFontSize: 1,\n labelFontStyle: 1,\n labelFontWeight: 1,\n labelLimit: 1,\n labelLineHeight: 1,\n labelOffset: 1,\n labelOpacity: 1,\n labelOverlap: 1,\n labelPadding: 1,\n labels: 1,\n labelSeparation: 1,\n maxExtent: 1,\n minExtent: 1,\n offset: 1,\n position: 1,\n tickBand: 1,\n tickCap: 1,\n tickColor: 1,\n tickCount: 1,\n tickDash: 1,\n tickDashOffset: 1,\n tickExtra: 1,\n tickMinStep: 1,\n tickOffset: 1,\n tickOpacity: 1,\n tickRound: 1,\n ticks: 1,\n tickSize: 1,\n tickWidth: 1,\n title: 1,\n titleAlign: 1,\n titleAnchor: 1,\n titleAngle: 1,\n titleBaseline: 1,\n titleColor: 1,\n titleFont: 1,\n titleFontSize: 1,\n titleFontStyle: 1,\n titleFontWeight: 1,\n titleLimit: 1,\n titleLineHeight: 1,\n titleOpacity: 1,\n titlePadding: 1,\n titleX: 1,\n titleY: 1,\n translate: 1,\n values: 1,\n zindex: 1\n};\n\nconst AXIS_PROPERTIES_INDEX: Flag<keyof Axis<any>> = {\n ...COMMON_AXIS_PROPERTIES_INDEX,\n style: 1,\n labelExpr: 1,\n encoding: 1\n};\n\nexport function isAxisProperty(prop: string): prop is keyof Axis<any> {\n return hasOwnProperty(AXIS_PROPERTIES_INDEX, prop);\n}\n\n// Export for dependent projects\nexport const AXIS_PROPERTIES = keys(AXIS_PROPERTIES_INDEX);\n\nexport interface AxisConfigMixins<ES extends ExprRef | SignalRef = ExprRef | SignalRef> {\n /**\n * Axis configuration, which determines default properties for all `x` and `y` [axes](https://vega.github.io/vega-lite/docs/axis.html). For a full list of axis configuration options, please see the [corresponding section of the axis documentation](https://vega.github.io/vega-lite/docs/axis.html#config).\n */\n axis?: AxisConfig<ES>;\n\n /**\n * X-axis specific config.\n */\n axisX?: AxisConfig<ES>;\n\n /**\n * Y-axis specific config.\n */\n axisY?: AxisConfig<ES>;\n\n /**\n * Config for y-axis along the left edge of the chart.\n */\n axisLeft?: AxisConfig<ES>;\n\n /**\n * Config for y-axis along the right edge of the chart.\n */\n axisRight?: AxisConfig<ES>;\n\n /**\n * Config for x-axis along the top edge of the chart.\n */\n axisTop?: AxisConfig<ES>;\n\n /**\n * Config for x-axis along the bottom edge of the chart.\n */\n axisBottom?: AxisConfig<ES>;\n\n /**\n * Config for axes with \"band\" scales.\n */\n axisBand?: AxisConfig<ES>;\n\n /**\n * Config for axes with \"point\" scales.\n */\n axisPoint?: AxisConfig<ES>;\n\n /**\n * Config for axes with \"point\" or \"band\" scales.\n */\n axisDiscrete?: AxisConfig<ES>;\n\n /**\n * Config for quantitative axes.\n */\n axisQuantitative?: AxisConfig<ES>;\n\n /**\n * Config for temporal axes.\n */\n axisTemporal?: AxisConfig<ES>;\n\n /**\n * Config for x-axes with \"band\" scales.\n */\n axisXBand?: AxisConfig<ES>;\n\n /**\n * Config for x-axes with \"point\" scales.\n */\n axisXPoint?: AxisConfig<ES>;\n\n /**\n * Config for x-axes with \"point\" or \"band\" scales.\n */\n axisXDiscrete?: AxisConfig<ES>;\n\n /**\n * Config for x-quantitative axes.\n */\n axisXQuantitative?: AxisConfig<ES>;\n\n /**\n * Config for x-temporal axes.\n */\n axisXTemporal?: AxisConfig<ES>;\n\n /**\n * Config for y-axes with \"band\" scales.\n */\n axisYBand?: AxisConfig<ES>;\n\n /**\n * Config for y-axes with \"point\" scales.\n */\n axisYPoint?: AxisConfig<ES>;\n\n /**\n * Config for y-axes with \"point\" or \"band\" scales.\n */\n axisYDiscrete?: AxisConfig<ES>;\n\n /**\n * Config for y-quantitative axes.\n */\n axisYQuantitative?: AxisConfig<ES>;\n\n /**\n * Config for y-temporal axes.\n */\n axisYTemporal?: AxisConfig<ES>;\n}\n\nconst AXIS_CONFIGS_INDEX: Flag<keyof AxisConfigMixins<any>> = {\n axis: 1,\n axisBand: 1,\n axisBottom: 1,\n axisDiscrete: 1,\n axisLeft: 1,\n axisPoint: 1,\n axisQuantitative: 1,\n axisRight: 1,\n axisTemporal: 1,\n axisTop: 1,\n axisX: 1,\n axisXBand: 1,\n axisXDiscrete: 1,\n axisXPoint: 1,\n axisXQuantitative: 1,\n axisXTemporal: 1,\n axisY: 1,\n axisYBand: 1,\n axisYDiscrete: 1,\n axisYPoint: 1,\n axisYQuantitative: 1,\n axisYTemporal: 1\n};\n\nexport const AXIS_CONFIGS = keys(AXIS_CONFIGS_INDEX);\n", "import {FieldName} from '../channeldef';\nimport {CompositeEncoding, FacetedCompositeEncoding} from '../compositemark';\nimport {Encoding} from '../encoding';\nimport {ExprRef} from '../expr';\nimport {AnyMark, Mark, MarkDef} from '../mark';\nimport {Projection} from '../projection';\nimport {SelectionParameter} from '../selection';\nimport {hasProperty} from '../util';\nimport {Field} from './../channeldef';\nimport {BaseSpec, DataMixins, FrameMixins, GenericCompositionLayout, ResolveMixins} from './base';\nimport {TopLevel, TopLevelParameter} from './toplevel';\n/**\n * Base interface for a unit (single-view) specification.\n */\nexport interface GenericUnitSpec<E extends Encoding<any>, M, P = SelectionParameter> extends BaseSpec {\n /**\n * A string describing the mark type (one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`,\n * `\"area\"`, `\"point\"`, `\"rule\"`, `\"geoshape\"`, and `\"text\"`) or a [mark definition object](https://vega.github.io/vega-lite/docs/mark.html#mark-def).\n */\n mark: M;\n\n /**\n * A key-value mapping between encoding channels and definition of fields.\n */\n encoding?: E;\n\n /**\n * An object defining properties of geographic projection, which will be applied to `shape` path for `\"geoshape\"` marks\n * and to `latitude` and `\"longitude\"` channels for other marks.\n */\n projection?: Projection<ExprRef>;\n\n /**\n * An array of parameters that may either be simple variables, or more complex selections that map user input to data queries.\n */\n params?: P[];\n}\n\n/**\n * A unit specification without any shortcut/expansion syntax.\n */\nexport type NormalizedUnitSpec = GenericUnitSpec<Encoding<FieldName>, Mark | MarkDef>;\n\n/**\n * A unit specification, which can contain either [primitive marks or composite marks](https://vega.github.io/vega-lite/docs/mark.html#types).\n */\nexport type UnitSpec<F extends Field> = GenericUnitSpec<CompositeEncoding<F>, AnyMark>;\n\nexport type UnitSpecWithFrame<F extends Field> = GenericUnitSpec<CompositeEncoding<F>, AnyMark> & FrameMixins;\n\n/**\n * Unit spec that can have a composite mark and row or column channels (shorthand for a facet spec).\n */\nexport type FacetedUnitSpec<F extends Field, P = SelectionParameter> = GenericUnitSpec<\n FacetedCompositeEncoding<F>,\n AnyMark,\n P\n> &\n ResolveMixins &\n GenericCompositionLayout &\n FrameMixins;\n\nexport type TopLevelUnitSpec<F extends Field> = TopLevel<FacetedUnitSpec<F, TopLevelParameter>> & DataMixins;\n\nexport function isUnitSpec(spec: BaseSpec): spec is FacetedUnitSpec<any> | NormalizedUnitSpec {\n return hasProperty(spec, 'mark');\n}\n", "import {Encoding} from '../encoding';\nimport {GenericMarkDef, getMarkType} from '../mark';\nimport {NonFacetUnitNormalizer, Normalize, NormalizerParams} from '../normalize/base';\nimport {GenericSpec} from '../spec';\nimport {GenericLayerSpec, NormalizedLayerSpec} from '../spec/layer';\nimport {GenericUnitSpec, isUnitSpec, NormalizedUnitSpec} from '../spec/unit';\nimport {FieldName} from '../channeldef';\n\n// TODO: replace string with Mark\nexport type CompositeMarkUnitSpec<M extends string> = GenericUnitSpec<any, M | GenericMarkDef<M>>;\n\nexport class CompositeMarkNormalizer<M extends string> implements NonFacetUnitNormalizer<CompositeMarkUnitSpec<M>> {\n constructor(\n public name: string,\n public run: (\n spec: CompositeMarkUnitSpec<M>,\n params: NormalizerParams,\n normalize: Normalize<\n // Input of the normalize method\n GenericUnitSpec<Encoding<FieldName>, M> | GenericLayerSpec<any>,\n // Output of the normalize method\n NormalizedLayerSpec | NormalizedUnitSpec\n >\n ) => NormalizedLayerSpec | NormalizedUnitSpec\n ) {}\n\n public hasMatchingType(spec: GenericSpec<any, any, any, any>): spec is CompositeMarkUnitSpec<M> {\n if (isUnitSpec(spec)) {\n return getMarkType(spec.mark) === this.name;\n }\n return false;\n }\n}\n", "import type {AggregateOp} from 'vega';\nimport {array, isArray} from 'vega-util';\nimport {isArgmaxDef, isArgminDef} from './aggregate';\nimport {isBinned, isBinning} from './bin';\nimport {\n ANGLE,\n Channel,\n CHANNELS,\n COLOR,\n DESCRIPTION,\n DETAIL,\n FILL,\n FILLOPACITY,\n getMainChannelFromOffsetChannel,\n getOffsetScaleChannel,\n HREF,\n isChannel,\n isNonPositionScaleChannel,\n isSecondaryRangeChannel,\n isXorY,\n isXorYOffset,\n KEY,\n LATITUDE,\n LATITUDE2,\n LONGITUDE,\n LONGITUDE2,\n OPACITY,\n ORDER,\n RADIUS,\n RADIUS2,\n SHAPE,\n SIZE,\n STROKE,\n STROKEDASH,\n STROKEOPACITY,\n STROKEWIDTH,\n supportMark,\n TEXT,\n THETA,\n THETA2,\n TIME,\n TOOLTIP,\n UNIT_CHANNELS,\n URL,\n X,\n X2,\n XOFFSET,\n Y,\n Y2,\n YOFFSET\n} from './channel';\nimport {\n binRequiresRange,\n ChannelDef,\n ColorDef,\n Field,\n FieldDef,\n FieldDefWithoutScale,\n getFieldDef,\n getGuide,\n hasConditionalFieldDef,\n hasConditionalFieldOrDatumDef,\n initChannelDef,\n initFieldDef,\n isConditionalDef,\n isDatumDef,\n isFieldDef,\n isOrderOnlyDef,\n isTypedFieldDef,\n isValueDef,\n LatLongDef,\n NumericArrayMarkPropDef,\n NumericMarkPropDef,\n OffsetDef,\n OrderFieldDef,\n OrderOnlyDef,\n OrderValueDef,\n PolarDef,\n Position2Def,\n PositionDef,\n SecondaryFieldDef,\n ShapeDef,\n StringFieldDef,\n StringFieldDefWithCondition,\n StringValueDefWithCondition,\n TextDef,\n TimeDef,\n title,\n TypedFieldDef,\n vgField\n} from './channeldef';\nimport {Config} from './config';\nimport * as log from './log';\nimport {Mark} from './mark';\nimport {EncodingFacetMapping} from './spec/facet';\nimport {AggregatedFieldDef, BinTransform, TimeUnitTransform} from './transform';\nimport {isContinuous, isDiscrete, QUANTITATIVE, TEMPORAL} from './type';\nimport {keys, some} from './util';\nimport {isSignalRef} from './vega.schema';\nimport {isBinnedTimeUnit} from './timeunit';\n\nexport interface Encoding<F extends Field> {\n /**\n * X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n *\n * The `value` of this channel can be a number or a string `\"width\"` for the width of the plot.\n */\n x?: PositionDef<F>;\n\n /**\n * Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n *\n * The `value` of this channel can be a number or a string `\"height\"` for the height of the plot.\n */\n y?: PositionDef<F>;\n\n /**\n * Offset of x-position of the marks\n */\n xOffset?: OffsetDef<F>;\n\n /**\n * Offset of y-position of the marks\n */\n yOffset?: OffsetDef<F>;\n\n /**\n * X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n *\n * The `value` of this channel can be a number or a string `\"width\"` for the width of the plot.\n */\n // TODO: Ham need to add default behavior\n // `x2` cannot have type as it should have the same type as `x`\n x2?: Position2Def<F>;\n\n /**\n * Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n *\n * The `value` of this channel can be a number or a string `\"height\"` for the height of the plot.\n */\n // TODO: Ham need to add default behavior\n // `y2` cannot have type as it should have the same type as `y`\n y2?: Position2Def<F>;\n\n /**\n * Longitude position of geographically projected marks.\n */\n longitude?: LatLongDef<F>;\n\n /**\n * Latitude position of geographically projected marks.\n */\n latitude?: LatLongDef<F>;\n\n /**\n * Longitude-2 position for geographically projected ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n */\n // `longitude2` cannot have type as it should have the same type as `longitude`\n longitude2?: Position2Def<F>;\n\n /**\n * Latitude-2 position for geographically projected ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n */\n // `latitude2` cannot have type as it should have the same type as `latitude`\n latitude2?: Position2Def<F>;\n\n /**\n * - For arc marks, the arc length in radians if theta2 is not specified, otherwise the start arc angle. (A value of 0 indicates up or \u201Cnorth\u201D, increasing values proceed clockwise.)\n *\n * - For text marks, polar coordinate angle in radians.\n */\n theta?: PolarDef<F>;\n\n /**\n * The end angle of arc marks in radians. A value of 0 indicates up or \u201Cnorth\u201D, increasing values proceed clockwise.\n */\n theta2?: Position2Def<F>;\n\n /**\n * The outer radius in pixels of arc marks.\n */\n\n radius?: PolarDef<F>;\n\n /**\n * The inner radius in pixels of arc marks.\n */\n radius2?: Position2Def<F>;\n\n time?: TimeDef<F>;\n\n /**\n * Color of the marks \u2013 either fill or stroke color based on the `filled` property of mark definition.\n * By default, `color` represents fill color for `\"area\"`, `\"bar\"`, `\"tick\"`,\n * `\"text\"`, `\"trail\"`, `\"circle\"`, and `\"square\"` / stroke color for `\"line\"` and `\"point\"`.\n *\n * __Default value:__ If undefined, the default color depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `color` property.\n *\n * _Note:_\n * 1) For fine-grained control over both fill and stroke colors of the marks, please use the `fill` and `stroke` channels. The `fill` or `stroke` encodings have higher precedence than `color`, thus may override the `color` encoding if conflicting encodings are specified.\n * 2) See the scale documentation for more information about customizing [color scheme](https://vega.github.io/vega-lite/docs/scale.html#scheme).\n */\n color?: ColorDef<F>;\n\n /**\n * Fill color of the marks.\n * __Default value:__ If undefined, the default color depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `color` property.\n *\n * _Note:_ The `fill` encoding has higher precedence than `color`, thus may override the `color` encoding if conflicting encodings are specified.\n */\n fill?: ColorDef<F>;\n\n /**\n * Stroke color of the marks.\n * __Default value:__ If undefined, the default color depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `color` property.\n *\n * _Note:_ The `stroke` encoding has higher precedence than `color`, thus may override the `color` encoding if conflicting encodings are specified.\n */\n\n stroke?: ColorDef<F>;\n\n /**\n * Opacity of the marks.\n *\n * __Default value:__ If undefined, the default opacity depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `opacity` property.\n */\n opacity?: NumericMarkPropDef<F>;\n\n /**\n * Fill opacity of the marks.\n *\n * __Default value:__ If undefined, the default opacity depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `fillOpacity` property.\n */\n fillOpacity?: NumericMarkPropDef<F>;\n\n /**\n * Stroke opacity of the marks.\n *\n * __Default value:__ If undefined, the default opacity depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `strokeOpacity` property.\n */\n strokeOpacity?: NumericMarkPropDef<F>;\n\n /**\n * Stroke width of the marks.\n *\n * __Default value:__ If undefined, the default stroke width depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `strokeWidth` property.\n */\n strokeWidth?: NumericMarkPropDef<F>;\n\n /**\n * Stroke dash of the marks.\n *\n * __Default value:__ `[1,0]` (No dash).\n */\n strokeDash?: NumericArrayMarkPropDef<F>;\n\n /**\n * Size of the mark.\n * - For `\"point\"`, `\"square\"` and `\"circle\"`, \u2013 the symbol size, or pixel area of the mark.\n * - For `\"bar\"` and `\"tick\"` \u2013 the bar and tick's size.\n * - For `\"text\"` \u2013 the text's font size.\n * - Size is unsupported for `\"line\"`, `\"area\"`, and `\"rect\"`. (Use `\"trail\"` instead of line with varying size)\n */\n size?: NumericMarkPropDef<F>;\n\n /**\n * Rotation angle of point and text marks.\n */\n angle?: NumericMarkPropDef<F>;\n\n /**\n * Shape of the mark.\n *\n * 1. For `point` marks the supported values include:\n * - plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n * - the line symbol `\"stroke\"`\n * - centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n * - a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n *\n * 2. For `geoshape` marks it should be a field definition of the geojson data\n *\n * __Default value:__ If undefined, the default shape depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#point-config)'s `shape` property. (`\"circle\"` if unset.)\n */\n shape?: ShapeDef<F>;\n /**\n * Additional levels of detail for grouping data in aggregate views and\n * in line, trail, and area marks without mapping data to a specific visual channel.\n */\n detail?: FieldDefWithoutScale<F> | FieldDefWithoutScale<F>[];\n\n /**\n * A data field to use as a unique key for data binding. When a visualization\u2019s data is updated, the key value will be used to match data elements to existing mark instances. Use a key channel to enable object constancy for transitions over dynamic data.\n */\n key?: FieldDefWithoutScale<F>;\n\n /**\n * Text of the `text` mark.\n */\n text?: TextDef<F>;\n\n /**\n * The tooltip text to show upon mouse hover. Specifying `tooltip` encoding overrides [the `tooltip` property in the mark definition](https://vega.github.io/vega-lite/docs/mark.html#mark-def).\n *\n * See the [`tooltip`](https://vega.github.io/vega-lite/docs/tooltip.html) documentation for a detailed discussion about tooltip in Vega-Lite.\n */\n tooltip?: StringFieldDefWithCondition<F> | StringValueDefWithCondition<F> | StringFieldDef<F>[] | null;\n\n /**\n * A URL to load upon mouse click.\n */\n href?: StringFieldDefWithCondition<F> | StringValueDefWithCondition<F>;\n\n /**\n * The URL of an image mark.\n */\n url?: StringFieldDefWithCondition<F> | StringValueDefWithCondition<F>;\n\n /**\n * A text description of this mark for ARIA accessibility (SVG output only). For SVG output the `\"aria-label\"` attribute will be set to this description.\n */\n description?: StringFieldDefWithCondition<F> | StringValueDefWithCondition<F>;\n\n /**\n * Order of the marks.\n * - For stacked marks, this `order` channel encodes [stack order](https://vega.github.io/vega-lite/docs/stack.html#order).\n * - For line and trail marks, this `order` channel encodes order of data points in the lines. This can be useful for creating [a connected scatterplot](https://vega.github.io/vega-lite/examples/connected_scatterplot.html). Setting `order` to `{\"value\": null}` makes the line marks use the original order in the data sources.\n * - Otherwise, this `order` channel encodes layer order of the marks.\n *\n * __Note__: In aggregate plots, `order` field should be `aggregate`d to avoid creating additional aggregation grouping.\n */\n order?: OrderFieldDef<F> | OrderFieldDef<F>[] | OrderValueDef | OrderOnlyDef;\n}\n\nexport interface EncodingWithFacet<F extends Field> extends Encoding<F>, EncodingFacetMapping<F> {}\n\nexport function channelHasField<F extends Field>(\n encoding: EncodingWithFacet<F>,\n channel: keyof EncodingWithFacet<F>\n): boolean {\n const channelDef = encoding && encoding[channel];\n if (channelDef) {\n if (isArray(channelDef)) {\n return some(channelDef, fieldDef => !!fieldDef.field);\n } else {\n return isFieldDef(channelDef) || hasConditionalFieldDef<Field>(channelDef);\n }\n }\n return false;\n}\n\nexport function channelHasFieldOrDatum<F extends Field>(\n encoding: EncodingWithFacet<F>,\n channel: keyof EncodingWithFacet<F>\n): boolean {\n const channelDef = encoding && encoding[channel];\n if (channelDef) {\n if (isArray(channelDef)) {\n return some(channelDef, fieldDef => !!fieldDef.field);\n } else {\n return isFieldDef(channelDef) || isDatumDef(channelDef) || hasConditionalFieldOrDatumDef<Field>(channelDef);\n }\n }\n return false;\n}\n\nexport function channelHasNestedOffsetScale<F extends Field>(\n encoding: EncodingWithFacet<F>,\n channel: keyof EncodingWithFacet<F>\n): boolean {\n if (isXorY(channel)) {\n const fieldDef = encoding[channel];\n if (\n (isFieldDef(fieldDef) || isDatumDef(fieldDef)) &&\n (isDiscrete(fieldDef.type) || (isFieldDef(fieldDef) && fieldDef.timeUnit))\n ) {\n const offsetChannel = getOffsetScaleChannel(channel);\n return channelHasFieldOrDatum(encoding, offsetChannel);\n }\n }\n return false;\n}\n\nexport function isAggregate(encoding: EncodingWithFacet<any>) {\n return some(CHANNELS, channel => {\n if (channelHasField(encoding, channel)) {\n const channelDef = encoding[channel];\n if (isArray(channelDef)) {\n return some(channelDef, fieldDef => !!fieldDef.aggregate);\n } else {\n const fieldDef = getFieldDef(channelDef);\n return fieldDef && !!fieldDef.aggregate;\n }\n }\n return false;\n });\n}\n\nexport function extractTransformsFromEncoding(oldEncoding: Encoding<any>, config: Config) {\n const groupby: string[] = [];\n const bins: BinTransform[] = [];\n const timeUnits: TimeUnitTransform[] = [];\n const aggregate: AggregatedFieldDef[] = [];\n const encoding: Encoding<string> = {};\n\n forEach(oldEncoding, (channelDef, channel) => {\n // Extract potential embedded transformations along with remaining properties\n if (isFieldDef(channelDef)) {\n const {field, aggregate: aggOp, bin, timeUnit, ...remaining} = channelDef;\n if (aggOp || timeUnit || bin) {\n const guide = getGuide(channelDef);\n const isTitleDefined = guide?.title;\n let newField = vgField(channelDef, {forAs: true});\n const newFieldDef: FieldDef<string> = {\n // Only add title if it doesn't exist\n ...(isTitleDefined ? [] : {title: title(channelDef, config, {allowDisabling: true})}),\n ...remaining,\n // Always overwrite field\n field: newField\n };\n\n if (aggOp) {\n let op: AggregateOp;\n\n if (isArgmaxDef(aggOp)) {\n op = 'argmax';\n newField = vgField({op: 'argmax', field: aggOp.argmax}, {forAs: true});\n newFieldDef.field = `${newField}.${field}`;\n } else if (isArgminDef(aggOp)) {\n op = 'argmin';\n newField = vgField({op: 'argmin', field: aggOp.argmin}, {forAs: true});\n newFieldDef.field = `${newField}.${field}`;\n } else if (aggOp !== 'boxplot' && aggOp !== 'errorbar' && aggOp !== 'errorband') {\n op = aggOp;\n }\n\n if (op) {\n const aggregateEntry: AggregatedFieldDef = {\n op,\n as: newField\n };\n if (field) {\n aggregateEntry.field = field;\n }\n aggregate.push(aggregateEntry);\n }\n } else {\n groupby.push(newField);\n if (isTypedFieldDef(channelDef) && isBinning(bin)) {\n bins.push({bin, field, as: newField});\n // Add additional groupbys for range and end of bins\n groupby.push(vgField(channelDef, {binSuffix: 'end'}));\n if (binRequiresRange(channelDef, channel)) {\n groupby.push(vgField(channelDef, {binSuffix: 'range'}));\n }\n // Create accompanying 'x2' or 'y2' field if channel is 'x' or 'y' respectively\n if (isXorY(channel)) {\n const secondaryChannel: SecondaryFieldDef<string> = {\n field: `${newField}_end`\n };\n encoding[`${channel}2`] = secondaryChannel;\n }\n newFieldDef.bin = 'binned';\n if (!isSecondaryRangeChannel(channel)) {\n (newFieldDef as any)['type'] = QUANTITATIVE;\n }\n } else if (timeUnit && !isBinnedTimeUnit(timeUnit)) {\n timeUnits.push({\n timeUnit,\n field,\n as: newField\n });\n\n // define the format type for later compilation\n const formatType = isTypedFieldDef(channelDef) && channelDef.type !== TEMPORAL && 'time';\n if (formatType) {\n if (channel === TEXT || channel === TOOLTIP) {\n (newFieldDef as any)['formatType'] = formatType;\n } else if (isNonPositionScaleChannel(channel)) {\n (newFieldDef as any)['legend'] = {\n formatType,\n ...(newFieldDef as any)['legend']\n };\n } else if (isXorY(channel)) {\n (newFieldDef as any)['axis'] = {\n formatType,\n ...(newFieldDef as any)['axis']\n };\n }\n }\n }\n }\n\n // now the field should refer to post-transformed field instead\n (encoding as any)[channel as any] = newFieldDef;\n } else {\n groupby.push(field);\n (encoding as any)[channel as any] = oldEncoding[channel];\n }\n } else {\n // For value def / signal ref / datum def, just copy\n (encoding as any)[channel as any] = oldEncoding[channel];\n }\n });\n\n return {\n bins,\n timeUnits,\n aggregate,\n groupby,\n encoding\n };\n}\n\nexport function markChannelCompatible(encoding: Encoding<string>, channel: Channel, mark: Mark) {\n const markSupported = supportMark(channel, mark);\n if (!markSupported) {\n return false;\n } else if (markSupported === 'binned') {\n const primaryFieldDef = encoding[channel === X2 ? X : Y];\n\n // circle, point, square and tick only support x2/y2 when their corresponding x/y fieldDef\n // has \"binned\" data and thus need x2/y2 to specify the bin-end field.\n if (isFieldDef(primaryFieldDef) && isFieldDef(encoding[channel]) && isBinned(primaryFieldDef.bin)) {\n return true;\n } else {\n return false;\n }\n }\n return true;\n}\n\nexport function initEncoding(\n encoding: Encoding<string>,\n mark: Mark,\n filled: boolean,\n config: Config\n): Encoding<string> {\n const normalizedEncoding: Encoding<string> = {};\n for (const key of keys(encoding)) {\n if (!isChannel(key)) {\n // Drop invalid channel\n log.warn(log.message.invalidEncodingChannel(key));\n }\n }\n\n for (let channel of UNIT_CHANNELS) {\n if (!encoding[channel]) {\n continue;\n }\n\n const channelDef = encoding[channel];\n if (isXorYOffset(channel)) {\n const mainChannel = getMainChannelFromOffsetChannel(channel);\n\n const positionDef = normalizedEncoding[mainChannel];\n if (isFieldDef(positionDef)) {\n if (isContinuous(positionDef.type)) {\n if (isFieldDef(channelDef) && !positionDef.timeUnit) {\n // TODO: nesting continuous field instead continuous field should\n // behave like offsetting the data in data domain\n log.warn(log.message.offsetNestedInsideContinuousPositionScaleDropped(mainChannel));\n continue;\n }\n }\n }\n }\n\n if (channel === 'angle' && mark === 'arc' && !encoding.theta) {\n log.warn(log.message.REPLACE_ANGLE_WITH_THETA);\n channel = THETA;\n }\n\n if (!markChannelCompatible(encoding, channel, mark)) {\n // Drop unsupported channel\n log.warn(log.message.incompatibleChannel(channel, mark));\n continue;\n }\n\n // Drop line's size if the field is aggregated.\n if (channel === SIZE && mark === 'line') {\n const fieldDef = getFieldDef(encoding[channel]);\n if (fieldDef?.aggregate) {\n log.warn(log.message.LINE_WITH_VARYING_SIZE);\n continue;\n }\n }\n // Drop color if either fill or stroke is specified\n\n if (channel === COLOR && (filled ? 'fill' in encoding : 'stroke' in encoding)) {\n log.warn(log.message.droppingColor('encoding', {fill: 'fill' in encoding, stroke: 'stroke' in encoding}));\n continue;\n }\n\n if (\n channel === DETAIL ||\n (channel === ORDER && !isArray(channelDef) && !isValueDef(channelDef)) ||\n (channel === TOOLTIP && isArray(channelDef))\n ) {\n if (channelDef) {\n if (channel === ORDER) {\n const def = encoding[channel];\n if (isOrderOnlyDef(def)) {\n normalizedEncoding[channel] = def;\n continue;\n }\n }\n // Array of fieldDefs for detail channel (or production rule)\n (normalizedEncoding[channel] as any) = array(channelDef).reduce(\n (defs: FieldDef<string>[], fieldDef: FieldDef<string>) => {\n if (!isFieldDef(fieldDef)) {\n log.warn(log.message.emptyFieldDef(fieldDef, channel));\n } else {\n defs.push(initFieldDef(fieldDef, channel));\n }\n return defs;\n },\n []\n );\n }\n } else {\n if (channel === TOOLTIP && channelDef === null) {\n // Preserve null so we can use it to disable tooltip\n normalizedEncoding[channel] = null;\n } else if (\n !isFieldDef(channelDef) &&\n !isDatumDef(channelDef) &&\n !isValueDef(channelDef) &&\n !isConditionalDef(channelDef) &&\n !isSignalRef(channelDef)\n ) {\n log.warn(log.message.emptyFieldDef(channelDef, channel));\n continue;\n }\n\n (normalizedEncoding as any)[channel as any] = initChannelDef(channelDef as ChannelDef, channel, config);\n }\n }\n return normalizedEncoding;\n}\n\n/**\n * For composite marks, we have to call initChannelDef during init so we can infer types earlier.\n */\nexport function normalizeEncoding(encoding: Encoding<string>, config: Config): Encoding<string> {\n const normalizedEncoding: Encoding<string> = {};\n\n for (const channel of keys(encoding)) {\n const newChannelDef = initChannelDef(encoding[channel], channel, config, {compositeMark: true});\n (normalizedEncoding as any)[channel as any] = newChannelDef;\n }\n\n return normalizedEncoding;\n}\n\nexport function fieldDefs<F extends Field>(encoding: EncodingWithFacet<F>): FieldDef<F>[] {\n const arr: FieldDef<F>[] = [];\n for (const channel of keys(encoding)) {\n if (channelHasField(encoding, channel)) {\n const channelDef = encoding[channel];\n const channelDefArray = array(channelDef);\n for (const def of channelDefArray) {\n if (isFieldDef(def)) {\n arr.push(def);\n } else if (hasConditionalFieldDef<F>(def)) {\n arr.push(def.condition);\n }\n }\n }\n }\n return arr;\n}\n\nexport function forEach<U extends Record<any, any>>(\n mapping: U,\n f: (cd: ChannelDef, c: keyof U) => void,\n thisArg?: any\n) {\n if (!mapping) {\n return;\n }\n\n for (const channel of keys(mapping)) {\n const el = mapping[channel];\n if (isArray(el)) {\n for (const channelDef of el as unknown[]) {\n f.call(thisArg, channelDef, channel);\n }\n } else {\n f.call(thisArg, el, channel);\n }\n }\n}\n\nexport function reduce<T, U extends Record<any, any>>(\n mapping: U,\n f: (acc: any, fd: TypedFieldDef<string>, c: keyof U) => U,\n init: T,\n thisArg?: any\n) {\n if (!mapping) {\n return init;\n }\n\n return keys(mapping).reduce((r, channel) => {\n const map = mapping[channel];\n if (isArray(map)) {\n return map.reduce((r1: T, channelDef: ChannelDef) => {\n return f.call(thisArg, r1, channelDef, channel);\n }, r);\n } else {\n return f.call(thisArg, r, map, channel);\n }\n }, init);\n}\n\n/**\n * Returns list of path grouping fields for the given encoding\n */\nexport function pathGroupingFields(mark: Mark, encoding: Encoding<string>): string[] {\n return keys(encoding).reduce((details, channel) => {\n switch (channel) {\n // x, y, x2, y2, lat, long, lat1, long2, order, tooltip, href, aria label, cursor should not cause lines to group\n case X:\n case Y:\n case HREF:\n case DESCRIPTION:\n case URL:\n case X2:\n case Y2:\n case XOFFSET:\n case YOFFSET:\n case THETA:\n case THETA2:\n case RADIUS:\n case RADIUS2:\n case TIME:\n // falls through\n\n case LATITUDE:\n case LONGITUDE:\n case LATITUDE2:\n case LONGITUDE2:\n // TODO: case 'cursor':\n\n // text, shape, shouldn't be a part of line/trail/area [falls through]\n case TEXT:\n case SHAPE:\n case ANGLE:\n // falls through\n\n // tooltip fields should not be added to group by [falls through]\n case TOOLTIP:\n return details;\n\n case ORDER:\n // order should not group line / trail\n if (mark === 'line' || mark === 'trail') {\n return details;\n }\n // but order should group area for stacking (falls through)\n\n case DETAIL:\n case KEY: {\n const channelDef = encoding[channel];\n if (isArray(channelDef) || isFieldDef(channelDef)) {\n for (const fieldDef of array(channelDef)) {\n if (!fieldDef.aggregate) {\n details.push(vgField(fieldDef, {}));\n }\n }\n }\n return details;\n }\n\n case SIZE:\n if (mark === 'trail') {\n // For trail, size should not group trail lines.\n return details;\n }\n // For line, size should group lines.\n\n // falls through\n case COLOR:\n case FILL:\n case STROKE:\n case OPACITY:\n case FILLOPACITY:\n case STROKEOPACITY:\n case STROKEDASH:\n case STROKEWIDTH: {\n // TODO strokeDashOffset:\n // falls through\n\n const fieldDef = getFieldDef<string>(encoding[channel]);\n if (fieldDef && !fieldDef.aggregate) {\n details.push(vgField(fieldDef, {}));\n }\n return details;\n }\n }\n }, []);\n}\n", "import {Orientation, SignalRef, Text} from 'vega';\nimport {isArray, isBoolean, isString} from 'vega-util';\nimport {CompositeMark, CompositeMarkDef} from '.';\nimport {\n Field,\n FieldDefBase,\n isContinuousFieldOrDatumDef,\n isFieldDef,\n isFieldOrDatumDefForTimeFormat,\n PositionFieldDef,\n SecondaryFieldDef,\n StringFieldDef,\n StringFieldDefWithCondition,\n StringValueDefWithCondition\n} from '../channeldef';\nimport {Encoding, fieldDefs} from '../encoding';\nimport {ExprRef} from '../expr';\nimport * as log from '../log';\nimport {ColorMixins, GenericMarkDef, isMarkDef, Mark, AnyMarkConfig, MarkDef} from '../mark';\nimport {GenericUnitSpec, NormalizedUnitSpec} from '../spec';\nimport {getFirstDefined, hash, unique} from '../util';\nimport {isSignalRef} from '../vega.schema';\nimport {toStringFieldDef} from './../channeldef';\n\n// Parts mixins can be any mark type. We could make a more specific type for each part.\nexport type PartsMixins<P extends string> = Partial<Record<P, boolean | AnyMarkConfig<ExprRef | SignalRef>>>;\n\nexport type GenericCompositeMarkDef<T> = GenericMarkDef<T> &\n ColorMixins<ExprRef | SignalRef> & {\n /**\n * The opacity (value between [0,1]) of the mark.\n *\n * @minimum 0\n * @maximum 1\n */\n opacity?: number;\n\n /**\n * Whether a composite mark be clipped to the enclosing group\u2019s width and height.\n */\n clip?: boolean;\n };\n\nexport interface CompositeMarkTooltipSummary {\n /**\n * The prefix of the field to be shown in tooltip\n */\n fieldPrefix: string;\n\n /**\n * The title prefix to show, corresponding to the field with field prefix `fieldPrefix`\n */\n titlePrefix: Text | SignalRef;\n}\n\nexport function filterTooltipWithAggregatedField<F extends Field>(\n oldEncoding: Encoding<F>\n): {\n customTooltipWithoutAggregatedField?:\n | StringFieldDefWithCondition<F>\n | StringValueDefWithCondition<F>\n | StringFieldDef<F>[];\n filteredEncoding: Encoding<F>;\n} {\n const {tooltip, ...filteredEncoding} = oldEncoding;\n if (!tooltip) {\n return {filteredEncoding};\n }\n\n let customTooltipWithAggregatedField:\n | StringFieldDefWithCondition<F>\n | StringValueDefWithCondition<F>\n | StringFieldDef<F>[];\n let customTooltipWithoutAggregatedField:\n | StringFieldDefWithCondition<F>\n | StringValueDefWithCondition<F>\n | StringFieldDef<F>[];\n\n if (isArray(tooltip)) {\n for (const t of tooltip) {\n if (t.aggregate) {\n if (!customTooltipWithAggregatedField) {\n customTooltipWithAggregatedField = [];\n }\n (customTooltipWithAggregatedField as StringFieldDef<F>[]).push(t);\n } else {\n if (!customTooltipWithoutAggregatedField) {\n customTooltipWithoutAggregatedField = [];\n }\n (customTooltipWithoutAggregatedField as StringFieldDef<F>[]).push(t);\n }\n }\n\n if (customTooltipWithAggregatedField) {\n (filteredEncoding as Encoding<F>).tooltip = customTooltipWithAggregatedField;\n }\n } else {\n if ((tooltip as any).aggregate) {\n (filteredEncoding as Encoding<F>).tooltip = tooltip;\n } else {\n customTooltipWithoutAggregatedField = tooltip;\n }\n }\n\n if (isArray(customTooltipWithoutAggregatedField) && customTooltipWithoutAggregatedField.length === 1) {\n customTooltipWithoutAggregatedField = customTooltipWithoutAggregatedField[0];\n }\n return {customTooltipWithoutAggregatedField, filteredEncoding};\n}\n\nexport function getCompositeMarkTooltip(\n tooltipSummary: CompositeMarkTooltipSummary[],\n continuousAxisChannelDef: PositionFieldDef<string>,\n encodingWithoutContinuousAxis: Encoding<string>,\n withFieldName = true\n): Encoding<string> {\n if ('tooltip' in encodingWithoutContinuousAxis) {\n return {tooltip: encodingWithoutContinuousAxis.tooltip};\n }\n\n const fiveSummaryTooltip: StringFieldDef<string>[] = tooltipSummary.map(\n ({fieldPrefix, titlePrefix}): StringFieldDef<string> => {\n const mainTitle = withFieldName ? ` of ${getTitle(continuousAxisChannelDef)}` : '';\n return {\n field: fieldPrefix + continuousAxisChannelDef.field,\n type: continuousAxisChannelDef.type,\n title: isSignalRef(titlePrefix) ? {signal: `${titlePrefix}\"${escape(mainTitle)}\"`} : titlePrefix + mainTitle\n };\n }\n );\n\n const tooltipFieldDefs = fieldDefs(encodingWithoutContinuousAxis).map(toStringFieldDef);\n\n return {\n tooltip: [\n ...fiveSummaryTooltip,\n // need to cast because TextFieldDef supports fewer types of bin\n ...unique(tooltipFieldDefs, hash)\n ]\n };\n}\n\nexport function getTitle(continuousAxisChannelDef: PositionFieldDef<string>) {\n const {title, field} = continuousAxisChannelDef;\n return getFirstDefined(title, field);\n}\n\nexport function makeCompositeAggregatePartFactory<P extends PartsMixins<any>>(\n compositeMarkDef: GenericCompositeMarkDef<any> & P,\n continuousAxis: 'x' | 'y',\n continuousAxisChannelDef: PositionFieldDef<string>,\n sharedEncoding: Encoding<string>,\n compositeMarkConfig: P\n) {\n const {scale, axis} = continuousAxisChannelDef;\n\n return ({\n partName,\n mark,\n positionPrefix,\n endPositionPrefix = undefined,\n extraEncoding = {}\n }: {\n partName: keyof P;\n mark: Mark | MarkDef;\n positionPrefix: string;\n endPositionPrefix?: string;\n extraEncoding?: Encoding<string>;\n }) => {\n const title = getTitle(continuousAxisChannelDef);\n\n return partLayerMixins<P>(compositeMarkDef, partName, compositeMarkConfig, {\n mark, // TODO better remove this method and just have mark as a parameter of the method\n encoding: {\n [continuousAxis]: {\n field: `${positionPrefix}_${continuousAxisChannelDef.field}`,\n type: continuousAxisChannelDef.type,\n ...(title !== undefined ? {title} : {}),\n ...(scale !== undefined ? {scale} : {}),\n ...(axis !== undefined ? {axis} : {})\n },\n ...(isString(endPositionPrefix)\n ? {\n [`${continuousAxis}2`]: {\n field: `${endPositionPrefix}_${continuousAxisChannelDef.field}`\n }\n }\n : {}),\n ...sharedEncoding,\n ...extraEncoding\n }\n });\n };\n}\n\nexport function partLayerMixins<P extends PartsMixins<any>>(\n markDef: GenericCompositeMarkDef<any> & P,\n part: keyof P,\n compositeMarkConfig: P,\n partBaseSpec: NormalizedUnitSpec\n): NormalizedUnitSpec[] {\n const {clip, color, opacity} = markDef;\n\n const mark = markDef.type;\n\n if (markDef[part] || (markDef[part] === undefined && compositeMarkConfig[part])) {\n return [\n {\n ...partBaseSpec,\n mark: {\n ...(compositeMarkConfig[part] as AnyMarkConfig<ExprRef | SignalRef>),\n ...(clip ? {clip} : {}),\n ...(color ? {color} : {}),\n ...(opacity ? {opacity} : {}),\n ...(isMarkDef(partBaseSpec.mark) ? partBaseSpec.mark : {type: partBaseSpec.mark}),\n style: `${mark}-${String(part)}`,\n ...(isBoolean(markDef[part]) ? {} : (markDef[part] as AnyMarkConfig<ExprRef | SignalRef>))\n }\n }\n ];\n }\n return [];\n}\n\nexport function compositeMarkContinuousAxis<M extends CompositeMark>(\n spec: GenericUnitSpec<Encoding<string>, CompositeMark | CompositeMarkDef>,\n orient: Orientation,\n compositeMark: M\n): {\n continuousAxisChannelDef: PositionFieldDef<string>;\n continuousAxisChannelDef2: SecondaryFieldDef<string>;\n continuousAxisChannelDefError: SecondaryFieldDef<string>;\n continuousAxisChannelDefError2: SecondaryFieldDef<string>;\n continuousAxis: 'x' | 'y';\n} {\n const {encoding} = spec;\n const continuousAxis: 'x' | 'y' = orient === 'vertical' ? 'y' : 'x';\n\n const continuousAxisChannelDef = encoding[continuousAxis] as PositionFieldDef<string>; // Safe to cast because if x is not continuous fielddef, the orient would not be horizontal.\n const continuousAxisChannelDef2 = encoding[`${continuousAxis}2`] as SecondaryFieldDef<string>;\n const continuousAxisChannelDefError = (encoding as any)[`${continuousAxis}Error`] as SecondaryFieldDef<string>;\n const continuousAxisChannelDefError2 = (encoding as any)[`${continuousAxis}Error2`] as SecondaryFieldDef<string>;\n\n return {\n continuousAxisChannelDef: filterAggregateFromChannelDef(continuousAxisChannelDef, compositeMark),\n continuousAxisChannelDef2: filterAggregateFromChannelDef(continuousAxisChannelDef2, compositeMark),\n continuousAxisChannelDefError: filterAggregateFromChannelDef(continuousAxisChannelDefError, compositeMark),\n continuousAxisChannelDefError2: filterAggregateFromChannelDef(continuousAxisChannelDefError2, compositeMark),\n continuousAxis\n };\n}\n\nfunction filterAggregateFromChannelDef<M extends CompositeMark, F extends FieldDefBase<string>>(\n continuousAxisChannelDef: F,\n compositeMark: M\n): F {\n if (continuousAxisChannelDef?.aggregate) {\n const {aggregate, ...continuousAxisWithoutAggregate} = continuousAxisChannelDef;\n if (aggregate !== compositeMark) {\n log.warn(log.message.errorBarContinuousAxisHasCustomizedAggregate(aggregate, compositeMark));\n }\n return continuousAxisWithoutAggregate as F;\n } else {\n return continuousAxisChannelDef;\n }\n}\n\nexport function compositeMarkOrient<M extends CompositeMark>(\n spec: GenericUnitSpec<Encoding<string>, CompositeMark | CompositeMarkDef>,\n compositeMark: M\n): Orientation {\n const {mark, encoding} = spec;\n const {x, y} = encoding;\n\n if (isMarkDef(mark) && mark.orient) {\n return mark.orient;\n }\n\n if (isContinuousFieldOrDatumDef(x)) {\n // x is continuous\n if (isContinuousFieldOrDatumDef(y)) {\n // both x and y are continuous\n const xAggregate = isFieldDef(x) && x.aggregate;\n const yAggregate = isFieldDef(y) && y.aggregate;\n\n if (!xAggregate && yAggregate === compositeMark) {\n return 'vertical';\n } else if (!yAggregate && xAggregate === compositeMark) {\n return 'horizontal';\n } else if (xAggregate === compositeMark && yAggregate === compositeMark) {\n throw new Error('Both x and y cannot have aggregate');\n } else {\n if (isFieldOrDatumDefForTimeFormat(y) && !isFieldOrDatumDefForTimeFormat(x)) {\n // y is temporal but x is not\n return 'horizontal';\n }\n\n // default orientation for two continuous\n return 'vertical';\n }\n }\n\n return 'horizontal';\n } else if (isContinuousFieldOrDatumDef(y)) {\n // y is continuous but x is not\n return 'vertical';\n } else {\n // Neither x nor y is continuous.\n throw new Error(`Need a valid continuous axis for ${compositeMark}s`);\n }\n}\n", "import {Orientation} from 'vega';\nimport {isNumber, isObject} from 'vega-util';\nimport {getMarkPropOrConfig} from '../compile/common';\nimport {Config} from '../config';\nimport {Encoding, extractTransformsFromEncoding, normalizeEncoding} from '../encoding';\nimport * as log from '../log';\nimport {isMarkDef, MarkDef} from '../mark';\nimport {MarkInvalidMixins} from '../invalid';\nimport {NormalizerParams} from '../normalize';\nimport {GenericUnitSpec, NormalizedLayerSpec, NormalizedUnitSpec} from '../spec';\nimport {AggregatedFieldDef, CalculateTransform, JoinAggregateTransform, Transform} from '../transform';\nimport {accessWithDatumToUnescapedPath, isEmpty, omit, removePathFromField} from '../util';\nimport {CompositeMarkNormalizer} from './base';\nimport {\n compositeMarkContinuousAxis,\n compositeMarkOrient,\n filterTooltipWithAggregatedField,\n GenericCompositeMarkDef,\n getCompositeMarkTooltip,\n getTitle,\n makeCompositeAggregatePartFactory,\n partLayerMixins,\n PartsMixins\n} from './common';\n\nexport const BOXPLOT = 'boxplot' as const;\nexport type BoxPlot = typeof BOXPLOT;\n\nexport const BOXPLOT_PARTS = ['box', 'median', 'outliers', 'rule', 'ticks'] as const;\n\ntype BoxPlotPart = (typeof BOXPLOT_PARTS)[number];\n\nexport type BoxPlotPartsMixins = PartsMixins<BoxPlotPart>;\n\nexport interface BoxPlotConfig extends BoxPlotPartsMixins {\n /** Size of the box and median tick of a box plot */\n size?: number;\n\n /**\n * The extent of the whiskers. Available options include:\n * - `\"min-max\"`: min and max are the lower and upper whiskers respectively.\n * - A number representing multiple of the interquartile range. This number will be multiplied by the IQR to determine whisker boundary, which spans from the smallest data to the largest data within the range _[Q1 - k * IQR, Q3 + k * IQR]_ where _Q1_ and _Q3_ are the first and third quartiles while _IQR_ is the interquartile range (_Q3-Q1_).\n *\n * __Default value:__ `1.5`.\n */\n extent?: 'min-max' | number;\n}\n\nexport type BoxPlotDef = GenericCompositeMarkDef<BoxPlot> &\n BoxPlotConfig &\n MarkInvalidMixins & {\n /**\n * Type of the mark. For box plots, this should always be `\"boxplot\"`.\n * [boxplot](https://vega.github.io/vega-lite/docs/boxplot.html)\n */\n type: BoxPlot;\n\n /**\n * Orientation of the box plot. This is normally automatically determined based on types of fields on x and y channels. However, an explicit `orient` be specified when the orientation is ambiguous.\n *\n * __Default value:__ `\"vertical\"`.\n */\n orient?: Orientation;\n };\n\nexport interface BoxPlotConfigMixins {\n /**\n * Box Config\n */\n boxplot?: BoxPlotConfig;\n}\n\nexport const boxPlotNormalizer = new CompositeMarkNormalizer(BOXPLOT, normalizeBoxPlot);\n\nexport function getBoxPlotType(extent: number | 'min-max') {\n if (isNumber(extent)) {\n return 'tukey';\n }\n // Ham: If we ever want to, we could add another extent syntax `{kIQR: number}` for the original [Q1-k*IQR, Q3+k*IQR] whisker and call this boxPlotType = `kIQR`. However, I'm not exposing this for now.\n return extent;\n}\n\nexport function normalizeBoxPlot(\n spec: GenericUnitSpec<Encoding<string>, BoxPlot | BoxPlotDef>,\n {config}: NormalizerParams\n): NormalizedLayerSpec {\n // Need to initEncoding first so we can infer type\n spec = {\n ...spec,\n encoding: normalizeEncoding(spec.encoding, config)\n };\n const {mark, encoding: _encoding, params, projection: _p, ...outerSpec} = spec;\n const markDef: BoxPlotDef = isMarkDef(mark) ? mark : {type: mark};\n\n // TODO(https://github.com/vega/vega-lite/issues/3702): add selection support\n if (params) {\n log.warn(log.message.selectionNotSupported('boxplot'));\n }\n\n const extent = markDef.extent ?? config.boxplot.extent;\n const sizeValue = getMarkPropOrConfig(\n 'size',\n markDef as any, // TODO: https://github.com/vega/vega-lite/issues/6245\n config\n );\n\n const invalid = markDef.invalid;\n\n const boxPlotType = getBoxPlotType(extent);\n const {\n bins,\n timeUnits,\n transform,\n continuousAxisChannelDef,\n continuousAxis,\n groupby,\n aggregate,\n encodingWithoutContinuousAxis,\n ticksOrient,\n boxOrient,\n customTooltipWithoutAggregatedField\n } = boxParams(spec, extent, config);\n\n const aliasedFieldName = removePathFromField(continuousAxisChannelDef.field);\n\n const {color, size, ...encodingWithoutSizeColorAndContinuousAxis} = encodingWithoutContinuousAxis;\n\n const makeBoxPlotPart = (sharedEncoding: Encoding<string>) => {\n return makeCompositeAggregatePartFactory<BoxPlotPartsMixins>(\n markDef,\n continuousAxis,\n continuousAxisChannelDef,\n sharedEncoding,\n config.boxplot\n );\n };\n\n const makeBoxPlotExtent = makeBoxPlotPart(encodingWithoutSizeColorAndContinuousAxis);\n const makeBoxPlotBox = makeBoxPlotPart(encodingWithoutContinuousAxis);\n const defaultBoxColor = (isObject(config.boxplot.box) ? config.boxplot.box.color : config.mark.color) || '#4c78a8';\n const makeBoxPlotMidTick = makeBoxPlotPart({\n ...encodingWithoutSizeColorAndContinuousAxis,\n ...(size ? {size} : {}),\n color: {\n condition: {\n test: `${accessWithDatumToUnescapedPath(`lower_box_${continuousAxisChannelDef.field}`)} >= ${accessWithDatumToUnescapedPath(`upper_box_${continuousAxisChannelDef.field}`)}`,\n ...(color || {value: defaultBoxColor})\n }\n }\n });\n\n const fiveSummaryTooltipEncoding: Encoding<string> = getCompositeMarkTooltip(\n [\n {fieldPrefix: boxPlotType === 'min-max' ? 'upper_whisker_' : 'max_', titlePrefix: 'Max'},\n {fieldPrefix: 'upper_box_', titlePrefix: 'Q3'},\n {fieldPrefix: 'mid_box_', titlePrefix: 'Median'},\n {fieldPrefix: 'lower_box_', titlePrefix: 'Q1'},\n {fieldPrefix: boxPlotType === 'min-max' ? 'lower_whisker_' : 'min_', titlePrefix: 'Min'}\n ],\n continuousAxisChannelDef,\n encodingWithoutContinuousAxis\n );\n\n // ## Whisker Layers\n\n const endTick: MarkDef = {type: 'tick', color: 'black', opacity: 1, orient: ticksOrient, invalid, aria: false};\n const whiskerTooltipEncoding: Encoding<string> =\n boxPlotType === 'min-max'\n ? fiveSummaryTooltipEncoding // for min-max, show five-summary tooltip for whisker\n : // for tukey / k-IQR, just show upper/lower-whisker\n getCompositeMarkTooltip(\n [\n {fieldPrefix: 'upper_whisker_', titlePrefix: 'Upper Whisker'},\n {fieldPrefix: 'lower_whisker_', titlePrefix: 'Lower Whisker'}\n ],\n continuousAxisChannelDef,\n encodingWithoutContinuousAxis\n );\n\n const whiskerLayers = [\n ...makeBoxPlotExtent({\n partName: 'rule',\n mark: {type: 'rule', invalid, aria: false},\n positionPrefix: 'lower_whisker',\n endPositionPrefix: 'lower_box',\n extraEncoding: whiskerTooltipEncoding\n }),\n ...makeBoxPlotExtent({\n partName: 'rule',\n mark: {type: 'rule', invalid, aria: false},\n positionPrefix: 'upper_box',\n endPositionPrefix: 'upper_whisker',\n extraEncoding: whiskerTooltipEncoding\n }),\n ...makeBoxPlotExtent({\n partName: 'ticks',\n mark: endTick,\n positionPrefix: 'lower_whisker',\n extraEncoding: whiskerTooltipEncoding\n }),\n ...makeBoxPlotExtent({\n partName: 'ticks',\n mark: endTick,\n positionPrefix: 'upper_whisker',\n extraEncoding: whiskerTooltipEncoding\n })\n ];\n\n // ## Box Layers\n\n // TODO: support hiding certain mark parts\n const boxLayers: NormalizedUnitSpec[] = [\n ...(boxPlotType !== 'tukey' ? whiskerLayers : []),\n ...makeBoxPlotBox({\n partName: 'box',\n mark: {\n type: 'bar',\n ...(sizeValue ? {size: sizeValue} : {}),\n orient: boxOrient,\n invalid,\n ariaRoleDescription: 'box'\n },\n positionPrefix: 'lower_box',\n endPositionPrefix: 'upper_box',\n extraEncoding: fiveSummaryTooltipEncoding\n }),\n ...makeBoxPlotMidTick({\n partName: 'median',\n mark: {\n type: 'tick',\n invalid,\n ...(isObject(config.boxplot.median) && config.boxplot.median.color ? {color: config.boxplot.median.color} : {}),\n ...(sizeValue ? {size: sizeValue} : {}),\n orient: ticksOrient,\n aria: false\n },\n positionPrefix: 'mid_box',\n extraEncoding: fiveSummaryTooltipEncoding\n })\n ];\n\n if (boxPlotType === 'min-max') {\n return {\n ...outerSpec,\n transform: (outerSpec.transform ?? []).concat(transform),\n layer: boxLayers\n };\n }\n\n // Tukey Box Plot\n\n const lowerBoxExpr = accessWithDatumToUnescapedPath(`lower_box_${continuousAxisChannelDef.field}`);\n const upperBoxExpr = accessWithDatumToUnescapedPath(`upper_box_${continuousAxisChannelDef.field}`);\n const iqrExpr = `(${upperBoxExpr} - ${lowerBoxExpr})`;\n const lowerWhiskerExpr = `${lowerBoxExpr} - ${extent} * ${iqrExpr}`;\n const upperWhiskerExpr = `${upperBoxExpr} + ${extent} * ${iqrExpr}`;\n const fieldExpr = accessWithDatumToUnescapedPath(continuousAxisChannelDef.field);\n\n const joinaggregateTransform: JoinAggregateTransform = {\n joinaggregate: boxParamsQuartiles(continuousAxisChannelDef.field),\n groupby\n };\n\n const filteredWhiskerSpec: NormalizedLayerSpec = {\n transform: [\n {\n filter: `(${lowerWhiskerExpr} <= ${fieldExpr}) && (${fieldExpr} <= ${upperWhiskerExpr})`\n },\n {\n aggregate: [\n {\n op: 'min',\n field: continuousAxisChannelDef.field,\n as: `lower_whisker_${aliasedFieldName}`\n },\n {\n op: 'max',\n field: continuousAxisChannelDef.field,\n as: `upper_whisker_${aliasedFieldName}`\n },\n // preserve lower_box / upper_box\n {\n op: 'min',\n field: `lower_box_${continuousAxisChannelDef.field}`,\n as: `lower_box_${aliasedFieldName}`\n },\n {\n op: 'max',\n field: `upper_box_${continuousAxisChannelDef.field}`,\n as: `upper_box_${aliasedFieldName}`\n },\n ...aggregate\n ],\n groupby\n }\n ],\n layer: whiskerLayers\n };\n\n const {tooltip, ...encodingWithoutSizeColorContinuousAxisAndTooltip} = encodingWithoutSizeColorAndContinuousAxis;\n\n const {scale, axis} = continuousAxisChannelDef;\n const title = getTitle(continuousAxisChannelDef);\n const axisWithoutTitle = omit(axis, ['title']);\n\n const outlierLayersMixins = partLayerMixins<BoxPlotPartsMixins>(markDef, 'outliers', config.boxplot, {\n transform: [{filter: `(${fieldExpr} < ${lowerWhiskerExpr}) || (${fieldExpr} > ${upperWhiskerExpr})`}],\n mark: 'point',\n encoding: {\n [continuousAxis]: {\n field: continuousAxisChannelDef.field,\n type: continuousAxisChannelDef.type,\n ...(title !== undefined ? {title} : {}),\n ...(scale !== undefined ? {scale} : {}),\n // add axis without title since we already added the title above\n ...(isEmpty(axisWithoutTitle) ? {} : {axis: axisWithoutTitle})\n },\n ...encodingWithoutSizeColorContinuousAxisAndTooltip,\n ...(color ? {color} : {}),\n ...(customTooltipWithoutAggregatedField ? {tooltip: customTooltipWithoutAggregatedField} : {})\n }\n })[0];\n\n let filteredLayersMixins: NormalizedLayerSpec;\n const filteredLayersMixinsTransforms = [...bins, ...timeUnits, joinaggregateTransform];\n if (outlierLayersMixins) {\n filteredLayersMixins = {\n transform: filteredLayersMixinsTransforms,\n layer: [outlierLayersMixins, filteredWhiskerSpec]\n };\n } else {\n filteredLayersMixins = filteredWhiskerSpec;\n filteredLayersMixins.transform.unshift(...filteredLayersMixinsTransforms);\n }\n\n return {\n ...outerSpec,\n layer: [\n filteredLayersMixins,\n {\n // boxplot\n transform,\n layer: boxLayers\n }\n ]\n };\n}\n\nfunction boxParamsQuartiles(continousAxisField: string): AggregatedFieldDef[] {\n const aliasedFieldName = removePathFromField(continousAxisField);\n return [\n {\n op: 'q1',\n field: continousAxisField,\n as: `lower_box_${aliasedFieldName}`\n },\n {\n op: 'q3',\n field: continousAxisField,\n as: `upper_box_${aliasedFieldName}`\n }\n ];\n}\n\nfunction boxParams(\n spec: GenericUnitSpec<Encoding<string>, BoxPlot | BoxPlotDef>,\n extent: 'min-max' | number,\n config: Config\n) {\n const orient = compositeMarkOrient(spec, BOXPLOT);\n const {continuousAxisChannelDef, continuousAxis} = compositeMarkContinuousAxis(spec, orient, BOXPLOT);\n const continuousFieldName: string = continuousAxisChannelDef.field;\n const aliasedFieldName = removePathFromField(continuousFieldName);\n\n const boxPlotType = getBoxPlotType(extent);\n\n const boxplotSpecificAggregate: AggregatedFieldDef[] = [\n ...boxParamsQuartiles(continuousFieldName),\n {\n op: 'median',\n field: continuousFieldName,\n as: `mid_box_${aliasedFieldName}`\n },\n {\n op: 'min',\n field: continuousFieldName,\n as: (boxPlotType === 'min-max' ? 'lower_whisker_' : 'min_') + aliasedFieldName\n },\n {\n op: 'max',\n field: continuousFieldName,\n as: (boxPlotType === 'min-max' ? 'upper_whisker_' : 'max_') + aliasedFieldName\n }\n ];\n\n const postAggregateCalculates: CalculateTransform[] =\n boxPlotType === 'min-max' || boxPlotType === 'tukey'\n ? []\n : [\n // This is for the original k-IQR, which we do not expose\n {\n calculate: `${accessWithDatumToUnescapedPath(`upper_box_${aliasedFieldName}`)} - ${accessWithDatumToUnescapedPath(`lower_box_${aliasedFieldName}`)}`,\n as: `iqr_${aliasedFieldName}`\n },\n {\n calculate: `min(${accessWithDatumToUnescapedPath(`upper_box_${aliasedFieldName}`)} + ${accessWithDatumToUnescapedPath(`iqr_${aliasedFieldName}`)} * ${extent}, ${accessWithDatumToUnescapedPath(`max_${aliasedFieldName}`)})`,\n as: `upper_whisker_${aliasedFieldName}`\n },\n {\n calculate: `max(${accessWithDatumToUnescapedPath(`lower_box_${aliasedFieldName}`)} - ${accessWithDatumToUnescapedPath(`iqr_${aliasedFieldName}`)} * ${extent}, ${accessWithDatumToUnescapedPath(`min_${aliasedFieldName}`)})`,\n as: `lower_whisker_${aliasedFieldName}`\n }\n ];\n\n const {[continuousAxis]: oldContinuousAxisChannelDef, ...oldEncodingWithoutContinuousAxis} = spec.encoding;\n const {customTooltipWithoutAggregatedField, filteredEncoding} = filterTooltipWithAggregatedField(\n oldEncodingWithoutContinuousAxis\n );\n\n const {\n bins,\n timeUnits,\n aggregate,\n groupby,\n encoding: encodingWithoutContinuousAxis\n } = extractTransformsFromEncoding(filteredEncoding, config);\n\n const ticksOrient: Orientation = orient === 'vertical' ? 'horizontal' : 'vertical';\n const boxOrient: Orientation = orient;\n\n const transform: Transform[] = [\n ...bins,\n ...timeUnits,\n {\n aggregate: [...aggregate, ...boxplotSpecificAggregate],\n groupby\n },\n ...postAggregateCalculates\n ];\n\n return {\n bins,\n timeUnits,\n transform,\n groupby,\n aggregate,\n continuousAxisChannelDef,\n continuousAxis,\n encodingWithoutContinuousAxis,\n ticksOrient,\n boxOrient,\n customTooltipWithoutAggregatedField\n };\n}\n", "import {AggregateOp, Orientation, SignalRef, Text} from 'vega';\nimport {PositionChannel} from '../channel';\nimport {\n Field,\n isContinuousFieldOrDatumDef,\n isFieldOrDatumDef,\n PositionFieldDef,\n SecondaryFieldDef,\n title,\n ValueDef\n} from '../channeldef';\nimport {Config} from '../config';\nimport {Data} from '../data';\nimport {Encoding, extractTransformsFromEncoding, normalizeEncoding} from '../encoding';\nimport {ExprRef} from '../expr';\nimport * as log from '../log';\nimport {isMarkDef, MarkDef} from '../mark';\nimport {NormalizerParams} from '../normalize';\nimport {GenericUnitSpec, NormalizedLayerSpec} from '../spec';\nimport {Step} from '../spec/base';\nimport {NormalizedUnitSpec} from '../spec/unit';\nimport {TitleParams} from '../title';\nimport {AggregatedFieldDef, CalculateTransform, Transform} from '../transform';\nimport {accessWithDatumToUnescapedPath, replaceAll, titleCase} from '../util';\nimport {CompositeMarkNormalizer} from './base';\nimport {\n compositeMarkContinuousAxis,\n compositeMarkOrient,\n CompositeMarkTooltipSummary,\n GenericCompositeMarkDef,\n getCompositeMarkTooltip,\n makeCompositeAggregatePartFactory,\n PartsMixins\n} from './common';\nimport {ErrorBand, ErrorBandDef} from './errorband';\n\nexport const ERRORBAR = 'errorbar' as const;\nexport type ErrorBar = typeof ERRORBAR;\n\nexport type ErrorBarExtent = 'ci' | 'iqr' | 'stderr' | 'stdev';\nexport type ErrorBarCenter = 'mean' | 'median';\n\nexport type ErrorInputType = 'raw' | 'aggregated-upper-lower' | 'aggregated-error';\n\nexport const ERRORBAR_PARTS = ['ticks', 'rule'] as const;\n\nexport type ErrorBarPart = (typeof ERRORBAR_PARTS)[number];\n\nexport interface ErrorExtraEncoding<F extends Field> {\n /**\n * Error value of x coordinates for error specified `\"errorbar\"` and `\"errorband\"`.\n */\n xError?: SecondaryFieldDef<F> | ValueDef<number>;\n\n /**\n * Secondary error value of x coordinates for error specified `\"errorbar\"` and `\"errorband\"`.\n */\n // `xError2` cannot have type as it should have the same type as `xError`\n xError2?: SecondaryFieldDef<F> | ValueDef<number>;\n\n /**\n * Error value of y coordinates for error specified `\"errorbar\"` and `\"errorband\"`.\n */\n yError?: SecondaryFieldDef<F> | ValueDef<number>;\n\n /**\n * Secondary error value of y coordinates for error specified `\"errorbar\"` and `\"errorband\"`.\n */\n // `yError2` cannot have type as it should have the same type as `yError`\n yError2?: SecondaryFieldDef<F> | ValueDef<number>;\n}\n\nexport type ErrorEncoding<F extends Field> = Pick<Encoding<F>, PositionChannel | 'color' | 'detail' | 'opacity'> &\n ErrorExtraEncoding<F>;\n\nexport type ErrorBarPartsMixins = PartsMixins<ErrorBarPart>;\n\nexport interface ErrorBarConfig extends ErrorBarPartsMixins {\n /** Size of the ticks of an error bar */\n size?: number;\n\n /** Thickness of the ticks and the bar of an error bar */\n thickness?: number;\n\n /**\n * The center of the errorbar. Available options include:\n * - `\"mean\"`: the mean of the data points.\n * - `\"median\"`: the median of the data points.\n *\n * __Default value:__ `\"mean\"`.\n * @hidden\n */\n\n // center is not needed right now but will be added back to the schema if future features require it.\n center?: ErrorBarCenter;\n\n /**\n * The extent of the rule. Available options include:\n * - `\"ci\"`: Extend the rule to the 95% bootstrapped confidence interval of the mean.\n * - `\"stderr\"`: The size of rule are set to the value of standard error, extending from the mean.\n * - `\"stdev\"`: The size of rule are set to the value of standard deviation, extending from the mean.\n * - `\"iqr\"`: Extend the rule to the q1 and q3.\n *\n * __Default value:__ `\"stderr\"`.\n */\n extent?: ErrorBarExtent;\n}\n\nexport type ErrorBarDef = GenericCompositeMarkDef<ErrorBar> &\n ErrorBarConfig & {\n /**\n * Orientation of the error bar. This is normally automatically determined, but can be specified when the orientation is ambiguous and cannot be automatically determined.\n */\n orient?: Orientation;\n };\n\nexport interface ErrorBarConfigMixins {\n /**\n * ErrorBar Config\n */\n errorbar?: ErrorBarConfig;\n}\n\nexport const errorBarNormalizer = new CompositeMarkNormalizer(ERRORBAR, normalizeErrorBar);\n\nexport function normalizeErrorBar(\n spec: GenericUnitSpec<ErrorEncoding<string>, ErrorBar | ErrorBarDef>,\n {config}: NormalizerParams\n): NormalizedLayerSpec | NormalizedUnitSpec {\n // Need to initEncoding first so we can infer type\n spec = {\n ...spec,\n encoding: normalizeEncoding(spec.encoding, config)\n };\n\n const {\n transform,\n continuousAxisChannelDef,\n continuousAxis,\n encodingWithoutContinuousAxis,\n ticksOrient,\n markDef,\n outerSpec,\n tooltipEncoding\n } = errorBarParams(spec, ERRORBAR, config);\n delete (encodingWithoutContinuousAxis as any).size;\n\n const makeErrorBarPart = makeCompositeAggregatePartFactory<ErrorBarPartsMixins>(\n markDef,\n continuousAxis,\n continuousAxisChannelDef,\n encodingWithoutContinuousAxis,\n config.errorbar\n );\n\n const thickness = markDef.thickness;\n const size = markDef.size;\n const tick: MarkDef = {\n type: 'tick',\n orient: ticksOrient,\n aria: false,\n ...(thickness !== undefined ? {thickness} : {}),\n ...(size !== undefined ? {size} : {})\n };\n\n const layer = [\n ...makeErrorBarPart({\n partName: 'ticks',\n mark: tick,\n positionPrefix: 'lower',\n extraEncoding: tooltipEncoding\n }),\n ...makeErrorBarPart({\n partName: 'ticks',\n mark: tick,\n positionPrefix: 'upper',\n extraEncoding: tooltipEncoding\n }),\n ...makeErrorBarPart({\n partName: 'rule',\n mark: {\n type: 'rule',\n ariaRoleDescription: 'errorbar',\n ...(thickness !== undefined ? {size: thickness} : {})\n },\n positionPrefix: 'lower',\n endPositionPrefix: 'upper',\n extraEncoding: tooltipEncoding\n })\n ];\n\n return {\n ...outerSpec,\n transform,\n ...(layer.length > 1 ? {layer} : {...layer[0]})\n };\n}\n\nfunction errorBarOrientAndInputType(\n spec: GenericUnitSpec<ErrorEncoding<string>, ErrorBar | ErrorBand | ErrorBarDef | ErrorBandDef>,\n compositeMark: ErrorBar | ErrorBand\n): {\n orient: Orientation;\n inputType: ErrorInputType;\n} {\n const {encoding} = spec;\n\n if (errorBarIsInputTypeRaw(encoding)) {\n return {\n orient: compositeMarkOrient(spec, compositeMark),\n inputType: 'raw'\n };\n }\n\n const isTypeAggregatedUpperLower: boolean = errorBarIsInputTypeAggregatedUpperLower(encoding);\n const isTypeAggregatedError: boolean = errorBarIsInputTypeAggregatedError(encoding);\n const x = encoding.x;\n const y = encoding.y;\n\n if (isTypeAggregatedUpperLower) {\n // type is aggregated-upper-lower\n\n if (isTypeAggregatedError) {\n throw new Error(`${compositeMark} cannot be both type aggregated-upper-lower and aggregated-error`);\n }\n\n const x2 = encoding.x2;\n const y2 = encoding.y2;\n\n if (isFieldOrDatumDef(x2) && isFieldOrDatumDef(y2)) {\n // having both x, x2 and y, y2\n throw new Error(`${compositeMark} cannot have both x2 and y2`);\n } else if (isFieldOrDatumDef(x2)) {\n if (isContinuousFieldOrDatumDef(x)) {\n // having x, x2 quantitative and field y, y2 are not specified\n return {orient: 'horizontal', inputType: 'aggregated-upper-lower'};\n } else {\n // having x, x2 that are not both quantitative\n throw new Error(`Both x and x2 have to be quantitative in ${compositeMark}`);\n }\n } else if (isFieldOrDatumDef(y2)) {\n // y2 is a FieldDef\n if (isContinuousFieldOrDatumDef(y)) {\n // having y, y2 quantitative and field x, x2 are not specified\n return {orient: 'vertical', inputType: 'aggregated-upper-lower'};\n } else {\n // having y, y2 that are not both quantitative\n throw new Error(`Both y and y2 have to be quantitative in ${compositeMark}`);\n }\n }\n throw new Error('No ranged axis');\n } else {\n // type is aggregated-error\n\n const xError = encoding.xError;\n const xError2 = encoding.xError2;\n const yError = encoding.yError;\n const yError2 = encoding.yError2;\n\n if (isFieldOrDatumDef(xError2) && !isFieldOrDatumDef(xError)) {\n // having xError2 without xError\n throw new Error(`${compositeMark} cannot have xError2 without xError`);\n }\n\n if (isFieldOrDatumDef(yError2) && !isFieldOrDatumDef(yError)) {\n // having yError2 without yError\n throw new Error(`${compositeMark} cannot have yError2 without yError`);\n }\n\n if (isFieldOrDatumDef(xError) && isFieldOrDatumDef(yError)) {\n // having both xError and yError\n throw new Error(`${compositeMark} cannot have both xError and yError with both are quantiative`);\n } else if (isFieldOrDatumDef(xError)) {\n if (isContinuousFieldOrDatumDef(x)) {\n // having x and xError that are all quantitative\n return {orient: 'horizontal', inputType: 'aggregated-error'};\n } else {\n // having x, xError, and xError2 that are not all quantitative\n throw new Error('All x, xError, and xError2 (if exist) have to be quantitative');\n }\n } else if (isFieldOrDatumDef(yError)) {\n if (isContinuousFieldOrDatumDef(y)) {\n // having y and yError that are all quantitative\n return {orient: 'vertical', inputType: 'aggregated-error'};\n } else {\n // having y, yError, and yError2 that are not all quantitative\n throw new Error('All y, yError, and yError2 (if exist) have to be quantitative');\n }\n }\n throw new Error('No ranged axis');\n }\n}\n\nfunction errorBarIsInputTypeRaw(encoding: ErrorEncoding<string>): boolean {\n return (\n (isFieldOrDatumDef(encoding.x) || isFieldOrDatumDef(encoding.y)) &&\n !isFieldOrDatumDef(encoding.x2) &&\n !isFieldOrDatumDef(encoding.y2) &&\n !isFieldOrDatumDef(encoding.xError) &&\n !isFieldOrDatumDef(encoding.xError2) &&\n !isFieldOrDatumDef(encoding.yError) &&\n !isFieldOrDatumDef(encoding.yError2)\n );\n}\n\nfunction errorBarIsInputTypeAggregatedUpperLower(encoding: ErrorEncoding<string>): boolean {\n return isFieldOrDatumDef(encoding.x2) || isFieldOrDatumDef(encoding.y2);\n}\n\nfunction errorBarIsInputTypeAggregatedError(encoding: ErrorEncoding<string>): boolean {\n return (\n isFieldOrDatumDef(encoding.xError) ||\n isFieldOrDatumDef(encoding.xError2) ||\n isFieldOrDatumDef(encoding.yError) ||\n isFieldOrDatumDef(encoding.yError2)\n );\n}\n\nexport function errorBarParams<\n M extends ErrorBar | ErrorBand,\n MD extends GenericCompositeMarkDef<M> & (ErrorBarDef | ErrorBandDef)\n>(\n spec: GenericUnitSpec<ErrorEncoding<string>, M | MD>,\n compositeMark: M,\n config: Config\n): {\n transform: Transform[];\n groupby: string[];\n continuousAxisChannelDef: PositionFieldDef<string>;\n continuousAxis: 'x' | 'y';\n encodingWithoutContinuousAxis: ErrorEncoding<string>;\n ticksOrient: Orientation;\n markDef: MD;\n outerSpec: {\n data?: Data;\n title?: Text | TitleParams<ExprRef | SignalRef>;\n name?: string;\n description?: string;\n transform?: Transform[];\n width?: number | 'container' | Step;\n height?: number | 'container' | Step;\n };\n tooltipEncoding: ErrorEncoding<string>;\n} {\n // TODO: use selection\n const {mark, encoding, params, projection: _p, ...outerSpec} = spec;\n const markDef: MD = isMarkDef(mark) ? mark : ({type: mark} as MD);\n\n // TODO(https://github.com/vega/vega-lite/issues/3702): add selection support\n if (params) {\n log.warn(log.message.selectionNotSupported(compositeMark));\n }\n\n const {orient, inputType} = errorBarOrientAndInputType(spec, compositeMark);\n const {\n continuousAxisChannelDef,\n continuousAxisChannelDef2,\n continuousAxisChannelDefError,\n continuousAxisChannelDefError2,\n continuousAxis\n } = compositeMarkContinuousAxis(spec, orient, compositeMark);\n\n const {errorBarSpecificAggregate, postAggregateCalculates, tooltipSummary, tooltipTitleWithFieldName} =\n errorBarAggregationAndCalculation(\n markDef,\n continuousAxisChannelDef,\n continuousAxisChannelDef2,\n continuousAxisChannelDefError,\n continuousAxisChannelDefError2,\n inputType,\n compositeMark,\n config\n );\n\n const {\n [continuousAxis]: oldContinuousAxisChannelDef,\n [continuousAxis === 'x' ? 'x2' : 'y2']: oldContinuousAxisChannelDef2,\n [continuousAxis === 'x' ? 'xError' : 'yError']: oldContinuousAxisChannelDefError,\n [continuousAxis === 'x' ? 'xError2' : 'yError2']: oldContinuousAxisChannelDefError2,\n ...oldEncodingWithoutContinuousAxis\n } = encoding;\n\n const {\n bins,\n timeUnits,\n aggregate: oldAggregate,\n groupby: oldGroupBy,\n encoding: encodingWithoutContinuousAxis\n } = extractTransformsFromEncoding(oldEncodingWithoutContinuousAxis, config);\n\n const aggregate: AggregatedFieldDef[] = [...oldAggregate, ...errorBarSpecificAggregate];\n const groupby: string[] = inputType !== 'raw' ? [] : oldGroupBy;\n\n const tooltipEncoding: ErrorEncoding<string> = getCompositeMarkTooltip(\n tooltipSummary,\n continuousAxisChannelDef,\n encodingWithoutContinuousAxis,\n tooltipTitleWithFieldName\n );\n\n return {\n transform: [\n ...(outerSpec.transform ?? []),\n ...bins,\n ...timeUnits,\n ...(aggregate.length === 0 ? [] : [{aggregate, groupby}]),\n ...postAggregateCalculates\n ],\n groupby,\n continuousAxisChannelDef,\n continuousAxis,\n encodingWithoutContinuousAxis,\n ticksOrient: orient === 'vertical' ? 'horizontal' : 'vertical',\n markDef,\n outerSpec,\n tooltipEncoding\n };\n}\n\nfunction errorBarAggregationAndCalculation<\n M extends ErrorBar | ErrorBand,\n MD extends GenericCompositeMarkDef<M> & (ErrorBarDef | ErrorBandDef)\n>(\n markDef: MD,\n continuousAxisChannelDef: PositionFieldDef<string>,\n continuousAxisChannelDef2: SecondaryFieldDef<string>,\n continuousAxisChannelDefError: SecondaryFieldDef<string>,\n continuousAxisChannelDefError2: SecondaryFieldDef<string>,\n inputType: ErrorInputType,\n compositeMark: M,\n config: Config\n): {\n postAggregateCalculates: CalculateTransform[];\n errorBarSpecificAggregate: AggregatedFieldDef[];\n tooltipSummary: CompositeMarkTooltipSummary[];\n tooltipTitleWithFieldName: boolean;\n} {\n let errorBarSpecificAggregate: AggregatedFieldDef[] = [];\n let postAggregateCalculates: CalculateTransform[] = [];\n const continuousFieldName: string = continuousAxisChannelDef.field;\n\n let tooltipSummary: CompositeMarkTooltipSummary[];\n let tooltipTitleWithFieldName = false;\n\n if (inputType === 'raw') {\n const center: ErrorBarCenter = markDef.center\n ? markDef.center\n : markDef.extent\n ? markDef.extent === 'iqr'\n ? 'median'\n : 'mean'\n : config.errorbar.center;\n const extent: ErrorBarExtent = markDef.extent ? markDef.extent : center === 'mean' ? 'stderr' : 'iqr';\n\n if ((center === 'median') !== (extent === 'iqr')) {\n log.warn(log.message.errorBarCenterIsUsedWithWrongExtent(center, extent, compositeMark));\n }\n\n if (extent === 'stderr' || extent === 'stdev') {\n errorBarSpecificAggregate = [\n {op: extent, field: continuousFieldName, as: `extent_${continuousFieldName}`},\n {op: center, field: continuousFieldName, as: `center_${continuousFieldName}`}\n ];\n\n postAggregateCalculates = [\n {\n calculate: `${accessWithDatumToUnescapedPath(`center_${continuousFieldName}`)} + ${accessWithDatumToUnescapedPath(`extent_${continuousFieldName}`)}`,\n as: `upper_${continuousFieldName}`\n },\n {\n calculate: `${accessWithDatumToUnescapedPath(`center_${continuousFieldName}`)} - ${accessWithDatumToUnescapedPath(`extent_${continuousFieldName}`)}`,\n as: `lower_${continuousFieldName}`\n }\n ];\n\n tooltipSummary = [\n {fieldPrefix: 'center_', titlePrefix: titleCase(center)},\n {fieldPrefix: 'upper_', titlePrefix: getTitlePrefix(center, extent, '+')},\n {fieldPrefix: 'lower_', titlePrefix: getTitlePrefix(center, extent, '-')}\n ];\n tooltipTitleWithFieldName = true;\n } else {\n let centerOp: AggregateOp;\n let lowerExtentOp: AggregateOp;\n let upperExtentOp: AggregateOp;\n if (extent === 'ci') {\n centerOp = 'mean';\n lowerExtentOp = 'ci0';\n upperExtentOp = 'ci1';\n } else {\n centerOp = 'median';\n lowerExtentOp = 'q1';\n upperExtentOp = 'q3';\n }\n\n errorBarSpecificAggregate = [\n {op: lowerExtentOp, field: continuousFieldName, as: `lower_${continuousFieldName}`},\n {op: upperExtentOp, field: continuousFieldName, as: `upper_${continuousFieldName}`},\n {op: centerOp, field: continuousFieldName, as: `center_${continuousFieldName}`}\n ];\n\n tooltipSummary = [\n {\n fieldPrefix: 'upper_',\n titlePrefix: title({field: continuousFieldName, aggregate: upperExtentOp, type: 'quantitative'}, config, {\n allowDisabling: false\n })\n },\n {\n fieldPrefix: 'lower_',\n titlePrefix: title({field: continuousFieldName, aggregate: lowerExtentOp, type: 'quantitative'}, config, {\n allowDisabling: false\n })\n },\n {\n fieldPrefix: 'center_',\n titlePrefix: title({field: continuousFieldName, aggregate: centerOp, type: 'quantitative'}, config, {\n allowDisabling: false\n })\n }\n ];\n }\n } else {\n if (markDef.center || markDef.extent) {\n log.warn(log.message.errorBarCenterAndExtentAreNotNeeded(markDef.center, markDef.extent));\n }\n\n if (inputType === 'aggregated-upper-lower') {\n tooltipSummary = [];\n postAggregateCalculates = [\n {\n calculate: accessWithDatumToUnescapedPath(continuousAxisChannelDef2.field),\n as: `upper_${continuousFieldName}`\n },\n {calculate: accessWithDatumToUnescapedPath(continuousFieldName), as: `lower_${continuousFieldName}`}\n ];\n } else if (inputType === 'aggregated-error') {\n tooltipSummary = [{fieldPrefix: '', titlePrefix: continuousFieldName}];\n postAggregateCalculates = [\n {\n calculate: `${accessWithDatumToUnescapedPath(continuousFieldName)} + ${accessWithDatumToUnescapedPath(continuousAxisChannelDefError.field)}`,\n as: `upper_${continuousFieldName}`\n }\n ];\n\n if (continuousAxisChannelDefError2) {\n postAggregateCalculates.push({\n calculate: `${accessWithDatumToUnescapedPath(continuousFieldName)} + ${accessWithDatumToUnescapedPath(continuousAxisChannelDefError2.field)}`,\n as: `lower_${continuousFieldName}`\n });\n } else {\n postAggregateCalculates.push({\n calculate: `${accessWithDatumToUnescapedPath(continuousFieldName)} - ${accessWithDatumToUnescapedPath(continuousAxisChannelDefError.field)}`,\n as: `lower_${continuousFieldName}`\n });\n }\n }\n\n for (const postAggregateCalculate of postAggregateCalculates) {\n tooltipSummary.push({\n fieldPrefix: postAggregateCalculate.as.substring(0, 6),\n titlePrefix: replaceAll(replaceAll(postAggregateCalculate.calculate, \"datum['\", ''), \"']\", '')\n });\n }\n }\n return {postAggregateCalculates, errorBarSpecificAggregate, tooltipSummary, tooltipTitleWithFieldName};\n}\n\nfunction getTitlePrefix(center: ErrorBarCenter, extent: ErrorBarExtent, operation: '+' | '-'): string {\n return `${titleCase(center)} ${operation} ${extent}`;\n}\n", "import {Interpolate, Orientation} from 'vega';\nimport {Field} from '../channeldef';\nimport {Encoding, normalizeEncoding} from '../encoding';\nimport * as log from '../log';\nimport {MarkDef} from '../mark';\nimport {NormalizerParams} from '../normalize';\nimport {GenericUnitSpec, NormalizedLayerSpec} from '../spec';\nimport {CompositeMarkNormalizer} from './base';\nimport {GenericCompositeMarkDef, makeCompositeAggregatePartFactory, PartsMixins} from './common';\nimport {ErrorBarCenter, ErrorBarExtent, errorBarParams, ErrorEncoding} from './errorbar';\n\nexport type ErrorBandUnitSpec<\n EE = undefined // extra encoding parameter (for faceted composite unit spec)\n> = GenericUnitSpec<ErrorEncoding<Field> & EE, ErrorBand | ErrorBandDef>;\n\nexport const ERRORBAND = 'errorband' as const;\nexport type ErrorBand = typeof ERRORBAND;\n\nexport const ERRORBAND_PARTS = ['band', 'borders'] as const;\n\ntype ErrorBandPart = (typeof ERRORBAND_PARTS)[number];\n\nexport type ErrorBandPartsMixins = PartsMixins<ErrorBandPart>;\n\nexport interface ErrorBandConfig extends ErrorBandPartsMixins {\n /**\n * The center of the error band. Available options include:\n * - `\"mean\"`: the mean of the data points.\n * - `\"median\"`: the median of the data points.\n *\n * __Default value:__ `\"mean\"`.\n * @hidden\n */\n\n // center is not needed right now but will be added back to the schema if future features require it.\n center?: ErrorBarCenter;\n\n /**\n * The extent of the band. Available options include:\n * - `\"ci\"`: Extend the band to the 95% bootstrapped confidence interval of the mean.\n * - `\"stderr\"`: The size of band are set to the value of standard error, extending from the mean.\n * - `\"stdev\"`: The size of band are set to the value of standard deviation, extending from the mean.\n * - `\"iqr\"`: Extend the band to the q1 and q3.\n *\n * __Default value:__ `\"stderr\"`.\n */\n extent?: ErrorBarExtent;\n\n /**\n * The line interpolation method for the error band. One of the following:\n * - `\"linear\"`: piecewise linear segments, as in a polyline.\n * - `\"linear-closed\"`: close the linear segments to form a polygon.\n * - `\"step\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes at the midpoint of each pair of adjacent x-values.\n * - `\"step-before\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes before the x-value.\n * - `\"step-after\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes after the x-value.\n * - `\"basis\"`: a B-spline, with control point duplication on the ends.\n * - `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n * - `\"basis-closed\"`: a closed B-spline, as in a loop.\n * - `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n * - `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n * - `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n * - `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n * - `\"monotone\"`: cubic interpolation that preserves monotonicity in y.\n */\n interpolate?: Interpolate;\n\n /**\n * The tension parameter for the interpolation type of the error band.\n *\n * @minimum 0\n * @maximum 1\n */\n tension?: number;\n}\n\nexport type ErrorBandDef = GenericCompositeMarkDef<ErrorBand> &\n ErrorBandConfig & {\n /**\n * Orientation of the error band. This is normally automatically determined, but can be specified when the orientation is ambiguous and cannot be automatically determined.\n */\n orient?: Orientation;\n };\n\nexport interface ErrorBandConfigMixins {\n /**\n * ErrorBand Config\n */\n errorband?: ErrorBandConfig;\n}\n\nexport const errorBandNormalizer = new CompositeMarkNormalizer(ERRORBAND, normalizeErrorBand);\n\nexport function normalizeErrorBand(\n spec: GenericUnitSpec<Encoding<string>, ErrorBand | ErrorBandDef>,\n {config}: NormalizerParams\n): NormalizedLayerSpec {\n // Need to initEncoding first so we can infer type\n spec = {\n ...spec,\n encoding: normalizeEncoding(spec.encoding, config)\n };\n\n const {\n transform,\n continuousAxisChannelDef,\n continuousAxis,\n encodingWithoutContinuousAxis,\n markDef,\n outerSpec,\n tooltipEncoding\n } = errorBarParams(spec, ERRORBAND, config);\n const errorBandDef: ErrorBandDef = markDef;\n\n const makeErrorBandPart = makeCompositeAggregatePartFactory<ErrorBandPartsMixins>(\n errorBandDef,\n continuousAxis,\n continuousAxisChannelDef,\n encodingWithoutContinuousAxis,\n config.errorband\n );\n\n const is2D = spec.encoding.x !== undefined && spec.encoding.y !== undefined;\n\n let bandMark: MarkDef = {type: is2D ? 'area' : 'rect'};\n let bordersMark: MarkDef = {type: is2D ? 'line' : 'rule'};\n const interpolate = {\n ...(errorBandDef.interpolate ? {interpolate: errorBandDef.interpolate} : {}),\n ...(errorBandDef.tension && errorBandDef.interpolate ? {tension: errorBandDef.tension} : {})\n };\n\n if (is2D) {\n bandMark = {\n ...bandMark,\n ...interpolate,\n ariaRoleDescription: 'errorband'\n };\n bordersMark = {\n ...bordersMark,\n ...interpolate,\n aria: false\n };\n } else if (errorBandDef.interpolate) {\n log.warn(log.message.errorBand1DNotSupport('interpolate'));\n } else if (errorBandDef.tension) {\n log.warn(log.message.errorBand1DNotSupport('tension'));\n }\n\n return {\n ...outerSpec,\n transform,\n layer: [\n ...makeErrorBandPart({\n partName: 'band',\n mark: bandMark,\n positionPrefix: 'lower',\n endPositionPrefix: 'upper',\n extraEncoding: tooltipEncoding\n }),\n ...makeErrorBandPart({\n partName: 'borders',\n mark: bordersMark,\n positionPrefix: 'lower',\n\n extraEncoding: tooltipEncoding\n }),\n ...makeErrorBandPart({\n partName: 'borders',\n mark: bordersMark,\n positionPrefix: 'upper',\n extraEncoding: tooltipEncoding\n })\n ]\n };\n}\n", "import {Field} from '../channeldef';\nimport {Encoding} from '../encoding';\nimport {NormalizerParams} from '../normalize';\nimport {GenericUnitSpec, NormalizedLayerSpec} from '../spec';\nimport {EncodingFacetMapping} from '../spec/facet';\nimport {NormalizedUnitSpec} from '../spec/unit';\nimport {keys} from '../util';\nimport {CompositeMarkNormalizer} from './base';\nimport {BOXPLOT, BoxPlot, BoxPlotConfigMixins, BoxPlotDef, BOXPLOT_PARTS, normalizeBoxPlot} from './boxplot';\nimport {\n ERRORBAND,\n ErrorBand,\n ErrorBandConfigMixins,\n ErrorBandDef,\n ERRORBAND_PARTS,\n normalizeErrorBand\n} from './errorband';\nimport {\n ERRORBAR,\n ErrorBar,\n ErrorBarConfigMixins,\n ErrorBarDef,\n ERRORBAR_PARTS,\n ErrorExtraEncoding,\n normalizeErrorBar\n} from './errorbar';\n\nexport type {BoxPlotConfig} from './boxplot';\nexport type {ErrorBandConfigMixins} from './errorband';\nexport type {ErrorBarConfigMixins} from './errorbar';\n\nexport type CompositeMarkNormalizerRun = (\n spec: GenericUnitSpec<any, any>,\n params: NormalizerParams\n) => NormalizedLayerSpec | NormalizedUnitSpec;\n\n/**\n * Registry index for all composite mark's normalizer\n */\nconst compositeMarkRegistry: {\n [mark: string]: {\n normalizer: CompositeMarkNormalizer<any>;\n parts: readonly string[];\n };\n} = {};\n\nexport function add(mark: string, run: CompositeMarkNormalizerRun, parts: readonly string[]) {\n const normalizer = new CompositeMarkNormalizer(mark, run);\n compositeMarkRegistry[mark] = {normalizer, parts};\n}\n\nexport function remove(mark: string) {\n delete compositeMarkRegistry[mark];\n}\n\nexport type CompositeEncoding<F extends Field> = Encoding<F> & ErrorExtraEncoding<F>;\n\nexport type PartialIndex<T extends Encoding<any>> = {\n [t in keyof T]?: Partial<T[t]>;\n};\n\nexport type SharedCompositeEncoding<F extends Field> = PartialIndex<\n Omit<CompositeEncoding<F>, 'detail' | 'order' | 'tooltip'> // need to omit and cherry pick detail / order / tooltip since they allow array\n> &\n Pick<Encoding<F>, 'detail' | 'order' | 'tooltip'>;\n\nexport type FacetedCompositeEncoding<F extends Field> = Encoding<F> & ErrorExtraEncoding<F> & EncodingFacetMapping<F>;\n\nexport type CompositeMark = BoxPlot | ErrorBar | ErrorBand;\n\nexport function getAllCompositeMarks() {\n return keys(compositeMarkRegistry);\n}\n\nexport type CompositeMarkDef = BoxPlotDef | ErrorBarDef | ErrorBandDef;\n\nexport type CompositeAggregate = BoxPlot | ErrorBar | ErrorBand;\n\nexport interface CompositeMarkConfigMixins extends BoxPlotConfigMixins, ErrorBarConfigMixins, ErrorBandConfigMixins {}\n\nadd(BOXPLOT, normalizeBoxPlot, BOXPLOT_PARTS);\nadd(ERRORBAR, normalizeErrorBar, ERRORBAR_PARTS);\nadd(ERRORBAND, normalizeErrorBand, ERRORBAND_PARTS);\n", "import type {SignalRef, Text} from 'vega';\nimport {ConditionValueDefMixins, FormatMixins, ValueDef} from './channeldef';\nimport {LegendConfig} from './legend';\nimport {VgEncodeChannel} from './vega.schema';\n\nexport interface TitleMixins {\n /**\n * A title for the field. If `null`, the title will be removed.\n *\n * __Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n *\n * __Notes__:\n *\n * 1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n *\n * 2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.\n */\n title?: Text | null | SignalRef;\n}\n\nexport interface Guide extends TitleMixins, FormatMixins {}\n\nexport interface VlOnlyGuideConfig {\n /**\n * Set to null to disable title for the axis, legend, or header.\n */\n title?: null;\n}\n\nexport type GuideEncodingConditionalValueDef = ValueDef & ConditionValueDefMixins;\n\nexport type GuideEncodingEntry = Partial<Record<VgEncodeChannel, GuideEncodingConditionalValueDef>>;\n\nexport const VL_ONLY_LEGEND_CONFIG: (keyof LegendConfig<any>)[] = [\n 'gradientHorizontalMaxLength',\n 'gradientHorizontalMinLength',\n 'gradientVerticalMaxLength',\n 'gradientVerticalMinLength',\n 'unselectedOpacity'\n];\n", "import type {\n Align,\n Color,\n FontStyle,\n FontWeight,\n Orient,\n SignalRef,\n TextBaseline,\n TitleAnchor,\n TitleConfig\n} from 'vega';\nimport {FormatMixins} from './channeldef';\nimport {ExprRef} from './expr';\nimport {Guide, VlOnlyGuideConfig} from './guide';\nimport {Flag, keys} from './util';\n\nexport const HEADER_TITLE_PROPERTIES_MAP: Partial<Record<keyof CoreHeader<any>, keyof TitleConfig>> = {\n titleAlign: 'align',\n titleAnchor: 'anchor',\n titleAngle: 'angle',\n titleBaseline: 'baseline',\n titleColor: 'color',\n titleFont: 'font',\n titleFontSize: 'fontSize',\n titleFontStyle: 'fontStyle',\n titleFontWeight: 'fontWeight',\n titleLimit: 'limit',\n titleLineHeight: 'lineHeight',\n titleOrient: 'orient',\n titlePadding: 'offset'\n};\n\nexport const HEADER_LABEL_PROPERTIES_MAP: Partial<Record<keyof CoreHeader<any>, keyof TitleConfig>> = {\n labelAlign: 'align',\n labelAnchor: 'anchor',\n labelAngle: 'angle',\n labelBaseline: 'baseline',\n labelColor: 'color',\n labelFont: 'font',\n labelFontSize: 'fontSize',\n labelFontStyle: 'fontStyle',\n labelFontWeight: 'fontWeight',\n labelLimit: 'limit',\n labelLineHeight: 'lineHeight',\n labelOrient: 'orient',\n labelPadding: 'offset'\n};\n\nexport const HEADER_TITLE_PROPERTIES = keys(HEADER_TITLE_PROPERTIES_MAP);\n\nexport const HEADER_LABEL_PROPERTIES = keys(HEADER_LABEL_PROPERTIES_MAP);\n\nexport interface CoreHeader<ES extends ExprRef | SignalRef> extends FormatMixins {\n // ---------- Title ----------\n /**\n * The anchor position for placing the title. One of `\"start\"`, `\"middle\"`, or `\"end\"`. For example, with an orientation of top these anchor positions map to a left-, center-, or right-aligned title.\n */\n titleAnchor?: TitleAnchor; // We don't allow signal for titleAnchor since there is a dependent logic\n\n /**\n * Horizontal text alignment (to the anchor) of header titles.\n */\n titleAlign?: Align | ES;\n\n /**\n * The rotation angle of the header title.\n *\n * __Default value:__ `0`.\n *\n * @minimum -360\n * @maximum 360\n */\n titleAngle?: number; // We don't allow signal for titleAngle since there is a dependent logic\n\n /**\n * The vertical text baseline for the header title. One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, or `\"line-bottom\"`.\n * The `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`, but are calculated relative to the `titleLineHeight` rather than `titleFontSize` alone.\n *\n * __Default value:__ `\"middle\"`\n */\n titleBaseline?: TextBaseline | ES;\n\n /**\n * Color of the header title, can be in hex color code or regular color name.\n */\n titleColor?: Color | ES;\n\n /**\n * Font of the header title. (e.g., `\"Helvetica Neue\"`).\n */\n titleFont?: string | ES;\n\n /**\n * Font size of the header title.\n *\n * @minimum 0\n */\n titleFontSize?: number | ES;\n\n /**\n * The font style of the header title.\n */\n titleFontStyle?: FontStyle | ES;\n\n /**\n * Font weight of the header title.\n * This can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`).\n */\n titleFontWeight?: FontWeight | ES;\n\n /**\n * The maximum length of the header title in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n *\n * __Default value:__ `0`, indicating no limit\n */\n titleLimit?: number | ES;\n\n /**\n * Line height in pixels for multi-line header title text or title text with `\"line-top\"` or `\"line-bottom\"` baseline.\n */\n titleLineHeight?: number | ES;\n\n /**\n * The orientation of the header title. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`.\n */\n titleOrient?: Orient; // no signal ref since there is a dependent logic\n\n /**\n * The padding, in pixel, between facet header's title and the label.\n *\n * __Default value:__ `10`\n */\n titlePadding?: number | ES;\n\n // ---------- Label ----------\n\n /**\n * A boolean flag indicating if labels should be included as part of the header.\n *\n * __Default value:__ `true`.\n */\n labels?: boolean;\n\n /**\n * Horizontal text alignment of header labels. One of `\"left\"`, `\"center\"`, or `\"right\"`.\n */\n labelAlign?: Align | ES;\n\n /**\n * The vertical text baseline for the header labels. One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, or `\"line-bottom\"`.\n * The `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`, but are calculated relative to the `titleLineHeight` rather than `titleFontSize` alone.\n *\n */\n labelBaseline?: TextBaseline | ES;\n\n /**\n * The anchor position for placing the labels. One of `\"start\"`, `\"middle\"`, or `\"end\"`. For example, with a label orientation of top these anchor positions map to a left-, center-, or right-aligned label.\n */\n labelAnchor?: TitleAnchor;\n\n /**\n * [Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels.\n *\n * __Note:__ The label text and value can be assessed via the `label` and `value` properties of the header's backing `datum` object.\n */\n labelExpr?: string;\n\n /**\n * The rotation angle of the header labels.\n *\n * __Default value:__ `0` for column header, `-90` for row header.\n *\n * @minimum -360\n * @maximum 360\n */\n labelAngle?: number; // no signal ref since there is a dependent logic\n\n /**\n * The color of the header label, can be in hex color code or regular color name.\n */\n labelColor?: Color | ES;\n\n /**\n * The font of the header label.\n */\n labelFont?: string | ES;\n\n /**\n * The font size of the header label, in pixels.\n *\n * @minimum 0\n */\n labelFontSize?: number | ES;\n\n /**\n * The font style of the header label.\n */\n labelFontStyle?: FontStyle | ES;\n\n /**\n * The font weight of the header label.\n */\n labelFontWeight?: FontWeight | ES;\n\n /**\n * The maximum length of the header label in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n *\n * __Default value:__ `0`, indicating no limit\n */\n labelLimit?: number | ES;\n\n /**\n * Line height in pixels for multi-line header labels or title text with `\"line-top\"` or `\"line-bottom\"` baseline.\n */\n labelLineHeight?: number | ES;\n\n /**\n * The orientation of the header label. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`.\n */\n labelOrient?: Orient; // no signal ref since there is a dependent logic\n\n /**\n * The padding, in pixel, between facet header's label and the plot.\n *\n * __Default value:__ `10`\n */\n labelPadding?: number | ES;\n\n /**\n * Shortcut for setting both labelOrient and titleOrient.\n */\n orient?: Orient; // no signal ref since there is a dependent logic\n}\n\nexport interface HeaderConfig<ES extends ExprRef | SignalRef> extends CoreHeader<ES>, VlOnlyGuideConfig {}\n\n/**\n * Headers of row / column channels for faceted plots.\n */\nexport interface Header<ES extends ExprRef | SignalRef> extends CoreHeader<ES>, Guide {}\n\nexport interface HeaderConfigMixins<ES extends ExprRef | SignalRef> {\n /**\n * Header configuration, which determines default properties for all [headers](https://vega.github.io/vega-lite/docs/header.html).\n *\n * For a full list of header configuration options, please see the [corresponding section of in the header documentation](https://vega.github.io/vega-lite/docs/header.html#config).\n */\n header?: HeaderConfig<ES>;\n\n /**\n * Header configuration, which determines default properties for row [headers](https://vega.github.io/vega-lite/docs/header.html).\n *\n * For a full list of header configuration options, please see the [corresponding section of in the header documentation](https://vega.github.io/vega-lite/docs/header.html#config).\n */\n headerRow?: HeaderConfig<ES>;\n\n /**\n * Header configuration, which determines default properties for column [headers](https://vega.github.io/vega-lite/docs/header.html).\n *\n * For a full list of header configuration options, please see the [corresponding section of in the header documentation](https://vega.github.io/vega-lite/docs/header.html#config).\n */\n headerColumn?: HeaderConfig<ES>;\n\n /**\n * Header configuration, which determines default properties for non-row/column facet [headers](https://vega.github.io/vega-lite/docs/header.html).\n *\n * For a full list of header configuration options, please see the [corresponding section of in the header documentation](https://vega.github.io/vega-lite/docs/header.html#config).\n */\n headerFacet?: HeaderConfig<ES>;\n}\n\nconst HEADER_CONFIGS_INDEX: Flag<keyof HeaderConfigMixins<any>> = {\n header: 1,\n headerRow: 1,\n headerColumn: 1,\n headerFacet: 1\n};\n\nexport const HEADER_CONFIGS = keys(HEADER_CONFIGS_INDEX);\n", "import type {\n BaseLegend,\n LabelOverlap,\n Legend as VgLegend,\n LegendConfig as VgLegendConfig,\n LegendOrient,\n Orientation,\n SignalRef\n} from 'vega';\nimport {DateTime} from './datetime';\nimport {ExprRef} from './expr';\nimport {Guide, GuideEncodingEntry, VlOnlyGuideConfig} from './guide';\nimport {Flag, keys} from './util';\nimport {MapExcludeValueRefAndReplaceSignalWith} from './vega.schema';\n\nexport const LEGEND_SCALE_CHANNELS = [\n 'size',\n 'shape',\n 'fill',\n 'stroke',\n 'strokeDash',\n 'strokeWidth',\n 'opacity'\n] as const;\n\ntype BaseLegendNoValueRefs<ES extends ExprRef | SignalRef> = MapExcludeValueRefAndReplaceSignalWith<BaseLegend, ES>;\n\nexport type LegendConfig<ES extends ExprRef | SignalRef> = LegendMixins<ES> &\n VlOnlyGuideConfig &\n MapExcludeValueRefAndReplaceSignalWith<VgLegendConfig, ES> & {\n /**\n * Max legend length for a vertical gradient when `config.legend.gradientLength` is undefined.\n *\n * __Default value:__ `200`\n */\n gradientVerticalMaxLength?: number;\n\n /**\n * Min legend length for a vertical gradient when `config.legend.gradientLength` is undefined.\n *\n * __Default value:__ `100`\n */\n gradientVerticalMinLength?: number;\n\n /**\n * Max legend length for a horizontal gradient when `config.legend.gradientLength` is undefined.\n *\n * __Default value:__ `200`\n */\n gradientHorizontalMaxLength?: number;\n\n /**\n * Min legend length for a horizontal gradient when `config.legend.gradientLength` is undefined.\n *\n * __Default value:__ `100`\n */\n gradientHorizontalMinLength?: number;\n\n /**\n * The length in pixels of the primary axis of a color gradient. This value corresponds to the height of a vertical gradient or the width of a horizontal gradient.\n *\n * __Default value:__ `undefined`. If `undefined`, the default gradient will be determined based on the following rules:\n * - For vertical gradients, `clamp(plot_height, gradientVerticalMinLength, gradientVerticalMaxLength)`\n * - For top-`orient`ed or bottom-`orient`ed horizontal gradients, `clamp(plot_width, gradientHorizontalMinLength, gradientHorizontalMaxLength)`\n * - For other horizontal gradients, `gradientHorizontalMinLength`\n *\n * where `clamp(value, min, max)` restricts _value_ to be between the specified _min_ and _max_.\n * @minimum 0\n */\n gradientLength?: number;\n\n /**\n * The opacity of unselected legend entries.\n *\n * __Default value:__ 0.35.\n */\n unselectedOpacity?: number;\n\n /**\n * Disable legend by default\n */\n disable?: boolean;\n };\n\n/**\n * Properties of a legend or boolean flag for determining whether to show it.\n */\nexport interface Legend<ES extends ExprRef | SignalRef>\n extends Omit<BaseLegendNoValueRefs<ES>, 'orient'>,\n LegendMixins<ES>,\n Guide {\n /**\n * Mark definitions for custom legend encoding.\n *\n * @hidden\n */\n encoding?: LegendEncoding;\n\n /**\n * [Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels.\n *\n * __Note:__ The label text and value can be assessed via the `label` and `value` properties of the legend's backing `datum` object.\n */\n labelExpr?: string;\n\n /**\n * The minimum desired step between legend ticks, in terms of scale domain values. For example, a value of `1` indicates that ticks should not be less than 1 unit apart. If `tickMinStep` is specified, the `tickCount` value will be adjusted, if necessary, to enforce the minimum step value.\n *\n * __Default value__: `undefined`\n */\n tickMinStep?: number | ES;\n\n /**\n * Explicitly set the visible legend values.\n */\n values?: number[] | string[] | boolean[] | DateTime[] | ES; // Vega already supports Signal -- we have to re-declare here since VL supports special Date Time object that's not valid in Vega.\n\n /**\n * The type of the legend. Use `\"symbol\"` to create a discrete legend and `\"gradient\"` for a continuous color gradient.\n *\n * __Default value:__ `\"gradient\"` for non-binned quantitative fields and temporal fields; `\"symbol\"` otherwise.\n */\n type?: 'symbol' | 'gradient';\n\n /**\n * A non-negative integer indicating the z-index of the legend.\n * If zindex is 0, legend should be drawn behind all chart elements.\n * To put them in front, use zindex = 1.\n *\n * @TJS-type integer\n * @minimum 0\n */\n zindex?: number;\n}\n\n// Change comments to be Vega-Lite specific\ninterface LegendMixins<ES extends ExprRef | SignalRef> {\n /**\n * The strategy to use for resolving overlap of labels in gradient legends. If `false`, no overlap reduction is attempted. If set to `true` or `\"parity\"`, a strategy of removing every other label is used. If set to `\"greedy\"`, a linear scan of the labels is performed, removing any label that overlaps with the last visible label (this often works better for log-scaled axes).\n *\n * __Default value:__ `\"greedy\"` for `log scales otherwise `true`.\n */\n labelOverlap?: LabelOverlap | ES; // override comment since our default differs from Vega\n\n /**\n * The direction of the legend, one of `\"vertical\"` or `\"horizontal\"`.\n *\n * __Default value:__\n * - For top-/bottom-`orient`ed legends, `\"horizontal\"`\n * - For left-/right-`orient`ed legends, `\"vertical\"`\n * - For top/bottom-left/right-`orient`ed legends, `\"horizontal\"` for gradient legends and `\"vertical\"` for symbol legends.\n */\n direction?: Orientation; // Omit SignalRef\n\n /**\n * The orientation of the legend, which determines how the legend is positioned within the scene. One of `\"left\"`, `\"right\"`, `\"top\"`, `\"bottom\"`, `\"top-left\"`, `\"top-right\"`, `\"bottom-left\"`, `\"bottom-right\"`, `\"none\"`.\n *\n * __Default value:__ `\"right\"`\n */\n orient?: LegendOrient; // Omit SignalRef\n}\n\nexport type LegendInternal = Legend<SignalRef>;\n\nexport interface LegendEncoding {\n /**\n * Custom encoding for the legend container.\n * This can be useful for creating legend with custom x, y position.\n */\n legend?: GuideEncodingEntry;\n\n /**\n * Custom encoding for the legend title text mark.\n */\n title?: GuideEncodingEntry;\n\n /**\n * Custom encoding for legend label text marks.\n */\n labels?: GuideEncodingEntry;\n\n /**\n * Custom encoding for legend symbol marks.\n */\n symbols?: GuideEncodingEntry;\n\n /**\n * Custom encoding for legend gradient filled rect marks.\n */\n gradient?: GuideEncodingEntry;\n}\n\nexport const defaultLegendConfig: LegendConfig<SignalRef> = {\n gradientHorizontalMaxLength: 200,\n gradientHorizontalMinLength: 100,\n gradientVerticalMaxLength: 200,\n gradientVerticalMinLength: 64, // This is Vega's minimum.\n unselectedOpacity: 0.35\n};\n\nexport const COMMON_LEGEND_PROPERTY_INDEX: Flag<keyof (VgLegend | Legend<any>)> = {\n aria: 1,\n clipHeight: 1,\n columnPadding: 1,\n columns: 1,\n cornerRadius: 1,\n description: 1,\n direction: 1,\n fillColor: 1,\n format: 1,\n formatType: 1,\n gradientLength: 1,\n gradientOpacity: 1,\n gradientStrokeColor: 1,\n gradientStrokeWidth: 1,\n gradientThickness: 1,\n gridAlign: 1,\n labelAlign: 1,\n labelBaseline: 1,\n labelColor: 1,\n labelFont: 1,\n labelFontSize: 1,\n labelFontStyle: 1,\n labelFontWeight: 1,\n labelLimit: 1,\n labelOffset: 1,\n labelOpacity: 1,\n labelOverlap: 1,\n labelPadding: 1,\n labelSeparation: 1,\n legendX: 1,\n legendY: 1,\n offset: 1,\n orient: 1,\n padding: 1,\n rowPadding: 1,\n strokeColor: 1,\n symbolDash: 1,\n symbolDashOffset: 1,\n symbolFillColor: 1,\n symbolLimit: 1,\n symbolOffset: 1,\n symbolOpacity: 1,\n symbolSize: 1,\n symbolStrokeColor: 1,\n symbolStrokeWidth: 1,\n symbolType: 1,\n tickCount: 1,\n tickMinStep: 1,\n title: 1,\n titleAlign: 1,\n titleAnchor: 1,\n titleBaseline: 1,\n titleColor: 1,\n titleFont: 1,\n titleFontSize: 1,\n titleFontStyle: 1,\n titleFontWeight: 1,\n titleLimit: 1,\n titleLineHeight: 1,\n titleOpacity: 1,\n titleOrient: 1,\n titlePadding: 1,\n type: 1,\n values: 1,\n zindex: 1\n};\n\nexport const LEGEND_PROPERTIES = keys(COMMON_LEGEND_PROPERTY_INDEX);\n", "import type {Binding, Color, Cursor, Stream, Vector2} from 'vega';\nimport {isObject} from 'vega-util';\nimport {SingleDefUnitChannel} from './channel';\nimport {FieldName, PrimitiveValue} from './channeldef';\nimport {DateTime} from './datetime';\nimport {ParameterName} from './parameter';\nimport {Dict} from './util';\n\nexport const SELECTION_ID = '_vgsid_';\nexport type SelectionType = 'point' | 'interval';\nexport type SelectionResolution = 'global' | 'union' | 'intersect';\n\nexport type SelectionInit = PrimitiveValue | DateTime;\nexport type SelectionInitInterval = Vector2<boolean> | Vector2<number> | Vector2<string> | Vector2<DateTime>;\n\nexport type SelectionInitMapping = Dict<SelectionInit>;\nexport type SelectionInitIntervalMapping = Dict<SelectionInitInterval>;\n\nexport type LegendStreamBinding = {legend: string | Stream};\nexport type LegendBinding = 'legend' | LegendStreamBinding;\n\nexport interface BaseSelectionConfig<T extends SelectionType = SelectionType> {\n /**\n * Determines the default event processing and data query for the selection. Vega-Lite currently supports two selection types:\n *\n * - `\"point\"` -- to select multiple discrete data values; the first value is selected on `click` and additional values toggled on shift-click.\n * - `\"interval\"` -- to select a continuous range of data values on `drag`.\n */\n type: T;\n\n /**\n * Clears the selection, emptying it of all values. This property can be a\n * [Event Stream](https://vega.github.io/vega/docs/event-streams/) or `false` to disable clear.\n *\n * __Default value:__ `dblclick`.\n *\n * __See also:__ [`clear` examples ](https://vega.github.io/vega-lite/docs/selection.html#clear) in the documentation.\n */\n clear?: Stream | string | boolean;\n\n /**\n * A [Vega event stream](https://vega.github.io/vega/docs/event-streams/) (object or selector) that triggers the selection.\n * For interval selections, the event stream must specify a [start and end](https://vega.github.io/vega/docs/event-streams/#between-filters).\n *\n * __See also:__ [`on` examples](https://vega.github.io/vega-lite/docs/selection.html#on) in the documentation.\n */\n on?: Stream | string;\n\n /**\n * With layered and multi-view displays, a strategy that determines how\n * selections' data queries are resolved when applied in a filter transform,\n * conditional encoding rule, or scale domain.\n *\n * One of:\n * - `\"global\"` -- only one brush exists for the entire SPLOM. When the user begins to drag, any previous brushes are cleared, and a new one is constructed.\n * - `\"union\"` -- each cell contains its own brush, and points are highlighted if they lie within _any_ of these individual brushes.\n * - `\"intersect\"` -- each cell contains its own brush, and points are highlighted only if they fall within _all_ of these individual brushes.\n *\n * __Default value:__ `global`.\n *\n * __See also:__ [`resolve` examples](https://vega.github.io/vega-lite/docs/selection.html#resolve) in the documentation.\n */\n resolve?: SelectionResolution;\n\n // TODO(https://github.com/vega/vega-lite/issues/2596).\n // predicate?: string;\n // domain?: SelectionDomain;\n\n /**\n * An array of encoding channels. The corresponding data field values\n * must match for a data tuple to fall within the selection.\n *\n * __See also:__ The [projection with `encodings` and `fields` section](https://vega.github.io/vega-lite/docs/selection.html#project) in the documentation.\n */\n encodings?: SingleDefUnitChannel[];\n\n /**\n * An array of field names whose values must match for a data tuple to\n * fall within the selection.\n *\n * __See also:__ The [projection with `encodings` and `fields` section](https://vega.github.io/vega-lite/docs/selection.html#project) in the documentation.\n */\n fields?: FieldName[];\n}\n\nexport interface PointSelectionConfig extends BaseSelectionConfig<'point'> {\n /**\n * Controls whether data values should be toggled (inserted or removed from a point selection)\n * or only ever inserted into point selections.\n *\n * One of:\n * - `true` -- the default behavior, which corresponds to `\"event.shiftKey\"`. As a result, data values are toggled when the user interacts with the shift-key pressed.\n * - `false` -- disables toggling behaviour; the selection will only ever contain a single data value corresponding to the most recent interaction.\n * - A [Vega expression](https://vega.github.io/vega/docs/expressions/) which is re-evaluated as the user interacts. If the expression evaluates to `true`, the data value is toggled into or out of the point selection. If the expression evaluates to `false`, the point selection is first cleared, and the data value is then inserted. For example, setting the value to the Vega expression `\"true\"` will toggle data values\n * without the user pressing the shift-key.\n *\n * __Default value:__ `true`\n *\n * __See also:__ [`toggle` examples](https://vega.github.io/vega-lite/docs/selection.html#toggle) in the documentation.\n */\n toggle?: string | boolean;\n\n /**\n * When true, an invisible voronoi diagram is computed to accelerate discrete\n * selection. The data value _nearest_ the mouse cursor is added to the selection.\n *\n * __Default value:__ `false`, which means that data values must be interacted with directly (e.g., clicked on) to be added to the selection.\n *\n * __See also:__ [`nearest` examples](https://vega.github.io/vega-lite/docs/selection.html#nearest) documentation.\n */\n nearest?: boolean;\n}\n\n// Similar to BaseMarkConfig but the field documentations are specificly for an interval mark.\nexport interface BrushConfig {\n /**\n * The fill color of the interval mark.\n *\n * __Default value:__ `\"#333333\"`\n *\n */\n fill?: Color;\n\n /**\n * The fill opacity of the interval mark (a value between `0` and `1`).\n *\n * __Default value:__ `0.125`\n */\n fillOpacity?: number;\n\n /**\n * The stroke color of the interval mark.\n *\n * __Default value:__ `\"#ffffff\"`\n */\n stroke?: Color;\n\n /**\n * The stroke opacity of the interval mark (a value between `0` and `1`).\n */\n strokeOpacity?: number;\n\n /**\n * The stroke width of the interval mark.\n */\n strokeWidth?: number;\n\n /**\n * An array of alternating stroke and space lengths, for creating dashed or dotted lines.\n */\n strokeDash?: number[];\n\n /**\n * The offset (in pixels) with which to begin drawing the stroke dash array.\n */\n strokeDashOffset?: number;\n\n /**\n * The mouse cursor used over the interval mark. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used.\n */\n cursor?: Cursor;\n}\n\nexport interface IntervalSelectionConfig extends BaseSelectionConfig<'interval'> {\n /**\n * When truthy, allows a user to interactively move an interval selection\n * back-and-forth. Can be `true`, `false` (to disable panning), or a\n * [Vega event stream definition](https://vega.github.io/vega/docs/event-streams/)\n * which must include a start and end event to trigger continuous panning.\n * Discrete panning (e.g., pressing the left/right arrow keys) will be supported in future versions.\n *\n * __Default value:__ `true`, which corresponds to `[pointerdown, window:pointerup] > window:pointermove!`.\n * This default allows users to clicks and drags within an interval selection to reposition it.\n *\n * __See also:__ [`translate` examples](https://vega.github.io/vega-lite/docs/selection.html#translate) in the documentation.\n */\n translate?: string | boolean;\n\n /**\n * When truthy, allows a user to interactively resize an interval selection.\n * Can be `true`, `false` (to disable zooming), or a [Vega event stream\n * definition](https://vega.github.io/vega/docs/event-streams/). Currently,\n * only `wheel` events are supported,\n * but custom event streams can still be used to specify filters, debouncing, and throttling.\n * Future versions will expand the set of events that can trigger this transformation.\n *\n * __Default value:__ `true`, which corresponds to `wheel!`. This default allows users to use the mouse wheel to resize an interval selection.\n *\n * __See also:__ [`zoom` examples](https://vega.github.io/vega-lite/docs/selection.html#zoom) in the documentation.\n */\n zoom?: string | boolean;\n\n /**\n * An interval selection also adds a rectangle mark to depict the\n * extents of the interval. The `mark` property can be used to customize the\n * appearance of the mark.\n *\n * __See also:__ [`mark` examples](https://vega.github.io/vega-lite/docs/selection.html#mark) in the documentation.\n */\n mark?: BrushConfig;\n}\n\nexport interface SelectionParameter<T extends SelectionType = SelectionType> {\n /**\n * Required. A unique name for the selection parameter. Selection names should be valid JavaScript identifiers: they should contain only alphanumeric characters (or \"$\", or \"_\") and may not start with a digit. Reserved keywords that may not be used as parameter names are \"datum\", \"event\", \"item\", and \"parent\".\n */\n name: ParameterName;\n\n /**\n * Determines the default event processing and data query for the selection. Vega-Lite currently supports two selection types:\n *\n * - `\"point\"` -- to select multiple discrete data values; the first value is selected on `click` and additional values toggled on shift-click.\n * - `\"interval\"` -- to select a continuous range of data values on `drag`.\n */\n select: T | (T extends 'point' ? PointSelectionConfig : T extends 'interval' ? IntervalSelectionConfig : never);\n\n /**\n * Initialize the selection with a mapping between [projected channels or field names](https://vega.github.io/vega-lite/docs/selection.html#project) and initial values.\n *\n * __See also:__ [`init`](https://vega.github.io/vega-lite/docs/value.html) documentation.\n */\n value?: T extends 'point'\n ? SelectionInit | SelectionInitMapping[]\n : T extends 'interval'\n ? SelectionInitIntervalMapping\n : never;\n\n /**\n * When set, a selection is populated by input elements (also known as dynamic query widgets)\n * or by interacting with the corresponding legend. Direct manipulation interaction is disabled by default;\n * to re-enable it, set the selection's [`on`](https://vega.github.io/vega-lite/docs/selection.html#common-selection-properties) property.\n *\n * Legend bindings are restricted to selections that only specify a single field or encoding.\n *\n * Query widget binding takes the form of Vega's [input element binding definition](https://vega.github.io/vega/docs/signals/#bind)\n * or can be a mapping between projected field/encodings and binding definitions.\n *\n * __See also:__ [`bind`](https://vega.github.io/vega-lite/docs/bind.html) documentation.\n */\n bind?: T extends 'point'\n ? Binding | Record<string, Binding> | LegendBinding\n : T extends 'interval'\n ? 'scales'\n : never;\n}\n\nexport type TopLevelSelectionParameter = SelectionParameter & {\n /**\n * By default, top-level selections are applied to every view in the visualization.\n * If this property is specified, selections will only be applied to views with the given names.\n */\n views?: string[];\n};\n\nexport type ParameterExtent =\n | {\n /**\n * The name of a parameter.\n */\n param: ParameterName;\n\n /**\n * If a selection parameter is specified, the field name to extract selected values for\n * when the selection is [projected](https://vega.github.io/vega-lite/docs/selection.html#project) over multiple fields or encodings.\n */\n field?: FieldName;\n }\n | {\n /**\n * The name of a parameter.\n */\n param: ParameterName;\n\n /**\n * If a selection parameter is specified, the encoding channel to extract selected values for\n * when a selection is [projected](https://vega.github.io/vega-lite/docs/selection.html#project) over multiple fields or encodings.\n */\n encoding?: SingleDefUnitChannel;\n };\n\nexport type PointSelectionConfigWithoutType = Omit<PointSelectionConfig, 'type'>;\n\nexport type IntervalSelectionConfigWithoutType = Omit<IntervalSelectionConfig, 'type'>;\n\nexport interface SelectionConfig {\n /**\n * The default definition for a [`point`](https://vega.github.io/vega-lite/docs/parameter.html#select) selection. All properties and transformations\n * for a point selection definition (except `type`) may be specified here.\n *\n * For instance, setting `point` to `{\"on\": \"dblclick\"}` populates point selections on double-click by default.\n */\n point?: PointSelectionConfigWithoutType;\n\n /**\n * The default definition for an [`interval`](https://vega.github.io/vega-lite/docs/parameter.html#select) selection. All properties and transformations\n * for an interval selection definition (except `type`) may be specified here.\n *\n * For instance, setting `interval` to `{\"translate\": false}` disables the ability to move\n * interval selections by default.\n */\n interval?: IntervalSelectionConfigWithoutType;\n}\n\nexport const defaultConfig: SelectionConfig = {\n point: {\n on: 'click',\n fields: [SELECTION_ID],\n toggle: 'event.shiftKey',\n resolve: 'global',\n clear: 'dblclick'\n },\n interval: {\n on: '[pointerdown, window:pointerup] > window:pointermove!',\n encodings: ['x', 'y'],\n translate: '[pointerdown, window:pointerup] > window:pointermove!',\n zoom: 'wheel!',\n mark: {fill: '#333', fillOpacity: 0.125, stroke: 'white'},\n resolve: 'global',\n clear: 'dblclick'\n }\n};\n\nexport function isLegendBinding(bind: any): bind is LegendBinding {\n return bind === 'legend' || !!bind?.legend;\n}\n\nexport function isLegendStreamBinding(bind: any): bind is LegendStreamBinding {\n return isLegendBinding(bind) && isObject(bind);\n}\n\nexport function isSelectionParameter(param: any): param is SelectionParameter {\n return !!param?.['select'];\n}\n", "import type {Binding, Expr, InitSignal, NewSignal} from 'vega';\nimport {isSelectionParameter, TopLevelSelectionParameter} from './selection';\n\nexport type ParameterName = string;\n\nexport interface VariableParameter {\n /**\n * A unique name for the variable parameter. Parameter names should be valid JavaScript identifiers: they should contain only alphanumeric characters (or \"$\", or \"_\") and may not start with a digit. Reserved keywords that may not be used as parameter names are \"datum\", \"event\", \"item\", and \"parent\".\n */\n name: ParameterName;\n\n /**\n * The [initial value](http://vega.github.io/vega-lite/docs/value.html) of the parameter.\n *\n * __Default value:__ `undefined`\n */\n value?: any;\n\n /**\n * An expression for the value of the parameter. This expression may include other parameters, in which case the parameter will automatically update in response to upstream parameter changes.\n */\n expr?: Expr;\n\n /**\n * Binds the parameter to an external input element such as a slider, selection list or radio button group.\n */\n bind?: Binding;\n\n /**\n *A boolean flag (default `true`) indicating if the update expression should be automatically re-evaluated when any upstream signal dependencies update. If `false`, the update expression will not register any dependencies on other signals, even for initialization.\n *\n * __Default value:__ `true`\n */\n react?: boolean;\n}\n\nexport function assembleParameterSignals(params: (VariableParameter | TopLevelSelectionParameter)[]) {\n const signals: (NewSignal | InitSignal)[] = [];\n for (const param of params || []) {\n // Selection parameters are handled separately via assembleSelectionTopLevelSignals\n // and assembleSignals methods registered on the Model.\n if (isSelectionParameter(param)) continue;\n const {expr, bind, ...rest} = param;\n\n if (bind && expr) {\n // Vega's InitSignal -- apply expr to \"init\"\n const signal: InitSignal = {\n ...rest,\n bind,\n init: expr\n };\n signals.push(signal);\n } else {\n const signal: NewSignal = {\n ...rest,\n ...(expr ? {update: expr} : {}),\n ...(bind ? {bind} : {})\n };\n signals.push(signal);\n }\n }\n return signals;\n}\n", "import {GenericSpec, NormalizedSpec} from '.';\nimport {hasProperty} from '../util';\nimport {BaseSpec, BoundsMixins, GenericCompositionLayoutWithColumns, ResolveMixins} from './base';\n\n/**\n * Base layout mixins for V/HConcatSpec, which should not have RowCol<T> generic fo its property.\n */\nexport interface OneDirectionalConcatLayout extends BoundsMixins, ResolveMixins {\n /**\n * Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n *\n * __Default value:__ `false`\n */\n center?: boolean;\n\n /**\n * The spacing in pixels between sub-views of the concat operator.\n *\n * __Default value__: `10`\n */\n spacing?: number;\n}\n\n/**\n * Base interface for a generalized concatenation specification.\n */\nexport interface GenericConcatSpec<S extends GenericSpec<any, any, any, any>>\n extends BaseSpec,\n GenericCompositionLayoutWithColumns,\n ResolveMixins {\n /**\n * A list of views to be concatenated.\n */\n concat: S[];\n}\n\n/**\n * Base interface for a vertical concatenation specification.\n */\nexport interface GenericVConcatSpec<S extends GenericSpec<any, any, any, any>>\n extends BaseSpec,\n OneDirectionalConcatLayout {\n /**\n * A list of views to be concatenated and put into a column.\n */\n vconcat: S[];\n}\n\n/**\n * Base interface for a horizontal concatenation specification.\n */\nexport interface GenericHConcatSpec<S extends GenericSpec<any, any, any, any>>\n extends BaseSpec,\n OneDirectionalConcatLayout {\n /**\n * A list of views to be concatenated and put into a row.\n */\n hconcat: S[];\n}\n\n/** A concat spec without any shortcut/expansion syntax */\nexport type NormalizedConcatSpec =\n | GenericConcatSpec<NormalizedSpec>\n | GenericVConcatSpec<NormalizedSpec>\n | GenericHConcatSpec<NormalizedSpec>;\n\nexport function isAnyConcatSpec(spec: BaseSpec): spec is GenericVConcatSpec<any> | GenericHConcatSpec<any> {\n return isVConcatSpec(spec) || isHConcatSpec(spec) || isConcatSpec(spec);\n}\n\nexport function isConcatSpec(spec: BaseSpec): spec is GenericConcatSpec<any> {\n return hasProperty(spec, 'concat');\n}\n\nexport function isVConcatSpec(spec: BaseSpec): spec is GenericVConcatSpec<any> {\n return hasProperty(spec, 'vconcat');\n}\n\nexport function isHConcatSpec(spec: BaseSpec): spec is GenericHConcatSpec<any> {\n return hasProperty(spec, 'hconcat');\n}\n", "import {Color, Cursor, SignalRef, Text} from 'vega';\nimport {isNumber} from 'vega-util';\nimport {NormalizedSpec} from '.';\nimport {Data} from '../data';\nimport {ExprRef} from '../expr';\nimport {MarkConfig} from '../mark';\nimport {Resolve} from '../resolve';\nimport {TitleParams} from '../title';\nimport {Transform} from '../transform';\nimport {Flag, hasProperty, keys} from '../util';\nimport {LayoutAlign, RowCol} from '../vega.schema';\nimport {isConcatSpec, isVConcatSpec} from './concat';\nimport {isFacetMapping, isFacetSpec} from './facet';\n\nexport type {TopLevel} from './toplevel';\n\n/**\n * Common properties for all types of specification\n */\nexport interface BaseSpec {\n /**\n * Title for the plot.\n */\n title?: Text | TitleParams<ExprRef | SignalRef>;\n\n /**\n * Name of the visualization for later reference.\n */\n name?: string;\n\n /**\n * Description of this mark for commenting purpose.\n */\n description?: string;\n\n /**\n * An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent.\n */\n data?: Data | null;\n\n /**\n * An array of data transformations such as filter and new field calculation.\n */\n transform?: Transform[];\n}\n\nexport interface DataMixins {\n /**\n * An object describing the data source.\n */\n data: Data;\n}\n\nexport type StepFor = 'position' | 'offset';\n\nexport interface Step {\n /**\n * The size (width/height) per discrete step.\n */\n step: number;\n\n /**\n * Whether to apply the step to position scale or offset scale when there are both `x` and `xOffset` or both `y` and `yOffset` encodings.\n */\n for?: StepFor;\n}\n\nexport function getStepFor({step, offsetIsDiscrete}: {step: Step; offsetIsDiscrete: boolean}): StepFor {\n if (offsetIsDiscrete) {\n return step.for ?? 'offset';\n } else {\n return 'position';\n }\n}\n\nexport function isStep(size: number | Step | 'container' | 'merged'): size is Step {\n return hasProperty(size, 'step');\n}\n\n// TODO(https://github.com/vega/vega-lite/issues/2503): Make this generic so we can support some form of top-down sizing.\n/**\n * Common properties for specifying width and height of unit and layer specifications.\n */\nexport interface LayoutSizeMixins {\n /**\n * The width of a visualization.\n *\n * - For a plot with a continuous x-field, width should be a number.\n * - For a plot with either a discrete x-field or no x-field, width can be either a number indicating a fixed width or an object in the form of `{step: number}` defining the width per discrete step. (No x-field is equivalent to having one discrete step.)\n * - To enable responsive sizing on width, it should be set to `\"container\"`.\n *\n * __Default value:__\n * Based on `config.view.continuousWidth` for a plot with a continuous x-field and `config.view.discreteWidth` otherwise.\n *\n * __Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the width of a single view and the `\"container\"` option cannot be used.\n *\n * __See also:__ [`width`](https://vega.github.io/vega-lite/docs/size.html) documentation.\n */\n width?: number | 'container' | Step; // Vega also supports SignalRef for width and height. However, we need to know if width is a step or not in VL and it's very difficult to check this at runtime, so we intentionally do not support SignalRef here.\n\n /**\n * The height of a visualization.\n *\n * - For a plot with a continuous y-field, height should be a number.\n * - For a plot with either a discrete y-field or no y-field, height can be either a number indicating a fixed height or an object in the form of `{step: number}` defining the height per discrete step. (No y-field is equivalent to having one discrete step.)\n * - To enable responsive sizing on height, it should be set to `\"container\"`.\n *\n * __Default value:__ Based on `config.view.continuousHeight` for a plot with a continuous y-field and `config.view.discreteHeight` otherwise.\n *\n * __Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the height of a single view and the `\"container\"` option cannot be used.\n *\n * __See also:__ [`height`](https://vega.github.io/vega-lite/docs/size.html) documentation.\n */\n height?: number | 'container' | Step; // Vega also supports SignalRef for width and height. However, we need to know if width is a step or not in VL and it's very difficult to check this at runtime, so we intentionally do not support SignalRef here.\n}\n\nexport function isFrameMixins(o: any): o is FrameMixins<any> {\n return hasProperty(o, 'view') || hasProperty(o, 'width') || hasProperty(o, 'height');\n}\n\nexport interface FrameMixins<ES extends ExprRef | SignalRef = ExprRef | SignalRef> extends LayoutSizeMixins {\n /**\n * An object defining the view background's fill and stroke.\n *\n * __Default value:__ none (transparent)\n */\n view?: ViewBackground<ES>;\n}\n\nexport interface ResolveMixins {\n /**\n * Scale, axis, and legend resolutions for view composition specifications.\n */\n resolve?: Resolve;\n}\n\nexport interface BaseViewBackground<ES extends ExprRef | SignalRef>\n extends Partial<\n Pick<\n MarkConfig<ES>,\n | 'cornerRadius'\n | 'fillOpacity'\n | 'opacity'\n | 'strokeCap'\n | 'strokeDash'\n | 'strokeDashOffset'\n | 'strokeJoin'\n | 'strokeMiterLimit'\n | 'strokeOpacity'\n | 'strokeWidth'\n >\n > {\n // Override documentations for fill, stroke, and cursor\n /**\n * The fill color.\n *\n * __Default value:__ `undefined`\n */\n fill?: Color | null | ES;\n\n /**\n * The stroke color.\n *\n * __Default value:__ `\"#ddd\"`\n */\n stroke?: Color | null | ES;\n\n /**\n * The mouse cursor used over the view. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used.\n */\n cursor?: Cursor;\n}\n\nexport interface ViewBackground<ES extends ExprRef | SignalRef> extends BaseViewBackground<ES> {\n /**\n * A string or array of strings indicating the name of custom styles to apply to the view background. A style is a named collection of mark property defaults defined within the [style configuration](https://vega.github.io/vega-lite/docs/mark.html#style-config). If style is an array, later styles will override earlier styles.\n *\n * __Default value:__ `\"cell\"`\n * __Note:__ Any specified view background properties will augment the default style.\n */\n style?: string | string[];\n}\n\nexport interface BoundsMixins {\n /**\n * The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n *\n * - If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n * - If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n *\n * __Default value:__ `\"full\"`\n */\n\n bounds?: 'full' | 'flush';\n}\n\n/**\n * Base layout for FacetSpec and RepeatSpec.\n * This is named \"GenericComposition\" layout as ConcatLayout is a GenericCompositionLayout too\n * (but _not_ vice versa).\n */\nexport interface GenericCompositionLayout extends BoundsMixins {\n /**\n * The alignment to apply to grid rows and columns.\n * The supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n *\n * - For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n * - For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n * - For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n *\n * Alternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n *\n * __Default value:__ `\"all\"`.\n */\n align?: LayoutAlign | RowCol<LayoutAlign>;\n\n /**\n * Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n *\n * An object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n *\n * __Default value:__ `false`\n */\n center?: boolean | RowCol<boolean>;\n\n /**\n * The spacing in pixels between sub-views of the composition operator.\n * An object of the form `{\"row\": number, \"column\": number}` can be used to set\n * different spacing values for rows and columns.\n *\n * __Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)\n */\n spacing?: number | RowCol<number>;\n}\n\nexport const DEFAULT_SPACING = 20;\n\nexport interface ColumnMixins {\n /**\n * The number of columns to include in the view composition layout.\n *\n * __Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to\n * `hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n *\n * __Note__:\n *\n * 1) This property is only for:\n * - the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n * - the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n *\n * 2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).\n */\n columns?: number;\n}\n\nexport type GenericCompositionLayoutWithColumns = GenericCompositionLayout & ColumnMixins;\n\nexport type CompositionConfig = ColumnMixins & {\n /**\n * The default spacing in pixels between composed sub-views.\n *\n * __Default value__: `20`\n */\n spacing?: number;\n};\n\nexport interface CompositionConfigMixins {\n /** Default configuration for the `facet` view composition operator */\n facet?: CompositionConfig;\n\n /** Default configuration for all concatenation and repeat view composition operators (`concat`, `hconcat`, `vconcat`, and `repeat`) */\n concat?: CompositionConfig;\n}\n\nconst COMPOSITION_LAYOUT_INDEX: Flag<keyof GenericCompositionLayoutWithColumns> = {\n align: 1,\n bounds: 1,\n center: 1,\n columns: 1,\n spacing: 1\n};\n\nconst COMPOSITION_LAYOUT_PROPERTIES = keys(COMPOSITION_LAYOUT_INDEX);\n\nexport type SpecType = 'unit' | 'facet' | 'layer' | 'concat';\n\nexport function extractCompositionLayout(\n spec: NormalizedSpec,\n specType: keyof CompositionConfigMixins,\n config: CompositionConfigMixins\n): GenericCompositionLayoutWithColumns {\n const compositionConfig = config[specType];\n const layout: GenericCompositionLayoutWithColumns = {};\n\n // Apply config first\n const {spacing: spacingConfig, columns} = compositionConfig;\n if (spacingConfig !== undefined) {\n layout.spacing = spacingConfig;\n }\n\n if (columns !== undefined) {\n if ((isFacetSpec(spec) && !isFacetMapping(spec.facet)) || isConcatSpec(spec)) {\n layout.columns = columns;\n }\n }\n\n if (isVConcatSpec(spec)) {\n layout.columns = 1;\n }\n\n // Then copy properties from the spec\n for (const prop of COMPOSITION_LAYOUT_PROPERTIES) {\n if ((spec as any)[prop] !== undefined) {\n if (prop === 'spacing') {\n const spacing: number | RowCol<number> = (spec as any)[prop];\n\n layout[prop] = isNumber(spacing)\n ? spacing\n : {\n row: spacing.row ?? spacingConfig,\n column: spacing.column ?? spacingConfig\n };\n } else {\n (layout[prop] as any) = (spec as any)[prop];\n }\n }\n }\n\n return layout;\n}\n", "import type {Color, InitSignal, Locale, NewSignal, RangeConfig, RangeScheme, SignalRef} from 'vega';\nimport {isObject, mergeConfig, writeConfig} from 'vega-util';\nimport {Axis, AxisConfig, AxisConfigMixins, AXIS_CONFIGS, isConditionalAxisValue} from './axis';\nimport {signalOrValueRefWithCondition, signalRefOrValue} from './compile/common';\nimport {CompositeMarkConfigMixins, getAllCompositeMarks} from './compositemark';\nimport {ExprRef, replaceExprRef} from './expr';\nimport {VL_ONLY_LEGEND_CONFIG} from './guide';\nimport {HeaderConfigMixins, HEADER_CONFIGS} from './header';\nimport {defaultLegendConfig, LegendConfig} from './legend';\nimport * as mark from './mark';\nimport {\n AnyMarkConfig,\n Mark,\n MarkConfig,\n MarkConfigMixins,\n MARK_CONFIGS,\n PRIMITIVE_MARKS,\n VL_ONLY_MARK_CONFIG_PROPERTIES,\n VL_ONLY_MARK_SPECIFIC_CONFIG_PROPERTY_INDEX\n} from './mark';\nimport {assembleParameterSignals} from './parameter';\nimport {ProjectionConfig} from './projection';\nimport {defaultScaleConfig, ScaleConfig} from './scale';\nimport {defaultConfig as defaultSelectionConfig, SelectionConfig} from './selection';\nimport {BaseViewBackground, CompositionConfigMixins, DEFAULT_SPACING, isStep} from './spec/base';\nimport {TopLevelProperties} from './spec/toplevel';\nimport {extractTitleConfig, TitleConfig} from './title';\nimport {duplicate, getFirstDefined, hasProperty, isEmpty, keys, omit} from './util';\n\nexport interface ViewConfig<ES extends ExprRef | SignalRef> extends BaseViewBackground<ES> {\n /**\n * The default width when the plot has a continuous field for x or longitude, or has arc marks.\n *\n * __Default value:__ `200`\n */\n continuousWidth?: number;\n\n /**\n * The default width when the plot has non-arc marks and either a discrete x-field or no x-field.\n * The width can be either a number indicating a fixed width or an object in the form of `{step: number}` defining the width per discrete step.\n *\n * __Default value:__ a step size based on `config.view.step`.\n */\n discreteWidth?: number | {step: number};\n /**\n * The default height when the plot has a continuous y-field for x or latitude, or has arc marks.\n *\n * __Default value:__ `200`\n */\n continuousHeight?: number;\n\n /**\n * The default height when the plot has non arc marks and either a discrete y-field or no y-field.\n * The height can be either a number indicating a fixed height or an object in the form of `{step: number}` defining the height per discrete step.\n *\n * __Default value:__ a step size based on `config.view.step`.\n */\n discreteHeight?: number | {step: number};\n\n /**\n * Default step size for x-/y- discrete fields.\n */\n step?: number;\n\n /**\n * Whether the view should be clipped.\n */\n clip?: boolean;\n}\n\nexport function getViewConfigContinuousSize<ES extends ExprRef | SignalRef>(\n viewConfig: ViewConfig<ES>,\n channel: 'width' | 'height'\n) {\n return (viewConfig as any)[channel] ?? viewConfig[channel === 'width' ? 'continuousWidth' : 'continuousHeight']; // get width/height for backwards compatibility\n}\n\nexport function getViewConfigDiscreteStep<ES extends ExprRef | SignalRef>(\n viewConfig: ViewConfig<ES>,\n channel: 'width' | 'height'\n) {\n const size = getViewConfigDiscreteSize(viewConfig, channel);\n return isStep(size) ? size.step : DEFAULT_STEP;\n}\n\nexport function getViewConfigDiscreteSize<ES extends ExprRef | SignalRef>(\n viewConfig: ViewConfig<ES>,\n channel: 'width' | 'height'\n) {\n const size = (viewConfig as any)[channel] ?? viewConfig[channel === 'width' ? 'discreteWidth' : 'discreteHeight']; // get width/height for backwards compatibility\n return getFirstDefined(size, {step: viewConfig.step});\n}\n\nexport const DEFAULT_STEP = 20;\n\nexport const defaultViewConfig: ViewConfig<SignalRef> = {\n continuousWidth: 200,\n continuousHeight: 200,\n step: DEFAULT_STEP\n};\n\nexport function isVgScheme(rangeScheme: string[] | RangeScheme): rangeScheme is RangeScheme {\n return hasProperty(rangeScheme, 'scheme');\n}\n\nexport type ColorConfig = Record<string, Color>;\n\nexport type FontSizeConfig = Record<string, number>;\n\nexport interface FormatConfig {\n /**\n * If numberFormatType is not specified,\n * D3 number format for guide labels, text marks, and tooltips of non-normalized fields (fields *without* `stack: \"normalize\"`). For example `\"s\"` for SI units.\n * Use [D3's number format pattern](https://github.com/d3/d3-format#locale_format).\n *\n * If `config.numberFormatType` is specified and `config.customFormatTypes` is `true`, this value will be passed as `format` alongside `datum.value` to the `config.numberFormatType` function.\n */\n numberFormat?: string;\n\n /**\n * [Custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type)\n * for `config.numberFormat`.\n *\n * __Default value:__ `undefined` -- This is equilvalent to call D3-format, which is exposed as [`format` in Vega-Expression](https://vega.github.io/vega/docs/expressions/#format).\n * __Note:__ You must also set `customFormatTypes` to `true` to use this feature.\n */\n numberFormatType?: string;\n\n /**\n * If normalizedNumberFormatType is not specified,\n * D3 number format for axis labels, text marks, and tooltips of normalized stacked fields (fields with `stack: \"normalize\"`). For example `\"s\"` for SI units.\n * Use [D3's number format pattern](https://github.com/d3/d3-format#locale_format).\n *\n * If `config.normalizedNumberFormatType` is specified and `config.customFormatTypes` is `true`, this value will be passed as `format` alongside `datum.value` to the `config.numberFormatType` function.\n * __Default value:__ `%`\n */\n normalizedNumberFormat?: string;\n\n /**\n * [Custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type)\n * for `config.normalizedNumberFormat`.\n *\n * __Default value:__ `undefined` -- This is equilvalent to call D3-format, which is exposed as [`format` in Vega-Expression](https://vega.github.io/vega/docs/expressions/#format).\n * __Note:__ You must also set `customFormatTypes` to `true` to use this feature.\n */\n normalizedNumberFormatType?: string;\n\n /**\n * Default time format for raw time values (without time units) in text marks, legend labels and header labels.\n *\n * __Default value:__ `\"%b %d, %Y\"`\n * __Note:__ Axes automatically determine the format for each label automatically so this config does not affect axes.\n */\n timeFormat?: string;\n\n /**\n * [Custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type)\n * for `config.timeFormat`.\n *\n * __Default value:__ `undefined` -- This is equilvalent to call D3-time-format, which is exposed as [`timeFormat` in Vega-Expression](https://vega.github.io/vega/docs/expressions/#timeFormat).\n * __Note:__ You must also set `customFormatTypes` to `true` and there must *not* be a `timeUnit` defined to use this feature.\n */\n timeFormatType?: string;\n}\n\nexport interface VLOnlyConfig<ES extends ExprRef | SignalRef> extends FormatConfig {\n /**\n * Default font for all text marks, titles, and labels.\n */\n font?: string;\n\n /**\n * Default color signals.\n *\n * @hidden\n */\n color?: boolean | ColorConfig;\n\n /**\n * Default font size signals.\n *\n * @hidden\n */\n fontSize?: boolean | FontSizeConfig;\n\n /**\n * Default axis and legend title for count fields.\n *\n * __Default value:__ `'Count of Records`.\n *\n * @type {string}\n */\n countTitle?: string;\n\n /**\n * Defines how Vega-Lite generates title for fields. There are three possible styles:\n * - `\"verbal\"` (Default) - displays function in a verbal style (e.g., \"Sum of field\", \"Year-month of date\", \"field (binned)\").\n * - `\"function\"` - displays function using parentheses and capitalized texts (e.g., \"SUM(field)\", \"YEARMONTH(date)\", \"BIN(field)\").\n * - `\"plain\"` - displays only the field name without functions (e.g., \"field\", \"date\", \"field\").\n */\n fieldTitle?: 'verbal' | 'functional' | 'plain';\n\n /**\n * Allow the `formatType` property for text marks and guides to accept a custom formatter function [registered as a Vega expression](https://vega.github.io/vega-lite/usage/compile.html#format-type).\n */\n customFormatTypes?: boolean;\n\n /**\n * Define [custom format configuration](https://vega.github.io/vega-lite/docs/config.html#format) for tooltips. If unspecified, default format config will be applied.\n */\n tooltipFormat?: FormatConfig;\n\n /** Default properties for [single view plots](https://vega.github.io/vega-lite/docs/spec.html#single). */\n view?: ViewConfig<ES>;\n\n /**\n * Scale configuration determines default properties for all [scales](https://vega.github.io/vega-lite/docs/scale.html). For a full list of scale configuration options, please see the [corresponding section of the scale documentation](https://vega.github.io/vega-lite/docs/scale.html#config).\n */\n scale?: ScaleConfig<ES>;\n\n /** An object hash for defining default properties for each type of selections. */\n selection?: SelectionConfig;\n}\n\nexport type StyleConfigIndex<ES extends ExprRef | SignalRef> = Partial<Record<string, AnyMarkConfig<ES> | Axis<ES>>> &\n MarkConfigMixins<ES> & {\n /**\n * Default style for axis, legend, and header titles.\n */\n 'guide-title'?: MarkConfig<ES>;\n\n /**\n * Default style for axis, legend, and header labels.\n */\n 'guide-label'?: MarkConfig<ES>;\n\n /**\n * Default style for chart titles\n */\n 'group-title'?: MarkConfig<ES>;\n\n /**\n * Default style for chart subtitles\n */\n 'group-subtitle'?: MarkConfig<ES>;\n };\n\nexport interface Config<ES extends ExprRef | SignalRef = ExprRef | SignalRef>\n extends TopLevelProperties<ES>,\n VLOnlyConfig<ES>,\n MarkConfigMixins<ES>,\n CompositeMarkConfigMixins,\n AxisConfigMixins<ES>,\n HeaderConfigMixins<ES>,\n CompositionConfigMixins {\n /**\n * An object hash that defines default range arrays or schemes for using with scales.\n * For a full list of scale range configuration options, please see the [corresponding section of the scale documentation](https://vega.github.io/vega-lite/docs/scale.html#config).\n */\n range?: RangeConfig;\n\n /**\n * Legend configuration, which determines default properties for all [legends](https://vega.github.io/vega-lite/docs/legend.html). For a full list of legend configuration options, please see the [corresponding section of in the legend documentation](https://vega.github.io/vega-lite/docs/legend.html#config).\n */\n legend?: LegendConfig<ES>;\n\n /**\n * Title configuration, which determines default properties for all [titles](https://vega.github.io/vega-lite/docs/title.html). For a full list of title configuration options, please see the [corresponding section of the title documentation](https://vega.github.io/vega-lite/docs/title.html#config).\n */\n title?: TitleConfig<ES>;\n\n /**\n * Projection configuration, which determines default properties for all [projections](https://vega.github.io/vega-lite/docs/projection.html). For a full list of projection configuration options, please see the [corresponding section of the projection documentation](https://vega.github.io/vega-lite/docs/projection.html#config).\n */\n projection?: ProjectionConfig;\n\n /** An object hash that defines key-value mappings to determine default properties for marks with a given [style](https://vega.github.io/vega-lite/docs/mark.html#mark-def). The keys represent styles names; the values have to be valid [mark configuration objects](https://vega.github.io/vega-lite/docs/mark.html#config). */\n style?: StyleConfigIndex<ES>;\n\n /**\n * A delimiter, such as a newline character, upon which to break text strings into multiple lines. This property provides a global default for text marks, which is overridden by mark or style config settings, and by the lineBreak mark encoding channel. If signal-valued, either string or regular expression (regexp) values are valid.\n */\n lineBreak?: string | ES;\n\n /**\n * A boolean flag indicating if ARIA default attributes should be included for marks and guides (SVG output only). If false, the `\"aria-hidden\"` attribute will be set for all guides, removing them from the ARIA accessibility tree and Vega-Lite will not generate default descriptions for marks.\n *\n * __Default value:__ `true`.\n */\n aria?: boolean;\n\n /**\n * Locale definitions for string parsing and formatting of number and date values. The locale object should contain `number` and/or `time` properties with [locale definitions](https://vega.github.io/vega/docs/api/locale/). Locale definitions provided in the config block may be overridden by the View constructor locale option.\n */\n locale?: Locale;\n\n /**\n * @hidden\n */\n signals?: (InitSignal | NewSignal)[];\n}\n\nexport const defaultConfig: Config<SignalRef> = {\n background: 'white',\n\n padding: 5,\n timeFormat: '%b %d, %Y',\n countTitle: 'Count of Records',\n\n view: defaultViewConfig,\n\n mark: mark.defaultMarkConfig,\n\n arc: {},\n area: {},\n bar: mark.defaultBarConfig,\n circle: {},\n geoshape: {},\n image: {},\n line: {},\n point: {},\n rect: mark.defaultRectConfig,\n rule: {color: 'black'}, // Need this to override default color in mark config\n square: {},\n text: {color: 'black'}, // Need this to override default color in mark config\n tick: mark.defaultTickConfig,\n trail: {},\n\n boxplot: {\n size: 14,\n extent: 1.5,\n box: {},\n median: {color: 'white'},\n outliers: {},\n rule: {},\n ticks: null\n },\n\n errorbar: {\n center: 'mean',\n rule: true,\n ticks: false\n },\n\n errorband: {\n band: {\n opacity: 0.3\n },\n borders: false\n },\n\n scale: defaultScaleConfig,\n\n projection: {},\n\n legend: defaultLegendConfig,\n header: {titlePadding: 10, labelPadding: 10},\n headerColumn: {},\n headerRow: {},\n headerFacet: {},\n\n selection: defaultSelectionConfig,\n style: {},\n\n title: {},\n\n facet: {spacing: DEFAULT_SPACING},\n concat: {spacing: DEFAULT_SPACING},\n\n normalizedNumberFormat: '.0%'\n};\n\n// Tableau10 color palette, copied from `vegaScale.scheme('tableau10')`\nconst tab10 = [\n '#4c78a8',\n '#f58518',\n '#e45756',\n '#72b7b2',\n '#54a24b',\n '#eeca3b',\n '#b279a2',\n '#ff9da6',\n '#9d755d',\n '#bab0ac'\n];\n\nexport const DEFAULT_FONT_SIZE = {\n text: 11,\n guideLabel: 10,\n guideTitle: 11,\n groupTitle: 13,\n groupSubtitle: 12\n};\n\nexport const DEFAULT_COLOR = {\n blue: tab10[0],\n orange: tab10[1],\n red: tab10[2],\n teal: tab10[3],\n green: tab10[4],\n yellow: tab10[5],\n purple: tab10[6],\n pink: tab10[7],\n brown: tab10[8],\n gray0: '#000',\n gray1: '#111',\n gray2: '#222',\n gray3: '#333',\n gray4: '#444',\n gray5: '#555',\n gray6: '#666',\n gray7: '#777',\n gray8: '#888',\n gray9: '#999',\n gray10: '#aaa',\n gray11: '#bbb',\n gray12: '#ccc',\n gray13: '#ddd',\n gray14: '#eee',\n gray15: '#fff'\n};\n\nexport function colorSignalConfig(color: boolean | ColorConfig = {}): Config {\n return {\n signals: [\n {\n name: 'color',\n value: isObject(color) ? {...DEFAULT_COLOR, ...color} : DEFAULT_COLOR\n }\n ],\n mark: {color: {signal: 'color.blue'}},\n rule: {color: {signal: 'color.gray0'}},\n text: {\n color: {signal: 'color.gray0'}\n },\n style: {\n 'guide-label': {\n fill: {signal: 'color.gray0'}\n },\n 'guide-title': {\n fill: {signal: 'color.gray0'}\n },\n 'group-title': {\n fill: {signal: 'color.gray0'}\n },\n 'group-subtitle': {\n fill: {signal: 'color.gray0'}\n },\n cell: {\n stroke: {signal: 'color.gray8'}\n }\n },\n axis: {\n domainColor: {signal: 'color.gray13'},\n gridColor: {signal: 'color.gray8'},\n tickColor: {signal: 'color.gray13'}\n },\n range: {\n category: [\n {signal: 'color.blue'},\n {signal: 'color.orange'},\n {signal: 'color.red'},\n {signal: 'color.teal'},\n {signal: 'color.green'},\n {signal: 'color.yellow'},\n {signal: 'color.purple'},\n {signal: 'color.pink'},\n {signal: 'color.brown'},\n {signal: 'color.grey8'}\n ]\n }\n };\n}\n\nexport function fontSizeSignalConfig(fontSize: boolean | FontSizeConfig): Config {\n return {\n signals: [\n {\n name: 'fontSize',\n value: isObject(fontSize) ? {...DEFAULT_FONT_SIZE, ...fontSize} : DEFAULT_FONT_SIZE\n }\n ],\n text: {\n fontSize: {signal: 'fontSize.text'}\n },\n style: {\n 'guide-label': {\n fontSize: {signal: 'fontSize.guideLabel'}\n },\n 'guide-title': {\n fontSize: {signal: 'fontSize.guideTitle'}\n },\n 'group-title': {\n fontSize: {signal: 'fontSize.groupTitle'}\n },\n 'group-subtitle': {\n fontSize: {signal: 'fontSize.groupSubtitle'}\n }\n }\n };\n}\n\nexport function fontConfig(font: string): Config {\n return {\n text: {font},\n style: {\n 'guide-label': {font},\n 'guide-title': {font},\n 'group-title': {font},\n 'group-subtitle': {font}\n }\n };\n}\n\nfunction getAxisConfigInternal(axisConfig: AxisConfig<ExprRef | SignalRef>) {\n const props = keys(axisConfig || {});\n const axisConfigInternal: AxisConfig<SignalRef> = {};\n for (const prop of props) {\n const val = axisConfig[prop];\n (axisConfigInternal as any)[prop] = isConditionalAxisValue<any, ExprRef | SignalRef>(val)\n ? signalOrValueRefWithCondition<any>(val)\n : signalRefOrValue(val);\n }\n return axisConfigInternal;\n}\n\nfunction getStyleConfigInternal(styleConfig: StyleConfigIndex<ExprRef | SignalRef>) {\n const props = keys(styleConfig);\n\n const styleConfigInternal: StyleConfigIndex<SignalRef> = {};\n for (const prop of props) {\n // We need to cast to cheat a bit here since styleConfig can be either mark config or axis config\n styleConfigInternal[prop as any] = getAxisConfigInternal(styleConfig[prop] as any);\n }\n return styleConfigInternal;\n}\n\nconst configPropsWithExpr = [\n ...MARK_CONFIGS,\n ...AXIS_CONFIGS,\n ...HEADER_CONFIGS,\n 'background',\n 'padding',\n 'legend',\n 'lineBreak',\n 'scale',\n 'style',\n 'title',\n 'view'\n] as const;\n\n/**\n * Merge specified config with default config and config for the `color` flag,\n * then replace all expressions with signals\n */\nexport function initConfig(specifiedConfig: Config = {}): Config<SignalRef> {\n const {color, font, fontSize, selection, ...restConfig} = specifiedConfig;\n const mergedConfig = mergeConfig(\n {},\n duplicate(defaultConfig),\n font ? fontConfig(font) : {},\n color ? colorSignalConfig(color) : {},\n fontSize ? fontSizeSignalConfig(fontSize) : {},\n restConfig || {}\n );\n\n // mergeConfig doesn't recurse and overrides object values.\n if (selection) {\n writeConfig(mergedConfig, 'selection', selection, true);\n }\n\n const outputConfig: Config<SignalRef> = omit(mergedConfig, configPropsWithExpr);\n\n for (const prop of ['background', 'lineBreak', 'padding'] as const) {\n if (mergedConfig[prop]) {\n (outputConfig as any)[prop] = signalRefOrValue(mergedConfig[prop]);\n }\n }\n\n for (const markConfigType of mark.MARK_CONFIGS) {\n if (mergedConfig[markConfigType]) {\n // FIXME: outputConfig[markConfigType] expects that types are replaced recursively but replaceExprRef only replaces one level deep\n outputConfig[markConfigType] = replaceExprRef(mergedConfig[markConfigType]) as any;\n }\n }\n\n for (const axisConfigType of AXIS_CONFIGS) {\n if (mergedConfig[axisConfigType]) {\n outputConfig[axisConfigType] = getAxisConfigInternal(mergedConfig[axisConfigType]);\n }\n }\n\n for (const headerConfigType of HEADER_CONFIGS) {\n if (mergedConfig[headerConfigType]) {\n outputConfig[headerConfigType] = replaceExprRef(mergedConfig[headerConfigType]);\n }\n }\n\n if (mergedConfig.legend) {\n outputConfig.legend = replaceExprRef(mergedConfig.legend);\n }\n\n if (mergedConfig.scale) {\n const {invalid, ...otherScaleConfig} = mergedConfig.scale;\n const newScaleInvalid = replaceExprRef(invalid, {level: 1});\n outputConfig.scale = {\n ...replaceExprRef(otherScaleConfig),\n ...(keys(newScaleInvalid).length > 0 ? {invalid: newScaleInvalid} : {})\n };\n }\n\n if (mergedConfig.style) {\n outputConfig.style = getStyleConfigInternal(mergedConfig.style);\n }\n\n if (mergedConfig.title) {\n outputConfig.title = replaceExprRef(mergedConfig.title);\n }\n\n if (mergedConfig.view) {\n outputConfig.view = replaceExprRef(mergedConfig.view);\n }\n\n return outputConfig;\n}\n\nconst MARK_STYLES = new Set(['view', ...PRIMITIVE_MARKS]) as ReadonlySet<'view' | Mark>;\n\nconst VL_ONLY_CONFIG_PROPERTIES: (keyof Config)[] = [\n 'color',\n 'fontSize',\n 'background', // We apply background to the spec directly.\n 'padding',\n 'facet',\n 'concat',\n 'numberFormat',\n 'numberFormatType',\n 'normalizedNumberFormat',\n 'normalizedNumberFormatType',\n 'timeFormat',\n 'countTitle',\n 'header',\n\n 'axisQuantitative',\n 'axisTemporal',\n 'axisDiscrete',\n 'axisPoint',\n\n 'axisXBand',\n 'axisXPoint',\n 'axisXDiscrete',\n 'axisXQuantitative',\n 'axisXTemporal',\n\n 'axisYBand',\n 'axisYPoint',\n 'axisYDiscrete',\n 'axisYQuantitative',\n 'axisYTemporal',\n\n 'scale',\n 'selection',\n 'overlay' as keyof Config // FIXME: Redesign and unhide this\n];\n\nconst VL_ONLY_ALL_MARK_SPECIFIC_CONFIG_PROPERTY_INDEX = {\n view: ['continuousWidth', 'continuousHeight', 'discreteWidth', 'discreteHeight', 'step'],\n ...VL_ONLY_MARK_SPECIFIC_CONFIG_PROPERTY_INDEX\n};\n\nexport function stripAndRedirectConfig(config: Config<SignalRef>) {\n config = duplicate(config);\n\n for (const prop of VL_ONLY_CONFIG_PROPERTIES) {\n delete config[prop];\n }\n\n if (config.axis) {\n // delete condition axis config\n for (const prop in config.axis) {\n if (isConditionalAxisValue(config.axis[prop as keyof AxisConfig<SignalRef>])) {\n delete config.axis[prop as keyof AxisConfig<SignalRef>];\n }\n }\n }\n\n if (config.legend) {\n for (const prop of VL_ONLY_LEGEND_CONFIG) {\n delete config.legend[prop];\n }\n }\n\n // Remove Vega-Lite only generic mark config\n if (config.mark) {\n for (const prop of VL_ONLY_MARK_CONFIG_PROPERTIES) {\n delete config.mark[prop];\n }\n\n if (config.mark.tooltip && isObject(config.mark.tooltip)) {\n delete config.mark.tooltip;\n }\n }\n\n if (config.params) {\n config.signals = (config.signals || []).concat(assembleParameterSignals(config.params));\n delete config.params;\n }\n\n for (const markType of MARK_STYLES) {\n // Remove Vega-Lite-only mark config\n for (const prop of VL_ONLY_MARK_CONFIG_PROPERTIES) {\n delete (config as any)[markType][prop];\n }\n\n // Remove Vega-Lite only mark-specific config\n const vlOnlyMarkSpecificConfigs = VL_ONLY_ALL_MARK_SPECIFIC_CONFIG_PROPERTY_INDEX[markType];\n if (vlOnlyMarkSpecificConfigs) {\n for (const prop of vlOnlyMarkSpecificConfigs) {\n delete (config as any)[markType][prop];\n }\n }\n\n // Redirect mark config to config.style so that mark config only affect its own mark type\n // without affecting other marks that share the same underlying Vega marks.\n // For example, config.rect should not affect bar marks.\n redirectConfigToStyleConfig(config, markType);\n }\n\n for (const m of getAllCompositeMarks()) {\n // Clean up the composite mark config as we don't need them in the output specs anymore\n delete (config as any)[m];\n }\n\n redirectTitleConfig(config);\n\n // Remove empty config objects.\n for (const prop in config) {\n // @ts-ignore\n if (isObject(config[prop]) && isEmpty(config[prop])) {\n // @ts-ignore\n delete config[prop];\n }\n }\n\n return isEmpty(config) ? undefined : config;\n}\n\n/**\n *\n * Redirect config.title -- so that title config do not affect header labels,\n * which also uses `title` directive to implement.\n *\n * For subtitle configs in config.title, keep them in config.title as header titles never have subtitles.\n */\nfunction redirectTitleConfig(config: Config<SignalRef>) {\n const {titleMarkConfig, subtitleMarkConfig, subtitle} = extractTitleConfig(config.title);\n\n // set config.style if title/subtitleMarkConfig is not an empty object\n if (!isEmpty(titleMarkConfig)) {\n config.style['group-title'] = {\n ...config.style['group-title'],\n ...titleMarkConfig // config.title has higher precedence than config.style.group-title in Vega\n };\n }\n if (!isEmpty(subtitleMarkConfig)) {\n config.style['group-subtitle'] = {\n ...config.style['group-subtitle'],\n ...subtitleMarkConfig\n };\n }\n\n // subtitle part can stay in config.title since header titles do not use subtitle\n if (!isEmpty(subtitle)) {\n config.title = subtitle;\n } else {\n delete config.title;\n }\n}\n\nfunction redirectConfigToStyleConfig(\n config: Config<SignalRef>,\n prop: Mark | 'view' | string, // string = composite mark\n toProp?: string,\n compositeMarkPart?: string\n) {\n const propConfig: MarkConfig<SignalRef> = compositeMarkPart\n ? (config as any)[prop][compositeMarkPart]\n : config[prop as keyof Config<any>];\n\n if (prop === 'view') {\n toProp = 'cell'; // View's default style is \"cell\"\n }\n\n const style: MarkConfig<SignalRef> = {\n ...propConfig,\n ...(config.style[toProp ?? prop] as MarkConfig<SignalRef>)\n };\n\n // set config.style if it is not an empty object\n if (!isEmpty(style)) {\n config.style[toProp ?? prop] = style;\n }\n\n if (!compositeMarkPart) {\n // For composite mark, so don't delete the whole config yet as we have to do multiple redirections.\n delete config[prop as keyof Config<any>];\n }\n}\n", "import {Field} from '../channeldef';\nimport {SharedCompositeEncoding} from '../compositemark';\nimport {ExprRef} from '../expr';\nimport {Projection} from '../projection';\nimport {hasProperty} from '../util';\nimport {BaseSpec, FrameMixins, ResolveMixins} from './base';\nimport {GenericUnitSpec, NormalizedUnitSpec, UnitSpec} from './unit';\n\n/**\n * Base interface for a layer specification.\n */\nexport interface GenericLayerSpec<U extends GenericUnitSpec<any, any>> extends BaseSpec, FrameMixins, ResolveMixins {\n /**\n * Layer or single view specifications to be layered.\n *\n * __Note__: Specifications inside `layer` cannot use `row` and `column` channels as layering facet specifications is not allowed. Instead, use the [facet operator](https://vega.github.io/vega-lite/docs/facet.html) and place a layer inside a facet.\n */\n layer: (GenericLayerSpec<U> | U)[];\n}\n\n/**\n * A full layered plot specification, which may contains `encoding` and `projection` properties that will be applied to underlying unit (single-view) specifications.\n */\nexport interface LayerSpec<F extends Field> extends BaseSpec, FrameMixins, ResolveMixins {\n /**\n * Layer or single view specifications to be layered.\n *\n * __Note__: Specifications inside `layer` cannot use `row` and `column` channels as layering facet specifications is not allowed. Instead, use the [facet operator](https://vega.github.io/vega-lite/docs/facet.html) and place a layer inside a facet.\n */\n layer: (LayerSpec<F> | UnitSpec<F>)[];\n\n /**\n * A shared key-value mapping between encoding channels and definition of fields in the underlying layers.\n */\n encoding?: SharedCompositeEncoding<F>;\n\n /**\n * An object defining properties of the geographic projection shared by underlying layers.\n */\n projection?: Projection<ExprRef>;\n}\n\n/**\n * A layered specification without any shortcut/expansion syntax.\n */\nexport type NormalizedLayerSpec = GenericLayerSpec<NormalizedUnitSpec>;\n\nexport function isLayerSpec(spec: BaseSpec): spec is GenericLayerSpec<any> {\n return hasProperty(spec, 'layer');\n}\n", "import {isArray} from 'vega-util';\nimport {LayerSpec, NonNormalizedSpec} from '.';\nimport {Field} from '../channeldef';\nimport {BaseSpec, GenericCompositionLayoutWithColumns, ResolveMixins} from './base';\nimport {UnitSpecWithFrame} from './unit';\nimport {hasProperty} from '../util';\n\nexport interface RepeatMapping {\n /**\n * An array of fields to be repeated vertically.\n */\n row?: string[];\n\n /**\n * An array of fields to be repeated horizontally.\n */\n column?: string[];\n}\n\nexport interface LayerRepeatMapping extends RepeatMapping {\n /**\n * An array of fields to be repeated as layers.\n */\n layer: string[];\n}\n\nexport type RepeatSpec = NonLayerRepeatSpec | LayerRepeatSpec;\n\n/**\n * Base interface for a repeat specification.\n */\nexport interface NonLayerRepeatSpec extends BaseSpec, GenericCompositionLayoutWithColumns, ResolveMixins {\n /**\n * Definition for fields to be repeated. One of:\n * 1) An array of fields to be repeated. If `\"repeat\"` is an array, the field can be referred to as `{\"repeat\": \"repeat\"}`. The repeated views are laid out in a wrapped row. You can set the number of columns to control the wrapping.\n * 2) An object that maps `\"row\"` and/or `\"column\"` to the listed fields to be repeated along the particular orientations. The objects `{\"repeat\": \"row\"}` and `{\"repeat\": \"column\"}` can be used to refer to the repeated field respectively.\n */\n repeat: string[] | RepeatMapping;\n\n /**\n * A specification of the view that gets repeated.\n */\n spec: NonNormalizedSpec;\n}\n\nexport interface LayerRepeatSpec extends BaseSpec, GenericCompositionLayoutWithColumns, ResolveMixins {\n /**\n * Definition for fields to be repeated. One of:\n * 1) An array of fields to be repeated. If `\"repeat\"` is an array, the field can be referred to as `{\"repeat\": \"repeat\"}`. The repeated views are laid out in a wrapped row. You can set the number of columns to control the wrapping.\n * 2) An object that maps `\"row\"` and/or `\"column\"` to the listed fields to be repeated along the particular orientations. The objects `{\"repeat\": \"row\"}` and `{\"repeat\": \"column\"}` can be used to refer to the repeated field respectively.\n */\n repeat: LayerRepeatMapping;\n\n /**\n * A specification of the view that gets repeated.\n */\n spec: LayerSpec<Field> | UnitSpecWithFrame<Field>;\n}\n\nexport function isRepeatSpec(spec: BaseSpec): spec is RepeatSpec {\n return hasProperty(spec, 'repeat');\n}\n\nexport function isLayerRepeatSpec(spec: RepeatSpec): spec is LayerRepeatSpec {\n return !isArray(spec.repeat) && hasProperty(spec.repeat, 'layer');\n}\n", "import {GenericSpec} from '.';\nimport * as log from '../log';\nimport {Field, FieldName} from '../channeldef';\nimport {\n GenericConcatSpec,\n GenericHConcatSpec,\n GenericVConcatSpec,\n isConcatSpec,\n isHConcatSpec,\n isVConcatSpec\n} from './concat';\nimport {GenericFacetSpec, isFacetSpec} from './facet';\nimport {GenericLayerSpec, isLayerSpec} from './layer';\nimport {isRepeatSpec, RepeatSpec} from './repeat';\nimport {GenericUnitSpec, isUnitSpec, NormalizedUnitSpec} from './unit';\n\nexport abstract class SpecMapper<\n P,\n UI extends GenericUnitSpec<any, any>,\n LI extends GenericLayerSpec<any> = GenericLayerSpec<UI>,\n UO extends GenericUnitSpec<any, any> = NormalizedUnitSpec,\n RO extends RepeatSpec = never,\n FO extends Field = FieldName\n> {\n public map(spec: GenericSpec<UI, LI, RepeatSpec, Field>, params: P): GenericSpec<UO, GenericLayerSpec<UO>, RO, FO> {\n if (isFacetSpec(spec)) {\n return this.mapFacet(spec, params);\n } else if (isRepeatSpec(spec)) {\n return this.mapRepeat(spec, params);\n } else if (isHConcatSpec(spec)) {\n return this.mapHConcat(spec, params);\n } else if (isVConcatSpec(spec)) {\n return this.mapVConcat(spec, params);\n } else if (isConcatSpec(spec)) {\n return this.mapConcat(spec, params);\n } else {\n return this.mapLayerOrUnit(spec, params);\n }\n }\n\n public mapLayerOrUnit(spec: UI | LI, params: P): UO | GenericLayerSpec<UO> {\n if (isLayerSpec(spec)) {\n return this.mapLayer(spec, params);\n } else if (isUnitSpec(spec)) {\n return this.mapUnit(spec, params);\n }\n throw new Error(log.message.invalidSpec(spec));\n }\n\n public abstract mapUnit(spec: UI, params: P): UO | GenericLayerSpec<UO>;\n\n protected mapLayer(spec: LI, params: P): GenericLayerSpec<UO> {\n return {\n ...spec,\n layer: spec.layer.map(subspec => this.mapLayerOrUnit(subspec, params))\n };\n }\n\n protected mapHConcat(\n spec: GenericHConcatSpec<GenericSpec<UI, LI, RepeatSpec, Field>>,\n params: P\n ): GenericHConcatSpec<GenericSpec<UO, GenericLayerSpec<UO>, RO, FO>> {\n return {\n ...spec,\n hconcat: spec.hconcat.map(subspec => this.map(subspec, params))\n };\n }\n\n protected mapVConcat(\n spec: GenericVConcatSpec<GenericSpec<UI, LI, RepeatSpec, Field>>,\n params: P\n ): GenericVConcatSpec<GenericSpec<UO, GenericLayerSpec<UO>, RO, FO>> {\n return {\n ...spec,\n vconcat: spec.vconcat.map(subspec => this.map(subspec, params))\n };\n }\n\n protected mapConcat(\n spec: GenericConcatSpec<GenericSpec<UI, LI, RepeatSpec, Field>>,\n params: P\n ): GenericConcatSpec<GenericSpec<UO, GenericLayerSpec<UO>, RO, FO>> {\n const {concat, ...rest} = spec;\n\n return {\n ...rest,\n concat: concat.map(subspec => this.map(subspec, params))\n };\n }\n\n protected mapFacet(spec: GenericFacetSpec<UI, LI, Field>, params: P): GenericFacetSpec<UO, GenericLayerSpec<UO>, FO> {\n return {\n // as any is required here since TS cannot infer that FO may only be FieldName or Field, but not RepeatRef\n ...(spec as any),\n // TODO: remove \"any\" once we support all facet listed in https://github.com/vega/vega-lite/issues/2760\n spec: this.map(spec.spec, params) as any\n };\n }\n\n protected mapRepeat(spec: RepeatSpec, params: P): GenericSpec<UO, any, RO, FO> {\n return {\n ...spec,\n // as any is required here since TS cannot infer that the output type satisfies the input type\n spec: this.map(spec.spec as any, params)\n };\n }\n}\n", "import {array, hasOwnProperty, isBoolean} from 'vega-util';\nimport {Aggregate, SUM_OPS} from './aggregate';\nimport {getSecondaryRangeChannel, NonPositionChannel, NONPOSITION_CHANNELS} from './channel';\nimport {\n channelDefType,\n FieldName,\n getFieldDef,\n isFieldDef,\n isFieldOrDatumDef,\n PositionDatumDef,\n PositionDef,\n PositionFieldDef,\n TypedFieldDef,\n vgField\n} from './channeldef';\nimport {CompositeAggregate} from './compositemark';\nimport {channelHasField, Encoding, isAggregate} from './encoding';\nimport * as log from './log';\nimport {\n ARC,\n AREA,\n BAR,\n CIRCLE,\n isMarkDef,\n isPathMark,\n LINE,\n Mark,\n MarkDef,\n POINT,\n RULE,\n SQUARE,\n TEXT,\n TICK\n} from './mark';\nimport {ScaleType} from './scale';\n\nconst STACK_OFFSET_INDEX = {\n zero: 1,\n center: 1,\n normalize: 1\n} as const;\n\nexport type StackOffset = keyof typeof STACK_OFFSET_INDEX;\n\nexport function isStackOffset(s: string): s is StackOffset {\n return hasOwnProperty(STACK_OFFSET_INDEX, s);\n}\n\nexport interface StackProperties {\n /** Dimension axis of the stack. */\n groupbyChannels: ('x' | 'y' | 'theta' | 'radius' | 'xOffset' | 'yOffset')[];\n\n /** Field for groupbyChannel. */\n groupbyFields: Set<FieldName>;\n\n /** Measure axis of the stack. */\n fieldChannel: 'x' | 'y' | 'theta' | 'radius';\n\n /** Stack-by fields e.g., color, detail */\n stackBy: {\n fieldDef: TypedFieldDef<string>;\n channel: NonPositionChannel;\n }[];\n\n /**\n * See `stack` property of Position Field Def.\n */\n offset: StackOffset;\n\n /**\n * Whether this stack will produce impute transform\n */\n impute: boolean;\n}\n\nexport const STACKABLE_MARKS = new Set<Mark>([ARC, BAR, AREA, RULE, POINT, CIRCLE, SQUARE, LINE, TEXT, TICK]);\nexport const STACK_BY_DEFAULT_MARKS = new Set<Mark>([BAR, AREA, ARC]);\n\nfunction isUnbinnedQuantitative(channelDef: PositionDef<string>) {\n return isFieldDef(channelDef) && channelDefType(channelDef) === 'quantitative' && !channelDef.bin;\n}\n\nfunction potentialStackedChannel(\n encoding: Encoding<string>,\n x: 'x' | 'theta',\n {orient, type: mark}: MarkDef\n): 'x' | 'y' | 'theta' | 'radius' | undefined {\n const y = x === 'x' ? 'y' : 'radius';\n\n const isCartesianBarOrArea = x === 'x' && ['bar', 'area'].includes(mark);\n\n const xDef = encoding[x];\n const yDef = encoding[y];\n\n if (isFieldDef(xDef) && isFieldDef(yDef)) {\n if (isUnbinnedQuantitative(xDef) && isUnbinnedQuantitative(yDef)) {\n if (xDef.stack) {\n return x;\n } else if (yDef.stack) {\n return y;\n }\n const xAggregate = isFieldDef(xDef) && !!xDef.aggregate;\n const yAggregate = isFieldDef(yDef) && !!yDef.aggregate;\n // if there is no explicit stacking, only apply stack if there is only one aggregate for x or y\n if (xAggregate !== yAggregate) {\n return xAggregate ? x : y;\n }\n\n if (isCartesianBarOrArea) {\n if (orient === 'vertical') {\n return y;\n } else if (orient === 'horizontal') {\n return x;\n }\n }\n } else if (isUnbinnedQuantitative(xDef)) {\n return x;\n } else if (isUnbinnedQuantitative(yDef)) {\n return y;\n }\n } else if (isUnbinnedQuantitative(xDef)) {\n if (isCartesianBarOrArea && orient === 'vertical') {\n return undefined;\n }\n return x;\n } else if (isUnbinnedQuantitative(yDef)) {\n if (isCartesianBarOrArea && orient === 'horizontal') {\n return undefined;\n }\n return y;\n }\n return undefined;\n}\n\nfunction getDimensionChannel(channel: 'x' | 'y' | 'theta' | 'radius') {\n switch (channel) {\n case 'x':\n return 'y';\n case 'y':\n return 'x';\n case 'theta':\n return 'radius';\n case 'radius':\n return 'theta';\n }\n}\n\nexport function stack(m: Mark | MarkDef, encoding: Encoding<string>): StackProperties {\n const markDef = isMarkDef(m) ? m : {type: m};\n const mark = markDef.type;\n\n // Should have stackable mark\n if (!STACKABLE_MARKS.has(mark)) {\n return null;\n }\n\n // Run potential stacked twice, one for Cartesian and another for Polar,\n // so text marks can be stacked in any of the coordinates.\n\n // Note: The logic here is not perfectly correct. If we want to support stacked dot plots where each dot is a pie chart with label, we have to change the stack logic here to separate Cartesian stacking for polar stacking.\n // However, since we probably never want to do that, let's just note the limitation here.\n const fieldChannel =\n potentialStackedChannel(encoding, 'x', markDef) || potentialStackedChannel(encoding, 'theta', markDef);\n\n if (!fieldChannel) {\n return null;\n }\n\n const stackedFieldDef = encoding[fieldChannel] as PositionFieldDef<string> | PositionDatumDef<string>;\n const stackedField = isFieldDef(stackedFieldDef) ? vgField(stackedFieldDef, {}) : undefined;\n\n const dimensionChannel: 'x' | 'y' | 'theta' | 'radius' = getDimensionChannel(fieldChannel);\n const groupbyChannels: StackProperties['groupbyChannels'] = [];\n const groupbyFields: Set<FieldName> = new Set();\n\n if (encoding[dimensionChannel]) {\n const dimensionDef = encoding[dimensionChannel];\n const dimensionField = isFieldDef(dimensionDef) ? vgField(dimensionDef, {}) : undefined;\n\n if (dimensionField && dimensionField !== stackedField) {\n // avoid grouping by the stacked field\n groupbyChannels.push(dimensionChannel);\n groupbyFields.add(dimensionField);\n }\n }\n\n const dimensionOffsetChannel = dimensionChannel === 'x' ? 'xOffset' : 'yOffset';\n const dimensionOffsetDef = encoding[dimensionOffsetChannel];\n const dimensionOffsetField = isFieldDef(dimensionOffsetDef) ? vgField(dimensionOffsetDef, {}) : undefined;\n\n if (dimensionOffsetField && dimensionOffsetField !== stackedField) {\n // avoid grouping by the stacked field\n groupbyChannels.push(dimensionOffsetChannel);\n groupbyFields.add(dimensionOffsetField);\n }\n\n // If the dimension has offset, don't stack anymore\n\n // Should have grouping level of detail that is different from the dimension field\n const stackBy = NONPOSITION_CHANNELS.reduce((sc, channel) => {\n // Ignore tooltip in stackBy (https://github.com/vega/vega-lite/issues/4001)\n if (channel !== 'tooltip' && channelHasField(encoding, channel)) {\n const channelDef = encoding[channel];\n for (const cDef of array(channelDef)) {\n const fieldDef = getFieldDef(cDef);\n if (fieldDef.aggregate) {\n continue;\n }\n\n // Check whether the channel's field is identical to x/y's field or if the channel is a repeat\n const f = vgField(fieldDef, {});\n if (\n // if fielddef is a repeat, just include it in the stack by\n !f ||\n // otherwise, the field must be different from the groupBy fields.\n !groupbyFields.has(f)\n ) {\n sc.push({channel, fieldDef});\n }\n }\n }\n return sc;\n }, []);\n\n // Automatically determine offset\n let offset: StackOffset;\n if (stackedFieldDef.stack !== undefined) {\n if (isBoolean(stackedFieldDef.stack)) {\n offset = stackedFieldDef.stack ? 'zero' : null;\n } else {\n offset = stackedFieldDef.stack;\n }\n } else if (STACK_BY_DEFAULT_MARKS.has(mark)) {\n offset = 'zero';\n }\n\n if (!offset || !isStackOffset(offset)) {\n return null;\n }\n\n if (isAggregate(encoding) && stackBy.length === 0) {\n return null;\n }\n\n // warn when stacking non-linear\n if (stackedFieldDef?.scale?.type && stackedFieldDef?.scale?.type !== ScaleType.LINEAR) {\n if (stackedFieldDef?.stack) {\n log.warn(log.message.stackNonLinearScale(stackedFieldDef.scale.type));\n }\n }\n\n // Check if it is a ranged mark\n if (isFieldOrDatumDef(encoding[getSecondaryRangeChannel(fieldChannel)])) {\n if (stackedFieldDef.stack !== undefined) {\n log.warn(log.message.cannotStackRangedMark(fieldChannel));\n }\n return null;\n }\n\n // Warn if stacking non-summative aggregate\n if (\n isFieldDef(stackedFieldDef) &&\n stackedFieldDef.aggregate &&\n !(SUM_OPS as Set<Aggregate | CompositeAggregate>).has(stackedFieldDef.aggregate)\n ) {\n log.warn(log.message.stackNonSummativeAggregate(stackedFieldDef.aggregate));\n }\n\n return {\n groupbyChannels,\n groupbyFields,\n fieldChannel,\n impute: stackedFieldDef.impute === null ? false : isPathMark(mark),\n stackBy,\n offset\n };\n}\n", "import {Orientation, SignalRef} from 'vega';\nimport {isBinned, isBinning} from '../../bin';\nimport {isFieldDef, isNumericDataDef, isUnbinnedQuantitativeFieldOrDatumDef, isTypedFieldDef} from '../../channeldef';\nimport {Config} from '../../config';\nimport {Encoding, isAggregate} from '../../encoding';\nimport {replaceExprRef} from '../../expr';\nimport * as log from '../../log';\nimport {\n AREA,\n BAR,\n BAR_CORNER_RADIUS_INDEX as BAR_CORNER_RADIUS_END_INDEX,\n CIRCLE,\n IMAGE,\n LINE,\n Mark,\n MarkDef,\n POINT,\n RECT,\n RULE,\n SQUARE,\n TEXT,\n TICK\n} from '../../mark';\nimport {QUANTITATIVE, TEMPORAL} from '../../type';\nimport {contains, getFirstDefined} from '../../util';\nimport {getMarkConfig, getMarkPropOrConfig} from '../common';\n\nexport function initMarkdef(originalMarkDef: MarkDef, encoding: Encoding<string>, config: Config<SignalRef>) {\n // FIXME: markDef expects that exprRefs are replaced recursively but replaceExprRef only replaces the top level\n const markDef: MarkDef<Mark, SignalRef> = replaceExprRef(originalMarkDef) as any;\n\n // set orient, which can be overridden by rules as sometimes the specified orient is invalid.\n const specifiedOrient = getMarkPropOrConfig('orient', markDef, config);\n markDef.orient = orient(markDef.type, encoding, specifiedOrient);\n if (specifiedOrient !== undefined && specifiedOrient !== markDef.orient) {\n log.warn(log.message.orientOverridden(markDef.orient, specifiedOrient));\n }\n\n if (markDef.type === 'bar' && markDef.orient) {\n const cornerRadiusEnd = getMarkPropOrConfig('cornerRadiusEnd', markDef, config);\n if (cornerRadiusEnd !== undefined) {\n const newProps =\n (markDef.orient === 'horizontal' && encoding.x2) || (markDef.orient === 'vertical' && encoding.y2)\n ? (['cornerRadius'] as const)\n : BAR_CORNER_RADIUS_END_INDEX[markDef.orient];\n\n for (const newProp of newProps) {\n markDef[newProp] = cornerRadiusEnd;\n }\n\n if (markDef.cornerRadiusEnd !== undefined) {\n delete markDef.cornerRadiusEnd; // no need to keep the original cap cornerRadius\n }\n }\n }\n\n // set opacity and filled if not specified in mark config\n const specifiedOpacity = getMarkPropOrConfig('opacity', markDef, config);\n const specifiedfillOpacity = getMarkPropOrConfig('fillOpacity', markDef, config);\n if (specifiedOpacity === undefined && specifiedfillOpacity === undefined) {\n markDef.opacity = opacity(markDef.type, encoding);\n }\n\n // set cursor, which should be pointer if href channel is present unless otherwise specified\n const specifiedCursor = getMarkPropOrConfig('cursor', markDef, config);\n if (specifiedCursor === undefined) {\n markDef.cursor = cursor(markDef, encoding, config);\n }\n\n return markDef;\n}\n\nfunction cursor(markDef: MarkDef<Mark, SignalRef>, encoding: Encoding<string>, config: Config<SignalRef>) {\n if (encoding.href || markDef.href || getMarkPropOrConfig('href', markDef, config)) {\n return 'pointer';\n }\n return markDef.cursor;\n}\n\nfunction opacity(mark: Mark, encoding: Encoding<string>) {\n if (contains([POINT, TICK, CIRCLE, SQUARE], mark)) {\n // point-based marks\n if (!isAggregate(encoding)) {\n return 0.7;\n }\n }\n return undefined;\n}\n\nexport function defaultFilled(markDef: MarkDef, config: Config<SignalRef>, {graticule}: {graticule: boolean}) {\n if (graticule) {\n return false;\n }\n const filledConfig = getMarkConfig('filled', markDef, config);\n const mark = markDef.type;\n return getFirstDefined(filledConfig, mark !== POINT && mark !== LINE && mark !== RULE);\n}\n\nfunction orient(mark: Mark, encoding: Encoding<string>, specifiedOrient: Orientation): Orientation {\n switch (mark) {\n case POINT:\n case CIRCLE:\n case SQUARE:\n case TEXT:\n case RECT:\n case IMAGE:\n // orient is meaningless for these marks.\n return undefined;\n }\n\n const {x, y, x2, y2} = encoding;\n\n switch (mark) {\n case BAR:\n if (isFieldDef(x) && (isBinned(x.bin) || (isFieldDef(y) && y.aggregate && !x.aggregate))) {\n return 'vertical';\n }\n if (isFieldDef(y) && (isBinned(y.bin) || (isFieldDef(x) && x.aggregate && !y.aggregate))) {\n return 'horizontal';\n }\n if (y2 || x2) {\n // Ranged bar does not always have clear orientation, so we allow overriding\n if (specifiedOrient) {\n return specifiedOrient;\n }\n\n // If y is range and x is non-range, non-bin Q\n if (!x2) {\n if ((isFieldDef(x) && x.type === QUANTITATIVE && !isBinning(x.bin)) || isNumericDataDef(x)) {\n if (isFieldDef(y) && isBinned(y.bin)) {\n return 'horizontal';\n }\n }\n return 'vertical';\n }\n\n // If x is range and y is non-range, non-bin Q\n if (!y2) {\n if ((isFieldDef(y) && y.type === QUANTITATIVE && !isBinning(y.bin)) || isNumericDataDef(y)) {\n if (isFieldDef(x) && isBinned(x.bin)) {\n return 'vertical';\n }\n }\n return 'horizontal';\n }\n }\n\n // falls through\n case RULE:\n // return undefined for line segment rule and bar with both axis ranged\n // we have to ignore the case that the data are already binned\n if (x2 && !(isFieldDef(x) && isBinned(x.bin)) && y2 && !(isFieldDef(y) && isBinned(y.bin))) {\n return undefined;\n }\n\n // falls through\n case AREA:\n // If there are range for both x and y, y (vertical) has higher precedence.\n if (y2) {\n if (isFieldDef(y) && isBinned(y.bin)) {\n return 'horizontal';\n } else {\n return 'vertical';\n }\n } else if (x2) {\n if (isFieldDef(x) && isBinned(x.bin)) {\n return 'vertical';\n } else {\n return 'horizontal';\n }\n } else if (mark === RULE) {\n if (x && !y) {\n return 'vertical';\n } else if (y && !x) {\n return 'horizontal';\n }\n }\n\n // falls through\n case LINE:\n case TICK: {\n const xIsMeasure = isUnbinnedQuantitativeFieldOrDatumDef(x);\n const yIsMeasure = isUnbinnedQuantitativeFieldOrDatumDef(y);\n\n if (specifiedOrient) {\n return specifiedOrient;\n } else if (xIsMeasure && !yIsMeasure) {\n // Tick is opposite to bar, line, area\n return mark !== 'tick' ? 'horizontal' : 'vertical';\n } else if (!xIsMeasure && yIsMeasure) {\n // Tick is opposite to bar, line, area\n return mark !== 'tick' ? 'vertical' : 'horizontal';\n } else if (xIsMeasure && yIsMeasure) {\n return 'vertical';\n } else {\n const xIsTemporal = isTypedFieldDef(x) && x.type === TEMPORAL;\n const yIsTemporal = isTypedFieldDef(y) && y.type === TEMPORAL;\n\n // x: T, y: N --> vertical tick\n if (xIsTemporal && !yIsTemporal) {\n return 'vertical';\n } else if (!xIsTemporal && yIsTemporal) {\n return 'horizontal';\n }\n }\n return undefined;\n }\n }\n return 'vertical';\n}\n", "import type {SignalRef} from 'vega';\nimport {isObject} from 'vega-util';\nimport {Config} from '../config';\nimport {Encoding, normalizeEncoding} from '../encoding';\nimport {ExprRef} from '../expr';\nimport {AreaConfig, isMarkDef, LineConfig, Mark, MarkConfig, MarkDef} from '../mark';\nimport {GenericUnitSpec, NormalizedUnitSpec} from '../spec';\nimport {isUnitSpec} from '../spec/unit';\nimport {stack} from '../stack';\nimport {keys, omit, pick} from '../util';\nimport {NonFacetUnitNormalizer, NormalizeLayerOrUnit, NormalizerParams} from './base';\nimport {initMarkdef} from '../compile/mark/init';\n\ntype UnitSpecWithPathOverlay = GenericUnitSpec<Encoding<string>, Mark | MarkDef<'line' | 'area' | 'rule' | 'trail'>>;\n\nfunction dropLineAndPoint(markDef: MarkDef): MarkDef | Mark {\n const {point: _point, line: _line, ...mark} = markDef;\n\n return keys(mark).length > 1 ? mark : mark.type;\n}\n\nfunction dropLineAndPointFromConfig(config: Config<SignalRef>) {\n for (const mark of ['line', 'area', 'rule', 'trail'] as const) {\n if (config[mark]) {\n config = {\n ...config,\n // TODO: remove as any\n [mark]: omit(config[mark], ['point', 'line'] as any)\n };\n }\n }\n return config;\n}\n\nfunction getPointOverlay(\n markDef: MarkDef,\n markConfig: LineConfig<ExprRef | SignalRef> = {},\n encoding: Encoding<string>\n): MarkConfig<ExprRef | SignalRef> {\n if (markDef.point === 'transparent') {\n return {opacity: 0};\n } else if (markDef.point) {\n // truthy : true or object\n return isObject(markDef.point) ? markDef.point : {};\n } else if (markDef.point !== undefined) {\n // false or null\n return null;\n } else {\n // undefined (not disabled)\n if (markConfig.point || encoding.shape) {\n // enable point overlay if config[mark].point is truthy or if encoding.shape is provided\n return isObject(markConfig.point) ? markConfig.point : {};\n }\n // markDef.point is defined as falsy\n return undefined;\n }\n}\n\nfunction getLineOverlay(\n markDef: MarkDef,\n markConfig: AreaConfig<ExprRef | SignalRef> = {}\n): MarkConfig<ExprRef | SignalRef> {\n if (markDef.line) {\n // true or object\n return markDef.line === true ? {} : markDef.line;\n } else if (markDef.line !== undefined) {\n // false or null\n return null;\n } else {\n // undefined (not disabled)\n if (markConfig.line) {\n // enable line overlay if config[mark].line is truthy\n return markConfig.line === true ? {} : markConfig.line;\n }\n // markDef.point is defined as falsy\n return undefined;\n }\n}\n\nexport class PathOverlayNormalizer implements NonFacetUnitNormalizer<UnitSpecWithPathOverlay> {\n public name = 'path-overlay';\n\n public hasMatchingType(spec: GenericUnitSpec<any, Mark | MarkDef>, config: Config): spec is UnitSpecWithPathOverlay {\n if (isUnitSpec(spec)) {\n const {mark, encoding} = spec;\n const markDef = isMarkDef(mark) ? mark : {type: mark};\n switch (markDef.type) {\n case 'line':\n case 'rule':\n case 'trail':\n return !!getPointOverlay(markDef, config[markDef.type], encoding);\n case 'area':\n return (\n // false / null are also included as we want to remove the properties\n !!getPointOverlay(markDef, config[markDef.type], encoding) ||\n !!getLineOverlay(markDef, config[markDef.type])\n );\n }\n }\n return false;\n }\n\n public run(spec: UnitSpecWithPathOverlay, normParams: NormalizerParams, normalize: NormalizeLayerOrUnit) {\n const {config} = normParams;\n const {params, projection, mark, name, encoding: e, ...outerSpec} = spec;\n\n // Need to call normalizeEncoding because we need the inferred types to correctly determine stack\n const encoding = normalizeEncoding(e, config);\n\n const markDef: MarkDef = isMarkDef(mark) ? mark : {type: mark};\n\n const pointOverlay = getPointOverlay(markDef, config[markDef.type], encoding);\n\n const lineOverlay = markDef.type === 'area' && getLineOverlay(markDef, config[markDef.type]);\n\n const layer: NormalizedUnitSpec[] = [\n {\n name,\n ...(params ? {params} : {}),\n mark: dropLineAndPoint({\n // TODO: extract this 0.7 to be shared with default opacity for point/tick/...\n ...(markDef.type === 'area' && markDef.opacity === undefined && markDef.fillOpacity === undefined\n ? {opacity: 0.7}\n : {}),\n ...markDef\n }),\n // drop shape from encoding as this might be used to trigger point overlay\n encoding: omit(encoding, ['shape'])\n }\n ];\n\n // FIXME: determine rules for applying selections.\n\n // Need to copy stack config to overlayed layer\n // FIXME: normalizer shouldn't call `initMarkdef`, a method from an init phase.\n const stackProps = stack(initMarkdef(markDef, encoding, config), encoding);\n\n let overlayEncoding = encoding;\n if (stackProps) {\n const {fieldChannel: stackFieldChannel, offset} = stackProps;\n overlayEncoding = {\n ...encoding,\n [stackFieldChannel]: {\n ...encoding[stackFieldChannel],\n ...(offset ? {stack: offset} : {})\n }\n };\n }\n\n // overlay line layer should be on the edge of area but passing y2/x2 makes\n // it as \"rule\" mark so that it draws unwanted vertical/horizontal lines.\n // point overlay also should not have y2/x2 as it does not support.\n overlayEncoding = omit(overlayEncoding, ['y2', 'x2']);\n\n if (lineOverlay) {\n layer.push({\n ...(projection ? {projection} : {}),\n mark: {\n type: 'line',\n ...pick(markDef, ['clip', 'interpolate', 'tension', 'tooltip']),\n ...lineOverlay\n },\n encoding: overlayEncoding\n });\n }\n if (pointOverlay) {\n layer.push({\n ...(projection ? {projection} : {}),\n mark: {\n type: 'point',\n opacity: 1,\n filled: true,\n ...pick(markDef, ['clip', 'tooltip']),\n ...pointOverlay\n },\n encoding: overlayEncoding\n });\n }\n\n return normalize(\n {\n ...outerSpec,\n layer\n },\n {\n ...normParams,\n config: dropLineAndPointFromConfig(config)\n }\n );\n }\n}\n", "import {isArray} from 'vega-util';\nimport {\n ChannelDef,\n DatumDef,\n Field,\n FieldDef,\n FieldName,\n hasConditionalFieldOrDatumDef,\n isConditionalDef,\n isFieldDef,\n isFieldOrDatumDef,\n isRepeatRef,\n isSortableFieldDef,\n ScaleFieldDef,\n ValueDef\n} from '../channeldef';\nimport {Encoding} from '../encoding';\nimport * as log from '../log';\nimport {isSortField} from '../sort';\nimport {FacetFieldDef, FacetMapping, isFacetMapping} from '../spec/facet';\nimport {hasProperty} from '../util';\n\nexport interface RepeaterValue {\n row?: string;\n column?: string;\n\n repeat?: string;\n\n layer?: string;\n}\n\nexport function replaceRepeaterInFacet(\n facet: FacetFieldDef<Field> | FacetMapping<Field>,\n repeater: RepeaterValue\n): FacetFieldDef<FieldName> | FacetMapping<FieldName> {\n if (!repeater) {\n return facet as FacetFieldDef<FieldName>;\n }\n\n if (isFacetMapping(facet)) {\n return replaceRepeaterInMapping(facet, repeater) as FacetMapping<FieldName>;\n }\n return replaceRepeaterInFieldDef(facet, repeater) as FacetFieldDef<FieldName>;\n}\n\nexport function replaceRepeaterInEncoding<E extends Encoding<Field>>(\n encoding: E,\n repeater: RepeaterValue\n): Encoding<FieldName> {\n if (!repeater) {\n return encoding as Encoding<FieldName>;\n }\n\n return replaceRepeaterInMapping(encoding, repeater) as Encoding<FieldName>;\n}\n\n/**\n * Replaces repeated value and returns if the repeated value is valid.\n */\nfunction replaceRepeatInProp<T>(prop: keyof T, o: T, repeater: RepeaterValue): T {\n const val = o[prop];\n if (isRepeatRef(val)) {\n if (val.repeat in repeater) {\n return {...o, [prop]: repeater[val.repeat]};\n } else {\n log.warn(log.message.noSuchRepeatedValue(val.repeat));\n return undefined;\n }\n }\n return o;\n}\n\n/**\n * Replace repeater values in a field def with the concrete field name.\n */\n\nfunction replaceRepeaterInFieldDef(fieldDef: FieldDef<Field>, repeater: RepeaterValue) {\n fieldDef = replaceRepeatInProp('field', fieldDef, repeater);\n\n if (fieldDef === undefined) {\n // the field def should be ignored\n return undefined;\n } else if (fieldDef === null) {\n return null;\n }\n\n if (isSortableFieldDef(fieldDef) && isSortField(fieldDef.sort)) {\n const sort = replaceRepeatInProp('field', fieldDef.sort, repeater);\n fieldDef = {\n ...fieldDef,\n ...(sort ? {sort} : {})\n };\n }\n\n return fieldDef as ScaleFieldDef<FieldName>;\n}\n\nfunction replaceRepeaterInFieldOrDatumDef(def: FieldDef<Field> | DatumDef<Field>, repeater: RepeaterValue) {\n if (isFieldDef(def)) {\n return replaceRepeaterInFieldDef(def, repeater);\n } else {\n const datumDef = replaceRepeatInProp('datum', def, repeater);\n if (datumDef !== def && !datumDef.type) {\n datumDef.type = 'nominal';\n }\n return datumDef;\n }\n}\n\nfunction replaceRepeaterInChannelDef(channelDef: ChannelDef<Field>, repeater: RepeaterValue) {\n if (isFieldOrDatumDef(channelDef)) {\n const fd = replaceRepeaterInFieldOrDatumDef(channelDef, repeater);\n if (fd) {\n return fd;\n } else if (isConditionalDef<ChannelDef<Field>>(channelDef)) {\n return {condition: channelDef.condition};\n }\n } else {\n if (hasConditionalFieldOrDatumDef(channelDef)) {\n const fd = replaceRepeaterInFieldOrDatumDef(channelDef.condition, repeater);\n if (fd) {\n return {\n ...channelDef,\n condition: fd\n } as ChannelDef;\n } else {\n const {condition, ...channelDefWithoutCondition} = channelDef;\n return channelDefWithoutCondition as ChannelDef;\n }\n }\n return channelDef as ValueDef;\n }\n return undefined;\n}\n\ntype EncodingOrFacet<F extends Field> = Encoding<F> | FacetMapping<F>;\n\nfunction replaceRepeaterInMapping(\n mapping: EncodingOrFacet<Field>,\n repeater: RepeaterValue\n): EncodingOrFacet<FieldName> {\n const out: EncodingOrFacet<FieldName> = {};\n for (const channel in mapping) {\n if (hasProperty(mapping, channel)) {\n const channelDef: ChannelDef<Field> | ChannelDef<Field>[] = mapping[channel];\n\n if (isArray(channelDef)) {\n // array cannot have condition\n (out as any)[channel] = (channelDef as ChannelDef<Field>[]) // somehow we need to cast it here\n .map(cd => replaceRepeaterInChannelDef(cd, repeater))\n .filter(cd => cd);\n } else {\n const cd = replaceRepeaterInChannelDef(channelDef, repeater);\n if (cd !== undefined) {\n (out as any)[channel] = cd;\n }\n }\n }\n }\n return out;\n}\n", "import {isObject} from 'vega-util';\nimport {isBinned} from '../bin';\nimport {getMainRangeChannel, SECONDARY_RANGE_CHANNEL} from '../channel';\nimport {Field, isDatumDef, isFieldDef} from '../channeldef';\nimport {Encoding} from '../encoding';\nimport * as log from '../log';\nimport {isMarkDef} from '../mark';\nimport {GenericSpec} from '../spec';\nimport {GenericUnitSpec, isUnitSpec} from '../spec/unit';\nimport {NonFacetUnitNormalizer, NormalizeLayerOrUnit, NormalizerParams} from './base';\n\ninterface EncodingX2Mixins {\n x2: Encoding<Field>['x2'];\n}\n\ninterface EncodingY2Mixins {\n y2: Encoding<Field>['y2'];\n}\n\ntype RangedLineSpec = GenericUnitSpec<Encoding<Field> & (EncodingX2Mixins | EncodingY2Mixins), 'line' | {mark: 'line'}>;\n\nexport class RuleForRangedLineNormalizer implements NonFacetUnitNormalizer<RangedLineSpec> {\n public name = 'RuleForRangedLine';\n\n public hasMatchingType(spec: GenericSpec<any, any, any, any>): spec is RangedLineSpec {\n if (isUnitSpec(spec)) {\n const {encoding, mark} = spec;\n if (mark === 'line' || (isMarkDef(mark) && mark.type === 'line')) {\n for (const channel of SECONDARY_RANGE_CHANNEL) {\n const mainChannel = getMainRangeChannel(channel);\n const mainChannelDef = encoding[mainChannel];\n\n if (encoding[channel]) {\n if ((isFieldDef(mainChannelDef) && !isBinned(mainChannelDef.bin)) || isDatumDef(mainChannelDef)) {\n return true;\n }\n }\n }\n }\n }\n return false;\n }\n\n public run(spec: RangedLineSpec, params: NormalizerParams, normalize: NormalizeLayerOrUnit) {\n const {encoding, mark} = spec;\n log.warn(log.message.lineWithRange(!!encoding.x2, !!encoding.y2));\n\n return normalize(\n {\n ...spec,\n mark: isObject(mark) ? {...mark, type: 'rule'} : 'rule'\n },\n params\n );\n }\n}\n", "import type {SignalRef} from 'vega';\nimport {isArray} from 'vega-util';\nimport {COLUMN, FACET, ROW} from '../channel';\nimport {Field, FieldName, hasConditionalFieldOrDatumDef, isFieldOrDatumDef, isValueDef} from '../channeldef';\nimport {SharedCompositeEncoding} from '../compositemark';\nimport {boxPlotNormalizer} from '../compositemark/boxplot';\nimport {errorBandNormalizer} from '../compositemark/errorband';\nimport {errorBarNormalizer} from '../compositemark/errorbar';\nimport {channelHasField, Encoding} from '../encoding';\nimport {ExprRef} from '../expr';\nimport * as log from '../log';\nimport {Projection} from '../projection';\nimport {FacetedUnitSpec, GenericSpec, LayerSpec, UnitSpec} from '../spec';\nimport {GenericCompositionLayoutWithColumns} from '../spec/base';\nimport {GenericConcatSpec} from '../spec/concat';\nimport {\n FacetEncodingFieldDef,\n FacetFieldDef,\n FacetMapping,\n GenericFacetSpec,\n isFacetMapping,\n NormalizedFacetSpec\n} from '../spec/facet';\nimport {NormalizedSpec} from '../spec/index';\nimport {NormalizedLayerSpec} from '../spec/layer';\nimport {SpecMapper} from '../spec/map';\nimport {isLayerRepeatSpec, LayerRepeatSpec, NonLayerRepeatSpec, RepeatSpec} from '../spec/repeat';\nimport {isUnitSpec, NormalizedUnitSpec} from '../spec/unit';\nimport {isEmpty, keys, omit, varName} from '../util';\nimport {isSignalRef} from '../vega.schema';\nimport {NonFacetUnitNormalizer, NormalizerParams} from './base';\nimport {PathOverlayNormalizer} from './pathoverlay';\nimport {replaceRepeaterInEncoding, replaceRepeaterInFacet} from './repeater';\nimport {RuleForRangedLineNormalizer} from './ruleforrangedline';\n\nexport class CoreNormalizer extends SpecMapper<NormalizerParams, FacetedUnitSpec<Field>, LayerSpec<Field>> {\n private nonFacetUnitNormalizers: NonFacetUnitNormalizer<any>[] = [\n boxPlotNormalizer,\n errorBarNormalizer,\n errorBandNormalizer,\n new PathOverlayNormalizer(),\n new RuleForRangedLineNormalizer()\n ];\n\n public map(spec: GenericSpec<FacetedUnitSpec<Field>, LayerSpec<Field>, RepeatSpec, Field>, params: NormalizerParams) {\n // Special handling for a faceted unit spec as it can return a facet spec, not just a layer or unit spec like a normal unit spec.\n if (isUnitSpec(spec)) {\n const hasRow = channelHasField(spec.encoding, ROW);\n const hasColumn = channelHasField(spec.encoding, COLUMN);\n const hasFacet = channelHasField(spec.encoding, FACET);\n\n if (hasRow || hasColumn || hasFacet) {\n return this.mapFacetedUnit(spec, params);\n }\n }\n\n return super.map(spec, params);\n }\n\n // This is for normalizing non-facet unit\n public mapUnit(spec: UnitSpec<Field>, params: NormalizerParams): NormalizedUnitSpec | NormalizedLayerSpec {\n const {parentEncoding, parentProjection} = params;\n\n const encoding = replaceRepeaterInEncoding(spec.encoding, params.repeater);\n\n const specWithReplacedEncoding = {\n ...spec,\n ...(spec.name ? {name: [params.repeaterPrefix, spec.name].filter(n => n).join('_')} : {}),\n ...(encoding ? {encoding} : {})\n };\n\n if (parentEncoding || parentProjection) {\n return this.mapUnitWithParentEncodingOrProjection(specWithReplacedEncoding, params);\n }\n\n const normalizeLayerOrUnit = this.mapLayerOrUnit.bind(this);\n\n for (const unitNormalizer of this.nonFacetUnitNormalizers) {\n if (unitNormalizer.hasMatchingType(specWithReplacedEncoding, params.config)) {\n return unitNormalizer.run(specWithReplacedEncoding, params, normalizeLayerOrUnit);\n }\n }\n\n return specWithReplacedEncoding as NormalizedUnitSpec;\n }\n\n protected mapRepeat(\n spec: RepeatSpec,\n params: NormalizerParams\n ): GenericConcatSpec<NormalizedSpec> | NormalizedLayerSpec {\n if (isLayerRepeatSpec(spec)) {\n return this.mapLayerRepeat(spec, params);\n } else {\n return this.mapNonLayerRepeat(spec, params);\n }\n }\n\n private mapLayerRepeat(\n spec: LayerRepeatSpec,\n params: NormalizerParams\n ): GenericConcatSpec<NormalizedSpec> | NormalizedLayerSpec {\n const {repeat, spec: childSpec, ...rest} = spec;\n const {row, column, layer} = repeat;\n\n const {repeater = {}, repeaterPrefix = ''} = params;\n\n if (row || column) {\n return this.mapRepeat(\n {\n ...spec,\n repeat: {\n ...(row ? {row} : {}),\n ...(column ? {column} : {})\n },\n spec: {\n repeat: {layer},\n spec: childSpec\n }\n },\n params\n );\n } else {\n return {\n ...rest,\n layer: layer.map(layerValue => {\n const childRepeater = {\n ...repeater,\n layer: layerValue\n };\n\n const childName = `${(childSpec.name ? `${childSpec.name}_` : '') + repeaterPrefix}child__layer_${varName(\n layerValue\n )}`;\n\n const child = this.mapLayerOrUnit(childSpec, {...params, repeater: childRepeater, repeaterPrefix: childName});\n child.name = childName;\n\n return child;\n })\n };\n }\n }\n\n private mapNonLayerRepeat(spec: NonLayerRepeatSpec, params: NormalizerParams): GenericConcatSpec<NormalizedSpec> {\n const {repeat, spec: childSpec, data, ...remainingProperties} = spec;\n\n if (!isArray(repeat) && spec.columns) {\n // is repeat with row/column\n spec = omit(spec, ['columns']);\n log.warn(log.message.columnsNotSupportByRowCol('repeat'));\n }\n\n const concat: NormalizedSpec[] = [];\n\n const {repeater = {}, repeaterPrefix = ''} = params;\n\n const row = (!isArray(repeat) && repeat.row) || [repeater ? repeater.row : null];\n const column = (!isArray(repeat) && repeat.column) || [repeater ? repeater.column : null];\n\n const repeatValues = (isArray(repeat) && repeat) || [repeater ? repeater.repeat : null];\n\n // cross product\n for (const repeatValue of repeatValues) {\n for (const rowValue of row) {\n for (const columnValue of column) {\n const childRepeater = {\n repeat: repeatValue,\n row: rowValue,\n column: columnValue,\n layer: repeater.layer\n };\n\n const childName =\n (childSpec.name ? `${childSpec.name}_` : '') +\n repeaterPrefix +\n 'child__' +\n (isArray(repeat)\n ? `${varName(repeatValue)}`\n : (repeat.row ? `row_${varName(rowValue)}` : '') +\n (repeat.column ? `column_${varName(columnValue)}` : ''));\n\n const child = this.map(childSpec, {...params, repeater: childRepeater, repeaterPrefix: childName});\n child.name = childName;\n\n // we move data up\n concat.push(omit(child, ['data']) as NormalizedSpec);\n }\n }\n }\n\n const columns = isArray(repeat) ? spec.columns : repeat.column ? repeat.column.length : 1;\n return {\n data: childSpec.data ?? data, // data from child spec should have precedence\n align: 'all',\n ...remainingProperties,\n columns,\n concat\n };\n }\n\n protected mapFacet(\n spec: GenericFacetSpec<UnitSpec<Field>, LayerSpec<Field>, Field>,\n params: NormalizerParams\n ): GenericFacetSpec<NormalizedUnitSpec, NormalizedLayerSpec, FieldName> {\n const {facet} = spec;\n\n if (isFacetMapping(facet) && spec.columns) {\n // is facet with row/column\n spec = omit(spec, ['columns']);\n log.warn(log.message.columnsNotSupportByRowCol('facet'));\n }\n\n return super.mapFacet(spec, params);\n }\n\n private mapUnitWithParentEncodingOrProjection(\n spec: FacetedUnitSpec<Field>,\n params: NormalizerParams\n ): NormalizedUnitSpec | NormalizedLayerSpec {\n const {encoding, projection} = spec;\n const {parentEncoding, parentProjection, config} = params;\n const mergedProjection = mergeProjection({parentProjection, projection});\n const mergedEncoding = mergeEncoding({\n parentEncoding,\n encoding: replaceRepeaterInEncoding(encoding, params.repeater)\n });\n\n return this.mapUnit(\n {\n ...spec,\n ...(mergedProjection ? {projection: mergedProjection} : {}),\n ...(mergedEncoding ? {encoding: mergedEncoding} : {})\n },\n {config}\n );\n }\n\n private mapFacetedUnit(spec: FacetedUnitSpec<Field>, normParams: NormalizerParams): NormalizedFacetSpec {\n // New encoding in the inside spec should not contain row / column\n // as row/column should be moved to facet\n const {row, column, facet, ...encoding} = spec.encoding;\n\n // Mark and encoding should be moved into the inner spec\n const {mark, width, projection, height, view, params, encoding: _, ...outerSpec} = spec;\n\n const {facetMapping, layout} = this.getFacetMappingAndLayout({row, column, facet}, normParams);\n\n const newEncoding = replaceRepeaterInEncoding(encoding, normParams.repeater);\n\n return this.mapFacet(\n {\n ...outerSpec,\n ...layout,\n\n // row / column has higher precedence than facet\n facet: facetMapping,\n spec: {\n ...(width ? {width} : {}),\n ...(height ? {height} : {}),\n ...(view ? {view} : {}),\n ...(projection ? {projection} : {}),\n mark,\n encoding: newEncoding,\n ...(params ? {params} : {})\n }\n },\n normParams\n );\n }\n\n private getFacetMappingAndLayout(\n facets: {\n row: FacetEncodingFieldDef<Field>;\n column: FacetEncodingFieldDef<Field>;\n facet: FacetEncodingFieldDef<Field>;\n },\n params: NormalizerParams\n ): {facetMapping: FacetMapping<FieldName> | FacetFieldDef<FieldName>; layout: GenericCompositionLayoutWithColumns} {\n const {row, column, facet} = facets;\n\n if (row || column) {\n if (facet) {\n log.warn(log.message.facetChannelDropped([...(row ? [ROW] : []), ...(column ? [COLUMN] : [])]));\n }\n\n const facetMapping: any = {};\n const layout: any = {};\n\n for (const channel of [ROW, COLUMN]) {\n const def = facets[channel];\n if (def) {\n const {align, center, spacing, columns, ...defWithoutLayout} = def;\n facetMapping[channel] = defWithoutLayout;\n\n for (const prop of ['align', 'center', 'spacing'] as const) {\n if (def[prop] !== undefined) {\n layout[prop] ??= {};\n layout[prop][channel] = def[prop];\n }\n }\n }\n }\n\n return {facetMapping, layout};\n } else {\n const {align, center, spacing, columns, ...facetMapping} = facet;\n return {\n facetMapping: replaceRepeaterInFacet(facetMapping, params.repeater),\n layout: {\n ...(align ? {align} : {}),\n ...(center ? {center} : {}),\n ...(spacing ? {spacing} : {}),\n ...(columns ? {columns} : {})\n }\n };\n }\n }\n\n public mapLayer(\n spec: LayerSpec<Field>,\n {parentEncoding, parentProjection, ...otherParams}: NormalizerParams\n ): NormalizedLayerSpec {\n // Special handling for extended layer spec\n\n const {encoding, projection, ...rest} = spec;\n const params: NormalizerParams = {\n ...otherParams,\n parentEncoding: mergeEncoding({parentEncoding, encoding, layer: true}),\n parentProjection: mergeProjection({parentProjection, projection})\n };\n return super.mapLayer(\n {\n ...rest,\n ...(spec.name ? {name: [params.repeaterPrefix, spec.name].filter(n => n).join('_')} : {})\n },\n params\n );\n }\n}\n\nfunction mergeEncoding({\n parentEncoding,\n encoding = {},\n layer\n}: {\n parentEncoding: SharedCompositeEncoding<any>;\n encoding: SharedCompositeEncoding<any> | Encoding<any>;\n layer?: boolean;\n}): Encoding<any> {\n let merged: any = {};\n if (parentEncoding) {\n const channels = new Set([...keys(parentEncoding), ...keys(encoding)]);\n for (const channel of channels) {\n const channelDef = (encoding as any)[channel];\n const parentChannelDef = parentEncoding[channel];\n\n if (isFieldOrDatumDef(channelDef)) {\n // Field/Datum Def can inherit properties from its parent\n // Note that parentChannelDef doesn't have to be a field/datum def if the channelDef is already one.\n const mergedChannelDef = {\n ...parentChannelDef,\n ...channelDef\n };\n merged[channel] = mergedChannelDef;\n } else if (hasConditionalFieldOrDatumDef(channelDef)) {\n merged[channel] = {\n ...channelDef,\n condition: {\n ...parentChannelDef,\n ...channelDef.condition\n }\n };\n } else if (channelDef || channelDef === null) {\n merged[channel] = channelDef;\n } else if (\n layer ||\n isValueDef(parentChannelDef) ||\n isSignalRef(parentChannelDef) ||\n isFieldOrDatumDef(parentChannelDef) ||\n isArray(parentChannelDef)\n ) {\n merged[channel] = parentChannelDef;\n }\n }\n } else {\n merged = encoding;\n }\n return !merged || isEmpty(merged) ? undefined : merged;\n}\n\nfunction mergeProjection<ES extends ExprRef | SignalRef>(opt: {\n parentProjection: Projection<ES>;\n projection: Projection<ES>;\n}) {\n const {parentProjection, projection} = opt;\n if (parentProjection && projection) {\n log.warn(log.message.projectionOverridden({parentProjection, projection}));\n }\n return projection ?? parentProjection;\n}\n", "import type {AggregateOp} from 'vega';\nimport {BinParams} from './bin';\nimport {FieldName} from './channeldef';\nimport {Data} from './data';\nimport {ImputeParams} from './impute';\nimport {LogicalComposition, normalizeLogicalComposition} from './logical';\nimport {ParameterName} from './parameter';\nimport {normalizePredicate, Predicate} from './predicate';\nimport {SortField} from './sort';\nimport {TimeUnit, TimeUnitTransformParams} from './timeunit';\nimport {hasProperty} from './util';\n\nexport interface FilterTransform {\n /**\n * The `filter` property must be a predication definition, which can take one of the following forms:\n *\n * 1) an [expression](https://vega.github.io/vega-lite/docs/types.html#expression) string,\n * where `datum` can be used to refer to the current data object.\n * For example, `{filter: \"datum.b2 > 60\"}` would make the output data includes only items that have values in the field `b2` over 60.\n *\n * 2) one of the [field predicates](https://vega.github.io/vega-lite/docs/predicate.html#field-predicate):\n * [`equal`](https://vega.github.io/vega-lite/docs/predicate.html#field-equal-predicate),\n * [`lt`](https://vega.github.io/vega-lite/docs/predicate.html#lt-predicate),\n * [`lte`](https://vega.github.io/vega-lite/docs/predicate.html#lte-predicate),\n * [`gt`](https://vega.github.io/vega-lite/docs/predicate.html#gt-predicate),\n * [`gte`](https://vega.github.io/vega-lite/docs/predicate.html#gte-predicate),\n * [`range`](https://vega.github.io/vega-lite/docs/predicate.html#range-predicate),\n * [`oneOf`](https://vega.github.io/vega-lite/docs/predicate.html#one-of-predicate),\n * or [`valid`](https://vega.github.io/vega-lite/docs/predicate.html#valid-predicate),\n\n * 3) a [selection predicate](https://vega.github.io/vega-lite/docs/predicate.html#selection-predicate), which define the names of a selection that the data point should belong to (or a logical composition of selections).\n *\n * 4) a [logical composition](https://vega.github.io/vega-lite/docs/predicate.html#composition) of (1), (2), or (3).\n */\n filter: LogicalComposition<Predicate>;\n}\n\nexport function isFilter(t: Transform): t is FilterTransform {\n return hasProperty(t, 'filter');\n}\n\nexport interface CalculateTransform {\n /**\n * A [expression](https://vega.github.io/vega-lite/docs/types.html#expression) string. Use the variable `datum` to refer to the current data object.\n */\n calculate: string;\n\n /**\n * The field for storing the computed formula value.\n */\n as: FieldName;\n}\n\nexport interface BinTransform {\n /**\n * An object indicating bin properties, or simply `true` for using default bin parameters.\n */\n bin: true | BinParams;\n\n /**\n * The data field to bin.\n */\n field: FieldName;\n\n /**\n * The output fields at which to write the start and end bin values.\n * This can be either a string or an array of strings with two elements denoting the name for the fields for bin start and bin end respectively.\n * If a single string (e.g., `\"val\"`) is provided, the end field will be `\"val_end\"`.\n */\n as: FieldName | FieldName[];\n}\n\nexport interface TimeUnitTransform {\n /**\n * The timeUnit.\n */\n timeUnit: TimeUnit | TimeUnitTransformParams;\n\n /**\n * The data field to apply time unit.\n */\n field: FieldName;\n\n /**\n * The output field to write the timeUnit value.\n */\n as: FieldName;\n}\n\nexport interface AggregateTransform {\n /**\n * Array of objects that define fields to aggregate.\n */\n aggregate: AggregatedFieldDef[];\n\n /**\n * The data fields to group by. If not specified, a single group containing all data objects will be used.\n */\n groupby?: FieldName[];\n}\n\nexport interface AggregatedFieldDef {\n /**\n * The aggregation operation to apply to the fields (e.g., `\"sum\"`, `\"average\"`, or `\"count\"`).\n * See the [full list of supported aggregation operations](https://vega.github.io/vega-lite/docs/aggregate.html#ops)\n * for more information.\n */\n op: AggregateOp;\n\n /**\n * The data field for which to compute aggregate function. This is required for all aggregation operations except `\"count\"`.\n */\n field?: FieldName;\n\n /**\n * The output field names to use for each aggregated field.\n */\n as: FieldName;\n}\n\nexport interface StackTransform {\n /**\n * The field which is stacked.\n */\n stack: FieldName;\n /**\n * The data fields to group by.\n */\n groupby: FieldName[];\n /**\n * Mode for stacking marks. One of `\"zero\"` (default), `\"center\"`, or `\"normalize\"`.\n * The `\"zero\"` offset will stack starting at `0`. The `\"center\"` offset will center the stacks. The `\"normalize\"` offset will compute percentage values for each stack point, with output values in the range `[0,1]`.\n *\n * __Default value:__ `\"zero\"`\n */\n offset?: 'zero' | 'center' | 'normalize';\n /**\n * Field that determines the order of leaves in the stacked charts.\n */\n sort?: SortField[];\n /**\n * Output field names. This can be either a string or an array of strings with two elements denoting the name for the fields for stack start and stack end respectively.\n * If a single string(e.g., `\"val\"`) is provided, the end field will be `\"val_end\"`.\n */\n as: FieldName | [FieldName, FieldName];\n}\n\nexport type WindowOnlyOp =\n | 'row_number'\n | 'rank'\n | 'dense_rank'\n | 'percent_rank'\n | 'cume_dist'\n | 'ntile'\n | 'lag'\n | 'lead'\n | 'first_value'\n | 'last_value'\n | 'nth_value';\n\nexport interface WindowFieldDef {\n /**\n * The window or aggregation operation to apply within a window (e.g., `\"rank\"`, `\"lead\"`, `\"sum\"`, `\"average\"` or `\"count\"`). See the list of all supported operations [here](https://vega.github.io/vega-lite/docs/window.html#ops).\n */\n op: AggregateOp | WindowOnlyOp;\n\n /**\n * Parameter values for the window functions. Parameter values can be omitted for operations that do not accept a parameter.\n *\n * See the list of all supported operations and their parameters [here](https://vega.github.io/vega-lite/docs/transforms/window.html).\n */\n param?: number;\n\n /**\n * The data field for which to compute the aggregate or window function. This can be omitted for window functions that do not operate over a field such as `\"count\"`, `\"rank\"`, `\"dense_rank\"`.\n */\n field?: FieldName;\n\n /**\n * The output name for the window operation.\n */\n as: FieldName;\n}\n\nexport interface WindowTransform {\n /**\n * The definition of the fields in the window, and what calculations to use.\n */\n window: WindowFieldDef[];\n\n /**\n * A frame specification as a two-element array indicating how the sliding window should proceed. The array entries should either be a number indicating the offset from the current data object, or null to indicate unbounded rows preceding or following the current data object. The default value is `[null, 0]`, indicating that the sliding window includes the current object and all preceding objects. The value `[-5, 5]` indicates that the window should include five objects preceding and five objects following the current object. Finally, `[null, null]` indicates that the window frame should always include all data objects. If you this frame and want to assign the same value to add objects, you can use the simpler [join aggregate transform](https://vega.github.io/vega-lite/docs/joinaggregate.html). The only operators affected are the aggregation operations and the `first_value`, `last_value`, and `nth_value` window operations. The other window operations are not affected by this.\n *\n * __Default value:__: `[null, 0]` (includes the current object and all preceding objects)\n */\n frame?: (null | number)[];\n\n /**\n * Indicates if the sliding window frame should ignore peer values (data that are considered identical by the sort criteria). The default is false, causing the window frame to expand to include all peer values. If set to true, the window frame will be defined by offset values only. This setting only affects those operations that depend on the window frame, namely aggregation operations and the first_value, last_value, and nth_value window operations.\n *\n * __Default value:__ `false`\n */\n ignorePeers?: boolean;\n\n /**\n * The data fields for partitioning the data objects into separate windows. If unspecified, all data points will be in a single window.\n */\n groupby?: FieldName[];\n\n /**\n * A sort field definition for sorting data objects within a window. If two data objects are considered equal by the comparator, they are considered \"peer\" values of equal rank. If sort is not specified, the order is undefined: data objects are processed in the order they are observed and none are considered peers (the ignorePeers parameter is ignored and treated as if set to `true`).\n */\n sort?: SortField[];\n}\n\nexport interface JoinAggregateFieldDef {\n /**\n * The aggregation operation to apply (e.g., `\"sum\"`, `\"average\"` or `\"count\"`). See the list of all supported operations [here](https://vega.github.io/vega-lite/docs/aggregate.html#ops).\n */\n op: AggregateOp;\n\n /**\n * The data field for which to compute the aggregate function. This can be omitted for functions that do not operate over a field such as `\"count\"`.\n */\n field?: FieldName;\n\n /**\n * The output name for the join aggregate operation.\n */\n as: FieldName;\n}\n\nexport interface JoinAggregateTransform {\n /**\n * The definition of the fields in the join aggregate, and what calculations to use.\n */\n joinaggregate: JoinAggregateFieldDef[];\n\n /**\n * The data fields for partitioning the data objects into separate groups. If unspecified, all data points will be in a single group.\n */\n groupby?: FieldName[];\n}\n\nexport interface ImputeSequence {\n /**\n * The starting value of the sequence.\n * __Default value:__ `0`\n */\n start?: number;\n /**\n * The ending value(exclusive) of the sequence.\n */\n stop: number;\n /**\n * The step value between sequence entries.\n * __Default value:__ `1` or `-1` if `stop < start`\n */\n step?: number;\n}\n\nexport function isImputeSequence(t: ImputeSequence | any[] | undefined): t is ImputeSequence {\n return hasProperty(t, 'stop');\n}\n\nexport interface ImputeTransform extends ImputeParams {\n /**\n * The data field for which the missing values should be imputed.\n */\n impute: FieldName;\n\n /**\n * A key field that uniquely identifies data objects within a group.\n * Missing key values (those occurring in the data but not in the current group) will be imputed.\n */\n key: FieldName;\n\n /**\n * An optional array of fields by which to group the values.\n * Imputation will then be performed on a per-group basis.\n */\n groupby?: FieldName[];\n}\n\nexport interface FlattenTransform {\n /**\n * An array of one or more data fields containing arrays to flatten.\n * If multiple fields are specified, their array values should have a parallel structure, ideally with the same length.\n * If the lengths of parallel arrays do not match,\n * the longest array will be used with `null` values added for missing entries.\n */\n flatten: FieldName[];\n\n /**\n * The output field names for extracted array values.\n *\n * __Default value:__ The field name of the corresponding array field\n */\n as?: FieldName[];\n}\n\nexport interface SampleTransform {\n /**\n * The maximum number of data objects to include in the sample.\n *\n * __Default value:__ `1000`\n */\n sample: number;\n}\n\nexport interface LookupBase {\n /**\n * Key in data to lookup.\n */\n key: FieldName;\n /**\n * Fields in foreign data or selection to lookup.\n * If not specified, the entire object is queried.\n */\n fields?: FieldName[];\n}\n\nexport interface LookupData extends LookupBase {\n /**\n * Secondary data source to lookup in.\n */\n data: Data;\n}\n\nexport interface LookupSelection extends LookupBase {\n /**\n * Selection parameter name to look up.\n */\n param: ParameterName;\n}\n\nexport interface LookupTransform {\n /**\n * Key in primary data source.\n */\n lookup: string;\n\n /**\n * The output fields on which to store the looked up data values.\n *\n * For data lookups, this property may be left blank if `from.fields`\n * has been specified (those field names will be used); if `from.fields`\n * has not been specified, `as` must be a string.\n *\n * For selection lookups, this property is optional: if unspecified,\n * looked up values will be stored under a property named for the selection;\n * and if specified, it must correspond to `from.fields`.\n */\n as?: FieldName | FieldName[];\n\n /**\n * The default value to use if lookup fails.\n *\n * __Default value:__ `null`\n */\n default?: any;\n\n /**\n * Data source or selection for secondary data reference.\n */\n from: LookupData | LookupSelection;\n}\n\nexport function isLookup(t: Transform): t is LookupTransform {\n return hasProperty(t, 'lookup');\n}\n\nexport function isLookupData(from: LookupData | LookupSelection): from is LookupData {\n return hasProperty(from, 'data');\n}\n\nexport function isLookupSelection(from: LookupData | LookupSelection): from is LookupSelection {\n return hasProperty(from, 'param');\n}\n\nexport interface FoldTransform {\n /**\n * An array of data fields indicating the properties to fold.\n */\n fold: FieldName[];\n\n /**\n * The output field names for the key and value properties produced by the fold transform.\n * __Default value:__ `[\"key\", \"value\"]`\n */\n as?: [FieldName, FieldName];\n}\n\nexport interface ExtentTransform {\n /**\n * The field of which to get the extent.\n */\n extent: FieldName;\n\n /**\n * The output parameter produced by the extent transform.\n */\n param: ParameterName;\n}\n\nexport interface PivotTransform {\n /**\n * The data field to pivot on. The unique values of this field become new field names in the output stream.\n */\n pivot: FieldName;\n\n /**\n * The data field to populate pivoted fields. The aggregate values of this field become the values of the new pivoted fields.\n */\n value: FieldName;\n\n /**\n * The optional data fields to group by. If not specified, a single group containing all data objects will be used.\n */\n groupby?: FieldName[];\n\n /**\n * An optional parameter indicating the maximum number of pivoted fields to generate.\n * The default (`0`) applies no limit. The pivoted `pivot` names are sorted in ascending order prior to enforcing the limit.\n * __Default value:__ `0`\n */\n limit?: number;\n\n /**\n * The aggregation operation to apply to grouped `value` field values.\n * __Default value:__ `sum`\n */\n op?: AggregateOp;\n}\n\nexport function isPivot(t: Transform): t is PivotTransform {\n return hasProperty(t, 'pivot');\n}\n\nexport interface DensityTransform {\n /**\n * The data field for which to perform density estimation.\n */\n density: FieldName;\n\n /**\n * The data fields to group by. If not specified, a single group containing all data objects will be used.\n */\n groupby?: FieldName[];\n\n /**\n * A boolean flag indicating whether to produce density estimates (false) or cumulative density estimates (true).\n *\n * __Default value:__ `false`\n */\n cumulative?: boolean;\n\n /**\n * A boolean flag indicating if the output values should be probability estimates (false) or smoothed counts (true).\n *\n * __Default value:__ `false`\n */\n counts?: boolean;\n\n /**\n * The bandwidth (standard deviation) of the Gaussian kernel. If unspecified or set to zero, the bandwidth value is automatically estimated from the input data using Scott\u2019s rule.\n */\n bandwidth?: number;\n\n /**\n * A [min, max] domain from which to sample the distribution. If unspecified, the extent will be determined by the observed minimum and maximum values of the density value field.\n */\n extent?: [number, number];\n\n /**\n * The minimum number of samples to take along the extent domain for plotting the density.\n *\n * __Default value:__ `25`\n */\n minsteps?: number;\n\n /**\n * The maximum number of samples to take along the extent domain for plotting the density.\n *\n * __Default value:__ `200`\n */\n maxsteps?: number;\n\n /**\n * The exact number of samples to take along the extent domain for plotting the density. If specified, overrides both minsteps and maxsteps to set an exact number of uniform samples. Potentially useful in conjunction with a fixed extent to ensure consistent sample points for stacked densities.\n */\n steps?: number;\n\n /**\n * The output fields for the sample value and corresponding density estimate.\n *\n * __Default value:__ `[\"value\", \"density\"]`\n */\n as?: [FieldName, FieldName];\n /**\n * Indicates how parameters for multiple densities should be resolved.\n * If `\"independent\"`, each density may have its own domain extent and dynamic number of curve sample steps.\n * If `\"shared\"`, the KDE transform will ensure that all densities are defined over a shared domain and curve steps, enabling stacking.\n *\n * __Default value:__ `\"shared\"`\n */\n resolve?: 'independent' | 'shared';\n}\n\nexport function isDensity(t: Transform): t is DensityTransform {\n return hasProperty(t, 'density');\n}\n\nexport interface QuantileTransform {\n /**\n * The data field for which to perform quantile estimation.\n */\n quantile: FieldName;\n\n /**\n * The data fields to group by. If not specified, a single group containing all data objects will be used.\n */\n groupby?: FieldName[];\n\n /**\n * An array of probabilities in the range (0, 1) for which to compute quantile values. If not specified, the *step* parameter will be used.\n */\n probs?: number[];\n\n /**\n * A probability step size (default 0.01) for sampling quantile values. All values from one-half the step size up to 1 (exclusive) will be sampled. This parameter is only used if the *probs* parameter is not provided.\n */\n step?: number;\n\n /**\n * The output field names for the probability and quantile values.\n *\n * __Default value:__ `[\"prob\", \"value\"]`\n */\n as?: [FieldName, FieldName];\n}\n\nexport function isQuantile(t: Transform): t is QuantileTransform {\n return hasProperty(t, 'quantile');\n}\n\nexport interface RegressionTransform {\n /**\n * The data field of the dependent variable to predict.\n */\n regression: FieldName;\n\n /**\n * The data field of the independent variable to use a predictor.\n */\n on: FieldName;\n\n /**\n * The data fields to group by. If not specified, a single group containing all data objects will be used.\n */\n groupby?: FieldName[];\n\n /**\n * The functional form of the regression model. One of `\"linear\"`, `\"log\"`, `\"exp\"`, `\"pow\"`, `\"quad\"`, or `\"poly\"`.\n *\n * __Default value:__ `\"linear\"`\n */\n method?: 'linear' | 'log' | 'exp' | 'pow' | 'quad' | 'poly';\n\n /**\n * The polynomial order (number of coefficients) for the 'poly' method.\n *\n * __Default value:__ `3`\n */\n order?: number;\n\n /**\n * A [min, max] domain over the independent (x) field for the starting and ending points of the generated trend line.\n */\n extent?: [number, number];\n\n /**\n * A boolean flag indicating if the transform should return the regression model parameters (one object per group), rather than trend line points.\n * The resulting objects include a `coef` array of fitted coefficient values (starting with the intercept term and then including terms of increasing order)\n * and an `rSquared` value (indicating the total variance explained by the model).\n *\n * __Default value:__ `false`\n */\n params?: boolean;\n\n /**\n * The output field names for the smoothed points generated by the regression transform.\n *\n * __Default value:__ The field names of the input x and y values.\n */\n as?: [FieldName, FieldName];\n}\n\nexport function isRegression(t: Transform): t is RegressionTransform {\n return hasProperty(t, 'regression');\n}\n\nexport interface LoessTransform {\n /**\n * The data field of the dependent variable to smooth.\n */\n loess: FieldName;\n\n /**\n * The data field of the independent variable to use a predictor.\n */\n on: FieldName;\n\n /**\n * The data fields to group by. If not specified, a single group containing all data objects will be used.\n */\n groupby?: FieldName[];\n\n /**\n * A bandwidth parameter in the range `[0, 1]` that determines the amount of smoothing.\n *\n * __Default value:__ `0.3`\n */\n bandwidth?: number;\n\n /**\n * The output field names for the smoothed points generated by the loess transform.\n *\n * __Default value:__ The field names of the input x and y values.\n */\n as?: [FieldName, FieldName];\n}\n\nexport function isLoess(t: Transform): t is LoessTransform {\n return hasProperty(t, 'loess');\n}\n\nexport function isSample(t: Transform): t is SampleTransform {\n return hasProperty(t, 'sample');\n}\n\nexport function isWindow(t: Transform): t is WindowTransform {\n return hasProperty(t, 'window');\n}\n\nexport function isJoinAggregate(t: Transform): t is JoinAggregateTransform {\n return hasProperty(t, 'joinaggregate');\n}\n\nexport function isFlatten(t: Transform): t is FlattenTransform {\n return hasProperty(t, 'flatten');\n}\nexport function isCalculate(t: Transform): t is CalculateTransform {\n return hasProperty(t, 'calculate');\n}\n\nexport function isBin(t: Transform): t is BinTransform {\n return hasProperty(t, 'bin');\n}\n\nexport function isImpute(t: Transform): t is ImputeTransform {\n return hasProperty(t, 'impute');\n}\n\nexport function isTimeUnit(t: Transform): t is TimeUnitTransform {\n return hasProperty(t, 'timeUnit');\n}\n\nexport function isAggregate(t: Transform): t is AggregateTransform {\n return hasProperty(t, 'aggregate');\n}\n\nexport function isStack(t: Transform): t is StackTransform {\n return hasProperty(t, 'stack');\n}\n\nexport function isFold(t: Transform): t is FoldTransform {\n return hasProperty(t, 'fold');\n}\n\nexport function isExtent(t: Transform): t is ExtentTransform {\n return hasProperty(t, 'extent') && !hasProperty(t, 'density') && !hasProperty(t, 'regression');\n}\nexport type Transform =\n | AggregateTransform\n | BinTransform\n | CalculateTransform\n | DensityTransform\n | ExtentTransform\n | FilterTransform\n | FlattenTransform\n | FoldTransform\n | ImputeTransform\n | JoinAggregateTransform\n | LoessTransform\n | LookupTransform\n | QuantileTransform\n | RegressionTransform\n | TimeUnitTransform\n | SampleTransform\n | StackTransform\n | WindowTransform\n | PivotTransform;\n\nexport function normalizeTransform(transform: Transform[]) {\n return transform.map(t => {\n if (isFilter(t)) {\n return {\n filter: normalizeLogicalComposition(t.filter, normalizePredicate)\n };\n }\n return t;\n });\n}\n", "import {isArray} from 'vega-util';\nimport {BinParams, isBinParams} from '../bin';\nimport {ChannelDef, Field, isConditionalDef, isFieldDef, isScaleFieldDef} from '../channeldef';\nimport {Encoding} from '../encoding';\nimport {LogicalComposition, normalizeLogicalComposition} from '../logical';\nimport {FacetedUnitSpec, GenericSpec, LayerSpec, RepeatSpec, UnitSpec} from '../spec';\nimport {SpecMapper} from '../spec/map';\nimport {isBin, isFilter, isLookup} from '../transform';\nimport {duplicate, entries, vals} from '../util';\nimport {NormalizerParams} from './base';\n\nexport class SelectionCompatibilityNormalizer extends SpecMapper<\n NormalizerParams,\n FacetedUnitSpec<Field>,\n LayerSpec<Field>,\n UnitSpec<Field>\n> {\n public map(\n spec: GenericSpec<FacetedUnitSpec<Field>, LayerSpec<Field>, RepeatSpec, Field>,\n normParams: NormalizerParams\n ) {\n normParams.emptySelections ??= {};\n normParams.selectionPredicates ??= {};\n spec = normalizeTransforms(spec, normParams);\n return super.map(spec, normParams);\n }\n\n public mapLayerOrUnit(spec: FacetedUnitSpec<Field> | LayerSpec<Field>, normParams: NormalizerParams) {\n spec = normalizeTransforms(spec, normParams);\n\n if (spec.encoding) {\n const encoding: Encoding<any> = {};\n for (const [channel, enc] of entries(spec.encoding)) {\n (encoding as any)[channel] = normalizeChannelDef(enc, normParams);\n }\n\n spec = {...spec, encoding};\n }\n\n return super.mapLayerOrUnit(spec, normParams);\n }\n\n public mapUnit(spec: UnitSpec<Field>, normParams: NormalizerParams) {\n const {selection, ...rest} = spec as any;\n if (selection) {\n return {\n ...rest,\n params: entries(selection).map(([name, selDef]) => {\n const {init: value, bind, empty, ...select} = selDef as any;\n if (select.type === 'single') {\n select.type = 'point';\n select.toggle = false;\n } else if (select.type === 'multi') {\n select.type = 'point';\n }\n\n // Propagate emptiness forwards and backwards\n (normParams.emptySelections as any)[name] = empty !== 'none';\n for (const pred of vals((normParams.selectionPredicates as any)[name] ?? {})) {\n pred.empty = empty !== 'none';\n }\n\n return {name, value, select, bind};\n })\n };\n }\n\n return spec;\n }\n}\n\nfunction normalizeTransforms(spec: any, normParams: NormalizerParams) {\n const {transform: tx, ...rest} = spec;\n if (tx) {\n const transform = tx.map((t: any) => {\n if (isFilter(t)) {\n return {filter: normalizePredicate(t, normParams)};\n } else if (isBin(t) && isBinParams(t.bin)) {\n return {\n ...t,\n bin: normalizeBinExtent(t.bin)\n };\n } else if (isLookup(t)) {\n const {selection: param, ...from} = t.from as any;\n return param\n ? {\n ...t,\n from: {param, ...from}\n }\n : t;\n }\n return t;\n });\n\n return {...rest, transform};\n }\n\n return spec;\n}\n\nfunction normalizeChannelDef(obj: any, normParams: NormalizerParams): ChannelDef {\n const enc = duplicate(obj);\n\n if (isFieldDef(enc) && isBinParams(enc.bin)) {\n enc.bin = normalizeBinExtent(enc.bin);\n }\n\n if (isScaleFieldDef(enc) && (enc.scale?.domain as any)?.selection) {\n const {selection: param, ...domain} = enc.scale.domain as any;\n enc.scale.domain = {...domain, ...(param ? {param} : {})};\n }\n\n if (isConditionalDef(enc)) {\n if (isArray(enc.condition)) {\n enc.condition = enc.condition.map((c: any) => {\n const {selection, param, test, ...cond} = c;\n return param ? c : {...cond, test: normalizePredicate(c, normParams)};\n });\n } else {\n const {selection, param, test, ...cond} = normalizeChannelDef(enc.condition, normParams) as any;\n enc.condition = param\n ? enc.condition\n : {\n ...cond,\n test: normalizePredicate(enc.condition, normParams)\n };\n }\n }\n\n return enc;\n}\n\nfunction normalizeBinExtent(bin: BinParams): BinParams {\n const ext = bin.extent as any;\n if (ext?.selection) {\n const {selection: param, ...rest} = ext;\n return {...bin, extent: {...rest, param}};\n }\n\n return bin;\n}\n\nfunction normalizePredicate(op: any, normParams: NormalizerParams) {\n // Normalize old compositions of selection names (e.g., selection: {and: [\"one\", \"two\"]})\n const normalizeSelectionComposition = (o: LogicalComposition<string>) => {\n return normalizeLogicalComposition(o, param => {\n const empty = normParams.emptySelections[param] ?? true;\n const pred = {param, empty};\n normParams.selectionPredicates[param] ??= [];\n normParams.selectionPredicates[param].push(pred);\n return pred as any;\n });\n };\n\n return op.selection\n ? normalizeSelectionComposition(op.selection)\n : normalizeLogicalComposition(op.test || op.filter, o =>\n o.selection ? normalizeSelectionComposition(o.selection) : o\n );\n}\n", "import {isArray, isString} from 'vega-util';\nimport {Field} from '../channeldef';\nimport {VariableParameter} from '../parameter';\nimport {isSelectionParameter, SelectionParameter} from '../selection';\nimport {\n BaseSpec,\n isUnitSpec,\n NormalizedLayerSpec,\n NormalizedSpec,\n NormalizedUnitSpec,\n TopLevel,\n UnitSpec\n} from '../spec';\nimport {SpecMapper} from '../spec/map';\nimport {NormalizerParams} from './base';\n\nexport class TopLevelSelectionsNormalizer extends SpecMapper<NormalizerParams, NormalizedUnitSpec> {\n public map(spec: TopLevel<NormalizedSpec>, normParams: NormalizerParams): TopLevel<NormalizedSpec> {\n const selections = normParams.selections ?? [];\n if (spec.params && !isUnitSpec(spec)) {\n const params: VariableParameter[] = [];\n for (const param of spec.params) {\n if (isSelectionParameter(param)) {\n selections.push(param);\n } else {\n params.push(param);\n }\n }\n\n spec.params = params;\n }\n\n normParams.selections = selections;\n return super.map(spec, normParams);\n }\n\n public mapUnit(spec: UnitSpec<Field>, normParams: NormalizerParams): NormalizedUnitSpec | NormalizedLayerSpec {\n const selections = normParams.selections;\n if (!selections || !selections.length) return spec as NormalizedUnitSpec;\n\n const path = (normParams.path ?? []).concat(spec.name);\n const params: SelectionParameter[] = [];\n\n for (const selection of selections) {\n // By default, apply selections to all unit views.\n if (!selection.views || !selection.views.length) {\n params.push(selection);\n } else {\n for (const view of selection.views) {\n // view is either a specific unit name, or a partial path through the spec tree.\n if (\n (isString(view) && (view === spec.name || path.includes(view))) ||\n (isArray(view) &&\n // logic for backwards compatibility with view paths before we had unique names\n // @ts-ignore\n view.map(v => path.indexOf(v)).every((v, i, arr) => v !== -1 && (i === 0 || v > arr[i - 1])))\n ) {\n params.push(selection);\n }\n }\n }\n }\n\n if (params.length) spec.params = params;\n return spec as NormalizedUnitSpec;\n }\n}\n\nfor (const method of ['mapFacet', 'mapRepeat', 'mapHConcat', 'mapVConcat', 'mapLayer'] as const) {\n const proto = TopLevelSelectionsNormalizer.prototype[method];\n TopLevelSelectionsNormalizer.prototype[method] = function (spec: BaseSpec, params: NormalizerParams) {\n return proto.call(this, spec, addSpecNameToParams(spec, params));\n };\n}\n\nfunction addSpecNameToParams(spec: BaseSpec, params: NormalizerParams) {\n return spec.name\n ? {\n ...params,\n path: (params.path ?? []).concat(spec.name)\n }\n : params;\n}\n", "import type {SignalRef} from 'vega';\nimport {isString} from 'vega-util';\nimport {Field} from '../channeldef';\nimport {Config, initConfig} from '../config';\nimport * as log from '../log';\nimport {\n FacetedUnitSpec,\n isLayerSpec,\n isUnitSpec,\n LayoutSizeMixins,\n NonNormalizedSpec,\n NormalizedSpec,\n RepeatSpec,\n TopLevelSpec\n} from '../spec';\nimport {AutoSizeParams, AutosizeType, TopLevel} from '../spec/toplevel';\nimport {deepEqual} from '../util';\nimport {NormalizerParams} from './base';\nimport {CoreNormalizer} from './core';\nimport {SelectionCompatibilityNormalizer} from './selectioncompat';\nimport {TopLevelSelectionsNormalizer} from './toplevelselection';\n\nexport function normalize(\n spec: TopLevelSpec & LayoutSizeMixins,\n config?: Config<SignalRef>\n): TopLevel<NormalizedSpec> & LayoutSizeMixins {\n if (config === undefined) {\n config = initConfig(spec.config);\n }\n\n const normalizedSpec = normalizeGenericSpec(spec, config);\n\n const {width, height} = spec;\n const autosize = normalizeAutoSize(normalizedSpec, {width, height, autosize: spec.autosize}, config);\n\n return {\n ...normalizedSpec,\n ...(autosize ? {autosize} : {})\n };\n}\n\nconst coreNormalizer = new CoreNormalizer();\nconst selectionCompatNormalizer = new SelectionCompatibilityNormalizer();\nconst topLevelSelectionNormalizer = new TopLevelSelectionsNormalizer();\n\n/**\n * Decompose extended unit specs into composition of pure unit specs.\n * And push top-level selection definitions down to unit specs.\n */\nfunction normalizeGenericSpec(\n spec: NonNormalizedSpec | FacetedUnitSpec<Field, any> | RepeatSpec,\n config: Config<SignalRef> = {}\n) {\n const normParams = {config};\n return topLevelSelectionNormalizer.map(\n coreNormalizer.map(selectionCompatNormalizer.map(spec, normParams), normParams),\n normParams\n );\n}\n\nfunction _normalizeAutoSize(autosize: AutosizeType | AutoSizeParams) {\n return isString(autosize) ? {type: autosize} : (autosize ?? {});\n}\n\n/**\n * Normalize autosize and deal with width or height == \"container\".\n */\nexport function normalizeAutoSize(\n spec: TopLevel<NormalizedSpec>,\n sizeInfo: {autosize: AutosizeType | AutoSizeParams} & LayoutSizeMixins,\n config?: Config\n) {\n let {width, height} = sizeInfo;\n\n const isFitCompatible = isUnitSpec(spec) || isLayerSpec(spec);\n const autosizeDefault: AutoSizeParams = {};\n\n if (!isFitCompatible) {\n // If spec is not compatible with autosize == \"fit\", discard width/height == container\n if (width == 'container') {\n log.warn(log.message.containerSizeNonSingle('width'));\n width = undefined;\n }\n if (height == 'container') {\n log.warn(log.message.containerSizeNonSingle('height'));\n height = undefined;\n }\n } else {\n // Default autosize parameters to fit when width/height is \"container\"\n if (width == 'container' && height == 'container') {\n autosizeDefault.type = 'fit';\n autosizeDefault.contains = 'padding';\n } else if (width == 'container') {\n autosizeDefault.type = 'fit-x';\n autosizeDefault.contains = 'padding';\n } else if (height == 'container') {\n autosizeDefault.type = 'fit-y';\n autosizeDefault.contains = 'padding';\n }\n }\n\n const autosize: AutoSizeParams = {\n type: 'pad',\n ...autosizeDefault,\n ...(config ? _normalizeAutoSize(config.autosize) : {}),\n ..._normalizeAutoSize(spec.autosize)\n };\n\n if (autosize.type === 'fit' && !isFitCompatible) {\n log.warn(log.message.FIT_NON_SINGLE);\n autosize.type = 'pad';\n }\n\n if (width == 'container' && !(autosize.type == 'fit' || autosize.type == 'fit-x')) {\n log.warn(log.message.containerSizeNotCompatibleWithAutosize('width'));\n }\n if (height == 'container' && !(autosize.type == 'fit' || autosize.type == 'fit-y')) {\n log.warn(log.message.containerSizeNotCompatibleWithAutosize('height'));\n }\n\n // Delete autosize property if it's Vega's default\n if (deepEqual(autosize, {type: 'pad'})) {\n return undefined;\n }\n\n return autosize;\n}\n\nexport type {NormalizerParams};\n", "import type {Color, SignalRef} from 'vega';\nimport {BaseSpec} from '.';\nimport {getPositionScaleChannel} from '../channel';\nimport {signalRefOrValue} from '../compile/common';\nimport {Config} from '../config';\nimport {InlineDataset} from '../data';\nimport {ExprRef} from '../expr';\nimport {VariableParameter} from '../parameter';\nimport {TopLevelSelectionParameter} from '../selection';\nimport {Dict} from '../util';\n\n/**\n * @minimum 0\n */\nexport type Padding = number | {top?: number; bottom?: number; left?: number; right?: number};\n\nexport type Datasets = Dict<InlineDataset>;\n\nexport type TopLevelParameter = VariableParameter | TopLevelSelectionParameter;\n\nexport type TopLevel<S extends BaseSpec> = S &\n TopLevelProperties & {\n /**\n * URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you have a reason to change this, use `https://vega.github.io/schema/vega-lite/v5.json`. Setting the `$schema` property allows automatic validation and autocomplete in editors that support JSON schema.\n * @format uri\n */\n $schema?: string;\n\n /**\n * Vega-Lite configuration object. This property can only be defined at the top-level of a specification.\n */\n config?: Config;\n\n /**\n * A global data store for named datasets. This is a mapping from names to inline datasets.\n * This can be an array of objects or primitive values or a string. Arrays of primitive values are ingested as objects with a `data` property.\n */\n datasets?: Datasets;\n\n /**\n * Optional metadata that will be passed to Vega.\n * This object is completely ignored by Vega and Vega-Lite and can be used for custom metadata.\n */\n usermeta?: Dict<unknown>;\n };\n\n/**\n * Shared properties between Top-Level specs and Config\n */\nexport interface TopLevelProperties<ES extends ExprRef | SignalRef = ExprRef | SignalRef> {\n /**\n * CSS color property to use as the background of the entire view.\n *\n * __Default value:__ `\"white\"`\n */\n background?: Color | ES;\n\n /**\n * The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides.\n * If an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n *\n * __Default value__: `5`\n */\n padding?: Padding | ES;\n\n /**\n * How the visualization size should be determined. If a string, should be one of `\"pad\"`, `\"fit\"` or `\"none\"`.\n * Object values can additionally specify parameters for content sizing and automatic resizing.\n *\n * __Default value__: `pad`\n */\n autosize?: AutosizeType | AutoSizeParams; // Vega actually supports signal for autosize. However, we need to check autosize at compile time to infer the rest of the spec. Thus VL's autosize won't support SignalRef for now.\n\n /**\n * Dynamic variables or selections that parameterize a visualization.\n */\n params?: TopLevelParameter[];\n}\n\nexport type FitType = 'fit' | 'fit-x' | 'fit-y';\n\nexport function isFitType(autoSizeType: AutosizeType): autoSizeType is FitType {\n return ['fit', 'fit-x', 'fit-y'].includes(autoSizeType);\n}\n\nexport function getFitType(sizeType?: 'width' | 'height'): FitType {\n return sizeType ? (`fit-${getPositionScaleChannel(sizeType)}` as FitType) : 'fit';\n}\n\nexport type AutosizeType = 'pad' | 'none' | 'fit' | 'fit-x' | 'fit-y';\n\nexport interface AutoSizeParams {\n /**\n * The sizing format type. One of `\"pad\"`, `\"fit\"`, `\"fit-x\"`, `\"fit-y\"`, or `\"none\"`. See the [autosize type](https://vega.github.io/vega-lite/docs/size.html#autosize) documentation for descriptions of each.\n *\n * __Default value__: `\"pad\"`\n */\n type?: AutosizeType;\n\n /**\n * A boolean flag indicating if autosize layout should be re-calculated on every view update.\n *\n * __Default value__: `false`\n */\n resize?: boolean;\n\n /**\n * Determines how size calculation should be performed, one of `\"content\"` or `\"padding\"`. The default setting (`\"content\"`) interprets the width and height settings as the data rectangle (plotting) dimensions, to which padding is then added. In contrast, the `\"padding\"` setting includes the padding within the view size calculations, such that the width and height settings indicate the **total** intended size of the view.\n *\n * __Default value__: `\"content\"`\n */\n contains?: 'content' | 'padding';\n}\n\nconst TOP_LEVEL_PROPERTIES: (keyof TopLevelProperties)[] = [\n 'background',\n 'padding'\n // We do not include \"autosize\" here as it is supported by only unit and layer specs and thus need to be normalized\n];\n\nexport function extractTopLevelProperties(t: TopLevelProperties, includeParams: boolean) {\n const o: TopLevelProperties<SignalRef> = {};\n for (const p of TOP_LEVEL_PROPERTIES) {\n if (t && t[p] !== undefined) {\n (o as any)[p] = signalRefOrValue(t[p]);\n }\n }\n if (includeParams) {\n o.params = t.params;\n }\n return o;\n}\n", "import * as log from '../log';\nimport {deepEqual, duplicate, getFirstDefined, keys} from '../util';\n\n/**\n * Generic class for storing properties that are explicitly specified\n * and implicitly determined by the compiler.\n * This is important for scale/axis/legend merging as\n * we want to prioritize properties that users explicitly specified.\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport class Split<T extends object> {\n constructor(\n public readonly explicit: Partial<T> = {},\n public readonly implicit: Partial<T> = {}\n ) {}\n\n public clone() {\n return new Split(duplicate(this.explicit), duplicate(this.implicit));\n }\n\n public combine(): Partial<T> {\n return {\n ...this.explicit, // Explicit properties comes first\n ...this.implicit\n };\n }\n\n public get<K extends keyof T>(key: K): T[K] {\n // Explicit has higher precedence\n return getFirstDefined(this.explicit[key], this.implicit[key]);\n }\n\n public getWithExplicit<K extends keyof T>(key: K): Explicit<T[K]> {\n // Explicit has higher precedence\n if (this.explicit[key] !== undefined) {\n return {explicit: true, value: this.explicit[key]};\n } else if (this.implicit[key] !== undefined) {\n return {explicit: false, value: this.implicit[key]};\n }\n return {explicit: false, value: undefined};\n }\n\n public setWithExplicit<K extends keyof T>(key: K, {value, explicit}: Explicit<T[K]>) {\n if (value !== undefined) {\n this.set(key, value, explicit);\n }\n }\n\n public set<K extends keyof T>(key: K, value: T[K], explicit: boolean) {\n delete this[explicit ? 'implicit' : 'explicit'][key];\n this[explicit ? 'explicit' : 'implicit'][key] = value;\n return this;\n }\n\n public copyKeyFromSplit<S extends T>(key: keyof T, {explicit, implicit}: Split<S>) {\n // Explicit has higher precedence\n if (explicit[key] !== undefined) {\n this.set(key, explicit[key], true);\n } else if (implicit[key] !== undefined) {\n this.set(key, implicit[key], false);\n }\n }\n public copyKeyFromObject<S extends T>(key: keyof T, s: Partial<S>) {\n // Explicit has higher precedence\n if (s[key] !== undefined) {\n this.set(key, s[key], true);\n }\n }\n\n /**\n * Merge split object into this split object. Properties from the other split\n * overwrite properties from this split.\n */\n public copyAll(other: Split<T>) {\n for (const key of keys(other.combine())) {\n const val = other.getWithExplicit(key);\n this.setWithExplicit(key, val);\n }\n }\n}\n\nexport interface Explicit<T> {\n explicit: boolean;\n value: T;\n}\n\nexport function makeExplicit<T>(value: T): Explicit<T> {\n return {\n explicit: true,\n value\n };\n}\n\nexport function makeImplicit<T>(value: T): Explicit<T> {\n return {\n explicit: false,\n value\n };\n}\n\nexport type SplitParentProperty = 'scale' | 'axis' | 'legend' | '';\n\nexport function tieBreakByComparing<S, T>(compare: (v1: T, v2: T) => number) {\n return (\n v1: Explicit<T>,\n v2: Explicit<T>,\n property: keyof S | never,\n propertyOf: SplitParentProperty\n ): Explicit<T> => {\n const diff = compare(v1.value, v2.value);\n if (diff > 0) {\n return v1;\n } else if (diff < 0) {\n return v2;\n }\n return defaultTieBreaker<S, T>(v1, v2, property, propertyOf);\n };\n}\n\nexport function defaultTieBreaker<S, T>(\n v1: Explicit<T>,\n v2: Explicit<T>,\n property: keyof S,\n propertyOf: SplitParentProperty\n) {\n if (v1.explicit && v2.explicit) {\n log.warn(log.message.mergeConflictingProperty(property, propertyOf, v1.value, v2.value));\n }\n // If equal score, prefer v1.\n return v1;\n}\n\nexport function mergeValuesWithExplicit<S, T>(\n v1: Explicit<T>,\n v2: Explicit<T>,\n property: keyof S,\n propertyOf: SplitParentProperty,\n tieBreaker: (\n v1: Explicit<T>,\n v2: Explicit<T>,\n property: keyof S,\n propertyOf: string\n ) => Explicit<T> = defaultTieBreaker\n) {\n if (v1 === undefined || v1.value === undefined) {\n // For first run\n return v2;\n }\n\n if (v1.explicit && !v2.explicit) {\n return v1;\n } else if (v2.explicit && !v1.explicit) {\n return v2;\n } else if (deepEqual(v1.value, v2.value)) {\n return v1;\n } else {\n return tieBreaker(v1, v2, property, propertyOf);\n }\n}\n", "import {Parse} from '../../data';\nimport {Dict} from '../../util';\nimport {Split} from '../split';\nimport {OutputNode} from './dataflow';\nimport {FacetNode} from './facet';\nimport {SourceNode} from './source';\n\nexport interface DataComponent {\n /**\n * A list of unique sources.\n */\n sources: SourceNode[];\n\n /**\n * Registry of output nodes.\n */\n outputNodes: Dict<OutputNode | FacetNode>;\n\n /**\n * How often is an output node used. If it is not used, we don't need to\n * instantiate it in the assemble step.\n */\n outputNodeRefCounts: Dict<number>;\n\n /**\n * The output node before aggregation.\n */\n raw?: OutputNode;\n\n /**\n * The output node for scale domain before filter invalid.\n */\n preFilterInvalid?: OutputNode;\n\n /**\n * The output node for scale domain after filter invalid.\n */\n postFilterInvalid?: OutputNode;\n\n /**\n * The main output node.\n */\n main?: OutputNode;\n\n /**\n * For facets, we store the reference to the root node.\n */\n facetRoot?: FacetNode;\n\n /**\n * True if the data for this model is faceted.\n * A dataset is faceted if a parent model is a facet and no new dataset is\n * defined (which would make the data unfaceted again).\n */\n isFaceted: boolean;\n\n /**\n * Parse properties passed down from ancestors. Helps us to keep track of what has been parsed or is derived.\n */\n ancestorParse?: AncestorParse;\n}\n\n/**\n * Class to track interesting properties (see https://15721.courses.cs.cmu.edu/spring2016/papers/graefe-ieee1995.pdf)\n * about how fields have been parsed or whether they have been derived in a transform. We use this to not parse the\n * same field again (or differently).\n */\nexport class AncestorParse extends Split<Parse> {\n constructor(\n public readonly explicit: Partial<Parse> = {},\n public readonly implicit: Partial<Parse> = {},\n public parseNothing = false\n ) {\n super(explicit, implicit);\n }\n\n public clone(): AncestorParse {\n const clone = super.clone() as AncestorParse;\n clone.parseNothing = this.parseNothing;\n return clone;\n }\n}\n", "/*\n * Constants and utilities for data.\n */\nimport {Vector2} from 'vega';\nimport {FieldName} from './channeldef';\nimport {VgData} from './vega.schema';\nimport {hasProperty} from './util';\n\nexport type ParseValue = null | string | 'string' | 'boolean' | 'date' | 'number';\n\nexport interface Parse {\n [field: string]: ParseValue;\n}\n\nexport interface DataFormatBase {\n /**\n * If set to `null`, disable type inference based on the spec and only use type inference based on the data.\n * Alternatively, a parsing directive object can be provided for explicit data types. Each property of the object corresponds to a field name, and the value to the desired data type (one of `\"number\"`, `\"boolean\"`, `\"date\"`, or null (do not parse the field)).\n * For example, `\"parse\": {\"modified_on\": \"date\"}` parses the `modified_on` field in each input record a Date value.\n *\n * For `\"date\"`, we parse data based using JavaScript's [`Date.parse()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse).\n * For Specific date formats can be provided (e.g., `{foo: \"date:'%m%d%Y'\"}`), using the [d3-time-format syntax](https://github.com/d3/d3-time-format#locale_format). UTC date format parsing is supported similarly (e.g., `{foo: \"utc:'%m%d%Y'\"}`). See more about [UTC time](https://vega.github.io/vega-lite/docs/timeunit.html#utc)\n */\n parse?: Parse | null;\n\n /**\n * Type of input data: `\"json\"`, `\"csv\"`, `\"tsv\"`, `\"dsv\"`.\n *\n * __Default value:__ The default format type is determined by the extension of the file URL.\n * If no extension is detected, `\"json\"` will be used by default.\n */\n type?: 'csv' | 'tsv' | 'dsv' | 'json' | 'topojson';\n}\n\nexport interface CsvDataFormat extends DataFormatBase {\n type?: 'csv' | 'tsv';\n}\n\nexport interface DsvDataFormat extends DataFormatBase {\n type?: 'dsv';\n\n /**\n * The delimiter between records. The delimiter must be a single character (i.e., a single 16-bit code unit); so, ASCII delimiters are fine, but emoji delimiters are not.\n *\n * @minLength 1\n * @maxLength 1\n */\n delimiter: string;\n}\n\nexport interface JsonDataFormat extends DataFormatBase {\n type?: 'json';\n /**\n * The JSON property containing the desired data.\n * This parameter can be used when the loaded JSON file may have surrounding structure or meta-data.\n * For example `\"property\": \"values.features\"` is equivalent to retrieving `json.values.features`\n * from the loaded JSON object.\n */\n property?: string;\n}\n\nexport interface TopoDataFormat extends DataFormatBase {\n type?: 'topojson';\n /**\n * The name of the TopoJSON object set to convert to a GeoJSON feature collection.\n * For example, in a map of the world, there may be an object set named `\"countries\"`.\n * Using the feature property, we can extract this set and generate a GeoJSON feature object for each country.\n */\n feature?: string;\n /**\n * The name of the TopoJSON object set to convert to mesh.\n * Similar to the `feature` option, `mesh` extracts a named TopoJSON object set.\n * Unlike the `feature` option, the corresponding geo data is returned as a single, unified mesh instance, not as individual GeoJSON features.\n * Extracting a mesh is useful for more efficiently drawing borders or other geographic elements that you do not need to associate with specific regions such as individual countries, states or counties.\n */\n mesh?: string;\n}\n\nexport type DataFormat = CsvDataFormat | DsvDataFormat | JsonDataFormat | TopoDataFormat;\n\nexport type DataFormatType = 'json' | 'csv' | 'tsv' | 'dsv' | 'topojson';\n\nexport type DataSource = UrlData | InlineData | NamedData;\n\nexport type Data = DataSource | Generator;\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport type InlineDataset = number[] | string[] | boolean[] | object[] | string | object;\n\nexport interface DataBase {\n /**\n * An object that specifies the format for parsing the data.\n */\n format?: DataFormat;\n /**\n * Provide a placeholder name and bind data at runtime.\n */\n name?: string;\n}\n\nexport interface UrlData extends DataBase {\n /**\n * An URL from which to load the data set. Use the `format.type` property\n * to ensure the loaded data is correctly parsed.\n */\n url: string;\n}\n\nexport interface InlineData extends DataBase {\n /**\n * The full data set, included inline. This can be an array of objects or primitive values, an object, or a string.\n * Arrays of primitive values are ingested as objects with a `data` property. Strings are parsed according to the specified format type.\n */\n values: InlineDataset;\n}\n\nexport interface NamedData extends DataBase {\n /**\n * Provide a placeholder name and bind data at runtime.\n *\n * New data may change the layout but Vega does not always resize the chart. To update the layout when the data updates, set [autosize](https://vega.github.io/vega-lite/docs/size.html#autosize) or explicitly use [view.resize](https://vega.github.io/vega/docs/api/view/#view_resize).\n */\n name: string;\n}\n\nexport function isUrlData(data: Partial<Data> | Partial<VgData>): data is UrlData {\n return hasProperty(data, 'url');\n}\n\nexport function isInlineData(data: Partial<Data> | Partial<VgData>): data is InlineData {\n return hasProperty(data, 'values');\n}\n\nexport function isNamedData(data: Partial<Data> | Partial<VgData>): data is NamedData {\n return hasProperty(data, 'name') && !isUrlData(data) && !isInlineData(data) && !isGenerator(data);\n}\n\nexport function isGenerator(data: Partial<Data> | Partial<VgData>): data is Generator {\n return data && (isSequenceGenerator(data) || isSphereGenerator(data) || isGraticuleGenerator(data));\n}\n\nexport function isSequenceGenerator(data: Partial<Data> | Partial<VgData>): data is SequenceGenerator {\n return hasProperty(data, 'sequence');\n}\n\nexport function isSphereGenerator(data: Partial<Data> | Partial<VgData>): data is SphereGenerator {\n return hasProperty(data, 'sphere');\n}\n\nexport function isGraticuleGenerator(data: Partial<Data> | Partial<VgData>): data is GraticuleGenerator {\n return hasProperty(data, 'graticule');\n}\n\nexport enum DataSourceType {\n Raw,\n /** Main data source for marks */\n Main,\n Row,\n Column,\n Lookup,\n /** Pre-filter-invalid data source for scale domains */\n PreFilterInvalid,\n\n /** Post-filter-invalid data source for scale domains */\n PostFilterInvalid\n}\n\nexport type Generator = SequenceGenerator | SphereGenerator | GraticuleGenerator;\n\nexport interface GeneratorBase {\n /**\n * Provide a placeholder name and bind data at runtime.\n */\n name?: string;\n}\n\nexport interface SequenceGenerator extends GeneratorBase {\n /**\n * Generate a sequence of numbers.\n */\n sequence: SequenceParams;\n}\n\nexport interface SequenceParams {\n /**\n * The starting value of the sequence (inclusive).\n */\n start: number;\n /**\n * The ending value of the sequence (exclusive).\n */\n stop: number;\n /**\n * The step value between sequence entries.\n *\n * __Default value:__ `1`\n */\n step?: number;\n\n /**\n * The name of the generated sequence field.\n *\n * __Default value:__ `\"data\"`\n */\n as?: FieldName;\n}\n\nexport interface SphereGenerator extends GeneratorBase {\n /**\n * Generate sphere GeoJSON data for the full globe.\n */\n // eslint-disable-next-line @typescript-eslint/ban-types\n sphere: true | {};\n}\n\nexport interface GraticuleGenerator extends GeneratorBase {\n /**\n * Generate graticule GeoJSON data for geographic reference lines.\n */\n graticule: true | GraticuleParams;\n}\n\nexport interface GraticuleParams {\n /**\n * The major extent of the graticule as a two-element array of coordinates.\n */\n extentMajor?: Vector2<Vector2<number>>;\n\n /**\n * The minor extent of the graticule as a two-element array of coordinates.\n */\n extentMinor?: Vector2<Vector2<number>>;\n\n /**\n * Sets both the major and minor extents to the same values.\n */\n extent?: Vector2<Vector2<number>>;\n\n /**\n * The major step angles of the graticule.\n *\n *\n * __Default value:__ `[90, 360]`\n */\n stepMajor?: Vector2<number>;\n\n /**\n * The minor step angles of the graticule.\n *\n * __Default value:__ `[10, 10]`\n */\n stepMinor?: Vector2<number>;\n\n /**\n * Sets both the major and minor step angles to the same values.\n */\n step?: Vector2<number>;\n\n /**\n * The precision of the graticule in degrees.\n *\n * __Default value:__ `2.5`\n */\n precision?: number;\n}\n", "import {MarkInvalidDataMode} from '../../invalid';\n\nimport {DataSourceType} from '../../data';\nimport {normalizeInvalidDataMode} from './normalizeInvalidDataMode';\n\ntype PreOrPostFilteringInvalidValues = 'include-invalid-values' | 'exclude-invalid-values';\n\nexport interface DataSourcesForHandlingInvalidValues {\n marks: PreOrPostFilteringInvalidValues;\n scales: PreOrPostFilteringInvalidValues;\n}\ninterface GetDataSourcesForHandlingInvalidValuesProps {\n invalid: MarkInvalidDataMode | null | undefined;\n isPath: boolean;\n}\n\nexport function getDataSourcesForHandlingInvalidValues({\n invalid,\n isPath\n}: GetDataSourcesForHandlingInvalidValuesProps): DataSourcesForHandlingInvalidValues {\n const normalizedInvalid = normalizeInvalidDataMode(invalid, {isPath});\n\n switch (normalizedInvalid) {\n case 'filter':\n // Both marks and scales use post-filter data\n return {\n marks: 'exclude-invalid-values',\n scales: 'exclude-invalid-values'\n };\n case 'break-paths-show-domains':\n return {\n // Path-based marks use pre-filter data so we know to skip these invalid points in the path.\n // For non-path based marks, we skip by not showing them at all.\n marks: isPath ? 'include-invalid-values' : 'exclude-invalid-values',\n scales: 'include-invalid-values'\n };\n case 'break-paths-filter-domains':\n // For path marks, the marks will use unfiltered data (and skip points). But we need a separate data sources to feed the domain.\n // For non-path marks, we can use the filtered data for both marks and scales.\n return {\n marks: isPath ? 'include-invalid-values' : 'exclude-invalid-values',\n // Unlike 'break-paths-show-domains', 'break-paths-filter-domains' uses post-filter data to feed scale.\n scales: 'exclude-invalid-values'\n };\n case 'show':\n return {\n marks: 'include-invalid-values',\n scales: 'include-invalid-values'\n };\n }\n}\n\nexport function getScaleDataSourceForHandlingInvalidValues(\n props: GetDataSourcesForHandlingInvalidValuesProps\n): DataSourceType {\n const {marks, scales} = getDataSourcesForHandlingInvalidValues(props);\n if (marks === scales) {\n // If both marks and scales use the same data, there is only the main data source.\n return DataSourceType.Main;\n }\n // If marks and scales use differetnt data, return the pre/post-filter data source accordingly.\n return scales === 'include-invalid-values' ? DataSourceType.PreFilterInvalid : DataSourceType.PostFilterInvalid;\n}\n", "import {DataSourceType} from '../../data';\nimport * as log from '../../log';\nimport {Dict, uniqueId} from '../../util';\n\n/**\n * A node in the dataflow tree.\n */\nexport abstract class DataFlowNode {\n private _children: DataFlowNode[] = [];\n\n private _parent: DataFlowNode = null;\n\n protected _hash: string | number;\n\n constructor(\n parent: DataFlowNode,\n public readonly debugName?: string\n ) {\n if (parent) {\n this.parent = parent;\n }\n }\n\n /**\n * Clone this node with a deep copy but don't clone links to children or parents.\n */\n public clone(): DataFlowNode {\n throw new Error('Cannot clone node');\n }\n\n /**\n * Return a hash of the node.\n */\n public abstract hash(): string | number;\n\n /**\n * Set of fields that this node depends on.\n */\n public abstract dependentFields(): Set<string>;\n\n /**\n * Set of fields that are being created by this node.\n */\n public abstract producedFields(): Set<string>;\n\n get parent() {\n return this._parent;\n }\n\n /**\n * Set the parent of the node and also add this node to the parent's children.\n */\n set parent(parent: DataFlowNode) {\n this._parent = parent;\n if (parent) {\n parent.addChild(this);\n }\n }\n\n get children() {\n return this._children;\n }\n\n public numChildren() {\n return this._children.length;\n }\n\n public addChild(child: DataFlowNode, loc?: number) {\n // do not add the same child twice\n if (this._children.includes(child)) {\n log.warn(log.message.ADD_SAME_CHILD_TWICE);\n return;\n }\n\n if (loc !== undefined) {\n this._children.splice(loc, 0, child);\n } else {\n this._children.push(child);\n }\n }\n\n public removeChild(oldChild: DataFlowNode) {\n const loc = this._children.indexOf(oldChild);\n this._children.splice(loc, 1);\n return loc;\n }\n\n /**\n * Remove node from the dataflow.\n */\n public remove() {\n let loc = this._parent.removeChild(this);\n for (const child of this._children) {\n // do not use the set method because we want to insert at a particular location\n child._parent = this._parent;\n this._parent.addChild(child, loc++);\n }\n }\n\n /**\n * Insert another node as a parent of this node.\n */\n public insertAsParentOf(other: DataFlowNode) {\n const parent = other.parent;\n parent.removeChild(this);\n this.parent = parent;\n other.parent = this;\n }\n\n public swapWithParent() {\n const parent = this._parent;\n const newParent = parent.parent;\n\n // reconnect the children\n for (const child of this._children) {\n child.parent = parent;\n }\n\n // remove old links\n this._children = []; // equivalent to removing every child link one by one\n parent.removeChild(this);\n const loc = parent.parent.removeChild(parent);\n\n // swap two nodes but maintain order in children\n this._parent = newParent;\n newParent.addChild(this, loc);\n\n parent.parent = this;\n }\n}\n\nexport class OutputNode extends DataFlowNode {\n private _source: string;\n\n private _name: string;\n\n public clone(): this {\n const cloneObj = new (this.constructor as any)();\n cloneObj.debugName = `clone_${this.debugName}`;\n cloneObj._source = this._source;\n cloneObj._name = `clone_${this._name}`;\n cloneObj.type = this.type;\n cloneObj.refCounts = this.refCounts;\n cloneObj.refCounts[cloneObj._name] = 0;\n return cloneObj;\n }\n\n /**\n * @param source The name of the source. Will change in assemble.\n * @param type The type of the output node.\n * @param refCounts A global ref counter map.\n */\n constructor(\n parent: DataFlowNode,\n source: string,\n public readonly type: DataSourceType,\n private readonly refCounts: Dict<number>\n ) {\n super(parent, source);\n\n this._source = this._name = source;\n\n if (this.refCounts && !(this._name in this.refCounts)) {\n this.refCounts[this._name] = 0;\n }\n }\n\n public dependentFields() {\n return new Set<string>();\n }\n\n public producedFields() {\n return new Set<string>();\n }\n\n public hash() {\n if (this._hash === undefined) {\n this._hash = `Output ${uniqueId()}`;\n }\n return this._hash;\n }\n\n /**\n * Request the datasource name and increase the ref counter.\n *\n * During the parsing phase, this will return the simple name such as 'main' or 'raw'.\n * It is crucial to request the name from an output node to mark it as a required node.\n * If nobody ever requests the name, this datasource will not be instantiated in the assemble phase.\n *\n * In the assemble phase, this will return the correct name.\n */\n public getSource() {\n this.refCounts[this._name]++;\n return this._source;\n }\n\n public isRequired(): boolean {\n return !!this.refCounts[this._name];\n }\n\n public setSource(source: string) {\n this._source = source;\n }\n}\n", "import {TimeUnitTransform as VgTimeUnitTransform} from 'vega';\nimport {FormulaTransform as VgFormulaTransform} from 'vega';\nimport {FieldName, getBandPosition, vgField} from '../../channeldef';\nimport {\n TimeUnitParams,\n getDateTimePartAndStep,\n getSmallestTimeUnitPart,\n getTimeUnitParts,\n isBinnedTimeUnit,\n normalizeTimeUnit\n} from '../../timeunit';\nimport {TimeUnitTransform} from '../../transform';\nimport {\n accessWithDatumToUnescapedPath,\n Dict,\n duplicate,\n entries,\n hash,\n isEmpty,\n replacePathInField,\n vals\n} from '../../util';\nimport {ModelWithField, isUnitModel} from '../model';\nimport {DataFlowNode} from './dataflow';\nimport {isRectBasedMark} from '../../mark';\nimport {isXorY} from '../../channel';\n\nexport type TimeUnitComponent = (TimeUnitTransform | BinnedTimeUnitOffset) & {\n rectBandPosition?: number;\n};\n\nexport interface BinnedTimeUnitOffset {\n timeUnit: TimeUnitParams;\n field: FieldName;\n}\n\nfunction isTimeUnitTransformComponent(timeUnitComponent: TimeUnitComponent): timeUnitComponent is TimeUnitTransform {\n return (timeUnitComponent as TimeUnitTransform).as !== undefined;\n}\n\nfunction offsetAs(field: FieldName) {\n return `${field}_end`;\n}\n\nexport class TimeUnitNode extends DataFlowNode {\n public clone() {\n return new TimeUnitNode(null, duplicate(this.timeUnits));\n }\n\n constructor(\n parent: DataFlowNode,\n private timeUnits: Dict<TimeUnitComponent>\n ) {\n super(parent);\n }\n\n public static makeFromEncoding(parent: DataFlowNode, model: ModelWithField) {\n const formula = model.reduceFieldDef((timeUnitComponent: TimeUnitComponent, fieldDef, channel) => {\n const {field, timeUnit} = fieldDef;\n\n if (timeUnit) {\n let component: TimeUnitComponent | undefined;\n\n if (isBinnedTimeUnit(timeUnit)) {\n // For binned time unit, only produce end if the mark is a rect-based mark (rect, bar, image, arc), which needs \"range\".\n\n if (isUnitModel(model)) {\n const {mark, markDef, config} = model;\n const bandPosition = getBandPosition({fieldDef, markDef, config});\n if (isRectBasedMark(mark) || !!bandPosition) {\n component = {\n timeUnit: normalizeTimeUnit(timeUnit),\n field\n };\n }\n }\n } else {\n component = {\n as: vgField(fieldDef, {forAs: true}),\n field,\n timeUnit\n };\n }\n\n if (isUnitModel(model)) {\n const {mark, markDef, config} = model;\n const bandPosition = getBandPosition({fieldDef, markDef, config});\n if (isRectBasedMark(mark) && isXorY(channel) && bandPosition !== 0.5) {\n component.rectBandPosition = bandPosition;\n }\n }\n\n if (component) {\n (timeUnitComponent as any)[hash(component)] = component;\n }\n }\n return timeUnitComponent;\n }, {} as Dict<TimeUnitComponent>);\n\n if (isEmpty(formula)) {\n return null;\n }\n\n return new TimeUnitNode(parent, formula);\n }\n\n public static makeFromTransform(parent: DataFlowNode, t: TimeUnitTransform) {\n const {timeUnit, ...other} = {...t};\n\n const normalizedTimeUnit = normalizeTimeUnit(timeUnit);\n\n const component = {\n ...other,\n timeUnit: normalizedTimeUnit\n };\n\n return new TimeUnitNode(parent, {\n [hash(component)]: component\n });\n }\n\n /**\n * Merge together TimeUnitNodes assigning the children of `other` to `this`\n * and removing `other`.\n */\n public merge(other: TimeUnitNode) {\n this.timeUnits = {...this.timeUnits};\n\n // if the same hash happen twice, merge\n for (const key in other.timeUnits) {\n if (!this.timeUnits[key]) {\n // copy if it's not a duplicate\n this.timeUnits[key] = other.timeUnits[key];\n }\n }\n\n for (const child of other.children) {\n other.removeChild(child);\n child.parent = this;\n }\n\n other.remove();\n }\n\n /**\n * Remove time units coming from the other node.\n */\n public removeFormulas(fields: Set<string>) {\n const newFormula: Dict<TimeUnitComponent> = {};\n\n for (const [key, timeUnitComponent] of entries(this.timeUnits)) {\n const fieldAs = isTimeUnitTransformComponent(timeUnitComponent)\n ? timeUnitComponent.as\n : `${timeUnitComponent.field}_end`;\n if (!fields.has(fieldAs)) {\n newFormula[key] = timeUnitComponent;\n }\n }\n\n this.timeUnits = newFormula;\n }\n\n public producedFields() {\n return new Set(\n vals(this.timeUnits).map(f => {\n return isTimeUnitTransformComponent(f) ? f.as : offsetAs(f.field);\n })\n );\n }\n\n public dependentFields() {\n return new Set(vals(this.timeUnits).map(f => f.field));\n }\n\n public hash() {\n return `TimeUnit ${hash(this.timeUnits)}`;\n }\n\n public assemble() {\n const transforms: (VgTimeUnitTransform | VgFormulaTransform)[] = [];\n\n for (const f of vals(this.timeUnits)) {\n const {rectBandPosition} = f;\n const normalizedTimeUnit = normalizeTimeUnit(f.timeUnit);\n\n if (isTimeUnitTransformComponent(f)) {\n const {field, as} = f;\n const {unit, utc, ...params} = normalizedTimeUnit;\n\n const startEnd: [string, string] = [as, `${as}_end`];\n\n transforms.push({\n field: replacePathInField(field),\n type: 'timeunit',\n ...(unit ? {units: getTimeUnitParts(unit)} : {}),\n ...(utc ? {timezone: 'utc'} : {}),\n ...params,\n as: startEnd\n });\n\n transforms.push(...offsetedRectFormulas(startEnd, rectBandPosition, normalizedTimeUnit));\n } else if (f) {\n const {field: escapedField} = f;\n // since this is a expression, we want the unescaped field name\n const field = escapedField.replaceAll('\\\\.', '.');\n const expr = offsetExpr({timeUnit: normalizedTimeUnit, field});\n const endAs = offsetAs(field);\n transforms.push({\n type: 'formula',\n expr,\n as: endAs\n });\n\n transforms.push(...offsetedRectFormulas([field, endAs], rectBandPosition, normalizedTimeUnit));\n }\n }\n\n return transforms;\n }\n}\n\nexport const OFFSETTED_RECT_START_SUFFIX = 'offsetted_rect_start';\nexport const OFFSETTED_RECT_END_SUFFIX = 'offsetted_rect_end';\n\nfunction offsetExpr({timeUnit, field, reverse}: {timeUnit: TimeUnitParams; field: string; reverse?: boolean}) {\n const {unit, utc} = timeUnit;\n const smallestUnit = getSmallestTimeUnitPart(unit);\n const {part, step} = getDateTimePartAndStep(smallestUnit, timeUnit.step);\n const offsetFn = utc ? 'utcOffset' : 'timeOffset';\n const expr = `${offsetFn}('${part}', ${accessWithDatumToUnescapedPath(field)}, ${reverse ? -step : step})`;\n return expr;\n}\n\nfunction offsetedRectFormulas(\n [startField, endField]: [string, string],\n rectBandPosition: number | undefined,\n timeUnit: TimeUnitParams\n): VgFormulaTransform[] {\n if (rectBandPosition !== undefined && rectBandPosition !== 0.5) {\n const startExpr = accessWithDatumToUnescapedPath(startField);\n const endExpr = accessWithDatumToUnescapedPath(endField);\n return [\n {\n type: 'formula',\n expr: interpolateExpr(\n [\n offsetExpr({\n timeUnit,\n field: startField,\n reverse: true\n }),\n startExpr\n ],\n rectBandPosition + 0.5\n ),\n as: `${startField}_${OFFSETTED_RECT_START_SUFFIX}`\n },\n {\n type: 'formula',\n expr: interpolateExpr([startExpr, endExpr], rectBandPosition + 0.5),\n as: `${startField}_${OFFSETTED_RECT_END_SUFFIX}`\n }\n ];\n }\n return [];\n}\n\nfunction interpolateExpr([start, end]: [string, string], fraction: number) {\n return `${1 - fraction} * ${start} + ${fraction} * ${end}`;\n}\n", "import {array, isObject} from 'vega-util';\nimport {\n GeoPositionChannel,\n getPositionChannelFromLatLong,\n isGeoPositionChannel,\n isScaleChannel,\n isSingleDefUnitChannel,\n SingleDefUnitChannel\n} from '../../channel';\nimport * as log from '../../log';\nimport {hasContinuousDomain} from '../../scale';\nimport {PointSelectionConfig, SelectionInitIntervalMapping, SelectionInitMapping, SELECTION_ID} from '../../selection';\nimport {Dict, hash, keys, varName, isEmpty} from '../../util';\nimport {TimeUnitComponent, TimeUnitNode} from '../data/timeunit';\nimport {SelectionCompiler} from '.';\nimport {assembleProjection} from './assemble';\nimport {isBinnedTimeUnit} from '../../timeunit';\nexport const TUPLE_FIELDS = '_tuple_fields';\n\n/**\n * Whether the selection tuples hold enumerated or ranged values for a field.\n */\nexport type TupleStoreType =\n // enumerated\n | 'E'\n // ranged, exclusive, left-right inclusive\n | 'R'\n // ranged, left-inclusive, right-exclusive\n | 'R-RE';\n\nexport interface SelectionProjection {\n type: TupleStoreType;\n field: string;\n index: number;\n channel?: SingleDefUnitChannel;\n geoChannel?: GeoPositionChannel;\n signals?: {data?: string; visual?: string};\n hasLegend?: boolean;\n}\n\nexport class SelectionProjectionComponent {\n public hasChannel: Partial<Record<SingleDefUnitChannel, SelectionProjection>>;\n public hasField: Record<string, SelectionProjection>;\n public hasSelectionId: boolean;\n public timeUnit?: TimeUnitNode;\n public items: SelectionProjection[];\n\n constructor(...items: SelectionProjection[]) {\n this.items = items;\n this.hasChannel = {};\n this.hasField = {};\n this.hasSelectionId = false;\n }\n}\n\nconst project: SelectionCompiler = {\n defined: () => {\n return true; // This transform handles its own defaults, so always run parse.\n },\n\n parse: (model, selCmpt, selDef) => {\n const name = selCmpt.name;\n const proj = (selCmpt.project ??= new SelectionProjectionComponent());\n const parsed: Dict<SelectionProjection> = {};\n const timeUnits: Dict<TimeUnitComponent> = {};\n\n const signals = new Set<string>();\n const signalName = (p: SelectionProjection, range: 'data' | 'visual') => {\n const suffix = range === 'visual' ? p.channel : p.field;\n let sg = varName(`${name}_${suffix}`);\n for (let counter = 1; signals.has(sg); counter++) {\n sg = varName(`${name}_${suffix}_${counter}`);\n }\n signals.add(sg);\n return {[range]: sg};\n };\n\n const type = selCmpt.type;\n const cfg = model.config.selection[type];\n const init =\n selDef.value !== undefined\n ? (array(selDef.value as any) as SelectionInitMapping[] | SelectionInitIntervalMapping[])\n : null;\n\n // If no explicit projection (either fields or encodings) is specified, set some defaults.\n // If an initial value is set, try to infer projections.\n let {fields, encodings} = (isObject(selDef.select) ? selDef.select : {}) as PointSelectionConfig;\n if (!fields && !encodings && init) {\n for (const initVal of init) {\n // initVal may be a scalar value to smoothen varParam -> pointSelection gradient.\n if (!isObject(initVal)) {\n continue;\n }\n\n for (const key of keys(initVal)) {\n if (isSingleDefUnitChannel(key)) {\n (encodings || (encodings = [])).push(key as SingleDefUnitChannel);\n } else {\n if (type === 'interval') {\n log.warn(log.message.INTERVAL_INITIALIZED_WITH_POS);\n encodings = cfg.encodings;\n } else {\n (fields ??= []).push(key);\n }\n }\n }\n }\n }\n\n // If no initial value is specified, use the default configuration.\n // We break this out as a separate if block (instead of an else condition)\n // to account for unprojected point selections that have scalar initial values\n if (!fields && !encodings) {\n encodings = cfg.encodings;\n if ('fields' in cfg) {\n fields = cfg.fields;\n }\n }\n\n for (const channel of encodings ?? []) {\n const fieldDef = model.fieldDef(channel);\n if (fieldDef) {\n let field = fieldDef.field;\n\n if (fieldDef.aggregate) {\n log.warn(log.message.cannotProjectAggregate(channel, fieldDef.aggregate));\n continue;\n } else if (!field) {\n log.warn(log.message.cannotProjectOnChannelWithoutField(channel));\n continue;\n }\n\n if (fieldDef.timeUnit && !isBinnedTimeUnit(fieldDef.timeUnit)) {\n field = model.vgField(channel);\n // Construct TimeUnitComponents which will be combined into a\n // TimeUnitNode. This node may need to be inserted into the\n // dataflow if the selection is used across views that do not\n // have these time units defined.\n const component = {\n timeUnit: fieldDef.timeUnit,\n as: field,\n field: fieldDef.field\n };\n\n timeUnits[hash(component)] = component;\n }\n\n // Prevent duplicate projections on the same field.\n // TODO: what if the same field is bound to multiple channels (e.g., SPLOM diag).\n if (!parsed[field]) {\n // Determine whether the tuple will store enumerated or ranged values.\n // Interval selections store ranges for continuous scales, and enumerations otherwise.\n // Single/multi selections store ranges for binned fields, and enumerations otherwise.\n const tplType: TupleStoreType =\n type === 'interval' &&\n isScaleChannel(channel) &&\n hasContinuousDomain(model.getScaleComponent(channel).get('type'))\n ? 'R'\n : fieldDef.bin\n ? 'R-RE'\n : 'E';\n\n const p: SelectionProjection = {field, channel, type: tplType, index: proj.items.length};\n p.signals = {...signalName(p, 'data'), ...signalName(p, 'visual')};\n proj.items.push((parsed[field] = p));\n proj.hasField[field] = parsed[field];\n proj.hasSelectionId = proj.hasSelectionId || field === SELECTION_ID;\n\n if (isGeoPositionChannel(channel)) {\n p.geoChannel = channel;\n p.channel = getPositionChannelFromLatLong(channel);\n proj.hasChannel[p.channel] = parsed[field];\n } else {\n proj.hasChannel[channel] = parsed[field];\n }\n }\n } else {\n log.warn(log.message.cannotProjectOnChannelWithoutField(channel));\n }\n }\n\n for (const field of fields ?? []) {\n if (proj.hasField[field]) continue;\n const p: SelectionProjection = {type: 'E', field, index: proj.items.length};\n p.signals = {...signalName(p, 'data')};\n proj.items.push(p);\n proj.hasField[field] = p;\n proj.hasSelectionId = proj.hasSelectionId || field === SELECTION_ID;\n }\n\n if (init) {\n selCmpt.init = (init as any).map((v: SelectionInitMapping | SelectionInitIntervalMapping) => {\n // Selections can be initialized either with a full object that maps projections to values\n // or scalar values to smoothen the abstraction gradient from variable params to point selections.\n return proj.items.map(p =>\n isObject(v) ? (v[p.geoChannel || p.channel] !== undefined ? v[p.geoChannel || p.channel] : v[p.field]) : v\n );\n });\n }\n\n if (!isEmpty(timeUnits)) {\n proj.timeUnit = new TimeUnitNode(null, timeUnits);\n }\n },\n\n signals: (model, selCmpt, allSignals) => {\n const name = selCmpt.name + TUPLE_FIELDS;\n const hasSignal = allSignals.filter(s => s.name === name);\n return hasSignal.length > 0 || selCmpt.project.hasSelectionId\n ? allSignals\n : allSignals.concat({\n name,\n value: selCmpt.project.items.map(assembleProjection)\n });\n }\n};\n\nexport default project;\n", "import {Signal, Stream} from 'vega';\nimport {stringValue} from 'vega-util';\nimport {SelectionCompiler, TUPLE, isTimerSelection, unitName} from '.';\nimport {SELECTION_ID} from '../../selection';\nimport {vals} from '../../util';\nimport {BRUSH} from './interval';\nimport {TUPLE_FIELDS} from './project';\nimport {TIME} from '../../channel';\n\nexport const CURR = '_curr';\nexport const ANIM_VALUE = 'anim_value';\nexport const ANIM_CLOCK = 'anim_clock';\nexport const EASED_ANIM_CLOCK = 'eased_anim_clock';\nexport const MIN_EXTENT = 'min_extent';\nexport const MAX_RANGE_EXTENT = 'max_range_extent';\nexport const LAST_TICK = 'last_tick_at';\nexport const IS_PLAYING = 'is_playing';\nexport const THROTTLE = (1 / 60) * 1000; // 60 FPS\n\nconst animationSignals = (selectionName: string, scaleName: string): Signal[] => {\n return [\n // timer signals\n {\n name: EASED_ANIM_CLOCK,\n // update: 'easeLinear(anim_clock / max_range_extent) * max_range_extent'\n update: ANIM_CLOCK // TODO: replace with above once easing functions are implemented in vega-functions\n },\n\n // scale signals\n // TODO(jzong): uncomment commented signals below when implementing interpolation\n {name: `${selectionName}_domain`, init: `domain('${scaleName}')`},\n {name: MIN_EXTENT, init: `extent(${selectionName}_domain)[0]`},\n // {name: 'max_extent', init: `extent(${selectionName}_domain)[1]`},\n {name: MAX_RANGE_EXTENT, init: `extent(range('${scaleName}'))[1]`},\n // {name: 't_index', update: `indexof(${selectionName}_domain, anim_value)`},\n {name: ANIM_VALUE, update: `invert('${scaleName}', ${EASED_ANIM_CLOCK})`}\n ];\n};\n\nconst point: SelectionCompiler<'point'> = {\n defined: selCmpt => selCmpt.type === 'point',\n\n topLevelSignals: (model, selCmpt, signals) => {\n if (isTimerSelection(selCmpt)) {\n signals = signals.concat([\n {\n name: ANIM_CLOCK,\n init: '0',\n on: [\n {\n events: {type: 'timer', throttle: THROTTLE},\n update: `${IS_PLAYING} ? (${ANIM_CLOCK} + (now() - ${LAST_TICK}) > ${MAX_RANGE_EXTENT} ? 0 : ${ANIM_CLOCK} + (now() - ${LAST_TICK})) : ${ANIM_CLOCK}`\n }\n ]\n },\n {\n name: LAST_TICK,\n init: 'now()',\n on: [{events: [{signal: ANIM_CLOCK}, {signal: IS_PLAYING}], update: 'now()'}]\n },\n {\n name: IS_PLAYING,\n init: 'true'\n }\n ]);\n }\n\n return signals;\n },\n\n signals: (model, selCmpt, signals) => {\n const name = selCmpt.name;\n const fieldsSg = name + TUPLE_FIELDS;\n const project = selCmpt.project;\n const datum = '(item().isVoronoi ? datum.datum : datum)';\n\n // Only add a discrete selection to the store if a datum is present _and_\n // the interaction isn't occurring on a group mark. This guards against\n // polluting interactive state with invalid values in faceted displays\n // as the group marks are also data-driven. We force the update to account\n // for constant null states but varying toggles (e.g., shift-click in\n // whitespace followed by a click in whitespace; the store should only\n // be cleared on the second click).\n const brushes = vals(model.component.selection ?? {})\n .reduce((acc, cmpt) => {\n return cmpt.type === 'interval' ? acc.concat(cmpt.name + BRUSH) : acc;\n }, [])\n .map(b => `indexof(item().mark.name, '${b}') < 0`)\n .join(' && ');\n\n const test = `datum && item().mark.marktype !== 'group' && indexof(item().mark.role, 'legend') < 0${\n brushes ? ` && ${brushes}` : ''\n }`;\n\n let update = `unit: ${unitName(model)}, `;\n\n if (selCmpt.project.hasSelectionId) {\n update += `${SELECTION_ID}: ${datum}[${stringValue(SELECTION_ID)}]`;\n } else if (isTimerSelection(selCmpt)) {\n update += `fields: ${fieldsSg}, values: [${ANIM_VALUE} ? ${ANIM_VALUE} : ${MIN_EXTENT}]`;\n } else {\n const values = project.items\n .map(p => {\n const fieldDef = model.fieldDef(p.channel);\n // Binned fields should capture extents, for a range test against the raw field.\n return fieldDef?.bin\n ? `[${datum}[${stringValue(model.vgField(p.channel, {}))}], ` +\n `${datum}[${stringValue(model.vgField(p.channel, {binSuffix: 'end'}))}]]`\n : `${datum}[${stringValue(p.field)}]`;\n })\n .join(', ');\n\n update += `fields: ${fieldsSg}, values: [${values}]`;\n }\n\n if (isTimerSelection(selCmpt)) {\n // timer event: selection is for animation\n return signals.concat(animationSignals(selCmpt.name, model.scaleName(TIME)), [\n {\n name: name + TUPLE,\n on: [\n {\n events: [{signal: EASED_ANIM_CLOCK}, {signal: ANIM_VALUE}],\n update: `{${update}}`,\n force: true\n }\n ]\n }\n ]);\n } else {\n const events: Stream[] = selCmpt.events;\n return signals.concat([\n {\n name: name + TUPLE,\n on: events\n ? [\n {\n events,\n update: `${test} ? {${update}} : null`,\n force: true\n }\n ]\n : []\n }\n ]);\n }\n }\n};\n\nexport default point;\n", "import {Signal, SignalRef} from 'vega';\nimport {parseSelector} from 'vega-event-selector';\nimport {identity, isArray, stringValue} from 'vega-util';\nimport {MODIFY, STORE, unitName, VL_SELECTION_RESOLVE, TUPLE, selectionCompilers, isTimerSelection} from '.';\nimport {dateTimeToExpr, isDateTime, dateTimeToTimestamp} from '../../datetime';\nimport {hasContinuousDomain} from '../../scale';\nimport {SelectionInit, SelectionInitInterval, ParameterExtent, SELECTION_ID} from '../../selection';\nimport {keys, replacePathInField, stringify, vals} from '../../util';\nimport {VgData, VgDomain} from '../../vega.schema';\nimport {FacetModel} from '../facet';\nimport {LayerModel} from '../layer';\nimport {isUnitModel, Model} from '../model';\nimport {ScaleComponent} from '../scale/component';\nimport {UnitModel} from '../unit';\nimport {parseSelectionExtent} from './parse';\nimport {SelectionProjection} from './project';\nimport {CURR} from './point';\nimport {DataSourceType} from '../../data';\n\nexport function assembleProjection(proj: SelectionProjection) {\n const {signals, hasLegend, index, ...rest} = proj;\n rest.field = replacePathInField(rest.field);\n return rest;\n}\n\nexport function assembleInit(\n init: readonly (SelectionInit | readonly SelectionInit[] | SelectionInitInterval)[] | SelectionInit,\n isExpr = true,\n wrap: (str: string | number) => string | number = identity\n): any {\n if (isArray(init)) {\n const assembled = init.map(v => assembleInit(v, isExpr, wrap));\n return isExpr ? `[${assembled.join(', ')}]` : assembled;\n } else if (isDateTime(init)) {\n if (isExpr) {\n return wrap(dateTimeToExpr(init));\n } else {\n return wrap(dateTimeToTimestamp(init));\n }\n }\n return isExpr ? wrap(stringify(init)) : init;\n}\n\nexport function assembleUnitSelectionSignals(model: UnitModel, signals: Signal[]) {\n for (const selCmpt of vals(model.component.selection ?? {})) {\n const name = selCmpt.name;\n let modifyExpr = `${name}${TUPLE}, ${selCmpt.resolve === 'global' ? 'true' : `{unit: ${unitName(model)}}`}`;\n\n for (const c of selectionCompilers) {\n if (!c.defined(selCmpt)) continue;\n if (c.signals) signals = c.signals(model, selCmpt, signals);\n if (c.modifyExpr) modifyExpr = c.modifyExpr(model, selCmpt, modifyExpr);\n }\n\n signals.push({\n name: name + MODIFY,\n on: [\n {\n events: {signal: selCmpt.name + TUPLE},\n update: `modify(${stringValue(selCmpt.name + STORE)}, ${modifyExpr})`\n }\n ]\n });\n }\n\n return cleanupEmptyOnArray(signals);\n}\n\nexport function assembleFacetSignals(model: FacetModel, signals: Signal[]) {\n if (model.component.selection && keys(model.component.selection).length) {\n const name = stringValue(model.getName('cell'));\n signals.unshift({\n name: 'facet',\n value: {},\n on: [\n {\n events: parseSelector('pointermove', 'scope'),\n update: `isTuple(facet) ? facet : group(${name}).datum`\n }\n ]\n });\n }\n\n return cleanupEmptyOnArray(signals);\n}\n\nexport function assembleTopLevelSignals(model: UnitModel, signals: Signal[]) {\n let hasSelections = false;\n for (const selCmpt of vals(model.component.selection ?? {})) {\n const name = selCmpt.name;\n const store = stringValue(name + STORE);\n const hasSg = signals.filter(s => s.name === name);\n if (hasSg.length === 0) {\n const resolve = selCmpt.resolve === 'global' ? 'union' : selCmpt.resolve;\n const isPoint = selCmpt.type === 'point' ? ', true, true)' : ')';\n signals.push({\n name: selCmpt.name,\n update: `${VL_SELECTION_RESOLVE}(${store}, ${stringValue(resolve)}${isPoint}`\n });\n }\n hasSelections = true;\n\n for (const c of selectionCompilers) {\n if (c.defined(selCmpt) && c.topLevelSignals) {\n signals = c.topLevelSignals(model, selCmpt, signals);\n }\n }\n }\n\n if (hasSelections) {\n const hasUnit = signals.filter(s => s.name === 'unit');\n if (hasUnit.length === 0) {\n signals.unshift({\n name: 'unit',\n value: {},\n on: [{events: 'pointermove', update: 'isTuple(group()) ? group() : unit'}]\n });\n }\n }\n\n return cleanupEmptyOnArray(signals);\n}\n\nexport function assembleUnitSelectionData(model: UnitModel, data: readonly VgData[]): VgData[] {\n const selectionData = [];\n const animationData = [];\n const unit = unitName(model, {escape: false});\n\n for (const selCmpt of vals(model.component.selection ?? {})) {\n const store: VgData = {name: selCmpt.name + STORE};\n\n if (selCmpt.project.hasSelectionId) {\n store.transform = [{type: 'collect', sort: {field: SELECTION_ID}}];\n }\n\n if (selCmpt.init) {\n const fields = selCmpt.project.items.map(assembleProjection);\n\n store.values = selCmpt.project.hasSelectionId\n ? selCmpt.init.map(i => ({unit, [SELECTION_ID]: assembleInit(i, false)[0]}))\n : selCmpt.init.map(i => ({unit, fields, values: assembleInit(i, false)}));\n }\n\n const contains = [...selectionData, ...data].filter(d => d.name === selCmpt.name + STORE);\n if (!contains.length) {\n selectionData.push(store);\n }\n\n if (isTimerSelection(selCmpt) && data.length) {\n // TODO(jzong): eventually uncomment this stuff when we want to support multi-view\n // const sourceName =\n // model.parent && model.parent.type !== 'unit' // facet, layer, or concat\n // ? model.parent.lookupDataSource(model.parent.getDataName(DataSourceType.Main))\n // : model.lookupDataSource(model.getDataName(DataSourceType.Main));\n const sourceName = model.lookupDataSource(model.getDataName(DataSourceType.Main));\n const sourceData = data.find(d => d.name === sourceName);\n\n // find the filter transform for the current selection\n const sourceDataFilter = sourceData.transform.find(\n t => t.type === 'filter' && t.expr.includes('vlSelectionTest')\n );\n\n if (sourceDataFilter) {\n // remove it from the original dataset\n sourceData.transform = sourceData.transform.filter(t => t !== sourceDataFilter);\n\n // create dataset to hold current animation frame\n const currentFrame: VgData = {\n name: sourceData.name + CURR,\n source: sourceData.name,\n transform: [sourceDataFilter] // add the selection filter to the animation dataset\n };\n\n animationData.push(currentFrame);\n }\n }\n }\n\n return selectionData.concat(data, animationData);\n}\n\nexport function assembleUnitSelectionMarks(model: UnitModel, marks: any[]): any[] {\n for (const selCmpt of vals(model.component.selection ?? {})) {\n for (const c of selectionCompilers) {\n if (c.defined(selCmpt) && c.marks) {\n marks = c.marks(model, selCmpt, marks);\n }\n }\n }\n\n return marks;\n}\n\nexport function assembleLayerSelectionMarks(model: LayerModel, marks: any[]): any[] {\n for (const child of model.children) {\n if (isUnitModel(child)) {\n marks = assembleUnitSelectionMarks(child, marks);\n }\n }\n\n return marks;\n}\n\nexport function assembleSelectionScaleDomain(\n model: Model,\n extent: ParameterExtent,\n scaleCmpt: ScaleComponent,\n domain: VgDomain\n): SignalRef {\n const parsedExtent = parseSelectionExtent(model, extent.param, extent);\n\n return {\n signal:\n hasContinuousDomain(scaleCmpt.get('type')) && isArray(domain) && domain[0] > domain[1]\n ? `isValid(${parsedExtent}) && reverse(${parsedExtent})`\n : parsedExtent\n };\n}\n\nfunction cleanupEmptyOnArray(signals: Signal[]) {\n return signals.map(s => {\n if (s.on && !s.on.length) delete s.on;\n return s;\n });\n}\n", "import {stringValue} from 'vega-util';\nimport {VL_SELECTION_RESOLVE} from '.';\nimport {isScaleChannel, ScaleChannel} from '../../channel';\nimport * as log from '../../log';\nimport {hasContinuousDomain} from '../../scale';\nimport {isLayerModel, Model} from '../model';\nimport {UnitModel} from '../unit';\nimport {SelectionProjection} from './project';\nimport {SelectionCompiler} from '.';\nimport {replacePathInField} from '../../util';\nimport {NewSignal} from 'vega';\n\nconst scaleBindings: SelectionCompiler<'interval'> = {\n defined: selCmpt => {\n return selCmpt.type === 'interval' && selCmpt.resolve === 'global' && selCmpt.bind && selCmpt.bind === 'scales';\n },\n\n parse: (model, selCmpt) => {\n const bound: SelectionProjection[] = (selCmpt.scales = []);\n\n for (const proj of selCmpt.project.items) {\n const channel = proj.channel;\n\n if (!isScaleChannel(channel)) {\n continue;\n }\n\n const scale = model.getScaleComponent(channel);\n const scaleType = scale ? scale.get('type') : undefined;\n\n if (scaleType == 'sequential') {\n log.warn(log.message.SEQUENTIAL_SCALE_DEPRECATED);\n }\n\n if (!scale || !hasContinuousDomain(scaleType)) {\n log.warn(log.message.SCALE_BINDINGS_CONTINUOUS);\n continue;\n }\n\n scale.set('selectionExtent', {param: selCmpt.name, field: proj.field}, true);\n bound.push(proj);\n }\n },\n\n topLevelSignals: (model, selCmpt, signals) => {\n const bound = selCmpt.scales.filter(proj => signals.filter(s => s.name === proj.signals.data).length === 0);\n\n // Top-level signals are only needed for multiview displays and if this\n // view's top-level signals haven't already been generated.\n if (!model.parent || isTopLevelLayer(model) || bound.length === 0) {\n return signals;\n }\n\n // vlSelectionResolve does not account for the behavior of bound scales in\n // multiview displays. Each unit view adds a tuple to the store, but the\n // state of the selection is the unit selection most recently updated. This\n // state is captured by the top-level signals that we insert and \"push\n // outer\" to from within the units. We need to reassemble this state into\n // the top-level named signal, except no single selCmpt has a global view.\n const namedSg: NewSignal = signals.find(s => s.name === selCmpt.name);\n let update = namedSg.update;\n if (update.includes(VL_SELECTION_RESOLVE)) {\n namedSg.update = `{${bound\n .map(proj => `${stringValue(replacePathInField(proj.field))}: ${proj.signals.data}`)\n .join(', ')}}`;\n } else {\n for (const proj of bound) {\n const mapping = `${stringValue(replacePathInField(proj.field))}: ${proj.signals.data}`;\n if (!update.includes(mapping)) {\n update = `${update.substring(0, update.length - 1)}, ${mapping}}`;\n }\n }\n namedSg.update = update;\n }\n\n return signals.concat(bound.map(proj => ({name: proj.signals.data})));\n },\n\n signals: (model, selCmpt, signals) => {\n // Nested signals need only push to top-level signals with multiview displays.\n if (model.parent && !isTopLevelLayer(model)) {\n for (const proj of selCmpt.scales) {\n const signal: any = signals.find(s => s.name === proj.signals.data);\n signal.push = 'outer';\n delete signal.value;\n delete signal.update;\n }\n }\n\n return signals;\n }\n};\n\nexport default scaleBindings;\n\nexport function domain(model: UnitModel, channel: ScaleChannel) {\n const scale = stringValue(model.scaleName(channel));\n return `domain(${scale})`;\n}\n\nfunction isTopLevelLayer(model: Model): boolean {\n return model.parent && isLayerModel(model.parent) && (!model.parent.parent || isTopLevelLayer(model.parent.parent));\n}\n", "import {isObject, NewSignal, OnEvent, SignalValue, Stream} from 'vega';\nimport {array, stringValue} from 'vega-util';\nimport {SelectionCompiler, SelectionComponent, STORE, TUPLE, unitName} from '.';\nimport {GeoPositionChannel, LATITUDE, LONGITUDE, ScaleChannel, X, Y} from '../../channel';\nimport {FieldName} from '../../channeldef';\nimport {warn} from '../../log';\nimport {hasContinuousDomain} from '../../scale';\nimport {IntervalSelectionConfigWithoutType, SelectionInitInterval, SELECTION_ID} from '../../selection';\nimport {keys, vals} from '../../util';\nimport {LayoutSizeIndex} from '../layoutsize/component';\nimport {isUnitModel} from '../model';\nimport {UnitModel} from '../unit';\nimport {assembleInit} from './assemble';\nimport {SelectionProjection, TUPLE_FIELDS} from './project';\nimport scales from './scales';\n\nexport const BRUSH = '_brush';\nexport const SCALE_TRIGGER = '_scale_trigger';\nexport const GEO_INIT_TICK = 'geo_interval_init_tick'; // Workaround for https://github.com/vega/vega/issues/3481\nconst INIT = '_init';\nconst CENTER = '_center';\n\n// Separate type because the \"fields\" property is only used internally and we don't want to leak it to the schema.\nexport type IntervalSelectionConfigWithField = IntervalSelectionConfigWithoutType & {fields?: FieldName[]};\n\nconst interval: SelectionCompiler<'interval'> = {\n defined: selCmpt => selCmpt.type === 'interval',\n\n parse: (model, selCmpt, selDef) => {\n if (model.hasProjection) {\n const def: IntervalSelectionConfigWithField = {...(isObject(selDef.select) ? selDef.select : {})};\n def.fields = [SELECTION_ID];\n if (!def.encodings) {\n // Remap default x/y projection\n def.encodings = selDef.value ? (keys(selDef.value) as GeoPositionChannel[]) : [LONGITUDE, LATITUDE];\n }\n\n selDef.select = {type: 'interval', ...def};\n }\n\n if (selCmpt.translate && !scales.defined(selCmpt)) {\n const filterExpr = `!event.item || event.item.mark.name !== ${stringValue(selCmpt.name + BRUSH)}`;\n for (const evt of selCmpt.events) {\n if (!evt.between) {\n warn(`${evt} is not an ordered event stream for interval selections.`);\n continue;\n }\n\n const filters = array((evt.between[0].filter ??= []));\n if (!filters.includes(filterExpr)) {\n filters.push(filterExpr);\n }\n }\n }\n },\n\n signals: (model, selCmpt, signals) => {\n const name = selCmpt.name;\n const tupleSg = name + TUPLE;\n const channels = vals(selCmpt.project.hasChannel).filter(p => p.channel === X || p.channel === Y);\n const init = selCmpt.init ? selCmpt.init[0] : null;\n\n signals.push(\n ...channels.reduce((arr, proj) => arr.concat(channelSignals(model, selCmpt, proj, init && init[proj.index])), [])\n );\n\n if (!model.hasProjection) {\n // Proxy scale reactions to ensure that an infinite loop doesn't occur\n // when an interval selection filter touches the scale.\n if (!scales.defined(selCmpt)) {\n const triggerSg = name + SCALE_TRIGGER;\n const scaleTriggers = channels.map(proj => {\n const channel = proj.channel as 'x' | 'y';\n const {data: dname, visual: vname} = proj.signals;\n const scaleName = stringValue(model.scaleName(channel));\n const scaleType = model.getScaleComponent(channel).get('type');\n const toNum = hasContinuousDomain(scaleType) ? '+' : '';\n return (\n `(!isArray(${dname}) || ` +\n `(${toNum}invert(${scaleName}, ${vname})[0] === ${toNum}${dname}[0] && ` +\n `${toNum}invert(${scaleName}, ${vname})[1] === ${toNum}${dname}[1]))`\n );\n });\n\n if (scaleTriggers.length) {\n signals.push({\n name: triggerSg,\n value: {},\n on: [\n {\n events: channels.map(proj => ({scale: model.scaleName(proj.channel)})),\n update: scaleTriggers.join(' && ') + ` ? ${triggerSg} : {}`\n }\n ]\n });\n }\n }\n\n // Only add an interval to the store if it has valid data extents. Data extents\n // are set to null if pixel extents are equal to account for intervals over\n // ordinal/nominal domains which, when inverted, will still produce a valid datum.\n const dataSignals = channels.map(proj => proj.signals.data);\n const update = `unit: ${unitName(model)}, fields: ${name + TUPLE_FIELDS}, values`;\n return signals.concat({\n name: tupleSg,\n ...(init ? {init: `{${update}: ${assembleInit(init)}}`} : {}),\n ...(dataSignals.length\n ? {\n on: [\n {\n events: [{signal: dataSignals.join(' || ')}], // Prevents double invocation, see https://github.com/vega/vega/issues/1672.\n update: `${dataSignals.join(' && ')} ? {${update}: [${dataSignals}]} : null`\n }\n ]\n }\n : {})\n });\n } else {\n const projection = stringValue(model.projectionName());\n const centerSg = model.projectionName() + CENTER;\n const {x, y} = selCmpt.project.hasChannel;\n const xvname = x && x.signals.visual;\n const yvname = y && y.signals.visual;\n const xinit = x ? init && init[x.index] : `${centerSg}[0]`;\n const yinit = y ? init && init[y.index] : `${centerSg}[1]`;\n const sizeSg = (layout: keyof LayoutSizeIndex) => model.getSizeSignalRef(layout).signal;\n const bbox =\n `[` +\n `[${xvname ? xvname + '[0]' : '0'}, ${yvname ? yvname + '[0]' : '0'}],` +\n `[${xvname ? xvname + '[1]' : sizeSg('width')}, ` +\n `${yvname ? yvname + '[1]' : sizeSg('height')}]` +\n `]`;\n\n if (init) {\n signals.unshift({\n name: name + INIT,\n init:\n `[scale(${projection}, [${x ? xinit[0] : xinit}, ${y ? yinit[0] : yinit}]), ` +\n `scale(${projection}, [${x ? xinit[1] : xinit}, ${y ? yinit[1] : yinit}])]`\n });\n\n if (!x || !y) {\n // If initializing a uni-dimensional brush, use the center of the view to determine the other coord\n const hasCenterSg = signals.find(s => s.name === centerSg);\n if (!hasCenterSg) {\n signals.unshift({\n name: centerSg,\n update: `invert(${projection}, [${sizeSg('width')}/2, ${sizeSg('height')}/2])`\n });\n }\n }\n }\n\n const intersect = `intersect(${bbox}, {markname: ${stringValue(model.getName('marks'))}}, unit.mark)`;\n const base = `{unit: ${unitName(model)}}`;\n const update = `vlSelectionTuples(${intersect}, ${base})`;\n const visualSignals = channels.map(proj => proj.signals.visual);\n\n return signals.concat({\n name: tupleSg,\n on: [\n {\n events: [\n ...(visualSignals.length ? [{signal: visualSignals.join(' || ')}] : []),\n ...(init ? [{signal: GEO_INIT_TICK}] : [])\n ],\n update\n }\n ]\n });\n }\n },\n\n topLevelSignals: (model, selCmpt, signals) => {\n if (isUnitModel(model) && model.hasProjection && selCmpt.init) {\n // Workaround for https://github.com/vega/vega/issues/3481\n // The scenegraph isn't populated on the first pulse. So we use a timer signal\n // to re-pulse the dataflow as soon as possible. We return an object to ensure\n // this only occurs once.\n const hasTick = signals.filter(s => s.name === GEO_INIT_TICK);\n if (!hasTick.length) {\n signals.unshift({\n name: GEO_INIT_TICK,\n value: null,\n on: [\n {\n events: 'timer{1}',\n update: `${GEO_INIT_TICK} === null ? {} : ${GEO_INIT_TICK}`\n }\n ]\n });\n }\n }\n\n return signals;\n },\n\n marks: (model, selCmpt, marks) => {\n const name = selCmpt.name;\n const {x, y} = selCmpt.project.hasChannel;\n const xvname = x?.signals.visual;\n const yvname = y?.signals.visual;\n const store = `data(${stringValue(selCmpt.name + STORE)})`;\n\n // Do not add a brush if we're binding to scales\n // or we don't have a valid interval projection\n if (scales.defined(selCmpt) || (!x && !y)) {\n return marks;\n }\n\n const update: any = {\n x: x !== undefined ? {signal: `${xvname}[0]`} : {value: 0},\n y: y !== undefined ? {signal: `${yvname}[0]`} : {value: 0},\n x2: x !== undefined ? {signal: `${xvname}[1]`} : {field: {group: 'width'}},\n y2: y !== undefined ? {signal: `${yvname}[1]`} : {field: {group: 'height'}}\n };\n\n // If the selection is resolved to global, only a single interval is in\n // the store. Wrap brush mark's encodings with a production rule to test\n // this based on the `unit` property. Hide the brush mark if it corresponds\n // to a unit different from the one in the store.\n if (selCmpt.resolve === 'global') {\n for (const key of keys(update)) {\n update[key] = [\n {\n test: `${store}.length && ${store}[0].unit === ${unitName(model)}`,\n ...update[key]\n },\n {value: 0}\n ];\n }\n }\n\n // Two brush marks ensure that fill colors and other aesthetic choices do\n // not interefere with the core marks, but that the brushed region can still\n // be interacted with (e.g., dragging it around).\n const {fill, fillOpacity, cursor, ...stroke} = selCmpt.mark;\n const vgStroke = keys(stroke).reduce(\n (def, k) => {\n def[k] = [\n {\n test: [\n x !== undefined && `${xvname}[0] !== ${xvname}[1]`,\n y !== undefined && `${yvname}[0] !== ${yvname}[1]`\n ]\n .filter(t => t)\n .join(' && '),\n value: stroke[k]\n },\n {value: null}\n ];\n return def;\n },\n {} as Record<keyof typeof stroke, any>\n );\n\n // Set cursor to move unless the brush cannot be translated\n const vgCursor = cursor ?? (selCmpt.translate ? 'move' : null);\n\n return [\n {\n name: `${name + BRUSH}_bg`,\n type: 'rect',\n clip: true,\n encode: {\n enter: {\n fill: {value: fill},\n fillOpacity: {value: fillOpacity}\n },\n update\n }\n },\n ...marks,\n {\n name: name + BRUSH,\n type: 'rect',\n clip: true,\n encode: {\n enter: {\n ...(vgCursor ? {cursor: {value: vgCursor}} : {}),\n fill: {value: 'transparent'}\n },\n update: {...update, ...vgStroke}\n }\n }\n ];\n }\n};\nexport default interval;\n\n/**\n * Returns the visual and data signals for an interval selection.\n */\nfunction channelSignals(\n model: UnitModel,\n selCmpt: SelectionComponent<'interval'>,\n proj: SelectionProjection,\n init: SelectionInitInterval\n): NewSignal[] {\n const scaledInterval = !model.hasProjection;\n const channel = proj.channel;\n const vname = proj.signals.visual;\n\n const scaleName = stringValue(scaledInterval ? model.scaleName(channel) : model.projectionName());\n const scaled = (str: string) => `scale(${scaleName}, ${str})`;\n\n const size = model.getSizeSignalRef(channel === X ? 'width' : 'height').signal;\n const coord = `${channel}(unit)`;\n const von = selCmpt.events.reduce((def: OnEvent[], evt: Stream) => {\n return [\n ...def,\n {events: evt.between[0], update: `[${coord}, ${coord}]`}, // Brush Start\n {events: evt, update: `[${vname}[0], clamp(${coord}, 0, ${size})]`} // Brush End\n ];\n }, []);\n\n if (scaledInterval) {\n const dname = proj.signals.data;\n const hasScales = scales.defined(selCmpt);\n const scale = model.getScaleComponent(channel as ScaleChannel);\n const scaleType = scale ? scale.get('type') : undefined;\n const vinit: SignalValue = init ? {init: assembleInit(init, true, scaled)} : {value: []};\n\n // React to pan/zooms of continuous scales. Non-continuous scales\n // (band, point) cannot be pan/zoomed and any other changes\n // to their domains (e.g., filtering) should clear the brushes.\n von.push({\n events: {signal: selCmpt.name + SCALE_TRIGGER},\n update: hasContinuousDomain(scaleType) ? `[${scaled(`${dname}[0]`)}, ${scaled(`${dname}[1]`)}]` : `[0, 0]`\n });\n\n return hasScales\n ? [{name: dname, on: []}]\n : [\n {name: vname, ...vinit, on: von},\n {\n name: dname,\n ...(init ? {init: assembleInit(init)} : {}), // Cannot be `value` as `init` may require datetime exprs.\n on: [\n {\n events: {signal: vname},\n update: `${vname}[0] === ${vname}[1] ? null : invert(${scaleName}, ${vname})`\n }\n ]\n }\n ];\n } else {\n const initIdx = channel === X ? 0 : 1;\n const initSg = selCmpt.name + INIT;\n const vinit: SignalValue = init ? {init: `[${initSg}[0][${initIdx}], ${initSg}[1][${initIdx}]]`} : {value: []};\n return [{name: vname, ...vinit, on: von}];\n }\n}\n", "import {array} from 'vega-util';\nimport {ChannelDef, ConditionalPredicate, isConditionalDef, isConditionalParameter} from '../../../channeldef';\nimport {GuideEncodingConditionalValueDef} from '../../../guide';\nimport {VgEncodeEntry, VgValueRef} from '../../../vega.schema';\nimport {expression} from '../../predicate';\nimport {parseSelectionPredicate} from '../../selection/parse';\nimport {UnitModel} from '../../unit';\n\n/**\n * Return a VgEncodeEntry that includes a Vega production rule for a scale channel's encoding or guide encoding, which includes:\n * (1) the conditional rules (if provided as part of channelDef)\n * (2) invalidValueRef for handling invalid values (if provided as a parameter of this method)\n * (3) main reference for the encoded data.\n */\nexport function wrapCondition<CD extends ChannelDef | GuideEncodingConditionalValueDef>({\n model,\n channelDef,\n vgChannel,\n invalidValueRef,\n mainRefFn\n}: {\n model: UnitModel;\n channelDef: CD;\n vgChannel: string;\n\n /**\n * invalidValue for a scale channel if the invalidDataMode is include for the channel.\n * For scale channel with other invalidDataMode or non-scale channel, this value should be undefined.\n */\n invalidValueRef: VgValueRef | undefined;\n mainRefFn: (cDef: CD) => VgValueRef;\n}): VgEncodeEntry {\n const condition = isConditionalDef<CD>(channelDef) && channelDef.condition;\n\n let valueRefs: VgValueRef[] = [];\n\n if (condition) {\n const conditions = array(condition);\n valueRefs = conditions.map(c => {\n const conditionValueRef = mainRefFn(c);\n if (isConditionalParameter<any>(c)) {\n const {param, empty} = c;\n const test = parseSelectionPredicate(model, {param, empty});\n return {test, ...conditionValueRef};\n } else {\n const test = expression(model, (c as ConditionalPredicate<any>).test); // FIXME: remove casting once TS is no longer dumb about it\n return {test, ...conditionValueRef};\n }\n });\n }\n\n if (invalidValueRef !== undefined) {\n valueRefs.push(invalidValueRef);\n }\n\n const mainValueRef = mainRefFn(channelDef);\n if (mainValueRef !== undefined) {\n valueRefs.push(mainValueRef);\n }\n\n if (\n valueRefs.length > 1 ||\n (valueRefs.length === 1 && Boolean(valueRefs[0].test)) // We must use array form valueRefs if test exists, otherwise Vega won't execute the test.\n ) {\n return {[vgChannel]: valueRefs};\n } else if (valueRefs.length === 1) {\n return {[vgChannel]: valueRefs[0]};\n }\n return {};\n}\n", "import {getFormatMixins, isFieldOrDatumDef, isValueDef} from '../../../channeldef';\nimport {Config} from '../../../config';\nimport {Encoding} from '../../../encoding';\nimport {VgValueRef} from '../../../vega.schema';\nimport {signalOrValueRef} from '../../common';\nimport {formatSignalRef} from '../../format';\nimport {UnitModel} from '../../unit';\nimport {wrapCondition} from './conditional';\n\nexport function text(model: UnitModel, channel: 'text' | 'href' | 'url' | 'description' = 'text') {\n const channelDef = model.encoding[channel];\n return wrapCondition({\n model,\n channelDef,\n vgChannel: channel,\n mainRefFn: cDef => textRef(cDef, model.config),\n invalidValueRef: undefined // text encoding doesn't have continuous scales and thus can't have invalid values\n });\n}\n\nexport function textRef(\n channelDef: Encoding<string>['text' | 'tooltip'],\n config: Config,\n expr: 'datum' | 'datum.datum' = 'datum'\n): VgValueRef {\n // text\n if (channelDef) {\n if (isValueDef(channelDef)) {\n return signalOrValueRef(channelDef.value);\n }\n if (isFieldOrDatumDef(channelDef)) {\n const {format, formatType} = getFormatMixins(channelDef);\n return formatSignalRef({fieldOrDatumDef: channelDef, format, formatType, expr, config});\n }\n }\n return undefined;\n}\n", "import {array, isArray, isObject, isString} from 'vega-util';\nimport {isBinned} from '../../../bin';\nimport {getMainRangeChannel, isXorY, Channel, THETA, RADIUS} from '../../../channel';\nimport {\n defaultTitle,\n getFieldDef,\n getFormatMixins,\n hasConditionalFieldDef,\n isFieldDef,\n isTypedFieldDef,\n SecondaryFieldDef,\n TypedFieldDef,\n vgField\n} from '../../../channeldef';\nimport {Config} from '../../../config';\nimport {Encoding, forEach} from '../../../encoding';\nimport {StackProperties} from '../../../stack';\nimport {Dict, entries} from '../../../util';\nimport {isSignalRef} from '../../../vega.schema';\nimport {getMarkPropOrConfig} from '../../common';\nimport {binFormatExpression, formatSignalRef} from '../../format';\nimport {UnitModel} from '../../unit';\nimport {wrapCondition} from './conditional';\nimport {textRef} from './text';\n\nexport function tooltip(model: UnitModel, opt: {reactiveGeom?: boolean} = {}) {\n const {encoding, markDef, config, stack} = model;\n const channelDef = encoding.tooltip;\n if (isArray(channelDef)) {\n return {tooltip: tooltipRefForEncoding({tooltip: channelDef}, stack, config, opt)};\n } else {\n const datum = opt.reactiveGeom ? 'datum.datum' : 'datum';\n const mainRefFn = (cDef: Encoding<string>['tooltip']) => {\n // use valueRef based on channelDef first\n const tooltipRefFromChannelDef = textRef(cDef, config, datum);\n if (tooltipRefFromChannelDef) {\n return tooltipRefFromChannelDef;\n }\n\n if (cDef === null) {\n // Allow using encoding.tooltip = null to disable tooltip\n return undefined;\n }\n\n let markTooltip = getMarkPropOrConfig('tooltip', markDef, config);\n\n if (markTooltip === true) {\n markTooltip = {content: 'encoding'};\n }\n\n if (isString(markTooltip)) {\n return {value: markTooltip};\n } else if (isObject(markTooltip)) {\n // `tooltip` is `{fields: 'encodings' | 'fields'}`\n if (isSignalRef(markTooltip)) {\n return markTooltip;\n } else if (markTooltip.content === 'encoding') {\n return tooltipRefForEncoding(encoding, stack, config, opt);\n } else {\n return {signal: datum};\n }\n }\n\n return undefined;\n };\n\n return wrapCondition({\n model,\n channelDef,\n vgChannel: 'tooltip',\n mainRefFn,\n invalidValueRef: undefined // tooltip encoding doesn't have continuous scales and thus can't have invalid values\n });\n }\n}\n\nexport function tooltipData(\n encoding: Encoding<string>,\n stack: StackProperties,\n config: Config,\n {reactiveGeom}: {reactiveGeom?: boolean} = {}\n) {\n const formatConfig = {...config, ...config.tooltipFormat};\n const toSkip = new Set();\n const expr = reactiveGeom ? 'datum.datum' : 'datum';\n const tuples: {channel: Channel; key: string; value: string}[] = [];\n\n function add(fDef: TypedFieldDef<string> | SecondaryFieldDef<string>, channel: Channel) {\n const mainChannel = getMainRangeChannel(channel);\n\n const fieldDef: TypedFieldDef<string> = isTypedFieldDef(fDef)\n ? fDef\n : {\n ...fDef,\n type: (encoding[mainChannel] as TypedFieldDef<any>).type // for secondary field def, copy type from main channel\n };\n\n const title = fieldDef.title || defaultTitle(fieldDef, formatConfig);\n const key = array(title).join(', ').replaceAll(/\"/g, '\\\\\"');\n\n let value: string;\n\n if (isXorY(channel)) {\n const channel2 = channel === 'x' ? 'x2' : 'y2';\n const fieldDef2 = getFieldDef(encoding[channel2]);\n\n if (isBinned(fieldDef.bin) && fieldDef2) {\n const startField = vgField(fieldDef, {expr});\n const endField = vgField(fieldDef2, {expr});\n const {format, formatType} = getFormatMixins(fieldDef);\n value = binFormatExpression(startField, endField, format, formatType, formatConfig);\n toSkip.add(channel2);\n }\n }\n\n if (\n (isXorY(channel) || channel === THETA || channel === RADIUS) &&\n stack &&\n stack.fieldChannel === channel &&\n stack.offset === 'normalize'\n ) {\n const {format, formatType} = getFormatMixins(fieldDef);\n value = formatSignalRef({\n fieldOrDatumDef: fieldDef,\n format,\n formatType,\n expr,\n config: formatConfig,\n normalizeStack: true\n }).signal;\n }\n\n value ??= textRef(fieldDef, formatConfig, expr).signal;\n\n tuples.push({channel, key, value});\n }\n\n forEach(encoding, (channelDef, channel) => {\n if (isFieldDef(channelDef)) {\n add(channelDef, channel);\n } else if (hasConditionalFieldDef(channelDef)) {\n add(channelDef.condition, channel);\n }\n });\n\n const out: Dict<string> = {};\n for (const {channel, key, value} of tuples) {\n if (!toSkip.has(channel) && !out[key]) {\n out[key] = value;\n }\n }\n\n return out;\n}\n\nexport function tooltipRefForEncoding(\n encoding: Encoding<string>,\n stack: StackProperties,\n config: Config,\n {reactiveGeom}: {reactiveGeom?: boolean} = {}\n) {\n const data = tooltipData(encoding, stack, config, {reactiveGeom});\n\n const keyValues = entries(data).map(([key, value]) => `\"${key}\": ${value}`);\n return keyValues.length > 0 ? {signal: `{${keyValues.join(', ')}}`} : undefined;\n}\n", "import {hasOwnProperty} from 'vega-util';\nimport {entries, isEmpty} from '../../../util';\nimport {getMarkPropOrConfig, signalOrValueRef} from '../../common';\nimport {VG_MARK_INDEX} from './../../../vega.schema';\nimport {UnitModel} from './../../unit';\nimport {wrapCondition} from './conditional';\nimport {textRef} from './text';\nimport {tooltipData} from './tooltip';\n\nexport function aria(model: UnitModel) {\n const {markDef, config} = model;\n\n const enableAria = getMarkPropOrConfig('aria', markDef, config);\n\n // We can ignore other aria properties if ariaHidden is true.\n if (enableAria === false) {\n // getMarkGroups sets aria to false already so we don't have to set it in the encode block\n return {};\n }\n\n return {\n ...(enableAria ? {aria: enableAria} : {}),\n ...ariaRoleDescription(model),\n ...description(model)\n };\n}\n\nfunction ariaRoleDescription(model: UnitModel) {\n const {mark, markDef, config} = model;\n\n if (config.aria === false) {\n return {};\n }\n\n const ariaRoleDesc = getMarkPropOrConfig('ariaRoleDescription', markDef, config);\n\n if (ariaRoleDesc != null) {\n return {ariaRoleDescription: {value: ariaRoleDesc}};\n }\n\n return hasOwnProperty(VG_MARK_INDEX, mark) ? {} : {ariaRoleDescription: {value: mark}};\n}\n\nexport function description(model: UnitModel) {\n const {encoding, markDef, config, stack} = model;\n const channelDef = encoding.description;\n\n if (channelDef) {\n return wrapCondition({\n model,\n channelDef,\n vgChannel: 'description',\n mainRefFn: cDef => textRef(cDef, model.config),\n invalidValueRef: undefined // aria encoding doesn't have continuous scales and thus can't have invalid values\n });\n }\n\n // Use default from mark def or config if defined.\n // Functions in encode usually just return undefined but since we are defining a default below, we need to check the default here.\n const descriptionValue = getMarkPropOrConfig('description', markDef, config);\n if (descriptionValue != null) {\n return {\n description: signalOrValueRef(descriptionValue)\n };\n }\n\n if (config.aria === false) {\n return {};\n }\n\n const data = tooltipData(encoding, stack, config);\n\n if (isEmpty(data)) {\n return undefined;\n }\n\n return {\n description: {\n signal: entries(data)\n .map(([key, value], index) => `\"${index > 0 ? '; ' : ''}${key}: \" + (${value})`)\n .join(' + ')\n }\n };\n}\n", "import type {SignalRef} from 'vega';\nimport {NonPositionScaleChannel} from '../../../channel';\nimport {Value, isConditionalDef} from '../../../channeldef';\nimport {VgEncodeChannel, VgEncodeEntry, VgValueRef} from '../../../vega.schema';\nimport {getMarkPropOrConfig, signalOrValueRef} from '../../common';\nimport {UnitModel} from '../../unit';\nimport {wrapCondition} from './conditional';\nimport * as ref from './valueref';\nimport {getConditionalValueRefForIncludingInvalidValue} from './invalid';\n\n/**\n * Return encode for non-positional channels with scales. (Text doesn't have scale.)\n */\nexport function nonPosition(\n channel: NonPositionScaleChannel,\n model: UnitModel,\n opt: {\n defaultValue?: Value | SignalRef;\n vgChannel?: VgEncodeChannel;\n defaultRef?: VgValueRef;\n } = {}\n): VgEncodeEntry {\n const {markDef, encoding, config} = model;\n const {vgChannel} = opt;\n let {defaultRef, defaultValue} = opt;\n\n const channelDef = encoding[channel];\n\n if (defaultRef === undefined) {\n // prettier-ignore\n defaultValue ??= getMarkPropOrConfig(channel, markDef, config, {\n vgChannel,\n // If there is no conditonal def, we ignore vgConfig so the output spec is concise.\n // However, if there is a conditional def, we must include vgConfig so the default is respected.\n ignoreVgConfig: !isConditionalDef(channelDef)\n });\n\n if (defaultValue !== undefined) {\n defaultRef = signalOrValueRef(defaultValue);\n }\n }\n\n const commonProps = {\n markDef,\n config,\n scaleName: model.scaleName(channel),\n scale: model.getScaleComponent(channel)\n };\n\n const invalidValueRef = getConditionalValueRefForIncludingInvalidValue({\n ...commonProps,\n scaleChannel: channel,\n channelDef\n });\n\n const mainRefFn = (cDef: typeof channelDef) => {\n return ref.midPoint({\n ...commonProps,\n channel,\n channelDef: cDef,\n stack: null, // No need to provide stack for non-position as it does not affect mid point\n defaultRef\n });\n };\n\n return wrapCondition({\n model,\n channelDef,\n vgChannel: vgChannel ?? channel,\n invalidValueRef,\n mainRefFn\n });\n}\n", "import * as log from '../../../log';\nimport {contains} from '../../../util';\nimport {VgEncodeEntry} from '../../../vega.schema';\nimport {getMarkPropOrConfig, signalOrValueRef} from '../../common';\nimport {UnitModel} from '../../unit';\nimport {nonPosition} from './nonposition';\n\nexport function color(model: UnitModel, opt: {filled: boolean | undefined} = {filled: undefined}): VgEncodeEntry {\n const {markDef, encoding, config} = model;\n const {type: markType} = markDef;\n\n // Allow filled to be overridden (for trail's \"filled\")\n const filled = opt.filled ?? getMarkPropOrConfig('filled', markDef, config);\n\n const transparentIfNeeded = contains(['bar', 'point', 'circle', 'square', 'geoshape'], markType)\n ? 'transparent'\n : undefined;\n\n const defaultFill =\n getMarkPropOrConfig(filled === true ? 'color' : undefined, markDef, config, {vgChannel: 'fill'}) ??\n // need to add this manually as getMarkConfig normally drops config.mark[channel] if vgChannel is specified\n (config.mark as any)[filled === true && 'color'] ??\n // If there is no fill, always fill symbols, bar, geoshape\n // with transparent fills https://github.com/vega/vega-lite/issues/1316\n transparentIfNeeded;\n\n const defaultStroke =\n getMarkPropOrConfig(filled === false ? 'color' : undefined, markDef, config, {vgChannel: 'stroke'}) ??\n // need to add this manually as getMarkConfig normally drops config.mark[channel] if vgChannel is specified\n (config.mark as any)[filled === false && 'color'];\n\n const colorVgChannel = filled ? 'fill' : 'stroke';\n\n const fillStrokeMarkDefAndConfig: VgEncodeEntry = {\n ...(defaultFill ? {fill: signalOrValueRef(defaultFill)} : {}),\n ...(defaultStroke ? {stroke: signalOrValueRef(defaultStroke)} : {})\n };\n\n if (markDef.color && (filled ? markDef.fill : markDef.stroke)) {\n log.warn(log.message.droppingColor('property', {fill: 'fill' in markDef, stroke: 'stroke' in markDef}));\n }\n\n return {\n ...fillStrokeMarkDefAndConfig,\n ...nonPosition('color', model, {\n vgChannel: colorVgChannel,\n defaultValue: filled ? defaultFill : defaultStroke\n }),\n ...nonPosition('fill', model, {\n // if there is encoding.fill, include default fill just in case we have conditional-only fill encoding\n defaultValue: encoding.fill ? defaultFill : undefined\n }),\n ...nonPosition('stroke', model, {\n // if there is encoding.stroke, include default fill just in case we have conditional-only stroke encoding\n defaultValue: encoding.stroke ? defaultStroke : undefined\n })\n };\n}\n", "import {isValueDef} from '../../../channeldef';\nimport {isPathMark} from '../../../mark';\nimport {signalOrValueRef} from '../../common';\nimport {UnitModel} from '../../unit';\nimport {wrapCondition} from './conditional';\n\nexport function zindex(model: UnitModel) {\n const {encoding, mark} = model;\n const order = encoding.order;\n\n if (!isPathMark(mark) && isValueDef(order)) {\n return wrapCondition({\n model,\n channelDef: order,\n vgChannel: 'zindex',\n mainRefFn: cd => signalOrValueRef(cd.value),\n invalidValueRef: undefined // zindex encoding doesn't have continuous scales and thus can't have invalid values\n });\n }\n return {};\n}\n", "/**\n * Utility files for producing Vega ValueRef for marks\n */\nimport type {SignalRef} from 'vega';\nimport {PolarPositionChannel, PositionChannel} from '../../../channel';\nimport {Encoding} from '../../../encoding';\nimport {Mark, MarkDef} from '../../../mark';\nimport {VgValueRef} from '../../../vega.schema';\nimport {signalOrValueRef} from '../../common';\nimport {UnitModel} from '../../unit';\nimport {midPoint} from './valueref';\n\nexport interface Offset {\n offsetType?: 'visual' | 'encoding';\n offset?: number | VgValueRef;\n}\n\nexport function positionOffset({\n channel: baseChannel,\n markDef,\n encoding = {},\n model,\n bandPosition\n}: {\n channel: PositionChannel | PolarPositionChannel;\n markDef: MarkDef<Mark, SignalRef>;\n encoding?: Encoding<string>;\n model?: UnitModel;\n bandPosition?: number;\n}): Offset {\n const channel = `${baseChannel}Offset` as\n | 'xOffset'\n | 'yOffset'\n | 'x2Offset'\n | 'y2Offset'\n | 'thetaOffset'\n | 'radiusOffset'\n | 'theta2Offset'\n | 'radius2Offset'; // Need to cast as the type can't be inferred automatically\n\n const defaultValue = markDef[channel];\n // FIXME: remove as any\n const channelDef = (encoding as any)[channel];\n\n if ((channel === 'xOffset' || channel === 'yOffset') && channelDef) {\n const ref = midPoint({\n channel: channel,\n channelDef,\n markDef,\n config: model?.config,\n scaleName: model.scaleName(channel),\n scale: model.getScaleComponent(channel),\n stack: null,\n defaultRef: signalOrValueRef(defaultValue),\n bandPosition\n });\n return {offsetType: 'encoding', offset: ref};\n }\n\n const markDefOffsetValue = markDef[channel];\n if (markDefOffsetValue) {\n return {offsetType: 'visual', offset: markDefOffsetValue};\n }\n\n return {};\n}\n", "import {\n getMainRangeChannel,\n getSecondaryRangeChannel,\n getSizeChannel,\n getVgPositionChannel,\n isXorY,\n PolarPositionChannel,\n PolarPositionScaleChannel,\n PositionChannel,\n PositionScaleChannel\n} from '../../../channel';\nimport {isFieldDef, isFieldOrDatumDef, TypedFieldDef} from '../../../channeldef';\nimport {Config} from '../../../config';\nimport {VgValueRef} from '../../../vega.schema';\nimport {getMarkPropOrConfig} from '../../common';\nimport {ScaleComponent} from '../../scale/component';\nimport {UnitModel} from '../../unit';\nimport {positionOffset} from './offset';\nimport * as ref from './valueref';\nimport {scaledZeroOrMinOrMax, ScaledZeroOrMinOrMaxProps} from './scaledZeroOrMinOrMax';\n\n/**\n * Return encode for point (non-band) position channels.\n */\nexport function pointPosition(\n channel: 'x' | 'y' | 'theta' | 'radius',\n model: UnitModel,\n {\n defaultPos,\n vgChannel\n }: {\n defaultPos: 'mid' | 'zeroOrMin' | 'zeroOrMax' | null;\n vgChannel?: 'x' | 'y' | 'xc' | 'yc';\n }\n) {\n const {encoding, markDef, config, stack} = model;\n\n const channelDef = encoding[channel];\n const channel2Def = encoding[getSecondaryRangeChannel(channel)];\n const scaleName = model.scaleName(channel);\n const scale = model.getScaleComponent(channel);\n\n const {offset, offsetType} = positionOffset({\n channel,\n markDef,\n encoding,\n model,\n bandPosition: 0.5\n });\n\n // Get default position or position from mark def\n const defaultRef = pointPositionDefaultRef({\n model,\n defaultPos,\n channel,\n scaleName,\n scale\n });\n\n const valueRef =\n !channelDef && isXorY(channel) && (encoding.latitude || encoding.longitude)\n ? // use geopoint output if there are lat/long and there is no point position overriding lat/long.\n {field: model.getName(channel)}\n : positionRef({\n channel,\n channelDef,\n channel2Def,\n markDef,\n config,\n scaleName,\n scale,\n stack,\n offset,\n defaultRef,\n bandPosition: offsetType === 'encoding' ? 0 : undefined\n });\n\n return valueRef ? {[vgChannel || channel]: valueRef} : undefined;\n}\n\n// TODO: we need to find a way to refactor these so that scaleName is a part of scale\n// but that's complicated. For now, this is a huge step moving forward.\n\n/**\n * @return Vega ValueRef for normal x- or y-position without projection\n */\nexport function positionRef(\n params: ref.MidPointParams & {\n channel: 'x' | 'y' | 'radius' | 'theta';\n }\n): VgValueRef | VgValueRef[] {\n const {channel, channelDef, scaleName, stack, offset, markDef} = params;\n\n // This isn't a part of midPoint because we use midPoint for non-position too\n if (isFieldOrDatumDef(channelDef) && stack && channel === stack.fieldChannel) {\n if (isFieldDef(channelDef)) {\n let bandPosition = channelDef.bandPosition;\n\n if (bandPosition === undefined && markDef.type === 'text' && (channel === 'radius' || channel === 'theta')) {\n // theta and radius of text mark should use bandPosition = 0.5 by default\n // so that labels for arc marks are centered automatically\n bandPosition = 0.5;\n }\n\n if (bandPosition !== undefined) {\n return ref.interpolatedSignalRef({\n scaleName,\n fieldOrDatumDef: channelDef as TypedFieldDef<string>, // positionRef always have type\n startSuffix: 'start',\n bandPosition,\n offset\n });\n }\n }\n // x or y use stack_end so that stacked line's point mark use stack_end too.\n return ref.valueRefForFieldOrDatumDef(channelDef, scaleName, {suffix: 'end'}, {offset});\n }\n\n return ref.midPointRefWithPositionInvalidTest(params);\n}\n\nexport function pointPositionDefaultRef({\n model,\n defaultPos,\n channel,\n scaleName,\n scale\n}: {\n model: UnitModel;\n defaultPos: 'mid' | 'zeroOrMin' | 'zeroOrMax' | null;\n channel: PositionChannel | PolarPositionChannel;\n scaleName: string;\n scale: ScaleComponent;\n}): () => VgValueRef {\n const {markDef, config} = model;\n return () => {\n const mainChannel = getMainRangeChannel(channel);\n const vgChannel = getVgPositionChannel(channel);\n\n const definedValueOrConfig = getMarkPropOrConfig(channel, markDef, config, {vgChannel});\n if (definedValueOrConfig !== undefined) {\n return ref.widthHeightValueOrSignalRef(channel, definedValueOrConfig);\n }\n\n switch (defaultPos) {\n case 'zeroOrMin':\n return zeroOrMinOrMaxPosition({scaleName, scale, mode: 'zeroOrMin', mainChannel, config});\n case 'zeroOrMax':\n return zeroOrMinOrMaxPosition({\n scaleName,\n scale,\n mode: {zeroOrMax: {widthSignal: model.width.signal, heightSignal: model.height.signal}},\n mainChannel,\n config\n });\n case 'mid': {\n const sizeRef = model[getSizeChannel(channel)];\n return {...sizeRef, mult: 0.5};\n }\n }\n // defaultPos === null\n return undefined;\n };\n}\n\nfunction zeroOrMinOrMaxPosition({\n mainChannel,\n config,\n ...otherProps\n}: ScaledZeroOrMinOrMaxProps & {\n mainChannel: PositionScaleChannel | PolarPositionScaleChannel;\n config: Config;\n}): VgValueRef {\n const scaledValueRef = scaledZeroOrMinOrMax(otherProps);\n const {mode} = otherProps;\n\n if (scaledValueRef) {\n return scaledValueRef;\n }\n\n switch (mainChannel) {\n case 'radius': {\n if (mode === 'zeroOrMin') {\n return {value: 0}; // min value\n }\n const {widthSignal, heightSignal} = mode.zeroOrMax;\n // max of radius is min(width, height) / 2\n return {\n signal: `min(${widthSignal},${heightSignal})/2`\n };\n }\n case 'theta':\n return mode === 'zeroOrMin' ? {value: 0} : {signal: '2*PI'};\n case 'x':\n return mode === 'zeroOrMin' ? {value: 0} : {field: {group: 'width'}};\n case 'y':\n return mode === 'zeroOrMin' ? {field: {group: 'height'}} : {value: 0};\n }\n}\n", "import {Align, SignalRef, TextBaseline} from 'vega';\nimport {getVgPositionChannel} from '../../../channel';\nimport {Config} from '../../../config';\nimport * as log from '../../../log';\nimport {Mark, MarkDef} from '../../../mark';\nimport {isSignalRef, VgEncodeChannel} from '../../../vega.schema';\nimport {getMarkPropOrConfig} from '../../common';\n\nconst ALIGNED_X_CHANNEL: Record<Align, VgEncodeChannel> = {\n left: 'x',\n center: 'xc',\n right: 'x2'\n};\n\nconst BASELINED_Y_CHANNEL = {\n top: 'y',\n middle: 'yc',\n bottom: 'y2'\n};\n\nexport function vgAlignedPositionChannel(\n channel: 'x' | 'y' | 'radius' | 'theta',\n markDef: MarkDef<Mark, SignalRef>,\n config: Config<SignalRef>,\n defaultAlign: 'top' | 'middle' = 'middle'\n) {\n if (channel === 'radius' || channel === 'theta') {\n return getVgPositionChannel(channel);\n }\n const alignChannel = channel === 'x' ? 'align' : 'baseline';\n const align = getMarkPropOrConfig(alignChannel, markDef, config);\n\n let alignExcludingSignal: Align | TextBaseline;\n\n if (isSignalRef(align)) {\n log.warn(log.message.rangeMarkAlignmentCannotBeExpression(alignChannel));\n alignExcludingSignal = undefined;\n } else {\n alignExcludingSignal = align;\n }\n\n // FIXME: remove as any\n if (channel === 'x') {\n return (ALIGNED_X_CHANNEL as any)[alignExcludingSignal || (defaultAlign === 'top' ? 'left' : 'center')];\n } else {\n return (BASELINED_Y_CHANNEL as any)[alignExcludingSignal || defaultAlign];\n }\n}\n", "import type {SignalRef} from 'vega';\nimport {getMainRangeChannel, getSecondaryRangeChannel, getSizeChannel, getVgPositionChannel} from '../../../channel';\nimport {isFieldOrDatumDef} from '../../../channeldef';\nimport * as log from '../../../log';\nimport {isRelativeBandSize, Mark, MarkConfig, MarkDef} from '../../../mark';\nimport {VgEncodeEntry, VgValueRef} from '../../../vega.schema';\nimport {getMarkStyleConfig} from '../../common';\nimport {UnitModel} from '../../unit';\nimport {positionOffset} from './offset';\nimport {vgAlignedPositionChannel} from './position-align';\nimport {pointPosition, pointPositionDefaultRef} from './position-point';\nimport * as ref from './valueref';\n\n/**\n * Utility for area/rule position, which can be either point or range.\n * (One of the axes should be point and the other should be range.)\n */\nexport function pointOrRangePosition(\n channel: 'x' | 'y',\n model: UnitModel,\n {\n defaultPos,\n defaultPos2,\n range\n }: {\n defaultPos: 'zeroOrMin' | 'zeroOrMax' | 'mid';\n defaultPos2: 'zeroOrMin' | 'zeroOrMax';\n range: boolean;\n }\n) {\n if (range) {\n return rangePosition(channel, model, {defaultPos, defaultPos2});\n }\n return pointPosition(channel, model, {defaultPos});\n}\n\nexport function rangePosition(\n channel: 'x' | 'y' | 'theta' | 'radius',\n model: UnitModel,\n {\n defaultPos,\n defaultPos2\n }: {\n defaultPos: 'zeroOrMin' | 'zeroOrMax' | 'mid';\n defaultPos2: 'zeroOrMin' | 'zeroOrMax';\n }\n): VgEncodeEntry {\n const {markDef, config} = model;\n const channel2 = getSecondaryRangeChannel(channel);\n const sizeChannel = getSizeChannel(channel);\n\n const pos2Mixins = pointPosition2OrSize(model, defaultPos2, channel2);\n\n const vgChannel = pos2Mixins[sizeChannel]\n ? // If there is width/height, we need to position the marks based on the alignment.\n vgAlignedPositionChannel(channel, markDef, config)\n : // Otherwise, make sure to apply to the right Vg Channel (for arc mark)\n getVgPositionChannel(channel);\n\n return {\n ...pointPosition(channel, model, {defaultPos, vgChannel}),\n ...pos2Mixins\n };\n}\n\n/**\n * Return encode for x2, y2.\n * If channel is not specified, return one channel based on orientation.\n */\nfunction pointPosition2OrSize(\n model: UnitModel,\n defaultPos: 'zeroOrMin' | 'zeroOrMax',\n channel: 'x2' | 'y2' | 'radius2' | 'theta2'\n) {\n const {encoding, mark, markDef, stack, config} = model;\n\n const baseChannel = getMainRangeChannel(channel);\n const sizeChannel = getSizeChannel(channel);\n const vgChannel = getVgPositionChannel(channel);\n\n const channelDef = encoding[baseChannel];\n const scaleName = model.scaleName(baseChannel);\n const scale = model.getScaleComponent(baseChannel);\n\n const {offset} =\n channel in encoding || channel in markDef\n ? positionOffset({channel, markDef, encoding, model})\n : positionOffset({channel: baseChannel, markDef, encoding, model});\n\n if (!channelDef && (channel === 'x2' || channel === 'y2') && (encoding.latitude || encoding.longitude)) {\n const vgSizeChannel = getSizeChannel(channel);\n\n const size = model.markDef[vgSizeChannel];\n if (size != null) {\n return {\n [vgSizeChannel]: {value: size}\n };\n } else {\n return {\n [vgChannel]: {field: model.getName(channel)}\n };\n }\n }\n\n const valueRef = position2Ref({\n channel,\n channelDef,\n channel2Def: encoding[channel],\n markDef,\n config,\n scaleName,\n scale,\n stack,\n offset,\n defaultRef: undefined\n });\n\n if (valueRef !== undefined) {\n return {[vgChannel]: valueRef};\n }\n\n // TODO: check width/height encoding here once we add them\n\n // no x2/y2 encoding, then try to read x2/y2 or width/height based on precedence:\n // markDef > config.style > mark-specific config (config[mark]) > general mark config (config.mark)\n\n return (\n position2orSize(channel, markDef) ||\n position2orSize(channel, {\n [channel]: getMarkStyleConfig(channel, markDef, config.style),\n [sizeChannel]: getMarkStyleConfig(sizeChannel, markDef, config.style)\n }) ||\n position2orSize(channel, config[mark]) ||\n position2orSize(channel, config.mark) || {\n [vgChannel]: pointPositionDefaultRef({\n model,\n defaultPos,\n channel,\n scaleName,\n scale\n })()\n }\n );\n}\n\nexport function position2Ref({\n channel,\n channelDef,\n channel2Def,\n markDef,\n config,\n scaleName,\n scale,\n stack,\n offset,\n defaultRef\n}: ref.MidPointParams & {\n channel: 'x2' | 'y2' | 'radius2' | 'theta2';\n}): VgValueRef | VgValueRef[] {\n if (\n isFieldOrDatumDef(channelDef) &&\n stack &&\n // If fieldChannel is X and channel is X2 (or Y and Y2)\n channel.charAt(0) === stack.fieldChannel.charAt(0)\n ) {\n return ref.valueRefForFieldOrDatumDef(channelDef, scaleName, {suffix: 'start'}, {offset});\n }\n return ref.midPointRefWithPositionInvalidTest({\n channel,\n channelDef: channel2Def,\n scaleName,\n scale,\n stack,\n markDef,\n config,\n offset,\n defaultRef\n });\n}\n\nfunction position2orSize(\n channel: 'x2' | 'y2' | 'radius2' | 'theta2',\n markDef: MarkConfig<SignalRef> | MarkDef<Mark, SignalRef>\n) {\n const sizeChannel = getSizeChannel(channel);\n const vgChannel = getVgPositionChannel(channel);\n if (markDef[vgChannel] !== undefined) {\n return {[vgChannel]: ref.widthHeightValueOrSignalRef(channel, markDef[vgChannel])};\n } else if (markDef[channel] !== undefined) {\n return {[vgChannel]: ref.widthHeightValueOrSignalRef(channel, markDef[channel])};\n } else if (markDef[sizeChannel]) {\n const dimensionSize = markDef[sizeChannel];\n if (isRelativeBandSize(dimensionSize)) {\n log.warn(log.message.relativeBandSizeNotSupported(sizeChannel));\n } else {\n return {[sizeChannel]: ref.widthHeightValueOrSignalRef(channel, dimensionSize)};\n }\n }\n return undefined;\n}\n", "import type {SignalRef} from 'vega';\nimport {isArray, isNumber} from 'vega-util';\nimport {isBinned, isBinning, isBinParams} from '../../../bin';\nimport {\n getOffsetChannel,\n getSecondaryRangeChannel,\n getSizeChannel,\n getVgPositionChannel,\n isPolarPositionChannel,\n isXorY,\n PolarPositionChannel,\n PositionChannel\n} from '../../../channel';\nimport {getBandPosition, getBandSize, isFieldDef, isFieldOrDatumDef, TypedFieldDef, vgField} from '../../../channeldef';\nimport {Config, getViewConfigDiscreteStep} from '../../../config';\nimport {Encoding} from '../../../encoding';\nimport * as log from '../../../log';\nimport {BandSize, isRelativeBandSize} from '../../../mark';\nimport {hasDiscreteDomain} from '../../../scale';\nimport {isSignalRef, isVgRangeStep, VgEncodeEntry, VgValueRef} from '../../../vega.schema';\nimport {getMarkConfig, getMarkPropOrConfig, signalOrStringValue, signalOrValueRef} from '../../common';\nimport {ScaleComponent} from '../../scale/component';\nimport {UnitModel} from '../../unit';\nimport {nonPosition} from './nonposition';\nimport {positionOffset} from './offset';\nimport {vgAlignedPositionChannel} from './position-align';\nimport {pointPositionDefaultRef} from './position-point';\nimport {rangePosition} from './position-range';\nimport * as ref from './valueref';\nimport {getOffsetScaleChannel} from '../../../channel';\nimport {getFirstDefined} from '../../../util';\nimport {Mark} from '../../../mark';\nimport {OFFSETTED_RECT_END_SUFFIX, OFFSETTED_RECT_START_SUFFIX} from '../../data/timeunit';\n\nexport function rectPosition(model: UnitModel, channel: 'x' | 'y' | 'theta' | 'radius'): VgEncodeEntry {\n const {config, encoding, markDef} = model;\n const mark = markDef.type;\n\n const channel2 = getSecondaryRangeChannel(channel);\n const sizeChannel = getSizeChannel(channel);\n const channelDef = encoding[channel];\n const channelDef2 = encoding[channel2];\n\n const scale = model.getScaleComponent(channel);\n const scaleType = scale ? scale.get('type') : undefined;\n\n const orient = markDef.orient;\n const hasSizeDef =\n (encoding as any)[sizeChannel] ??\n encoding.size ??\n getMarkPropOrConfig('size', markDef, config, {vgChannel: sizeChannel});\n\n const offsetScaleChannel = getOffsetChannel(channel);\n\n const isBarOrTickBand =\n (mark === 'bar' && (channel === 'x' ? orient === 'vertical' : orient === 'horizontal')) ||\n (mark === 'tick' && (channel === 'y' ? orient === 'vertical' : orient === 'horizontal'));\n\n // x, x2, and width -- we must specify two of these in all conditions\n if (\n isFieldDef(channelDef) &&\n (isBinning(channelDef.bin) || isBinned(channelDef.bin) || (channelDef.timeUnit && !channelDef2)) &&\n !(hasSizeDef && !isRelativeBandSize(hasSizeDef)) &&\n !(encoding as any)[offsetScaleChannel] &&\n !hasDiscreteDomain(scaleType)\n ) {\n return rectBinPosition({\n fieldDef: channelDef,\n fieldDef2: channelDef2,\n channel,\n model\n });\n } else if (((isFieldOrDatumDef(channelDef) && hasDiscreteDomain(scaleType)) || isBarOrTickBand) && !channelDef2) {\n return positionAndSize(channelDef, channel, model);\n } else {\n return rangePosition(channel, model, {defaultPos: 'zeroOrMax', defaultPos2: 'zeroOrMin'});\n }\n}\n\nfunction defaultSizeRef(\n sizeChannel: 'width' | 'height',\n scaleName: string,\n scale: ScaleComponent,\n config: Config<SignalRef>,\n bandSize: BandSize,\n hasFieldDef: boolean,\n mark: Mark\n): VgValueRef {\n if (isRelativeBandSize(bandSize)) {\n if (scale) {\n const scaleType = scale.get('type');\n if (scaleType === 'band') {\n let bandWidth = `bandwidth('${scaleName}')`;\n if (bandSize.band !== 1) {\n bandWidth = `${bandSize.band} * ${bandWidth}`;\n }\n const minBandSize = getMarkConfig('minBandSize', {type: mark}, config);\n return {signal: minBandSize ? `max(${signalOrStringValue(minBandSize)}, ${bandWidth})` : bandWidth};\n } else if (bandSize.band !== 1) {\n log.warn(log.message.cannotUseRelativeBandSizeWithNonBandScale(scaleType));\n bandSize = undefined;\n }\n } else {\n return {\n mult: bandSize.band,\n field: {group: sizeChannel}\n };\n }\n } else if (isSignalRef(bandSize)) {\n return bandSize;\n } else if (bandSize) {\n return {value: bandSize};\n }\n\n // no valid band size\n if (scale) {\n const scaleRange = scale.get('range');\n if (isVgRangeStep(scaleRange) && isNumber(scaleRange.step)) {\n return {value: scaleRange.step - 2};\n }\n }\n if (!hasFieldDef) {\n const {bandPaddingInner, barBandPaddingInner, rectBandPaddingInner, tickBandPaddingInner} = config.scale;\n const padding = getFirstDefined(\n bandPaddingInner,\n mark === 'tick' ? tickBandPaddingInner : mark === 'bar' ? barBandPaddingInner : rectBandPaddingInner\n ); // this part is like paddingInner in scale.ts\n if (isSignalRef(padding)) {\n return {signal: `(1 - (${padding.signal})) * ${sizeChannel}`};\n } else if (isNumber(padding)) {\n return {signal: `${1 - padding} * ${sizeChannel}`};\n }\n }\n const defaultStep = getViewConfigDiscreteStep(config.view, sizeChannel);\n return {value: defaultStep - 2};\n}\n\n/**\n * Output position encoding and its size encoding for continuous, point, and band scales.\n */\nfunction positionAndSize(\n fieldDef: Encoding<string>['x' | 'y' | 'theta' | 'radius'],\n channel: 'x' | 'y' | 'theta' | 'radius',\n model: UnitModel\n) {\n const {markDef, encoding, config, stack} = model;\n const orient = markDef.orient;\n\n const scaleName = model.scaleName(channel);\n const scale = model.getScaleComponent(channel);\n const vgSizeChannel = getSizeChannel(channel);\n const channel2 = getSecondaryRangeChannel(channel);\n\n const offsetScaleChannel = getOffsetChannel(channel);\n const offsetScaleName = model.scaleName(offsetScaleChannel);\n const offsetScale = model.getScaleComponent(getOffsetScaleChannel(channel));\n\n const useVlSizeChannel =\n // Always uses size channel for ticks, because tick only calls rectPosition() for the size channel\n markDef.type === 'tick' ||\n // use \"size\" channel for bars, if there is orient and the channel matches the right orientation\n (orient === 'horizontal' && channel === 'y') ||\n (orient === 'vertical' && channel === 'x');\n\n // Use size encoding / mark property / config if it exists\n let sizeMixins;\n if (encoding.size || markDef.size) {\n if (useVlSizeChannel) {\n sizeMixins = nonPosition('size', model, {\n vgChannel: vgSizeChannel,\n defaultRef: signalOrValueRef(markDef.size)\n });\n } else {\n log.warn(log.message.cannotApplySizeToNonOrientedMark(markDef.type));\n }\n }\n const hasSizeFromMarkOrEncoding = !!sizeMixins;\n\n // Otherwise, apply default value\n const bandSize = getBandSize({\n channel,\n fieldDef,\n markDef,\n config,\n scaleType: (scale || offsetScale)?.get('type'),\n useVlSizeChannel\n });\n\n sizeMixins = sizeMixins || {\n [vgSizeChannel]: defaultSizeRef(\n vgSizeChannel,\n offsetScaleName || scaleName,\n offsetScale || scale,\n config,\n bandSize,\n !!fieldDef,\n markDef.type\n )\n };\n\n /*\n Band scales with size value and all point scales, use xc/yc + band=0.5\n\n Otherwise (band scales that has size based on a band ref), use x/y with position band = (1 - size_band) / 2.\n In this case, size_band is the band specified in the x/y-encoding.\n By default band is 1, so `(1 - band) / 2` = 0.\n If band is 0.6, the the x/y position in such case should be `(1 - band) / 2` = 0.2\n */\n\n const defaultBandAlign =\n (scale || offsetScale)?.get('type') === 'band' && isRelativeBandSize(bandSize) && !hasSizeFromMarkOrEncoding\n ? 'top'\n : 'middle';\n\n const vgChannel = vgAlignedPositionChannel(channel, markDef, config, defaultBandAlign);\n const center = vgChannel === 'xc' || vgChannel === 'yc';\n const {offset, offsetType} = positionOffset({channel, markDef, encoding, model, bandPosition: center ? 0.5 : 0});\n\n const posRef = ref.midPointRefWithPositionInvalidTest({\n channel,\n channelDef: fieldDef,\n markDef,\n config,\n scaleName,\n scale,\n stack,\n offset,\n defaultRef: pointPositionDefaultRef({model, defaultPos: 'mid', channel, scaleName, scale}),\n bandPosition: center\n ? offsetType === 'encoding'\n ? 0\n : 0.5\n : isSignalRef(bandSize)\n ? {signal: `(1-${bandSize})/2`}\n : isRelativeBandSize(bandSize)\n ? (1 - bandSize.band) / 2\n : 0\n });\n\n if (vgSizeChannel) {\n return {[vgChannel]: posRef, ...sizeMixins};\n } else {\n // otherwise, we must simulate size by setting position2 = position + size\n // (for theta/radius since Vega doesn't have thetaWidth/radiusWidth)\n const vgChannel2 = getVgPositionChannel(channel2);\n const sizeRef = sizeMixins[vgSizeChannel];\n const sizeOffset = offset ? {...sizeRef, offset} : sizeRef;\n return {\n [vgChannel]: posRef,\n\n // posRef might be an array that wraps position invalid test\n [vgChannel2]: isArray(posRef)\n ? [posRef[0], {...posRef[1], offset: sizeOffset}]\n : {\n ...posRef,\n offset: sizeOffset\n }\n };\n }\n}\n\nfunction getBinSpacing(\n channel: PositionChannel | PolarPositionChannel,\n spacing: number,\n reverse: boolean | SignalRef,\n axisTranslate: number | SignalRef,\n offset: number | VgValueRef,\n minBandSize: number | SignalRef,\n bandSizeExpr: string\n) {\n if (isPolarPositionChannel(channel)) {\n return 0;\n }\n\n const isEnd = channel === 'x' || channel === 'y2';\n\n const spacingOffset = isEnd ? -spacing / 2 : spacing / 2;\n\n if (isSignalRef(reverse) || isSignalRef(offset) || isSignalRef(axisTranslate) || minBandSize) {\n const reverseExpr = signalOrStringValue(reverse);\n const offsetExpr = signalOrStringValue(offset);\n const axisTranslateExpr = signalOrStringValue(axisTranslate);\n const minBandSizeExpr = signalOrStringValue(minBandSize);\n\n const sign = isEnd ? '' : '-';\n\n const spacingAndSizeOffset = minBandSize\n ? `(${bandSizeExpr} < ${minBandSizeExpr} ? ${sign}0.5 * (${minBandSizeExpr} - (${bandSizeExpr})) : ${spacingOffset})`\n : spacingOffset;\n\n const t = axisTranslateExpr ? `${axisTranslateExpr} + ` : '';\n const r = reverseExpr ? `(${reverseExpr} ? -1 : 1) * ` : '';\n const o = offsetExpr ? `(${offsetExpr} + ${spacingAndSizeOffset})` : spacingAndSizeOffset;\n\n return {\n signal: t + r + o\n };\n } else {\n offset = offset || 0;\n return axisTranslate + (reverse ? -offset - spacingOffset : +offset + spacingOffset);\n }\n}\n\nfunction rectBinPosition({\n fieldDef,\n fieldDef2,\n channel,\n model\n}: {\n fieldDef: TypedFieldDef<string>;\n fieldDef2?: Encoding<string>['x2' | 'y2'];\n channel: 'x' | 'y' | 'theta' | 'radius';\n model: UnitModel;\n}) {\n const {config, markDef, encoding} = model;\n\n const scale = model.getScaleComponent(channel);\n const scaleName = model.scaleName(channel);\n const scaleType = scale ? scale.get('type') : undefined;\n const reverse = scale.get('reverse');\n\n const bandSize = getBandSize({channel, fieldDef, markDef, config, scaleType});\n\n const axis = (model.component.axes as any)[channel]?.[0];\n const axisTranslate = axis?.get('translate') ?? 0.5; // vega default is 0.5\n\n const spacing = isXorY(channel) ? (getMarkPropOrConfig('binSpacing', markDef, config) ?? 0) : 0;\n\n const channel2 = getSecondaryRangeChannel(channel);\n const vgChannel = getVgPositionChannel(channel);\n const vgChannel2 = getVgPositionChannel(channel2);\n const minBandSize = getMarkConfig('minBandSize', markDef, config);\n\n const {offset} = positionOffset({channel, markDef, encoding, model, bandPosition: 0});\n const {offset: offset2} = positionOffset({channel: channel2, markDef, encoding, model, bandPosition: 0});\n\n const bandSizeExpr = ref.binSizeExpr({fieldDef, scaleName});\n const binSpacingOffset = getBinSpacing(channel, spacing, reverse, axisTranslate, offset, minBandSize, bandSizeExpr);\n const binSpacingOffset2 = getBinSpacing(\n channel2,\n spacing,\n reverse,\n axisTranslate,\n offset2 ?? offset,\n minBandSize,\n bandSizeExpr\n );\n\n const bandPositionForBandSize = isSignalRef(bandSize)\n ? {signal: `(1-${bandSize.signal})/2`}\n : isRelativeBandSize(bandSize)\n ? (1 - bandSize.band) / 2\n : 0.5;\n\n const bandPosition = getBandPosition({fieldDef, fieldDef2, markDef, config});\n\n if (isBinning(fieldDef.bin) || fieldDef.timeUnit) {\n const useRectOffsetField = fieldDef.timeUnit && bandPosition !== 0.5;\n\n return {\n [vgChannel2]: rectBinRef({\n fieldDef,\n scaleName,\n bandPosition: bandPositionForBandSize,\n offset: binSpacingOffset2,\n useRectOffsetField\n }),\n [vgChannel]: rectBinRef({\n fieldDef,\n scaleName,\n bandPosition: isSignalRef(bandPositionForBandSize)\n ? {signal: `1-${bandPositionForBandSize.signal}`}\n : 1 - bandPositionForBandSize,\n offset: binSpacingOffset,\n useRectOffsetField\n })\n };\n } else if (isBinned(fieldDef.bin)) {\n const startRef = ref.valueRefForFieldOrDatumDef(fieldDef, scaleName, {}, {offset: binSpacingOffset2});\n\n if (isFieldDef(fieldDef2)) {\n return {\n [vgChannel2]: startRef,\n [vgChannel]: ref.valueRefForFieldOrDatumDef(fieldDef2, scaleName, {}, {offset: binSpacingOffset})\n };\n } else if (isBinParams(fieldDef.bin) && fieldDef.bin.step) {\n return {\n [vgChannel2]: startRef,\n [vgChannel]: {\n signal: `scale(\"${scaleName}\", ${vgField(fieldDef, {expr: 'datum'})} + ${fieldDef.bin.step})`,\n offset: binSpacingOffset\n }\n };\n }\n }\n log.warn(log.message.channelRequiredForBinned(channel2));\n return undefined;\n}\n\n/**\n * Value Ref for binned fields\n */\nfunction rectBinRef({\n fieldDef,\n scaleName,\n bandPosition,\n offset,\n useRectOffsetField\n}: {\n fieldDef: TypedFieldDef<string>;\n scaleName: string;\n bandPosition: number | SignalRef;\n offset?: number | SignalRef;\n useRectOffsetField: boolean;\n}) {\n return ref.interpolatedSignalRef({\n scaleName,\n fieldOrDatumDef: fieldDef,\n bandPosition,\n offset,\n ...(useRectOffsetField\n ? {\n startSuffix: OFFSETTED_RECT_START_SUFFIX,\n endSuffix: OFFSETTED_RECT_END_SUFFIX\n }\n : {})\n });\n}\n", "import type {MarkConfig} from 'vega';\nimport {MarkDef} from '../../../mark';\nimport {hasProperty} from '../../../util';\nimport {VG_MARK_CONFIGS, VgEncodeEntry, VgValueRef} from '../../../vega.schema';\nimport {signalOrValueRef} from '../../common';\nimport {UnitModel} from '../../unit';\nimport {aria} from './aria';\nimport {color} from './color';\nimport {nonPosition} from './nonposition';\nimport {text} from './text';\nimport {tooltip} from './tooltip';\nimport {zindex} from './zindex';\n\nexport {color} from './color';\nexport {nonPosition} from './nonposition';\nexport {pointPosition} from './position-point';\nexport {pointOrRangePosition, rangePosition} from './position-range';\nexport {rectPosition} from './position-rect';\nexport {text} from './text';\nexport {tooltip} from './tooltip';\n\nexport type Ignore = Record<'color' | 'size' | 'orient' | 'align' | 'baseline' | 'theta', 'ignore' | 'include'>;\n\nconst ALWAYS_IGNORE = new Set(['aria', 'width', 'height']);\n\nexport function baseEncodeEntry(model: UnitModel, ignore: Ignore) {\n const {fill = undefined, stroke = undefined} = ignore.color === 'include' ? color(model) : {};\n return {\n ...markDefProperties(model.markDef, ignore),\n ...colorRef('fill', fill),\n ...colorRef('stroke', stroke),\n ...nonPosition('opacity', model),\n ...nonPosition('fillOpacity', model),\n ...nonPosition('strokeOpacity', model),\n ...nonPosition('strokeWidth', model),\n ...nonPosition('strokeDash', model),\n ...zindex(model),\n ...tooltip(model),\n ...text(model, 'href'),\n ...aria(model)\n };\n}\n\nfunction colorRef(channel: 'fill' | 'stroke', valueRef: VgValueRef | VgValueRef[]): VgEncodeEntry {\n return valueRef ? {[channel]: valueRef} : {};\n}\n\nfunction markDefProperties(mark: MarkDef, ignore: Ignore) {\n return VG_MARK_CONFIGS.reduce(\n (m, prop) => {\n if (!ALWAYS_IGNORE.has(prop) && hasProperty(mark, prop) && (ignore as any)[prop] !== 'ignore') {\n m[prop] = signalOrValueRef(mark[prop]);\n }\n return m;\n },\n {} as Record<keyof MarkConfig, unknown>\n );\n}\n", "import {isCountingAggregateOp} from '../../../aggregate';\nimport {isScaleChannel} from '../../../channel';\nimport {Value} from '../../../channeldef';\nimport {fieldValidPredicate} from '../../../predicate';\nimport {VgEncodeEntry} from '../../../vega.schema';\nimport {signalOrValueRef} from '../../common';\nimport {getScaleInvalidDataMode, shouldBreakPath} from '../../invalid/ScaleInvalidDataMode';\nimport {UnitModel} from '../../unit';\n\n/**\n * Create Vega's \"defined\" encoding to break paths in a path mark for invalid values.\n */\nexport function defined(model: UnitModel): VgEncodeEntry {\n const {config, markDef} = model;\n\n // For each channel (x/y), add fields to break path to a set first.\n const fieldsToBreakPath = new Set<string>();\n\n model.forEachFieldDef((fieldDef, channel) => {\n let scaleType;\n if (!isScaleChannel(channel) || !(scaleType = model.getScaleType(channel))) {\n // Skip if the channel is not a scale channel or does not have a scale\n return;\n }\n\n const isCountAggregate = isCountingAggregateOp(fieldDef.aggregate);\n const invalidDataMode = getScaleInvalidDataMode({\n scaleChannel: channel,\n markDef,\n config,\n scaleType,\n isCountAggregate\n });\n if (shouldBreakPath(invalidDataMode)) {\n const field = model.vgField(channel, {expr: 'datum', binSuffix: model.stack?.impute ? 'mid' : undefined});\n if (field) {\n fieldsToBreakPath.add(field);\n }\n }\n });\n\n // If the set is not empty, return a defined signal.\n if (fieldsToBreakPath.size > 0) {\n const signal = [...fieldsToBreakPath].map(field => fieldValidPredicate(field, true)).join(' && ');\n return {defined: {signal}};\n }\n return undefined;\n}\n\nexport function valueIfDefined(prop: string, value: Value): VgEncodeEntry {\n if (value !== undefined) {\n return {[prop]: signalOrValueRef(value)};\n }\n return undefined;\n}\n", "import * as log from '../../log';\nimport {isPathMark} from '../../mark';\nimport {tooltip} from '../mark/encode';\nimport {SelectionCompiler} from '.';\n\nconst VORONOI = 'voronoi';\n\nconst nearest: SelectionCompiler<'point'> = {\n defined: selCmpt => {\n return selCmpt.type === 'point' && selCmpt.nearest;\n },\n\n parse: (model, selCmpt) => {\n // Scope selection events to the voronoi mark to prevent capturing\n // events that occur on the group mark (https://github.com/vega/vega/issues/2112).\n if (selCmpt.events) {\n for (const s of selCmpt.events) {\n s.markname = model.getName(VORONOI);\n }\n }\n },\n\n marks: (model, selCmpt, marks) => {\n const {x, y} = selCmpt.project.hasChannel;\n const markType = model.mark;\n if (isPathMark(markType)) {\n log.warn(log.message.nearestNotSupportForContinuous(markType));\n return marks;\n }\n\n const cellDef = {\n name: model.getName(VORONOI),\n type: 'path',\n interactive: true,\n from: {data: model.getName('marks')},\n encode: {\n update: {\n fill: {value: 'transparent'},\n strokeWidth: {value: 0.35},\n stroke: {value: 'transparent'},\n isVoronoi: {value: true},\n ...tooltip(model, {reactiveGeom: true})\n }\n },\n transform: [\n {\n type: 'voronoi',\n x: {expr: x || !y ? 'datum.datum.x || 0' : '0'},\n y: {expr: y || !x ? 'datum.datum.y || 0' : '0'},\n size: [model.getSizeSignalRef('width'), model.getSizeSignalRef('height')]\n }\n ]\n };\n\n let index = 0;\n let exists = false;\n marks.forEach((mark, i) => {\n const name = mark.name ?? '';\n if (name === model.component.mark[0].name) {\n index = i;\n } else if (name.includes(VORONOI)) {\n exists = true;\n }\n });\n\n if (!exists) {\n marks.splice(index + 1, 0, cellDef);\n }\n\n return marks;\n }\n};\n\nexport default nearest;\n", "import {stringValue} from 'vega-util';\nimport {disableDirectManipulation, TUPLE} from '.';\nimport {varName} from '../../util';\nimport {assembleInit} from './assemble';\nimport nearest from './nearest';\nimport {TUPLE_FIELDS} from './project';\nimport {SelectionCompiler} from '.';\nimport {isLegendBinding} from '../../selection';\nimport {NewSignal} from 'vega';\n\nconst inputBindings: SelectionCompiler<'point'> = {\n defined: selCmpt => {\n return (\n selCmpt.type === 'point' &&\n selCmpt.resolve === 'global' &&\n selCmpt.bind &&\n selCmpt.bind !== 'scales' &&\n !isLegendBinding(selCmpt.bind)\n );\n },\n\n parse: (model, selCmpt, selDef) => disableDirectManipulation(selCmpt, selDef),\n\n topLevelSignals: (model, selCmpt, signals) => {\n const name = selCmpt.name;\n const proj = selCmpt.project;\n const bind = selCmpt.bind;\n const init = selCmpt.init && selCmpt.init[0]; // Can only exist on single selections (one initial value).\n const datum = nearest.defined(selCmpt) ? '(item().isVoronoi ? datum.datum : datum)' : 'datum';\n\n proj.items.forEach((p, i) => {\n const sgname = varName(`${name}_${p.field}`);\n const hasSignal = signals.filter(s => s.name === sgname);\n\n if (!hasSignal.length) {\n signals.unshift({\n name: sgname,\n ...(init ? {init: assembleInit(init[i])} : {value: null}),\n on: selCmpt.events\n ? [\n {\n events: selCmpt.events,\n update: `datum && item().mark.marktype !== 'group' ? ${datum}[${stringValue(p.field)}] : null`\n }\n ]\n : [],\n bind: (bind as any)[p.field] ?? (bind as any)[p.channel] ?? bind\n });\n }\n });\n\n return signals;\n },\n\n signals: (model, selCmpt, signals) => {\n const name = selCmpt.name;\n const proj = selCmpt.project;\n const signal: NewSignal = signals.find(s => s.name === name + TUPLE);\n const fields = name + TUPLE_FIELDS;\n const values = proj.items.map(p => varName(`${name}_${p.field}`));\n const valid = values.map(v => `${v} !== null`).join(' && ');\n\n if (values.length) {\n signal.update = `${valid} ? {fields: ${fields}, values: [${values.join(', ')}]} : null`;\n }\n\n delete signal.value;\n delete signal.on;\n\n return signals;\n }\n};\n\nexport default inputBindings;\n", "import {TUPLE, isTimerSelection, unitName} from '.';\nimport {SelectionCompiler} from '.';\n\nexport const TOGGLE = '_toggle';\n\nconst toggle: SelectionCompiler<'point'> = {\n defined: selCmpt => {\n return selCmpt.type === 'point' && !isTimerSelection(selCmpt) && !!selCmpt.toggle;\n },\n\n signals: (model, selCmpt, signals) => {\n return signals.concat({\n name: selCmpt.name + TOGGLE,\n value: false,\n on: [{events: selCmpt.events, update: selCmpt.toggle}]\n });\n },\n\n modifyExpr: (model, selCmpt) => {\n const tpl = selCmpt.name + TUPLE;\n const signal = selCmpt.name + TOGGLE;\n\n return (\n `${signal} ? null : ${tpl}, ` +\n (selCmpt.resolve === 'global' ? `${signal} ? null : true, ` : `${signal} ? null : {unit: ${unitName(model)}}, `) +\n `${signal} ? ${tpl} : null`\n );\n }\n};\n\nexport default toggle;\n", "import {Update} from 'vega';\nimport {parseSelector} from 'vega-event-selector';\nimport {isString} from 'vega-util';\nimport {TUPLE, isTimerSelection} from '.';\nimport {varName} from '../../util';\nimport inputBindings from './inputs';\nimport toggle, {TOGGLE} from './toggle';\nimport {SelectionCompiler} from '.';\n\nconst clear: SelectionCompiler = {\n defined: selCmpt => {\n return selCmpt.clear !== undefined && selCmpt.clear !== false && !isTimerSelection(selCmpt);\n },\n\n parse: (model, selCmpt) => {\n if (selCmpt.clear) {\n selCmpt.clear = isString(selCmpt.clear) ? parseSelector(selCmpt.clear, 'view') : selCmpt.clear;\n }\n },\n\n topLevelSignals: (model, selCmpt, signals) => {\n if (inputBindings.defined(selCmpt)) {\n for (const proj of selCmpt.project.items) {\n const idx = signals.findIndex(n => n.name === varName(`${selCmpt.name}_${proj.field}`));\n if (idx !== -1) {\n signals[idx].on.push({events: selCmpt.clear, update: 'null'});\n }\n }\n }\n\n return signals;\n },\n\n signals: (model, selCmpt, signals) => {\n function addClear(idx: number, update: Update) {\n if (idx !== -1 && signals[idx].on) {\n signals[idx].on.push({events: selCmpt.clear, update});\n }\n }\n\n // Be as minimalist as possible when adding clear triggers to minimize dataflow execution.\n if (selCmpt.type === 'interval') {\n for (const proj of selCmpt.project.items) {\n const vIdx = signals.findIndex(n => n.name === proj.signals.visual);\n addClear(vIdx, '[0, 0]');\n\n if (vIdx === -1) {\n const dIdx = signals.findIndex(n => n.name === proj.signals.data);\n addClear(dIdx, 'null');\n }\n }\n } else {\n let tIdx = signals.findIndex(n => n.name === selCmpt.name + TUPLE);\n addClear(tIdx, 'null');\n\n if (toggle.defined(selCmpt)) {\n tIdx = signals.findIndex(n => n.name === selCmpt.name + TOGGLE);\n addClear(tIdx, 'false');\n }\n }\n\n return signals;\n }\n};\n\nexport default clear;\n", "import {isObject, MergedStream, NewSignal, Stream} from 'vega';\nimport {parseSelector} from 'vega-event-selector';\nimport {array, isString} from 'vega-util';\nimport {disableDirectManipulation, TUPLE} from '.';\nimport {NonPositionScaleChannel} from '../../channel';\nimport * as log from '../../log';\nimport {isLegendBinding, isLegendStreamBinding, SELECTION_ID} from '../../selection';\nimport {duplicate, vals, varName} from '../../util';\nimport {LegendComponent} from '../legend/component';\nimport {UnitModel} from '../unit';\nimport {TUPLE_FIELDS} from './project';\nimport {TOGGLE} from './toggle';\nimport {SelectionCompiler} from '.';\n\nconst legendBindings: SelectionCompiler<'point'> = {\n defined: selCmpt => {\n const spec = selCmpt.resolve === 'global' && selCmpt.bind && isLegendBinding(selCmpt.bind);\n const projLen = selCmpt.project.items.length === 1 && selCmpt.project.items[0].field !== SELECTION_ID;\n if (spec && !projLen) {\n log.warn(log.message.LEGEND_BINDINGS_MUST_HAVE_PROJECTION);\n }\n\n return spec && projLen;\n },\n\n parse: (model, selCmpt, selDef) => {\n // Allow legend items to be toggleable by default even though direct manipulation is disabled.\n const selDef_ = duplicate(selDef);\n selDef_.select = isString(selDef_.select)\n ? {type: selDef_.select, toggle: selCmpt.toggle}\n : {...selDef_.select, toggle: selCmpt.toggle};\n disableDirectManipulation(selCmpt, selDef_);\n\n if (isObject(selDef.select) && (selDef.select.on || selDef.select.clear)) {\n const legendFilter = 'event.item && indexof(event.item.mark.role, \"legend\") < 0';\n for (const evt of selCmpt.events) {\n evt.filter = array(evt.filter ?? []);\n if (!evt.filter.includes(legendFilter)) {\n evt.filter.push(legendFilter);\n }\n }\n }\n\n const evt = isLegendStreamBinding(selCmpt.bind) ? selCmpt.bind.legend : 'click';\n const stream: Stream[] = isString(evt) ? parseSelector(evt, 'view') : array(evt);\n selCmpt.bind = {legend: {merge: stream}};\n },\n\n topLevelSignals: (model, selCmpt, signals) => {\n const selName = selCmpt.name;\n const stream = isLegendStreamBinding(selCmpt.bind) && (selCmpt.bind.legend as MergedStream);\n const markName = (name: string) => (s: Stream) => {\n const ds = duplicate(s);\n ds.markname = name;\n return ds;\n };\n\n for (const proj of selCmpt.project.items) {\n if (!proj.hasLegend) continue;\n const prefix = `${varName(proj.field)}_legend`;\n const sgName = `${selName}_${prefix}`;\n const hasSignal = signals.filter(s => s.name === sgName);\n\n if (hasSignal.length === 0) {\n const events = stream.merge\n .map(markName(`${prefix}_symbols`))\n .concat(stream.merge.map(markName(`${prefix}_labels`)))\n .concat(stream.merge.map(markName(`${prefix}_entries`)));\n\n signals.unshift({\n name: sgName,\n ...(!selCmpt.init ? {value: null} : {}),\n on: [\n // Legend entries do not store values, so we need to walk the scenegraph to the symbol datum.\n {\n events,\n update: 'isDefined(datum.value) ? datum.value : item().items[0].items[0].datum.value',\n force: true\n },\n {events: stream.merge, update: `!event.item || !datum ? null : ${sgName}`, force: true}\n ]\n });\n }\n }\n\n return signals;\n },\n\n signals: (model, selCmpt, signals) => {\n const name = selCmpt.name;\n const proj = selCmpt.project;\n const tuple: NewSignal = signals.find(s => s.name === name + TUPLE);\n const fields = name + TUPLE_FIELDS;\n const values = proj.items.filter(p => p.hasLegend).map(p => varName(`${name}_${varName(p.field)}_legend`));\n const valid = values.map(v => `${v} !== null`).join(' && ');\n const update = `${valid} ? {fields: ${fields}, values: [${values.join(', ')}]} : null`;\n\n if (selCmpt.events && values.length > 0) {\n tuple.on.push({\n events: values.map(signal => ({signal})),\n update\n });\n } else if (values.length > 0) {\n tuple.update = update;\n delete tuple.value;\n delete tuple.on;\n }\n\n const toggle = signals.find(s => s.name === name + TOGGLE);\n const events = isLegendStreamBinding(selCmpt.bind) && selCmpt.bind.legend;\n if (toggle) {\n if (!selCmpt.events) toggle.on[0].events = events;\n else toggle.on.push({...toggle.on[0], events});\n }\n\n return signals;\n }\n};\n\nexport default legendBindings;\n\nexport function parseInteractiveLegend(\n model: UnitModel,\n channel: NonPositionScaleChannel,\n legendCmpt: LegendComponent\n) {\n const field = model.fieldDef(channel)?.field;\n for (const selCmpt of vals(model.component.selection ?? {})) {\n const proj = selCmpt.project.hasField[field] ?? selCmpt.project.hasChannel[channel];\n if (proj && legendBindings.defined(selCmpt)) {\n const legendSelections = legendCmpt.get('selections') ?? [];\n legendSelections.push(selCmpt.name);\n legendCmpt.set('selections', legendSelections, false);\n proj.hasLegend = true;\n }\n }\n}\n", "import {NewSignal} from 'vega';\nimport {parseSelector} from 'vega-event-selector';\nimport {SelectionComponent} from '.';\nimport {ScaleChannel, X, Y} from '../../channel';\nimport {UnitModel} from '../unit';\nimport {BRUSH as INTERVAL_BRUSH} from './interval';\nimport {SelectionProjection} from './project';\nimport scalesCompiler, {domain} from './scales';\nimport {SelectionCompiler} from '.';\n\nconst ANCHOR = '_translate_anchor';\nconst DELTA = '_translate_delta';\n\nconst translate: SelectionCompiler<'interval'> = {\n defined: selCmpt => {\n return selCmpt.type === 'interval' && selCmpt.translate;\n },\n\n signals: (model, selCmpt, signals) => {\n const name = selCmpt.name;\n const boundScales = scalesCompiler.defined(selCmpt);\n const anchor = name + ANCHOR;\n const {x, y} = selCmpt.project.hasChannel;\n let events = parseSelector(selCmpt.translate, 'scope');\n\n if (!boundScales) {\n events = events.map(e => ((e.between[0].markname = name + INTERVAL_BRUSH), e));\n }\n\n signals.push(\n {\n name: anchor,\n value: {},\n on: [\n {\n events: events.map(e => e.between[0]),\n update:\n '{x: x(unit), y: y(unit)' +\n (x !== undefined ? `, extent_x: ${boundScales ? domain(model, X) : `slice(${x.signals.visual})`}` : '') +\n (y !== undefined ? `, extent_y: ${boundScales ? domain(model, Y) : `slice(${y.signals.visual})`}` : '') +\n '}'\n }\n ]\n },\n {\n name: name + DELTA,\n value: {},\n on: [\n {\n events,\n update: `{x: ${anchor}.x - x(unit), y: ${anchor}.y - y(unit)}`\n }\n ]\n }\n );\n\n if (x !== undefined) {\n onDelta(model, selCmpt, x, 'width', signals);\n }\n\n if (y !== undefined) {\n onDelta(model, selCmpt, y, 'height', signals);\n }\n\n return signals;\n }\n};\n\nexport default translate;\n\nfunction onDelta(\n model: UnitModel,\n selCmpt: SelectionComponent,\n proj: SelectionProjection,\n size: 'width' | 'height',\n signals: NewSignal[]\n) {\n const name = selCmpt.name;\n const anchor = name + ANCHOR;\n const delta = name + DELTA;\n const channel = proj.channel as ScaleChannel;\n const boundScales = scalesCompiler.defined(selCmpt);\n const signal = signals.find(s => s.name === proj.signals[boundScales ? 'data' : 'visual']);\n const sizeSg = model.getSizeSignalRef(size).signal;\n const scaleCmpt = model.getScaleComponent(channel);\n const scaleType = scaleCmpt && scaleCmpt.get('type');\n const reversed = scaleCmpt && scaleCmpt.get('reverse'); // scale parsing sets this flag for fieldDef.sort\n const sign = !boundScales ? '' : channel === X ? (reversed ? '' : '-') : reversed ? '-' : '';\n const extent = `${anchor}.extent_${channel}`;\n const offset = `${sign}${delta}.${channel} / ${boundScales ? `${sizeSg}` : `span(${extent})`}`;\n const panFn =\n !boundScales || !scaleCmpt\n ? 'panLinear'\n : scaleType === 'log'\n ? 'panLog'\n : scaleType === 'symlog'\n ? 'panSymlog'\n : scaleType === 'pow'\n ? 'panPow'\n : 'panLinear';\n const arg = !boundScales\n ? ''\n : scaleType === 'pow'\n ? `, ${scaleCmpt.get('exponent') ?? 1}`\n : scaleType === 'symlog'\n ? `, ${scaleCmpt.get('constant') ?? 1}`\n : '';\n const update = `${panFn}(${extent}, ${offset}${arg})`;\n\n signal.on.push({\n events: {signal: delta},\n update: boundScales ? update : `clampRange(${update}, 0, ${sizeSg})`\n });\n}\n", "import {NewSignal} from 'vega';\nimport {parseSelector} from 'vega-event-selector';\nimport {stringValue} from 'vega-util';\nimport {SelectionComponent} from '.';\nimport {ScaleChannel, X, Y} from '../../channel';\nimport {UnitModel} from '../unit';\nimport {BRUSH as INTERVAL_BRUSH} from './interval';\nimport {SelectionProjection} from './project';\nimport {default as scalesCompiler, domain} from './scales';\nimport {SelectionCompiler} from '.';\n\nconst ANCHOR = '_zoom_anchor';\nconst DELTA = '_zoom_delta';\n\nconst zoom: SelectionCompiler<'interval'> = {\n defined: selCmpt => {\n return selCmpt.type === 'interval' && selCmpt.zoom;\n },\n\n signals: (model, selCmpt, signals) => {\n const name = selCmpt.name;\n const boundScales = scalesCompiler.defined(selCmpt);\n const delta = name + DELTA;\n const {x, y} = selCmpt.project.hasChannel;\n const sx = stringValue(model.scaleName(X));\n const sy = stringValue(model.scaleName(Y));\n let events = parseSelector(selCmpt.zoom, 'scope');\n\n if (!boundScales) {\n events = events.map(e => ((e.markname = name + INTERVAL_BRUSH), e));\n }\n\n signals.push(\n {\n name: name + ANCHOR,\n on: [\n {\n events,\n update: !boundScales\n ? `{x: x(unit), y: y(unit)}`\n : '{' +\n [sx ? `x: invert(${sx}, x(unit))` : '', sy ? `y: invert(${sy}, y(unit))` : '']\n .filter(expr => expr)\n .join(', ') +\n '}'\n }\n ]\n },\n {\n name: delta,\n on: [\n {\n events,\n force: true,\n update: 'pow(1.001, event.deltaY * pow(16, event.deltaMode))'\n }\n ]\n }\n );\n\n if (x !== undefined) {\n onDelta(model, selCmpt, x, 'width', signals);\n }\n\n if (y !== undefined) {\n onDelta(model, selCmpt, y, 'height', signals);\n }\n\n return signals;\n }\n};\n\nexport default zoom;\n\nfunction onDelta(\n model: UnitModel,\n selCmpt: SelectionComponent,\n proj: SelectionProjection,\n size: 'width' | 'height',\n signals: NewSignal[]\n) {\n const name = selCmpt.name;\n const channel = proj.channel as ScaleChannel;\n const boundScales = scalesCompiler.defined(selCmpt);\n const signal = signals.find(s => s.name === proj.signals[boundScales ? 'data' : 'visual']);\n const sizeSg = model.getSizeSignalRef(size).signal;\n const scaleCmpt = model.getScaleComponent(channel);\n const scaleType = scaleCmpt && scaleCmpt.get('type');\n const base = boundScales ? domain(model, channel) : signal.name;\n const delta = name + DELTA;\n const anchor = `${name}${ANCHOR}.${channel}`;\n const zoomFn =\n !boundScales || !scaleCmpt\n ? 'zoomLinear'\n : scaleType === 'log'\n ? 'zoomLog'\n : scaleType === 'symlog'\n ? 'zoomSymlog'\n : scaleType === 'pow'\n ? 'zoomPow'\n : 'zoomLinear';\n const arg = !boundScales\n ? ''\n : scaleType === 'pow'\n ? `, ${scaleCmpt.get('exponent') ?? 1}`\n : scaleType === 'symlog'\n ? `, ${scaleCmpt.get('constant') ?? 1}`\n : '';\n const update = `${zoomFn}(${base}, ${anchor}, ${delta}${arg})`;\n\n signal.on.push({\n events: {signal: delta},\n update: boundScales ? update : `clampRange(${update}, 0, ${sizeSg})`\n });\n}\n", "import {Binding, isString, Signal, Stream} from 'vega';\nimport {stringValue} from 'vega-util';\nimport {FACET_CHANNELS} from '../../channel';\nimport {\n BrushConfig,\n LegendBinding,\n SelectionInit,\n SelectionInitInterval,\n SelectionResolution,\n SelectionType\n} from '../../selection';\nimport {Dict, vals} from '../../util';\nimport {OutputNode} from '../data/dataflow';\nimport {FacetModel} from '../facet';\nimport {isFacetModel, Model} from '../model';\nimport {UnitModel} from '../unit';\nimport interval from './interval';\nimport point from './point';\nimport {SelectionProjection, SelectionProjectionComponent} from './project';\nimport {SelectionParameter} from '../../selection';\nimport clear from './clear';\nimport inputs from './inputs';\nimport nearest from './nearest';\nimport project from './project';\nimport scales from './scales';\nimport legends from './legends';\nimport toggle from './toggle';\nimport translate from './translate';\nimport zoom from './zoom';\nimport {ParameterName} from '../../parameter';\n\nexport const STORE = '_store';\nexport const TUPLE = '_tuple';\nexport const MODIFY = '_modify';\nexport const SELECTION_DOMAIN = '_selection_domain_';\nexport const VL_SELECTION_RESOLVE = 'vlSelectionResolve';\n\nexport interface SelectionComponent<T extends SelectionType = SelectionType> {\n name: ParameterName;\n type: T;\n // Use conditional types for stricter type of init (as the type of init depends on selection type).\n init?: (T extends 'interval' ? SelectionInitInterval : T extends 'point' ? SelectionInit : never)[][];\n events: Stream[];\n materialized: OutputNode;\n bind?: 'scales' | Binding | Dict<Binding> | LegendBinding;\n resolve: SelectionResolution;\n mark?: BrushConfig;\n project: SelectionProjectionComponent;\n scales?: SelectionProjection[];\n toggle?: string;\n translate?: any;\n zoom?: any;\n nearest?: any;\n clear?: any;\n}\n\nexport interface SelectionCompiler<T extends SelectionType = SelectionType> {\n defined: (selCmpt: SelectionComponent) => boolean;\n parse?: (model: UnitModel, selCmpt: SelectionComponent<T>, def: SelectionParameter<T>) => void;\n signals?: (model: UnitModel, selCmpt: SelectionComponent<T>, signals: Signal[]) => Signal[];\n topLevelSignals?: (model: Model, selCmpt: SelectionComponent<T>, signals: Signal[]) => Signal[];\n modifyExpr?: (model: UnitModel, selCmpt: SelectionComponent<T>, expr: string) => string;\n marks?: (model: UnitModel, selCmpt: SelectionComponent<T>, marks: any[]) => any[];\n}\n\n// Order matters for parsing and assembly.\nexport const selectionCompilers: SelectionCompiler[] = [\n point,\n interval,\n project,\n toggle,\n\n // Bindings may disable direct manipulation.\n inputs,\n scales,\n legends,\n\n clear,\n translate,\n zoom,\n nearest\n];\n\nfunction getFacetModel(model: Model): FacetModel {\n let parent = model.parent;\n while (parent) {\n if (isFacetModel(parent)) break;\n parent = parent.parent;\n }\n\n return parent as FacetModel;\n}\n\nexport function unitName(model: Model, {escape} = {escape: true}) {\n let name = escape ? stringValue(model.name) : model.name;\n const facetModel = getFacetModel(model);\n if (facetModel) {\n const {facet} = facetModel;\n for (const channel of FACET_CHANNELS) {\n if (facet[channel]) {\n name += ` + '__facet_${channel}_' + (facet[${stringValue(facetModel.vgField(channel))}])`;\n }\n }\n }\n return name;\n}\n\nexport function requiresSelectionId(model: Model) {\n return vals(model.component.selection ?? {}).reduce((identifier, selCmpt) => {\n return identifier || selCmpt.project.hasSelectionId;\n }, false);\n}\n\n// Binding a point selection to query widgets or legends disables default direct manipulation interaction.\n// A user can choose to re-enable it by explicitly specifying triggering input events.\nexport function disableDirectManipulation(selCmpt: SelectionComponent, selDef: SelectionParameter<'point'>) {\n if (isString(selDef.select) || !selDef.select.on) delete selCmpt.events;\n if (isString(selDef.select) || !selDef.select.clear) delete selCmpt.clear;\n if (isString(selDef.select) || !selDef.select.toggle) delete selCmpt.toggle;\n}\n\nexport function isTimerSelection<T extends SelectionType>(selCmpt: SelectionComponent<T>) {\n return selCmpt.events?.find(e => 'type' in e && e.type === 'timer');\n}\n", "import {parseExpression} from 'vega-expression';\n\nfunction getName(node: any) {\n const name: string[] = [];\n\n if (node.type === 'Identifier') {\n return [node.name];\n }\n\n if (node.type === 'Literal') {\n return [node.value];\n }\n\n if (node.type === 'MemberExpression') {\n name.push(...getName(node.object));\n name.push(...getName(node.property));\n }\n\n return name;\n}\n\nfunction startsWithDatum(node: any): boolean {\n if (node.object.type === 'MemberExpression') {\n return startsWithDatum(node.object);\n }\n return node.object.name === 'datum';\n}\n\nexport function getDependentFields(expression: string) {\n const ast = parseExpression(expression);\n const dependents = new Set<string>();\n // visit is missing in types https://github.com/vega/vega/issues/3298\n (ast as any).visit((node: any) => {\n if (node.type === 'MemberExpression' && startsWithDatum(node)) {\n dependents.add(getName(node).slice(1).join('.'));\n }\n });\n\n return dependents;\n}\n", "import type {FilterTransform as VgFilterTransform} from 'vega';\nimport {LogicalComposition} from '../../logical';\nimport {Predicate} from '../../predicate';\nimport {duplicate} from '../../util';\nimport {Model} from '../model';\nimport {expression} from '../predicate';\nimport {DataFlowNode} from './dataflow';\nimport {getDependentFields} from './expressions';\n\nexport class FilterNode extends DataFlowNode {\n private expr: string;\n private _dependentFields: Set<string>;\n public clone() {\n return new FilterNode(null, this.model, duplicate(this.filter));\n }\n\n constructor(\n parent: DataFlowNode,\n private readonly model: Model,\n private readonly filter: LogicalComposition<Predicate>\n ) {\n super(parent);\n\n // TODO: refactor this to not take a node and\n // then add a static function makeFromOperand and make the constructor take only an expression\n this.expr = expression(this.model, this.filter, this);\n\n this._dependentFields = getDependentFields(this.expr);\n }\n\n public dependentFields() {\n return this._dependentFields;\n }\n\n public producedFields() {\n return new Set<string>(); // filter does not produce any new fields\n }\n\n public assemble(): VgFilterTransform {\n return {\n type: 'filter',\n expr: this.expr\n };\n }\n\n public hash() {\n return `Filter ${this.expr}`;\n }\n}\n", "import {parseSelector} from 'vega-event-selector';\nimport {array, isObject, isString, stringValue} from 'vega-util';\nimport {isTimerSelection, selectionCompilers, SelectionComponent, STORE} from '.';\nimport {warn} from '../../log';\nimport {BaseSelectionConfig, SelectionParameter, ParameterExtent} from '../../selection';\nimport {Dict, duplicate, entries, replacePathInField, varName} from '../../util';\nimport {DataFlowNode, OutputNode} from '../data/dataflow';\nimport {FilterNode} from '../data/filter';\nimport {Model} from '../model';\nimport {UnitModel} from '../unit';\nimport {DataSourceType} from '../../data';\nimport {ParameterPredicate} from '../../predicate';\nimport {\n MULTIPLE_TIMER_ANIMATION_SELECTION,\n selectionAsScaleDomainWithoutField,\n selectionAsScaleDomainWrongEncodings\n} from '../../log/message';\n\nexport function parseUnitSelection(model: UnitModel, selDefs: SelectionParameter[]) {\n const selCmpts: Dict<SelectionComponent<any /* this has to be \"any\" so typing won't fail in test files*/>> = {};\n const selectionConfig = model.config.selection;\n\n if (!selDefs || !selDefs.length) return selCmpts;\n\n let nTimerSelections = 0;\n\n for (const def of selDefs) {\n const name = varName(def.name);\n const selDef = def.select;\n const type = isString(selDef) ? selDef : selDef.type;\n const defaults: BaseSelectionConfig = isObject(selDef) ? duplicate(selDef) : {type};\n\n // Set default values from config if a property hasn't been specified,\n // or if it is true. E.g., \"translate\": true should use the default\n // event handlers for translate. However, true may be a valid value for\n // a property (e.g., \"nearest\": true).\n const cfg = selectionConfig[type];\n for (const key in cfg) {\n // Project transform applies its defaults.\n if (key === 'fields' || key === 'encodings') {\n continue;\n }\n\n if (key === 'mark') {\n (defaults as any).mark = {...(cfg as any).mark, ...(defaults as any).mark};\n }\n\n if ((defaults as any)[key] === undefined || (defaults as any)[key] === true) {\n (defaults as any)[key] = duplicate((cfg as any)[key] ?? (defaults as any)[key]);\n }\n }\n\n const selCmpt: SelectionComponent<any> = (selCmpts[name] = {\n ...defaults,\n name,\n type,\n init: def.value,\n bind: def.bind,\n events: isString(defaults.on) ? parseSelector(defaults.on, 'scope') : array(duplicate(defaults.on))\n } as any);\n\n if (isTimerSelection(selCmpt)) {\n nTimerSelections++;\n // check for multiple timer selections and ignore all but the first one\n if (nTimerSelections > 1) {\n delete selCmpts[name];\n continue;\n }\n }\n\n const def_ = duplicate(def); // defensive copy to prevent compilers from causing side effects\n for (const c of selectionCompilers) {\n if (c.defined(selCmpt) && c.parse) {\n c.parse(model, selCmpt, def_);\n }\n }\n }\n\n if (nTimerSelections > 1) {\n // if multiple timer selections were found, issue a warning\n warn(MULTIPLE_TIMER_ANIMATION_SELECTION);\n }\n\n return selCmpts;\n}\n\nexport function parseSelectionPredicate(\n model: Model,\n pred: ParameterPredicate,\n dfnode?: DataFlowNode,\n datum = 'datum'\n): string {\n const name = isString(pred) ? pred : pred.param;\n const vname = varName(name);\n const store = stringValue(vname + STORE);\n let selCmpt;\n\n try {\n selCmpt = model.getSelectionComponent(vname, name);\n } catch (e) {\n // If a selection isn't found, treat as a variable parameter and coerce to boolean.\n return `!!${vname}`;\n }\n\n if (selCmpt.project.timeUnit) {\n const child = dfnode ?? model.component.data.raw;\n const tunode = selCmpt.project.timeUnit.clone();\n if (child.parent) {\n tunode.insertAsParentOf(child);\n } else {\n child.parent = tunode;\n }\n }\n\n const fn = selCmpt.project.hasSelectionId ? 'vlSelectionIdTest(' : 'vlSelectionTest(';\n const resolve = selCmpt.resolve === 'global' ? ')' : `, ${stringValue(selCmpt.resolve)})`;\n const test = `${fn}${store}, ${datum}${resolve}`;\n const length = `length(data(${store}))`;\n\n return pred.empty === false ? `${length} && ${test}` : `!${length} || ${test}`;\n}\n\nexport function parseSelectionExtent(model: Model, name: string, extent: ParameterExtent) {\n const vname = varName(name);\n const encoding = (extent as any).encoding;\n let field = (extent as any).field;\n let selCmpt;\n\n try {\n selCmpt = model.getSelectionComponent(vname, name);\n } catch (e) {\n // If a selection isn't found, treat it as a variable parameter.\n return vname;\n }\n\n if (!encoding && !field) {\n field = selCmpt.project.items[0].field;\n if (selCmpt.project.items.length > 1) {\n warn(selectionAsScaleDomainWithoutField(field));\n }\n } else if (encoding && !field) {\n const encodings = selCmpt.project.items.filter(p => p.channel === encoding);\n if (!encodings.length || encodings.length > 1) {\n field = selCmpt.project.items[0].field;\n warn(selectionAsScaleDomainWrongEncodings(encodings, encoding, extent, field));\n } else {\n field = encodings[0].field;\n }\n }\n\n return `${selCmpt.name}[${stringValue(replacePathInField(field))}]`;\n}\n\nexport function materializeSelections(model: UnitModel, main: OutputNode) {\n for (const [selection, selCmpt] of entries(model.component.selection ?? {})) {\n const lookupName = model.getName(`lookup_${selection}`);\n model.component.data.outputNodes[lookupName] = selCmpt.materialized = new OutputNode(\n new FilterNode(main, model, {param: selection}),\n lookupName,\n DataSourceType.Lookup,\n model.component.data.outputNodeRefCounts\n );\n }\n}\n", "import {isString} from 'vega-util';\nimport {LogicalComposition} from '../logical';\nimport {fieldFilterExpression, isSelectionPredicate, Predicate} from '../predicate';\nimport {logicalExpr} from '../util';\nimport {DataFlowNode} from './data/dataflow';\nimport {Model} from './model';\nimport {parseSelectionPredicate} from './selection/parse';\n\n/**\n * Converts a predicate into an expression.\n */\n// model is only used for selection filters.\nexport function expression(model: Model, filterOp: LogicalComposition<Predicate>, node?: DataFlowNode): string {\n return logicalExpr(filterOp, (predicate: Predicate) => {\n if (isString(predicate)) {\n return predicate;\n } else if (isSelectionPredicate(predicate)) {\n return parseSelectionPredicate(model, predicate, node);\n } else {\n // Filter Object\n return fieldFilterExpression(predicate);\n }\n });\n}\n", "import {Axis as VgAxis, AxisEncode, NewSignal, SignalRef, Text} from 'vega';\nimport {array, isArray} from 'vega-util';\nimport {\n AXIS_PARTS,\n AXIS_PROPERTY_TYPE,\n CONDITIONAL_AXIS_PROP_INDEX,\n ConditionalAxisProp,\n isConditionalAxisValue\n} from '../../axis';\nimport {POSITION_SCALE_CHANNELS} from '../../channel';\nimport {defaultTitle, FieldDefBase} from '../../channeldef';\nimport {Config} from '../../config';\nimport {isText} from '../../title';\nimport {contains, getFirstDefined, isEmpty, replaceAll} from '../../util';\nimport {isSignalRef, VgEncodeChannel, VgValueRef} from '../../vega.schema';\nimport {exprFromValueRefOrSignalRef} from '../common';\nimport {Model} from '../model';\nimport {expression} from '../predicate';\nimport {AxisComponent, AxisComponentIndex} from './component';\n\nfunction assembleTitle(title: Text | FieldDefBase<string>[] | SignalRef, config: Config): Text | SignalRef {\n if (!title) {\n return undefined;\n }\n if (isArray(title) && !isText(title)) {\n return title.map(fieldDef => defaultTitle(fieldDef, config)).join(', ');\n }\n return title;\n}\n\nfunction setAxisEncode(\n axis: Omit<VgAxis, 'orient' | 'scale'>,\n part: keyof AxisEncode,\n vgProp: VgEncodeChannel,\n vgRef: VgValueRef | readonly VgValueRef[]\n) {\n axis.encode ??= {};\n axis.encode[part] ??= {};\n axis.encode[part].update ??= {};\n // TODO: remove as any after https://github.com/prisma/nexus-prisma/issues/291\n (axis.encode[part].update[vgProp] as any) = vgRef;\n}\n\nexport function assembleAxis(\n axisCmpt: AxisComponent,\n kind: 'main' | 'grid',\n config: Config<SignalRef>,\n opt: {\n header: boolean; // whether this is called via a header\n } = {header: false}\n): VgAxis {\n const {disable, orient, scale, labelExpr, title, zindex, ...axis} = axisCmpt.combine();\n\n if (disable) {\n return undefined;\n }\n\n for (const p in axis) {\n const prop = p as keyof typeof axis;\n const propType = AXIS_PROPERTY_TYPE[prop];\n const propValue = axis[prop];\n\n if (propType && propType !== kind && propType !== 'both') {\n // Remove properties that are not valid for this kind of axis\n delete axis[prop];\n } else if (isConditionalAxisValue<any, SignalRef>(propValue)) {\n // deal with conditional axis value\n\n const {condition, ...valueOrSignalRef} = propValue as any;\n const conditions = array(condition);\n\n const propIndex = CONDITIONAL_AXIS_PROP_INDEX[prop as ConditionalAxisProp];\n if (propIndex) {\n const {vgProp, part} = propIndex;\n // If there is a corresponding Vega property for the channel,\n // use Vega's custom axis encoding and delete the original axis property to avoid conflicts\n\n const vgRef = [\n ...conditions.map(c => {\n const {test, ...valueOrSignalCRef} = c;\n return {\n test: expression(null, test),\n ...valueOrSignalCRef\n };\n }),\n valueOrSignalRef\n ];\n setAxisEncode(axis, part, vgProp, vgRef);\n delete axis[prop];\n } else if (propIndex === null) {\n // If propIndex is null, this means we support conditional axis property by converting the condition to signal instead.\n const signalRef: SignalRef = {\n signal:\n conditions\n .map(c => {\n const {test, ...valueOrSignalCRef} = c;\n return `${expression(null, test)} ? ${exprFromValueRefOrSignalRef(valueOrSignalCRef)} : `;\n })\n .join('') + exprFromValueRefOrSignalRef(valueOrSignalRef)\n };\n (axis as any)[prop] = signalRef;\n }\n } else if (isSignalRef(propValue)) {\n const propIndex = CONDITIONAL_AXIS_PROP_INDEX[prop as ConditionalAxisProp];\n if (propIndex) {\n const {vgProp, part} = propIndex;\n // FIXME: remove as any\n setAxisEncode(axis, part, vgProp, propValue as any);\n delete axis[prop];\n } // else do nothing since the property already supports signal\n }\n\n // Do not pass labelAlign/Baseline = null to Vega since it won't pass the schema\n // Note that we need to use null so the default labelAlign is preserved.\n if (contains(['labelAlign', 'labelBaseline'], prop) && axis[prop] === null) {\n delete axis[prop];\n }\n }\n\n if (kind === 'grid') {\n if (!axis.grid) {\n return undefined;\n }\n\n // Remove unnecessary encode block\n if (axis.encode) {\n // Only need to keep encode block for grid\n const {grid} = axis.encode;\n axis.encode = {\n ...(grid ? {grid} : {})\n };\n\n if (isEmpty(axis.encode)) {\n delete axis.encode;\n }\n }\n\n return {\n scale,\n orient,\n ...axis,\n domain: false,\n labels: false,\n aria: false, // always hide grid axis\n\n // Always set min/maxExtent to 0 to ensure that `config.axis*.minExtent` and `config.axis*.maxExtent`\n // would not affect gridAxis\n maxExtent: 0,\n minExtent: 0,\n ticks: false,\n zindex: getFirstDefined(zindex, 0) // put grid behind marks by default\n };\n } else {\n // kind === 'main'\n\n if (!opt.header && axisCmpt.mainExtracted) {\n // if mainExtracted has been extracted to a separate facet\n return undefined;\n }\n\n if (labelExpr !== undefined) {\n let expr = labelExpr;\n if (axis.encode?.labels?.update && isSignalRef(axis.encode.labels.update.text)) {\n expr = replaceAll(labelExpr, 'datum.label', axis.encode.labels.update.text.signal);\n }\n setAxisEncode(axis, 'labels', 'text', {signal: expr});\n }\n\n if (axis.labelAlign === null) {\n delete axis.labelAlign;\n }\n\n // Remove unnecessary encode block\n if (axis.encode) {\n for (const part of AXIS_PARTS) {\n if (!axisCmpt.hasAxisPart(part)) {\n delete axis.encode[part];\n }\n }\n if (isEmpty(axis.encode)) {\n delete axis.encode;\n }\n }\n\n const titleString = assembleTitle(title, config);\n\n return {\n scale,\n orient,\n grid: false,\n ...(titleString ? {title: titleString} : {}),\n ...axis,\n ...(config.aria === false ? {aria: false} : {}),\n zindex: getFirstDefined(zindex, 0) // put axis line above marks by default\n };\n }\n}\n\n/**\n * Add axis signals so grid line works correctly\n * (Fix https://github.com/vega/vega-lite/issues/4226)\n */\nexport function assembleAxisSignals(model: Model): NewSignal[] {\n const {axes} = model.component;\n const signals: NewSignal[] = [];\n\n for (const channel of POSITION_SCALE_CHANNELS) {\n if (axes[channel]) {\n for (const axis of axes[channel]) {\n if (!axis.get('disable') && !axis.get('gridScale')) {\n // If there is x-axis but no y-scale for gridScale, need to set height/width so x-axis can draw the grid with the right height. Same for y-axis and width.\n\n const sizeType = channel === 'x' ? 'height' : 'width';\n const update = model.getSizeSignalRef(sizeType).signal;\n\n if (sizeType !== update) {\n signals.push({\n name: sizeType,\n update\n });\n }\n }\n }\n }\n }\n return signals;\n}\n\nexport function assembleAxes(axisComponents: AxisComponentIndex, config: Config<SignalRef>): VgAxis[] {\n const {x = [], y = []} = axisComponents;\n return [\n ...x.map(a => assembleAxis(a, 'grid', config)),\n ...y.map(a => assembleAxis(a, 'grid', config)),\n ...x.map(a => assembleAxis(a, 'main', config)),\n ...y.map(a => assembleAxis(a, 'main', config))\n ].filter(a => a); // filter undefined\n}\n", "import {ScaleType, SignalRef} from 'vega';\nimport {array} from 'vega-util';\nimport {AxisConfig} from '../../axis';\nimport {PositionScaleChannel} from '../../channel';\nimport {Config, StyleConfigIndex} from '../../config';\nimport {isQuantitative} from '../../scale';\nimport {keys, titleCase} from '../../util';\nimport {isSignalRef} from '../../vega.schema';\nimport {getStyleConfig, signalOrStringValue} from '../common';\n\nfunction getAxisConfigFromConfigTypes(\n configTypes: string[],\n config: Config,\n channel: 'x' | 'y',\n orient: string | SignalRef\n) {\n // TODO: add special casing to add conditional value based on orient signal\n return Object.assign.apply(null, [\n {},\n ...configTypes.map(configType => {\n if (configType === 'axisOrient') {\n const orient1 = channel === 'x' ? 'bottom' : 'left';\n const orientConfig1 = config[channel === 'x' ? 'axisBottom' : 'axisLeft'] || {};\n const orientConfig2 = config[channel === 'x' ? 'axisTop' : 'axisRight'] || {};\n\n const props = new Set([...keys(orientConfig1), ...keys(orientConfig2)]);\n\n const conditionalOrientAxisConfig = {};\n for (const prop of props.values()) {\n (conditionalOrientAxisConfig as any)[prop] = {\n // orient is surely signal in this case\n signal: `${(orient as any)['signal']} === \"${orient1}\" ? ${signalOrStringValue(\n orientConfig1[prop]\n )} : ${signalOrStringValue(orientConfig2[prop])}`\n };\n }\n\n return conditionalOrientAxisConfig;\n }\n\n return (config as any)[configType];\n })\n ]);\n}\n\nexport type AxisConfigs = ReturnType<typeof getAxisConfigs>;\n\nexport function getAxisConfigs(\n channel: PositionScaleChannel,\n scaleType: ScaleType,\n orient: string | SignalRef,\n config: Config\n) {\n const typeBasedConfigTypes =\n scaleType === 'band'\n ? ['axisDiscrete', 'axisBand']\n : scaleType === 'point'\n ? ['axisDiscrete', 'axisPoint']\n : isQuantitative(scaleType)\n ? ['axisQuantitative']\n : scaleType === 'time' || scaleType === 'utc'\n ? ['axisTemporal']\n : [];\n\n const axisChannel = channel === 'x' ? 'axisX' : 'axisY';\n const axisOrient = isSignalRef(orient) ? 'axisOrient' : `axis${titleCase(orient)}`; // axisTop, axisBottom, ...\n\n const vlOnlyConfigTypes = [\n // technically Vega does have axisBand, but if we make another separation here,\n // it will further introduce complexity in the code\n ...typeBasedConfigTypes,\n ...typeBasedConfigTypes.map(c => axisChannel + c.substr(4))\n ];\n\n const vgConfigTypes = ['axis', axisOrient, axisChannel];\n\n return {\n vlOnlyAxisConfig: getAxisConfigFromConfigTypes(vlOnlyConfigTypes, config, channel, orient),\n vgAxisConfig: getAxisConfigFromConfigTypes(vgConfigTypes, config, channel, orient),\n axisConfigStyle: getAxisConfigStyle([...vgConfigTypes, ...vlOnlyConfigTypes], config)\n };\n}\n\nexport function getAxisConfigStyle(axisConfigTypes: string[], config: Config) {\n const toMerge = [{}];\n for (const configType of axisConfigTypes) {\n // TODO: add special casing to add conditional value based on orient signal\n let style = (config as any)[configType]?.style;\n if (style) {\n style = array(style);\n for (const s of style) {\n toMerge.push(config.style[s]);\n }\n }\n }\n return Object.assign.apply(null, toMerge);\n}\nexport function getAxisConfig(\n property: keyof AxisConfig<SignalRef>,\n styleConfigIndex: StyleConfigIndex<SignalRef>,\n style: string | string[],\n axisConfigs: Partial<AxisConfigs> = {}\n): {configFrom?: string; configValue?: any} {\n const styleConfig = getStyleConfig(property, style, styleConfigIndex);\n\n if (styleConfig !== undefined) {\n return {\n configFrom: 'style',\n configValue: styleConfig\n };\n }\n\n for (const configFrom of ['vlOnlyAxisConfig', 'vgAxisConfig', 'axisConfigStyle'] as const) {\n if (axisConfigs[configFrom]?.[property] !== undefined) {\n return {configFrom, configValue: axisConfigs[configFrom][property]};\n }\n }\n return {};\n}\n", "import {Align, AxisOrient, Orient, SignalRef} from 'vega';\nimport {isArray, isObject} from 'vega-util';\nimport {AxisInternal} from '../../axis';\nimport {isBinned, isBinning} from '../../bin';\nimport {PositionScaleChannel, X} from '../../channel';\nimport {\n DatumDef,\n isDiscrete,\n isFieldDef,\n PositionDatumDef,\n PositionFieldDef,\n toFieldDefBase,\n TypedFieldDef,\n valueArray\n} from '../../channeldef';\nimport {Config, StyleConfigIndex} from '../../config';\nimport {Mark} from '../../mark';\nimport {hasDiscreteDomain} from '../../scale';\nimport {Sort} from '../../sort';\nimport {durationExpr, normalizeTimeUnit} from '../../timeunit';\nimport {NOMINAL, ORDINAL, Type} from '../../type';\nimport {contains, normalizeAngle} from '../../util';\nimport {isSignalRef} from '../../vega.schema';\nimport {mergeTitle, mergeTitleFieldDefs} from '../common';\nimport {guideFormatType} from '../format';\nimport {UnitModel} from '../unit';\nimport {ScaleType} from './../../scale';\nimport {AxisComponentProps} from './component';\nimport {AxisConfigs, getAxisConfig} from './config';\n\nexport interface AxisRuleParams {\n fieldOrDatumDef: PositionFieldDef<string> | PositionDatumDef<string>;\n axis: AxisInternal;\n channel: PositionScaleChannel;\n model: UnitModel;\n\n mark: Mark;\n scaleType: ScaleType;\n orient: Orient | SignalRef;\n labelAngle: number | SignalRef;\n format: string | SignalRef;\n formatType: ReturnType<typeof guideFormatType>;\n config: Config;\n}\n\nexport const axisRules: {\n [k in keyof AxisComponentProps]?: (params: AxisRuleParams) => AxisComponentProps[k];\n} = {\n scale: ({model, channel}) => model.scaleName(channel),\n\n format: ({format}) => format, // we already calculate this in parse\n\n formatType: ({formatType}) => formatType, // we already calculate this in parse\n\n grid: ({fieldOrDatumDef, axis, scaleType}) => axis.grid ?? defaultGrid(scaleType, fieldOrDatumDef),\n\n gridScale: ({model, channel}) => gridScale(model, channel),\n\n labelAlign: ({axis, labelAngle, orient, channel}) =>\n axis.labelAlign || defaultLabelAlign(labelAngle, orient, channel),\n\n labelAngle: ({labelAngle}) => labelAngle, // we already calculate this in parse\n\n labelBaseline: ({axis, labelAngle, orient, channel}) =>\n axis.labelBaseline || defaultLabelBaseline(labelAngle, orient, channel),\n\n labelFlush: ({axis, fieldOrDatumDef, channel}) => axis.labelFlush ?? defaultLabelFlush(fieldOrDatumDef.type, channel),\n\n labelOverlap: ({axis, fieldOrDatumDef, scaleType}) =>\n axis.labelOverlap ??\n defaultLabelOverlap(\n fieldOrDatumDef.type,\n scaleType,\n isFieldDef(fieldOrDatumDef) && !!fieldOrDatumDef.timeUnit,\n isFieldDef(fieldOrDatumDef) ? fieldOrDatumDef.sort : undefined\n ),\n\n // we already calculate orient in parse\n orient: ({orient}) => orient as AxisOrient, // Need to cast until Vega supports signal\n\n tickCount: ({channel, model, axis, fieldOrDatumDef, scaleType}) => {\n const sizeType = channel === 'x' ? 'width' : channel === 'y' ? 'height' : undefined;\n const size = sizeType ? model.getSizeSignalRef(sizeType) : undefined;\n return axis.tickCount ?? defaultTickCount({fieldOrDatumDef, scaleType, size, values: axis.values});\n },\n\n tickMinStep: defaultTickMinStep,\n\n title: ({axis, model, channel}) => {\n if (axis.title !== undefined) {\n return axis.title;\n }\n const fieldDefTitle = getFieldDefTitle(model, channel);\n if (fieldDefTitle !== undefined) {\n return fieldDefTitle;\n }\n const fieldDef = model.typedFieldDef(channel);\n const channel2 = channel === 'x' ? 'x2' : 'y2';\n const fieldDef2 = model.fieldDef(channel2);\n\n // If title not specified, store base parts of fieldDef (and fieldDef2 if exists)\n return mergeTitleFieldDefs(\n fieldDef ? [toFieldDefBase(fieldDef)] : [],\n isFieldDef(fieldDef2) ? [toFieldDefBase(fieldDef2)] : []\n );\n },\n\n values: ({axis, fieldOrDatumDef}) => values(axis, fieldOrDatumDef),\n\n zindex: ({axis, fieldOrDatumDef, mark}) => axis.zindex ?? defaultZindex(mark, fieldOrDatumDef)\n};\n\n// TODO: we need to refactor this method after we take care of config refactoring\n/**\n * Default rules for whether to show a grid should be shown for a channel.\n * If `grid` is unspecified, the default value is `true` for ordinal scales that are not binned\n */\n\nexport function defaultGrid(scaleType: ScaleType, fieldDef: TypedFieldDef<string> | DatumDef) {\n return !hasDiscreteDomain(scaleType) && isFieldDef(fieldDef) && !isBinning(fieldDef?.bin) && !isBinned(fieldDef?.bin);\n}\n\nexport function gridScale(model: UnitModel, channel: PositionScaleChannel) {\n const gridChannel: PositionScaleChannel = channel === 'x' ? 'y' : 'x';\n if (model.getScaleComponent(gridChannel)) {\n return model.scaleName(gridChannel);\n }\n return undefined;\n}\n\nexport function getLabelAngle(\n fieldOrDatumDef: PositionFieldDef<string> | PositionDatumDef<string>,\n axis: AxisInternal,\n channel: PositionScaleChannel,\n styleConfig: StyleConfigIndex<SignalRef>,\n axisConfigs?: AxisConfigs\n) {\n const labelAngle = axis?.labelAngle;\n // try axis value\n if (labelAngle !== undefined) {\n return isSignalRef(labelAngle) ? labelAngle : normalizeAngle(labelAngle);\n } else {\n // try axis config value\n const {configValue: angle} = getAxisConfig('labelAngle', styleConfig, axis?.style, axisConfigs);\n if (angle !== undefined) {\n return normalizeAngle(angle);\n } else {\n // get default value\n if (\n channel === X &&\n contains([NOMINAL, ORDINAL], fieldOrDatumDef.type) &&\n !(isFieldDef(fieldOrDatumDef) && fieldOrDatumDef.timeUnit)\n ) {\n return 270;\n }\n // no default\n return undefined;\n }\n }\n}\n\nexport function normalizeAngleExpr(angle: SignalRef) {\n return `(((${angle.signal} % 360) + 360) % 360)`;\n}\n\nexport function defaultLabelBaseline(\n angle: number | SignalRef,\n orient: AxisOrient | SignalRef,\n channel: 'x' | 'y',\n alwaysIncludeMiddle?: boolean\n) {\n if (angle !== undefined) {\n if (channel === 'x') {\n if (isSignalRef(angle)) {\n const a = normalizeAngleExpr(angle);\n const orientIsTop = isSignalRef(orient) ? `(${orient.signal} === \"top\")` : orient === 'top';\n return {\n signal:\n `(45 < ${a} && ${a} < 135) || (225 < ${a} && ${a} < 315) ? \"middle\" :` +\n `(${a} <= 45 || 315 <= ${a}) === ${orientIsTop} ? \"bottom\" : \"top\"`\n };\n }\n\n if ((45 < angle && angle < 135) || (225 < angle && angle < 315)) {\n return 'middle';\n }\n\n if (isSignalRef(orient)) {\n const op = angle <= 45 || 315 <= angle ? '===' : '!==';\n return {signal: `${orient.signal} ${op} \"top\" ? \"bottom\" : \"top\"`};\n }\n\n return (angle <= 45 || 315 <= angle) === (orient === 'top') ? 'bottom' : 'top';\n } else {\n if (isSignalRef(angle)) {\n const a = normalizeAngleExpr(angle);\n const orientIsLeft = isSignalRef(orient) ? `(${orient.signal} === \"left\")` : orient === 'left';\n const middle = alwaysIncludeMiddle ? '\"middle\"' : 'null';\n return {\n signal: `${a} <= 45 || 315 <= ${a} || (135 <= ${a} && ${a} <= 225) ? ${middle} : (45 <= ${a} && ${a} <= 135) === ${orientIsLeft} ? \"top\" : \"bottom\"`\n };\n }\n\n if (angle <= 45 || 315 <= angle || (135 <= angle && angle <= 225)) {\n return alwaysIncludeMiddle ? 'middle' : null;\n }\n\n if (isSignalRef(orient)) {\n const op = 45 <= angle && angle <= 135 ? '===' : '!==';\n return {signal: `${orient.signal} ${op} \"left\" ? \"top\" : \"bottom\"`};\n }\n\n return (45 <= angle && angle <= 135) === (orient === 'left') ? 'top' : 'bottom';\n }\n }\n return undefined;\n}\n\nexport function defaultLabelAlign(\n angle: number | SignalRef,\n orient: AxisOrient | SignalRef,\n channel: 'x' | 'y'\n): Align | SignalRef {\n if (angle === undefined) {\n return undefined;\n }\n\n const isX = channel === 'x';\n const startAngle = isX ? 0 : 90;\n const mainOrient = isX ? 'bottom' : 'left';\n\n if (isSignalRef(angle)) {\n const a = normalizeAngleExpr(angle);\n const orientIsMain = isSignalRef(orient) ? `(${orient.signal} === \"${mainOrient}\")` : orient === mainOrient;\n return {\n signal:\n `(${startAngle ? `(${a} + 90)` : a} % 180 === 0) ? ${isX ? null : '\"center\"'} :` +\n `(${startAngle} < ${a} && ${a} < ${180 + startAngle}) === ${orientIsMain} ? \"left\" : \"right\"`\n };\n }\n\n if ((angle + startAngle) % 180 === 0) {\n // For bottom, use default label align so label flush still works\n return isX ? null : 'center';\n }\n\n if (isSignalRef(orient)) {\n const op = startAngle < angle && angle < 180 + startAngle ? '===' : '!==';\n const orientIsMain = `${orient.signal} ${op} \"${mainOrient}\"`;\n return {\n signal: `${orientIsMain} ? \"left\" : \"right\"`\n };\n }\n\n if ((startAngle < angle && angle < 180 + startAngle) === (orient === mainOrient)) {\n return 'left';\n }\n\n return 'right';\n}\n\nexport function defaultLabelFlush(type: Type, channel: PositionScaleChannel) {\n if (channel === 'x' && contains(['quantitative', 'temporal'], type)) {\n return true;\n }\n return undefined;\n}\n\nexport function defaultLabelOverlap(type: Type, scaleType: ScaleType, hasTimeUnit: boolean, sort?: Sort<string>) {\n // do not prevent overlap for nominal data because there is no way to infer what the missing labels are\n if ((hasTimeUnit && !isObject(sort)) || (type !== 'nominal' && type !== 'ordinal')) {\n if (scaleType === 'log' || scaleType === 'symlog') {\n return 'greedy';\n }\n return true;\n }\n return undefined;\n}\n\nexport function defaultOrient(channel: PositionScaleChannel) {\n return channel === 'x' ? 'bottom' : 'left';\n}\n\nexport function defaultTickCount({\n fieldOrDatumDef,\n scaleType,\n size,\n values: vals\n}: {\n fieldOrDatumDef: TypedFieldDef<string> | DatumDef;\n scaleType: ScaleType;\n size?: SignalRef;\n values?: AxisInternal['values'];\n}) {\n if (!vals && !hasDiscreteDomain(scaleType) && scaleType !== 'log') {\n if (isFieldDef(fieldOrDatumDef)) {\n if (isBinning(fieldOrDatumDef.bin)) {\n // for binned data, we don't want more ticks than maxbins\n return {signal: `ceil(${size.signal}/10)`};\n }\n\n if (\n fieldOrDatumDef.timeUnit &&\n contains(['month', 'hours', 'day', 'quarter'], normalizeTimeUnit(fieldOrDatumDef.timeUnit)?.unit)\n ) {\n return undefined;\n }\n }\n\n return {signal: `ceil(${size.signal}/40)`};\n }\n\n return undefined;\n}\n\nexport function defaultTickMinStep({format, fieldOrDatumDef}: Pick<AxisRuleParams, 'format' | 'fieldOrDatumDef'>) {\n if (format === 'd') {\n return 1;\n }\n\n if (isFieldDef(fieldOrDatumDef)) {\n const {timeUnit} = fieldOrDatumDef;\n if (timeUnit) {\n const signal = durationExpr(timeUnit);\n if (signal) {\n return {signal};\n }\n }\n }\n return undefined;\n}\n\nexport function getFieldDefTitle(model: UnitModel, channel: 'x' | 'y') {\n const channel2 = channel === 'x' ? 'x2' : 'y2';\n const fieldDef = model.fieldDef(channel);\n const fieldDef2 = model.fieldDef(channel2);\n\n const title1 = fieldDef ? fieldDef.title : undefined;\n const title2 = fieldDef2 ? fieldDef2.title : undefined;\n\n if (title1 && title2) {\n return mergeTitle(title1, title2);\n } else if (title1) {\n return title1;\n } else if (title2) {\n return title2;\n } else if (title1 !== undefined) {\n // falsy value to disable config\n return title1;\n } else if (title2 !== undefined) {\n // falsy value to disable config\n return title2;\n }\n\n return undefined;\n}\n\nexport function values(axis: AxisInternal, fieldOrDatumDef: TypedFieldDef<string> | DatumDef) {\n const vals = axis.values;\n\n if (isArray(vals)) {\n return valueArray(fieldOrDatumDef, vals);\n } else if (isSignalRef(vals)) {\n return vals;\n }\n\n return undefined;\n}\n\nexport function defaultZindex(mark: Mark, fieldDef: TypedFieldDef<string> | DatumDef) {\n if (mark === 'rect' && isDiscrete(fieldDef)) {\n return 1;\n }\n return 0;\n}\n", "import {FormulaTransform as VgFormulaTransform} from 'vega';\nimport {SingleDefChannel} from '../../channel';\nimport {FieldRefOption, isScaleFieldDef, TypedFieldDef, vgField} from '../../channeldef';\nimport {DateTime} from '../../datetime';\nimport {fieldFilterExpression} from '../../predicate';\nimport {isSortArray} from '../../sort';\nimport {CalculateTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {ModelWithField} from '../model';\nimport {DataFlowNode} from './dataflow';\nimport {getDependentFields} from './expressions';\n\nexport class CalculateNode extends DataFlowNode {\n private _dependentFields: Set<string>;\n\n public clone() {\n return new CalculateNode(null, duplicate(this.transform));\n }\n\n constructor(\n parent: DataFlowNode,\n private readonly transform: CalculateTransform\n ) {\n super(parent);\n\n this._dependentFields = getDependentFields(this.transform.calculate);\n }\n\n public static parseAllForSortIndex(parent: DataFlowNode, model: ModelWithField) {\n // get all the encoding with sort fields from model\n model.forEachFieldDef((fieldDef: TypedFieldDef<string>, channel: SingleDefChannel) => {\n if (!isScaleFieldDef(fieldDef)) {\n return;\n }\n if (isSortArray(fieldDef.sort)) {\n const {field, timeUnit} = fieldDef;\n const sort: (number | string | boolean | DateTime)[] = fieldDef.sort;\n // generate `datum[\"a\"] === val0 ? 0 : datum[\"a\"] === val1 ? 1 : ... : n` via FieldEqualPredicate\n const calculate =\n sort\n .map((sortValue, i) => {\n return `${fieldFilterExpression({field, timeUnit, equal: sortValue})} ? ${i} : `;\n })\n .join('') + sort.length;\n\n parent = new CalculateNode(parent, {\n calculate,\n as: sortArrayIndexField(fieldDef, channel, {forAs: true})\n });\n }\n });\n return parent;\n }\n\n public producedFields() {\n return new Set([this.transform.as]);\n }\n\n public dependentFields() {\n return this._dependentFields;\n }\n\n public assemble(): VgFormulaTransform {\n return {\n type: 'formula',\n expr: this.transform.calculate,\n as: this.transform.as\n };\n }\n\n public hash() {\n return `Calculate ${hash(this.transform)}`;\n }\n}\n\nexport function sortArrayIndexField(fieldDef: TypedFieldDef<string>, channel: SingleDefChannel, opt?: FieldRefOption) {\n return vgField(fieldDef, {prefix: channel, suffix: 'sort_index', ...opt});\n}\n", "import {Orient, SignalRef} from 'vega';\nimport {FacetChannel} from '../../channel';\nimport {Config} from '../../config';\nimport {Header} from '../../header';\nimport {contains, getFirstDefined} from '../../util';\nimport {HeaderChannel} from './component';\n\n/**\n * Get header channel, which can be different from facet channel when orient is specified or when the facet channel is facet.\n */\nexport function getHeaderChannel(channel: FacetChannel, orient: Orient): HeaderChannel {\n if (contains(['top', 'bottom'], orient)) {\n return 'column';\n } else if (contains(['left', 'right'], orient)) {\n return 'row';\n }\n return channel === 'row' ? 'row' : 'column';\n}\n\nexport function getHeaderProperty<P extends keyof Header<SignalRef>>(\n prop: P,\n header: Header<SignalRef>,\n config: Config<SignalRef>,\n channel: FacetChannel\n): Header<SignalRef>[P] {\n const headerSpecificConfig =\n channel === 'row' ? config.headerRow : channel === 'column' ? config.headerColumn : config.headerFacet;\n\n return getFirstDefined((header || {})[prop], headerSpecificConfig[prop], config.header[prop]);\n}\n\nexport function getHeaderProperties(\n properties: (keyof Header<SignalRef>)[],\n header: Header<SignalRef>,\n config: Config<SignalRef>,\n channel: FacetChannel\n): Header<SignalRef> {\n const props = {};\n for (const prop of properties) {\n const value = getHeaderProperty(prop, header || {}, config, channel);\n if (value !== undefined) {\n (props as any)[prop] = value;\n }\n }\n return props;\n}\n", "/**\n * Utility for generating row / column headers\n */\nimport {Axis as VgAxis, SignalRef, Text} from 'vega';\nimport {FacetFieldDef} from '../../spec/facet';\n\nexport type HeaderChannel = 'row' | 'column';\nexport const HEADER_CHANNELS: HeaderChannel[] = ['row', 'column'];\n\nexport type HeaderType = 'header' | 'footer';\nexport const HEADER_TYPES: HeaderType[] = ['header', 'footer'];\n\nexport interface LayoutHeaderComponentIndex {\n row?: LayoutHeaderComponent;\n column?: LayoutHeaderComponent;\n facet?: LayoutHeaderComponent;\n}\n\n/**\n * A component that represents all header, footers and title of a Vega group with layout directive.\n */\nexport interface LayoutHeaderComponent {\n title?: Text | SignalRef;\n\n // TODO: concat can have multiple header / footer.\n // Need to redesign this part a bit.\n\n facetFieldDef?: FacetFieldDef<string, SignalRef>;\n\n /**\n * An array of header components for headers.\n * For facet, there should be only one header component, which is data-driven.\n * For concat, there can be multiple header components that explicitly list different axes.\n */\n header?: HeaderComponent[];\n\n /**\n * An array of header components for footers.\n * For facet, there should be only one header component, which is data-driven.\n * For concat, there can be multiple header components that explicitly list different axes.\n */\n footer?: HeaderComponent[];\n}\n\n/**\n * A component that represents one group of row/column-header/footer.\n */\nexport interface HeaderComponent {\n labels: boolean;\n\n sizeSignal: {signal: string};\n\n axes: VgAxis[];\n}\n", "/**\n * Utility for generating row / column headers\n */\n\nimport {SignalRef, TitleAnchor, TitleConfig} from 'vega';\nimport {isArray} from 'vega-util';\nimport {FacetChannel, FACET_CHANNELS} from '../../channel';\nimport {vgField} from '../../channeldef';\nimport {Config} from '../../config';\nimport {\n CoreHeader,\n HEADER_LABEL_PROPERTIES,\n HEADER_LABEL_PROPERTIES_MAP,\n HEADER_TITLE_PROPERTIES,\n HEADER_TITLE_PROPERTIES_MAP\n} from '../../header';\nimport {isSortField} from '../../sort';\nimport {FacetFieldDef, isFacetMapping} from '../../spec/facet';\nimport {contains, isEmpty, normalizeAngle, replaceAll} from '../../util';\nimport {RowCol, VgComparator, VgMarkGroup, VgTitle} from '../../vega.schema';\nimport {defaultLabelAlign, defaultLabelBaseline} from '../axis/properties';\nimport {sortArrayIndexField} from '../data/calculate';\nimport {formatSignalRef} from '../format';\nimport {isFacetModel, Model} from '../model';\nimport {getHeaderChannel, getHeaderProperties, getHeaderProperty} from './common';\nimport {\n HeaderChannel,\n HeaderComponent,\n HeaderType,\n HEADER_TYPES,\n LayoutHeaderComponent,\n LayoutHeaderComponentIndex\n} from './component';\n\n// TODO: rename to assembleHeaderTitleGroup\nexport function assembleTitleGroup(model: Model, channel: FacetChannel) {\n const title = model.component.layoutHeaders[channel].title;\n const config = model.config ? model.config : undefined;\n const facetFieldDef = model.component.layoutHeaders[channel].facetFieldDef\n ? model.component.layoutHeaders[channel].facetFieldDef\n : undefined;\n\n const {\n titleAnchor,\n titleAngle: ta,\n titleOrient\n } = getHeaderProperties(['titleAnchor', 'titleAngle', 'titleOrient'], facetFieldDef.header, config, channel);\n const headerChannel = getHeaderChannel(channel, titleOrient);\n\n const titleAngle = normalizeAngle(ta);\n\n return {\n name: `${channel}-title`,\n type: 'group',\n role: `${headerChannel}-title`,\n title: {\n text: title,\n ...(channel === 'row' ? {orient: 'left'} : {}),\n style: 'guide-title',\n ...defaultHeaderGuideBaseline(titleAngle, headerChannel),\n ...defaultHeaderGuideAlign(headerChannel, titleAngle, titleAnchor),\n ...assembleHeaderProperties(config, facetFieldDef, channel, HEADER_TITLE_PROPERTIES, HEADER_TITLE_PROPERTIES_MAP)\n }\n };\n}\n\nexport function defaultHeaderGuideAlign(headerChannel: HeaderChannel, angle: number, anchor: TitleAnchor = 'middle') {\n switch (anchor) {\n case 'start':\n return {align: 'left'};\n case 'end':\n return {align: 'right'};\n }\n\n const align = defaultLabelAlign(angle, headerChannel === 'row' ? 'left' : 'top', headerChannel === 'row' ? 'y' : 'x');\n return align ? {align} : {};\n}\n\nexport function defaultHeaderGuideBaseline(angle: number, channel: FacetChannel) {\n const baseline = defaultLabelBaseline(angle, channel === 'row' ? 'left' : 'top', channel === 'row' ? 'y' : 'x', true);\n return baseline ? {baseline} : {};\n}\n\nexport function assembleHeaderGroups(model: Model, channel: HeaderChannel): VgMarkGroup[] {\n const layoutHeader = model.component.layoutHeaders[channel];\n const groups = [];\n for (const headerType of HEADER_TYPES) {\n if (layoutHeader[headerType]) {\n for (const headerComponent of layoutHeader[headerType]) {\n const group = assembleHeaderGroup(model, channel, headerType, layoutHeader, headerComponent);\n if (group != null) {\n groups.push(group);\n }\n }\n }\n }\n return groups;\n}\n\nfunction getSort(facetFieldDef: FacetFieldDef<string>, channel: HeaderChannel): VgComparator {\n const {sort} = facetFieldDef;\n if (isSortField(sort)) {\n return {\n field: vgField(sort, {expr: 'datum'}),\n order: sort.order ?? 'ascending'\n };\n } else if (isArray(sort)) {\n return {\n field: sortArrayIndexField(facetFieldDef, channel, {expr: 'datum'}),\n order: 'ascending'\n };\n } else {\n return {\n field: vgField(facetFieldDef, {expr: 'datum'}),\n order: sort ?? 'ascending'\n };\n }\n}\n\nexport function assembleLabelTitle(\n facetFieldDef: FacetFieldDef<string, SignalRef>,\n channel: FacetChannel,\n config: Config<SignalRef>\n) {\n const {format, formatType, labelAngle, labelAnchor, labelOrient, labelExpr} = getHeaderProperties(\n ['format', 'formatType', 'labelAngle', 'labelAnchor', 'labelOrient', 'labelExpr'],\n facetFieldDef.header,\n config,\n channel\n );\n\n const titleTextExpr = formatSignalRef({\n fieldOrDatumDef: facetFieldDef,\n format,\n formatType,\n expr: 'parent',\n config\n }).signal;\n const headerChannel = getHeaderChannel(channel, labelOrient);\n\n return {\n text: {\n signal: labelExpr\n ? replaceAll(\n replaceAll(labelExpr, 'datum.label', titleTextExpr),\n 'datum.value',\n vgField(facetFieldDef, {expr: 'parent'})\n )\n : titleTextExpr\n },\n ...(channel === 'row' ? {orient: 'left'} : {}),\n style: 'guide-label',\n frame: 'group',\n ...defaultHeaderGuideBaseline(labelAngle, headerChannel),\n ...defaultHeaderGuideAlign(headerChannel, labelAngle, labelAnchor),\n ...assembleHeaderProperties(config, facetFieldDef, channel, HEADER_LABEL_PROPERTIES, HEADER_LABEL_PROPERTIES_MAP)\n };\n}\n\nexport function assembleHeaderGroup(\n model: Model,\n channel: HeaderChannel,\n headerType: HeaderType,\n layoutHeader: LayoutHeaderComponent,\n headerComponent: HeaderComponent\n) {\n if (headerComponent) {\n let title = null;\n const {facetFieldDef} = layoutHeader;\n const config = model.config ? model.config : undefined;\n if (facetFieldDef && headerComponent.labels) {\n const {labelOrient} = getHeaderProperties(['labelOrient'], facetFieldDef.header, config, channel);\n\n // Include label title in the header if orient aligns with the channel\n if (\n (channel === 'row' && !contains(['top', 'bottom'], labelOrient)) ||\n (channel === 'column' && !contains(['left', 'right'], labelOrient))\n ) {\n title = assembleLabelTitle(facetFieldDef, channel, config);\n }\n }\n\n const isFacetWithoutRowCol = isFacetModel(model) && !isFacetMapping(model.facet);\n\n const axes = headerComponent.axes;\n\n const hasAxes = axes?.length > 0;\n if (title || hasAxes) {\n const sizeChannel = channel === 'row' ? 'height' : 'width';\n\n return {\n name: model.getName(`${channel}_${headerType}`),\n type: 'group',\n role: `${channel}-${headerType}`,\n\n ...(layoutHeader.facetFieldDef\n ? {\n from: {data: model.getName(`${channel}_domain`)},\n sort: getSort(facetFieldDef, channel)\n }\n : {}),\n ...(hasAxes && isFacetWithoutRowCol\n ? {\n from: {data: model.getName(`facet_domain_${channel}`)}\n }\n : {}),\n\n ...(title ? {title} : {}),\n ...(headerComponent.sizeSignal\n ? {\n encode: {\n update: {\n [sizeChannel]: headerComponent.sizeSignal\n }\n }\n }\n : {}),\n ...(hasAxes ? {axes} : {})\n };\n }\n }\n return null;\n}\n\nconst LAYOUT_TITLE_BAND = {\n column: {\n start: 0,\n end: 1\n },\n row: {\n start: 1,\n end: 0\n }\n};\n\nexport function getLayoutTitleBand(titleAnchor: TitleAnchor, headerChannel: HeaderChannel): 0 | 1 {\n return (LAYOUT_TITLE_BAND[headerChannel] as any)[titleAnchor];\n}\n\nexport function assembleLayoutTitleBand(\n headerComponentIndex: LayoutHeaderComponentIndex,\n config: Config<SignalRef>\n): RowCol<number> {\n const titleBand = {};\n\n for (const channel of FACET_CHANNELS) {\n const headerComponent = headerComponentIndex[channel];\n if (headerComponent?.facetFieldDef) {\n const {titleAnchor, titleOrient} = getHeaderProperties(\n ['titleAnchor', 'titleOrient'],\n headerComponent.facetFieldDef.header,\n config,\n channel\n );\n\n const headerChannel = getHeaderChannel(channel, titleOrient);\n const band = getLayoutTitleBand(titleAnchor, headerChannel);\n if (band !== undefined) {\n (titleBand as any)[headerChannel] = band;\n }\n }\n }\n\n return isEmpty(titleBand) ? undefined : titleBand;\n}\n\nexport function assembleHeaderProperties(\n config: Config<SignalRef>,\n facetFieldDef: FacetFieldDef<string, SignalRef>,\n channel: FacetChannel,\n properties: (keyof CoreHeader<SignalRef>)[],\n propertiesMap: Partial<Record<keyof CoreHeader<SignalRef>, keyof TitleConfig>>\n): Partial<VgTitle> {\n const props = {};\n for (const prop of properties) {\n if (!propertiesMap[prop]) {\n continue;\n }\n\n const value = getHeaderProperty(prop, facetFieldDef?.header, config, channel);\n if (value !== undefined) {\n (props as any)[propertiesMap[prop]] = value;\n }\n }\n return props;\n}\n", "import {InitSignal, NewSignal} from 'vega';\nimport {getViewConfigContinuousSize} from '../../config';\nimport {hasDiscreteDomain} from '../../scale';\nimport {getFirstDefined} from '../../util';\nimport {isSignalRef, isVgRangeStep, VgRangeStep} from '../../vega.schema';\nimport {signalOrStringValue} from '../common';\nimport {isFacetModel, Model} from '../model';\nimport {ScaleComponent} from '../scale/component';\nimport {LayoutSizeType} from './component';\n\nexport function assembleLayoutSignals(model: Model): NewSignal[] {\n return [\n ...sizeSignals(model, 'width'),\n ...sizeSignals(model, 'height'),\n ...sizeSignals(model, 'childWidth'),\n ...sizeSignals(model, 'childHeight')\n ];\n}\n\nexport function sizeSignals(model: Model, sizeType: LayoutSizeType): (NewSignal | InitSignal)[] {\n const channel = sizeType === 'width' ? 'x' : 'y';\n const size = model.component.layoutSize.get(sizeType);\n if (!size || size === 'merged') {\n return [];\n }\n\n // Read size signal name from name map, just in case it is the top-level size signal that got renamed.\n const name = model.getSizeSignalRef(sizeType).signal;\n\n if (size === 'step') {\n const scaleComponent = model.getScaleComponent(channel);\n\n if (scaleComponent) {\n const type = scaleComponent.get('type');\n const range = scaleComponent.get('range');\n\n if (hasDiscreteDomain(type) && isVgRangeStep(range)) {\n const scaleName = model.scaleName(channel);\n\n if (isFacetModel(model.parent)) {\n // If parent is facet and this is an independent scale, return only signal signal\n // as the width/height will be calculated using the cardinality from\n // facet's aggregate rather than reading from scale domain\n const parentResolve = model.parent.component.resolve;\n if (parentResolve.scale[channel] === 'independent') {\n return [stepSignal(scaleName, range)];\n }\n }\n\n return [\n stepSignal(scaleName, range),\n {\n name,\n update: sizeExpr(scaleName, scaleComponent, `domain('${scaleName}').length`)\n }\n ];\n }\n }\n /* istanbul ignore next: Condition should not happen -- only for warning in development. */\n throw new Error('layout size is step although width/height is not step.');\n } else if (size == 'container') {\n const isWidth = name.endsWith('width');\n const expr = isWidth ? 'containerSize()[0]' : 'containerSize()[1]';\n const defaultValue = getViewConfigContinuousSize(model.config.view, isWidth ? 'width' : 'height');\n const safeExpr = `isFinite(${expr}) ? ${expr} : ${defaultValue}`;\n return [{name, init: safeExpr, on: [{update: safeExpr, events: 'window:resize'}]}];\n } else {\n return [\n {\n name,\n value: size\n }\n ];\n }\n}\n\nfunction stepSignal(scaleName: string, range: VgRangeStep): NewSignal {\n const name = `${scaleName}_step`;\n if (isSignalRef(range.step)) {\n return {name, update: range.step.signal};\n } else {\n return {name, value: range.step};\n }\n}\n\nexport function sizeExpr(scaleName: string, scaleComponent: ScaleComponent, cardinality: string) {\n const type = scaleComponent.get('type');\n const padding = scaleComponent.get('padding');\n const paddingOuter = getFirstDefined(scaleComponent.get('paddingOuter'), padding);\n\n let paddingInner = scaleComponent.get('paddingInner');\n paddingInner =\n type === 'band'\n ? // only band has real paddingInner\n paddingInner !== undefined\n ? paddingInner\n : padding\n : // For point, as calculated in https://github.com/vega/vega-scale/blob/master/src/band.js#L128,\n // it's equivalent to have paddingInner = 1 since there is only n-1 steps between n points.\n 1;\n return `bandspace(${cardinality}, ${signalOrStringValue(paddingInner)}, ${signalOrStringValue(\n paddingOuter\n )}) * ${scaleName}_step`;\n}\n", "import {Split} from '../split';\n\nexport type LayoutSize = number | 'container' | 'step' | 'merged';\n\nexport interface LayoutSizeIndex {\n width?: LayoutSize;\n\n childWidth?: LayoutSize;\n\n height?: LayoutSize;\n\n childHeight?: LayoutSize;\n}\n\nexport type LayoutSizeType = keyof LayoutSizeIndex;\n\nexport type LayoutSizeComponent = Split<LayoutSizeIndex>;\n\nexport function getSizeTypeFromLayoutSizeType(layoutSizeType: LayoutSizeType): 'width' | 'height' {\n return layoutSizeType === 'childWidth' ? 'width' : layoutSizeType === 'childHeight' ? 'height' : layoutSizeType;\n}\n", "import {GuideEncodingEntry} from '../guide';\nimport {keys} from '../util';\nimport {VgEncodeChannel} from '../vega.schema';\nimport {signalOrValueRef} from './common';\nimport {wrapCondition} from './mark/encode/conditional';\nimport {UnitModel} from './unit';\n\nexport function guideEncodeEntry(encoding: GuideEncodingEntry, model: UnitModel) {\n return keys(encoding).reduce((encode, channel: VgEncodeChannel) => {\n return {\n ...encode,\n ...wrapCondition({\n model,\n channelDef: encoding[channel],\n vgChannel: channel,\n mainRefFn: def => signalOrValueRef(def.value),\n invalidValueRef: undefined // guide encoding won't show invalid values for the scale\n })\n };\n }, {});\n}\n", "import {isXorY, ScaleChannel} from '../channel';\nimport * as log from '../log';\nimport {Resolve, ResolveMode} from '../resolve';\nimport {isConcatModel, isFacetModel, isLayerModel, Model} from './model';\n\nexport function defaultScaleResolve(channel: ScaleChannel, model: Model): ResolveMode {\n if (isFacetModel(model)) {\n return channel === 'theta' ? 'independent' : 'shared';\n } else if (isLayerModel(model)) {\n return 'shared';\n } else if (isConcatModel(model)) {\n return isXorY(channel) || channel === 'theta' || channel === 'radius' ? 'independent' : 'shared';\n }\n /* istanbul ignore next: should never reach here. */\n throw new Error('invalid model type for resolve');\n}\n\nexport function parseGuideResolve(resolve: Resolve, channel: ScaleChannel): ResolveMode {\n const channelScaleResolve = resolve.scale[channel];\n const guide = isXorY(channel) ? 'axis' : 'legend';\n\n if (channelScaleResolve === 'independent') {\n if ((resolve[guide] as any)[channel] === 'shared') {\n log.warn(log.message.independentScaleMeansIndependentGuide(channel));\n }\n return 'independent';\n }\n\n return (resolve[guide] as any)[channel] || 'shared';\n}\n", "import {Legend as VgLegend} from 'vega';\nimport {NonPositionScaleChannel} from '../../channel';\nimport {COMMON_LEGEND_PROPERTY_INDEX, LegendInternal} from '../../legend';\nimport {Flag, keys} from '../../util';\nimport {Split} from '../split';\n\nexport type LegendComponentProps = VgLegend & {\n labelExpr?: string;\n selections?: string[];\n disable?: boolean;\n};\n\nconst LEGEND_COMPONENT_PROPERTY_INDEX: Flag<keyof LegendComponentProps> = {\n ...COMMON_LEGEND_PROPERTY_INDEX,\n disable: 1,\n labelExpr: 1,\n selections: 1,\n // channel scales\n opacity: 1,\n shape: 1,\n stroke: 1,\n fill: 1,\n size: 1,\n strokeWidth: 1,\n strokeDash: 1,\n // encode\n encode: 1\n};\n\nexport const LEGEND_COMPONENT_PROPERTIES = keys(LEGEND_COMPONENT_PROPERTY_INDEX);\n\nexport class LegendComponent extends Split<LegendComponentProps> {}\n\nexport type LegendComponentIndex = Partial<Record<NonPositionScaleChannel, LegendComponent>>;\n\nexport type LegendInternalIndex = Partial<Record<NonPositionScaleChannel, LegendInternal>>;\n", "import {ColorValueRef, EncodeEntry, Gradient, LegendEncode, LegendType, SignalRef, SymbolEncodeEntry} from 'vega';\nimport {array, isArray, stringValue} from 'vega-util';\nimport {COLOR, NonPositionScaleChannel, OPACITY} from '../../channel';\nimport {\n Conditional,\n DatumDef,\n hasConditionalValueDef,\n isFieldDef,\n isValueDef,\n TypedFieldDef,\n Value,\n ValueDef\n} from '../../channeldef';\nimport {Encoding} from '../../encoding';\nimport {FILL_STROKE_CONFIG} from '../../mark';\nimport {getFirstDefined, hasProperty, isEmpty, varName} from '../../util';\nimport {applyMarkConfig, signalOrValueRef} from '../common';\nimport {formatCustomType, isCustomFormatType} from '../format';\nimport * as mixins from '../mark/encode';\nimport {STORE} from '../selection';\nimport {UnitModel} from '../unit';\nimport {LegendComponent} from './component';\n\nexport interface LegendEncodeParams {\n fieldOrDatumDef: TypedFieldDef<string> | DatumDef;\n model: UnitModel;\n channel: NonPositionScaleChannel;\n legendCmpt: LegendComponent;\n legendType: LegendType;\n}\n\nexport const legendEncodeRules: {\n [part in keyof LegendEncode]?: (spec: EncodeEntry, params: LegendEncodeParams) => EncodeEntry;\n} = {\n symbols,\n gradient,\n labels,\n entries\n};\n\nexport function symbols(\n symbolsSpec: any,\n {fieldOrDatumDef, model, channel, legendCmpt, legendType}: LegendEncodeParams\n): SymbolEncodeEntry {\n if (legendType !== 'symbol') {\n return undefined;\n }\n\n const {markDef, encoding, config, mark} = model;\n const filled = markDef.filled && mark !== 'trail';\n\n let out = {\n ...applyMarkConfig({}, model, FILL_STROKE_CONFIG),\n ...mixins.color(model, {filled})\n } as SymbolEncodeEntry; // FIXME: remove this when VgEncodeEntry is compatible with SymbolEncodeEntry\n\n const symbolOpacity = legendCmpt.get('symbolOpacity') ?? config.legend.symbolOpacity;\n const symbolFillColor = legendCmpt.get('symbolFillColor') ?? config.legend.symbolFillColor;\n const symbolStrokeColor = legendCmpt.get('symbolStrokeColor') ?? config.legend.symbolStrokeColor;\n\n const opacity = symbolOpacity === undefined ? (getMaxValue(encoding.opacity) ?? markDef.opacity) : undefined;\n\n if (out.fill) {\n // for fill legend, we don't want any fill in symbol\n if (channel === 'fill' || (filled && channel === COLOR)) {\n delete out.fill;\n } else if (hasProperty(out.fill, 'field')) {\n // For others, set fill to some opaque value (or nothing if a color is already set)\n if (symbolFillColor) {\n delete out.fill;\n } else {\n out.fill = signalOrValueRef(config.legend.symbolBaseFillColor ?? 'black');\n out.fillOpacity = signalOrValueRef(opacity ?? 1);\n }\n } else if (isArray(out.fill)) {\n const fill = getFirstConditionValue(encoding.fill ?? encoding.color) ?? markDef.fill ?? (filled && markDef.color);\n if (fill) {\n out.fill = signalOrValueRef(fill) as ColorValueRef;\n }\n }\n }\n\n if (out.stroke) {\n if (channel === 'stroke' || (!filled && channel === COLOR)) {\n delete out.stroke;\n } else if (hasProperty(out.stroke, 'field') || symbolStrokeColor) {\n // For others, remove stroke field\n delete out.stroke;\n } else if (isArray(out.stroke)) {\n const stroke = getFirstDefined<string | Gradient | SignalRef>(\n getFirstConditionValue<string | Gradient>(encoding.stroke || encoding.color),\n markDef.stroke,\n filled ? markDef.color : undefined\n );\n if (stroke) {\n out.stroke = {value: stroke} as ColorValueRef;\n }\n }\n }\n\n if (channel !== OPACITY) {\n const condition = isFieldDef(fieldOrDatumDef) && selectedCondition(model, legendCmpt, fieldOrDatumDef);\n\n if (condition) {\n out.opacity = [\n {test: condition, ...signalOrValueRef(opacity ?? 1)},\n signalOrValueRef(config.legend.unselectedOpacity)\n ];\n } else if (opacity) {\n out.opacity = signalOrValueRef(opacity);\n }\n }\n\n out = {...out, ...symbolsSpec};\n\n return isEmpty(out) ? undefined : out;\n}\n\nexport function gradient(gradientSpec: any, {model, legendType, legendCmpt}: LegendEncodeParams) {\n if (legendType !== 'gradient') {\n return undefined;\n }\n\n const {config, markDef, encoding} = model;\n\n let out: SymbolEncodeEntry = {};\n\n const gradientOpacity = legendCmpt.get('gradientOpacity') ?? config.legend.gradientOpacity;\n const opacity = gradientOpacity === undefined ? getMaxValue(encoding.opacity) || markDef.opacity : undefined;\n if (opacity) {\n // only apply opacity if it is neither zero or undefined\n out.opacity = signalOrValueRef(opacity);\n }\n\n out = {...out, ...gradientSpec};\n return isEmpty(out) ? undefined : out;\n}\n\nexport function labels(specifiedlabelsSpec: any, {fieldOrDatumDef, model, channel, legendCmpt}: LegendEncodeParams) {\n const legend = model.legend(channel) || {};\n const config = model.config;\n\n const condition = isFieldDef(fieldOrDatumDef) ? selectedCondition(model, legendCmpt, fieldOrDatumDef) : undefined;\n const opacity = condition ? [{test: condition, value: 1}, {value: config.legend.unselectedOpacity}] : undefined;\n\n const {format, formatType} = legend;\n\n let text = undefined;\n\n if (isCustomFormatType(formatType)) {\n text = formatCustomType({\n fieldOrDatumDef,\n field: 'datum.value',\n format,\n formatType,\n config\n });\n } else if (format === undefined && formatType === undefined && config.customFormatTypes) {\n if (fieldOrDatumDef.type === 'quantitative' && config.numberFormatType) {\n text = formatCustomType({\n fieldOrDatumDef,\n field: 'datum.value',\n format: config.numberFormat,\n formatType: config.numberFormatType,\n config\n });\n } else if (\n fieldOrDatumDef.type === 'temporal' &&\n config.timeFormatType &&\n isFieldDef(fieldOrDatumDef) &&\n fieldOrDatumDef.timeUnit === undefined\n ) {\n text = formatCustomType({\n fieldOrDatumDef,\n field: 'datum.value',\n format: config.timeFormat,\n formatType: config.timeFormatType,\n config\n });\n }\n }\n\n const labelsSpec = {\n ...(opacity ? {opacity} : {}),\n ...(text ? {text} : {}),\n ...specifiedlabelsSpec\n };\n\n return isEmpty(labelsSpec) ? undefined : labelsSpec;\n}\n\nexport function entries(entriesSpec: any, {legendCmpt}: LegendEncodeParams) {\n const selections = legendCmpt.get('selections');\n return selections?.length ? {...entriesSpec, fill: {value: 'transparent'}} : entriesSpec;\n}\n\nfunction getMaxValue(channelDef: Encoding<string>['opacity']) {\n return getConditionValue<number>(channelDef, (v: number, conditionalDef) => Math.max(v, conditionalDef.value as any));\n}\n\nexport function getFirstConditionValue<V extends Value | Gradient>(\n channelDef: Encoding<string>['fill' | 'stroke' | 'shape']\n): V {\n return getConditionValue<V>(channelDef, (v: V, conditionalDef: Conditional<ValueDef<V>>) => {\n return getFirstDefined<V>(v, conditionalDef.value);\n });\n}\n\nfunction getConditionValue<V extends Value | Gradient>(\n channelDef: Encoding<string>['fill' | 'stroke' | 'shape' | 'opacity'],\n reducer: (val: V, conditionalDef: Conditional<ValueDef<V>>) => V\n): V {\n if (hasConditionalValueDef(channelDef)) {\n return array(channelDef.condition).reduce(reducer, channelDef.value as any);\n } else if (isValueDef(channelDef)) {\n return channelDef.value as any;\n }\n return undefined;\n}\n\nfunction selectedCondition(model: UnitModel, legendCmpt: LegendComponent, fieldDef: TypedFieldDef<string>) {\n const selections = legendCmpt.get('selections');\n if (!selections?.length) return undefined;\n\n const field = stringValue(fieldDef.field);\n return selections\n .map(name => {\n const store = stringValue(varName(name) + STORE);\n return `(!length(data(${store})) || (${name}[${field}] && indexof(${name}[${field}], datum.value) >= 0))`;\n })\n .join(' || ');\n}\n", "import {LabelOverlap, LegendOrient, LegendType, Orientation, SignalRef, SymbolShape} from 'vega';\nimport {isArray} from 'vega-util';\nimport {isColorChannel} from '../../channel';\nimport {DatumDef, MarkPropFieldOrDatumDef, title as fieldDefTitle, TypedFieldDef, valueArray} from '../../channeldef';\nimport {Config} from '../../config';\nimport {Encoding} from '../../encoding';\nimport {Legend, LegendConfig, LegendInternal} from '../../legend';\nimport {Mark, MarkDef} from '../../mark';\nimport {isContinuousToContinuous, ScaleType} from '../../scale';\nimport {TimeUnit} from '../../timeunit';\nimport {contains, getFirstDefined} from '../../util';\nimport {isSignalRef} from '../../vega.schema';\nimport {guideFormat, guideFormatType} from '../format';\nimport {Model} from '../model';\nimport {UnitModel} from '../unit';\nimport {NonPositionScaleChannel} from './../../channel';\nimport {LegendComponentProps} from './component';\nimport {getFirstConditionValue} from './encode';\n\nexport interface LegendRuleParams {\n legend: LegendInternal;\n channel: NonPositionScaleChannel;\n model: UnitModel;\n markDef: MarkDef<Mark, SignalRef>;\n encoding: Encoding<string>;\n fieldOrDatumDef: MarkPropFieldOrDatumDef<string>;\n legendConfig: LegendConfig<SignalRef>;\n config: Config<SignalRef>;\n scaleType: ScaleType;\n orient: LegendOrient;\n legendType: LegendType;\n direction: Orientation;\n}\n\nexport const legendRules: {\n [k in keyof LegendComponentProps]?: (params: LegendRuleParams) => LegendComponentProps[k];\n} = {\n direction: ({direction}) => direction,\n\n format: ({fieldOrDatumDef, legend, config}) => {\n const {format, formatType} = legend;\n return guideFormat(fieldOrDatumDef, fieldOrDatumDef.type, format, formatType, config, false);\n },\n\n formatType: ({legend, fieldOrDatumDef, scaleType}) => {\n const {formatType} = legend;\n return guideFormatType(formatType, fieldOrDatumDef, scaleType);\n },\n\n gradientLength: params => {\n const {legend, legendConfig} = params;\n return legend.gradientLength ?? legendConfig.gradientLength ?? defaultGradientLength(params);\n },\n\n labelOverlap: ({legend, legendConfig, scaleType}) =>\n legend.labelOverlap ?? legendConfig.labelOverlap ?? defaultLabelOverlap(scaleType),\n\n symbolType: ({legend, markDef, channel, encoding}) =>\n legend.symbolType ?? defaultSymbolType(markDef.type, channel, encoding.shape, markDef.shape),\n\n title: ({fieldOrDatumDef, config}) => fieldDefTitle(fieldOrDatumDef, config, {allowDisabling: true}),\n\n type: ({legendType, scaleType, channel}) => {\n if (isColorChannel(channel) && isContinuousToContinuous(scaleType)) {\n if (legendType === 'gradient') {\n return undefined;\n }\n } else if (legendType === 'symbol') {\n return undefined;\n }\n return legendType;\n }, // depended by other property, let's define upfront\n\n values: ({fieldOrDatumDef, legend}) => values(legend, fieldOrDatumDef)\n};\n\nexport function values(legend: LegendInternal, fieldOrDatumDef: TypedFieldDef<string> | DatumDef) {\n const vals = legend.values;\n\n if (isArray(vals)) {\n return valueArray(fieldOrDatumDef, vals);\n } else if (isSignalRef(vals)) {\n return vals;\n }\n return undefined;\n}\n\nexport function defaultSymbolType(\n mark: Mark,\n channel: NonPositionScaleChannel,\n shapeChannelDef: Encoding<string>['shape'],\n markShape: SymbolShape | SignalRef\n): SymbolShape | SignalRef {\n if (channel !== 'shape') {\n // use the value from the shape encoding or the mark config if they exist\n const shape = getFirstConditionValue<string>(shapeChannelDef) ?? markShape;\n if (shape) {\n return shape;\n }\n }\n\n switch (mark) {\n case 'bar':\n case 'rect':\n case 'image':\n case 'square':\n return 'square';\n case 'line':\n case 'trail':\n case 'rule':\n return 'stroke';\n case 'arc':\n case 'point':\n case 'circle':\n case 'tick':\n case 'geoshape':\n case 'area':\n case 'text':\n return 'circle';\n }\n}\n\nexport function clipHeight(legendType: LegendType) {\n if (legendType === 'gradient') {\n return 20;\n }\n return undefined;\n}\n\nexport function getLegendType(params: {\n legend: LegendInternal;\n channel: NonPositionScaleChannel;\n timeUnit?: TimeUnit;\n scaleType: ScaleType;\n}): LegendType {\n const {legend} = params;\n\n return getFirstDefined(legend.type, defaultType(params));\n}\n\nexport function defaultType({\n channel,\n timeUnit,\n scaleType\n}: {\n channel: NonPositionScaleChannel;\n timeUnit?: TimeUnit;\n scaleType: ScaleType;\n}): LegendType {\n // Following the logic in https://github.com/vega/vega-parser/blob/master/src/parsers/legend.js\n\n if (isColorChannel(channel)) {\n if (contains(['quarter', 'month', 'day'], timeUnit)) {\n return 'symbol';\n }\n\n if (isContinuousToContinuous(scaleType)) {\n return 'gradient';\n }\n }\n return 'symbol';\n}\n\nexport function getDirection({\n legendConfig,\n legendType,\n orient,\n legend\n}: {\n orient: LegendOrient;\n legendConfig: LegendConfig<SignalRef>;\n legendType: LegendType;\n legend: Legend<SignalRef>;\n}): Orientation {\n return (\n legend.direction ??\n legendConfig[legendType ? 'gradientDirection' : 'symbolDirection'] ??\n defaultDirection(orient, legendType)\n );\n}\n\nexport function defaultDirection(orient: LegendOrient, legendType: LegendType): 'horizontal' | undefined {\n switch (orient) {\n case 'top':\n case 'bottom':\n return 'horizontal';\n\n case 'left':\n case 'right':\n case 'none':\n case undefined: // undefined = \"right\" in Vega\n return undefined; // vertical is Vega's default\n default:\n // top-left / ...\n // For inner legend, uses compact layout like Tableau\n return legendType === 'gradient' ? 'horizontal' : undefined;\n }\n}\n\nexport function defaultGradientLength({\n legendConfig,\n model,\n direction,\n orient,\n scaleType\n}: {\n scaleType: ScaleType;\n direction: Orientation;\n orient: LegendOrient;\n model: Model;\n legendConfig: LegendConfig<SignalRef>;\n}) {\n const {\n gradientHorizontalMaxLength,\n gradientHorizontalMinLength,\n gradientVerticalMaxLength,\n gradientVerticalMinLength\n } = legendConfig;\n if (isContinuousToContinuous(scaleType)) {\n if (direction === 'horizontal') {\n if (orient === 'top' || orient === 'bottom') {\n return gradientLengthSignal(model, 'width', gradientHorizontalMinLength, gradientHorizontalMaxLength);\n } else {\n return gradientHorizontalMinLength;\n }\n } else {\n // vertical / undefined (Vega uses vertical by default)\n return gradientLengthSignal(model, 'height', gradientVerticalMinLength, gradientVerticalMaxLength);\n }\n }\n return undefined;\n}\n\nfunction gradientLengthSignal(model: Model, sizeType: 'width' | 'height', min: number, max: number) {\n const sizeSignal = model.getSizeSignalRef(sizeType).signal;\n return {signal: `clamp(${sizeSignal}, ${min}, ${max})`};\n}\n\nexport function defaultLabelOverlap(scaleType: ScaleType): LabelOverlap {\n if (contains(['quantile', 'threshold', 'log', 'symlog'], scaleType)) {\n return 'greedy';\n }\n return undefined;\n}\n", "import {Legend as VgLegend, LegendEncode} from 'vega';\nimport {COLOR, NonPositionScaleChannel, SHAPE} from '../../channel';\nimport {DatumDef, FieldDef, getFieldOrDatumDef, isFieldDef, MarkPropDatumDef, MarkPropFieldDef} from '../../channeldef';\nimport {LegendInternal, LEGEND_SCALE_CHANNELS} from '../../legend';\nimport {normalizeTimeUnit} from '../../timeunit';\nimport {GEOJSON} from '../../type';\nimport {deleteNestedProperty, isEmpty, keys, varName} from '../../util';\nimport {mergeTitleComponent} from '../common';\nimport {guideEncodeEntry} from '../guide';\nimport {isUnitModel, Model} from '../model';\nimport {parseGuideResolve} from '../resolve';\nimport {parseInteractiveLegend} from '../selection/legends';\nimport {defaultTieBreaker, Explicit, makeImplicit, mergeValuesWithExplicit} from '../split';\nimport {UnitModel} from '../unit';\nimport {LegendComponent, LegendComponentIndex, LegendComponentProps, LEGEND_COMPONENT_PROPERTIES} from './component';\nimport {LegendEncodeParams, legendEncodeRules} from './encode';\nimport {getDirection, getLegendType, LegendRuleParams, legendRules} from './properties';\n\nexport function parseLegend(model: Model) {\n const legendComponent = isUnitModel(model) ? parseUnitLegend(model) : parseNonUnitLegend(model);\n model.component.legends = legendComponent;\n return legendComponent;\n}\n\nfunction parseUnitLegend(model: UnitModel): LegendComponentIndex {\n const {encoding} = model;\n\n const legendComponent: LegendComponentIndex = {};\n\n for (const channel of [COLOR, ...LEGEND_SCALE_CHANNELS]) {\n const def = getFieldOrDatumDef(encoding[channel]) as MarkPropFieldDef<string> | MarkPropDatumDef<string>;\n\n if (!def || !model.getScaleComponent(channel)) {\n continue;\n }\n\n if (channel === SHAPE && isFieldDef(def) && def.type === GEOJSON) {\n continue;\n }\n\n legendComponent[channel] = parseLegendForChannel(model, channel);\n }\n\n return legendComponent;\n}\n\nfunction getLegendDefWithScale(model: UnitModel, channel: NonPositionScaleChannel): VgLegend {\n const scale = model.scaleName(channel);\n if (model.mark === 'trail') {\n if (channel === 'color') {\n // trail is a filled mark, but its default symbolType (\"stroke\") should use \"stroke\"\n return {stroke: scale};\n } else if (channel === 'size') {\n return {strokeWidth: scale};\n }\n }\n\n if (channel === 'color') {\n return model.markDef.filled ? {fill: scale} : {stroke: scale};\n }\n return {[channel]: scale};\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction isExplicit<T extends string | number | object | boolean>(\n value: T,\n property: keyof LegendComponentProps,\n legend: LegendInternal,\n fieldDef: FieldDef<string>\n) {\n switch (property) {\n case 'disable':\n return legend !== undefined; // if axis is specified or null/false, then its enable/disable state is explicit\n case 'values':\n // specified legend.values is already respected, but may get transformed.\n return !!legend?.values;\n case 'title':\n // title can be explicit if fieldDef.title is set\n if (property === 'title' && value === fieldDef?.title) {\n return true;\n }\n }\n // Otherwise, things are explicit if the returned value matches the specified property\n return value === (legend || ({} as any))[property];\n}\n\nexport function parseLegendForChannel(model: UnitModel, channel: NonPositionScaleChannel): LegendComponent {\n let legend = model.legend(channel);\n\n const {markDef, encoding, config} = model;\n const legendConfig = config.legend;\n const legendCmpt = new LegendComponent({}, getLegendDefWithScale(model, channel));\n parseInteractiveLegend(model, channel, legendCmpt);\n\n const disable = legend !== undefined ? !legend : legendConfig.disable;\n legendCmpt.set('disable', disable, legend !== undefined);\n if (disable) {\n return legendCmpt;\n }\n\n legend = legend || {};\n\n const scaleType = model.getScaleComponent(channel).get('type');\n const fieldOrDatumDef = getFieldOrDatumDef(encoding[channel]) as MarkPropFieldDef<string> | DatumDef;\n const timeUnit = isFieldDef(fieldOrDatumDef) ? normalizeTimeUnit(fieldOrDatumDef.timeUnit)?.unit : undefined;\n\n const orient = legend.orient || config.legend.orient || 'right';\n const legendType = getLegendType({legend, channel, timeUnit, scaleType});\n\n const direction = getDirection({legend, legendType, orient, legendConfig});\n\n const ruleParams: LegendRuleParams = {\n legend,\n channel,\n model,\n markDef,\n encoding,\n fieldOrDatumDef,\n legendConfig,\n config,\n scaleType,\n orient,\n legendType,\n direction\n };\n\n for (const property of LEGEND_COMPONENT_PROPERTIES) {\n if (\n (legendType === 'gradient' && property.startsWith('symbol')) ||\n (legendType === 'symbol' && property.startsWith('gradient'))\n ) {\n continue;\n }\n\n const value = property in legendRules ? legendRules[property](ruleParams) : (legend as any)[property];\n if (value !== undefined) {\n const explicit = isExplicit(value, property, legend, model.fieldDef(channel));\n if (explicit || (config.legend as any)[property] === undefined) {\n legendCmpt.set(property, value, explicit);\n }\n }\n }\n\n const legendEncoding = legend?.encoding ?? {};\n const selections = legendCmpt.get('selections');\n const legendEncode: LegendEncode = {};\n\n const legendEncodeParams: LegendEncodeParams = {fieldOrDatumDef, model, channel, legendCmpt, legendType};\n\n for (const part of ['labels', 'legend', 'title', 'symbols', 'gradient', 'entries'] as const) {\n // FIXME: remove as any (figure out what legendEncoding.entries is)\n const legendEncodingPart = guideEncodeEntry((legendEncoding as any)[part] ?? {}, model);\n\n const value =\n part in legendEncodeRules\n ? legendEncodeRules[part](legendEncodingPart, legendEncodeParams) // apply rule\n : legendEncodingPart; // no rule -- just default values\n\n if (value !== undefined && !isEmpty(value)) {\n legendEncode[part] = {\n ...(selections?.length && isFieldDef(fieldOrDatumDef)\n ? {name: `${varName(fieldOrDatumDef.field)}_legend_${part}`}\n : {}),\n ...(selections?.length ? {interactive: !!selections} : {}),\n update: value\n };\n }\n }\n\n if (!isEmpty(legendEncode)) {\n legendCmpt.set('encode', legendEncode, !!legend?.encoding);\n }\n\n return legendCmpt;\n}\n\nfunction parseNonUnitLegend(model: Model) {\n const {legends, resolve} = model.component;\n\n for (const child of model.children) {\n parseLegend(child);\n\n for (const channel of keys(child.component.legends)) {\n resolve.legend[channel] = parseGuideResolve(model.component.resolve, channel);\n\n if (resolve.legend[channel] === 'shared') {\n // If the resolve says shared (and has not been overridden)\n // We will try to merge and see if there is a conflict\n\n legends[channel] = mergeLegendComponent(legends[channel], child.component.legends[channel]);\n\n if (!legends[channel]) {\n // If merge returns nothing, there is a conflict so we cannot make the legend shared.\n // Thus, mark legend as independent and remove the legend component.\n resolve.legend[channel] = 'independent';\n delete legends[channel];\n }\n }\n }\n }\n\n for (const channel of keys(legends)) {\n for (const child of model.children) {\n if (!child.component.legends[channel]) {\n // skip if the child does not have a particular legend\n continue;\n }\n\n if (resolve.legend[channel] === 'shared') {\n // After merging shared legend, make sure to remove legend from child\n delete child.component.legends[channel];\n }\n }\n }\n\n return legends;\n}\n\nexport function mergeLegendComponent(mergedLegend: LegendComponent, childLegend: LegendComponent): LegendComponent {\n if (!mergedLegend) {\n return childLegend.clone();\n }\n const mergedOrient = mergedLegend.getWithExplicit('orient');\n const childOrient = childLegend.getWithExplicit('orient');\n\n if (mergedOrient.explicit && childOrient.explicit && mergedOrient.value !== childOrient.value) {\n // TODO: throw warning if resolve is explicit (We don't have info about explicit/implicit resolve yet.)\n // Cannot merge due to inconsistent orient\n return undefined;\n }\n\n let typeMerged = false;\n // Otherwise, let's merge\n for (const prop of LEGEND_COMPONENT_PROPERTIES) {\n const mergedValueWithExplicit = mergeValuesWithExplicit<LegendComponentProps, any>(\n mergedLegend.getWithExplicit(prop),\n childLegend.getWithExplicit(prop),\n prop,\n 'legend',\n\n // Tie breaker function\n (v1: Explicit<any>, v2: Explicit<any>): any => {\n switch (prop) {\n case 'symbolType':\n return mergeSymbolType(v1, v2);\n case 'title':\n return mergeTitleComponent(v1, v2);\n case 'type':\n // There are only two types. If we have different types, then prefer symbol over gradient.\n typeMerged = true;\n return makeImplicit('symbol');\n }\n return defaultTieBreaker<LegendComponentProps, any>(v1, v2, prop, 'legend');\n }\n );\n mergedLegend.setWithExplicit(prop, mergedValueWithExplicit);\n }\n if (typeMerged) {\n if (mergedLegend.implicit?.encode?.gradient) {\n deleteNestedProperty(mergedLegend.implicit, ['encode', 'gradient']);\n }\n if (mergedLegend.explicit?.encode?.gradient) {\n deleteNestedProperty(mergedLegend.explicit, ['encode', 'gradient']);\n }\n }\n\n return mergedLegend;\n}\n\nfunction mergeSymbolType(st1: Explicit<string>, st2: Explicit<string>) {\n if (st2.value === 'circle') {\n // prefer \"circle\" over \"stroke\"\n return st2;\n }\n return st1;\n}\n", "import {Legend as VgLegend, LegendEncode} from 'vega';\nimport {Config} from '../../config';\nimport {LEGEND_SCALE_CHANNELS} from '../../legend';\nimport {keys, replaceAll, stringify, vals} from '../../util';\nimport {isSignalRef, VgEncodeChannel, VgValueRef} from '../../vega.schema';\nimport {Model} from '../model';\nimport {LegendComponent} from './component';\nimport {mergeLegendComponent} from './parse';\n\nfunction setLegendEncode(\n legend: VgLegend,\n part: keyof LegendEncode,\n vgProp: VgEncodeChannel,\n vgRef: VgValueRef | VgValueRef[]\n) {\n legend.encode ??= {};\n legend.encode[part] ??= {};\n legend.encode[part].update ??= {};\n // TODO: remove as any after https://github.com/prisma/nexus-prisma/issues/291\n (legend.encode[part].update[vgProp] as any) = vgRef;\n}\n\nexport function assembleLegends(model: Model): VgLegend[] {\n const legendComponentIndex = model.component.legends;\n const legendByDomain: Record<string, LegendComponent[]> = {};\n\n for (const channel of keys(legendComponentIndex)) {\n const scaleComponent = model.getScaleComponent(channel);\n const domainHash = stringify(scaleComponent.get('domains'));\n if (legendByDomain[domainHash]) {\n for (const mergedLegendComponent of legendByDomain[domainHash]) {\n const merged = mergeLegendComponent(mergedLegendComponent, legendComponentIndex[channel]);\n if (!merged) {\n // If cannot merge, need to add this legend separately\n legendByDomain[domainHash].push(legendComponentIndex[channel]);\n }\n }\n } else {\n legendByDomain[domainHash] = [legendComponentIndex[channel].clone()];\n }\n }\n\n const legends = vals(legendByDomain)\n .flat()\n .map(l => assembleLegend(l, model.config))\n .filter(l => l !== undefined);\n\n return legends;\n}\n\nexport function assembleLegend(legendCmpt: LegendComponent, config: Config) {\n const {disable, labelExpr, selections, ...legend} = legendCmpt.combine();\n\n if (disable) {\n return undefined;\n }\n\n if (config.aria === false && legend.aria == undefined) {\n legend.aria = false;\n }\n\n if (legend.encode?.symbols) {\n const out = legend.encode.symbols.update;\n if (out.fill && (out.fill as any)['value'] !== 'transparent' && !out.stroke && !legend.stroke) {\n // For non color channel's legend, we need to override symbol stroke config from Vega config if stroke channel is not used.\n out.stroke = {value: 'transparent'};\n }\n\n // Remove properties that the legend is encoding.\n for (const property of LEGEND_SCALE_CHANNELS) {\n if (legend[property]) {\n delete out[property];\n }\n }\n }\n\n if (!legend.title) {\n // title schema doesn't include null, ''\n delete legend.title;\n }\n\n if (labelExpr !== undefined) {\n let expr = labelExpr;\n if (legend.encode?.labels?.update && isSignalRef(legend.encode.labels.update.text)) {\n expr = replaceAll(labelExpr, 'datum.label', legend.encode.labels.update.text.signal);\n }\n setLegendEncode(legend, 'labels', 'text', {signal: expr});\n }\n\n return legend;\n}\n", "import {Projection as VgProjection, SignalRef} from 'vega';\nimport {contains} from '../../util';\nimport {isSignalRef} from '../../vega.schema';\nimport {isConcatModel, isLayerModel, Model} from '../model';\n\nexport function assembleProjections(model: Model): VgProjection[] {\n if (isLayerModel(model) || isConcatModel(model)) {\n return assembleProjectionsForModelAndChildren(model);\n } else {\n return assembleProjectionForModel(model);\n }\n}\n\nexport function assembleProjectionsForModelAndChildren(model: Model): VgProjection[] {\n return model.children.reduce((projections, child) => {\n return projections.concat(child.assembleProjections());\n }, assembleProjectionForModel(model));\n}\n\nexport function assembleProjectionForModel(model: Model): VgProjection[] {\n const component = model.component.projection;\n if (!component || component.merged) {\n return [];\n }\n\n const projection = component.combine();\n const {name} = projection; // we need to extract name so that it is always present in the output and pass TS type validation\n\n if (!component.data) {\n // generate custom projection, no automatic fitting\n return [\n {\n name,\n // translate to center by default\n translate: {signal: '[width / 2, height / 2]'},\n // parameters, overwrite default translate if specified\n ...projection\n }\n ];\n } else {\n // generate projection that uses extent fitting\n const size: SignalRef = {\n signal: `[${component.size.map(ref => ref.signal).join(', ')}]`\n };\n\n const fits: string[] = component.data.reduce((sources, data) => {\n const source: string = isSignalRef(data) ? data.signal : `data('${model.lookupDataSource(data)}')`;\n if (!contains(sources, source)) {\n // build a unique list of sources\n sources.push(source);\n }\n return sources;\n }, []);\n\n if (fits.length <= 0) {\n throw new Error(\"Projection's fit didn't find any data sources\");\n }\n\n return [\n {\n name,\n size,\n fit: {\n signal: fits.length > 1 ? `[${fits.join(', ')}]` : fits[0]\n },\n ...projection\n }\n ];\n }\n}\n", "import type {BaseProjection, SignalRef, Vector2} from 'vega';\nimport {ExprRef} from './expr';\nimport {MapExcludeValueRefAndReplaceSignalWith, ProjectionType} from './vega.schema';\n\nexport interface Projection<ES extends ExprRef | SignalRef>\n extends MapExcludeValueRefAndReplaceSignalWith<BaseProjection, ES> {\n /**\n * The cartographic projection to use. This value is case-insensitive, for example `\"albers\"` and `\"Albers\"` indicate the same projection type. You can find all valid projection types [in the documentation](https://vega.github.io/vega-lite/docs/projection.html#projection-types).\n *\n * __Default value:__ `equalEarth`\n */\n type?: ProjectionType | ES; // Re-declare to override docs\n\n /**\n * The projection\u2019s scale (zoom) factor, overriding automatic fitting. The default scale is projection-specific. The scale factor corresponds linearly to the distance between projected points; however, scale factor values are not equivalent across projections.\n */\n scale?: number | ES; // Re-declare to override docs\n\n /**\n * The projection\u2019s translation offset as a two-element array `[tx, ty]`.\n */\n translate?: Vector2<number> | ES; // TODO: figure what's VL default value\n}\n\n/**\n * Any property of Projection can be in config\n */\nexport type ProjectionConfig = Projection<ExprRef>;\n\nexport const PROJECTION_PROPERTIES: (keyof Projection<ExprRef>)[] = [\n 'type',\n 'clipAngle',\n 'clipExtent',\n 'center',\n 'rotate',\n 'precision',\n 'reflectX',\n 'reflectY',\n 'coefficient',\n 'distance',\n 'fraction',\n 'lobes',\n 'parallel',\n 'radius',\n 'ratio',\n 'spacing',\n 'tilt'\n];\n", "import {Projection as VgProjection, SignalRef} from 'vega';\nimport {Projection} from '../../projection';\nimport {Split} from '../split';\n\nexport class ProjectionComponent extends Split<VgProjection> {\n public merged = false;\n\n constructor(\n name: string,\n public specifiedProjection: Projection<SignalRef>,\n public size: SignalRef[],\n public data: (string | SignalRef)[]\n ) {\n super(\n {...specifiedProjection}, // all explicit properties of projection\n {name} // name as initial implicit property\n );\n }\n\n /**\n * Whether the projection parameters should fit provided data.\n */\n public get isFit() {\n return !!this.data;\n }\n}\n", "import type {SignalRef} from 'vega';\nimport {hasOwnProperty} from 'vega-util';\nimport {LATITUDE, LATITUDE2, LONGITUDE, LONGITUDE2, SHAPE} from '../../channel';\nimport {getFieldOrDatumDef} from '../../channeldef';\nimport {DataSourceType} from '../../data';\nimport {replaceExprRef} from '../../expr';\nimport {PROJECTION_PROPERTIES} from '../../projection';\nimport {GEOJSON} from '../../type';\nimport {deepEqual, duplicate, every} from '../../util';\nimport {isUnitModel, Model} from '../model';\nimport {UnitModel} from '../unit';\nimport {ProjectionComponent} from './component';\n\nexport function parseProjection(model: Model) {\n model.component.projection = isUnitModel(model) ? parseUnitProjection(model) : parseNonUnitProjections(model);\n}\n\nfunction parseUnitProjection(model: UnitModel): ProjectionComponent {\n if (model.hasProjection) {\n const proj = replaceExprRef(model.specifiedProjection);\n const fit = !(proj && (proj.scale != null || proj.translate != null));\n const size = fit ? [model.getSizeSignalRef('width'), model.getSizeSignalRef('height')] : undefined;\n const data = fit ? gatherFitData(model) : undefined;\n\n const projComp = new ProjectionComponent(\n model.projectionName(true),\n {\n ...replaceExprRef(model.config.projection),\n ...proj\n },\n size,\n data\n );\n\n if (!projComp.get('type')) {\n projComp.set('type', 'equalEarth', false);\n }\n\n return projComp;\n }\n\n return undefined;\n}\n\nfunction gatherFitData(model: UnitModel) {\n const data: (SignalRef | string)[] = [];\n\n const {encoding} = model;\n\n for (const posssiblePair of [\n [LONGITUDE, LATITUDE],\n [LONGITUDE2, LATITUDE2]\n ]) {\n if (getFieldOrDatumDef(encoding[posssiblePair[0]]) || getFieldOrDatumDef(encoding[posssiblePair[1]])) {\n data.push({\n signal: model.getName(`geojson_${data.length}`)\n });\n }\n }\n\n if (model.channelHasField(SHAPE) && model.typedFieldDef(SHAPE).type === GEOJSON) {\n data.push({\n signal: model.getName(`geojson_${data.length}`)\n });\n }\n\n if (data.length === 0) {\n // main source is geojson, so we can just use that\n data.push(model.requestDataName(DataSourceType.Main));\n }\n\n return data;\n}\n\nfunction mergeIfNoConflict(first: ProjectionComponent, second: ProjectionComponent): ProjectionComponent {\n const allPropertiesShared = every(PROJECTION_PROPERTIES, prop => {\n // neither has the property\n if (!hasOwnProperty(first.explicit, prop) && !hasOwnProperty(second.explicit, prop)) {\n return true;\n }\n // both have property and an equal value for property\n if (\n hasOwnProperty(first.explicit, prop) &&\n hasOwnProperty(second.explicit, prop) &&\n // some properties might be signals or objects and require hashing for comparison\n deepEqual(first.get(prop), second.get(prop))\n ) {\n return true;\n }\n return false;\n });\n\n const size = deepEqual(first.size, second.size);\n if (size) {\n if (allPropertiesShared) {\n return first;\n } else if (deepEqual(first.explicit, {})) {\n return second;\n } else if (deepEqual(second.explicit, {})) {\n return first;\n }\n }\n\n // if all properties don't match, let each unit spec have its own projection\n return null;\n}\n\nfunction parseNonUnitProjections(model: Model): ProjectionComponent {\n if (model.children.length === 0) {\n return undefined;\n }\n\n let nonUnitProjection: ProjectionComponent;\n\n // parse all children first\n for (const child of model.children) {\n parseProjection(child);\n }\n\n // analyze parsed projections, attempt to merge\n const mergable = every(model.children, child => {\n const projection = child.component.projection;\n if (!projection) {\n // child layer does not use a projection\n return true;\n } else if (!nonUnitProjection) {\n // cached 'projection' is null, cache this one\n nonUnitProjection = projection;\n return true;\n } else {\n const merge = mergeIfNoConflict(nonUnitProjection, projection);\n if (merge) {\n nonUnitProjection = merge;\n }\n return !!merge;\n }\n });\n\n // if cached one and all other children share the same projection,\n if (nonUnitProjection && mergable) {\n // so we can elevate it to the layer level\n const name = model.projectionName(true);\n const modelProjection = new ProjectionComponent(\n name,\n nonUnitProjection.specifiedProjection,\n nonUnitProjection.size,\n duplicate(nonUnitProjection.data)\n );\n\n // rename and assign all others as merged\n for (const child of model.children) {\n const projection = child.component.projection;\n if (projection) {\n if (projection.isFit) {\n modelProjection.data.push(...child.component.projection.data);\n }\n child.renameProjection(projection.get('name'), name);\n projection.merged = true;\n }\n }\n\n return modelProjection;\n }\n\n return undefined;\n}\n", "import {BinTransform as VgBinTransform, Transforms as VgTransform} from 'vega';\nimport {isString} from 'vega-util';\nimport {BinParams, binToString, isBinning, isParameterExtent} from '../../bin';\nimport {Channel} from '../../channel';\nimport {binRequiresRange, FieldName, isTypedFieldDef, normalizeBin, TypedFieldDef, vgField} from '../../channeldef';\nimport {Config} from '../../config';\nimport {BinTransform} from '../../transform';\nimport {Dict, duplicate, hash, isEmpty, keys, replacePathInField, unique, vals} from '../../util';\nimport {binFormatExpression} from '../format';\nimport {isUnitModel, Model, ModelWithField} from '../model';\nimport {parseSelectionExtent} from '../selection/parse';\nimport {NonPositionScaleChannel, PositionChannel} from './../../channel';\nimport {DataFlowNode} from './dataflow';\n\nfunction rangeFormula(model: ModelWithField, fieldDef: TypedFieldDef<string>, channel: Channel, config: Config) {\n if (binRequiresRange(fieldDef, channel)) {\n // read format from axis or legend, if there is no format then use config.numberFormat\n\n const guide = isUnitModel(model)\n ? (model.axis(channel as PositionChannel) ?? model.legend(channel as NonPositionScaleChannel) ?? {})\n : {};\n\n const startField = vgField(fieldDef, {expr: 'datum'});\n const endField = vgField(fieldDef, {expr: 'datum', binSuffix: 'end'});\n\n return {\n formulaAs: vgField(fieldDef, {binSuffix: 'range', forAs: true}),\n formula: binFormatExpression(startField, endField, guide.format, guide.formatType, config)\n };\n }\n return {};\n}\n\nfunction binKey(bin: BinParams, field: string) {\n return `${binToString(bin)}_${field}`;\n}\n\nfunction getSignalsFromModel(model: Model, key: string) {\n return {\n signal: model.getName(`${key}_bins`),\n extentSignal: model.getName(`${key}_extent`)\n };\n}\n\nexport function getBinSignalName(model: Model, field: string, bin: boolean | BinParams) {\n const normalizedBin = normalizeBin(bin, undefined) ?? {};\n const key = binKey(normalizedBin, field);\n return model.getName(`${key}_bins`);\n}\n\nfunction isBinTransform(t: TypedFieldDef<string> | BinTransform): t is BinTransform {\n return 'as' in t;\n}\n\nfunction createBinComponent(t: TypedFieldDef<string> | BinTransform, bin: boolean | BinParams, model: Model) {\n let as: [string, string];\n let span: string;\n\n if (isBinTransform(t)) {\n as = isString(t.as) ? [t.as, `${t.as}_end`] : [t.as[0], t.as[1]];\n } else {\n as = [vgField(t, {forAs: true}), vgField(t, {binSuffix: 'end', forAs: true})];\n }\n\n const normalizedBin = {...normalizeBin(bin, undefined)};\n const key = binKey(normalizedBin, t.field);\n const {signal, extentSignal} = getSignalsFromModel(model, key);\n\n if (isParameterExtent(normalizedBin.extent)) {\n const ext = normalizedBin.extent;\n span = parseSelectionExtent(model, ext.param, ext);\n delete normalizedBin.extent; // Vega-Lite selection extent map to Vega's span property.\n }\n\n const binComponent: BinComponent = {\n bin: normalizedBin,\n field: t.field,\n as: [as],\n ...(signal ? {signal} : {}),\n ...(extentSignal ? {extentSignal} : {}),\n ...(span ? {span} : {})\n };\n\n return {key, binComponent};\n}\n\nexport interface BinComponent {\n bin: BinParams;\n field: FieldName;\n extentSignal?: string;\n signal?: string;\n span?: string;\n\n /** Pairs of strings of the names of start and end signals */\n as: [string, string][];\n\n // Range Formula\n\n formula?: string;\n formulaAs?: string;\n}\n\nexport class BinNode extends DataFlowNode {\n public clone() {\n return new BinNode(null, duplicate(this.bins));\n }\n\n constructor(\n parent: DataFlowNode,\n private bins: Dict<BinComponent>\n ) {\n super(parent);\n }\n\n public static makeFromEncoding(parent: DataFlowNode, model: ModelWithField) {\n const bins = model.reduceFieldDef((binComponentIndex: Dict<BinComponent>, fieldDef, channel) => {\n if (isTypedFieldDef(fieldDef) && isBinning(fieldDef.bin)) {\n const {key, binComponent} = createBinComponent(fieldDef, fieldDef.bin, model);\n binComponentIndex[key] = {\n ...binComponent,\n ...binComponentIndex[key],\n ...rangeFormula(model, fieldDef, channel, model.config)\n };\n }\n return binComponentIndex;\n }, {} as Dict<BinComponent>);\n\n if (isEmpty(bins)) {\n return null;\n }\n\n return new BinNode(parent, bins);\n }\n\n /**\n * Creates a bin node from BinTransform.\n * The optional parameter should provide\n */\n public static makeFromTransform(parent: DataFlowNode, t: BinTransform, model: Model) {\n const {key, binComponent} = createBinComponent(t, t.bin, model);\n return new BinNode(parent, {\n [key]: binComponent\n });\n }\n\n /**\n * Merge bin nodes. This method either integrates the bin config from the other node\n * or if this node already has a bin config, renames the corresponding signal in the model.\n */\n public merge(other: BinNode, renameSignal: (s1: string, s2: string) => void) {\n for (const key of keys(other.bins)) {\n if (key in this.bins) {\n renameSignal(other.bins[key].signal, this.bins[key].signal);\n // Ensure that we don't have duplicate names for signal pairs\n this.bins[key].as = unique([...this.bins[key].as, ...other.bins[key].as], hash);\n } else {\n this.bins[key] = other.bins[key];\n }\n }\n\n for (const child of other.children) {\n other.removeChild(child);\n child.parent = this;\n }\n other.remove();\n }\n\n public producedFields() {\n return new Set(\n vals(this.bins)\n .map(c => c.as)\n .flat(2)\n );\n }\n\n public dependentFields() {\n return new Set(vals(this.bins).map(c => c.field));\n }\n\n public hash() {\n return `Bin ${hash(this.bins)}`;\n }\n\n public assemble(): VgTransform[] {\n return vals(this.bins).flatMap(bin => {\n const transform: VgTransform[] = [];\n\n const [binAs, ...remainingAs] = bin.as;\n const {extent, ...params} = bin.bin;\n const binTrans: VgBinTransform = {\n type: 'bin',\n field: replacePathInField(bin.field),\n as: binAs,\n signal: bin.signal,\n ...(!isParameterExtent(extent) ? {extent} : {extent: null}),\n ...(bin.span ? {span: {signal: `span(${bin.span})`}} : {}),\n ...params\n };\n\n if (!extent && bin.extentSignal) {\n transform.push({\n type: 'extent',\n field: replacePathInField(bin.field),\n signal: bin.extentSignal\n });\n binTrans.extent = {signal: bin.extentSignal};\n }\n\n transform.push(binTrans);\n\n for (const as of remainingAs) {\n for (let i = 0; i < 2; i++) {\n transform.push({\n type: 'formula',\n expr: vgField({field: binAs[i]}, {expr: 'datum'}),\n as: as[i]\n });\n }\n }\n\n if (bin.formula) {\n transform.push({\n type: 'formula',\n expr: bin.formula,\n as: bin.formulaAs\n });\n }\n return transform;\n });\n }\n}\n", "import {AggregateOp, AggregateTransform as VgAggregateTransform} from 'vega';\nimport {isArgmaxDef, isArgminDef} from '../../aggregate';\nimport {\n Channel,\n getPositionChannelFromLatLong,\n getSecondaryRangeChannel,\n isGeoPositionChannel,\n isScaleChannel,\n isXorY\n} from '../../channel';\nimport {\n binRequiresRange,\n FieldDef,\n getBandPosition,\n hasBandEnd,\n isScaleFieldDef,\n isTypedFieldDef,\n vgField\n} from '../../channeldef';\nimport * as log from '../../log';\nimport {isFieldRange} from '../../scale';\nimport {AggregateTransform} from '../../transform';\nimport {Dict, duplicate, hash, keys, replacePathInField, setEqual} from '../../util';\nimport {isUnitModel, ModelWithField} from '../model';\nimport {UnitModel} from '../unit';\nimport {DataFlowNode} from './dataflow';\nimport {isRectBasedMark} from '../../mark';\nimport {OFFSETTED_RECT_END_SUFFIX, OFFSETTED_RECT_START_SUFFIX} from './timeunit';\n\ntype Measures = Dict<Partial<Record<AggregateOp, Set<string>>>>;\n\nfunction addDimension(dims: Set<string>, channel: Channel, fieldDef: FieldDef<string>, model: ModelWithField) {\n const channelDef2 = isUnitModel(model) ? model.encoding[getSecondaryRangeChannel(channel)] : undefined;\n\n if (\n isTypedFieldDef(fieldDef) &&\n isUnitModel(model) &&\n hasBandEnd(fieldDef, channelDef2, model.markDef, model.config)\n ) {\n dims.add(vgField(fieldDef, {}));\n dims.add(vgField(fieldDef, {suffix: 'end'}));\n\n const {mark, markDef, config} = model;\n\n const bandPosition = getBandPosition({fieldDef, markDef, config});\n\n if (isRectBasedMark(mark) && bandPosition !== 0.5 && isXorY(channel)) {\n dims.add(vgField(fieldDef, {suffix: OFFSETTED_RECT_START_SUFFIX}));\n dims.add(vgField(fieldDef, {suffix: OFFSETTED_RECT_END_SUFFIX}));\n }\n\n if (fieldDef.bin && binRequiresRange(fieldDef, channel)) {\n dims.add(vgField(fieldDef, {binSuffix: 'range'}));\n }\n } else if (isGeoPositionChannel(channel)) {\n const posChannel = getPositionChannelFromLatLong(channel);\n dims.add(model.getName(posChannel));\n } else {\n dims.add(vgField(fieldDef));\n }\n if (isScaleFieldDef(fieldDef) && isFieldRange(fieldDef.scale?.range)) {\n dims.add(fieldDef.scale.range.field);\n }\n return dims;\n}\n\nfunction mergeMeasures(parentMeasures: Measures, childMeasures: Measures) {\n for (const field of keys(childMeasures)) {\n // when we merge a measure, we either have to add an aggregation operator or even a new field\n const ops = childMeasures[field];\n for (const op of keys(ops)) {\n if (field in parentMeasures) {\n // add operator to existing measure field\n parentMeasures[field][op] = new Set([...(parentMeasures[field][op] ?? []), ...ops[op]]);\n } else {\n parentMeasures[field] = {[op]: ops[op]};\n }\n }\n }\n}\n\nexport class AggregateNode extends DataFlowNode {\n public clone() {\n return new AggregateNode(null, new Set(this.dimensions), duplicate(this.measures));\n }\n\n /**\n * @param dimensions string set for dimensions\n * @param measures dictionary mapping field name => dict of aggregation functions and names to use\n */\n constructor(\n parent: DataFlowNode,\n private dimensions: Set<string>,\n private measures: Measures\n ) {\n super(parent);\n }\n\n get groupBy() {\n return this.dimensions;\n }\n\n public static makeFromEncoding(parent: DataFlowNode, model: UnitModel): AggregateNode {\n let isAggregate = false;\n model.forEachFieldDef(fd => {\n if (fd.aggregate) {\n isAggregate = true;\n }\n });\n\n const meas: Measures = {};\n const dims = new Set<string>();\n\n if (!isAggregate) {\n // no need to create this node if the model has no aggregation\n return null;\n }\n\n model.forEachFieldDef((fieldDef, channel: Channel) => {\n const {aggregate, field} = fieldDef;\n if (aggregate) {\n if (aggregate === 'count') {\n meas['*'] ??= {};\n meas['*']['count'] = new Set([vgField(fieldDef, {forAs: true})]);\n } else {\n if (isArgminDef(aggregate) || isArgmaxDef(aggregate)) {\n const op = isArgminDef(aggregate) ? 'argmin' : 'argmax';\n const argField = (aggregate as any)[op];\n meas[argField] ??= {};\n meas[argField][op] = new Set([vgField({op, field: argField}, {forAs: true})]);\n } else {\n meas[field] ??= {};\n (meas[field] as any)[aggregate] = new Set([vgField(fieldDef, {forAs: true})]);\n }\n\n // For scale channel with domain === 'unaggregated', add min/max so we can use their union as unaggregated domain\n if (isScaleChannel(channel) && model.scaleDomain(channel) === 'unaggregated') {\n meas[field] ??= {};\n meas[field]['min'] = new Set([vgField({field, aggregate: 'min'}, {forAs: true})]);\n meas[field]['max'] = new Set([vgField({field, aggregate: 'max'}, {forAs: true})]);\n }\n }\n } else {\n addDimension(dims, channel, fieldDef, model);\n }\n });\n\n if (dims.size + keys(meas).length === 0) {\n return null;\n }\n\n return new AggregateNode(parent, dims, meas);\n }\n\n public static makeFromTransform(parent: DataFlowNode, t: AggregateTransform): AggregateNode {\n const dims = new Set<string>();\n const meas: Measures = {};\n\n for (const s of t.aggregate) {\n const {op, field, as} = s;\n if (op) {\n if (op === 'count') {\n meas['*'] ??= {};\n meas['*']['count'] = new Set([as ? as : vgField(s, {forAs: true})]);\n } else {\n meas[field] ??= {};\n meas[field][op] ??= new Set();\n meas[field][op].add(as ? as : vgField(s, {forAs: true}));\n }\n }\n }\n\n for (const s of t.groupby ?? []) {\n dims.add(s);\n }\n\n if (dims.size + keys(meas).length === 0) {\n return null;\n }\n\n return new AggregateNode(parent, dims, meas);\n }\n\n public merge(other: AggregateNode): boolean {\n if (setEqual(this.dimensions, other.dimensions)) {\n mergeMeasures(this.measures, other.measures);\n return true;\n }\n log.debug('different dimensions, cannot merge');\n return false;\n }\n\n public addDimensions(fields: readonly string[]) {\n fields.forEach(this.dimensions.add, this.dimensions);\n }\n\n public dependentFields() {\n return new Set([...this.dimensions, ...keys(this.measures)]);\n }\n\n public producedFields() {\n const out = new Set<string>();\n\n for (const field of keys(this.measures)) {\n for (const op of keys(this.measures[field])) {\n const m = this.measures[field][op];\n if (m.size === 0) {\n out.add(`${op}_${field}`);\n } else {\n m.forEach(out.add, out);\n }\n }\n }\n\n return out;\n }\n\n public hash() {\n return `Aggregate ${hash({dimensions: this.dimensions, measures: this.measures})}`;\n }\n\n public assemble(): VgAggregateTransform {\n const ops: AggregateOp[] = [];\n const fields: string[] = [];\n const as: string[] = [];\n\n for (const field of keys(this.measures)) {\n for (const op of keys(this.measures[field])) {\n for (const alias of this.measures[field][op]) {\n as.push(alias);\n ops.push(op);\n fields.push(field === '*' ? null : replacePathInField(field));\n }\n }\n }\n\n const result: VgAggregateTransform = {\n type: 'aggregate',\n groupby: [...this.dimensions].map(replacePathInField),\n ops,\n fields,\n as\n };\n\n return result;\n }\n}\n", "import type {AggregateOp} from 'vega';\nimport {isArray} from 'vega-util';\nimport {isBinning} from '../../bin';\nimport {COLUMN, FACET_CHANNELS, POSITION_SCALE_CHANNELS, ROW} from '../../channel';\nimport {vgField} from '../../channeldef';\nimport * as log from '../../log';\nimport {hasDiscreteDomain} from '../../scale';\nimport {DEFAULT_SORT_OP, EncodingSortField, isSortField} from '../../sort';\nimport {hash} from '../../util';\nimport {isVgRangeStep, VgData} from '../../vega.schema';\nimport {FacetModel} from '../facet';\nimport {HEADER_CHANNELS, HEADER_TYPES} from '../header/component';\nimport {Model} from '../model';\nimport {assembleDomain, getFieldFromDomain} from '../scale/domain';\nimport {sortArrayIndexField} from './calculate';\nimport {DataFlowNode} from './dataflow';\n\ninterface ChildIndependentFieldsWithStep {\n x?: string;\n y?: string;\n}\n\ninterface FacetChannelInfo {\n name: string;\n fields: string[];\n sortField?: EncodingSortField<string>;\n\n sortIndexField?: string;\n}\n\n/**\n * A node that helps us track what fields we are faceting by.\n */\nexport class FacetNode extends DataFlowNode {\n private readonly column: FacetChannelInfo;\n\n private readonly row: FacetChannelInfo;\n\n private readonly facet: FacetChannelInfo;\n\n private readonly childModel: Model;\n\n /**\n * @param model The facet model.\n * @param name The name that this facet source will have.\n * @param data The source data for this facet data.\n */\n public constructor(\n parent: DataFlowNode,\n public readonly model: FacetModel,\n public readonly name: string,\n public data: string\n ) {\n super(parent);\n\n for (const channel of FACET_CHANNELS) {\n const fieldDef = model.facet[channel];\n if (fieldDef) {\n const {bin, sort} = fieldDef;\n this[channel] = {\n name: model.getName(`${channel}_domain`),\n fields: [vgField(fieldDef), ...(isBinning(bin) ? [vgField(fieldDef, {binSuffix: 'end'})] : [])],\n ...(isSortField(sort)\n ? {sortField: sort}\n : isArray(sort)\n ? {sortIndexField: sortArrayIndexField(fieldDef, channel)}\n : {})\n };\n }\n }\n this.childModel = model.child;\n }\n\n public hash() {\n let out = `Facet`;\n\n for (const channel of FACET_CHANNELS) {\n if (this[channel]) {\n out += ` ${channel.charAt(0)}:${hash(this[channel])}`;\n }\n }\n\n return out;\n }\n\n get fields() {\n const f: string[] = [];\n\n for (const channel of FACET_CHANNELS) {\n if (this[channel]?.fields) {\n f.push(...this[channel].fields);\n }\n }\n return f;\n }\n\n public dependentFields() {\n const depFields = new Set<string>(this.fields);\n\n for (const channel of FACET_CHANNELS) {\n if (this[channel]) {\n if (this[channel].sortField) {\n depFields.add(this[channel].sortField.field);\n }\n if (this[channel].sortIndexField) {\n depFields.add(this[channel].sortIndexField);\n }\n }\n }\n\n return depFields;\n }\n\n public producedFields() {\n return new Set<string>(); // facet does not produce any new fields\n }\n\n /**\n * The name to reference this source is its name.\n */\n public getSource() {\n return this.name;\n }\n\n private getChildIndependentFieldsWithStep() {\n const childIndependentFieldsWithStep: ChildIndependentFieldsWithStep = {};\n\n for (const channel of POSITION_SCALE_CHANNELS) {\n const childScaleComponent = this.childModel.component.scales[channel];\n if (childScaleComponent && !childScaleComponent.merged) {\n // independent scale\n const type = childScaleComponent.get('type');\n const range = childScaleComponent.get('range');\n\n if (hasDiscreteDomain(type) && isVgRangeStep(range)) {\n const domain = assembleDomain(this.childModel, channel);\n const field = getFieldFromDomain(domain);\n if (field) {\n childIndependentFieldsWithStep[channel] = field;\n } else {\n log.warn(log.message.unknownField(channel));\n }\n }\n }\n }\n\n return childIndependentFieldsWithStep;\n }\n\n private assembleRowColumnHeaderData(\n channel: 'row' | 'column' | 'facet',\n crossedDataName: string,\n childIndependentFieldsWithStep: ChildIndependentFieldsWithStep\n ): VgData {\n const childChannel = ({row: 'y', column: 'x', facet: undefined} as const)[channel];\n\n const fields: string[] = [];\n const ops: AggregateOp[] = [];\n const as: string[] = [];\n\n if (childChannel && childIndependentFieldsWithStep && childIndependentFieldsWithStep[childChannel]) {\n if (crossedDataName) {\n // If there is a crossed data, calculate max\n fields.push(`distinct_${childIndependentFieldsWithStep[childChannel]}`);\n\n ops.push('max');\n } else {\n // If there is no crossed data, just calculate distinct\n fields.push(childIndependentFieldsWithStep[childChannel]);\n ops.push('distinct');\n }\n // Although it is technically a max, just name it distinct so it's easier to refer to it\n as.push(`distinct_${childIndependentFieldsWithStep[childChannel]}`);\n }\n\n const {sortField, sortIndexField} = this[channel];\n if (sortField) {\n const {op = DEFAULT_SORT_OP, field} = sortField;\n fields.push(field);\n ops.push(op);\n as.push(vgField(sortField, {forAs: true}));\n } else if (sortIndexField) {\n fields.push(sortIndexField);\n ops.push('max');\n as.push(sortIndexField);\n }\n\n return {\n name: this[channel].name,\n // Use data from the crossed one if it exist\n source: crossedDataName ?? this.data,\n transform: [\n {\n type: 'aggregate',\n groupby: this[channel].fields,\n ...(fields.length\n ? {\n fields,\n ops,\n as\n }\n : {})\n }\n ]\n };\n }\n\n private assembleFacetHeaderData(childIndependentFieldsWithStep: ChildIndependentFieldsWithStep) {\n const {columns} = this.model.layout;\n const {layoutHeaders} = this.model.component;\n const data: VgData[] = [];\n\n const hasSharedAxis: {row?: true; column?: true} = {};\n for (const headerChannel of HEADER_CHANNELS) {\n for (const headerType of HEADER_TYPES) {\n const headers = (layoutHeaders[headerChannel] && layoutHeaders[headerChannel][headerType]) ?? [];\n for (const header of headers) {\n if (header.axes?.length > 0) {\n hasSharedAxis[headerChannel] = true;\n break;\n }\n }\n }\n\n if (hasSharedAxis[headerChannel]) {\n const cardinality = `length(data(\"${this.facet.name}\"))`;\n\n const stop =\n headerChannel === 'row'\n ? columns\n ? {signal: `ceil(${cardinality} / ${columns})`}\n : 1\n : columns\n ? {signal: `min(${cardinality}, ${columns})`}\n : {signal: cardinality};\n\n data.push({\n name: `${this.facet.name}_${headerChannel}`,\n transform: [\n {\n type: 'sequence',\n start: 0,\n stop\n }\n ]\n });\n }\n }\n\n const {row, column} = hasSharedAxis;\n\n if (row || column) {\n data.unshift(this.assembleRowColumnHeaderData('facet', null, childIndependentFieldsWithStep));\n }\n\n return data;\n }\n\n public assemble() {\n const data: VgData[] = [];\n let crossedDataName = null;\n const childIndependentFieldsWithStep = this.getChildIndependentFieldsWithStep();\n\n const {column, row, facet} = this;\n\n if (column && row && (childIndependentFieldsWithStep.x || childIndependentFieldsWithStep.y)) {\n // Need to create a cross dataset to correctly calculate cardinality\n crossedDataName = `cross_${this.column.name}_${this.row.name}`;\n\n const fields: string[] = [].concat(\n childIndependentFieldsWithStep.x ?? [],\n childIndependentFieldsWithStep.y ?? []\n );\n const ops = fields.map((): AggregateOp => 'distinct');\n\n data.push({\n name: crossedDataName,\n source: this.data,\n transform: [\n {\n type: 'aggregate',\n groupby: this.fields,\n fields,\n ops\n }\n ]\n });\n }\n\n for (const channel of [COLUMN, ROW]) {\n if (this[channel]) {\n data.push(this.assembleRowColumnHeaderData(channel, crossedDataName, childIndependentFieldsWithStep));\n }\n }\n\n if (facet) {\n const facetData = this.assembleFacetHeaderData(childIndependentFieldsWithStep);\n if (facetData) {\n data.push(...facetData);\n }\n }\n\n return data;\n }\n}\n", "import {FormulaTransform as VgFormulaTransform, SignalRef} from 'vega';\nimport {isNumber, isString} from 'vega-util';\nimport {AncestorParse} from '.';\nimport {isMinMaxOp} from '../../aggregate';\nimport {getMainRangeChannel, SingleDefChannel} from '../../channel';\nimport {\n isFieldDef,\n isFieldOrDatumDefForTimeFormat,\n isScaleFieldDef,\n isTypedFieldDef,\n TypedFieldDef\n} from '../../channeldef';\nimport {isGenerator, Parse} from '../../data';\nimport {DateTime, isDateTime} from '../../datetime';\nimport * as log from '../../log';\nimport {forEachLeaf} from '../../logical';\nimport {isPathMark} from '../../mark';\nimport {\n isFieldEqualPredicate,\n isFieldGTEPredicate,\n isFieldGTPredicate,\n isFieldLTEPredicate,\n isFieldLTPredicate,\n isFieldOneOfPredicate,\n isFieldPredicate,\n isFieldRangePredicate\n} from '../../predicate';\nimport {isSortField} from '../../sort';\nimport {FilterTransform} from '../../transform';\nimport {accessPathDepth, accessPathWithDatum, Dict, duplicate, hash, keys, removePathFromField} from '../../util';\nimport {signalRefOrValue} from '../common';\nimport {isFacetModel, isUnitModel, Model} from '../model';\nimport {Split} from '../split';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * Remove quotes from a string.\n */\nfunction unquote(pattern: string) {\n if ((pattern.startsWith(\"'\") && pattern.endsWith(\"'\")) || (pattern.startsWith('\"') && pattern.endsWith('\"'))) {\n return pattern.slice(1, -1);\n }\n return pattern;\n}\n\n/**\n * @param field The field.\n * @param parse What to parse the field as.\n */\nfunction parseExpression(field: string, parse: string): string {\n const f = accessPathWithDatum(field);\n if (parse === 'number') {\n return `toNumber(${f})`;\n } else if (parse === 'boolean') {\n return `toBoolean(${f})`;\n } else if (parse === 'string') {\n return `toString(${f})`;\n } else if (parse === 'date') {\n return `toDate(${f})`;\n } else if (parse === 'flatten') {\n return f;\n } else if (parse.startsWith('date:')) {\n const specifier = unquote(parse.slice(5, parse.length));\n return `timeParse(${f},'${specifier}')`;\n } else if (parse.startsWith('utc:')) {\n const specifier = unquote(parse.slice(4, parse.length));\n return `utcParse(${f},'${specifier}')`;\n } else {\n log.warn(log.message.unrecognizedParse(parse));\n return null;\n }\n}\n\nexport function getImplicitFromFilterTransform(transform: FilterTransform) {\n const implicit: Dict<string> = {};\n forEachLeaf(transform.filter, filter => {\n if (isFieldPredicate(filter)) {\n // Automatically add a parse node for filters with filter objects\n let val: string | number | boolean | DateTime | SignalRef = null;\n\n // For EqualFilter, just use the equal property.\n // For RangeFilter and OneOfFilter, all array members should have\n // the same type, so we only use the first one.\n if (isFieldEqualPredicate(filter)) {\n val = signalRefOrValue(filter.equal);\n } else if (isFieldLTEPredicate(filter)) {\n val = signalRefOrValue(filter.lte);\n } else if (isFieldLTPredicate(filter)) {\n val = signalRefOrValue(filter.lt);\n } else if (isFieldGTPredicate(filter)) {\n val = signalRefOrValue(filter.gt);\n } else if (isFieldGTEPredicate(filter)) {\n val = signalRefOrValue(filter.gte);\n } else if (isFieldRangePredicate(filter)) {\n // FIXME: remove as any\n val = (filter as any).range[0];\n } else if (isFieldOneOfPredicate(filter)) {\n val = (filter.oneOf ?? (filter as any).in)[0];\n } // else -- for filter expression, we can't infer anything\n\n if (val) {\n if (isDateTime(val)) {\n implicit[filter.field] = 'date';\n } else if (isNumber(val)) {\n implicit[filter.field] = 'number';\n } else if (isString(val)) {\n implicit[filter.field] = 'string';\n }\n }\n\n if (filter.timeUnit) {\n implicit[filter.field] = 'date';\n }\n }\n });\n\n return implicit;\n}\n\n/**\n * Creates a parse node for implicit parsing from a model and updates ancestorParse.\n */\nexport function getImplicitFromEncoding(model: Model) {\n const implicit: Dict<string> = {};\n\n function add(fieldDef: TypedFieldDef<string>) {\n if (isFieldOrDatumDefForTimeFormat(fieldDef)) {\n implicit[fieldDef.field] = 'date';\n } else if (\n fieldDef.type === 'quantitative' &&\n isMinMaxOp(fieldDef.aggregate) // we need to parse numbers to support correct min and max\n ) {\n implicit[fieldDef.field] = 'number';\n } else if (accessPathDepth(fieldDef.field) > 1) {\n // For non-date/non-number (strings and booleans), derive a flattened field for a referenced nested field.\n // (Parsing numbers / dates already flattens numeric and temporal fields.)\n if (!(fieldDef.field in implicit)) {\n implicit[fieldDef.field] = 'flatten';\n }\n } else if (isScaleFieldDef(fieldDef) && isSortField(fieldDef.sort) && accessPathDepth(fieldDef.sort.field) > 1) {\n // Flatten fields that we sort by but that are not otherwise flattened.\n if (!(fieldDef.sort.field in implicit)) {\n implicit[fieldDef.sort.field] = 'flatten';\n }\n }\n }\n\n if (isUnitModel(model) || isFacetModel(model)) {\n // Parse encoded fields\n model.forEachFieldDef((fieldDef, channel) => {\n if (isTypedFieldDef(fieldDef)) {\n add(fieldDef);\n } else {\n const mainChannel = getMainRangeChannel(channel);\n const mainFieldDef = model.fieldDef(mainChannel as SingleDefChannel) as TypedFieldDef<string>;\n add({\n ...fieldDef,\n type: mainFieldDef.type\n });\n }\n });\n }\n\n // Parse quantitative dimension fields of path marks as numbers so that we sort them correctly.\n if (isUnitModel(model)) {\n const {mark, markDef, encoding} = model;\n if (\n isPathMark(mark) &&\n // No need to sort by dimension if we have a connected scatterplot (order channel is present)\n !model.encoding.order\n ) {\n const dimensionChannel = markDef.orient === 'horizontal' ? 'y' : 'x';\n const dimensionChannelDef = encoding[dimensionChannel];\n if (\n isFieldDef(dimensionChannelDef) &&\n dimensionChannelDef.type === 'quantitative' &&\n !(dimensionChannelDef.field in implicit)\n ) {\n implicit[dimensionChannelDef.field] = 'number';\n }\n }\n }\n\n return implicit;\n}\n\n/**\n * Creates a parse node for implicit parsing from a model and updates ancestorParse.\n */\nexport function getImplicitFromSelection(model: Model) {\n const implicit: Dict<string> = {};\n\n if (isUnitModel(model) && model.component.selection) {\n for (const name of keys(model.component.selection)) {\n const selCmpt = model.component.selection[name];\n for (const proj of selCmpt.project.items) {\n if (!proj.channel && accessPathDepth(proj.field) > 1) {\n implicit[proj.field] = 'flatten';\n }\n }\n }\n }\n\n return implicit;\n}\n\nexport class ParseNode extends DataFlowNode {\n private _parse: Parse;\n\n public clone() {\n return new ParseNode(null, duplicate(this._parse));\n }\n\n constructor(parent: DataFlowNode, parse: Parse) {\n super(parent);\n\n this._parse = parse;\n }\n\n public hash() {\n return `Parse ${hash(this._parse)}`;\n }\n\n /**\n * Creates a parse node from a data.format.parse and updates ancestorParse.\n */\n public static makeExplicit(parent: DataFlowNode, model: Model, ancestorParse: AncestorParse) {\n // Custom parse\n let explicit = {};\n const data = model.data;\n if (!isGenerator(data) && data?.format?.parse) {\n explicit = data.format.parse;\n }\n\n return this.makeWithAncestors(parent, explicit, {}, ancestorParse);\n }\n\n /**\n * Creates a parse node from \"explicit\" parse and \"implicit\" parse and updates ancestorParse.\n */\n public static makeWithAncestors(\n parent: DataFlowNode,\n explicit: Parse,\n implicit: Parse,\n ancestorParse: AncestorParse\n ) {\n // We should not parse what has already been parsed in a parent (explicitly or implicitly) or what has been derived (maked as \"derived\"). We also don't need to flatten a field that has already been parsed.\n for (const field of keys(implicit)) {\n const parsedAs = ancestorParse.getWithExplicit(field);\n if (parsedAs.value !== undefined) {\n // We always ignore derived fields even if they are implicitly defined because we expect users to create the right types.\n if (\n parsedAs.explicit ||\n parsedAs.value === implicit[field] ||\n parsedAs.value === 'derived' ||\n implicit[field] === 'flatten'\n ) {\n delete implicit[field];\n } else {\n log.warn(log.message.differentParse(field, implicit[field], parsedAs.value));\n }\n }\n }\n\n for (const field of keys(explicit)) {\n const parsedAs = ancestorParse.get(field);\n if (parsedAs !== undefined) {\n // Don't parse a field again if it has been parsed with the same type already.\n if (parsedAs === explicit[field]) {\n delete explicit[field];\n } else {\n log.warn(log.message.differentParse(field, explicit[field], parsedAs));\n }\n }\n }\n\n const parse = new Split(explicit, implicit);\n\n // add the format parse from this model so that children don't parse the same field again\n ancestorParse.copyAll(parse);\n\n // copy only non-null parses\n const p: Dict<string> = {};\n for (const key of keys(parse.combine())) {\n const val = parse.get(key);\n if (val !== null) {\n p[key] = val;\n }\n }\n\n if (keys(p).length === 0 || ancestorParse.parseNothing) {\n return null;\n }\n\n return new ParseNode(parent, p);\n }\n\n public get parse() {\n return this._parse;\n }\n\n public merge(other: ParseNode) {\n this._parse = {...this._parse, ...other.parse};\n other.remove();\n }\n\n /**\n * Assemble an object for Vega's format.parse property.\n */\n public assembleFormatParse() {\n const formatParse: Dict<string> = {};\n for (const field of keys(this._parse)) {\n const p = this._parse[field];\n if (accessPathDepth(field) === 1) {\n formatParse[field] = p;\n }\n }\n return formatParse;\n }\n\n // format parse depends and produces all fields in its parse\n public producedFields() {\n return new Set(keys(this._parse));\n }\n\n public dependentFields() {\n return new Set(keys(this._parse));\n }\n\n public assembleTransforms(onlyNested = false): VgFormulaTransform[] {\n return keys(this._parse)\n .filter(field => (onlyNested ? accessPathDepth(field) > 1 : true))\n .map(field => {\n const expr = parseExpression(field, this._parse[field]);\n if (!expr) {\n return null;\n }\n\n const formula: VgFormulaTransform = {\n type: 'formula',\n expr,\n as: removePathFromField(field) // Vega output is always flattened\n };\n return formula;\n })\n .filter(t => t !== null);\n }\n}\n", "import {SELECTION_ID} from '../../selection';\nimport {IdentifierTransform as VgIdentifierTransform} from 'vega';\nimport {DataFlowNode} from './dataflow';\n\nexport class IdentifierNode extends DataFlowNode {\n public clone() {\n return new IdentifierNode(null);\n }\n\n constructor(parent: DataFlowNode) {\n super(parent);\n }\n\n public dependentFields() {\n return new Set<string>();\n }\n\n public producedFields() {\n return new Set([SELECTION_ID]);\n }\n\n public hash() {\n return 'Identifier';\n }\n\n public assemble(): VgIdentifierTransform {\n return {type: 'identifier', as: SELECTION_ID};\n }\n}\n", "import {GraticuleTransform as VgGraticuleTransform} from 'vega';\nimport {GraticuleParams} from '../../data';\nimport {hash} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\nexport class GraticuleNode extends DataFlowNode {\n public clone() {\n return new GraticuleNode(null, this.params);\n }\n\n constructor(\n parent: DataFlowNode,\n private params: true | GraticuleParams\n ) {\n super(parent);\n }\n\n public dependentFields() {\n return new Set<string>();\n }\n\n public producedFields(): undefined {\n return undefined; // there should never be a node before graticule\n }\n\n public hash() {\n return `Graticule ${hash(this.params)}`;\n }\n\n public assemble(): VgGraticuleTransform {\n return {\n type: 'graticule',\n ...(this.params === true ? {} : this.params)\n };\n }\n}\n", "import {SequenceParams} from '../../data';\nimport {hash} from '../../util';\nimport {SequenceTransform as VgSequenceTransform} from 'vega';\nimport {DataFlowNode} from './dataflow';\n\nexport class SequenceNode extends DataFlowNode {\n public clone() {\n return new SequenceNode(null, this.params);\n }\n\n constructor(\n parent: DataFlowNode,\n private params: SequenceParams\n ) {\n super(parent);\n }\n\n public dependentFields() {\n return new Set<string>();\n }\n\n public producedFields() {\n return new Set([this.params.as ?? 'data']);\n }\n\n public hash() {\n return `Hash ${hash(this.params)}`;\n }\n\n public assemble(): VgSequenceTransform {\n return {\n type: 'sequence',\n ...this.params\n };\n }\n}\n", "import {\n Data,\n DataFormat,\n DataFormatType,\n isGenerator,\n isInlineData,\n isNamedData,\n isSphereGenerator,\n isUrlData\n} from '../../data';\nimport {contains, isEmpty, omit} from '../../util';\nimport {VgData} from '../../vega.schema';\nimport {DataFlowNode} from './dataflow';\n\nexport class SourceNode extends DataFlowNode {\n private _data: Partial<VgData>;\n\n private _name: string;\n\n private _generator: boolean;\n\n constructor(data: Data) {\n super(null); // source cannot have parent\n\n data ??= {name: 'source'};\n let format;\n\n if (!isGenerator(data)) {\n format = data.format ? {...omit(data.format, ['parse'])} : ({} as DataFormat);\n }\n\n if (isInlineData(data)) {\n this._data = {values: data.values};\n } else if (isUrlData(data)) {\n this._data = {url: data.url};\n\n if (!format.type) {\n // Extract extension from URL using snippet from\n // http://stackoverflow.com/questions/680929/how-to-extract-extension-from-filename-string-in-javascript\n let defaultExtension = /(?:\\.([^.]+))?$/.exec(data.url)[1];\n if (!contains(['json', 'csv', 'tsv', 'dsv', 'topojson'], defaultExtension)) {\n defaultExtension = 'json';\n }\n\n // defaultExtension has type string but we ensure that it is DataFormatType above\n format.type = defaultExtension as DataFormatType;\n }\n } else if (isSphereGenerator(data)) {\n // hardwire GeoJSON sphere data into output specification\n this._data = {values: [{type: 'Sphere'}]};\n } else if (isNamedData(data) || isGenerator(data)) {\n this._data = {};\n }\n\n // set flag to check if generator\n this._generator = isGenerator(data);\n\n // any dataset can be named\n if (data.name) {\n this._name = data.name;\n }\n\n if (format && !isEmpty(format)) {\n this._data.format = format;\n }\n }\n\n public dependentFields() {\n return new Set<string>();\n }\n\n public producedFields(): undefined {\n return undefined; // we don't know what this source produces\n }\n\n get data() {\n return this._data;\n }\n\n public hasName(): boolean {\n return !!this._name;\n }\n\n get isGenerator() {\n return this._generator;\n }\n\n get dataName() {\n return this._name;\n }\n\n set dataName(name: string) {\n this._name = name;\n }\n\n set parent(parent: DataFlowNode) {\n throw new Error('Source nodes have to be roots.');\n }\n\n public remove() {\n throw new Error('Source nodes are roots and cannot be removed.');\n }\n\n public hash(): string | number {\n throw new Error('Cannot hash sources');\n }\n\n public assemble(): VgData {\n return {\n name: this._name,\n ...this._data,\n transform: []\n };\n }\n}\n", "import {DataFlowNode} from './dataflow';\nimport {GraticuleNode} from './graticule';\nimport {SequenceNode} from './sequence';\nimport {SourceNode} from './source';\n\n/**\n * Whether this dataflow node is the source of the dataflow that produces data i.e. a source or a generator.\n */\nexport function isDataSourceNode(node: DataFlowNode) {\n return node instanceof SourceNode || node instanceof GraticuleNode || node instanceof SequenceNode;\n}\n\n/**\n * Abstract base class for Dataflow optimizers.\n * Contains only mutation handling logic. Subclasses need to implement iteration logic.\n */\nexport abstract class Optimizer {\n #modified: boolean;\n\n constructor() {\n this.#modified = false;\n }\n\n // Once true, #modified is never set to false\n public setModified() {\n this.#modified = true;\n }\n\n get modifiedFlag() {\n return this.#modified;\n }\n\n /**\n * Run the optimization for the tree with the provided root.\n */\n public abstract optimize(root: DataFlowNode): boolean;\n}\n\n/**\n * Starts from a node and runs the optimization function (the \"run\" method) upwards to the root,\n * depending on the continue and modified flag values returned by the optimization function.\n */\nexport abstract class BottomUpOptimizer extends Optimizer {\n /**\n * Run the optimizer at the node. This method should not change the parent of the passed in node (it should only affect children).\n */\n public abstract run(node: DataFlowNode): void;\n\n /**\n * Compute a map of node depths that we can use to determine a topological sort order.\n */\n private getNodeDepths(\n node: DataFlowNode,\n depth: number,\n depths: Map<DataFlowNode, number>\n ): Map<DataFlowNode, number> {\n depths.set(node, depth);\n\n for (const child of node.children) {\n this.getNodeDepths(child, depth + 1, depths);\n }\n\n return depths;\n }\n\n /**\n * Run the optimizer on all nodes starting from the leaves.\n */\n public optimize(node: DataFlowNode): boolean {\n const depths = this.getNodeDepths(node, 0, new Map());\n const topologicalSort = [...depths.entries()].sort((a, b) => b[1] - a[1]);\n\n for (const tuple of topologicalSort) {\n this.run(tuple[0]);\n }\n\n return this.modifiedFlag;\n }\n}\n\n/**\n * The optimizer function (the \"run\" method), is invoked on the given node and then continues recursively.\n */\nexport abstract class TopDownOptimizer extends Optimizer {\n /**\n * Run the optimizer at the node.\n */\n public abstract run(node: DataFlowNode): void;\n\n /**\n * Run the optimizer depth first on all nodes starting from the roots.\n */\n public optimize(node: DataFlowNode): boolean {\n this.run(node);\n\n for (const child of node.children) {\n this.optimize(child);\n }\n\n return this.modifiedFlag;\n }\n}\n", "import {Parse} from '../../data';\nimport {Dict, fieldIntersection, hash, hasIntersection, isEmpty, keys, some} from '../../util';\nimport {Model} from '../model';\nimport {requiresSelectionId} from '../selection';\nimport {AggregateNode} from './aggregate';\nimport {BinNode} from './bin';\nimport {DataFlowNode, OutputNode} from './dataflow';\nimport {FacetNode} from './facet';\nimport {FilterNode} from './filter';\nimport {ParseNode} from './formatparse';\nimport {IdentifierNode} from './identifier';\nimport {BottomUpOptimizer, isDataSourceNode, Optimizer, TopDownOptimizer} from './optimizer';\nimport {SourceNode} from './source';\nimport {TimeUnitNode} from './timeunit';\n\n/**\n * Merge identical nodes at forks by comparing hashes.\n *\n * Does not need to iterate from leaves so we implement this with recursion as it's a bit simpler.\n */\nexport class MergeIdenticalNodes extends TopDownOptimizer {\n public mergeNodes(parent: DataFlowNode, nodes: DataFlowNode[]) {\n const mergedNode = nodes.shift();\n for (const node of nodes) {\n parent.removeChild(node);\n node.parent = mergedNode;\n node.remove();\n }\n }\n\n public run(node: DataFlowNode) {\n const hashes = node.children.map(x => x.hash());\n const buckets: Record<string | number, DataFlowNode[]> = {};\n\n for (let i = 0; i < hashes.length; i++) {\n if (buckets[hashes[i]] === undefined) {\n buckets[hashes[i]] = [node.children[i]];\n } else {\n buckets[hashes[i]].push(node.children[i]);\n }\n }\n\n for (const k of keys(buckets)) {\n if (buckets[k].length > 1) {\n this.setModified();\n this.mergeNodes(node, buckets[k]);\n }\n }\n }\n}\n\n/**\n * Optimizer that removes identifier nodes that are not needed for selections.\n */\nexport class RemoveUnnecessaryIdentifierNodes extends TopDownOptimizer {\n private requiresSelectionId: boolean;\n\n constructor(model: Model) {\n super();\n this.requiresSelectionId = model && requiresSelectionId(model);\n }\n\n public run(node: DataFlowNode) {\n if (node instanceof IdentifierNode) {\n // Only preserve IdentifierNodes if we have default discrete selections\n // in our model tree, and if the nodes come after tuple producing nodes.\n if (\n !(\n this.requiresSelectionId &&\n (isDataSourceNode(node.parent) || node.parent instanceof AggregateNode || node.parent instanceof ParseNode)\n )\n ) {\n this.setModified();\n node.remove();\n }\n }\n }\n}\n\n/**\n * Removes duplicate time unit nodes (as determined by the name of the output field) that may be generated due to\n * selections projected over time units. Only keeps the first time unit in any branch.\n *\n * This optimizer is a custom top down optimizer that keep track of produced fields in a branch.\n */\nexport class RemoveDuplicateTimeUnits extends Optimizer {\n public optimize(node: DataFlowNode): boolean {\n this.run(node, new Set());\n\n return this.modifiedFlag;\n }\n\n public run(node: DataFlowNode, timeUnitFields: Set<string>) {\n let producedFields = new Set<string>();\n\n if (node instanceof TimeUnitNode) {\n producedFields = node.producedFields();\n if (hasIntersection(producedFields, timeUnitFields)) {\n this.setModified();\n node.removeFormulas(timeUnitFields);\n if (node.producedFields.length === 0) {\n node.remove();\n }\n }\n }\n\n for (const child of node.children) {\n this.run(child, new Set([...timeUnitFields, ...producedFields]));\n }\n }\n}\n\n/**\n * Remove output nodes that are not required.\n */\nexport class RemoveUnnecessaryOutputNodes extends TopDownOptimizer {\n constructor() {\n super();\n }\n\n public run(node: DataFlowNode) {\n if (node instanceof OutputNode && !node.isRequired()) {\n this.setModified();\n node.remove();\n }\n }\n}\n\n/**\n * Move parse nodes up to forks and merges them if possible.\n */\nexport class MoveParseUp extends BottomUpOptimizer {\n public run(node: DataFlowNode) {\n if (isDataSourceNode(node)) {\n return;\n }\n\n if (node.numChildren() > 1) {\n // Don't move parse further up but continue with parent.\n return;\n }\n\n for (const child of node.children) {\n if (child instanceof ParseNode) {\n if (node instanceof ParseNode) {\n this.setModified();\n node.merge(child);\n } else {\n // Don't swap with nodes that produce something that the parse node depends on (e.g. lookup).\n if (fieldIntersection(node.producedFields(), child.dependentFields())) {\n continue;\n }\n this.setModified();\n child.swapWithParent();\n }\n }\n }\n\n return;\n }\n}\n\n/**\n * Inserts an intermediate ParseNode containing all non-conflicting parse fields and removes the empty ParseNodes.\n *\n * We assume that dependent paths that do not have a parse node can be just merged.\n */\nexport class MergeParse extends BottomUpOptimizer {\n public run(node: DataFlowNode) {\n const originalChildren = [...node.children];\n const parseChildren = node.children.filter((child): child is ParseNode => child instanceof ParseNode);\n\n if (node.numChildren() > 1 && parseChildren.length >= 1) {\n const commonParse: Parse = {};\n const conflictingParse = new Set<string>();\n for (const parseNode of parseChildren) {\n const parse = parseNode.parse;\n for (const k of keys(parse)) {\n if (!(k in commonParse)) {\n commonParse[k] = parse[k];\n } else if (commonParse[k] !== parse[k]) {\n conflictingParse.add(k);\n }\n }\n }\n\n for (const field of conflictingParse) {\n delete commonParse[field];\n }\n\n if (!isEmpty(commonParse)) {\n this.setModified();\n const mergedParseNode = new ParseNode(node, commonParse);\n for (const childNode of originalChildren) {\n if (childNode instanceof ParseNode) {\n for (const key of keys(commonParse)) {\n delete childNode.parse[key];\n }\n }\n\n node.removeChild(childNode);\n childNode.parent = mergedParseNode;\n\n // remove empty parse nodes\n if (childNode instanceof ParseNode && keys(childNode.parse).length === 0) {\n childNode.remove();\n }\n }\n }\n }\n }\n}\n\n/**\n * Repeatedly remove leaf nodes that are not output or facet nodes.\n * The reason is that we don't need subtrees that don't have any output nodes.\n * Facet nodes are needed for the row or column domains.\n */\nexport class RemoveUnusedSubtrees extends BottomUpOptimizer {\n public run(node: DataFlowNode) {\n if (node instanceof OutputNode || node.numChildren() > 0 || node instanceof FacetNode) {\n // no need to continue with parent because it is output node or will have children (there was a fork)\n } else if (node instanceof SourceNode) {\n // ignore empty unused sources as they will be removed in optimizationDataflowHelper\n } else {\n this.setModified();\n node.remove();\n }\n }\n}\n\n/**\n * Merge adjacent time unit nodes.\n */\nexport class MergeTimeUnits extends BottomUpOptimizer {\n public run(node: DataFlowNode) {\n const timeUnitChildren = node.children.filter((x): x is TimeUnitNode => x instanceof TimeUnitNode);\n const combination = timeUnitChildren.pop();\n for (const timeUnit of timeUnitChildren) {\n this.setModified();\n combination.merge(timeUnit);\n }\n }\n}\n\nexport class MergeAggregates extends BottomUpOptimizer {\n public run(node: DataFlowNode) {\n const aggChildren = node.children.filter((child): child is AggregateNode => child instanceof AggregateNode);\n\n // Object which we'll use to map the fields which an aggregate is grouped by to\n // the set of aggregates with that grouping. This is useful as only aggregates\n // with the same group by can be merged\n const groupedAggregates: Dict<AggregateNode[]> = {};\n\n // Build groupedAggregates\n for (const agg of aggChildren) {\n const groupBys = hash(agg.groupBy);\n if (!(groupBys in groupedAggregates)) {\n groupedAggregates[groupBys] = [];\n }\n groupedAggregates[groupBys].push(agg);\n }\n\n // Merge aggregateNodes with same key in groupedAggregates\n for (const group of keys(groupedAggregates)) {\n const mergeableAggs = groupedAggregates[group];\n if (mergeableAggs.length > 1) {\n const mergedAggs = mergeableAggs.pop();\n for (const agg of mergeableAggs) {\n if (mergedAggs.merge(agg)) {\n node.removeChild(agg);\n agg.parent = mergedAggs;\n agg.remove();\n\n this.setModified();\n }\n }\n }\n }\n }\n}\n\n/**\n * Merge bin nodes and move them up through forks. Stop at filters, parse, identifier as we want them to stay before the bin node.\n */\nexport class MergeBins extends BottomUpOptimizer {\n constructor(private model: Model) {\n super();\n }\n\n public run(node: DataFlowNode) {\n const moveBinsUp = !(\n isDataSourceNode(node) ||\n node instanceof FilterNode ||\n node instanceof ParseNode ||\n node instanceof IdentifierNode\n );\n\n const promotableBins: BinNode[] = [];\n const remainingBins: BinNode[] = [];\n\n for (const child of node.children) {\n if (child instanceof BinNode) {\n if (moveBinsUp && !fieldIntersection(node.producedFields(), child.dependentFields())) {\n promotableBins.push(child);\n } else {\n remainingBins.push(child);\n }\n }\n }\n\n if (promotableBins.length > 0) {\n const promotedBin = promotableBins.pop();\n for (const bin of promotableBins) {\n promotedBin.merge(bin, this.model.renameSignal.bind(this.model));\n }\n this.setModified();\n if (node instanceof BinNode) {\n node.merge(promotedBin, this.model.renameSignal.bind(this.model));\n } else {\n promotedBin.swapWithParent();\n }\n }\n if (remainingBins.length > 1) {\n const remainingBin = remainingBins.pop();\n for (const bin of remainingBins) {\n remainingBin.merge(bin, this.model.renameSignal.bind(this.model));\n }\n this.setModified();\n }\n }\n}\n\n/**\n * This optimizer takes output nodes that are at a fork and moves them before the fork.\n *\n * The algorithm iterates over the children and tries to find the last output node in a chain of output nodes.\n * It then moves all output nodes before that main output node. All other children (and the children of the output nodes)\n * are inserted after the main output node.\n */\nexport class MergeOutputs extends BottomUpOptimizer {\n public run(node: DataFlowNode) {\n const children = [...node.children];\n const hasOutputChild = some(children, child => child instanceof OutputNode);\n\n if (!hasOutputChild || node.numChildren() <= 1) {\n return;\n }\n\n const otherChildren: DataFlowNode[] = [];\n\n // The output node we will connect all other nodes to.\n // Output nodes will be added before the new node, other nodes after.\n let mainOutput: OutputNode;\n\n for (const child of children) {\n if (child instanceof OutputNode) {\n let lastOutput = child;\n\n while (lastOutput.numChildren() === 1) {\n const [theChild] = lastOutput.children;\n if (theChild instanceof OutputNode) {\n lastOutput = theChild;\n } else {\n break;\n }\n }\n\n otherChildren.push(...lastOutput.children);\n\n if (mainOutput) {\n // Move the output nodes before the mainOutput. We do this by setting\n // the parent of the first not to the parent of the main output and\n // the main output's parent to the last output.\n\n // note: the child is the first output\n node.removeChild(child);\n child.parent = mainOutput.parent;\n\n mainOutput.parent.removeChild(mainOutput);\n mainOutput.parent = lastOutput;\n\n this.setModified();\n } else {\n mainOutput = lastOutput;\n }\n } else {\n otherChildren.push(child);\n }\n }\n\n if (otherChildren.length) {\n this.setModified();\n for (const child of otherChildren) {\n child.parent.removeChild(child);\n child.parent = mainOutput;\n }\n }\n }\n}\n", "import {AggregateOp} from 'vega';\nimport {vgField} from '../../channeldef';\nimport {JoinAggregateTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {VgJoinAggregateTransform} from '../../vega.schema';\nimport {JoinAggregateFieldDef} from '../../transform';\nimport {unique} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for the join aggregate transform nodes.\n */\nexport class JoinAggregateTransformNode extends DataFlowNode {\n public clone() {\n return new JoinAggregateTransformNode(null, duplicate(this.transform));\n }\n\n constructor(\n parent: DataFlowNode,\n private readonly transform: JoinAggregateTransform\n ) {\n super(parent);\n }\n\n public addDimensions(fields: string[]) {\n this.transform.groupby = unique(this.transform.groupby.concat(fields), d => d);\n }\n\n public dependentFields() {\n const out = new Set<string>();\n\n if (this.transform.groupby) {\n this.transform.groupby.forEach(out.add, out);\n }\n this.transform.joinaggregate\n .map(w => w.field)\n .filter(f => f !== undefined)\n .forEach(out.add, out);\n\n return out;\n }\n\n public producedFields() {\n return new Set(this.transform.joinaggregate.map(this.getDefaultName));\n }\n\n private getDefaultName(joinAggregateFieldDef: JoinAggregateFieldDef): string {\n return joinAggregateFieldDef.as ?? vgField(joinAggregateFieldDef);\n }\n\n public hash() {\n return `JoinAggregateTransform ${hash(this.transform)}`;\n }\n\n public assemble(): VgJoinAggregateTransform {\n const fields: string[] = [];\n const ops: AggregateOp[] = [];\n const as: string[] = [];\n for (const joinaggregate of this.transform.joinaggregate) {\n ops.push(joinaggregate.op);\n as.push(this.getDefaultName(joinaggregate));\n fields.push(joinaggregate.field === undefined ? null : joinaggregate.field);\n }\n\n const groupby = this.transform.groupby;\n\n return {\n type: 'joinaggregate',\n as,\n ops,\n fields,\n ...(groupby !== undefined ? {groupby} : {})\n };\n }\n}\n", "import type {FilterTransform as VgFilterTransform} from 'vega';\nimport {isScaleChannel} from '../../channel';\nimport {TypedFieldDef, vgField as fieldRef} from '../../channeldef';\nimport {Dict, hash, keys} from '../../util';\nimport {getScaleInvalidDataMode} from '../invalid/ScaleInvalidDataMode';\nimport {DataSourcesForHandlingInvalidValues} from '../invalid/datasources';\nimport {UnitModel} from '../unit';\nimport {DataFlowNode} from './dataflow';\nimport {isCountingAggregateOp} from '../../aggregate';\n\nexport class FilterInvalidNode extends DataFlowNode {\n public clone() {\n return new FilterInvalidNode(null, {...this.filter});\n }\n\n constructor(\n parent: DataFlowNode,\n public readonly filter: Dict<TypedFieldDef<string>>\n ) {\n super(parent);\n }\n\n public static make(\n parent: DataFlowNode,\n model: UnitModel,\n dataSourcesForHandlingInvalidValues: DataSourcesForHandlingInvalidValues\n ): FilterInvalidNode {\n const {config, markDef} = model;\n\n const {marks, scales} = dataSourcesForHandlingInvalidValues;\n if (marks === 'include-invalid-values' && scales === 'include-invalid-values') {\n // If neither marks nor scale domains need data source to filter null values, then don't add the filter.\n return null;\n }\n\n const filter = model.reduceFieldDef(\n (aggregator: Dict<TypedFieldDef<string>>, fieldDef, channel) => {\n const scaleComponent = isScaleChannel(channel) && model.getScaleComponent(channel);\n\n if (scaleComponent) {\n const scaleType = scaleComponent.get('type');\n const {aggregate} = fieldDef;\n const invalidDataMode = getScaleInvalidDataMode({\n scaleChannel: channel,\n markDef,\n config,\n scaleType,\n isCountAggregate: isCountingAggregateOp(aggregate)\n });\n\n // If the invalid data mode is include or always-valid, we don't need to filter invalid values as the scale can handle invalid values.\n if (invalidDataMode !== 'show' && invalidDataMode !== 'always-valid') {\n aggregator[fieldDef.field] = fieldDef as any; // we know that the fieldDef is a typed field def\n }\n }\n\n return aggregator;\n },\n {} as Dict<TypedFieldDef<string>>\n );\n\n if (!keys(filter).length) {\n return null;\n }\n\n return new FilterInvalidNode(parent, filter);\n }\n\n public dependentFields() {\n return new Set(keys(this.filter));\n }\n\n public producedFields() {\n return new Set<string>(); // filter does not produce any new fields\n }\n\n public hash() {\n return `FilterInvalid ${hash(this.filter)}`;\n }\n\n /**\n * Create the VgTransforms for each of the filtered fields.\n */\n public assemble(): VgFilterTransform {\n const filters = keys(this.filter).reduce((vegaFilters, field) => {\n const fieldDef = this.filter[field];\n const ref = fieldRef(fieldDef, {expr: 'datum'});\n\n if (fieldDef !== null) {\n if (fieldDef.type === 'temporal') {\n vegaFilters.push(`(isDate(${ref}) || (${isValidFiniteNumberExpr(ref)}))`);\n } else if (fieldDef.type === 'quantitative') {\n vegaFilters.push(isValidFiniteNumberExpr(ref));\n } else {\n // should never get here\n }\n }\n return vegaFilters;\n }, [] as string[]);\n\n return filters.length > 0\n ? {\n type: 'filter',\n expr: filters.join(' && ')\n }\n : null;\n }\n}\n\nexport function isValidFiniteNumberExpr(ref: string) {\n return `isValid(${ref}) && isFinite(+${ref})`;\n}\n", "import {Transforms as VgTransform} from 'vega';\nimport {isArray, isString} from 'vega-util';\nimport {FieldDef, FieldName, getFieldDef, isFieldDef, isOrderOnlyDef, vgField} from '../../channeldef';\nimport {SortFields, SortOrder} from '../../sort';\nimport {StackOffset} from '../../stack';\nimport {StackTransform} from '../../transform';\nimport {duplicate, getFirstDefined, hash} from '../../util';\nimport {sortParams} from '../common';\nimport {UnitModel} from '../unit';\nimport {DataFlowNode} from './dataflow';\nimport {isValidFiniteNumberExpr} from './filterinvalid';\n\nfunction getStackByFields(model: UnitModel): string[] {\n return model.stack.stackBy.reduce((fields, by) => {\n const fieldDef = by.fieldDef;\n\n const _field = vgField(fieldDef);\n if (_field) {\n fields.push(_field);\n }\n return fields;\n }, [] as string[]);\n}\n\nexport interface StackComponent {\n /**\n * Faceted field.\n */\n facetby: string[];\n\n dimensionFieldDefs: FieldDef<string>[];\n\n /**\n * Stack measure's field. Used in makeFromEncoding.\n */\n stackField: string;\n\n /**\n * Level of detail fields for each level in the stacked charts such as color or detail.\n * Used in makeFromEncoding.\n */\n stackby?: string[];\n\n /**\n * Field that determines order of levels in the stacked charts.\n * Used in both but optional in transform.\n */\n sort: SortFields;\n\n /** Mode for stacking marks.\n */\n offset: StackOffset;\n\n /**\n * Whether to impute the data before stacking. Used only in makeFromEncoding.\n */\n impute?: boolean;\n\n /**\n * The data fields to group by.\n */\n groupby?: FieldName[];\n /**\n * Output field names of each stack field.\n */\n as: [FieldName, FieldName];\n}\n\nfunction isValidAsArray(as: string[] | string): as is string[] {\n return isArray(as) && as.every(s => isString(s)) && as.length > 1;\n}\n\nexport class StackNode extends DataFlowNode {\n private _stack: StackComponent;\n\n public clone() {\n return new StackNode(null, duplicate(this._stack));\n }\n\n constructor(parent: DataFlowNode, stack: StackComponent) {\n super(parent);\n\n this._stack = stack;\n }\n\n public static makeFromTransform(parent: DataFlowNode, stackTransform: StackTransform) {\n const {stack, groupby, as, offset = 'zero'} = stackTransform;\n\n const sortFields: string[] = [];\n const sortOrder: SortOrder[] = [];\n if (stackTransform.sort !== undefined) {\n for (const sortField of stackTransform.sort) {\n sortFields.push(sortField.field);\n sortOrder.push(getFirstDefined(sortField.order, 'ascending'));\n }\n }\n const sort: SortFields = {\n field: sortFields,\n order: sortOrder\n };\n let normalizedAs: [string, string];\n if (isValidAsArray(as)) {\n normalizedAs = as;\n } else if (isString(as)) {\n normalizedAs = [as, `${as}_end`];\n } else {\n normalizedAs = [`${stackTransform.stack}_start`, `${stackTransform.stack}_end`];\n }\n\n return new StackNode(parent, {\n dimensionFieldDefs: [],\n stackField: stack,\n groupby,\n offset,\n sort,\n facetby: [],\n as: normalizedAs\n });\n }\n\n public static makeFromEncoding(parent: DataFlowNode, model: UnitModel) {\n const stackProperties = model.stack;\n const {encoding} = model;\n\n if (!stackProperties) {\n return null;\n }\n\n const {groupbyChannels, fieldChannel, offset, impute} = stackProperties;\n\n const dimensionFieldDefs = groupbyChannels\n .map(groupbyChannel => {\n const cDef = encoding[groupbyChannel];\n return getFieldDef(cDef);\n })\n .filter(def => !!def);\n\n const stackby = getStackByFields(model);\n const orderDef = model.encoding.order;\n\n let sort: SortFields;\n if (isArray(orderDef) || isFieldDef(orderDef)) {\n sort = sortParams(orderDef);\n } else {\n const sortOrder = isOrderOnlyDef(orderDef) ? orderDef.sort : fieldChannel === 'y' ? 'descending' : 'ascending';\n // default = descending by stackFields\n // FIXME is the default here correct for binned fields?\n sort = stackby.reduce(\n (s, field) => {\n if (!s.field.includes(field)) {\n s.field.push(field);\n s.order.push(sortOrder);\n }\n return s;\n },\n {field: [], order: []}\n );\n }\n\n return new StackNode(parent, {\n dimensionFieldDefs,\n stackField: model.vgField(fieldChannel),\n facetby: [],\n stackby,\n sort,\n offset,\n impute,\n as: [\n model.vgField(fieldChannel, {suffix: 'start', forAs: true}),\n model.vgField(fieldChannel, {suffix: 'end', forAs: true})\n ]\n });\n }\n\n get stack(): StackComponent {\n return this._stack;\n }\n\n public addDimensions(fields: string[]) {\n this._stack.facetby.push(...fields);\n }\n\n public dependentFields() {\n const out = new Set<string>();\n\n out.add(this._stack.stackField);\n\n this.getGroupbyFields().forEach(out.add, out);\n this._stack.facetby.forEach(out.add, out);\n this._stack.sort.field.forEach(out.add, out);\n\n return out;\n }\n\n public producedFields() {\n return new Set(this._stack.as);\n }\n\n public hash() {\n return `Stack ${hash(this._stack)}`;\n }\n\n private getGroupbyFields() {\n const {dimensionFieldDefs, impute, groupby} = this._stack;\n\n if (dimensionFieldDefs.length > 0) {\n return dimensionFieldDefs\n .map(dimensionFieldDef => {\n if (dimensionFieldDef.bin) {\n if (impute) {\n // For binned group by field with impute, we calculate bin_mid\n // as we cannot impute two fields simultaneously\n return [vgField(dimensionFieldDef, {binSuffix: 'mid'})];\n }\n return [\n // For binned group by field without impute, we need both bin (start) and bin_end\n vgField(dimensionFieldDef, {}),\n vgField(dimensionFieldDef, {binSuffix: 'end'})\n ];\n }\n return [vgField(dimensionFieldDef)];\n })\n .flat();\n }\n return groupby ?? [];\n }\n\n public assemble(): VgTransform[] {\n const transform: VgTransform[] = [];\n const {facetby, dimensionFieldDefs, stackField: field, stackby, sort, offset, impute, as} = this._stack;\n\n // Impute\n if (impute) {\n for (const dimensionFieldDef of dimensionFieldDefs) {\n const {bandPosition = 0.5, bin} = dimensionFieldDef;\n if (bin) {\n // As we can only impute one field at a time, we need to calculate\n // mid point for a binned field\n\n const binStart = vgField(dimensionFieldDef, {expr: 'datum'});\n const binEnd = vgField(dimensionFieldDef, {expr: 'datum', binSuffix: 'end'});\n transform.push({\n type: 'formula',\n expr: `${isValidFiniteNumberExpr(binStart)} ? ${bandPosition}*${binStart}+${1 - bandPosition}*${binEnd} : ${binStart}`,\n as: vgField(dimensionFieldDef, {binSuffix: 'mid', forAs: true})\n });\n }\n\n transform.push({\n type: 'impute',\n field,\n groupby: [...stackby, ...facetby],\n key: vgField(dimensionFieldDef, {binSuffix: 'mid'}),\n method: 'value',\n value: 0\n });\n }\n }\n\n // Stack\n transform.push({\n type: 'stack',\n groupby: [...this.getGroupbyFields(), ...facetby],\n field,\n sort,\n as,\n offset\n });\n\n return transform;\n }\n}\n", "import {AggregateOp, WindowTransform as VgWindowTransform} from 'vega';\nimport {isAggregateOp} from '../../aggregate';\nimport {vgField} from '../../channeldef';\nimport {SortOrder} from '../../sort';\nimport {WindowFieldDef, WindowOnlyOp, WindowTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {VgComparator, VgJoinAggregateTransform} from '../../vega.schema';\nimport {unique} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for the window transform nodes\n */\nexport class WindowTransformNode extends DataFlowNode {\n public clone() {\n return new WindowTransformNode(null, duplicate(this.transform));\n }\n\n constructor(\n parent: DataFlowNode,\n private readonly transform: WindowTransform\n ) {\n super(parent);\n }\n\n public addDimensions(fields: string[]) {\n this.transform.groupby = unique(this.transform.groupby.concat(fields), d => d);\n }\n\n public dependentFields() {\n const out = new Set<string>();\n\n (this.transform.groupby ?? []).forEach(out.add, out);\n (this.transform.sort ?? []).forEach(m => out.add(m.field));\n\n this.transform.window\n .map(w => w.field)\n .filter(f => f !== undefined)\n .forEach(out.add, out);\n\n return out;\n }\n\n public producedFields() {\n return new Set(this.transform.window.map(this.getDefaultName));\n }\n\n private getDefaultName(windowFieldDef: WindowFieldDef): string {\n return windowFieldDef.as ?? vgField(windowFieldDef);\n }\n\n public hash() {\n return `WindowTransform ${hash(this.transform)}`;\n }\n\n public assemble(): VgWindowTransform | VgJoinAggregateTransform {\n const fields: string[] = [];\n const ops: (AggregateOp | WindowOnlyOp)[] = [];\n const as: string[] = [];\n const params = [];\n\n for (const window of this.transform.window) {\n ops.push(window.op);\n as.push(this.getDefaultName(window));\n params.push(window.param === undefined ? null : window.param);\n fields.push(window.field === undefined ? null : window.field);\n }\n\n const frame = this.transform.frame;\n const groupby = this.transform.groupby;\n\n if (frame && frame[0] === null && frame[1] === null && ops.every(o => isAggregateOp(o))) {\n // when the window does not rely on any particular window ops or frame, switch to a simpler and more efficient joinaggregate\n return {\n type: 'joinaggregate',\n as,\n ops: ops as AggregateOp[],\n fields,\n ...(groupby !== undefined ? {groupby} : {})\n } as VgJoinAggregateTransform;\n }\n\n const sortFields: string[] = [];\n const sortOrder: SortOrder[] = [];\n if (this.transform.sort !== undefined) {\n for (const sortField of this.transform.sort) {\n sortFields.push(sortField.field);\n sortOrder.push(sortField.order ?? 'ascending');\n }\n }\n const sort: VgComparator = {\n field: sortFields,\n order: sortOrder\n };\n const ignorePeers = this.transform.ignorePeers;\n\n return {\n type: 'window',\n params,\n as,\n ops,\n fields,\n sort,\n ...(ignorePeers !== undefined ? {ignorePeers} : {}),\n ...(groupby !== undefined ? {groupby} : {}),\n ...(frame !== undefined ? {frame} : {})\n } as VgWindowTransform;\n }\n}\n", "import {DataSourceType} from '../../data';\nimport {AggregateNode} from './aggregate';\nimport {DataFlowNode, OutputNode} from './dataflow';\nimport {FacetNode} from './facet';\nimport {JoinAggregateTransformNode} from './joinaggregate';\nimport {FACET_SCALE_PREFIX} from './optimize';\nimport {StackNode} from './stack';\nimport {WindowTransformNode} from './window';\n\n/**\n * Clones the subtree and ignores output nodes except for the leaves, which are renamed.\n */\nfunction cloneSubtree(facet: FacetNode) {\n function clone(node: DataFlowNode): DataFlowNode[] {\n if (!(node instanceof FacetNode)) {\n const copy = node.clone();\n\n if (copy instanceof OutputNode) {\n const newName = FACET_SCALE_PREFIX + copy.getSource();\n copy.setSource(newName);\n\n facet.model.component.data.outputNodes[newName] = copy;\n } else if (\n copy instanceof AggregateNode ||\n copy instanceof StackNode ||\n copy instanceof WindowTransformNode ||\n copy instanceof JoinAggregateTransformNode\n ) {\n copy.addDimensions(facet.fields);\n }\n for (const n of node.children.flatMap(clone)) {\n n.parent = copy;\n }\n\n return [copy];\n }\n\n return node.children.flatMap(clone);\n }\n return clone;\n}\n\n/**\n * Move facet nodes down to the next fork or output node. Also pull the main output with the facet node.\n * After moving down the facet node, make a copy of the subtree and make it a child of the main output.\n */\nexport function moveFacetDown(node: DataFlowNode) {\n if (node instanceof FacetNode) {\n if (node.numChildren() === 1 && !(node.children[0] instanceof OutputNode)) {\n // move down until we hit a fork or output node\n const child = node.children[0];\n\n if (\n child instanceof AggregateNode ||\n child instanceof StackNode ||\n child instanceof WindowTransformNode ||\n child instanceof JoinAggregateTransformNode\n ) {\n child.addDimensions(node.fields);\n }\n\n child.swapWithParent();\n moveFacetDown(node);\n } else {\n // move main to facet\n\n const facetMain = node.model.component.data.main;\n moveMainDownToFacet(facetMain);\n\n // replicate the subtree and place it before the facet's main node\n const cloner = cloneSubtree(node);\n const copy: DataFlowNode[] = node.children.map(cloner).flat();\n for (const c of copy) {\n c.parent = facetMain;\n }\n }\n } else {\n node.children.map(moveFacetDown);\n }\n}\n\nfunction moveMainDownToFacet(node: DataFlowNode) {\n if (node instanceof OutputNode && node.type === DataSourceType.Main) {\n if (node.numChildren() === 1) {\n const child = node.children[0];\n if (!(child instanceof FacetNode)) {\n child.swapWithParent();\n moveMainDownToFacet(node);\n }\n }\n }\n}\n", "import {DataComponent} from '.';\nimport * as log from '../../log';\nimport {Model} from '../model';\nimport {DataFlowNode} from './dataflow';\nimport {Optimizer} from './optimizer';\nimport * as optimizers from './optimizers';\nimport {moveFacetDown} from './subtree';\n\nexport const FACET_SCALE_PREFIX = 'scale_';\nexport const MAX_OPTIMIZATION_RUNS = 5;\n\n/**\n * Iterates over a dataflow graph and checks whether all links are consistent.\n */\nexport function checkLinks(nodes: readonly DataFlowNode[]): boolean {\n for (const node of nodes) {\n for (const child of node.children) {\n if (child.parent !== node) {\n // log.error('Dataflow graph is inconsistent.', node, child);\n return false;\n }\n }\n\n if (!checkLinks(node.children)) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Run the specified optimizer on the provided nodes.\n *\n * @param optimizer The optimizer instance to run.\n * @param nodes A set of nodes to optimize.\n */\nfunction runOptimizer(optimizer: Optimizer, nodes: DataFlowNode[]): boolean {\n let modified = false;\n\n for (const node of nodes) {\n modified = optimizer.optimize(node) || modified;\n }\n\n return modified;\n}\n\nfunction optimizationDataflowHelper(dataComponent: DataComponent, model: Model, firstPass: boolean) {\n let roots = dataComponent.sources;\n let modified = false;\n\n modified = runOptimizer(new optimizers.RemoveUnnecessaryOutputNodes(), roots) || modified;\n modified = runOptimizer(new optimizers.RemoveUnnecessaryIdentifierNodes(model), roots) || modified;\n\n // remove source nodes that don't have any children because they also don't have output nodes\n roots = roots.filter(r => r.numChildren() > 0);\n\n modified = runOptimizer(new optimizers.RemoveUnusedSubtrees(), roots) || modified;\n\n roots = roots.filter(r => r.numChildren() > 0);\n\n if (!firstPass) {\n // Only run these optimizations after the optimizer has moved down the facet node.\n // With this change, we can be more aggressive in the optimizations.\n modified = runOptimizer(new optimizers.MoveParseUp(), roots) || modified;\n modified = runOptimizer(new optimizers.MergeBins(model), roots) || modified;\n modified = runOptimizer(new optimizers.RemoveDuplicateTimeUnits(), roots) || modified;\n modified = runOptimizer(new optimizers.MergeParse(), roots) || modified;\n modified = runOptimizer(new optimizers.MergeAggregates(), roots) || modified;\n modified = runOptimizer(new optimizers.MergeTimeUnits(), roots) || modified;\n modified = runOptimizer(new optimizers.MergeIdenticalNodes(), roots) || modified;\n modified = runOptimizer(new optimizers.MergeOutputs(), roots) || modified;\n }\n\n dataComponent.sources = roots;\n\n return modified;\n}\n\n/**\n * Optimizes the dataflow of the passed in data component.\n */\nexport function optimizeDataflow(data: DataComponent, model: Model) {\n // check before optimizations\n checkLinks(data.sources);\n\n let firstPassCounter = 0;\n let secondPassCounter = 0;\n\n for (let i = 0; i < MAX_OPTIMIZATION_RUNS; i++) {\n if (!optimizationDataflowHelper(data, model, true)) {\n break;\n }\n firstPassCounter++;\n }\n\n // move facets down and make a copy of the subtree so that we can have scales at the top level\n data.sources.map(moveFacetDown);\n\n for (let i = 0; i < MAX_OPTIMIZATION_RUNS; i++) {\n if (!optimizationDataflowHelper(data, model, false)) {\n break;\n }\n secondPassCounter++;\n }\n\n // check after optimizations\n checkLinks(data.sources);\n\n if (Math.max(firstPassCounter, secondPassCounter) === MAX_OPTIMIZATION_RUNS) {\n log.warn(`Maximum optimization runs(${MAX_OPTIMIZATION_RUNS}) reached.`);\n }\n}\n", "import type {SignalRef} from 'vega';\n\nexport type Rename = (oldSignalName: string) => string;\n\n/**\n * A class that behaves like a SignalRef but lazily generates the signal.\n * The provided generator function should use `Model.getSignalName` to use the correct signal name.\n */\nexport class SignalRefWrapper implements SignalRef {\n constructor(exprGenerator: () => string) {\n Object.defineProperty(this, 'signal', {\n enumerable: true,\n get: exprGenerator\n });\n }\n\n public signal: string; // for ts\n\n public static fromName(rename: Rename, signalName: string) {\n return new SignalRefWrapper(() => rename(signalName));\n }\n}\n", "import type {SignalRef} from 'vega';\nimport {hasOwnProperty, isObject, isString} from 'vega-util';\nimport {\n Aggregate,\n isAggregateOp,\n isArgmaxDef,\n isArgminDef,\n NonArgAggregateOp,\n SHARED_DOMAIN_OPS,\n MULTIDOMAIN_SORT_OP_INDEX as UNIONDOMAIN_SORT_OP_INDEX\n} from '../../aggregate';\nimport {isBinning, isBinParams, isParameterExtent} from '../../bin';\nimport {getSecondaryRangeChannel, isScaleChannel, isXorY, ScaleChannel} from '../../channel';\nimport {\n binRequiresRange,\n getBandPosition,\n getFieldOrDatumDef,\n hasBandEnd,\n isDatumDef,\n isFieldDef,\n ScaleDatumDef,\n ScaleFieldDef,\n TypedFieldDef,\n valueExpr,\n vgField\n} from '../../channeldef';\nimport {CompositeAggregate} from '../../compositemark';\nimport {DataSourceType} from '../../data';\nimport {DateTime} from '../../datetime';\nimport {ExprRef} from '../../expr';\nimport * as log from '../../log';\nimport {isPathMark, isRectBasedMark} from '../../mark';\nimport {Domain, hasDiscreteDomain, isDomainUnionWith, isParameterDomain, ScaleConfig, ScaleType} from '../../scale';\nimport {ParameterExtent} from '../../selection';\nimport {DEFAULT_SORT_OP, EncodingSortField, isSortArray, isSortByEncoding, isSortField} from '../../sort';\nimport {normalizeTimeUnit, TimeUnit, TimeUnitTransformParams} from '../../timeunit';\nimport {Type} from '../../type';\nimport * as util from '../../util';\nimport {\n isDataRefDomain,\n isDataRefUnionedDomain,\n isFieldRefUnionDomain,\n isSignalRef,\n VgDomain,\n VgMultiFieldsRefWithSort,\n VgNonUnionDomain,\n VgScaleDataRefWithSort,\n VgSortField,\n VgUnionSortField\n} from '../../vega.schema';\nimport {getMarkConfig} from '../common';\nimport {getBinSignalName} from '../data/bin';\nimport {sortArrayIndexField} from '../data/calculate';\nimport {FACET_SCALE_PREFIX} from '../data/optimize';\nimport {OFFSETTED_RECT_END_SUFFIX, OFFSETTED_RECT_START_SUFFIX} from '../data/timeunit';\nimport {getScaleDataSourceForHandlingInvalidValues} from '../invalid/datasources';\nimport {isFacetModel, isUnitModel, Model} from '../model';\nimport {SignalRefWrapper} from '../signal';\nimport {Explicit, makeExplicit, makeImplicit, mergeValuesWithExplicit} from '../split';\nimport {UnitModel} from '../unit';\nimport {ScaleComponent, ScaleComponentIndex} from './component';\n\nexport function parseScaleDomain(model: Model) {\n if (isUnitModel(model)) {\n parseUnitScaleDomain(model);\n } else {\n parseNonUnitScaleDomain(model);\n }\n}\n\nfunction parseUnitScaleDomain(model: UnitModel) {\n const localScaleComponents: ScaleComponentIndex = model.component.scales;\n\n for (const channel of util.keys(localScaleComponents)) {\n const domains = parseDomainForChannel(model, channel);\n const localScaleCmpt = localScaleComponents[channel];\n localScaleCmpt.setWithExplicit('domains', domains);\n parseSelectionDomain(model, channel);\n\n if (model.component.data.isFaceted) {\n // get resolve from closest facet parent as this decides whether we need to refer to cloned subtree or not\n let facetParent: Model = model;\n while (!isFacetModel(facetParent) && facetParent.parent) {\n facetParent = facetParent.parent;\n }\n\n const resolve = facetParent.component.resolve.scale[channel];\n\n if (resolve === 'shared') {\n for (const domain of domains.value) {\n // Replace the scale domain with data output from a cloned subtree after the facet.\n if (isDataRefDomain(domain)) {\n // use data from cloned subtree (which is the same as data but with a prefix added once)\n domain.data = FACET_SCALE_PREFIX + domain.data.replace(FACET_SCALE_PREFIX, '');\n }\n }\n }\n }\n }\n}\n\nfunction parseNonUnitScaleDomain(model: Model) {\n for (const child of model.children) {\n parseScaleDomain(child);\n }\n\n const localScaleComponents: ScaleComponentIndex = model.component.scales;\n\n for (const channel of util.keys(localScaleComponents)) {\n let domains: Explicit<VgNonUnionDomain[]>;\n let selectionExtent: ParameterExtent = null;\n\n for (const child of model.children) {\n const childComponent = child.component.scales[channel];\n if (childComponent) {\n if (domains === undefined) {\n domains = childComponent.getWithExplicit('domains');\n } else {\n domains = mergeValuesWithExplicit(\n domains,\n childComponent.getWithExplicit('domains'),\n 'domains',\n 'scale',\n domainsTieBreaker\n );\n }\n\n const se = childComponent.get('selectionExtent');\n if (selectionExtent && se && selectionExtent.param !== se.param) {\n log.warn(log.message.NEEDS_SAME_SELECTION);\n }\n selectionExtent = se;\n }\n }\n\n localScaleComponents[channel].setWithExplicit('domains', domains);\n\n if (selectionExtent) {\n localScaleComponents[channel].set('selectionExtent', selectionExtent, true);\n }\n }\n}\n\n/**\n * Remove unaggregated domain if it is not applicable\n * Add unaggregated domain if domain is not specified and config.scale.useUnaggregatedDomain is true.\n */\nfunction normalizeUnaggregatedDomain(\n domain: Domain,\n fieldDef: TypedFieldDef<string>,\n scaleType: ScaleType,\n scaleConfig: ScaleConfig<SignalRef>\n) {\n if (domain === 'unaggregated') {\n const {valid, reason} = canUseUnaggregatedDomain(fieldDef, scaleType);\n if (!valid) {\n log.warn(reason);\n return undefined;\n }\n } else if (domain === undefined && scaleConfig.useUnaggregatedDomain) {\n // Apply config if domain is not specified.\n const {valid} = canUseUnaggregatedDomain(fieldDef, scaleType);\n if (valid) {\n return 'unaggregated';\n }\n }\n\n return domain;\n}\n\nexport function parseDomainForChannel(model: UnitModel, channel: ScaleChannel): Explicit<VgNonUnionDomain[]> {\n const scaleType = model.getScaleComponent(channel).get('type');\n const {encoding} = model;\n\n const domain = normalizeUnaggregatedDomain(\n model.scaleDomain(channel),\n model.typedFieldDef(channel),\n scaleType,\n model.config.scale\n );\n if (domain !== model.scaleDomain(channel)) {\n model.specifiedScales[channel] = {\n ...model.specifiedScales[channel],\n domain\n };\n }\n\n // If channel is either X or Y then union them with X2 & Y2 if they exist\n if (channel === 'x' && getFieldOrDatumDef(encoding.x2)) {\n if (getFieldOrDatumDef(encoding.x)) {\n return mergeValuesWithExplicit(\n parseSingleChannelDomain(scaleType, domain, model, 'x'),\n parseSingleChannelDomain(scaleType, domain, model, 'x2'),\n 'domain',\n 'scale',\n domainsTieBreaker\n );\n } else {\n return parseSingleChannelDomain(scaleType, domain, model, 'x2');\n }\n } else if (channel === 'y' && getFieldOrDatumDef(encoding.y2)) {\n if (getFieldOrDatumDef(encoding.y)) {\n return mergeValuesWithExplicit(\n parseSingleChannelDomain(scaleType, domain, model, 'y'),\n parseSingleChannelDomain(scaleType, domain, model, 'y2'),\n 'domain',\n 'scale',\n domainsTieBreaker\n );\n } else {\n return parseSingleChannelDomain(scaleType, domain, model, 'y2');\n }\n }\n return parseSingleChannelDomain(scaleType, domain, model, channel);\n}\n\nfunction mapDomainToDataSignal(\n domain: (number | string | boolean | DateTime | ExprRef | SignalRef | number[])[],\n type: Type,\n timeUnit: TimeUnit\n) {\n return domain.map(v => {\n const data = valueExpr(v, {timeUnit, type});\n return {signal: `{data: ${data}}`};\n });\n}\n\nfunction convertDomainIfItIsDateTime(\n domain: (number | string | boolean | DateTime | ExprRef | SignalRef | number[])[],\n type: Type,\n timeUnit: TimeUnit | TimeUnitTransformParams\n): [number[]] | [string[]] | [boolean[]] | SignalRef[] {\n // explicit value\n const normalizedTimeUnit = normalizeTimeUnit(timeUnit)?.unit;\n if (type === 'temporal' || normalizedTimeUnit) {\n return mapDomainToDataSignal(domain, type, normalizedTimeUnit);\n }\n\n return [domain] as [number[]] | [string[]] | [boolean[]]; // Date time won't make sense\n}\n\nfunction parseSingleChannelDomain(\n scaleType: ScaleType,\n domain: Domain,\n model: UnitModel,\n channel: ScaleChannel | 'x2' | 'y2'\n): Explicit<VgNonUnionDomain[]> {\n const {encoding, markDef, mark, config, stack} = model;\n const fieldOrDatumDef = getFieldOrDatumDef(encoding[channel]) as ScaleDatumDef<string> | ScaleFieldDef<string>;\n\n const {type} = fieldOrDatumDef;\n const timeUnit = (fieldOrDatumDef as any)['timeUnit'];\n\n const dataSourceTypeForScaleDomain = getScaleDataSourceForHandlingInvalidValues({\n invalid: getMarkConfig('invalid', markDef, config),\n isPath: isPathMark(mark)\n });\n\n if (isDomainUnionWith(domain)) {\n const defaultDomain = parseSingleChannelDomain(scaleType, undefined, model, channel);\n\n const unionWith = convertDomainIfItIsDateTime(domain.unionWith, type, timeUnit);\n\n return makeExplicit([...unionWith, ...defaultDomain.value]);\n } else if (isSignalRef(domain)) {\n return makeExplicit([domain]);\n } else if (domain && domain !== 'unaggregated' && !isParameterDomain(domain)) {\n return makeExplicit(convertDomainIfItIsDateTime(domain, type, timeUnit));\n }\n\n if (stack && channel === stack.fieldChannel) {\n if (stack.offset === 'normalize') {\n return makeImplicit([[0, 1]]);\n }\n\n const data = model.requestDataName(dataSourceTypeForScaleDomain);\n return makeImplicit([\n {\n data,\n field: model.vgField(channel, {suffix: 'start'})\n },\n {\n data,\n field: model.vgField(channel, {suffix: 'end'})\n }\n ]);\n }\n\n const sort: undefined | true | VgSortField =\n isScaleChannel(channel) && isFieldDef(fieldOrDatumDef) ? domainSort(model, channel, scaleType) : undefined;\n\n if (isDatumDef(fieldOrDatumDef)) {\n const d = convertDomainIfItIsDateTime([fieldOrDatumDef.datum], type, timeUnit);\n return makeImplicit(d);\n }\n\n const fieldDef = fieldOrDatumDef; // now we can be sure it's a fieldDef\n if (domain === 'unaggregated') {\n const {field} = fieldOrDatumDef;\n return makeImplicit([\n {\n data: model.requestDataName(dataSourceTypeForScaleDomain),\n field: vgField({field, aggregate: 'min'})\n },\n {\n data: model.requestDataName(dataSourceTypeForScaleDomain),\n field: vgField({field, aggregate: 'max'})\n }\n ]);\n } else if (isBinning(fieldDef.bin)) {\n if (hasDiscreteDomain(scaleType)) {\n if (scaleType === 'bin-ordinal') {\n // we can omit the domain as it is inferred from the `bins` property\n return makeImplicit([]);\n }\n\n // ordinal bin scale takes domain from bin_range, ordered by bin start\n // This is useful for both axis-based scale (x/y) and legend-based scale (other channels).\n return makeImplicit([\n {\n // If sort by aggregation of a specified sort field, we need to use RAW table,\n // so we can aggregate values for the scale independently from the main aggregation.\n data: util.isBoolean(sort)\n ? model.requestDataName(dataSourceTypeForScaleDomain)\n : model.requestDataName(DataSourceType.Raw),\n // Use range if we added it and the scale does not support computing a range as a signal.\n field: model.vgField(channel, binRequiresRange(fieldDef, channel) ? {binSuffix: 'range'} : {}),\n // we have to use a sort object if sort = true to make the sort correct by bin start\n sort:\n sort === true || !isObject(sort)\n ? {\n field: model.vgField(channel, {}),\n op: 'min' // min or max doesn't matter since we sort by the start of the bin range\n }\n : sort\n }\n ]);\n } else {\n // continuous scales\n const {bin} = fieldDef;\n if (isBinning(bin)) {\n const binSignal = getBinSignalName(model, fieldDef.field, bin);\n return makeImplicit([\n new SignalRefWrapper(() => {\n const signal = model.getSignalName(binSignal);\n return `[${signal}.start, ${signal}.stop]`;\n })\n ]);\n } else {\n return makeImplicit([\n {\n data: model.requestDataName(dataSourceTypeForScaleDomain),\n field: model.vgField(channel, {})\n }\n ]);\n }\n }\n } else if (fieldDef.timeUnit && util.contains(['time', 'utc'], scaleType)) {\n const fieldDef2 = encoding[getSecondaryRangeChannel(channel)];\n\n if (hasBandEnd(fieldDef, fieldDef2, markDef, config)) {\n const data = model.requestDataName(dataSourceTypeForScaleDomain);\n\n const bandPosition = getBandPosition({fieldDef, fieldDef2, markDef, config});\n const isRectWithOffset = isRectBasedMark(mark) && bandPosition !== 0.5 && isXorY(channel);\n return makeImplicit([\n {\n data,\n field: model.vgField(channel, isRectWithOffset ? {suffix: OFFSETTED_RECT_START_SUFFIX} : {})\n },\n {\n data,\n field: model.vgField(channel, {suffix: isRectWithOffset ? OFFSETTED_RECT_END_SUFFIX : 'end'})\n }\n ]);\n }\n }\n if (sort) {\n return makeImplicit([\n {\n // If sort by aggregation of a specified sort field, we need to use RAW table,\n // so we can aggregate values for the scale independently from the main aggregation.\n data: util.isBoolean(sort)\n ? model.requestDataName(dataSourceTypeForScaleDomain)\n : model.requestDataName(DataSourceType.Raw),\n field: model.vgField(channel),\n sort\n }\n ]);\n } else {\n return makeImplicit([\n {\n data: model.requestDataName(dataSourceTypeForScaleDomain),\n field: model.vgField(channel)\n }\n ]);\n }\n}\n\nfunction normalizeSortField(sort: EncodingSortField<string>, isStackedMeasure: boolean): VgSortField {\n const {op, field, order} = sort;\n return {\n // Apply default op\n op: op ?? (isStackedMeasure ? 'sum' : DEFAULT_SORT_OP),\n // flatten nested fields\n ...(field ? {field: util.replacePathInField(field)} : {}),\n\n ...(order ? {order} : {})\n };\n}\n\nfunction parseSelectionDomain(model: UnitModel, channel: ScaleChannel) {\n const scale = model.component.scales[channel];\n const spec = model.specifiedScales[channel].domain;\n const bin = model.fieldDef(channel)?.bin;\n const domain = isParameterDomain(spec) ? spec : undefined;\n const extent = isBinParams(bin) && isParameterExtent(bin.extent) ? bin.extent : undefined;\n\n if (domain || extent) {\n // As scale parsing occurs before selection parsing, we cannot set\n // domainRaw directly. So instead, we store the selectionExtent on\n // the scale component, and then add domainRaw during scale assembly.\n scale.set('selectionExtent', domain ?? extent, true);\n }\n}\n\nexport function domainSort(\n model: UnitModel,\n channel: ScaleChannel,\n scaleType: ScaleType\n): undefined | true | VgSortField {\n if (!hasDiscreteDomain(scaleType)) {\n return undefined;\n }\n\n // save to cast as the only exception is the geojson type for shape, which would not generate a scale\n const fieldDef = model.fieldDef(channel) as ScaleFieldDef<string>;\n const sort = fieldDef.sort;\n\n // if the sort is specified with array, use the derived sort index field\n if (isSortArray(sort)) {\n return {\n op: 'min',\n field: sortArrayIndexField(fieldDef, channel),\n order: 'ascending'\n };\n }\n\n const {stack} = model;\n const stackDimensions = stack\n ? new Set([...stack.groupbyFields, ...stack.stackBy.map(s => s.fieldDef.field)])\n : undefined;\n\n // Sorted based on an aggregate calculation over a specified sort field (only for ordinal scale)\n if (isSortField(sort)) {\n const isStackedMeasure = stack && !stackDimensions.has(sort.field);\n return normalizeSortField(sort, isStackedMeasure);\n } else if (isSortByEncoding(sort)) {\n const {encoding, order} = sort;\n const fieldDefToSortBy = model.fieldDef(encoding);\n const {aggregate, field} = fieldDefToSortBy;\n\n const isStackedMeasure = stack && !stackDimensions.has(field);\n\n if (isArgminDef(aggregate) || isArgmaxDef(aggregate)) {\n return normalizeSortField(\n {\n field: vgField(fieldDefToSortBy),\n order\n },\n isStackedMeasure\n );\n } else if (isAggregateOp(aggregate) || !aggregate) {\n return normalizeSortField(\n {\n op: aggregate as NonArgAggregateOp, // can't be argmin/argmax since we don't support them in encoding field def\n field,\n order\n },\n isStackedMeasure\n );\n }\n } else if (sort === 'descending') {\n return {\n op: 'min',\n field: model.vgField(channel),\n order: 'descending'\n };\n } else if (util.contains(['ascending', undefined /* default =ascending*/], sort)) {\n return true;\n }\n\n // sort == null\n return undefined;\n}\n\n/**\n * Determine if a scale can use unaggregated domain.\n * @return {Boolean} Returns true if all of the following conditions apply:\n * 1. `scale.domain` is `unaggregated`\n * 2. Aggregation function is not `count` or `sum`\n * 3. The scale is quantitative or time scale.\n */\nexport function canUseUnaggregatedDomain(\n fieldDef: TypedFieldDef<string>,\n scaleType: ScaleType\n): {valid: boolean; reason?: string} {\n const {aggregate, type} = fieldDef;\n\n if (!aggregate) {\n return {\n valid: false,\n reason: log.message.unaggregateDomainHasNoEffectForRawField(fieldDef)\n };\n }\n\n if (isString(aggregate) && !(SHARED_DOMAIN_OPS as Set<Aggregate | CompositeAggregate>).has(aggregate)) {\n return {\n valid: false,\n reason: log.message.unaggregateDomainWithNonSharedDomainOp(aggregate)\n };\n }\n\n if (type === 'quantitative') {\n if (scaleType === 'log') {\n return {\n valid: false,\n reason: log.message.unaggregatedDomainWithLogScale(fieldDef)\n };\n }\n }\n\n return {valid: true};\n}\n\n/**\n * Tie breaker for mergeValuesWithExplicit for domains. We concat the specified values.\n */\nfunction domainsTieBreaker(\n v1: Explicit<VgNonUnionDomain[]>,\n v2: Explicit<VgNonUnionDomain[]>,\n property: 'domains',\n propertyOf: 'scale'\n) {\n if (v1.explicit && v2.explicit) {\n log.warn(log.message.mergeConflictingDomainProperty(property, propertyOf, v1.value, v2.value));\n }\n // If equal score, concat the domains so that we union them later.\n return {explicit: v1.explicit, value: [...v1.value, ...v2.value]};\n}\n\n/**\n * Converts an array of domains to a single Vega scale domain.\n */\nexport function mergeDomains(domains: VgNonUnionDomain[]): VgDomain {\n const uniqueDomains = util.unique(\n domains.map(domain => {\n // ignore sort property when computing the unique domains\n if (isDataRefDomain(domain)) {\n const {sort: _s, ...domainWithoutSort} = domain;\n return domainWithoutSort;\n }\n return domain;\n }),\n util.hash\n );\n\n const sorts: VgSortField[] = util.unique(\n domains\n .map(d => {\n if (isDataRefDomain(d)) {\n const s = d.sort;\n if (s !== undefined && !util.isBoolean(s)) {\n if ('op' in s && s.op === 'count') {\n // let's make sure that if op is count, we don't use a field\n delete s.field;\n }\n if (s.order === 'ascending') {\n // drop order: ascending as it is the default\n delete s.order;\n }\n }\n return s;\n }\n return undefined;\n })\n .filter(s => s !== undefined),\n util.hash\n );\n\n if (uniqueDomains.length === 0) {\n return undefined;\n } else if (uniqueDomains.length === 1) {\n const domain = domains[0];\n if (isDataRefDomain(domain) && sorts.length > 0) {\n let sort = sorts[0];\n if (sorts.length > 1) {\n log.warn(log.message.MORE_THAN_ONE_SORT);\n // Get sorts with non-default ops\n const filteredSorts = sorts.filter(s => isObject(s) && 'op' in s && s.op !== 'min');\n if (sorts.every(s => isObject(s) && 'op' in s) && filteredSorts.length === 1) {\n sort = filteredSorts[0];\n } else {\n sort = true;\n }\n } else {\n // Simplify domain sort by removing field and op when the field is the same as the domain field.\n if (isObject(sort) && 'field' in sort) {\n const sortField = sort.field;\n if (domain.field === sortField) {\n sort = sort.order ? {order: sort.order} : true;\n }\n }\n }\n return {\n ...domain,\n sort\n };\n }\n return domain;\n }\n\n // only keep sort properties that work with unioned domains\n const unionDomainSorts = util.unique<VgUnionSortField>(\n sorts.map(s => {\n if (util.isBoolean(s) || !('op' in s) || (isString(s.op) && hasOwnProperty(UNIONDOMAIN_SORT_OP_INDEX, s.op))) {\n return s as VgUnionSortField;\n }\n log.warn(log.message.domainSortDropped(s));\n return true;\n }),\n util.hash\n ) as VgUnionSortField[];\n\n let sort: VgUnionSortField;\n\n if (unionDomainSorts.length === 1) {\n sort = unionDomainSorts[0];\n } else if (unionDomainSorts.length > 1) {\n log.warn(log.message.MORE_THAN_ONE_SORT);\n sort = true;\n }\n\n const allData = util.unique(\n domains.map(d => {\n if (isDataRefDomain(d)) {\n return d.data;\n }\n return null;\n }),\n x => x\n );\n\n if (allData.length === 1 && allData[0] !== null) {\n // create a union domain of different fields with a single data source\n const domain: VgMultiFieldsRefWithSort = {\n data: allData[0],\n fields: uniqueDomains.map(d => (d as VgScaleDataRefWithSort).field),\n ...(sort ? {sort} : {})\n };\n\n return domain;\n }\n\n return {fields: uniqueDomains, ...(sort ? {sort} : {})};\n}\n\n/**\n * Return a field if a scale uses a single field.\n * Return `undefined` otherwise.\n */\nexport function getFieldFromDomain(domain: VgDomain): string {\n if (isDataRefDomain(domain) && isString(domain.field)) {\n return domain.field;\n } else if (isDataRefUnionedDomain(domain)) {\n let field;\n for (const nonUnionDomain of domain.fields) {\n if (isDataRefDomain(nonUnionDomain) && isString(nonUnionDomain.field)) {\n if (!field) {\n field = nonUnionDomain.field;\n } else if (field !== nonUnionDomain.field) {\n log.warn(log.message.FACETED_INDEPENDENT_DIFFERENT_SOURCES);\n return field;\n }\n }\n }\n log.warn(log.message.FACETED_INDEPENDENT_SAME_FIELDS_DIFFERENT_SOURCES);\n return field;\n } else if (isFieldRefUnionDomain(domain)) {\n log.warn(log.message.FACETED_INDEPENDENT_SAME_SOURCE);\n const field = domain.fields[0];\n return isString(field) ? field : undefined;\n }\n\n return undefined;\n}\n\nexport function assembleDomain(model: Model, channel: ScaleChannel) {\n const scaleComponent: ScaleComponent = model.component.scales[channel];\n\n const domains = scaleComponent.get('domains').map((domain: VgNonUnionDomain) => {\n // Correct references to data as the original domain's data was determined\n // in parseScale, which happens before parseData. Thus the original data\n // reference can be incorrect.\n if (isDataRefDomain(domain)) {\n domain.data = model.lookupDataSource(domain.data);\n }\n\n return domain;\n });\n\n // domains is an array that has to be merged into a single vega domain\n return mergeDomains(domains);\n}\n", "import {isObject} from 'vega-util';\nimport {isXorY, ScaleChannel} from '../../channel';\nimport {keys} from '../../util';\nimport {isDataRefDomain, isVgRangeStep, VgRange, VgScale} from '../../vega.schema';\nimport {isConcatModel, isLayerModel, Model} from '../model';\nimport {assembleSelectionScaleDomain} from '../selection/assemble';\nimport {assembleDomain} from './domain';\n\nexport function assembleScales(model: Model): VgScale[] {\n if (isLayerModel(model) || isConcatModel(model)) {\n // For concat and layer, include scales of children too\n return model.children.reduce((scales, child) => {\n return scales.concat(assembleScales(child));\n }, assembleScalesForModel(model));\n } else {\n // For facet, child scales would not be included in the parent's scope.\n // For unit, there is no child.\n return assembleScalesForModel(model);\n }\n}\n\nexport function assembleScalesForModel(model: Model): VgScale[] {\n return keys(model.component.scales).reduce((scales: VgScale[], channel: ScaleChannel) => {\n const scaleComponent = model.component.scales[channel];\n if (scaleComponent.merged) {\n // Skipped merged scales\n return scales;\n }\n\n const scale = scaleComponent.combine();\n const {name, type, selectionExtent, domains: _d, range: _r, reverse, ...otherScaleProps} = scale;\n const range = assembleScaleRange(scale.range, name, channel, model);\n\n const domain = assembleDomain(model, channel);\n const domainRaw = selectionExtent\n ? assembleSelectionScaleDomain(model, selectionExtent, scaleComponent, domain)\n : null;\n\n scales.push({\n name,\n type,\n ...(domain ? {domain} : {}),\n ...(domainRaw ? {domainRaw} : {}),\n range,\n ...(reverse !== undefined ? {reverse: reverse as any} : {}),\n ...otherScaleProps\n });\n\n return scales;\n }, [] as VgScale[]);\n}\n\nexport function assembleScaleRange(\n scaleRange: VgRange,\n scaleName: string,\n channel: ScaleChannel,\n model?: Model\n): VgRange {\n // add signals to x/y range\n if (isXorY(channel)) {\n if (isVgRangeStep(scaleRange)) {\n // For width/height step, use a signal created in layout assemble instead of a constant step.\n return {\n step: {signal: `${scaleName}_step`}\n };\n }\n } else if (isObject(scaleRange) && isDataRefDomain(scaleRange)) {\n return {\n ...scaleRange,\n data: model.lookupDataSource(scaleRange.data)\n };\n }\n return scaleRange;\n}\n", "import type {SignalRef} from 'vega';\nimport {isArray, isNumber} from 'vega-util';\nimport {ScaleChannel} from '../../channel';\nimport {Scale, ScaleType} from '../../scale';\nimport {ParameterExtent} from '../../selection';\nimport {contains} from '../../util';\nimport {VgNonUnionDomain, VgScale} from '../../vega.schema';\nimport {Explicit, Split} from '../split';\n\n/**\n * All VgDomain property except domain.\n * (We exclude domain as we have a special \"domains\" array that allow us merge them all at once in assemble.)\n */\nexport type ScaleComponentProps = Omit<VgScale, 'domain' | 'reverse'> & {\n domains: VgNonUnionDomain[];\n selectionExtent?: ParameterExtent;\n reverse?: boolean | SignalRef; // Need override since Vega doesn't official support scale reverse yet (though it does in practice)\n};\n\nexport type Range = ScaleComponentProps['range'];\n\nexport class ScaleComponent extends Split<ScaleComponentProps> {\n public merged = false;\n\n constructor(name: string, typeWithExplicit: Explicit<ScaleType>) {\n super(\n {}, // no initial explicit property\n {name} // name as initial implicit property\n );\n this.setWithExplicit('type', typeWithExplicit);\n }\n\n /**\n * Whether the scale definitely includes or not include zero in the domain\n */\n public domainHasZero(): 'definitely' | 'definitely-not' | 'maybe' {\n const scaleType = this.get('type');\n if (contains([ScaleType.LOG, ScaleType.TIME, ScaleType.UTC], scaleType)) {\n // Log scales cannot have zero.\n // Zero in time scale is arbitrary, and does not affect ratio.\n // (Time is an interval level of measurement, not ratio).\n // See https://en.wikipedia.org/wiki/Level_of_measurement for more info.\n return 'definitely-not';\n }\n\n const scaleZero = this.get('zero');\n if (\n scaleZero === true ||\n // If zero is undefined, linear/sqrt/pow scales have zero by default.\n (scaleZero === undefined && contains([ScaleType.LINEAR, ScaleType.SQRT, ScaleType.POW], scaleType))\n ) {\n return 'definitely';\n }\n\n const domains = this.get('domains');\n\n if (domains.length > 0) {\n let hasExplicitDomainWithZero = false;\n let hasExplicitDomainWithoutZero = false;\n let hasDomainBasedOnField = false;\n for (const d of domains) {\n if (isArray(d)) {\n const first = d[0];\n const last = d[d.length - 1];\n if (isNumber(first) && isNumber(last)) {\n if (first <= 0 && last >= 0) {\n hasExplicitDomainWithZero = true;\n continue;\n } else {\n hasExplicitDomainWithoutZero = true;\n continue;\n }\n }\n }\n hasDomainBasedOnField = true;\n }\n if (hasExplicitDomainWithZero) {\n return 'definitely';\n } else if (hasExplicitDomainWithoutZero && !hasDomainBasedOnField) {\n return 'definitely-not';\n }\n }\n return 'maybe';\n }\n}\n\nexport type ScaleComponentIndex = Partial<Record<ScaleChannel, ScaleComponent>>;\n\nexport type ScaleIndex = Partial<Record<ScaleChannel, Scale<SignalRef>>>;\n", "import {RangeScheme, SignalRef} from 'vega';\nimport {isArray, isNumber, isObject} from 'vega-util';\nimport {isBinning} from '../../bin';\nimport {\n ANGLE,\n COLOR,\n FILL,\n FILLOPACITY,\n getOffsetScaleChannel,\n getSizeChannel,\n isXorY,\n isXorYOffset,\n OPACITY,\n PositionScaleChannel,\n RADIUS,\n ScaleChannel,\n SCALE_CHANNELS,\n SHAPE,\n SIZE,\n STROKE,\n STROKEDASH,\n STROKEOPACITY,\n STROKEWIDTH,\n THETA,\n X,\n XOFFSET,\n Y,\n YOFFSET,\n TIME\n} from '../../channel';\nimport {\n getBandPosition,\n getFieldOrDatumDef,\n isFieldDef,\n isFieldOrDatumDef,\n ScaleDatumDef,\n ScaleFieldDef\n} from '../../channeldef';\nimport {Config, getViewConfigDiscreteSize, getViewConfigDiscreteStep, ViewConfig} from '../../config';\nimport {DataSourceType} from '../../data';\nimport {channelHasFieldOrDatum} from '../../encoding';\nimport * as log from '../../log';\nimport {Mark} from '../../mark';\nimport {\n channelScalePropertyIncompatability,\n Domain,\n hasContinuousDomain,\n hasDiscreteDomain,\n isContinuousToDiscrete,\n isExtendedScheme,\n Scale,\n ScaleType,\n scaleTypeSupportProperty,\n Scheme\n} from '../../scale';\nimport {getStepFor, isStep, LayoutSizeMixins, Step} from '../../spec/base';\nimport {isDiscrete} from '../../type';\nimport * as util from '../../util';\nimport {isSignalRef, VgRange} from '../../vega.schema';\nimport {exprFromSignalRefOrValue, signalOrStringValue} from '../common';\nimport {getBinSignalName} from '../data/bin';\nimport {SignalRefWrapper} from '../signal';\nimport {Explicit, makeExplicit, makeImplicit} from '../split';\nimport {UnitModel} from '../unit';\nimport {ScaleComponentIndex} from './component';\nimport {durationExpr} from '../../timeunit';\nimport {isFacetModel} from '../model';\n\nexport const RANGE_PROPERTIES: (keyof Scale)[] = ['range', 'scheme'];\n\nexport function parseUnitScaleRange(model: UnitModel) {\n const localScaleComponents: ScaleComponentIndex = model.component.scales;\n\n // use SCALE_CHANNELS instead of scales[channel] to ensure that x, y come first!\n for (const channel of SCALE_CHANNELS) {\n const localScaleCmpt = localScaleComponents[channel];\n if (!localScaleCmpt) {\n continue;\n }\n\n const rangeWithExplicit = parseRangeForChannel(channel, model);\n\n localScaleCmpt.setWithExplicit('range', rangeWithExplicit);\n }\n}\n\nfunction getBinStepSignal(model: UnitModel, channel: 'x' | 'y'): SignalRefWrapper {\n const fieldDef = model.fieldDef(channel);\n\n if (fieldDef?.bin) {\n const {bin, field} = fieldDef;\n const sizeType = getSizeChannel(channel);\n const sizeSignal = model.getName(sizeType);\n\n if (isObject(bin) && bin.binned && bin.step !== undefined) {\n return new SignalRefWrapper(() => {\n const scaleName = model.scaleName(channel);\n const binCount = `(domain(\"${scaleName}\")[1] - domain(\"${scaleName}\")[0]) / ${bin.step}`;\n return `${model.getSignalName(sizeSignal)} / (${binCount})`;\n });\n } else if (isBinning(bin)) {\n const binSignal = getBinSignalName(model, field, bin);\n\n // TODO: extract this to be range step signal\n return new SignalRefWrapper(() => {\n const updatedName = model.getSignalName(binSignal);\n const binCount = `(${updatedName}.stop - ${updatedName}.start) / ${updatedName}.step`;\n return `${model.getSignalName(sizeSignal)} / (${binCount})`;\n });\n }\n }\n return undefined;\n}\n\n/**\n * Return mixins that includes one of the Vega range types (explicit range, range.step, range.scheme).\n */\nexport function parseRangeForChannel(channel: ScaleChannel, model: UnitModel): Explicit<VgRange> {\n const specifiedScale = model.specifiedScales[channel];\n const {size} = model;\n\n const mergedScaleCmpt = model.getScaleComponent(channel);\n const scaleType = mergedScaleCmpt.get('type');\n\n // Check if any of the range properties is specified.\n // If so, check if it is compatible and make sure that we only output one of the properties\n for (const property of RANGE_PROPERTIES) {\n if (specifiedScale[property] !== undefined) {\n const supportedByScaleType = scaleTypeSupportProperty(scaleType, property);\n const channelIncompatability = channelScalePropertyIncompatability(channel, property);\n if (!supportedByScaleType) {\n log.warn(log.message.scalePropertyNotWorkWithScaleType(scaleType, property, channel));\n } else if (channelIncompatability) {\n // channel\n log.warn(channelIncompatability);\n } else {\n switch (property) {\n case 'range': {\n const range = specifiedScale.range;\n if (isArray(range)) {\n if (isXorY(channel)) {\n return makeExplicit(\n range.map(v => {\n if (v === 'width' || v === 'height') {\n // get signal for width/height\n\n // Just like default range logic below, we use SignalRefWrapper to account for potential merges and renames.\n\n const sizeSignal = model.getName(v);\n const getSignalName = model.getSignalName.bind(model);\n return SignalRefWrapper.fromName(getSignalName, sizeSignal);\n }\n return v;\n })\n );\n }\n } else if (isObject(range)) {\n return makeExplicit({\n data: model.requestDataName(DataSourceType.Main),\n field: range.field,\n sort: {op: 'min', field: model.vgField(channel)}\n });\n }\n\n return makeExplicit(range);\n }\n case 'scheme':\n return makeExplicit(parseScheme(specifiedScale[property]));\n }\n }\n }\n }\n\n const sizeChannel = channel === X || channel === 'xOffset' ? 'width' : 'height';\n const sizeValue = size[sizeChannel];\n if (isStep(sizeValue)) {\n if (isXorY(channel)) {\n if (hasDiscreteDomain(scaleType)) {\n const step = getPositionStep(sizeValue, model, channel);\n // Need to be explicit so layer with step wins over layer without step\n if (step) {\n return makeExplicit({step});\n }\n } else {\n log.warn(log.message.stepDropped(sizeChannel));\n }\n } else if (isXorYOffset(channel)) {\n const positionChannel = channel === XOFFSET ? 'x' : 'y';\n const positionScaleCmpt = model.getScaleComponent(positionChannel);\n const positionScaleType = positionScaleCmpt.get('type');\n if (positionScaleType === 'band') {\n const step = getOffsetStep(sizeValue, scaleType);\n if (step) {\n return makeExplicit(step);\n }\n }\n }\n }\n\n const {rangeMin, rangeMax} = specifiedScale;\n const d = defaultRange(channel, model);\n\n if (\n (rangeMin !== undefined || rangeMax !== undefined) &&\n // it's ok to check just rangeMin's compatibility since rangeMin/rangeMax are the same\n scaleTypeSupportProperty(scaleType, 'rangeMin') &&\n isArray(d) &&\n d.length === 2\n ) {\n return makeExplicit([rangeMin ?? d[0], rangeMax ?? d[1]]);\n }\n\n return makeImplicit(d);\n}\n\nfunction parseScheme(scheme: Scheme | SignalRef): RangeScheme {\n if (isExtendedScheme(scheme)) {\n return {\n scheme: scheme.name,\n ...util.omit(scheme, ['name'])\n };\n }\n return {scheme};\n}\n\nfunction fullWidthOrHeightRange(\n channel: 'x' | 'y',\n model: UnitModel,\n scaleType: ScaleType,\n {center}: {center?: boolean} = {}\n) {\n // If step is null, use zero to width or height.\n // Note that we use SignalRefWrapper to account for potential merges and renames.\n const sizeType = getSizeChannel(channel);\n const sizeSignal = model.getName(sizeType);\n const getSignalName = model.getSignalName.bind(model);\n\n if (channel === Y && hasContinuousDomain(scaleType)) {\n // For y continuous scale, we have to start from the height as the bottom part has the max value.\n return center\n ? [\n SignalRefWrapper.fromName(name => `${getSignalName(name)}/2`, sizeSignal),\n SignalRefWrapper.fromName(name => `-${getSignalName(name)}/2`, sizeSignal)\n ]\n : [SignalRefWrapper.fromName(getSignalName, sizeSignal), 0];\n } else {\n return center\n ? [\n SignalRefWrapper.fromName(name => `-${getSignalName(name)}/2`, sizeSignal),\n SignalRefWrapper.fromName(name => `${getSignalName(name)}/2`, sizeSignal)\n ]\n : [0, SignalRefWrapper.fromName(getSignalName, sizeSignal)];\n }\n}\n\nfunction defaultRange(channel: ScaleChannel, model: UnitModel): VgRange {\n const {size, config, mark, encoding} = model;\n\n const {type} = getFieldOrDatumDef(encoding[channel]) as ScaleFieldDef<string> | ScaleDatumDef;\n\n const mergedScaleCmpt = model.getScaleComponent(channel);\n const scaleType = mergedScaleCmpt.get('type');\n\n const {domain, domainMid} = model.specifiedScales[channel];\n\n switch (channel) {\n case X:\n case Y: {\n // If there is no explicit width/height for discrete x/y scales\n if (util.contains(['point', 'band'], scaleType)) {\n const positionSize = getDiscretePositionSize(channel, size, config.view);\n if (isStep(positionSize)) {\n const step = getPositionStep(positionSize, model, channel);\n return {step};\n }\n }\n\n return fullWidthOrHeightRange(channel, model, scaleType);\n }\n\n case XOFFSET:\n case YOFFSET:\n return getOffsetRange(channel, model, scaleType);\n\n case SIZE: {\n // TODO: support custom rangeMin, rangeMax\n const rangeMin = sizeRangeMin(mark, config);\n const rangeMax = sizeRangeMax(mark, size, model, config);\n if (isContinuousToDiscrete(scaleType)) {\n return interpolateRange(\n rangeMin,\n rangeMax,\n defaultContinuousToDiscreteCount(scaleType, config, domain, channel)\n );\n } else {\n return [rangeMin, rangeMax];\n }\n }\n\n case THETA:\n return [0, Math.PI * 2];\n\n case ANGLE:\n // TODO: add config.scale.min/maxAngleDegree (for point and text) and config.scale.min/maxAngleRadian (for arc) once we add arc marks.\n // (It's weird to add just config.scale.min/maxAngleDegree for now)\n return [0, 360];\n\n case RADIUS: {\n // max radius = half od min(width,height)\n\n return [\n 0,\n new SignalRefWrapper(() => {\n const w = model.getSignalName(isFacetModel(model.parent) ? 'child_width' : 'width');\n const h = model.getSignalName(isFacetModel(model.parent) ? 'child_height' : 'height');\n return `min(${w},${h})/2`;\n })\n ];\n }\n\n case TIME: {\n // if (scaleType === 'band') {\n return {step: 1000 / config.scale.framesPerSecond};\n // }\n // return [0, config.scale.animationDuration * 1000]; // TODO(jzong): uncomment for linear scales when interpolation is implemented\n }\n\n case STROKEWIDTH:\n // TODO: support custom rangeMin, rangeMax\n return [config.scale.minStrokeWidth, config.scale.maxStrokeWidth];\n case STROKEDASH:\n return [\n // TODO: add this to Vega's config.range?\n [1, 0],\n [4, 2],\n [2, 1],\n [1, 1],\n [1, 2, 4, 2]\n ];\n case SHAPE:\n return 'symbol';\n case COLOR:\n case FILL:\n case STROKE:\n if (scaleType === 'ordinal') {\n // Only nominal data uses ordinal scale by default\n return type === 'nominal' ? 'category' : 'ordinal';\n } else {\n if (domainMid !== undefined) {\n return 'diverging';\n } else {\n return mark === 'rect' || mark === 'geoshape' ? 'heatmap' : 'ramp';\n }\n }\n case OPACITY:\n case FILLOPACITY:\n case STROKEOPACITY:\n // TODO: support custom rangeMin, rangeMax\n return [config.scale.minOpacity, config.scale.maxOpacity];\n }\n}\n\nfunction getPositionStep(step: Step, model: UnitModel, channel: PositionScaleChannel): number | SignalRef {\n const {encoding} = model;\n\n const mergedScaleCmpt = model.getScaleComponent(channel);\n const offsetChannel = getOffsetScaleChannel(channel);\n const offsetDef = encoding[offsetChannel];\n const stepFor = getStepFor({step, offsetIsDiscrete: isFieldOrDatumDef(offsetDef) && isDiscrete(offsetDef.type)});\n\n if (stepFor === 'offset' && channelHasFieldOrDatum(encoding, offsetChannel)) {\n const offsetScaleCmpt = model.getScaleComponent(offsetChannel);\n const offsetScaleName = model.scaleName(offsetChannel);\n\n let stepCount = `domain('${offsetScaleName}').length`;\n\n if (offsetScaleCmpt.get('type') === 'band') {\n const offsetPaddingInner = offsetScaleCmpt.get('paddingInner') ?? offsetScaleCmpt.get('padding') ?? 0;\n const offsetPaddingOuter = offsetScaleCmpt.get('paddingOuter') ?? offsetScaleCmpt.get('padding') ?? 0;\n stepCount = `bandspace(${stepCount}, ${offsetPaddingInner}, ${offsetPaddingOuter})`;\n }\n\n const paddingInner = mergedScaleCmpt.get('paddingInner') ?? mergedScaleCmpt.get('padding');\n return {\n signal: `${step.step} * ${stepCount} / (1-${exprFromSignalRefOrValue(paddingInner)})`\n };\n } else {\n return step.step;\n }\n}\n\nfunction getOffsetStep(step: Step, offsetScaleType: ScaleType) {\n const stepFor = getStepFor({step, offsetIsDiscrete: hasDiscreteDomain(offsetScaleType)});\n if (stepFor === 'offset') {\n return {step: step.step};\n }\n return undefined;\n}\n\nfunction getOffsetRange(channel: string, model: UnitModel, offsetScaleType: ScaleType): VgRange {\n const positionChannel = channel === XOFFSET ? 'x' : 'y';\n const positionScaleCmpt = model.getScaleComponent(positionChannel);\n\n if (!positionScaleCmpt) {\n return fullWidthOrHeightRange(positionChannel, model, offsetScaleType, {center: true});\n }\n\n const positionScaleType = positionScaleCmpt.get('type');\n const positionScaleName = model.scaleName(positionChannel);\n\n const {markDef, config} = model;\n\n if (positionScaleType === 'band') {\n const size = getDiscretePositionSize(positionChannel, model.size, model.config.view);\n\n if (isStep(size)) {\n // step is for offset\n const step = getOffsetStep(size, offsetScaleType);\n if (step) {\n return step;\n }\n }\n // otherwise use the position\n return [0, {signal: `bandwidth('${positionScaleName}')`}];\n } else {\n // continuous scale\n const positionDef = model.encoding[positionChannel];\n if (isFieldDef(positionDef) && positionDef.timeUnit) {\n const duration = durationExpr(positionDef.timeUnit, expr => `scale('${positionScaleName}', ${expr})`);\n const padding = model.config.scale.bandWithNestedOffsetPaddingInner;\n const bandPositionOffset =\n getBandPosition({\n fieldDef: positionDef,\n markDef,\n config\n }) - 0.5;\n const bandPositionOffsetExpr = bandPositionOffset !== 0 ? ` + ${bandPositionOffset}` : '';\n if (padding) {\n const startRatio = isSignalRef(padding)\n ? `${padding.signal}/2` + bandPositionOffsetExpr\n : `${padding / 2 + bandPositionOffset}`;\n const endRatio = isSignalRef(padding)\n ? `(1 - ${padding.signal}/2)` + bandPositionOffsetExpr\n : `${1 - padding / 2 + bandPositionOffset}`;\n return [{signal: `${startRatio} * (${duration})`}, {signal: `${endRatio} * (${duration})`}];\n }\n return [0, {signal: duration}];\n }\n return util.never(`Cannot use ${channel} scale if ${positionChannel} scale is not discrete.`);\n }\n}\n\nfunction getDiscretePositionSize(\n channel: 'x' | 'y',\n size: LayoutSizeMixins,\n viewConfig: ViewConfig<SignalRef>\n): Step | number | 'container' {\n const sizeChannel = channel === X ? 'width' : 'height';\n const sizeValue = size[sizeChannel];\n if (sizeValue) {\n return sizeValue;\n }\n return getViewConfigDiscreteSize(viewConfig, sizeChannel);\n}\n\nexport function defaultContinuousToDiscreteCount(\n scaleType: 'quantile' | 'quantize' | 'threshold',\n config: Config,\n domain: Domain,\n channel: ScaleChannel\n) {\n switch (scaleType) {\n case 'quantile':\n return config.scale.quantileCount;\n case 'quantize':\n return config.scale.quantizeCount;\n case 'threshold':\n if (domain !== undefined && isArray(domain)) {\n return domain.length + 1;\n } else {\n log.warn(log.message.domainRequiredForThresholdScale(channel));\n // default threshold boundaries for threshold scale since domain has cardinality of 2\n return 3;\n }\n }\n}\n\n/**\n * Returns the linear interpolation of the range according to the cardinality\n *\n * @param rangeMin start of the range\n * @param rangeMax end of the range\n * @param cardinality number of values in the output range\n */\nexport function interpolateRange(\n rangeMin: number | SignalRef,\n rangeMax: number | SignalRef,\n cardinality: number\n): SignalRef {\n // always return a signal since it's better to compute the sequence in Vega later\n const f = () => {\n const rMax = signalOrStringValue(rangeMax);\n const rMin = signalOrStringValue(rangeMin);\n const step = `(${rMax} - ${rMin}) / (${cardinality} - 1)`;\n return `sequence(${rMin}, ${rMax} + ${step}, ${step})`;\n };\n if (isSignalRef(rangeMax)) {\n return new SignalRefWrapper(f);\n } else {\n return {signal: f()};\n }\n}\n\nfunction sizeRangeMin(mark: Mark, config: Config): number | SignalRef {\n switch (mark) {\n case 'bar':\n case 'tick':\n return config.scale.minBandSize;\n case 'line':\n case 'trail':\n case 'rule':\n return config.scale.minStrokeWidth;\n case 'text':\n return config.scale.minFontSize;\n case 'point':\n case 'square':\n case 'circle':\n return config.scale.minSize;\n }\n /* istanbul ignore next: should never reach here */\n // sizeRangeMin not implemented for the mark\n throw new Error(log.message.incompatibleChannel('size', mark));\n}\n\nexport const MAX_SIZE_RANGE_STEP_RATIO = 0.95;\n\nfunction sizeRangeMax(\n mark: Mark,\n size: LayoutSizeMixins,\n model: UnitModel,\n config: Config<SignalRef>\n): number | SignalRef {\n const xyStepSignals = {\n x: getBinStepSignal(model, 'x'),\n y: getBinStepSignal(model, 'y')\n };\n\n switch (mark) {\n case 'bar':\n case 'tick': {\n if (config.scale.maxBandSize !== undefined) {\n return config.scale.maxBandSize;\n }\n const min = minXYStep(size, xyStepSignals, config.view);\n\n if (isNumber(min)) {\n return min - 1;\n } else {\n return new SignalRefWrapper(() => `${min.signal} - 1`);\n }\n }\n case 'line':\n case 'trail':\n case 'rule':\n return config.scale.maxStrokeWidth;\n case 'text':\n return config.scale.maxFontSize;\n case 'point':\n case 'square':\n case 'circle': {\n if (config.scale.maxSize) {\n return config.scale.maxSize;\n }\n\n const pointStep = minXYStep(size, xyStepSignals, config.view);\n if (isNumber(pointStep)) {\n return Math.pow(MAX_SIZE_RANGE_STEP_RATIO * pointStep, 2);\n } else {\n return new SignalRefWrapper(() => `pow(${MAX_SIZE_RANGE_STEP_RATIO} * ${pointStep.signal}, 2)`);\n }\n }\n }\n /* istanbul ignore next: should never reach here */\n // sizeRangeMax not implemented for the mark\n throw new Error(log.message.incompatibleChannel('size', mark));\n}\n\n/**\n * @returns {number} Range step of x or y or minimum between the two if both are ordinal scale.\n */\nfunction minXYStep(\n size: LayoutSizeMixins,\n xyStepSignals: {x?: SignalRefWrapper; y?: SignalRefWrapper},\n viewConfig: ViewConfig<SignalRef>\n): number | SignalRef {\n const widthStep = isStep(size.width) ? size.width.step : getViewConfigDiscreteStep(viewConfig, 'width');\n const heightStep = isStep(size.height) ? size.height.step : getViewConfigDiscreteStep(viewConfig, 'height');\n\n if (xyStepSignals.x || xyStepSignals.y) {\n return new SignalRefWrapper(() => {\n const exprs = [\n xyStepSignals.x ? xyStepSignals.x.signal : widthStep,\n xyStepSignals.y ? xyStepSignals.y.signal : heightStep\n ];\n return `min(${exprs.join(', ')})`;\n });\n }\n\n return Math.min(widthStep, heightStep);\n}\n", "import {SignalRef, TimeInterval} from 'vega';\nimport {isArray, isNumber} from 'vega-util';\nimport {isBinned, isBinning, isBinParams} from '../../bin';\nimport {\n COLOR,\n FILL,\n getSecondaryRangeChannel,\n isXorY,\n isXorYOffset,\n POLAR_POSITION_SCALE_CHANNELS,\n POSITION_SCALE_CHANNELS,\n ScaleChannel,\n STROKE\n} from '../../channel';\nimport {\n getFieldDef,\n getFieldOrDatumDef,\n isFieldDef,\n ScaleDatumDef,\n ScaleFieldDef,\n TypedFieldDef,\n valueExpr\n} from '../../channeldef';\nimport {Config} from '../../config';\nimport {isDateTime} from '../../datetime';\nimport {channelHasNestedOffsetScale} from '../../encoding';\nimport * as log from '../../log';\nimport {Mark, MarkDef, RectConfig} from '../../mark';\nimport {\n channelScalePropertyIncompatability,\n Domain,\n hasContinuousDomain,\n isContinuousToContinuous,\n isContinuousToDiscrete,\n Scale,\n ScaleConfig,\n ScaleType,\n scaleTypeSupportProperty\n} from '../../scale';\nimport {Sort} from '../../sort';\nimport {Type} from '../../type';\nimport * as util from '../../util';\nimport {contains, getFirstDefined, keys} from '../../util';\nimport {isSignalRef, VgScale} from '../../vega.schema';\nimport {getBinSignalName} from '../data/bin';\nimport {isUnitModel, Model} from '../model';\nimport {SignalRefWrapper} from '../signal';\nimport {Explicit, mergeValuesWithExplicit, tieBreakByComparing} from '../split';\nimport {UnitModel} from '../unit';\nimport {ScaleComponentIndex, ScaleComponentProps} from './component';\nimport {parseUnitScaleRange} from './range';\n\nexport function parseScaleProperty(model: Model, property: Exclude<keyof (Scale | ScaleComponentProps), 'range'>) {\n if (isUnitModel(model)) {\n parseUnitScaleProperty(model, property);\n } else {\n parseNonUnitScaleProperty(model, property);\n }\n}\n\nfunction parseUnitScaleProperty(model: UnitModel, property: Exclude<keyof (Scale | ScaleComponentProps), 'range'>) {\n const localScaleComponents: ScaleComponentIndex = model.component.scales;\n const {config, encoding, markDef, specifiedScales} = model;\n\n for (const channel of keys(localScaleComponents)) {\n const specifiedScale = specifiedScales[channel];\n const localScaleCmpt = localScaleComponents[channel];\n const mergedScaleCmpt = model.getScaleComponent(channel);\n const fieldOrDatumDef = getFieldOrDatumDef(encoding[channel]) as ScaleFieldDef<string, Type> | ScaleDatumDef;\n\n const specifiedValue = specifiedScale[property];\n const scaleType = mergedScaleCmpt.get('type');\n const scalePadding = mergedScaleCmpt.get('padding');\n const scalePaddingInner = mergedScaleCmpt.get('paddingInner');\n\n const supportedByScaleType = scaleTypeSupportProperty(scaleType, property);\n const channelIncompatability = channelScalePropertyIncompatability(channel, property);\n\n if (specifiedValue !== undefined) {\n // If there is a specified value, check if it is compatible with scale type and channel\n if (!supportedByScaleType) {\n log.warn(log.message.scalePropertyNotWorkWithScaleType(scaleType, property, channel));\n } else if (channelIncompatability) {\n // channel\n log.warn(channelIncompatability);\n }\n }\n if (supportedByScaleType && channelIncompatability === undefined) {\n if (specifiedValue !== undefined) {\n const timeUnit = (fieldOrDatumDef as any).timeUnit;\n const type = fieldOrDatumDef.type;\n\n switch (property) {\n // domainMax/Min to signal if the value is a datetime object\n case 'domainMax':\n case 'domainMin':\n if (isDateTime(specifiedScale[property]) || type === 'temporal' || timeUnit) {\n localScaleCmpt.set(property, {signal: valueExpr(specifiedScale[property], {type, timeUnit})}, true);\n } else {\n localScaleCmpt.set(property, specifiedScale[property] as any, true);\n }\n break;\n default:\n localScaleCmpt.copyKeyFromObject<Omit<ScaleComponentProps, 'range' | 'domainMin' | 'domainMax'>>(\n property,\n specifiedScale\n );\n }\n } else {\n const value = util.hasProperty(scaleRules, property)\n ? scaleRules[property]({\n model,\n channel,\n fieldOrDatumDef,\n scaleType,\n scalePadding,\n scalePaddingInner,\n domain: specifiedScale.domain,\n domainMin: specifiedScale.domainMin,\n domainMax: specifiedScale.domainMax,\n markDef,\n config,\n hasNestedOffsetScale: channelHasNestedOffsetScale(encoding, channel),\n hasSecondaryRangeChannel: !!encoding[getSecondaryRangeChannel(channel)]\n })\n : config.scale[property];\n if (value !== undefined) {\n localScaleCmpt.set(property, value as any, false);\n }\n }\n }\n }\n}\n\nexport interface ScaleRuleParams {\n model: Model;\n channel: ScaleChannel;\n fieldOrDatumDef: ScaleFieldDef<string, Type> | ScaleDatumDef;\n hasNestedOffsetScale: boolean;\n scaleType: ScaleType;\n scalePadding: number | SignalRef;\n scalePaddingInner: number | SignalRef;\n domain: Domain;\n domainMin: Scale['domainMin'];\n domainMax: Scale['domainMax'];\n markDef: MarkDef<Mark, SignalRef>;\n config: Config<SignalRef>;\n hasSecondaryRangeChannel: boolean;\n}\n\nexport const scaleRules: {\n [k in keyof Scale]?: (params: ScaleRuleParams) => Scale[k];\n} = {\n bins: ({model, fieldOrDatumDef}) => (isFieldDef(fieldOrDatumDef) ? bins(model, fieldOrDatumDef) : undefined),\n\n interpolate: ({channel, fieldOrDatumDef}) => interpolate(channel, fieldOrDatumDef.type),\n\n nice: ({scaleType, channel, domain, domainMin, domainMax, fieldOrDatumDef}) =>\n nice(scaleType, channel, domain, domainMin, domainMax, fieldOrDatumDef),\n\n padding: ({channel, scaleType, fieldOrDatumDef, markDef, config}) =>\n padding(channel, scaleType, config.scale, fieldOrDatumDef, markDef, config.bar),\n\n paddingInner: ({scalePadding, channel, markDef, scaleType, config, hasNestedOffsetScale}) =>\n paddingInner(scalePadding, channel, markDef.type, scaleType, config.scale, hasNestedOffsetScale),\n\n paddingOuter: ({scalePadding, channel, scaleType, scalePaddingInner, config, hasNestedOffsetScale}) =>\n paddingOuter(scalePadding, channel, scaleType, scalePaddingInner, config.scale, hasNestedOffsetScale),\n\n reverse: ({fieldOrDatumDef, scaleType, channel, config}) => {\n const sort = isFieldDef(fieldOrDatumDef) ? fieldOrDatumDef.sort : undefined;\n return reverse(scaleType, sort, channel, config.scale);\n },\n zero: ({channel, fieldOrDatumDef, domain, markDef, scaleType, config, hasSecondaryRangeChannel}) =>\n zero(channel, fieldOrDatumDef, domain, markDef, scaleType, config.scale, hasSecondaryRangeChannel)\n};\n\n// This method is here rather than in range.ts to avoid circular dependency.\nexport function parseScaleRange(model: Model) {\n if (isUnitModel(model)) {\n parseUnitScaleRange(model);\n } else {\n parseNonUnitScaleProperty(model, 'range');\n }\n}\n\nexport function parseNonUnitScaleProperty(model: Model, property: keyof (Scale | ScaleComponentProps)) {\n const localScaleComponents: ScaleComponentIndex = model.component.scales;\n\n for (const child of model.children) {\n if (property === 'range') {\n parseScaleRange(child);\n } else {\n parseScaleProperty(child, property);\n }\n }\n\n for (const channel of keys(localScaleComponents)) {\n let valueWithExplicit: Explicit<any>;\n\n for (const child of model.children) {\n const childComponent = child.component.scales[channel];\n if (childComponent) {\n const childValueWithExplicit = childComponent.getWithExplicit(property);\n valueWithExplicit = mergeValuesWithExplicit<VgScale, any>(\n valueWithExplicit,\n childValueWithExplicit,\n property,\n 'scale',\n tieBreakByComparing<VgScale, any>((v1, v2) => {\n switch (property) {\n case 'range':\n // For step, prefer larger step\n if (v1.step && v2.step) {\n return v1.step - v2.step;\n }\n return 0;\n // TODO: precedence rule for other properties\n }\n return 0;\n })\n );\n }\n }\n localScaleComponents[channel].setWithExplicit(property, valueWithExplicit);\n }\n}\n\nexport function bins(model: Model, fieldDef: TypedFieldDef<string>) {\n const bin = fieldDef.bin;\n if (isBinning(bin)) {\n const binSignal = getBinSignalName(model, fieldDef.field, bin);\n return new SignalRefWrapper(() => {\n return model.getSignalName(binSignal);\n });\n } else if (isBinned(bin) && isBinParams(bin) && bin.step !== undefined) {\n // start and stop will be determined from the scale domain\n return {\n step: bin.step\n };\n }\n return undefined;\n}\n\nexport function interpolate(channel: ScaleChannel, type: Type): Scale['interpolate'] {\n if (contains([COLOR, FILL, STROKE], channel) && type !== 'nominal') {\n return 'hcl';\n }\n return undefined;\n}\n\nexport function nice(\n scaleType: ScaleType,\n channel: ScaleChannel,\n specifiedDomain: Domain,\n domainMin: Scale['domainMin'],\n domainMax: Scale['domainMax'],\n fieldOrDatumDef: TypedFieldDef<string> | ScaleDatumDef\n): boolean | TimeInterval {\n if (\n getFieldDef(fieldOrDatumDef)?.bin ||\n isArray(specifiedDomain) ||\n domainMax != null ||\n domainMin != null ||\n util.contains([ScaleType.TIME, ScaleType.UTC], scaleType)\n ) {\n return undefined;\n }\n return isXorY(channel) ? true : undefined;\n}\n\nexport function padding(\n channel: ScaleChannel,\n scaleType: ScaleType,\n scaleConfig: ScaleConfig<SignalRef>,\n fieldOrDatumDef: TypedFieldDef<string> | ScaleDatumDef,\n markDef: MarkDef<Mark, SignalRef>,\n barConfig: RectConfig<SignalRef>\n) {\n if (isXorY(channel)) {\n if (isContinuousToContinuous(scaleType)) {\n if (scaleConfig.continuousPadding !== undefined) {\n return scaleConfig.continuousPadding;\n }\n\n const {type, orient} = markDef;\n if (type === 'bar' && !(isFieldDef(fieldOrDatumDef) && (fieldOrDatumDef.bin || fieldOrDatumDef.timeUnit))) {\n if ((orient === 'vertical' && channel === 'x') || (orient === 'horizontal' && channel === 'y')) {\n return barConfig.continuousBandSize;\n }\n }\n }\n\n if (scaleType === ScaleType.POINT) {\n return scaleConfig.pointPadding;\n }\n }\n return undefined;\n}\n\nexport function paddingInner(\n paddingValue: number | SignalRef,\n channel: ScaleChannel,\n mark: Mark,\n scaleType: ScaleType,\n scaleConfig: ScaleConfig<SignalRef>,\n hasNestedOffsetScale = false\n) {\n if (paddingValue !== undefined) {\n // If user has already manually specified \"padding\", no need to add default paddingInner.\n return undefined;\n }\n\n if (isXorY(channel)) {\n // Padding is only set for X and Y by default.\n // Basically it doesn't make sense to add padding for color and size.\n\n // paddingOuter would only be called if it's a band scale, just return the default for bandScale.\n const {\n bandPaddingInner,\n barBandPaddingInner,\n rectBandPaddingInner,\n tickBandPaddingInner,\n bandWithNestedOffsetPaddingInner\n } = scaleConfig;\n\n if (hasNestedOffsetScale) {\n return bandWithNestedOffsetPaddingInner;\n }\n\n return getFirstDefined(\n bandPaddingInner,\n mark === 'bar' ? barBandPaddingInner : mark === 'tick' ? tickBandPaddingInner : rectBandPaddingInner\n );\n } else if (isXorYOffset(channel)) {\n if (scaleType === ScaleType.BAND) {\n return scaleConfig.offsetBandPaddingInner;\n }\n }\n return undefined;\n}\n\nexport function paddingOuter(\n paddingValue: number | SignalRef,\n channel: ScaleChannel,\n scaleType: ScaleType,\n paddingInnerValue: number | SignalRef,\n scaleConfig: ScaleConfig<SignalRef>,\n hasNestedOffsetScale = false\n) {\n if (paddingValue !== undefined) {\n // If user has already manually specified \"padding\", no need to add default paddingOuter.\n return undefined;\n }\n\n if (isXorY(channel)) {\n const {bandPaddingOuter, bandWithNestedOffsetPaddingOuter} = scaleConfig;\n if (hasNestedOffsetScale) {\n return bandWithNestedOffsetPaddingOuter;\n }\n // Padding is only set for X and Y by default.\n // Basically it doesn't make sense to add padding for color and size.\n if (scaleType === ScaleType.BAND) {\n return getFirstDefined(\n bandPaddingOuter,\n /* By default, paddingOuter is paddingInner / 2. The reason is that\n size (width/height) = step * (cardinality - paddingInner + 2 * paddingOuter).\n and we want the width/height to be integer by default.\n Note that step (by default) and cardinality are integers.) */\n isSignalRef(paddingInnerValue) ? {signal: `${paddingInnerValue.signal}/2`} : paddingInnerValue / 2\n );\n }\n } else if (isXorYOffset(channel)) {\n if (scaleType === ScaleType.POINT) {\n return 0.5; // so the point positions align with centers of band scales.\n } else if (scaleType === ScaleType.BAND) {\n return scaleConfig.offsetBandPaddingOuter;\n }\n }\n return undefined;\n}\n\nexport function reverse(\n scaleType: ScaleType,\n sort: Sort<string>,\n channel: ScaleChannel,\n scaleConfig: ScaleConfig<SignalRef>\n) {\n if (channel === 'x' && scaleConfig.xReverse !== undefined) {\n if (hasContinuousDomain(scaleType) && sort === 'descending') {\n if (isSignalRef(scaleConfig.xReverse)) {\n return {signal: `!${scaleConfig.xReverse.signal}`};\n } else {\n return !scaleConfig.xReverse;\n }\n }\n return scaleConfig.xReverse;\n }\n\n if (hasContinuousDomain(scaleType) && sort === 'descending') {\n // For continuous domain scales, Vega does not support domain sort.\n // Thus, we reverse range instead if sort is descending\n return true;\n }\n return undefined;\n}\n\nexport function zero(\n channel: ScaleChannel,\n fieldDef: TypedFieldDef<string> | ScaleDatumDef,\n specifiedDomain: Domain,\n markDef: MarkDef,\n scaleType: ScaleType,\n scaleConfig: ScaleConfig<SignalRef>,\n hasSecondaryRangeChannel: boolean\n) {\n // If users explicitly provide a domain, we should not augment zero as that will be unexpected.\n const hasCustomDomain = !!specifiedDomain && specifiedDomain !== 'unaggregated';\n if (hasCustomDomain) {\n if (hasContinuousDomain(scaleType)) {\n if (isArray(specifiedDomain)) {\n const first = specifiedDomain[0];\n const last = specifiedDomain[specifiedDomain.length - 1];\n\n if (isNumber(first) && first <= 0 && isNumber(last) && last >= 0) {\n // if the domain includes zero, make zero remain true\n return true;\n }\n }\n return false;\n }\n }\n\n // If there is no custom domain, return configZero value (=`true` as default) only for the following cases:\n\n // 1) using quantitative field with size\n // While this can be either ratio or interval fields, our assumption is that\n // ratio are more common. However, if the scaleType is discretizing scale, we want to return\n // false so that range doesn't start at zero\n if (channel === 'size' && fieldDef.type === 'quantitative' && !isContinuousToDiscrete(scaleType)) {\n return true;\n }\n\n // 2) non-binned, quantitative x-scale or y-scale\n // (For binning, we should not include zero by default because binning are calculated without zero.)\n // (For area/bar charts with ratio scale chart, we should always include zero.)\n if (\n !(isFieldDef(fieldDef) && fieldDef.bin) &&\n util.contains([...POSITION_SCALE_CHANNELS, ...POLAR_POSITION_SCALE_CHANNELS], channel)\n ) {\n const {orient, type} = markDef;\n if (contains(['bar', 'area', 'line', 'trail'], type)) {\n if ((orient === 'horizontal' && channel === 'y') || (orient === 'vertical' && channel === 'x')) {\n return false;\n }\n }\n\n if (contains(['bar', 'area'], type) && !hasSecondaryRangeChannel) {\n return true;\n }\n\n return scaleConfig?.zero;\n }\n\n return false;\n}\n", "import {isBinning} from '../../bin';\nimport {\n getSizeChannel,\n isColorChannel,\n isScaleChannel,\n isTime,\n isXorY,\n isXorYOffset,\n rangeType,\n ScaleChannel\n} from '../../channel';\nimport {DatumDef, isFieldDef, isPositionFieldOrDatumDef, ScaleDatumDef, TypedFieldDef} from '../../channeldef';\nimport * as log from '../../log';\nimport {isRelativeBandSize, MarkDef} from '../../mark';\nimport {channelSupportScaleType, Scale, ScaleType, scaleTypeSupportDataType} from '../../scale';\nimport {normalizeTimeUnit} from '../../timeunit';\nimport * as util from '../../util';\nimport {POLAR_POSITION_SCALE_CHANNEL_INDEX} from './../../channel';\n\nexport type RangeType = 'continuous' | 'discrete' | 'flexible' | undefined;\n\n/**\n * Determine if there is a specified scale type and if it is appropriate,\n * or determine default type if type is unspecified or inappropriate.\n */\n// NOTE: CompassQL uses this method.\nexport function scaleType(\n specifiedScale: Scale,\n channel: ScaleChannel,\n fieldDef: TypedFieldDef<string> | DatumDef,\n mark: MarkDef,\n hasNestedOffsetScale = false\n): ScaleType {\n const defaultScaleType = defaultType(channel, fieldDef, mark, hasNestedOffsetScale);\n const {type} = specifiedScale;\n\n if (!isScaleChannel(channel)) {\n // There is no scale for these channels\n return null;\n }\n if (type !== undefined) {\n // Check if explicitly specified scale type is supported by the channel\n if (!channelSupportScaleType(channel, type)) {\n log.warn(log.message.scaleTypeNotWorkWithChannel(channel, type, defaultScaleType));\n return defaultScaleType;\n }\n\n // Check if explicitly specified scale type is supported by the data type\n if (isFieldDef(fieldDef) && !scaleTypeSupportDataType(type, fieldDef.type)) {\n log.warn(log.message.scaleTypeNotWorkWithFieldDef(type, defaultScaleType));\n return defaultScaleType;\n }\n\n return type;\n }\n\n return defaultScaleType;\n}\n\n/**\n * Determine appropriate default scale type.\n */\n// NOTE: Voyager uses this method.\nfunction defaultType(\n channel: ScaleChannel,\n fieldDef: TypedFieldDef<string> | ScaleDatumDef,\n mark: MarkDef,\n hasNestedOffsetScale: boolean\n): ScaleType {\n switch (fieldDef.type) {\n case 'nominal':\n case 'ordinal': {\n if (isColorChannel(channel) || rangeType(channel) === 'discrete') {\n if (channel === 'shape' && fieldDef.type === 'ordinal') {\n log.warn(log.message.discreteChannelCannotEncode(channel, 'ordinal'));\n }\n return 'ordinal';\n }\n\n if (isTime(channel)) {\n return 'band';\n }\n\n if (isXorY(channel) || isXorYOffset(channel)) {\n if (util.contains(['rect', 'bar', 'image', 'rule', 'tick'], mark.type)) {\n // The rect/bar/tick mark should fit into a band.\n // For rule, using band scale to make rule align with axis ticks better https://github.com/vega/vega-lite/issues/3429\n return 'band';\n }\n if (hasNestedOffsetScale) {\n // If there is a nested offset scale, then there is a \"band\" for the span of the nested scale.\n return 'band';\n }\n } else if (mark.type === 'arc' && channel in POLAR_POSITION_SCALE_CHANNEL_INDEX) {\n return 'band';\n }\n\n const dimensionSize = mark[getSizeChannel(channel)];\n if (isRelativeBandSize(dimensionSize)) {\n return 'band';\n }\n\n if (isPositionFieldOrDatumDef(fieldDef) && fieldDef.axis?.tickBand) {\n return 'band';\n }\n // Otherwise, use ordinal point scale so we can easily get center positions of the marks.\n return 'point';\n }\n\n case 'temporal':\n if (isColorChannel(channel)) {\n return 'time';\n } else if (rangeType(channel) === 'discrete') {\n log.warn(log.message.discreteChannelCannotEncode(channel, 'temporal'));\n // TODO: consider using quantize (equivalent to binning) once we have it\n return 'ordinal';\n } else if (isFieldDef(fieldDef) && fieldDef.timeUnit && normalizeTimeUnit(fieldDef.timeUnit).utc) {\n return 'utc';\n } else if (isTime(channel)) {\n // return 'linear';\n return 'band'; // TODO(jzong): when interpolation is implemented, this should be 'linear'\n }\n\n return 'time';\n\n case 'quantitative':\n if (isColorChannel(channel)) {\n if (isFieldDef(fieldDef) && isBinning(fieldDef.bin)) {\n return 'bin-ordinal';\n }\n\n return 'linear';\n } else if (rangeType(channel) === 'discrete') {\n log.warn(log.message.discreteChannelCannotEncode(channel, 'quantitative'));\n // TODO: consider using quantize (equivalent to binning) once we have it\n return 'ordinal';\n } else if (isTime(channel)) {\n // return 'linear';\n return 'band'; // TODO(jzong): when interpolation is implemented, this should be 'linear'\n }\n\n return 'linear';\n\n case 'geojson':\n return undefined;\n }\n\n /* istanbul ignore next: should never reach this */\n throw new Error(log.message.invalidFieldType(fieldDef.type));\n}\n", "import {ScaleChannel, SCALE_CHANNELS, SHAPE} from '../../channel';\nimport {getFieldOrDatumDef, ScaleDatumDef, TypedFieldDef} from '../../channeldef';\nimport {channelHasNestedOffsetScale} from '../../encoding';\nimport {GEOSHAPE} from '../../mark';\nimport {\n NON_TYPE_DOMAIN_RANGE_VEGA_SCALE_PROPERTIES,\n scaleCompatible,\n ScaleType,\n scaleTypePrecedence\n} from '../../scale';\nimport {GEOJSON} from '../../type';\nimport {keys} from '../../util';\nimport {VgScale} from '../../vega.schema';\nimport {isUnitModel, Model} from '../model';\nimport {defaultScaleResolve} from '../resolve';\nimport {Explicit, mergeValuesWithExplicit, tieBreakByComparing} from '../split';\nimport {UnitModel} from '../unit';\nimport {ScaleComponent, ScaleComponentIndex} from './component';\nimport {parseScaleDomain} from './domain';\nimport {parseScaleProperty, parseScaleRange} from './properties';\nimport {scaleType} from './type';\n\nexport function parseScales(model: Model, {ignoreRange}: {ignoreRange?: boolean} = {}) {\n parseScaleCore(model);\n parseScaleDomain(model);\n for (const prop of NON_TYPE_DOMAIN_RANGE_VEGA_SCALE_PROPERTIES) {\n parseScaleProperty(model, prop);\n }\n if (!ignoreRange) {\n // range depends on zero\n parseScaleRange(model);\n }\n}\n\nexport function parseScaleCore(model: Model) {\n if (isUnitModel(model)) {\n model.component.scales = parseUnitScaleCore(model);\n } else {\n model.component.scales = parseNonUnitScaleCore(model);\n }\n}\n\n/**\n * Parse scales for all channels of a model.\n */\nfunction parseUnitScaleCore(model: UnitModel): ScaleComponentIndex {\n const {encoding, mark, markDef} = model;\n const scaleComponents: ScaleComponentIndex = {};\n for (const channel of SCALE_CHANNELS) {\n const fieldOrDatumDef = getFieldOrDatumDef(encoding[channel]) as TypedFieldDef<string> | ScaleDatumDef; // must be typed def to have scale\n\n // Don't generate scale for shape of geoshape\n if (fieldOrDatumDef && mark === GEOSHAPE && channel === SHAPE && fieldOrDatumDef.type === GEOJSON) {\n continue;\n }\n\n let specifiedScale = fieldOrDatumDef && (fieldOrDatumDef as any).scale;\n if (fieldOrDatumDef && specifiedScale !== null && specifiedScale !== false) {\n specifiedScale ??= {};\n const hasNestedOffsetScale = channelHasNestedOffsetScale(encoding, channel);\n\n const sType = scaleType(specifiedScale, channel, fieldOrDatumDef, markDef, hasNestedOffsetScale);\n scaleComponents[channel] = new ScaleComponent(model.scaleName(`${channel}`, true), {\n value: sType,\n explicit: specifiedScale.type === sType\n });\n }\n }\n return scaleComponents;\n}\n\nconst scaleTypeTieBreaker = tieBreakByComparing(\n (st1: ScaleType, st2: ScaleType) => scaleTypePrecedence(st1) - scaleTypePrecedence(st2)\n);\n\nfunction parseNonUnitScaleCore(model: Model) {\n const scaleComponents: ScaleComponentIndex = (model.component.scales = {});\n\n const scaleTypeWithExplicitIndex: Partial<Record<ScaleChannel, Explicit<ScaleType>>> = {};\n const resolve = model.component.resolve;\n\n // Parse each child scale and determine if a particular channel can be merged.\n for (const child of model.children) {\n parseScaleCore(child);\n\n // Instead of always merging right away -- check if it is compatible to merge first!\n for (const channel of keys(child.component.scales)) {\n // if resolve is undefined, set default first\n resolve.scale[channel] ??= defaultScaleResolve(channel, model);\n\n if (resolve.scale[channel] === 'shared') {\n const explicitScaleType = scaleTypeWithExplicitIndex[channel];\n const childScaleType = child.component.scales[channel].getWithExplicit('type');\n\n if (explicitScaleType) {\n if (scaleCompatible(explicitScaleType.value, childScaleType.value)) {\n // merge scale component if type are compatible\n scaleTypeWithExplicitIndex[channel] = mergeValuesWithExplicit<VgScale, ScaleType>(\n explicitScaleType,\n childScaleType,\n 'type',\n 'scale',\n scaleTypeTieBreaker\n );\n } else {\n // Otherwise, update conflicting channel to be independent\n resolve.scale[channel] = 'independent';\n // Remove from the index so they don't get merged\n delete scaleTypeWithExplicitIndex[channel];\n }\n } else {\n scaleTypeWithExplicitIndex[channel] = childScaleType;\n }\n }\n }\n }\n\n // Merge each channel listed in the index\n for (const channel of keys(scaleTypeWithExplicitIndex)) {\n // Create new merged scale component\n const name = model.scaleName(channel, true);\n const typeWithExplicit = scaleTypeWithExplicitIndex[channel];\n scaleComponents[channel] = new ScaleComponent(name, typeWithExplicit);\n\n // rename each child and mark them as merged\n for (const child of model.children) {\n const childScale = child.component.scales[channel];\n if (childScale) {\n child.renameScale(childScale.get('name'), name);\n childScale.merged = true;\n }\n }\n }\n\n return scaleComponents;\n}\n", "import {\n AnchorValue,\n Axis as VgAxis,\n Legend as VgLegend,\n NewSignal,\n Projection as VgProjection,\n Signal,\n SignalRef,\n Title as VgTitle\n} from 'vega';\nimport {\n Channel,\n ExtendedChannel,\n FACET_CHANNELS,\n getPositionScaleChannel,\n isChannel,\n isScaleChannel,\n ScaleChannel,\n SingleDefChannel\n} from '../channel';\nimport {ChannelDef, FieldDef, FieldRefOption, getFieldDef, vgField} from '../channeldef';\nimport {Config} from '../config';\nimport {Data, DataSourceType} from '../data';\nimport {forEach, reduce} from '../encoding';\nimport {ExprRef, replaceExprRef} from '../expr';\nimport * as log from '../log';\nimport {Resolve} from '../resolve';\nimport {ScaleType, hasDiscreteDomain} from '../scale';\nimport {isFacetSpec} from '../spec';\nimport {\n extractCompositionLayout,\n GenericCompositionLayoutWithColumns,\n LayoutSizeMixins,\n SpecType,\n ViewBackground\n} from '../spec/base';\nimport {NormalizedSpec} from '../spec/index';\nimport {extractTitleConfig, isText, TitleParams} from '../title';\nimport {normalizeTransform, Transform} from '../transform';\nimport {contains, Dict, duplicate, isEmpty, keys, varName} from '../util';\nimport {isVgRangeStep, VgData, VgEncodeEntry, VgLayout, VgMarkGroup} from '../vega.schema';\nimport {assembleAxes} from './axis/assemble';\nimport {AxisComponentIndex} from './axis/component';\nimport {signalOrValueRef} from './common';\nimport {ConcatModel} from './concat';\nimport {DataComponent} from './data';\nimport {FacetModel} from './facet';\nimport {assembleHeaderGroups, assembleLayoutTitleBand, assembleTitleGroup} from './header/assemble';\nimport {HEADER_CHANNELS, LayoutHeaderComponent} from './header/component';\nimport {LayerModel} from './layer';\nimport {sizeExpr} from './layoutsize/assemble';\nimport {\n getSizeTypeFromLayoutSizeType,\n LayoutSizeComponent,\n LayoutSizeIndex,\n LayoutSizeType\n} from './layoutsize/component';\nimport {assembleLegends} from './legend/assemble';\nimport {LegendComponentIndex} from './legend/component';\nimport {parseLegend} from './legend/parse';\nimport {assembleProjections} from './projection/assemble';\nimport {ProjectionComponent} from './projection/component';\nimport {parseProjection} from './projection/parse';\nimport {assembleScales} from './scale/assemble';\nimport {ScaleComponent, ScaleComponentIndex} from './scale/component';\nimport {assembleDomain, getFieldFromDomain} from './scale/domain';\nimport {parseScales} from './scale/parse';\nimport {SelectionComponent} from './selection';\nimport {Split} from './split';\nimport {UnitModel} from './unit';\n\n/**\n * Composable Components that are intermediate results of the parsing phase of the\n * compilations. The components represents parts of the specification in a form that\n * can be easily merged (during parsing for composite specs).\n * In addition, these components are easily transformed into Vega specifications\n * during the \"assemble\" phase, which is the last phase of the compilation step.\n */\nexport interface Component {\n data: DataComponent;\n\n layoutSize: LayoutSizeComponent;\n\n layoutHeaders: {\n row?: LayoutHeaderComponent;\n column?: LayoutHeaderComponent;\n facet?: LayoutHeaderComponent;\n };\n\n mark: VgMarkGroup[];\n scales: ScaleComponentIndex;\n projection: ProjectionComponent;\n selection: Dict<SelectionComponent>;\n\n /** Dictionary mapping channel to VgAxis definition */\n axes: AxisComponentIndex;\n\n /** Dictionary mapping channel to VgLegend definition */\n legends: LegendComponentIndex;\n\n resolve: Resolve;\n}\n\nexport interface NameMapInterface {\n rename(oldname: string, newName: string): void;\n has(name: string): boolean;\n get(name: string): string;\n}\n\nexport class NameMap implements NameMapInterface {\n private nameMap: Dict<string>;\n\n constructor() {\n this.nameMap = {};\n }\n\n public rename(oldName: string, newName: string) {\n this.nameMap[oldName] = newName;\n }\n\n public has(name: string): boolean {\n return this.nameMap[name] !== undefined;\n }\n\n public get(name: string): string {\n // If the name appears in the _nameMap, we need to read its new name.\n // We have to loop over the dict just in case the new name also gets renamed.\n while (this.nameMap[name] && name !== this.nameMap[name]) {\n name = this.nameMap[name];\n }\n\n return name;\n }\n}\n\n/*\n We use type guards instead of `instanceof` as `instanceof` makes\n different parts of the compiler depend on the actual implementation of\n the model classes, which in turn depend on different parts of the compiler.\n Thus, `instanceof` leads to circular dependency problems.\n\n On the other hand, type guards only make different parts of the compiler\n depend on the type of the model classes, but not the actual implementation.\n*/\n\nexport function isUnitModel(model: Model): model is UnitModel {\n return model?.type === 'unit';\n}\n\nexport function isFacetModel(model: Model): model is FacetModel {\n return model?.type === 'facet';\n}\n\nexport function isConcatModel(model: Model): model is ConcatModel {\n return model?.type === 'concat';\n}\n\nexport function isLayerModel(model: Model): model is LayerModel {\n return model?.type === 'layer';\n}\n\nexport abstract class Model {\n public readonly name: string;\n\n public size: LayoutSizeMixins;\n\n public readonly title: TitleParams<SignalRef>;\n public readonly description: string;\n\n public readonly data: Data | null;\n public readonly transforms: Transform[];\n public readonly layout: GenericCompositionLayoutWithColumns;\n\n /** Name map for scales, which can be renamed by a model's parent. */\n protected scaleNameMap: NameMapInterface;\n\n /** Name map for projections, which can be renamed by a model's parent. */\n protected projectionNameMap: NameMapInterface;\n\n /** Name map for signals, which can be renamed by a model's parent. */\n protected signalNameMap: NameMapInterface;\n\n public readonly component: Component;\n\n public readonly view?: ViewBackground<SignalRef>;\n\n public abstract readonly children: Model[];\n\n constructor(\n spec: NormalizedSpec,\n public readonly type: SpecType,\n public readonly parent: Model,\n parentGivenName: string,\n public readonly config: Config<SignalRef>,\n resolve: Resolve,\n view?: ViewBackground<ExprRef | SignalRef>\n ) {\n this.parent = parent;\n this.config = config;\n this.view = replaceExprRef(view);\n\n // If name is not provided, always use parent's givenName to avoid name conflicts.\n this.name = spec.name ?? parentGivenName;\n this.title = isText(spec.title) ? {text: spec.title} : spec.title ? replaceExprRef(spec.title) : undefined;\n\n // Shared name maps\n this.scaleNameMap = parent ? parent.scaleNameMap : new NameMap();\n this.projectionNameMap = parent ? parent.projectionNameMap : new NameMap();\n this.signalNameMap = parent ? parent.signalNameMap : new NameMap();\n\n this.data = spec.data;\n\n this.description = spec.description;\n this.transforms = normalizeTransform(spec.transform ?? []);\n this.layout = type === 'layer' || type === 'unit' ? {} : extractCompositionLayout(spec, type, config);\n\n this.component = {\n data: {\n sources: parent ? parent.component.data.sources : [],\n outputNodes: parent ? parent.component.data.outputNodes : {},\n outputNodeRefCounts: parent ? parent.component.data.outputNodeRefCounts : {},\n // data is faceted if the spec is a facet spec or the parent has faceted data and data is undefined\n isFaceted: isFacetSpec(spec) || (parent?.component.data.isFaceted && spec.data === undefined)\n },\n layoutSize: new Split<LayoutSizeIndex>(),\n layoutHeaders: {row: {}, column: {}, facet: {}},\n mark: null,\n resolve: {\n scale: {},\n axis: {},\n legend: {},\n ...(resolve ? duplicate(resolve) : {})\n },\n selection: null,\n scales: null,\n projection: null,\n axes: {},\n legends: {}\n };\n }\n\n public get width(): SignalRef {\n return this.getSizeSignalRef('width');\n }\n\n public get height(): SignalRef {\n return this.getSizeSignalRef('height');\n }\n\n public parse() {\n this.parseScale();\n\n this.parseLayoutSize(); // depends on scale\n this.renameTopLevelLayoutSizeSignal();\n\n this.parseSelections();\n this.parseProjection();\n this.parseData(); // (pathorder) depends on markDef; selection filters depend on parsed selections; depends on projection because some transforms require the finalized projection name.\n this.parseAxesAndHeaders(); // depends on scale and layout size\n this.parseLegends(); // depends on scale, markDef\n this.parseMarkGroup(); // depends on data name, scale, layout size, axisGroup, and children's scale, axis, legend and mark.\n }\n\n public abstract parseData(): void;\n\n public abstract parseSelections(): void;\n\n public parseScale() {\n parseScales(this);\n }\n\n public parseProjection() {\n parseProjection(this);\n }\n\n public abstract parseLayoutSize(): void;\n\n /**\n * Rename top-level spec's size to be just width / height, ignoring model name.\n * This essentially merges the top-level spec's width/height signals with the width/height signals\n * to help us reduce redundant signals declaration.\n */\n private renameTopLevelLayoutSizeSignal() {\n if (this.getName('width') !== 'width') {\n this.renameSignal(this.getName('width'), 'width');\n }\n if (this.getName('height') !== 'height') {\n this.renameSignal(this.getName('height'), 'height');\n }\n }\n\n public abstract parseMarkGroup(): void;\n\n public abstract parseAxesAndHeaders(): void;\n\n public parseLegends() {\n parseLegend(this);\n }\n\n public abstract assembleSelectionTopLevelSignals(signals: NewSignal[]): NewSignal[];\n public abstract assembleSignals(): NewSignal[];\n\n public abstract assembleSelectionData(data: readonly VgData[]): readonly VgData[];\n\n public abstract assembleGroupStyle(): string | string[];\n\n private assembleEncodeFromView(view: ViewBackground<SignalRef>): VgEncodeEntry {\n // Exclude \"style\"\n const {style: _, ...baseView} = view;\n\n const e: VgEncodeEntry = {};\n for (const property of keys(baseView)) {\n const value = baseView[property];\n if (value !== undefined) {\n e[property] = signalOrValueRef(value);\n }\n }\n\n return e;\n }\n\n public assembleGroupEncodeEntry(isTopLevel: boolean): VgEncodeEntry {\n let encodeEntry: VgEncodeEntry = {};\n if (this.view) {\n encodeEntry = this.assembleEncodeFromView(this.view);\n }\n\n if (!isTopLevel) {\n // Descriptions are already added to the top-level description so we only need to add them to the inner views.\n if (this.description) {\n (encodeEntry as any)['description'] = signalOrValueRef(this.description);\n }\n\n // For top-level spec, we can set the global width and height signal to adjust the group size.\n // For other child specs, we have to manually set width and height in the encode entry.\n if (this.type === 'unit' || this.type === 'layer') {\n return {\n width: this.getSizeSignalRef('width'),\n height: this.getSizeSignalRef('height'),\n ...encodeEntry\n };\n }\n }\n\n return isEmpty(encodeEntry) ? undefined : encodeEntry;\n }\n\n public assembleLayout(): VgLayout {\n if (!this.layout) {\n return undefined;\n }\n\n const {spacing, ...layout} = this.layout;\n\n const {component, config} = this;\n const titleBand = assembleLayoutTitleBand(component.layoutHeaders, config);\n\n return {\n padding: spacing,\n ...this.assembleDefaultLayout(),\n ...layout,\n ...(titleBand ? {titleBand} : {})\n };\n }\n\n protected assembleDefaultLayout(): VgLayout {\n return {};\n }\n\n public abstract assembleLayoutSignals(): NewSignal[];\n\n public assembleHeaderMarks(): VgMarkGroup[] {\n const {layoutHeaders} = this.component;\n let headerMarks = [];\n\n for (const channel of FACET_CHANNELS) {\n if (layoutHeaders[channel].title) {\n headerMarks.push(assembleTitleGroup(this, channel));\n }\n }\n\n for (const channel of HEADER_CHANNELS) {\n headerMarks = headerMarks.concat(assembleHeaderGroups(this, channel));\n }\n return headerMarks;\n }\n\n public abstract assembleMarks(): VgMarkGroup[];\n\n public assembleAxes(): VgAxis[] {\n return assembleAxes(this.component.axes, this.config);\n }\n\n public assembleLegends(): VgLegend[] {\n return assembleLegends(this);\n }\n\n public assembleProjections(): VgProjection[] {\n return assembleProjections(this);\n }\n\n public assembleTitle(): VgTitle {\n const {encoding, ...titleNoEncoding} = this.title ?? ({} as TitleParams<SignalRef>);\n\n const title: VgTitle = {\n ...extractTitleConfig(this.config.title).nonMarkTitleProperties,\n ...titleNoEncoding,\n ...(encoding ? {encode: {update: encoding}} : {})\n };\n\n if (title.text) {\n if (contains(['unit', 'layer'], this.type)) {\n // Unit/Layer\n if (contains<AnchorValue>(['middle', undefined], title.anchor)) {\n title.frame ??= 'group';\n }\n } else {\n // composition with Vega layout\n\n // Set title = \"start\" by default for composition as \"middle\" does not look nice\n // https://github.com/vega/vega/issues/960#issuecomment-471360328\n title.anchor ??= 'start';\n }\n\n return isEmpty(title) ? undefined : title;\n }\n return undefined;\n }\n\n /**\n * Assemble the mark group for this model. We accept optional `signals` so that we can include concat top-level signals with the top-level model's local signals.\n */\n public assembleGroup(signals: Signal[] = []) {\n const group: VgMarkGroup = {};\n\n signals = signals.concat(this.assembleSignals());\n\n if (signals.length > 0) {\n group.signals = signals;\n }\n\n const layout = this.assembleLayout();\n if (layout) {\n group.layout = layout;\n }\n\n group.marks = [].concat(this.assembleHeaderMarks(), this.assembleMarks());\n\n // Only include scales if this spec is top-level or if parent is facet.\n // (Otherwise, it will be merged with upper-level's scope.)\n const scales = !this.parent || isFacetModel(this.parent) ? assembleScales(this) : [];\n if (scales.length > 0) {\n group.scales = scales;\n }\n\n const axes = this.assembleAxes();\n if (axes.length > 0) {\n group.axes = axes;\n }\n\n const legends = this.assembleLegends();\n if (legends.length > 0) {\n group.legends = legends;\n }\n\n return group;\n }\n\n public getName(text: string) {\n return varName((this.name ? `${this.name}_` : '') + text);\n }\n\n public getDataName(type: DataSourceType) {\n return this.getName(DataSourceType[type].toLowerCase());\n }\n\n /**\n * Request a data source name for the given data source type and mark that data source as required.\n * This method should be called in parse, so that all used data source can be correctly instantiated in assembleData().\n * You can lookup the correct dataset name in assemble with `lookupDataSource`.\n */\n public requestDataName(name: DataSourceType) {\n const fullName = this.getDataName(name);\n\n // Increase ref count. This is critical because otherwise we won't create a data source.\n // We also increase the ref counts on OutputNode.getSource() calls.\n const refCounts = this.component.data.outputNodeRefCounts;\n refCounts[fullName] = (refCounts[fullName] || 0) + 1;\n\n return fullName;\n }\n\n public getSizeSignalRef(layoutSizeType: LayoutSizeType): SignalRef {\n if (isFacetModel(this.parent)) {\n const sizeType = getSizeTypeFromLayoutSizeType(layoutSizeType);\n const channel = getPositionScaleChannel(sizeType);\n const scaleComponent = this.component.scales[channel];\n\n if (scaleComponent && !scaleComponent.merged) {\n // independent scale\n const type = scaleComponent.get('type');\n const range = scaleComponent.get('range');\n\n if (hasDiscreteDomain(type) && isVgRangeStep(range)) {\n const scaleName = scaleComponent.get('name');\n const domain = assembleDomain(this, channel);\n const field = getFieldFromDomain(domain);\n if (field) {\n const fieldRef = vgField({aggregate: 'distinct', field}, {expr: 'datum'});\n return {\n signal: sizeExpr(scaleName, scaleComponent, fieldRef)\n };\n } else {\n log.warn(log.message.unknownField(channel));\n return null;\n }\n }\n }\n }\n\n return {\n signal: this.signalNameMap.get(this.getName(layoutSizeType))\n };\n }\n\n /**\n * Lookup the name of the datasource for an output node. You probably want to call this in assemble.\n */\n public lookupDataSource(name: string) {\n const node = this.component.data.outputNodes[name];\n\n if (!node) {\n // Name not found in map so let's just return what we got.\n // This can happen if we already have the correct name.\n return name;\n }\n\n return node.getSource();\n }\n\n public getSignalName(oldSignalName: string): string {\n return this.signalNameMap.get(oldSignalName);\n }\n\n public renameSignal(oldName: string, newName: string) {\n this.signalNameMap.rename(oldName, newName);\n }\n\n public renameScale(oldName: string, newName: string) {\n this.scaleNameMap.rename(oldName, newName);\n }\n\n public renameProjection(oldName: string, newName: string) {\n this.projectionNameMap.rename(oldName, newName);\n }\n\n /**\n * @return scale name for a given channel after the scale has been parsed and named.\n */\n public scaleName(originalScaleName: ScaleChannel | string, parse?: boolean): string {\n if (parse) {\n // During the parse phase always return a value\n // No need to refer to rename map because a scale can't be renamed\n // before it has the original name.\n return this.getName(originalScaleName);\n }\n\n // If there is a scale for the channel, it should either\n // be in the scale component or exist in the name map\n if (\n // If there is a scale for the channel, there should be a local scale component for it\n (isChannel(originalScaleName) && isScaleChannel(originalScaleName) && this.component.scales[originalScaleName]) ||\n // in the scale name map (the scale get merged by its parent)\n this.scaleNameMap.has(this.getName(originalScaleName))\n ) {\n return this.scaleNameMap.get(this.getName(originalScaleName));\n }\n return undefined;\n }\n\n /**\n * @return projection name after the projection has been parsed and named.\n */\n public projectionName(parse?: boolean): string {\n if (parse) {\n // During the parse phase always return a value\n // No need to refer to rename map because a projection can't be renamed\n // before it has the original name.\n return this.getName('projection');\n }\n\n if (\n (this.component.projection && !this.component.projection.merged) ||\n this.projectionNameMap.has(this.getName('projection'))\n ) {\n return this.projectionNameMap.get(this.getName('projection'));\n }\n return undefined;\n }\n\n /**\n * Traverse a model's hierarchy to get the scale component for a particular channel.\n */\n public getScaleComponent(channel: ScaleChannel): ScaleComponent {\n /* istanbul ignore next: This is warning for debugging test */\n if (!this.component.scales) {\n throw new Error(\n 'getScaleComponent cannot be called before parseScale(). Make sure you have called parseScale or use parseUnitModelWithScale().'\n );\n }\n\n const localScaleComponent = this.component.scales[channel];\n if (localScaleComponent && !localScaleComponent.merged) {\n return localScaleComponent;\n }\n return this.parent ? this.parent.getScaleComponent(channel) : undefined;\n }\n\n public getScaleType(channel: ScaleChannel): ScaleType {\n const scaleComponent = this.getScaleComponent(channel);\n return scaleComponent ? scaleComponent.get('type') : undefined;\n }\n\n /**\n * Traverse a model's hierarchy to get a particular selection component.\n */\n public getSelectionComponent(variableName: string, origName: string): SelectionComponent {\n let sel = this.component.selection[variableName];\n if (!sel && this.parent) {\n sel = this.parent.getSelectionComponent(variableName, origName);\n }\n if (!sel) {\n throw new Error(log.message.selectionNotFound(origName));\n }\n return sel;\n }\n\n /**\n * Returns true if the model has a signalRef for an axis orient.\n */\n public hasAxisOrientSignalRef() {\n return (\n this.component.axes.x?.some(a => a.hasOrientSignalRef()) ||\n this.component.axes.y?.some(a => a.hasOrientSignalRef())\n );\n }\n}\n\n/** Abstract class for UnitModel and FacetModel. Both of which can contain fieldDefs as a part of its own specification. */\nexport abstract class ModelWithField extends Model {\n public abstract fieldDef(channel: SingleDefChannel): FieldDef<any>;\n\n /** Get \"field\" reference for Vega */\n public vgField(channel: SingleDefChannel, opt: FieldRefOption = {}) {\n const fieldDef = this.fieldDef(channel);\n\n if (!fieldDef) {\n return undefined;\n }\n\n return vgField(fieldDef, opt);\n }\n\n protected abstract getMapping(): Partial<Record<ExtendedChannel, any>>;\n\n public reduceFieldDef<T, U>(f: (acc: U, fd: FieldDef<string>, c: Channel) => U, init: T): T {\n return reduce(\n this.getMapping(),\n (acc: U, cd: ChannelDef, c: Channel) => {\n const fieldDef = getFieldDef(cd);\n if (fieldDef) {\n return f(acc, fieldDef, c);\n }\n return acc;\n },\n init\n );\n }\n\n public forEachFieldDef(f: (fd: FieldDef<string>, c: ExtendedChannel) => void, t?: any) {\n forEach(\n this.getMapping(),\n (cd, c) => {\n const fieldDef = getFieldDef(cd);\n if (fieldDef) {\n f(fieldDef, c);\n }\n },\n t\n );\n }\n\n public abstract channelHasField(channel: Channel): boolean;\n}\n", "import {KDETransform as VgKDETransform} from 'vega';\nimport {DensityTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for density transform nodes\n */\nexport class DensityTransformNode extends DataFlowNode {\n public clone() {\n return new DensityTransformNode(null, duplicate(this.transform));\n }\n\n constructor(\n parent: DataFlowNode,\n private transform: DensityTransform\n ) {\n super(parent);\n this.transform = duplicate(transform); // duplicate to prevent side effects\n const specifiedAs = this.transform.as ?? [undefined, undefined];\n this.transform.as = [specifiedAs[0] ?? 'value', specifiedAs[1] ?? 'density'];\n const resolve = this.transform.resolve ?? 'shared';\n this.transform.resolve = resolve;\n }\n\n public dependentFields() {\n return new Set([this.transform.density, ...(this.transform.groupby ?? [])]);\n }\n\n public producedFields() {\n return new Set(this.transform.as);\n }\n\n public hash() {\n return `DensityTransform ${hash(this.transform)}`;\n }\n\n public assemble(): VgKDETransform {\n const {density, ...rest} = this.transform;\n const result: VgKDETransform = {\n type: 'kde',\n field: density,\n ...rest\n };\n result.resolve = this.transform.resolve;\n return result;\n }\n}\n", "import {ExtentTransform as VgExtentTransform} from 'vega';\nimport {ExtentTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for flatten transform nodes\n */\nexport class ExtentTransformNode extends DataFlowNode {\n public clone() {\n return new ExtentTransformNode(null, duplicate(this.transform));\n }\n\n constructor(\n parent: DataFlowNode,\n private transform: ExtentTransform\n ) {\n super(parent);\n this.transform = duplicate(transform);\n }\n\n public dependentFields() {\n return new Set([this.transform.extent]);\n }\n\n public producedFields() {\n return new Set([]);\n }\n\n public hash() {\n return `ExtentTransform ${hash(this.transform)}`;\n }\n\n public assemble(): VgExtentTransform {\n const {extent, param} = this.transform;\n const result: VgExtentTransform = {\n type: 'extent',\n field: extent,\n signal: param\n };\n return result;\n }\n}\n", "import type {FlattenTransform as VgFlattenTransform} from 'vega';\nimport {FlattenTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for flatten transform nodes\n */\nexport class FlattenTransformNode extends DataFlowNode {\n public clone() {\n return new FlattenTransformNode(this.parent, duplicate(this.transform));\n }\n\n constructor(\n parent: DataFlowNode,\n private transform: FlattenTransform\n ) {\n super(parent);\n this.transform = duplicate(transform); // duplicate to prevent side effects\n const {flatten, as = []} = this.transform;\n this.transform.as = flatten.map((f, i) => as[i] ?? f);\n }\n\n public dependentFields() {\n return new Set(this.transform.flatten);\n }\n\n public producedFields() {\n return new Set(this.transform.as);\n }\n\n public hash() {\n return `FlattenTransform ${hash(this.transform)}`;\n }\n\n public assemble(): VgFlattenTransform {\n const {flatten: fields, as} = this.transform;\n\n const result: VgFlattenTransform = {\n type: 'flatten',\n fields,\n as\n };\n return result;\n }\n}\n", "import type {FoldTransform as VgFoldTransform} from 'vega';\nimport {FoldTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for flatten transform nodes\n */\nexport class FoldTransformNode extends DataFlowNode {\n public clone() {\n return new FoldTransformNode(null, duplicate(this.transform));\n }\n\n constructor(\n parent: DataFlowNode,\n private transform: FoldTransform\n ) {\n super(parent);\n this.transform = duplicate(transform); // duplicate to prevent side effects\n const specifiedAs = this.transform.as ?? [undefined, undefined];\n this.transform.as = [specifiedAs[0] ?? 'key', specifiedAs[1] ?? 'value'];\n }\n\n public dependentFields() {\n return new Set(this.transform.fold);\n }\n\n public producedFields() {\n return new Set(this.transform.as);\n }\n\n public hash() {\n return `FoldTransform ${hash(this.transform)}`;\n }\n\n public assemble(): VgFoldTransform {\n const {fold, as} = this.transform;\n const result: VgFoldTransform = {\n type: 'fold',\n fields: fold,\n as\n };\n return result;\n }\n}\n", "import {Transforms as VgTransform, Vector2} from 'vega';\nimport {isString} from 'vega-util';\nimport {GeoPositionChannel, LATITUDE, LATITUDE2, LONGITUDE, LONGITUDE2, SHAPE} from '../../channel';\nimport {getFieldOrDatumDef, isDatumDef, isFieldDef, isValueDef} from '../../channeldef';\nimport {GEOJSON} from '../../type';\nimport {duplicate, hash} from '../../util';\nimport {VgExprRef} from '../../vega.schema';\nimport {UnitModel} from '../unit';\nimport {DataFlowNode} from './dataflow';\n\nexport class GeoJSONNode extends DataFlowNode {\n public clone() {\n return new GeoJSONNode(null, duplicate(this.fields), this.geojson, this.signal);\n }\n\n public static parseAll(parent: DataFlowNode, model: UnitModel): DataFlowNode {\n if (model.component.projection && !model.component.projection.isFit) {\n return parent;\n }\n\n let geoJsonCounter = 0;\n\n for (const coordinates of [\n [LONGITUDE, LATITUDE],\n [LONGITUDE2, LATITUDE2]\n ] as Vector2<GeoPositionChannel>[]) {\n const pair = coordinates.map(channel => {\n const def = getFieldOrDatumDef(model.encoding[channel]);\n return isFieldDef(def)\n ? def.field\n : isDatumDef(def)\n ? {expr: `${def.datum}`}\n : isValueDef(def)\n ? {expr: `${def['value']}`}\n : undefined;\n }) as [GeoPositionChannel, GeoPositionChannel];\n\n if (pair[0] || pair[1]) {\n parent = new GeoJSONNode(parent, pair, null, model.getName(`geojson_${geoJsonCounter++}`));\n }\n }\n\n if (model.channelHasField(SHAPE)) {\n const fieldDef = model.typedFieldDef(SHAPE);\n if (fieldDef.type === GEOJSON) {\n parent = new GeoJSONNode(parent, null, fieldDef.field, model.getName(`geojson_${geoJsonCounter++}`));\n }\n }\n\n return parent;\n }\n\n constructor(\n parent: DataFlowNode,\n private fields?: Vector2<string | VgExprRef>,\n private geojson?: string,\n private signal?: string\n ) {\n super(parent);\n }\n\n public dependentFields() {\n const fields = (this.fields ?? []).filter(isString) as string[];\n return new Set([...(this.geojson ? [this.geojson] : []), ...fields]);\n }\n\n public producedFields() {\n return new Set<string>();\n }\n\n public hash() {\n return `GeoJSON ${this.geojson} ${this.signal} ${hash(this.fields)}`;\n }\n\n public assemble(): VgTransform[] {\n return [\n ...(this.geojson\n ? [\n {\n type: 'filter',\n expr: `isValid(datum[\"${this.geojson}\"])`\n } as const\n ]\n : []),\n {\n type: 'geojson',\n ...(this.fields ? {fields: this.fields} : {}),\n ...(this.geojson ? {geojson: this.geojson} : {}),\n signal: this.signal\n }\n ];\n }\n}\n", "import {GeoPointTransform as VgGeoPointTransform, Vector2} from 'vega';\nimport {isString} from 'vega-util';\nimport {GeoPositionChannel, LATITUDE, LATITUDE2, LONGITUDE, LONGITUDE2} from '../../channel';\nimport {getFieldOrDatumDef, isDatumDef, isFieldDef, isValueDef} from '../../channeldef';\nimport {duplicate, hash} from '../../util';\nimport {VgExprRef} from '../../vega.schema';\nimport {UnitModel} from '../unit';\nimport {DataFlowNode} from './dataflow';\n\nexport class GeoPointNode extends DataFlowNode {\n public clone() {\n return new GeoPointNode(null, this.projection, duplicate(this.fields), duplicate(this.as));\n }\n\n constructor(\n parent: DataFlowNode,\n private projection: string,\n private fields: [string | VgExprRef, string | VgExprRef],\n private as: [string, string]\n ) {\n super(parent);\n }\n\n public static parseAll(parent: DataFlowNode, model: UnitModel): DataFlowNode {\n if (!model.projectionName()) {\n return parent;\n }\n\n for (const coordinates of [\n [LONGITUDE, LATITUDE],\n [LONGITUDE2, LATITUDE2]\n ] as Vector2<GeoPositionChannel>[]) {\n const pair = coordinates.map(channel => {\n const def = getFieldOrDatumDef(model.encoding[channel]);\n return isFieldDef(def)\n ? def.field\n : isDatumDef(def)\n ? {expr: `${def.datum}`}\n : isValueDef(def)\n ? {expr: `${def['value']}`}\n : undefined;\n }) as [GeoPositionChannel, GeoPositionChannel];\n\n const suffix = coordinates[0] === LONGITUDE2 ? '2' : '';\n\n if (pair[0] || pair[1]) {\n parent = new GeoPointNode(parent, model.projectionName(), pair, [\n model.getName(`x${suffix}`),\n model.getName(`y${suffix}`)\n ]);\n }\n }\n\n return parent;\n }\n\n public dependentFields() {\n return new Set(this.fields.filter(isString));\n }\n\n public producedFields() {\n return new Set(this.as);\n }\n\n public hash() {\n return `Geopoint ${this.projection} ${hash(this.fields)} ${hash(this.as)}`;\n }\n\n public assemble(): VgGeoPointTransform {\n return {\n type: 'geopoint',\n projection: this.projection,\n fields: this.fields,\n as: this.as\n };\n }\n}\n", "import {\n FormulaTransform as VgFormulaTransform,\n ImputeTransform as VgImputeTransform,\n SignalRef,\n WindowTransform as VgWindowTransform\n} from 'vega';\nimport {isFieldDef} from '../../channeldef';\nimport {pathGroupingFields} from '../../encoding';\nimport {ImputeSequence, ImputeTransform, isImputeSequence} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {UnitModel} from '../unit';\nimport {DataFlowNode} from './dataflow';\n\nexport class ImputeNode extends DataFlowNode {\n public clone() {\n return new ImputeNode(null, duplicate(this.transform));\n }\n\n constructor(\n parent: DataFlowNode,\n private readonly transform: ImputeTransform\n ) {\n super(parent);\n }\n\n public dependentFields() {\n return new Set([this.transform.impute, this.transform.key, ...(this.transform.groupby ?? [])]);\n }\n\n public producedFields() {\n return new Set([this.transform.impute]);\n }\n\n private processSequence(keyvals: ImputeSequence): SignalRef {\n const {start = 0, stop, step} = keyvals;\n const result = [start, stop, ...(step ? [step] : [])].join(',');\n\n return {signal: `sequence(${result})`};\n }\n\n public static makeFromTransform(parent: DataFlowNode, imputeTransform: ImputeTransform): ImputeNode {\n return new ImputeNode(parent, imputeTransform);\n }\n\n public static makeFromEncoding(parent: DataFlowNode, model: UnitModel) {\n const encoding = model.encoding;\n const xDef = encoding.x;\n const yDef = encoding.y;\n\n if (isFieldDef(xDef) && isFieldDef(yDef)) {\n const imputedChannel = xDef.impute ? xDef : yDef.impute ? yDef : undefined;\n if (imputedChannel === undefined) {\n return undefined;\n }\n const keyChannel = xDef.impute ? yDef : yDef.impute ? xDef : undefined;\n const {method, value, frame, keyvals} = imputedChannel.impute;\n const groupbyFields = pathGroupingFields(model.mark, encoding);\n\n return new ImputeNode(parent, {\n impute: imputedChannel.field,\n key: keyChannel.field,\n ...(method ? {method} : {}),\n ...(value !== undefined ? {value} : {}),\n ...(frame ? {frame} : {}),\n ...(keyvals !== undefined ? {keyvals} : {}),\n ...(groupbyFields.length ? {groupby: groupbyFields} : {})\n });\n }\n return null;\n }\n\n public hash() {\n return `Impute ${hash(this.transform)}`;\n }\n\n public assemble() {\n const {impute, key, keyvals, method, groupby, value, frame = [null, null] as [null, null]} = this.transform;\n\n const imputeTransform: VgImputeTransform = {\n type: 'impute',\n field: impute,\n key,\n ...(keyvals ? {keyvals: isImputeSequence(keyvals) ? this.processSequence(keyvals) : keyvals} : {}),\n method: 'value',\n ...(groupby ? {groupby} : {}),\n value: !method || method === 'value' ? value : null\n };\n\n if (method && method !== 'value') {\n const deriveNewField: VgWindowTransform = {\n type: 'window',\n as: [`imputed_${impute}_value`],\n ops: [method],\n fields: [impute],\n frame,\n ignorePeers: false,\n ...(groupby ? {groupby} : {})\n };\n const replaceOriginal: VgFormulaTransform = {\n type: 'formula',\n expr: `datum.${impute} === null ? datum.imputed_${impute}_value : datum.${impute}`,\n as: impute\n };\n return [imputeTransform, deriveNewField, replaceOriginal];\n } else {\n return [imputeTransform];\n }\n }\n}\n", "import {LoessTransform as VgLoessTransform} from 'vega';\nimport {LoessTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for loess transform nodes\n */\nexport class LoessTransformNode extends DataFlowNode {\n public clone() {\n return new LoessTransformNode(null, duplicate(this.transform));\n }\n\n constructor(\n parent: DataFlowNode,\n private transform: LoessTransform\n ) {\n super(parent);\n this.transform = duplicate(transform); // duplicate to prevent side effects\n const specifiedAs = this.transform.as ?? [undefined, undefined];\n this.transform.as = [specifiedAs[0] ?? transform.on, specifiedAs[1] ?? transform.loess];\n }\n\n public dependentFields() {\n return new Set([this.transform.loess, this.transform.on, ...(this.transform.groupby ?? [])]);\n }\n\n public producedFields() {\n return new Set(this.transform.as);\n }\n\n public hash() {\n return `LoessTransform ${hash(this.transform)}`;\n }\n\n public assemble(): VgLoessTransform {\n const {loess, on, ...rest} = this.transform;\n const result: VgLoessTransform = {\n type: 'loess',\n x: on,\n y: loess,\n ...rest\n };\n return result;\n }\n}\n", "import {LookupTransform as VgLookupTransform} from 'vega';\nimport {array, isString} from 'vega-util';\nimport * as log from '../../log';\nimport {isLookupData, isLookupSelection, LookupTransform} from '../../transform';\nimport {duplicate, hash, varName} from '../../util';\nimport {Model} from '../model';\nimport {DataFlowNode, OutputNode} from './dataflow';\nimport {findSource} from './parse';\nimport {SourceNode} from './source';\nimport {DataSourceType} from '../../data';\n\nexport class LookupNode extends DataFlowNode {\n public clone() {\n return new LookupNode(null, duplicate(this.transform), this.secondary);\n }\n\n constructor(\n parent: DataFlowNode,\n public readonly transform: LookupTransform,\n public readonly secondary: string\n ) {\n super(parent);\n }\n\n public static make(parent: DataFlowNode, model: Model, transform: LookupTransform, counter: number) {\n const sources = model.component.data.sources;\n const {from} = transform;\n let fromOutputNode = null;\n\n if (isLookupData(from)) {\n let fromSource = findSource(from.data, sources);\n\n if (!fromSource) {\n fromSource = new SourceNode(from.data);\n sources.push(fromSource);\n }\n\n const fromOutputName = model.getName(`lookup_${counter}`);\n fromOutputNode = new OutputNode(\n fromSource,\n fromOutputName,\n DataSourceType.Lookup,\n model.component.data.outputNodeRefCounts\n );\n model.component.data.outputNodes[fromOutputName] = fromOutputNode;\n } else if (isLookupSelection(from)) {\n const selName = from.param;\n transform = {as: selName, ...transform};\n let selCmpt;\n\n try {\n selCmpt = model.getSelectionComponent(varName(selName), selName);\n } catch (e) {\n throw new Error(log.message.cannotLookupVariableParameter(selName));\n }\n\n fromOutputNode = selCmpt.materialized;\n if (!fromOutputNode) {\n throw new Error(log.message.noSameUnitLookup(selName));\n }\n }\n\n return new LookupNode(parent, transform, fromOutputNode.getSource());\n }\n\n public dependentFields() {\n return new Set([this.transform.lookup]);\n }\n\n public producedFields() {\n return new Set(this.transform.as ? array(this.transform.as) : this.transform.from.fields);\n }\n\n public hash() {\n return `Lookup ${hash({transform: this.transform, secondary: this.secondary})}`;\n }\n\n public assemble(): VgLookupTransform {\n let foreign: Partial<VgLookupTransform>;\n\n if (this.transform.from.fields) {\n // lookup a few fields and add create a flat output\n foreign = {\n values: this.transform.from.fields,\n ...(this.transform.as ? {as: array(this.transform.as)} : {})\n };\n } else {\n // lookup full record and nest it\n let asName = this.transform.as;\n if (!isString(asName)) {\n log.warn(log.message.NO_FIELDS_NEEDS_AS);\n asName = '_lookup';\n }\n\n foreign = {\n as: [asName]\n };\n }\n\n return {\n type: 'lookup',\n from: this.secondary,\n key: this.transform.from.key,\n fields: [this.transform.lookup],\n ...foreign,\n ...(this.transform.default ? {default: this.transform.default} : {})\n };\n }\n}\n", "import {QuantileTransform as VgQuantileTransform} from 'vega';\nimport {QuantileTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for quantile transform nodes\n */\nexport class QuantileTransformNode extends DataFlowNode {\n public clone() {\n return new QuantileTransformNode(null, duplicate(this.transform));\n }\n\n constructor(\n parent: DataFlowNode,\n private transform: QuantileTransform\n ) {\n super(parent);\n this.transform = duplicate(transform); // duplicate to prevent side effects\n const specifiedAs = this.transform.as ?? [undefined, undefined];\n this.transform.as = [specifiedAs[0] ?? 'prob', specifiedAs[1] ?? 'value'];\n }\n\n public dependentFields() {\n return new Set([this.transform.quantile, ...(this.transform.groupby ?? [])]);\n }\n\n public producedFields() {\n return new Set(this.transform.as);\n }\n\n public hash() {\n return `QuantileTransform ${hash(this.transform)}`;\n }\n\n public assemble(): VgQuantileTransform {\n const {quantile, ...rest} = this.transform;\n const result: VgQuantileTransform = {\n type: 'quantile',\n field: quantile,\n ...rest\n };\n return result;\n }\n}\n", "import {RegressionTransform as VgRegressionTransform} from 'vega';\nimport {RegressionTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for regression transform nodes\n */\nexport class RegressionTransformNode extends DataFlowNode {\n public clone() {\n return new RegressionTransformNode(null, duplicate(this.transform));\n }\n\n constructor(\n parent: DataFlowNode,\n private transform: RegressionTransform\n ) {\n super(parent);\n this.transform = duplicate(transform); // duplicate to prevent side effects\n const specifiedAs = this.transform.as ?? [undefined, undefined];\n this.transform.as = [specifiedAs[0] ?? transform.on, specifiedAs[1] ?? transform.regression];\n }\n\n public dependentFields() {\n return new Set([this.transform.regression, this.transform.on, ...(this.transform.groupby ?? [])]);\n }\n\n public producedFields() {\n return new Set(this.transform.as);\n }\n\n public hash() {\n return `RegressionTransform ${hash(this.transform)}`;\n }\n\n public assemble(): VgRegressionTransform {\n const {regression, on, ...rest} = this.transform;\n const result: VgRegressionTransform = {\n type: 'regression',\n x: on,\n y: regression,\n ...rest\n };\n return result;\n }\n}\n", "import {PivotTransform} from '../../transform';\nimport {duplicate, hash, unique} from '../../util';\nimport {PivotTransform as VgPivotTransform} from 'vega';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for pivot transform nodes.\n */\nexport class PivotTransformNode extends DataFlowNode {\n public clone() {\n return new PivotTransformNode(null, duplicate(this.transform));\n }\n\n constructor(\n parent: DataFlowNode,\n private transform: PivotTransform\n ) {\n super(parent);\n }\n\n public addDimensions(fields: readonly string[]) {\n this.transform.groupby = unique((this.transform.groupby ?? []).concat(fields), d => d);\n }\n\n public producedFields(): undefined {\n return undefined; // return undefined so that potentially everything can depend on the pivot\n }\n\n public dependentFields() {\n return new Set([this.transform.pivot, this.transform.value, ...(this.transform.groupby ?? [])]);\n }\n\n public hash() {\n return `PivotTransform ${hash(this.transform)}`;\n }\n\n public assemble(): VgPivotTransform {\n const {pivot, value, groupby, limit, op} = this.transform;\n return {\n type: 'pivot',\n field: pivot,\n value,\n ...(limit !== undefined ? {limit} : {}),\n ...(op !== undefined ? {op} : {}),\n ...(groupby !== undefined ? {groupby} : {})\n };\n }\n}\n", "import {SampleTransform as VgSampleTransform} from 'vega';\nimport {SampleTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for the sample transform nodes\n */\nexport class SampleTransformNode extends DataFlowNode {\n public clone() {\n return new SampleTransformNode(null, duplicate(this.transform));\n }\n\n constructor(\n parent: DataFlowNode,\n private transform: SampleTransform\n ) {\n super(parent);\n }\n\n public dependentFields() {\n return new Set<string>();\n }\n\n public producedFields() {\n return new Set<string>();\n }\n\n public hash() {\n return `SampleTransform ${hash(this.transform)}`;\n }\n\n public assemble(): VgSampleTransform {\n return {\n type: 'sample',\n size: this.transform.sample\n };\n }\n}\n", "import {InlineDataset, isUrlData} from '../../data';\nimport {Dict} from '../../util';\nimport {VgData} from '../../vega.schema';\nimport {DataComponent} from './';\nimport {AggregateNode} from './aggregate';\nimport {BinNode} from './bin';\nimport {CalculateNode} from './calculate';\nimport {DataFlowNode, OutputNode} from './dataflow';\nimport {DensityTransformNode} from './density';\nimport {ExtentTransformNode} from './extent';\nimport {FacetNode} from './facet';\nimport {FilterNode} from './filter';\nimport {FilterInvalidNode} from './filterinvalid';\nimport {FlattenTransformNode} from './flatten';\nimport {FoldTransformNode} from './fold';\nimport {ParseNode} from './formatparse';\nimport {GeoJSONNode} from './geojson';\nimport {GeoPointNode} from './geopoint';\nimport {GraticuleNode} from './graticule';\nimport {IdentifierNode} from './identifier';\nimport {ImputeNode} from './impute';\nimport {JoinAggregateTransformNode} from './joinaggregate';\nimport {LoessTransformNode} from './loess';\nimport {LookupNode} from './lookup';\nimport {QuantileTransformNode} from './quantile';\nimport {RegressionTransformNode} from './regression';\nimport {PivotTransformNode} from './pivot';\nimport {SampleTransformNode} from './sample';\nimport {SequenceNode} from './sequence';\nimport {SourceNode} from './source';\nimport {StackNode} from './stack';\nimport {TimeUnitNode} from './timeunit';\nimport {WindowTransformNode} from './window';\n\nfunction makeWalkTree(data: VgData[]) {\n // to name datasources\n let datasetIndex = 0;\n\n /**\n * Recursively walk down the tree.\n */\n function walkTree(node: DataFlowNode, dataSource: VgData) {\n if (node instanceof SourceNode) {\n // If the source is a named data source or a data source with values, we need\n // to put it in a different data source. Otherwise, Vega may override the data.\n if (!node.isGenerator && !isUrlData(node.data)) {\n data.push(dataSource);\n const newData: VgData = {\n name: null,\n source: dataSource.name,\n transform: []\n };\n dataSource = newData;\n }\n }\n\n if (node instanceof ParseNode) {\n if (node.parent instanceof SourceNode && !dataSource.source) {\n // If node's parent is a root source and the data source does not refer to another data source, use normal format parse\n dataSource.format = {\n ...dataSource.format,\n parse: node.assembleFormatParse()\n };\n\n // add calculates for all nested fields\n dataSource.transform.push(...node.assembleTransforms(true));\n } else {\n // Otherwise use Vega expression to parse\n dataSource.transform.push(...node.assembleTransforms());\n }\n }\n\n if (node instanceof FacetNode) {\n if (!dataSource.name) {\n dataSource.name = `data_${datasetIndex++}`;\n }\n\n if (!dataSource.source || dataSource.transform.length > 0) {\n data.push(dataSource);\n node.data = dataSource.name;\n } else {\n node.data = dataSource.source;\n }\n\n data.push(...node.assemble());\n\n // break here because the rest of the tree has to be taken care of by the facet.\n return;\n }\n\n if (\n node instanceof GraticuleNode ||\n node instanceof SequenceNode ||\n node instanceof FilterInvalidNode ||\n node instanceof FilterNode ||\n node instanceof CalculateNode ||\n node instanceof GeoPointNode ||\n node instanceof AggregateNode ||\n node instanceof LookupNode ||\n node instanceof WindowTransformNode ||\n node instanceof JoinAggregateTransformNode ||\n node instanceof FoldTransformNode ||\n node instanceof FlattenTransformNode ||\n node instanceof DensityTransformNode ||\n node instanceof LoessTransformNode ||\n node instanceof QuantileTransformNode ||\n node instanceof RegressionTransformNode ||\n node instanceof IdentifierNode ||\n node instanceof SampleTransformNode ||\n node instanceof PivotTransformNode ||\n node instanceof ExtentTransformNode\n ) {\n dataSource.transform.push(node.assemble());\n }\n\n if (\n node instanceof BinNode ||\n node instanceof TimeUnitNode ||\n node instanceof ImputeNode ||\n node instanceof StackNode ||\n node instanceof GeoJSONNode\n ) {\n dataSource.transform.push(...node.assemble());\n }\n\n if (node instanceof OutputNode) {\n if (dataSource.source && dataSource.transform.length === 0) {\n node.setSource(dataSource.source);\n } else if (node.parent instanceof OutputNode) {\n // Note that an output node may be required but we still do not assemble a\n // separate data source for it.\n node.setSource(dataSource.name);\n } else {\n if (!dataSource.name) {\n dataSource.name = `data_${datasetIndex++}`;\n }\n\n // Here we set the name of the datasource we generated. From now on\n // other assemblers can use it.\n node.setSource(dataSource.name);\n\n // if this node has more than one child, we will add a datasource automatically\n if (node.numChildren() === 1) {\n data.push(dataSource);\n const newData: VgData = {\n name: null,\n source: dataSource.name,\n transform: []\n };\n dataSource = newData;\n }\n }\n }\n\n switch (node.numChildren()) {\n case 0:\n // done\n if (node instanceof OutputNode && (!dataSource.source || dataSource.transform.length > 0)) {\n // do not push empty datasources that are simply references\n data.push(dataSource);\n }\n break;\n case 1:\n walkTree(node.children[0], dataSource);\n break;\n default: {\n if (!dataSource.name) {\n dataSource.name = `data_${datasetIndex++}`;\n }\n\n let source = dataSource.name;\n if (!dataSource.source || dataSource.transform.length > 0) {\n data.push(dataSource);\n } else {\n source = dataSource.source;\n }\n\n for (const child of node.children) {\n const newData: VgData = {\n name: null,\n source,\n transform: []\n };\n walkTree(child, newData);\n }\n break;\n }\n }\n }\n\n return walkTree;\n}\n\n/**\n * Assemble data sources that are derived from faceted data.\n */\nexport function assembleFacetData(root: FacetNode): VgData[] {\n const data: VgData[] = [];\n const walkTree = makeWalkTree(data);\n\n for (const child of root.children) {\n walkTree(child, {\n source: root.name,\n name: null,\n transform: []\n });\n }\n\n return data;\n}\n\n/**\n * Create Vega data array from a given compiled model and append all of them to the given array\n *\n * @param model\n * @param data array\n * @return modified data array\n */\nexport function assembleRootData(dataComponent: DataComponent, datasets: Dict<InlineDataset>): VgData[] {\n const data: VgData[] = [];\n\n // dataComponent.sources.forEach(debug);\n // draw(dataComponent.sources);\n\n const walkTree = makeWalkTree(data);\n\n let sourceIndex = 0;\n\n for (const root of dataComponent.sources) {\n // assign a name if the source does not have a name yet\n if (!root.hasName()) {\n root.dataName = `source_${sourceIndex++}`;\n }\n\n const newData: VgData = root.assemble();\n\n walkTree(root, newData);\n }\n\n // remove empty transform arrays for cleaner output\n for (const d of data) {\n if (d.transform.length === 0) {\n delete d.transform;\n }\n }\n\n // move sources without transforms (the ones that are potentially used in lookups) to the beginning\n let whereTo = 0;\n for (const [i, d] of data.entries()) {\n if ((d.transform ?? []).length === 0 && !d.source) {\n data.splice(whereTo++, 0, data.splice(i, 1)[0]);\n }\n }\n\n // now fix the from references in lookup transforms\n for (const d of data) {\n for (const t of d.transform ?? []) {\n if (t.type === 'lookup') {\n t.from = dataComponent.outputNodes[t.from].getSource();\n }\n }\n }\n\n // inline values for datasets that are in the datastore\n for (const d of data) {\n if (d.name in datasets) {\n d.values = datasets[d.name];\n }\n }\n\n return data;\n}\n", "import {AxisOrient, SignalRef} from 'vega';\nimport {isArray} from 'vega-util';\nimport {FacetChannel, FACET_CHANNELS} from '../../channel';\nimport {title as fieldDefTitle} from '../../channeldef';\nimport {contains, getFirstDefined} from '../../util';\nimport {isSignalRef} from '../../vega.schema';\nimport {assembleAxis} from '../axis/assemble';\nimport {FacetModel} from '../facet';\nimport {parseGuideResolve} from '../resolve';\nimport {getHeaderProperty} from './common';\nimport {HeaderChannel, HeaderComponent} from './component';\n\nexport function getHeaderType(orient: AxisOrient | SignalRef) {\n if (orient === 'top' || orient === 'left' || isSignalRef(orient)) {\n // we always use header for orient signal since we can't dynamically make header becomes footer\n return 'header';\n }\n return 'footer';\n}\n\nexport function parseFacetHeaders(model: FacetModel) {\n for (const channel of FACET_CHANNELS) {\n parseFacetHeader(model, channel);\n }\n\n mergeChildAxis(model, 'x');\n mergeChildAxis(model, 'y');\n}\n\nfunction parseFacetHeader(model: FacetModel, channel: FacetChannel) {\n const {facet, config, child, component} = model;\n if (model.channelHasField(channel)) {\n const fieldDef = facet[channel];\n const titleConfig = getHeaderProperty('title', null, config, channel);\n let title = fieldDefTitle(fieldDef, config, {\n allowDisabling: true,\n includeDefault: titleConfig === undefined || !!titleConfig\n });\n\n if (child.component.layoutHeaders[channel].title) {\n // TODO: better handle multiline titles\n title = isArray(title) ? title.join(', ') : title;\n\n // merge title with child to produce \"Title / Subtitle / Sub-subtitle\"\n title += ` / ${child.component.layoutHeaders[channel].title}`;\n child.component.layoutHeaders[channel].title = null;\n }\n\n const labelOrient = getHeaderProperty('labelOrient', fieldDef.header, config, channel);\n\n const labels =\n fieldDef.header !== null ? getFirstDefined(fieldDef.header?.labels, config.header.labels, true) : false;\n const headerType = contains(['bottom', 'right'], labelOrient) ? 'footer' : 'header';\n\n component.layoutHeaders[channel] = {\n title: fieldDef.header !== null ? title : null,\n facetFieldDef: fieldDef,\n [headerType]: channel === 'facet' ? [] : [makeHeaderComponent(model, channel, labels)]\n };\n }\n}\n\nfunction makeHeaderComponent(model: FacetModel, channel: HeaderChannel, labels: boolean): HeaderComponent {\n const sizeType = channel === 'row' ? 'height' : 'width';\n\n return {\n labels,\n sizeSignal: model.child.component.layoutSize.get(sizeType) ? model.child.getSizeSignalRef(sizeType) : undefined,\n axes: []\n };\n}\n\nfunction mergeChildAxis(model: FacetModel, channel: 'x' | 'y') {\n const {child} = model;\n if (child.component.axes[channel]) {\n const {layoutHeaders, resolve} = model.component;\n resolve.axis[channel] = parseGuideResolve(resolve, channel);\n\n if (resolve.axis[channel] === 'shared') {\n // For shared axis, move the axes to facet's header or footer\n const headerChannel = channel === 'x' ? 'column' : 'row';\n\n const layoutHeader = layoutHeaders[headerChannel];\n for (const axisComponent of child.component.axes[channel]) {\n const headerType = getHeaderType(axisComponent.get('orient'));\n layoutHeader[headerType] ??= [makeHeaderComponent(model, headerChannel, false)];\n\n // FIXME: assemble shouldn't be called here, but we do it this way so we only extract the main part of the axes\n const mainAxis = assembleAxis(axisComponent, 'main', model.config, {header: true});\n if (mainAxis) {\n // LayoutHeader no longer keep track of property precedence, thus let's combine.\n layoutHeader[headerType][0].axes.push(mainAxis);\n }\n axisComponent.mainExtracted = true;\n }\n } else {\n // Otherwise do nothing for independent axes\n }\n }\n}\n", "import {getPositionScaleChannel, getSizeChannel, POSITION_SCALE_CHANNELS} from '../../channel';\nimport {getViewConfigContinuousSize, getViewConfigDiscreteSize} from '../../config';\nimport {hasDiscreteDomain} from '../../scale';\nimport {isStep} from '../../spec/base';\nimport {isVgRangeStep} from '../../vega.schema';\nimport {ConcatModel} from '../concat';\nimport {Model} from '../model';\nimport {defaultScaleResolve} from '../resolve';\nimport {Explicit, mergeValuesWithExplicit} from '../split';\nimport {UnitModel} from '../unit';\nimport {getSizeTypeFromLayoutSizeType, LayoutSize, LayoutSizeIndex, LayoutSizeType} from './component';\n\nexport function parseLayerLayoutSize(model: Model) {\n parseChildrenLayoutSize(model);\n\n parseNonUnitLayoutSizeForChannel(model, 'width');\n parseNonUnitLayoutSizeForChannel(model, 'height');\n}\n\nexport function parseConcatLayoutSize(model: ConcatModel) {\n parseChildrenLayoutSize(model);\n\n // for columns === 1 (vconcat), we can completely merge width. Otherwise, we can treat merged width as childWidth.\n const widthType = model.layout.columns === 1 ? 'width' : 'childWidth';\n\n // for columns === undefined (hconcat), we can completely merge height. Otherwise, we can treat merged height as childHeight.\n const heightType = model.layout.columns === undefined ? 'height' : 'childHeight';\n\n parseNonUnitLayoutSizeForChannel(model, widthType);\n parseNonUnitLayoutSizeForChannel(model, heightType);\n}\n\nexport function parseChildrenLayoutSize(model: Model) {\n for (const child of model.children) {\n child.parseLayoutSize();\n }\n}\n\n/**\n * Merge child layout size (width or height).\n */\nfunction parseNonUnitLayoutSizeForChannel(model: Model, layoutSizeType: LayoutSizeType) {\n /*\n * For concat, the parent width or height might not be the same as the children's shared height.\n * For example, hconcat's subviews may share width, but the shared width is not the hconcat view's width.\n *\n * layoutSizeType represents the output of the view (could be childWidth/childHeight/width/height)\n * while the sizeType represents the properties of the child.\n */\n const sizeType = getSizeTypeFromLayoutSizeType(layoutSizeType);\n const channel = getPositionScaleChannel(sizeType);\n const resolve = model.component.resolve;\n const layoutSizeCmpt = model.component.layoutSize;\n\n let mergedSize: Explicit<LayoutSize>;\n // Try to merge layout size\n for (const child of model.children) {\n const childSize = child.component.layoutSize.getWithExplicit(sizeType);\n const scaleResolve = resolve.scale[channel] ?? defaultScaleResolve(channel, model);\n if (scaleResolve === 'independent' && childSize.value === 'step') {\n // Do not merge independent scales with range-step as their size depends\n // on the scale domains, which can be different between scales.\n mergedSize = undefined;\n break;\n }\n\n if (mergedSize) {\n if (scaleResolve === 'independent' && mergedSize.value !== childSize.value) {\n // For independent scale, only merge if all the sizes are the same.\n // If the values are different, abandon the merge!\n mergedSize = undefined;\n break;\n }\n mergedSize = mergeValuesWithExplicit<LayoutSizeIndex, LayoutSize>(mergedSize, childSize, sizeType, '');\n } else {\n mergedSize = childSize;\n }\n }\n\n if (mergedSize) {\n // If merged, rename size and set size of all children.\n for (const child of model.children) {\n model.renameSignal(child.getName(sizeType), model.getName(layoutSizeType));\n child.component.layoutSize.set(sizeType, 'merged', false);\n }\n layoutSizeCmpt.setWithExplicit(layoutSizeType, mergedSize);\n } else {\n layoutSizeCmpt.setWithExplicit(layoutSizeType, {\n explicit: false,\n value: undefined\n });\n }\n}\n\nexport function parseUnitLayoutSize(model: UnitModel) {\n const {size, component} = model;\n for (const channel of POSITION_SCALE_CHANNELS) {\n const sizeType = getSizeChannel(channel);\n\n if (size[sizeType]) {\n const specifiedSize = size[sizeType];\n component.layoutSize.set(sizeType, isStep(specifiedSize) ? 'step' : specifiedSize, true);\n } else {\n const defaultSize = defaultUnitSize(model, sizeType);\n component.layoutSize.set(sizeType, defaultSize, false);\n }\n }\n}\n\nfunction defaultUnitSize(model: UnitModel, sizeType: 'width' | 'height'): LayoutSize {\n const channel = sizeType === 'width' ? 'x' : 'y';\n const config = model.config;\n const scaleComponent = model.getScaleComponent(channel);\n\n if (scaleComponent) {\n const scaleType = scaleComponent.get('type');\n const range = scaleComponent.get('range');\n\n if (hasDiscreteDomain(scaleType)) {\n const size = getViewConfigDiscreteSize(config.view, sizeType);\n if (isVgRangeStep(range) || isStep(size)) {\n // For discrete domain with range.step, use dynamic width/height\n return 'step';\n } else {\n return size;\n }\n } else {\n return getViewConfigContinuousSize(config.view, sizeType);\n }\n } else if (model.hasProjection || model.mark === 'arc') {\n // arc should use continuous size by default otherwise the pie is extremely small\n return getViewConfigContinuousSize(config.view, sizeType);\n } else {\n const size = getViewConfigDiscreteSize(config.view, sizeType);\n return isStep(size) ? size.step : size;\n }\n}\n", "import {AggregateOp, LayoutAlign, NewSignal, SignalRef} from 'vega';\nimport {isArray} from 'vega-util';\nimport {isBinning} from '../bin';\nimport {COLUMN, ExtendedChannel, FacetChannel, FACET_CHANNELS, POSITION_SCALE_CHANNELS, ROW} from '../channel';\nimport {FieldName, FieldRefOption, initFieldDef, TypedFieldDef, vgField} from '../channeldef';\nimport {Config} from '../config';\nimport {ExprRef, replaceExprRef} from '../expr';\nimport * as log from '../log';\nimport {hasDiscreteDomain} from '../scale';\nimport {DEFAULT_SORT_OP, EncodingSortField, isSortField, SortOrder} from '../sort';\nimport {NormalizedFacetSpec} from '../spec';\nimport {EncodingFacetMapping, FacetFieldDef, FacetMapping, isFacetMapping} from '../spec/facet';\nimport {hasProperty, keys} from '../util';\nimport {isVgRangeStep, VgData, VgLayout, VgMarkGroup} from '../vega.schema';\nimport {buildModel} from './buildmodel';\nimport {assembleFacetData} from './data/assemble';\nimport {sortArrayIndexField} from './data/calculate';\nimport {parseData} from './data/parse';\nimport {assembleLabelTitle} from './header/assemble';\nimport {getHeaderChannel, getHeaderProperty} from './header/common';\nimport {HEADER_CHANNELS, HEADER_TYPES} from './header/component';\nimport {parseFacetHeaders} from './header/parse';\nimport {parseChildrenLayoutSize} from './layoutsize/parse';\nimport {Model, ModelWithField} from './model';\nimport {assembleDomain, getFieldFromDomain} from './scale/domain';\nimport {assembleFacetSignals} from './selection/assemble';\nimport {isTimerSelection} from './selection';\nimport {MULTI_VIEW_ANIMATION_UNSUPPORTED} from '../log/message';\n\nexport function facetSortFieldName(\n fieldDef: FacetFieldDef<string>,\n sort: EncodingSortField<string>,\n opt?: FieldRefOption\n) {\n return vgField(sort, {suffix: `by_${vgField(fieldDef)}`, ...opt});\n}\n\nexport class FacetModel extends ModelWithField {\n public readonly facet: EncodingFacetMapping<string, SignalRef>;\n\n public readonly child: Model;\n\n public readonly children: Model[];\n\n constructor(spec: NormalizedFacetSpec, parent: Model, parentGivenName: string, config: Config<SignalRef>) {\n super(spec, 'facet', parent, parentGivenName, config, spec.resolve);\n\n this.child = buildModel(spec.spec, this, this.getName('child'), undefined, config);\n this.children = [this.child];\n\n this.facet = this.initFacet(spec.facet);\n }\n\n private initFacet(\n facet: FacetFieldDef<FieldName> | FacetMapping<FieldName>\n ): EncodingFacetMapping<FieldName, SignalRef> {\n // clone to prevent side effect to the original spec\n if (!isFacetMapping(facet)) {\n return {facet: this.initFacetFieldDef(facet, 'facet')};\n }\n\n const channels = keys(facet);\n const normalizedFacet: EncodingFacetMapping<FieldName, SignalRef> = {};\n for (const channel of channels) {\n if (![ROW, COLUMN].includes(channel)) {\n // Drop unsupported channel\n log.warn(log.message.incompatibleChannel(channel, 'facet'));\n break;\n }\n\n const fieldDef = facet[channel];\n if (fieldDef.field === undefined) {\n log.warn(log.message.emptyFieldDef(fieldDef, channel));\n break;\n }\n\n normalizedFacet[channel] = this.initFacetFieldDef(fieldDef, channel);\n }\n\n return normalizedFacet;\n }\n\n private initFacetFieldDef(fieldDef: FacetFieldDef<FieldName, ExprRef | SignalRef>, channel: FacetChannel) {\n // Cast because we call initFieldDef, which assumes general FieldDef.\n // However, FacetFieldDef is a bit more constrained than the general FieldDef\n const facetFieldDef = initFieldDef(fieldDef, channel) as FacetFieldDef<FieldName, SignalRef>;\n if (facetFieldDef.header) {\n facetFieldDef.header = replaceExprRef(facetFieldDef.header);\n } else if (facetFieldDef.header === null) {\n facetFieldDef.header = null;\n }\n return facetFieldDef;\n }\n\n public channelHasField(channel: ExtendedChannel): boolean {\n return hasProperty(this.facet, channel);\n }\n\n public fieldDef(channel: ExtendedChannel): TypedFieldDef<string> {\n return (this.facet as any)[channel];\n }\n\n public parseData() {\n this.component.data = parseData(this);\n this.child.parseData();\n }\n\n public parseLayoutSize() {\n parseChildrenLayoutSize(this);\n }\n\n public parseSelections() {\n // As a facet has a single child, the selection components are the same.\n // The child maintains its selections to assemble signals, which remain\n // within its unit.\n this.child.parseSelections();\n this.component.selection = this.child.component.selection;\n\n if (Object.values(this.component.selection).some(selCmpt => isTimerSelection(selCmpt))) {\n log.error(MULTI_VIEW_ANIMATION_UNSUPPORTED);\n }\n }\n\n public parseMarkGroup() {\n this.child.parseMarkGroup();\n }\n\n public parseAxesAndHeaders() {\n this.child.parseAxesAndHeaders();\n\n parseFacetHeaders(this);\n }\n\n public assembleSelectionTopLevelSignals(signals: NewSignal[]): NewSignal[] {\n return this.child.assembleSelectionTopLevelSignals(signals);\n }\n\n public assembleSignals(): NewSignal[] {\n this.child.assembleSignals();\n return [];\n }\n\n public assembleSelectionData(data: readonly VgData[]): readonly VgData[] {\n return this.child.assembleSelectionData(data);\n }\n\n private getHeaderLayoutMixins(): VgLayout {\n const layoutMixins: VgLayout = {};\n\n for (const channel of FACET_CHANNELS) {\n for (const headerType of HEADER_TYPES) {\n const layoutHeaderComponent = this.component.layoutHeaders[channel];\n const headerComponent = layoutHeaderComponent[headerType];\n\n const {facetFieldDef} = layoutHeaderComponent;\n if (facetFieldDef) {\n const titleOrient = getHeaderProperty('titleOrient', facetFieldDef.header, this.config, channel);\n\n if (['right', 'bottom'].includes(titleOrient)) {\n const headerChannel = getHeaderChannel(channel, titleOrient);\n layoutMixins.titleAnchor ??= {};\n (layoutMixins.titleAnchor as any)[headerChannel] = 'end';\n }\n }\n\n if (headerComponent?.[0]) {\n // set header/footerBand\n const sizeType = channel === 'row' ? 'height' : 'width';\n const bandType = headerType === 'header' ? 'headerBand' : 'footerBand';\n if (channel !== 'facet' && !this.child.component.layoutSize.get(sizeType)) {\n // If facet child does not have size signal, then apply headerBand\n layoutMixins[bandType] ??= {};\n (layoutMixins[bandType] as any)[channel] = 0.5;\n }\n\n if (layoutHeaderComponent.title) {\n layoutMixins.offset ??= {};\n (layoutMixins.offset as any)[channel === 'row' ? 'rowTitle' : 'columnTitle'] = 10;\n }\n }\n }\n }\n return layoutMixins;\n }\n\n protected assembleDefaultLayout(): VgLayout {\n const {column, row} = this.facet;\n\n const columns = column ? this.columnDistinctSignal() : row ? 1 : undefined;\n\n let align: LayoutAlign = 'all';\n\n // Do not align the cells if the scale corresponding to the direction is indepent.\n // We always align when we facet into both row and column.\n if (!row && this.component.resolve.scale.x === 'independent') {\n align = 'none';\n } else if (!column && this.component.resolve.scale.y === 'independent') {\n align = 'none';\n }\n\n return {\n ...this.getHeaderLayoutMixins(),\n\n ...(columns ? {columns} : {}),\n bounds: 'full',\n align\n };\n }\n\n public assembleLayoutSignals(): NewSignal[] {\n // FIXME(https://github.com/vega/vega-lite/issues/1193): this can be incorrect if we have independent scales.\n return this.child.assembleLayoutSignals();\n }\n\n private columnDistinctSignal() {\n if (this.parent && this.parent instanceof FacetModel) {\n // For nested facet, we will add columns to group mark instead\n // See discussion in https://github.com/vega/vega/issues/952\n // and https://github.com/vega/vega-view/releases/tag/v1.2.6\n return undefined;\n } else {\n // In facetNode.assemble(), the name is always this.getName('column') + '_layout'.\n const facetLayoutDataName = this.getName('column_domain');\n return {signal: `length(data('${facetLayoutDataName}'))`};\n }\n }\n\n public assembleGroupStyle(): string | string[] {\n return undefined;\n }\n\n public assembleGroup(signals: NewSignal[]) {\n if (this.parent && this.parent instanceof FacetModel) {\n // Provide number of columns for layout.\n // See discussion in https://github.com/vega/vega/issues/952\n // and https://github.com/vega/vega-view/releases/tag/v1.2.6\n return {\n ...(this.channelHasField('column')\n ? {\n encode: {\n update: {\n // TODO(https://github.com/vega/vega-lite/issues/2759):\n // Correct the signal for facet of concat of facet_column\n columns: {field: vgField(this.facet.column, {prefix: 'distinct'})}\n }\n }\n }\n : {}),\n ...super.assembleGroup(signals)\n };\n }\n return super.assembleGroup(signals);\n }\n\n /**\n * Aggregate cardinality for calculating size\n */\n private getCardinalityAggregateForChild() {\n const fields: string[] = [];\n const ops: AggregateOp[] = [];\n const as: string[] = [];\n\n if (this.child instanceof FacetModel) {\n if (this.child.channelHasField('column')) {\n const field = vgField(this.child.facet.column);\n fields.push(field);\n ops.push('distinct');\n as.push(`distinct_${field}`);\n }\n } else {\n for (const channel of POSITION_SCALE_CHANNELS) {\n const childScaleComponent = this.child.component.scales[channel];\n if (childScaleComponent && !childScaleComponent.merged) {\n const type = childScaleComponent.get('type');\n const range = childScaleComponent.get('range');\n\n if (hasDiscreteDomain(type) && isVgRangeStep(range)) {\n const domain = assembleDomain(this.child, channel);\n const field = getFieldFromDomain(domain);\n if (field) {\n fields.push(field);\n ops.push('distinct');\n as.push(`distinct_${field}`);\n } else {\n log.warn(log.message.unknownField(channel));\n }\n }\n }\n }\n }\n return {fields, ops, as};\n }\n\n private assembleFacet() {\n const {name, data} = this.component.data.facetRoot;\n const {row, column} = this.facet;\n const {fields, ops, as} = this.getCardinalityAggregateForChild();\n const groupby: string[] = [];\n\n for (const channel of FACET_CHANNELS) {\n const fieldDef = this.facet[channel];\n if (fieldDef) {\n groupby.push(vgField(fieldDef));\n\n const {bin, sort} = fieldDef;\n\n if (isBinning(bin)) {\n groupby.push(vgField(fieldDef, {binSuffix: 'end'}));\n }\n\n if (isSortField(sort)) {\n const {field, op = DEFAULT_SORT_OP} = sort;\n const outputName = facetSortFieldName(fieldDef, sort);\n if (row && column) {\n // For crossed facet, use pre-calculate field as it requires a different groupby\n // For each calculated field, apply max and assign them to the same name as\n // all values of the same group should be the same anyway.\n fields.push(outputName);\n ops.push('max');\n as.push(outputName);\n } else {\n fields.push(field);\n ops.push(op);\n as.push(outputName);\n }\n } else if (isArray(sort)) {\n const outputName = sortArrayIndexField(fieldDef, channel);\n fields.push(outputName);\n ops.push('max');\n as.push(outputName);\n }\n }\n }\n\n const cross = !!row && !!column;\n\n return {\n name,\n data,\n groupby,\n ...(cross || fields.length > 0\n ? {\n aggregate: {\n ...(cross ? {cross} : {}),\n ...(fields.length ? {fields, ops, as} : {})\n }\n }\n : {})\n };\n }\n\n private facetSortFields(channel: FacetChannel): string[] {\n const {facet} = this;\n const fieldDef = facet[channel];\n\n if (fieldDef) {\n if (isSortField(fieldDef.sort)) {\n return [facetSortFieldName(fieldDef, fieldDef.sort, {expr: 'datum'})];\n } else if (isArray(fieldDef.sort)) {\n return [sortArrayIndexField(fieldDef, channel, {expr: 'datum'})];\n }\n return [vgField(fieldDef, {expr: 'datum'})];\n }\n return [];\n }\n\n private facetSortOrder(channel: FacetChannel): SortOrder[] {\n const {facet} = this;\n const fieldDef = facet[channel];\n if (fieldDef) {\n const {sort} = fieldDef;\n const order = (isSortField(sort) ? sort.order : !isArray(sort) && sort) || 'ascending';\n return [order];\n }\n return [];\n }\n\n private assembleLabelTitle() {\n const {facet, config} = this;\n if (facet.facet) {\n // Facet always uses title to display labels\n return assembleLabelTitle(facet.facet, 'facet', config);\n }\n\n const ORTHOGONAL_ORIENT = {\n row: ['top', 'bottom'],\n column: ['left', 'right']\n };\n\n for (const channel of HEADER_CHANNELS) {\n if (facet[channel]) {\n const labelOrient = getHeaderProperty('labelOrient', facet[channel]?.header, config, channel);\n if (ORTHOGONAL_ORIENT[channel].includes(labelOrient)) {\n // Row/Column with orthogonal labelOrient must use title to display labels\n return assembleLabelTitle(facet[channel], channel, config);\n }\n }\n }\n return undefined;\n }\n\n public assembleMarks(): VgMarkGroup[] {\n const {child} = this;\n\n // If we facet by two dimensions, we need to add a cross operator to the aggregation\n // so that we create all groups\n const facetRoot = this.component.data.facetRoot;\n const data = assembleFacetData(facetRoot);\n\n const encodeEntry = child.assembleGroupEncodeEntry(false);\n\n const title = this.assembleLabelTitle() || child.assembleTitle();\n const style = child.assembleGroupStyle();\n\n const markGroup = {\n name: this.getName('cell'),\n type: 'group',\n ...(title ? {title} : {}),\n ...(style ? {style} : {}),\n from: {\n facet: this.assembleFacet()\n },\n // TODO: move this to after data\n sort: {\n field: FACET_CHANNELS.map(c => this.facetSortFields(c)).flat(),\n order: FACET_CHANNELS.map(c => this.facetSortOrder(c)).flat()\n },\n ...(data.length > 0 ? {data} : {}),\n ...(encodeEntry ? {encode: {update: encodeEntry}} : {}),\n ...child.assembleGroup(assembleFacetSignals(this, []))\n };\n\n return [markGroup];\n }\n\n protected getMapping() {\n return this.facet;\n }\n}\n", "import {vgField} from '../../channeldef';\nimport {DEFAULT_SORT_OP, isSortField} from '../../sort';\nimport {FacetMapping} from '../../spec/facet';\nimport {facetSortFieldName} from '../facet';\nimport {DataFlowNode} from './dataflow';\nimport {JoinAggregateTransformNode} from './joinaggregate';\n\nexport function makeJoinAggregateFromFacet(\n parent: DataFlowNode,\n facet: FacetMapping<string>\n): JoinAggregateTransformNode {\n const {row, column} = facet;\n if (row && column) {\n let newParent = null;\n // only need to make one for crossed facet\n for (const fieldDef of [row, column]) {\n if (isSortField(fieldDef.sort)) {\n const {field, op = DEFAULT_SORT_OP} = fieldDef.sort;\n parent = newParent = new JoinAggregateTransformNode(parent, {\n joinaggregate: [\n {\n op,\n field,\n as: facetSortFieldName(fieldDef, fieldDef.sort, {forAs: true})\n }\n ],\n groupby: [vgField(fieldDef)]\n });\n }\n }\n return newParent;\n }\n return null;\n}\n", "import {AncestorParse, DataComponent} from '.';\nimport {\n Data,\n isGenerator,\n isGraticuleGenerator,\n isInlineData,\n isNamedData,\n isSequenceGenerator,\n isUrlData,\n DataSourceType,\n ParseValue\n} from '../../data';\nimport {getDataSourcesForHandlingInvalidValues, DataSourcesForHandlingInvalidValues} from '../invalid/datasources';\nimport * as log from '../../log';\nimport {isPathMark} from '../../mark';\nimport {\n isAggregate,\n isBin,\n isCalculate,\n isDensity,\n isExtent,\n isFilter,\n isFlatten,\n isFold,\n isImpute,\n isJoinAggregate,\n isLoess,\n isLookup,\n isPivot,\n isQuantile,\n isRegression,\n isSample,\n isStack,\n isTimeUnit,\n isWindow\n} from '../../transform';\nimport {deepEqual, mergeDeep} from '../../util';\nimport {getMarkPropOrConfig} from '../common';\nimport {isFacetModel, isLayerModel, isUnitModel, Model} from '../model';\nimport {requiresSelectionId} from '../selection';\nimport {materializeSelections} from '../selection/parse';\nimport {AggregateNode} from './aggregate';\nimport {BinNode} from './bin';\nimport {CalculateNode} from './calculate';\nimport {DataFlowNode, OutputNode} from './dataflow';\nimport {DensityTransformNode} from './density';\nimport {ExtentTransformNode} from './extent';\nimport {FacetNode} from './facet';\nimport {FilterNode} from './filter';\nimport {FilterInvalidNode} from './filterinvalid';\nimport {FlattenTransformNode} from './flatten';\nimport {FoldTransformNode} from './fold';\nimport {\n getImplicitFromEncoding,\n getImplicitFromFilterTransform,\n getImplicitFromSelection,\n ParseNode\n} from './formatparse';\nimport {GeoJSONNode} from './geojson';\nimport {GeoPointNode} from './geopoint';\nimport {GraticuleNode} from './graticule';\nimport {IdentifierNode} from './identifier';\nimport {ImputeNode} from './impute';\nimport {JoinAggregateTransformNode} from './joinaggregate';\nimport {makeJoinAggregateFromFacet} from './joinaggregatefacet';\nimport {LoessTransformNode} from './loess';\nimport {LookupNode} from './lookup';\nimport {PivotTransformNode} from './pivot';\nimport {QuantileTransformNode} from './quantile';\nimport {RegressionTransformNode} from './regression';\nimport {SampleTransformNode} from './sample';\nimport {SequenceNode} from './sequence';\nimport {SourceNode} from './source';\nimport {StackNode} from './stack';\nimport {TimeUnitNode} from './timeunit';\nimport {WindowTransformNode} from './window';\n\nexport function findSource(data: Data, sources: SourceNode[]) {\n for (const other of sources) {\n const otherData = other.data;\n\n // if both datasets have a name defined, we cannot merge\n if (data.name && other.hasName() && data.name !== other.dataName) {\n continue;\n }\n\n const formatMesh = (data as any).format?.mesh;\n const otherFeature = otherData.format?.feature;\n\n // feature and mesh are mutually exclusive\n if (formatMesh && otherFeature) {\n continue;\n }\n\n // we have to extract the same feature or mesh\n const formatFeature = (data as any).format?.feature;\n if ((formatFeature || otherFeature) && formatFeature !== otherFeature) {\n continue;\n }\n\n const otherMesh = otherData.format?.mesh;\n if ((formatMesh || otherMesh) && formatMesh !== otherMesh) {\n continue;\n }\n\n if (isInlineData(data) && isInlineData(otherData)) {\n if (deepEqual(data.values, otherData.values)) {\n return other;\n }\n } else if (isUrlData(data) && isUrlData(otherData)) {\n if (data.url === otherData.url) {\n return other;\n }\n } else if (isNamedData(data)) {\n if (data.name === other.dataName) {\n return other;\n }\n }\n }\n return null;\n}\n\nfunction parseRoot(model: Model, sources: SourceNode[]): DataFlowNode {\n if (model.data || !model.parent) {\n // if the model defines a data source or is the root, create a source node\n\n if (model.data === null) {\n // data: null means we should ignore the parent's data so we just create a new data source\n const source = new SourceNode({values: []});\n sources.push(source);\n return source;\n }\n\n const existingSource = findSource(model.data, sources);\n\n if (existingSource) {\n if (!isGenerator(model.data)) {\n existingSource.data.format = mergeDeep({}, model.data.format, existingSource.data.format);\n }\n\n // if the new source has a name but the existing one does not, we can set it\n if (!existingSource.hasName() && model.data.name) {\n existingSource.dataName = model.data.name;\n }\n\n return existingSource;\n } else {\n const source = new SourceNode(model.data);\n sources.push(source);\n return source;\n }\n } else {\n // If we don't have a source defined (overriding parent's data), use the parent's facet root or main.\n return model.parent.component.data.facetRoot\n ? model.parent.component.data.facetRoot\n : model.parent.component.data.main;\n }\n}\n\n/**\n * Parses a transform array into a chain of connected dataflow nodes.\n */\nexport function parseTransformArray(head: DataFlowNode, model: Model, ancestorParse: AncestorParse): DataFlowNode {\n let lookupCounter = 0;\n\n for (const t of model.transforms) {\n let derivedType: ParseValue = undefined;\n let transformNode: DataFlowNode;\n\n if (isCalculate(t)) {\n transformNode = head = new CalculateNode(head, t);\n derivedType = 'derived';\n } else if (isFilter(t)) {\n const implicit = getImplicitFromFilterTransform(t);\n transformNode = head = ParseNode.makeWithAncestors(head, {}, implicit, ancestorParse) ?? head;\n\n head = new FilterNode(head, model, t.filter);\n } else if (isBin(t)) {\n transformNode = head = BinNode.makeFromTransform(head, t, model);\n derivedType = 'number';\n } else if (isTimeUnit(t)) {\n derivedType = 'date';\n const parsedAs = ancestorParse.getWithExplicit(t.field);\n // Create parse node because the input to time unit is always date.\n if (parsedAs.value === undefined) {\n head = new ParseNode(head, {[t.field]: derivedType});\n ancestorParse.set(t.field, derivedType, false);\n }\n transformNode = head = TimeUnitNode.makeFromTransform(head, t);\n } else if (isAggregate(t)) {\n transformNode = head = AggregateNode.makeFromTransform(head, t);\n derivedType = 'number';\n if (requiresSelectionId(model)) {\n head = new IdentifierNode(head);\n }\n } else if (isLookup(t)) {\n transformNode = head = LookupNode.make(head, model, t, lookupCounter++);\n derivedType = 'derived';\n } else if (isWindow(t)) {\n transformNode = head = new WindowTransformNode(head, t);\n derivedType = 'number';\n } else if (isJoinAggregate(t)) {\n transformNode = head = new JoinAggregateTransformNode(head, t);\n derivedType = 'number';\n } else if (isStack(t)) {\n transformNode = head = StackNode.makeFromTransform(head, t);\n derivedType = 'derived';\n } else if (isFold(t)) {\n transformNode = head = new FoldTransformNode(head, t);\n derivedType = 'derived';\n } else if (isExtent(t)) {\n transformNode = head = new ExtentTransformNode(head, t);\n derivedType = 'derived';\n } else if (isFlatten(t)) {\n transformNode = head = new FlattenTransformNode(head, t);\n derivedType = 'derived';\n } else if (isPivot(t)) {\n transformNode = head = new PivotTransformNode(head, t);\n derivedType = 'derived';\n } else if (isSample(t)) {\n head = new SampleTransformNode(head, t);\n } else if (isImpute(t)) {\n transformNode = head = ImputeNode.makeFromTransform(head, t);\n derivedType = 'derived';\n } else if (isDensity(t)) {\n transformNode = head = new DensityTransformNode(head, t);\n derivedType = 'derived';\n } else if (isQuantile(t)) {\n transformNode = head = new QuantileTransformNode(head, t);\n derivedType = 'derived';\n } else if (isRegression(t)) {\n transformNode = head = new RegressionTransformNode(head, t);\n derivedType = 'derived';\n } else if (isLoess(t)) {\n transformNode = head = new LoessTransformNode(head, t);\n derivedType = 'derived';\n } else {\n log.warn(log.message.invalidTransformIgnored(t));\n continue;\n }\n\n if (transformNode && derivedType !== undefined) {\n for (const field of transformNode.producedFields() ?? []) {\n ancestorParse.set(field, derivedType, false);\n }\n }\n }\n\n return head;\n}\n\n/*\nDescription of the dataflow (http://asciiflow.com/):\n +--------+\n | Source |\n +---+----+\n |\n v\n FormatParse\n (explicit)\n |\n v\n Transforms\n(Filter, Calculate, Binning, TimeUnit, Aggregate, Window, ...)\n |\n v\n FormatParse\n (implicit)\n |\n v\n Binning (in `encoding`)\n |\n v\n Timeunit (in `encoding`)\n |\n v\nFormula From Sort Array\n |\n v\n +--+--+\n | Raw |\n +-----+\n |\n v\n Aggregate (in `encoding`)\n |\n v\n Stack (in `encoding`)\n |\n v\n+- - - - - - - - - - -+\n| PreFilterInvalid | - - - -> scale domains\n|(when scales need it)|\n+- - - - - - - - - - -+\n |\n v\n Invalid Filter (if the main data source needs it)\n |\n v\n +----------+\n | Main | - - - -> scale domains\n +----------+\n |\n v\n+- - - - - - - - - - -+\n| PostFilterInvalid | - - - -> scale domains\n|(when scales need it)|\n+- - - - - - - - - - -+\n |\n v\n +-------+\n | Facet |----> \"column\", \"column-layout\", and \"row\"\n +-------+\n |\n v\n ...Child data...\n*/\n\nexport function parseData(model: Model): DataComponent {\n let head = parseRoot(model, model.component.data.sources);\n\n const {outputNodes, outputNodeRefCounts} = model.component.data;\n const data = model.data;\n\n const newData = data && (isGenerator(data) || isUrlData(data) || isInlineData(data));\n const ancestorParse =\n !newData && model.parent ? model.parent.component.data.ancestorParse.clone() : new AncestorParse();\n\n if (isGenerator(data)) {\n // insert generator transform\n if (isSequenceGenerator(data)) {\n head = new SequenceNode(head, data.sequence);\n } else if (isGraticuleGenerator(data)) {\n head = new GraticuleNode(head, data.graticule);\n }\n // no parsing necessary for generator\n ancestorParse.parseNothing = true;\n } else if (data?.format?.parse === null) {\n // format.parse: null means disable parsing\n ancestorParse.parseNothing = true;\n }\n\n head = ParseNode.makeExplicit(head, model, ancestorParse) ?? head;\n\n // Default discrete selections require an identifer transform to\n // uniquely identify data points. Add this transform at the head of\n // the pipeline such that the identifier field is available for all\n // subsequent datasets. During optimization, we will remove this\n // transform if it proves to be unnecessary. Additional identifier\n // transforms will be necessary when new tuples are constructed\n // (e.g., post-aggregation).\n head = new IdentifierNode(head);\n\n // HACK: This is equivalent for merging bin extent for union scale.\n // FIXME(https://github.com/vega/vega-lite/issues/2270): Correctly merge extent / bin node for shared bin scale\n const parentIsLayer = model.parent && isLayerModel(model.parent);\n if (isUnitModel(model) || isFacetModel(model)) {\n if (parentIsLayer) {\n head = BinNode.makeFromEncoding(head, model) ?? head;\n }\n }\n\n if (model.transforms.length > 0) {\n head = parseTransformArray(head, model, ancestorParse);\n }\n\n // create parse nodes for fields that need to be parsed (or flattened) implicitly\n const implicitSelection = getImplicitFromSelection(model);\n const implicitEncoding = getImplicitFromEncoding(model);\n head = ParseNode.makeWithAncestors(head, {}, {...implicitSelection, ...implicitEncoding}, ancestorParse) ?? head;\n\n if (isUnitModel(model)) {\n head = GeoJSONNode.parseAll(head, model);\n head = GeoPointNode.parseAll(head, model);\n }\n\n if (isUnitModel(model) || isFacetModel(model)) {\n if (!parentIsLayer) {\n head = BinNode.makeFromEncoding(head, model) ?? head;\n }\n\n head = TimeUnitNode.makeFromEncoding(head, model) ?? head;\n head = CalculateNode.parseAllForSortIndex(head, model);\n }\n\n // add an output node pre aggregation\n const raw = (head = makeOutputNode(DataSourceType.Raw, model, head));\n\n if (isUnitModel(model)) {\n const agg = AggregateNode.makeFromEncoding(head, model);\n if (agg) {\n head = agg;\n\n if (requiresSelectionId(model)) {\n head = new IdentifierNode(head);\n }\n }\n head = ImputeNode.makeFromEncoding(head, model) ?? head;\n head = StackNode.makeFromEncoding(head, model) ?? head;\n }\n\n let preFilterInvalid: OutputNode | undefined;\n let dataSourcesForHandlingInvalidValues: DataSourcesForHandlingInvalidValues | undefined;\n if (isUnitModel(model)) {\n const {markDef, mark, config} = model;\n const invalid = getMarkPropOrConfig('invalid', markDef, config);\n\n const {marks, scales} = (dataSourcesForHandlingInvalidValues = getDataSourcesForHandlingInvalidValues({\n invalid,\n isPath: isPathMark(mark)\n }));\n\n if (marks !== scales && scales === 'include-invalid-values') {\n // Create a seperate preFilterInvalid dataSource if scales need pre-filter data but marks needs post-filter.\n preFilterInvalid = head = makeOutputNode(DataSourceType.PreFilterInvalid, model, head);\n }\n\n if (marks === 'exclude-invalid-values') {\n head = FilterInvalidNode.make(head, model, dataSourcesForHandlingInvalidValues) ?? head;\n }\n }\n\n // output \"main\" node for marks\n const main = (head = makeOutputNode(DataSourceType.Main, model, head));\n\n let postFilterInvalid: OutputNode | undefined;\n if (isUnitModel(model) && dataSourcesForHandlingInvalidValues) {\n const {marks, scales} = dataSourcesForHandlingInvalidValues;\n if (marks === 'include-invalid-values' && scales === 'exclude-invalid-values') {\n // Create a seperate postFilterInvalid dataSource if scales need post-filter data but marks needs pre-filter.\n head = FilterInvalidNode.make(head, model, dataSourcesForHandlingInvalidValues) ?? head;\n\n postFilterInvalid = head = makeOutputNode(DataSourceType.PostFilterInvalid, model, head);\n }\n }\n\n if (isUnitModel(model)) {\n materializeSelections(model, main);\n }\n\n // add facet marker\n let facetRoot = null;\n if (isFacetModel(model)) {\n const facetName = model.getName('facet');\n\n // Derive new aggregate for facet's sort field\n // augment data source with new fields for crossed facet\n head = makeJoinAggregateFromFacet(head, model.facet) ?? head;\n\n facetRoot = new FacetNode(head, model, facetName, main.getSource());\n outputNodes[facetName] = facetRoot;\n }\n\n return {\n ...model.component.data,\n outputNodes,\n outputNodeRefCounts,\n raw,\n main,\n facetRoot,\n ancestorParse,\n preFilterInvalid,\n postFilterInvalid\n };\n}\n\nfunction makeOutputNode(dataSourceType: DataSourceType, model: Model, head: DataFlowNode) {\n const {outputNodes, outputNodeRefCounts} = model.component.data;\n const name = model.getDataName(dataSourceType);\n const node = new OutputNode(head, name, dataSourceType, outputNodeRefCounts);\n outputNodes[name] = node;\n return node;\n}\n", "import {NewSignal, SignalRef} from 'vega';\nimport {Config} from '../config';\nimport * as log from '../log';\nimport {isHConcatSpec, isVConcatSpec, NormalizedConcatSpec, NormalizedSpec} from '../spec';\nimport {keys} from '../util';\nimport {VgData, VgLayout} from '../vega.schema';\nimport {buildModel} from './buildmodel';\nimport {parseData} from './data/parse';\nimport {assembleLayoutSignals} from './layoutsize/assemble';\nimport {parseConcatLayoutSize} from './layoutsize/parse';\nimport {Model} from './model';\nimport {MULTI_VIEW_ANIMATION_UNSUPPORTED} from '../log/message';\nimport {isTimerSelection} from './selection';\n\nexport class ConcatModel extends Model {\n public readonly children: Model[];\n\n constructor(spec: NormalizedConcatSpec, parent: Model, parentGivenName: string, config: Config<SignalRef>) {\n super(spec, 'concat', parent, parentGivenName, config, spec.resolve);\n\n if (spec.resolve?.axis?.x === 'shared' || spec.resolve?.axis?.y === 'shared') {\n log.warn(log.message.CONCAT_CANNOT_SHARE_AXIS);\n }\n\n this.children = this.getChildren(spec).map((child, i) => {\n return buildModel(child, this, this.getName(`concat_${i}`), undefined, config);\n });\n }\n\n public parseData() {\n this.component.data = parseData(this);\n for (const child of this.children) {\n child.parseData();\n }\n }\n\n public parseSelections() {\n // Merge selections up the hierarchy so that they may be referenced\n // across unit specs. Persist their definitions within each child\n // to assemble signals which remain within output Vega unit groups.\n this.component.selection = {};\n for (const child of this.children) {\n child.parseSelections();\n for (const key of keys(child.component.selection)) {\n this.component.selection[key] = child.component.selection[key];\n }\n }\n\n if (Object.values(this.component.selection).some(selCmpt => isTimerSelection(selCmpt))) {\n log.error(MULTI_VIEW_ANIMATION_UNSUPPORTED);\n }\n }\n\n public parseMarkGroup() {\n for (const child of this.children) {\n child.parseMarkGroup();\n }\n }\n\n public parseAxesAndHeaders() {\n for (const child of this.children) {\n child.parseAxesAndHeaders();\n }\n\n // TODO(#2415): support shared axes\n }\n\n private getChildren(spec: NormalizedConcatSpec): NormalizedSpec[] {\n if (isVConcatSpec(spec)) {\n return spec.vconcat;\n } else if (isHConcatSpec(spec)) {\n return spec.hconcat;\n }\n return spec.concat;\n }\n\n public parseLayoutSize() {\n parseConcatLayoutSize(this);\n }\n\n public parseAxisGroup(): void {\n return null;\n }\n\n public assembleSelectionTopLevelSignals(signals: NewSignal[]): NewSignal[] {\n return this.children.reduce((sg, child) => child.assembleSelectionTopLevelSignals(sg), signals);\n }\n\n public assembleSignals(): NewSignal[] {\n this.children.forEach(child => child.assembleSignals());\n return [];\n }\n\n public assembleLayoutSignals(): NewSignal[] {\n const layoutSignals = assembleLayoutSignals(this);\n\n for (const child of this.children) {\n layoutSignals.push(...child.assembleLayoutSignals());\n }\n\n return layoutSignals;\n }\n\n public assembleSelectionData(data: readonly VgData[]): readonly VgData[] {\n return this.children.reduce((db, child) => child.assembleSelectionData(db), data);\n }\n\n public assembleMarks(): any[] {\n // only children have marks\n return this.children.map(child => {\n const title = child.assembleTitle();\n const style = child.assembleGroupStyle();\n const encodeEntry = child.assembleGroupEncodeEntry(false);\n\n return {\n type: 'group',\n name: child.getName('group'),\n ...(title ? {title} : {}),\n ...(style ? {style} : {}),\n ...(encodeEntry ? {encode: {update: encodeEntry}} : {}),\n ...child.assembleGroup()\n };\n });\n }\n\n public assembleGroupStyle(): string | string[] {\n return undefined;\n }\n\n protected assembleDefaultLayout(): VgLayout {\n const columns = this.layout.columns;\n return {\n ...(columns != null ? {columns} : {}),\n bounds: 'full',\n // Use align each so it can work with multiple plots with different size\n align: 'each'\n };\n }\n}\n", "import {Axis as VgAxis, SignalRef, Text} from 'vega';\nimport {\n AxisInternal,\n AxisPart,\n AxisPropsWithCondition,\n COMMON_AXIS_PROPERTIES_INDEX,\n ConditionalAxisProp\n} from '../../axis';\nimport {FieldDefBase} from '../../channeldef';\nimport {duplicate, Flag, keys} from '../../util';\nimport {isSignalRef} from '../../vega.schema';\nimport {Split} from '../split';\n\nfunction isFalseOrNull(v: any) {\n return v === false || v === null;\n}\n\nexport type AxisComponentProps = Omit<VgAxis, 'title' | ConditionalAxisProp> &\n Omit<AxisPropsWithCondition<SignalRef>, 'title'> & {\n title: Text | FieldDefBase<string>[] | SignalRef;\n labelExpr: string;\n disable: boolean;\n };\n\nconst AXIS_COMPONENT_PROPERTIES_INDEX: Flag<keyof AxisComponentProps> = {\n disable: 1,\n gridScale: 1,\n scale: 1,\n ...COMMON_AXIS_PROPERTIES_INDEX,\n labelExpr: 1,\n encode: 1\n};\n\nexport const AXIS_COMPONENT_PROPERTIES = keys(AXIS_COMPONENT_PROPERTIES_INDEX);\n\nexport class AxisComponent extends Split<AxisComponentProps> {\n constructor(\n public readonly explicit: Partial<AxisComponentProps> = {},\n public readonly implicit: Partial<AxisComponentProps> = {},\n public mainExtracted = false\n ) {\n super();\n }\n\n public clone() {\n return new AxisComponent(duplicate(this.explicit), duplicate(this.implicit), this.mainExtracted);\n }\n\n public hasAxisPart(part: AxisPart) {\n // FIXME(https://github.com/vega/vega-lite/issues/2552) this method can be wrong if users use a Vega theme.\n\n if (part === 'axis') {\n // always has the axis container part\n return true;\n }\n\n if (part === 'grid' || part === 'title') {\n return !!this.get(part);\n }\n // Other parts are enabled by default, so they should not be false or null.\n return !isFalseOrNull(this.get(part));\n }\n\n public hasOrientSignalRef() {\n return isSignalRef(this.explicit.orient);\n }\n}\n\nexport interface AxisComponentIndex {\n x?: AxisComponent[];\n y?: AxisComponent[];\n}\n\nexport interface AxisInternalIndex {\n x?: AxisInternal;\n y?: AxisInternal;\n}\n", "import {getSecondaryRangeChannel, PositionScaleChannel} from '../../channel';\nimport {channelDefType, getFieldOrDatumDef, isFieldDef, isPositionFieldOrDatumDef} from '../../channeldef';\nimport {formatCustomType, isCustomFormatType} from '../format';\nimport {UnitModel} from '../unit';\n\nexport function labels(model: UnitModel, channel: PositionScaleChannel, specifiedLabelsSpec: any) {\n const {encoding, config} = model;\n\n const fieldOrDatumDef =\n getFieldOrDatumDef<string>(encoding[channel]) ?? getFieldOrDatumDef(encoding[getSecondaryRangeChannel(channel)]);\n const axis = model.axis(channel) || {};\n const {format, formatType} = axis;\n\n if (isCustomFormatType(formatType)) {\n return {\n text: formatCustomType({\n fieldOrDatumDef,\n field: 'datum.value',\n format,\n formatType,\n config\n }),\n ...specifiedLabelsSpec\n };\n } else if (format === undefined && formatType === undefined && config.customFormatTypes) {\n if (channelDefType(fieldOrDatumDef) === 'quantitative') {\n if (\n isPositionFieldOrDatumDef(fieldOrDatumDef) &&\n fieldOrDatumDef.stack === 'normalize' &&\n config.normalizedNumberFormatType\n ) {\n return {\n text: formatCustomType({\n fieldOrDatumDef,\n field: 'datum.value',\n format: config.normalizedNumberFormat,\n formatType: config.normalizedNumberFormatType,\n config\n }),\n ...specifiedLabelsSpec\n };\n } else if (config.numberFormatType) {\n return {\n text: formatCustomType({\n fieldOrDatumDef,\n field: 'datum.value',\n format: config.numberFormat,\n formatType: config.numberFormatType,\n config\n }),\n ...specifiedLabelsSpec\n };\n }\n }\n if (\n channelDefType(fieldOrDatumDef) === 'temporal' &&\n config.timeFormatType &&\n isFieldDef(fieldOrDatumDef) &&\n !fieldOrDatumDef.timeUnit\n ) {\n return {\n text: formatCustomType({\n fieldOrDatumDef,\n field: 'datum.value',\n format: config.timeFormat,\n formatType: config.timeFormatType,\n config\n }),\n ...specifiedLabelsSpec\n };\n }\n }\n return specifiedLabelsSpec;\n}\n", "import type {AxisEncode as VgAxisEncode, AxisOrient, SignalRef} from 'vega';\nimport {Axis, AXIS_PARTS, isAxisProperty, isConditionalAxisValue} from '../../axis';\nimport {PositionScaleChannel, POSITION_SCALE_CHANNELS} from '../../channel';\nimport {getFieldOrDatumDef, PositionDatumDef, PositionFieldDef} from '../../channeldef';\nimport {getFirstDefined, isEmpty, keys, normalizeAngle} from '../../util';\nimport {isSignalRef} from '../../vega.schema';\nimport {mergeTitleComponent} from '../common';\nimport {guideEncodeEntry} from '../guide';\nimport {LayerModel} from '../layer';\nimport {parseGuideResolve} from '../resolve';\nimport {defaultTieBreaker, Explicit, mergeValuesWithExplicit} from '../split';\nimport {UnitModel} from '../unit';\nimport {AxisComponent, AxisComponentIndex, AxisComponentProps, AXIS_COMPONENT_PROPERTIES} from './component';\nimport {getAxisConfig, getAxisConfigs} from './config';\nimport * as encode from './encode';\nimport {AxisRuleParams, axisRules, defaultOrient, getFieldDefTitle, getLabelAngle} from './properties';\nimport {guideFormat, guideFormatType} from '../format';\n\nexport function parseUnitAxes(model: UnitModel): AxisComponentIndex {\n return POSITION_SCALE_CHANNELS.reduce((axis, channel) => {\n if (model.component.scales[channel]) {\n axis[channel] = [parseAxis(channel, model)];\n }\n return axis;\n }, {} as AxisComponentIndex);\n}\n\nconst OPPOSITE_ORIENT: Record<AxisOrient, AxisOrient> = {\n bottom: 'top',\n top: 'bottom',\n left: 'right',\n right: 'left'\n};\n\nexport function parseLayerAxes(model: LayerModel) {\n const {axes, resolve} = model.component;\n const axisCount: Record<AxisOrient, number> = {top: 0, bottom: 0, right: 0, left: 0};\n\n for (const child of model.children) {\n child.parseAxesAndHeaders();\n\n for (const channel of keys(child.component.axes)) {\n resolve.axis[channel] = parseGuideResolve(model.component.resolve, channel);\n if (resolve.axis[channel] === 'shared') {\n // If the resolve says shared (and has not been overridden)\n // We will try to merge and see if there is a conflict\n\n axes[channel] = mergeAxisComponents(axes[channel], child.component.axes[channel]);\n\n if (!axes[channel]) {\n // If merge returns nothing, there is a conflict so we cannot make the axis shared.\n // Thus, mark axis as independent and remove the axis component.\n resolve.axis[channel] = 'independent';\n delete axes[channel];\n }\n }\n }\n }\n\n // Move axes to layer's axis component and merge shared axes\n for (const channel of POSITION_SCALE_CHANNELS) {\n for (const child of model.children) {\n if (!child.component.axes[channel]) {\n // skip if the child does not have a particular axis\n continue;\n }\n\n if (resolve.axis[channel] === 'independent') {\n // If axes are independent, concat the axisComponent array.\n axes[channel] = (axes[channel] ?? []).concat(child.component.axes[channel]);\n\n // Automatically adjust orient\n for (const axisComponent of child.component.axes[channel]) {\n const {value: orient, explicit} = axisComponent.getWithExplicit('orient');\n if (isSignalRef(orient)) {\n continue;\n }\n\n if (axisCount[orient] > 0 && !explicit) {\n // Change axis orient if the number do not match\n const oppositeOrient = OPPOSITE_ORIENT[orient];\n if (axisCount[orient] > axisCount[oppositeOrient]) {\n axisComponent.set('orient', oppositeOrient, false);\n }\n }\n axisCount[orient]++;\n\n // TODO(https://github.com/vega/vega-lite/issues/2634): automatically add extra offset?\n }\n }\n\n // After merging, make sure to remove axes from child\n delete child.component.axes[channel];\n }\n\n // Show gridlines for first axis only for dual-axis chart\n if (resolve.axis[channel] === 'independent' && axes[channel] && axes[channel].length > 1) {\n for (const [index, axisCmpt] of (axes[channel] || []).entries()) {\n if (index > 0 && !!axisCmpt.get('grid') && !axisCmpt.explicit.grid) {\n axisCmpt.implicit.grid = false;\n }\n }\n }\n }\n}\n\nfunction mergeAxisComponents(\n mergedAxisCmpts: AxisComponent[],\n childAxisCmpts: readonly AxisComponent[]\n): AxisComponent[] {\n if (mergedAxisCmpts) {\n // FIXME: this is a bit wrong once we support multiple axes\n if (mergedAxisCmpts.length !== childAxisCmpts.length) {\n return undefined; // Cannot merge axis component with different number of axes.\n }\n const length = mergedAxisCmpts.length;\n for (let i = 0; i < length; i++) {\n const merged = mergedAxisCmpts[i];\n const child = childAxisCmpts[i];\n\n if (!!merged !== !!child) {\n return undefined;\n } else if (merged && child) {\n const mergedOrient = merged.getWithExplicit('orient');\n const childOrient = child.getWithExplicit('orient');\n\n if (mergedOrient.explicit && childOrient.explicit && mergedOrient.value !== childOrient.value) {\n // TODO: throw warning if resolve is explicit (We don't have info about explicit/implicit resolve yet.)\n\n // Cannot merge due to inconsistent orient\n return undefined;\n } else {\n mergedAxisCmpts[i] = mergeAxisComponent(merged, child);\n }\n }\n }\n } else {\n // For first one, return a copy of the child\n return childAxisCmpts.map(axisComponent => axisComponent.clone());\n }\n return mergedAxisCmpts;\n}\n\nfunction mergeAxisComponent(merged: AxisComponent, child: AxisComponent): AxisComponent {\n for (const prop of AXIS_COMPONENT_PROPERTIES) {\n const mergedValueWithExplicit = mergeValuesWithExplicit<AxisComponentProps, any>(\n merged.getWithExplicit(prop),\n child.getWithExplicit(prop),\n prop,\n 'axis',\n\n // Tie breaker function\n (v1: Explicit<any>, v2: Explicit<any>) => {\n switch (prop) {\n case 'title':\n return mergeTitleComponent(v1, v2);\n case 'gridScale':\n return {\n explicit: v1.explicit, // keep the old explicit\n value: getFirstDefined(v1.value, v2.value)\n };\n }\n return defaultTieBreaker<AxisComponentProps, any>(v1, v2, prop, 'axis');\n }\n );\n merged.setWithExplicit(prop, mergedValueWithExplicit);\n }\n return merged;\n}\n\nfunction isExplicit<T extends string | number | boolean | unknown>(\n value: T,\n property: keyof AxisComponentProps,\n axis: Axis<SignalRef>,\n model: UnitModel,\n channel: PositionScaleChannel\n) {\n if (property === 'disable') {\n return axis !== undefined; // if axis is specified or null/false, then its enable/disable state is explicit\n }\n\n axis = axis || {};\n\n switch (property) {\n case 'titleAngle':\n case 'labelAngle':\n return value === (isSignalRef(axis.labelAngle) ? axis.labelAngle : normalizeAngle(axis.labelAngle));\n case 'values':\n return !!axis.values;\n // specified axis.values is already respected, but may get transformed.\n case 'encode':\n // both VL axis.encoding and axis.labelAngle affect VG axis.encode\n return !!axis.encoding || !!axis.labelAngle;\n case 'title':\n // title can be explicit if fieldDef.title is set\n if (value === getFieldDefTitle(model, channel)) {\n return true;\n }\n }\n // Otherwise, things are explicit if the returned value matches the specified property\n return value === (axis as any)[property];\n}\n\n/**\n * Properties to always include values from config\n */\nconst propsToAlwaysIncludeConfig = new Set([\n 'grid', // Grid is an exception because we need to set grid = true to generate another grid axis\n 'translate', // translate has dependent logic for bar's bin position and it's 0.5 by default in Vega. If a config overrides this value, we need to know.\n // the rest are not axis configs in Vega, but are in VL, so we need to set too.\n 'format',\n 'formatType',\n 'orient',\n 'labelExpr',\n 'tickCount',\n 'position',\n 'tickMinStep'\n]);\n\nfunction parseAxis(channel: PositionScaleChannel, model: UnitModel): AxisComponent {\n let axis = model.axis(channel);\n\n const axisComponent = new AxisComponent();\n\n const fieldOrDatumDef = getFieldOrDatumDef(model.encoding[channel]) as\n | PositionFieldDef<string>\n | PositionDatumDef<string>;\n\n const {mark, config} = model;\n\n const orient =\n axis?.orient ||\n config[channel === 'x' ? 'axisX' : 'axisY']?.orient ||\n config.axis?.orient ||\n defaultOrient(channel);\n\n const scaleType = model.getScaleComponent(channel).get('type');\n\n const axisConfigs = getAxisConfigs(channel, scaleType, orient, model.config);\n\n const disable =\n axis !== undefined ? !axis : getAxisConfig('disable', config.style, axis?.style, axisConfigs).configValue;\n axisComponent.set('disable', disable, axis !== undefined);\n if (disable) {\n return axisComponent;\n }\n\n axis = axis || {};\n\n const labelAngle = getLabelAngle(fieldOrDatumDef, axis, channel, config.style, axisConfigs);\n const formatType = guideFormatType(axis.formatType, fieldOrDatumDef, scaleType);\n const format = guideFormat(fieldOrDatumDef, fieldOrDatumDef.type, axis.format, axis.formatType, config, true);\n\n const ruleParams: AxisRuleParams = {\n fieldOrDatumDef,\n axis,\n channel,\n model,\n scaleType,\n orient,\n labelAngle,\n format,\n formatType,\n mark,\n config\n };\n // 1.2. Add properties\n for (const property of AXIS_COMPONENT_PROPERTIES) {\n const value =\n property in axisRules ? axisRules[property](ruleParams) : isAxisProperty(property) ? axis[property] : undefined;\n\n const hasValue = value !== undefined;\n\n const explicit = isExplicit(value, property, axis, model, channel);\n\n if (hasValue && explicit) {\n axisComponent.set(property, value, explicit);\n } else {\n const {configValue = undefined, configFrom = undefined} =\n isAxisProperty(property) && property !== 'values'\n ? getAxisConfig(property, config.style, axis.style, axisConfigs)\n : {};\n const hasConfigValue = configValue !== undefined;\n\n if (hasValue && !hasConfigValue) {\n // only set property if it is explicitly set or has no config value (otherwise we will accidentally override config)\n axisComponent.set(property, value, explicit);\n } else if (\n // Cases need implicit values\n // 1. Axis config that aren't available in Vega\n !(configFrom === 'vgAxisConfig') ||\n // 2. Certain properties are always included (see `propsToAlwaysIncludeConfig`'s declaration for more details)\n (propsToAlwaysIncludeConfig.has(property) && hasConfigValue) ||\n // 3. Conditional axis values and signals\n isConditionalAxisValue(configValue) ||\n isSignalRef(configValue)\n ) {\n // If a config is specified and is conditional, copy conditional value from axis config\n axisComponent.set(property, configValue, false);\n }\n }\n }\n\n // 2) Add guide encode definition groups\n const axisEncoding = axis.encoding ?? {};\n const axisEncode = AXIS_PARTS.reduce((e: VgAxisEncode, part) => {\n if (!axisComponent.hasAxisPart(part)) {\n // No need to create encode for a disabled part.\n return e;\n }\n\n const axisEncodingPart = guideEncodeEntry(axisEncoding[part] ?? {}, model);\n\n const value = part === 'labels' ? encode.labels(model, channel, axisEncodingPart) : axisEncodingPart;\n\n if (value !== undefined && !isEmpty(value)) {\n e[part] = {update: value};\n }\n return e;\n }, {} as VgAxisEncode);\n\n // FIXME: By having encode as one property, we won't have fine grained encode merging.\n if (!isEmpty(axisEncode)) {\n axisComponent.set('encode', axisEncode, !!axis.encoding || axis.labelAngle !== undefined);\n }\n\n return axisComponent;\n}\n", "import {getSizeChannel, POSITION_SCALE_CHANNELS} from '../../channel';\nimport {isContinuousFieldOrDatumDef} from '../../channeldef';\nimport {Encoding} from '../../encoding';\nimport * as log from '../../log';\nimport {isStep, LayoutSizeMixins} from '../../spec/base';\n\nexport function initLayoutSize({encoding, size}: {encoding: Encoding<string>; size: LayoutSizeMixins}) {\n for (const channel of POSITION_SCALE_CHANNELS) {\n const sizeType = getSizeChannel(channel);\n if (isStep(size[sizeType])) {\n if (isContinuousFieldOrDatumDef(encoding[channel])) {\n delete size[sizeType];\n log.warn(log.message.stepDropped(sizeType));\n }\n }\n }\n\n return size;\n}\n", "import {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const arc: MarkCompiler = {\n vgMark: 'arc',\n encodeEntry: (model: UnitModel) => {\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'include',\n size: 'ignore',\n orient: 'ignore',\n theta: 'ignore'\n }),\n ...encode.pointPosition('x', model, {defaultPos: 'mid'}),\n ...encode.pointPosition('y', model, {defaultPos: 'mid'}),\n\n // arcs are rectangles in polar coordinates\n ...encode.rectPosition(model, 'radius'),\n ...encode.rectPosition(model, 'theta')\n };\n }\n};\n", "import {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const area: MarkCompiler = {\n vgMark: 'area',\n encodeEntry: (model: UnitModel) => {\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'include',\n orient: 'include',\n size: 'ignore',\n theta: 'ignore'\n }),\n ...encode.pointOrRangePosition('x', model, {\n defaultPos: 'zeroOrMin',\n defaultPos2: 'zeroOrMin',\n range: model.markDef.orient === 'horizontal'\n }),\n ...encode.pointOrRangePosition('y', model, {\n defaultPos: 'zeroOrMin',\n defaultPos2: 'zeroOrMin',\n range: model.markDef.orient === 'vertical'\n }),\n ...encode.defined(model)\n };\n }\n};\n", "import {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const bar: MarkCompiler = {\n vgMark: 'rect',\n encodeEntry: (model: UnitModel) => {\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'include',\n orient: 'ignore',\n size: 'ignore',\n theta: 'ignore'\n }),\n ...encode.rectPosition(model, 'x'),\n ...encode.rectPosition(model, 'y')\n };\n }\n};\n", "import {GeoShapeTransform as VgGeoShapeTransform} from 'vega';\nimport {isFieldDef, vgField} from '../../channeldef';\nimport {GEOJSON} from '../../type';\nimport {VgPostEncodingTransform} from '../../vega.schema';\nimport {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const geoshape: MarkCompiler = {\n vgMark: 'shape',\n encodeEntry: (model: UnitModel) => {\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'include',\n size: 'ignore',\n orient: 'ignore',\n theta: 'ignore'\n })\n };\n },\n postEncodingTransform: (model: UnitModel): VgPostEncodingTransform[] => {\n const {encoding} = model;\n const shapeDef = encoding.shape;\n\n const transform: VgGeoShapeTransform = {\n type: 'geoshape',\n projection: model.projectionName(),\n // as: 'shape',\n ...(shapeDef && isFieldDef(shapeDef) && shapeDef.type === GEOJSON\n ? {field: vgField(shapeDef, {expr: 'datum'})}\n : {})\n };\n return [transform];\n }\n};\n", "import {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const image: MarkCompiler = {\n vgMark: 'image',\n encodeEntry: (model: UnitModel) => {\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'ignore',\n orient: 'ignore',\n size: 'ignore',\n theta: 'ignore'\n }),\n ...encode.rectPosition(model, 'x'),\n ...encode.rectPosition(model, 'y'),\n ...encode.text(model, 'url')\n };\n }\n};\n", "import {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const line: MarkCompiler = {\n vgMark: 'line',\n encodeEntry: (model: UnitModel) => {\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'include',\n size: 'ignore',\n orient: 'ignore',\n theta: 'ignore'\n }),\n ...encode.pointPosition('x', model, {defaultPos: 'mid'}),\n ...encode.pointPosition('y', model, {defaultPos: 'mid'}),\n ...encode.nonPosition('size', model, {\n vgChannel: 'strokeWidth' // VL's line size is strokeWidth\n }),\n ...encode.defined(model)\n };\n }\n};\n\nexport const trail: MarkCompiler = {\n vgMark: 'trail',\n encodeEntry: (model: UnitModel) => {\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'include',\n size: 'include',\n orient: 'ignore',\n theta: 'ignore'\n }),\n ...encode.pointPosition('x', model, {defaultPos: 'mid'}),\n ...encode.pointPosition('y', model, {defaultPos: 'mid'}),\n ...encode.nonPosition('size', model),\n ...encode.defined(model)\n };\n }\n};\n", "import {Config} from '../../config';\nimport {VgEncodeEntry} from '../../vega.schema';\nimport {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nfunction encodeEntry(model: UnitModel, fixedShape?: 'circle' | 'square') {\n const {config} = model;\n\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'include',\n size: 'include',\n orient: 'ignore',\n theta: 'ignore'\n }),\n ...encode.pointPosition('x', model, {defaultPos: 'mid'}),\n ...encode.pointPosition('y', model, {defaultPos: 'mid'}),\n ...encode.nonPosition('size', model),\n ...encode.nonPosition('angle', model),\n ...shapeMixins(model, config, fixedShape)\n };\n}\n\nexport function shapeMixins(model: UnitModel, config: Config, fixedShape?: 'circle' | 'square'): VgEncodeEntry {\n if (fixedShape) {\n return {shape: {value: fixedShape}};\n }\n return encode.nonPosition('shape', model);\n}\n\nexport const point: MarkCompiler = {\n vgMark: 'symbol',\n encodeEntry: (model: UnitModel) => {\n return encodeEntry(model);\n }\n};\n\nexport const circle: MarkCompiler = {\n vgMark: 'symbol',\n encodeEntry: (model: UnitModel) => {\n return encodeEntry(model, 'circle');\n }\n};\n\nexport const square: MarkCompiler = {\n vgMark: 'symbol',\n encodeEntry: (model: UnitModel) => {\n return encodeEntry(model, 'square');\n }\n};\n", "import {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const rect: MarkCompiler = {\n vgMark: 'rect',\n encodeEntry: (model: UnitModel) => {\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'include',\n orient: 'ignore',\n size: 'ignore',\n theta: 'ignore'\n }),\n ...encode.rectPosition(model, 'x'),\n ...encode.rectPosition(model, 'y')\n };\n }\n};\n", "import {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const rule: MarkCompiler = {\n vgMark: 'rule',\n encodeEntry: (model: UnitModel) => {\n const {markDef} = model;\n const orient = markDef.orient;\n\n if (!model.encoding.x && !model.encoding.y && !model.encoding.latitude && !model.encoding.longitude) {\n // Show nothing if we have none of x, y, lat, and long.\n return {};\n }\n\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'include',\n orient: 'ignore',\n size: 'ignore',\n theta: 'ignore'\n }),\n ...encode.pointOrRangePosition('x', model, {\n defaultPos: orient === 'horizontal' ? 'zeroOrMax' : 'mid',\n defaultPos2: 'zeroOrMin',\n range: orient !== 'vertical' // include x2 for horizontal or line segment rule\n }),\n ...encode.pointOrRangePosition('y', model, {\n defaultPos: orient === 'vertical' ? 'zeroOrMax' : 'mid',\n defaultPos2: 'zeroOrMin',\n range: orient !== 'horizontal' // include y2 for vertical or line segment rule\n }),\n ...encode.nonPosition('size', model, {\n vgChannel: 'strokeWidth' // VL's rule size is strokeWidth\n })\n };\n }\n};\n", "import type {SignalRef} from 'vega';\nimport {Config} from '../../config';\nimport {Encoding} from '../../encoding';\nimport {MarkDef} from '../../mark';\nimport {getMarkPropOrConfig} from '../common';\nimport {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const text: MarkCompiler = {\n vgMark: 'text',\n\n encodeEntry: (model: UnitModel) => {\n const {config, encoding} = model;\n\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'include',\n baseline: 'include',\n color: 'include',\n size: 'ignore',\n orient: 'ignore',\n theta: 'include'\n }),\n ...encode.pointPosition('x', model, {defaultPos: 'mid'}),\n ...encode.pointPosition('y', model, {defaultPos: 'mid'}),\n ...encode.text(model),\n ...encode.nonPosition('size', model, {\n vgChannel: 'fontSize' // VL's text size is fontSize\n }),\n ...encode.nonPosition('angle', model),\n ...encode.valueIfDefined('align', align(model.markDef, encoding, config)),\n ...encode.valueIfDefined('baseline', baseline(model.markDef, encoding, config)),\n ...encode.pointPosition('radius', model, {defaultPos: null}),\n ...encode.pointPosition('theta', model, {defaultPos: null})\n };\n }\n};\n\nfunction align(markDef: MarkDef, encoding: Encoding<string>, config: Config<SignalRef>) {\n const a = getMarkPropOrConfig('align', markDef, config);\n if (a === undefined) {\n return 'center';\n }\n // If there is a config, Vega-parser will process this already.\n return undefined;\n}\n\nfunction baseline(markDef: MarkDef, encoding: Encoding<string>, config: Config<SignalRef>) {\n const b = getMarkPropOrConfig('baseline', markDef, config);\n if (b === undefined) {\n return 'middle';\n }\n // If there is a config, Vega-parser will process this already.\n return undefined;\n}\n", "import {getMarkPropOrConfig, signalOrValueRef} from '../common';\nimport {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const tick: MarkCompiler = {\n vgMark: 'rect',\n\n encodeEntry: (model: UnitModel) => {\n const {config, markDef} = model;\n const orient = markDef.orient;\n\n const vgSizeAxisChannel = orient === 'horizontal' ? 'x' : 'y';\n const vgThicknessAxisChannel = orient === 'horizontal' ? 'y' : 'x';\n const vgThicknessChannel = orient === 'horizontal' ? 'height' : 'width';\n\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'include',\n orient: 'ignore',\n size: 'ignore',\n theta: 'ignore'\n }),\n\n ...encode.rectPosition(model, vgSizeAxisChannel),\n ...encode.pointPosition(vgThicknessAxisChannel, model, {\n defaultPos: 'mid',\n vgChannel: vgThicknessAxisChannel === 'y' ? 'yc' : 'xc'\n }),\n [vgThicknessChannel]: signalOrValueRef(getMarkPropOrConfig('thickness', markDef, config))\n };\n }\n};\n", "import {isArray} from 'vega-util';\nimport {FieldRefOption, isFieldDef, isValueDef, vgField} from '../../channeldef';\nimport {DataSourceType} from '../../data';\nimport {pathGroupingFields} from '../../encoding';\nimport {AREA, BAR, LINE, Mark, TRAIL, isPathMark} from '../../mark';\nimport {contains, getFirstDefined, isNullOrFalse, keys, omit, pick} from '../../util';\nimport {VG_CORNERRADIUS_CHANNELS, VgCompare, VgEncodeEntry} from '../../vega.schema';\nimport {getMarkConfig, getMarkPropOrConfig, getStyles, signalOrValueRef, sortParams} from '../common';\nimport {UnitModel} from '../unit';\nimport {arc} from './arc';\nimport {area} from './area';\nimport {bar} from './bar';\nimport {MarkCompiler} from './base';\nimport {geoshape} from './geoshape';\nimport {image} from './image';\nimport {line, trail} from './line';\nimport {circle, point, square} from './point';\nimport {rect} from './rect';\nimport {rule} from './rule';\nimport {text} from './text';\nimport {tick} from './tick';\n\nconst markCompiler: Record<Mark, MarkCompiler> = {\n arc,\n area,\n bar,\n circle,\n geoshape,\n image,\n line,\n point,\n rect,\n rule,\n square,\n text,\n tick,\n trail\n};\n\nexport function parseMarkGroups(model: UnitModel): any[] {\n if (contains([LINE, AREA, TRAIL], model.mark)) {\n const details = pathGroupingFields(model.mark, model.encoding);\n if (details.length > 0) {\n return getPathGroups(model, details);\n }\n // otherwise use standard mark groups\n } else if (model.mark === BAR) {\n const hasCornerRadius = VG_CORNERRADIUS_CHANNELS.some(prop =>\n getMarkPropOrConfig(prop, model.markDef, model.config)\n );\n if (model.stack && !model.fieldDef('size') && hasCornerRadius) {\n return getGroupsForStackedBarWithCornerRadius(model);\n }\n }\n\n return getMarkGroup(model);\n}\n\nconst FACETED_PATH_PREFIX = 'faceted_path_';\n\nfunction getPathGroups(model: UnitModel, details: string[]) {\n // TODO: for non-stacked plot, map order to zindex. (Maybe rename order for layer to zindex?)\n\n return [\n {\n name: model.getName('pathgroup'),\n type: 'group',\n from: {\n facet: {\n name: FACETED_PATH_PREFIX + model.requestDataName(DataSourceType.Main),\n data: model.requestDataName(DataSourceType.Main),\n groupby: details\n }\n },\n encode: {\n update: {\n width: {field: {group: 'width'}},\n height: {field: {group: 'height'}}\n }\n },\n // With subfacet for line/area group, need to use faceted data from above.\n marks: getMarkGroup(model, {fromPrefix: FACETED_PATH_PREFIX})\n }\n ];\n}\n\nconst STACK_GROUP_PREFIX = 'stack_group_';\n\n/**\n * We need to put stacked bars into groups in order to enable cornerRadius for stacks.\n * If stack is used and the model doesn't have size encoding, we put the mark into groups,\n * and apply cornerRadius properties at the group.\n */\nfunction getGroupsForStackedBarWithCornerRadius(model: UnitModel) {\n // Generate the mark\n const [mark] = getMarkGroup(model, {fromPrefix: STACK_GROUP_PREFIX});\n\n // Get the scale for the stacked field\n const fieldScale = model.scaleName(model.stack.fieldChannel);\n const stackField = (opt: FieldRefOption = {}) => model.vgField(model.stack.fieldChannel, opt);\n // Find the min/max of the pixel value on the stacked direction\n const stackFieldGroup = (func: 'min' | 'max', expr: 'datum' | 'parent') => {\n const vgFieldMinMax = [\n stackField({prefix: 'min', suffix: 'start', expr}),\n stackField({prefix: 'max', suffix: 'start', expr}),\n stackField({prefix: 'min', suffix: 'end', expr}),\n stackField({prefix: 'max', suffix: 'end', expr})\n ];\n return `${func}(${vgFieldMinMax.map(field => `scale('${fieldScale}',${field})`).join(',')})`;\n };\n\n let groupUpdate: VgEncodeEntry;\n let innerGroupUpdate: VgEncodeEntry;\n\n // Build the encoding for group and an inner group\n if (model.stack.fieldChannel === 'x') {\n // Move cornerRadius, y/yc/y2/height properties to group\n // Group x/x2 should be the min/max of the marks within\n groupUpdate = {\n ...pick(mark.encode.update, ['y', 'yc', 'y2', 'height', ...VG_CORNERRADIUS_CHANNELS]),\n x: {signal: stackFieldGroup('min', 'datum')},\n x2: {signal: stackFieldGroup('max', 'datum')},\n clip: {value: true}\n };\n // Inner group should revert the x translation, and pass height through\n innerGroupUpdate = {\n x: {field: {group: 'x'}, mult: -1},\n height: {field: {group: 'height'}}\n };\n // The marks should use the same height as group, without y/yc/y2 properties (because it's already done by group)\n // This is why size encoding is not supported yet\n mark.encode.update = {\n ...omit(mark.encode.update, ['y', 'yc', 'y2']),\n height: {field: {group: 'height'}}\n };\n } else {\n groupUpdate = {\n ...pick(mark.encode.update, ['x', 'xc', 'x2', 'width']),\n y: {signal: stackFieldGroup('min', 'datum')},\n y2: {signal: stackFieldGroup('max', 'datum')},\n clip: {value: true}\n };\n innerGroupUpdate = {\n y: {field: {group: 'y'}, mult: -1},\n width: {field: {group: 'width'}}\n };\n mark.encode.update = {\n ...omit(mark.encode.update, ['x', 'xc', 'x2']),\n width: {field: {group: 'width'}}\n };\n }\n\n // Deal with cornerRadius properties\n for (const key of VG_CORNERRADIUS_CHANNELS) {\n const configValue = getMarkConfig(key, model.markDef, model.config);\n // Move from mark to group\n if (mark.encode.update[key]) {\n groupUpdate[key] = mark.encode.update[key];\n delete mark.encode.update[key];\n } else if (configValue) {\n groupUpdate[key] = signalOrValueRef(configValue);\n }\n // Overwrite any cornerRadius on mark set by config --- they are already moved to the group\n if (configValue) {\n mark.encode.update[key] = {value: 0};\n }\n }\n\n const groupby: string[] = [];\n\n if (model.stack.groupbyChannels?.length > 0) {\n for (const groupbyChannel of model.stack.groupbyChannels) {\n // For bin and time unit, we have to add bin/timeunit -end channels.\n const groupByField = model.fieldDef(groupbyChannel);\n const field = vgField(groupByField);\n if (field) {\n groupby.push(field);\n }\n\n if (groupByField?.bin || groupByField?.timeUnit) {\n groupby.push(vgField(groupByField, {binSuffix: 'end'}));\n }\n }\n }\n\n const strokeProperties = [\n 'stroke',\n 'strokeWidth',\n 'strokeJoin',\n 'strokeCap',\n 'strokeDash',\n 'strokeDashOffset',\n 'strokeMiterLimit',\n 'strokeOpacity'\n ] as const;\n\n // Generate stroke properties for the group\n groupUpdate = strokeProperties.reduce((encode, prop) => {\n if (mark.encode.update[prop]) {\n return {...encode, [prop]: mark.encode.update[prop]};\n } else {\n const configValue = getMarkConfig(prop, model.markDef, model.config);\n if (configValue !== undefined) {\n return {...encode, [prop]: signalOrValueRef(configValue)};\n } else {\n return encode;\n }\n }\n }, groupUpdate);\n\n // Apply strokeForeground and strokeOffset if stroke is used\n if (groupUpdate.stroke) {\n groupUpdate.strokeForeground = {value: true};\n groupUpdate.strokeOffset = {value: 0};\n }\n\n return [\n {\n type: 'group',\n from: {\n facet: {\n data: model.requestDataName(DataSourceType.Main),\n name: STACK_GROUP_PREFIX + model.requestDataName(DataSourceType.Main),\n groupby,\n aggregate: {\n fields: [\n stackField({suffix: 'start'}),\n stackField({suffix: 'start'}),\n stackField({suffix: 'end'}),\n stackField({suffix: 'end'})\n ],\n ops: ['min', 'max', 'min', 'max']\n }\n }\n },\n encode: {\n update: groupUpdate\n },\n marks: [\n {\n type: 'group',\n encode: {update: innerGroupUpdate},\n marks: [mark]\n }\n ]\n }\n ];\n}\n\nexport function getSort(model: UnitModel): VgCompare {\n const {encoding, stack, mark, markDef, config} = model;\n const order = encoding.order;\n if (\n (!isArray(order) && isValueDef(order) && isNullOrFalse(order.value)) ||\n (!order && isNullOrFalse(getMarkPropOrConfig('order', markDef, config)))\n ) {\n return undefined;\n } else if ((isArray(order) || isFieldDef(order)) && !stack) {\n // Sort by the order field if it is specified and the field is not stacked. (For stacked field, order specify stack order.)\n return sortParams(order, {expr: 'datum'});\n } else if (isPathMark(mark)) {\n // For both line and area, we sort values based on dimension by default\n const dimensionChannel = markDef.orient === 'horizontal' ? 'y' : 'x';\n const dimensionChannelDef = encoding[dimensionChannel];\n if (isFieldDef(dimensionChannelDef)) {\n return {field: dimensionChannel};\n }\n }\n return undefined;\n}\n\nfunction getMarkGroup(model: UnitModel, opt: {fromPrefix: string} = {fromPrefix: ''}) {\n const {mark, markDef, encoding, config} = model;\n\n const clip = getFirstDefined(markDef.clip, scaleClip(model), projectionClip(model));\n const style = getStyles(markDef);\n const key = encoding.key;\n const sort = getSort(model);\n const interactive = interactiveFlag(model);\n const aria = getMarkPropOrConfig('aria', markDef, config);\n\n const postEncodingTransform = markCompiler[mark].postEncodingTransform\n ? markCompiler[mark].postEncodingTransform(model)\n : null;\n\n return [\n {\n name: model.getName('marks'),\n type: markCompiler[mark].vgMark,\n ...(clip ? {clip} : {}),\n ...(style ? {style} : {}),\n ...(key ? {key: key.field} : {}),\n ...(sort ? {sort} : {}),\n ...(interactive ? interactive : {}),\n ...(aria === false ? {aria} : {}),\n from: {data: opt.fromPrefix + model.requestDataName(DataSourceType.Main)},\n encode: {\n update: markCompiler[mark].encodeEntry(model)\n },\n ...(postEncodingTransform\n ? {\n transform: postEncodingTransform\n }\n : {})\n }\n ];\n}\n\n/**\n * If scales are bound to interval selections, we want to automatically clip\n * marks to account for panning/zooming interactions. We identify bound scales\n * by the selectionExtent property, which gets added during scale parsing.\n */\nfunction scaleClip(model: UnitModel) {\n const xScale = model.getScaleComponent('x');\n const yScale = model.getScaleComponent('y');\n return xScale?.get('selectionExtent') || yScale?.get('selectionExtent') ? true : undefined;\n}\n\n/**\n * If we use a custom projection with auto-fitting to the geodata extent,\n * we need to clip to ensure the chart size doesn't explode.\n */\nfunction projectionClip(model: UnitModel) {\n const projection = model.component.projection;\n return projection && !projection.isFit ? true : undefined;\n}\n\n/**\n * Only output interactive flags if we have selections defined somewhere in our model hierarchy.\n */\nfunction interactiveFlag(model: UnitModel) {\n if (!model.component.selection) return null;\n const unitCount = keys(model.component.selection).length;\n let parentCount = unitCount;\n let parent = model.parent;\n while (parent && parentCount === 0) {\n parentCount = keys(parent.component.selection).length;\n parent = parent.parent;\n }\n return parentCount\n ? {\n interactive: unitCount > 0 || model.mark === 'geoshape' || !!model.encoding.tooltip || !!model.markDef.tooltip\n }\n : null;\n}\n", "import {NewSignal, SignalRef} from 'vega';\nimport {isArray} from 'vega-util';\nimport {Axis, AxisInternal, isConditionalAxisValue} from '../axis';\nimport {\n Channel,\n GEOPOSITION_CHANNELS,\n NonPositionScaleChannel,\n NONPOSITION_SCALE_CHANNELS,\n PositionChannel,\n POSITION_SCALE_CHANNELS,\n ScaleChannel,\n SCALE_CHANNELS,\n SingleDefChannel,\n supportLegend,\n X,\n Y\n} from '../channel';\nimport {\n getFieldDef,\n getFieldOrDatumDef,\n isFieldOrDatumDef,\n isTypedFieldDef,\n MarkPropFieldOrDatumDef,\n PositionFieldDef\n} from '../channeldef';\nimport {Config} from '../config';\nimport {isGraticuleGenerator} from '../data';\nimport * as vlEncoding from '../encoding';\nimport {Encoding, initEncoding} from '../encoding';\nimport {ExprRef, replaceExprRef} from '../expr';\nimport {LegendInternal} from '../legend';\nimport {GEOSHAPE, isMarkDef, Mark, MarkDef} from '../mark';\nimport {Projection} from '../projection';\nimport {Domain, Scale} from '../scale';\nimport {isSelectionParameter, SelectionParameter} from '../selection';\nimport {LayoutSizeMixins, NormalizedUnitSpec} from '../spec';\nimport {isFrameMixins} from '../spec/base';\nimport {stack, StackProperties} from '../stack';\nimport {keys} from '../util';\nimport {VgData, VgLayout, VgMarkGroup} from '../vega.schema';\nimport {assembleAxisSignals} from './axis/assemble';\nimport {AxisInternalIndex} from './axis/component';\nimport {parseUnitAxes} from './axis/parse';\nimport {signalOrValueRefWithCondition, signalRefOrValue} from './common';\nimport {parseData} from './data/parse';\nimport {assembleLayoutSignals} from './layoutsize/assemble';\nimport {initLayoutSize} from './layoutsize/init';\nimport {parseUnitLayoutSize} from './layoutsize/parse';\nimport {LegendInternalIndex} from './legend/component';\nimport {defaultFilled, initMarkdef} from './mark/init';\nimport {parseMarkGroups} from './mark/mark';\nimport {isLayerModel, Model, ModelWithField} from './model';\nimport {ScaleIndex} from './scale/component';\nimport {\n assembleTopLevelSignals,\n assembleUnitSelectionData,\n assembleUnitSelectionMarks,\n assembleUnitSelectionSignals\n} from './selection/assemble';\nimport {parseUnitSelection} from './selection/parse';\nimport {CURR} from './selection/point';\n\n/**\n * Internal model of Vega-Lite specification for the compiler.\n */\nexport class UnitModel extends ModelWithField {\n public readonly markDef: MarkDef<Mark, SignalRef>;\n public readonly encoding: Encoding<string>;\n\n public readonly specifiedScales: ScaleIndex = {};\n\n public readonly stack: StackProperties;\n\n protected specifiedAxes: AxisInternalIndex = {};\n\n protected specifiedLegends: LegendInternalIndex = {};\n\n public specifiedProjection: Projection<ExprRef | SignalRef> = {};\n\n public readonly selection: SelectionParameter[] = [];\n public children: Model[] = [];\n\n constructor(\n spec: NormalizedUnitSpec,\n parent: Model,\n parentGivenName: string,\n parentGivenSize: LayoutSizeMixins = {},\n config: Config<SignalRef>\n ) {\n super(spec, 'unit', parent, parentGivenName, config, undefined, isFrameMixins(spec) ? spec.view : undefined);\n\n const markDef = isMarkDef(spec.mark) ? {...spec.mark} : {type: spec.mark};\n const mark = markDef.type;\n\n // Need to init filled before other mark properties because encoding depends on filled but other mark properties depend on types inside encoding\n if (markDef.filled === undefined) {\n markDef.filled = defaultFilled(markDef, config, {\n graticule: spec.data && isGraticuleGenerator(spec.data)\n });\n }\n\n const encoding = (this.encoding = initEncoding(spec.encoding || {}, mark, markDef.filled, config));\n this.markDef = initMarkdef(markDef, encoding, config);\n\n this.size = initLayoutSize({\n encoding,\n size: isFrameMixins(spec)\n ? {\n ...parentGivenSize,\n ...(spec.width ? {width: spec.width} : {}),\n ...(spec.height ? {height: spec.height} : {})\n }\n : parentGivenSize\n });\n\n // calculate stack properties\n this.stack = stack(this.markDef, encoding);\n this.specifiedScales = this.initScales(mark, encoding);\n\n this.specifiedAxes = this.initAxes(encoding);\n this.specifiedLegends = this.initLegends(encoding);\n this.specifiedProjection = spec.projection;\n\n // Selections will be initialized upon parse.\n this.selection = (spec.params ?? []).filter(p => isSelectionParameter(p)) as SelectionParameter[];\n }\n\n public get hasProjection(): boolean {\n const {encoding} = this;\n const isGeoShapeMark = this.mark === GEOSHAPE;\n const hasGeoPosition = encoding && GEOPOSITION_CHANNELS.some(channel => isFieldOrDatumDef(encoding[channel]));\n return isGeoShapeMark || hasGeoPosition;\n }\n\n /**\n * Return specified Vega-Lite scale domain for a particular channel\n * @param channel\n */\n public scaleDomain(channel: ScaleChannel): Domain {\n const scale = this.specifiedScales[channel];\n return scale ? scale.domain : undefined;\n }\n\n public axis(channel: PositionChannel): AxisInternal {\n return (this.specifiedAxes as any)[channel];\n }\n\n public legend(channel: NonPositionScaleChannel): LegendInternal {\n return this.specifiedLegends[channel];\n }\n\n private initScales(mark: Mark, encoding: Encoding<string>): ScaleIndex {\n return SCALE_CHANNELS.reduce((scales, channel) => {\n const fieldOrDatumDef = getFieldOrDatumDef(encoding[channel]) as\n | PositionFieldDef<string>\n | MarkPropFieldOrDatumDef<string>;\n if (fieldOrDatumDef) {\n scales[channel] = this.initScale(fieldOrDatumDef.scale ?? {});\n }\n return scales;\n }, {} as ScaleIndex);\n }\n\n private initScale(scale: Scale<ExprRef | SignalRef>): Scale<SignalRef> {\n const {domain, range} = scale;\n // TODO: we could simplify this function if we had a recursive replace function\n const scaleInternal = replaceExprRef(scale);\n if (isArray(domain)) {\n scaleInternal.domain = domain.map(signalRefOrValue);\n }\n if (isArray(range)) {\n scaleInternal.range = range.map(signalRefOrValue);\n }\n return scaleInternal as Scale<SignalRef>;\n }\n\n private initAxes(encoding: Encoding<string>): AxisInternalIndex {\n return POSITION_SCALE_CHANNELS.reduce((_axis, channel) => {\n // Position Axis\n\n // TODO: handle ConditionFieldDef\n const channelDef = encoding[channel];\n if (\n isFieldOrDatumDef(channelDef) ||\n (channel === X && isFieldOrDatumDef(encoding.x2)) ||\n (channel === Y && isFieldOrDatumDef(encoding.y2))\n ) {\n const axisSpec = isFieldOrDatumDef(channelDef) ? channelDef.axis : undefined;\n\n _axis[channel] = axisSpec\n ? this.initAxis({...axisSpec}) // convert truthy value to object\n : axisSpec;\n }\n return _axis;\n }, {} as any);\n }\n\n private initAxis(axis: Axis<ExprRef | SignalRef>): Axis<SignalRef> {\n const props = keys(axis);\n const axisInternal: any = {};\n for (const prop of props) {\n const val = axis[prop];\n axisInternal[prop] = isConditionalAxisValue<any, ExprRef | SignalRef>(val)\n ? signalOrValueRefWithCondition<any>(val)\n : signalRefOrValue(val);\n }\n return axisInternal;\n }\n\n private initLegends(encoding: Encoding<string>): LegendInternalIndex {\n return NONPOSITION_SCALE_CHANNELS.reduce((_legend, channel) => {\n const fieldOrDatumDef = getFieldOrDatumDef(encoding[channel]) as MarkPropFieldOrDatumDef<string>;\n\n if (fieldOrDatumDef && supportLegend(channel)) {\n const legend = fieldOrDatumDef.legend;\n _legend[channel] = legend\n ? replaceExprRef(legend) // convert truthy value to object\n : legend;\n }\n\n return _legend;\n }, {} as any);\n }\n\n public parseData() {\n this.component.data = parseData(this);\n }\n\n public parseLayoutSize() {\n parseUnitLayoutSize(this);\n }\n\n public parseSelections() {\n this.component.selection = parseUnitSelection(this, this.selection);\n }\n\n public parseMarkGroup() {\n this.component.mark = parseMarkGroups(this);\n }\n\n public parseAxesAndHeaders() {\n this.component.axes = parseUnitAxes(this);\n }\n\n public assembleSelectionTopLevelSignals(signals: any[]): NewSignal[] {\n return assembleTopLevelSignals(this, signals);\n }\n\n public assembleSignals(): NewSignal[] {\n return [...assembleAxisSignals(this), ...assembleUnitSelectionSignals(this, [])];\n }\n\n public assembleSelectionData(data: readonly VgData[]): VgData[] {\n return assembleUnitSelectionData(this, data);\n }\n\n public assembleLayout(): VgLayout {\n return null;\n }\n\n public assembleLayoutSignals(): NewSignal[] {\n return assembleLayoutSignals(this);\n }\n\n /**\n * Corrects the data references in marks after assemble.\n */\n public correctDataNames = (mark: VgMarkGroup) => {\n // for normal data references\n if (mark.from?.data) {\n mark.from.data = this.lookupDataSource(mark.from.data);\n if ('time' in this.encoding) {\n mark.from.data = mark.from.data + CURR;\n }\n }\n\n // for access to facet data\n if (mark.from?.facet?.data) {\n mark.from.facet.data = this.lookupDataSource(mark.from.facet.data);\n // TOOD(jzong) uncomment this when it's time to implement facet animation\n // if ('time' in this.encoding) {\n // mark.from.facet.data = mark.from.facet.data + CURR;\n // }\n }\n\n return mark;\n };\n\n public assembleMarks() {\n let marks = this.component.mark ?? [];\n\n // If this unit is part of a layer, selections should augment\n // all in concert rather than each unit individually. This\n // ensures correct interleaving of clipping and brushed marks.\n if (!this.parent || !isLayerModel(this.parent)) {\n marks = assembleUnitSelectionMarks(this, marks);\n }\n\n return marks.map(this.correctDataNames);\n }\n public assembleGroupStyle(): string | string[] {\n const {style} = this.view || {};\n if (style !== undefined) {\n return style;\n }\n if (this.encoding.x || this.encoding.y) {\n return 'cell';\n } else {\n return 'view';\n }\n }\n\n protected getMapping() {\n return this.encoding;\n }\n\n public get mark(): Mark {\n return this.markDef.type;\n }\n\n public channelHasField(channel: Channel) {\n return vlEncoding.channelHasField(this.encoding, channel);\n }\n\n public fieldDef(channel: SingleDefChannel) {\n const channelDef = (this.encoding as any)[channel];\n return getFieldDef<string>(channelDef);\n }\n\n public typedFieldDef(channel: SingleDefChannel) {\n const fieldDef = this.fieldDef(channel);\n if (isTypedFieldDef(fieldDef)) {\n return fieldDef;\n }\n return null;\n }\n}\n", "import {Legend as VgLegend, NewSignal, SignalRef, Title as VgTitle} from 'vega';\nimport {array} from 'vega-util';\nimport {Config} from '../config';\nimport * as log from '../log';\nimport {isLayerSpec, isUnitSpec, LayoutSizeMixins, NormalizedLayerSpec} from '../spec';\nimport {keys} from '../util';\nimport {VgData, VgLayout} from '../vega.schema';\nimport {assembleAxisSignals} from './axis/assemble';\nimport {parseLayerAxes} from './axis/parse';\nimport {parseData} from './data/parse';\nimport {assembleLayoutSignals} from './layoutsize/assemble';\nimport {parseLayerLayoutSize} from './layoutsize/parse';\nimport {assembleLegends} from './legend/assemble';\nimport {Model} from './model';\nimport {assembleLayerSelectionMarks} from './selection/assemble';\nimport {UnitModel} from './unit';\nimport {isTimerSelection} from './selection';\nimport {MULTI_VIEW_ANIMATION_UNSUPPORTED} from '../log/message';\n\nexport class LayerModel extends Model {\n // HACK: This should be (LayerModel | UnitModel)[], but setting the correct type leads to weird error.\n // So I'm just putting generic Model for now\n public readonly children: Model[];\n\n constructor(\n spec: NormalizedLayerSpec,\n parent: Model,\n parentGivenName: string,\n parentGivenSize: LayoutSizeMixins,\n config: Config<SignalRef>\n ) {\n super(spec, 'layer', parent, parentGivenName, config, spec.resolve, spec.view);\n\n const layoutSize = {\n ...parentGivenSize,\n ...(spec.width ? {width: spec.width} : {}),\n ...(spec.height ? {height: spec.height} : {})\n };\n\n this.children = spec.layer.map((layer, i) => {\n if (isLayerSpec(layer)) {\n return new LayerModel(layer, this, this.getName(`layer_${i}`), layoutSize, config);\n } else if (isUnitSpec(layer)) {\n return new UnitModel(layer, this, this.getName(`layer_${i}`), layoutSize, config);\n }\n\n throw new Error(log.message.invalidSpec(layer));\n });\n }\n\n public parseData() {\n this.component.data = parseData(this);\n for (const child of this.children) {\n child.parseData();\n }\n }\n\n public parseLayoutSize() {\n parseLayerLayoutSize(this);\n }\n\n public parseSelections() {\n // Merge selections up the hierarchy so that they may be referenced\n // across unit specs. Persist their definitions within each child\n // to assemble signals which remain within output Vega unit groups.\n this.component.selection = {};\n for (const child of this.children) {\n child.parseSelections();\n for (const key of keys(child.component.selection)) {\n this.component.selection[key] = child.component.selection[key];\n }\n }\n\n if (Object.values(this.component.selection).some(selCmpt => isTimerSelection(selCmpt))) {\n log.error(MULTI_VIEW_ANIMATION_UNSUPPORTED);\n }\n }\n\n public parseMarkGroup() {\n for (const child of this.children) {\n child.parseMarkGroup();\n }\n }\n\n public parseAxesAndHeaders() {\n parseLayerAxes(this);\n }\n\n public assembleSelectionTopLevelSignals(signals: NewSignal[]): NewSignal[] {\n return this.children.reduce((sg, child) => child.assembleSelectionTopLevelSignals(sg), signals);\n }\n\n // TODO: Support same named selections across children.\n public assembleSignals(): NewSignal[] {\n return this.children.reduce((signals, child) => {\n return signals.concat(child.assembleSignals());\n }, assembleAxisSignals(this));\n }\n\n public assembleLayoutSignals(): NewSignal[] {\n return this.children.reduce((signals, child) => {\n return signals.concat(child.assembleLayoutSignals());\n }, assembleLayoutSignals(this));\n }\n\n public assembleSelectionData(data: readonly VgData[]): readonly VgData[] {\n return this.children.reduce((db, child) => child.assembleSelectionData(db), data);\n }\n\n public assembleGroupStyle(): string | string[] {\n const uniqueStyles = new Set<string>();\n for (const child of this.children) {\n for (const style of array(child.assembleGroupStyle())) {\n uniqueStyles.add(style);\n }\n }\n const styles = Array.from(uniqueStyles);\n return styles.length > 1 ? styles : styles.length === 1 ? styles[0] : undefined;\n }\n\n public assembleTitle(): VgTitle {\n let title = super.assembleTitle();\n if (title) {\n return title;\n }\n // If title does not provide layer, look into children\n for (const child of this.children) {\n title = child.assembleTitle();\n if (title) {\n return title;\n }\n }\n return undefined;\n }\n\n public assembleLayout(): VgLayout {\n return null;\n }\n\n public assembleMarks(): any[] {\n return assembleLayerSelectionMarks(\n this,\n this.children.flatMap(child => {\n return child.assembleMarks();\n })\n );\n }\n\n public assembleLegends(): VgLegend[] {\n return this.children.reduce((legends, child) => {\n return legends.concat(child.assembleLegends());\n }, assembleLegends(this));\n }\n}\n", "import type {SignalRef} from 'vega';\nimport {Config} from '../config';\nimport * as log from '../log';\nimport {isAnyConcatSpec, isFacetSpec, isLayerSpec, isUnitSpec, LayoutSizeMixins, NormalizedSpec} from '../spec';\nimport {ConcatModel} from './concat';\nimport {FacetModel} from './facet';\nimport {LayerModel} from './layer';\nimport {Model} from './model';\nimport {UnitModel} from './unit';\n\nexport function buildModel(\n spec: NormalizedSpec,\n parent: Model,\n parentGivenName: string,\n unitSize: LayoutSizeMixins,\n config: Config<SignalRef>\n): Model {\n if (isFacetSpec(spec)) {\n return new FacetModel(spec, parent, parentGivenName, config);\n } else if (isLayerSpec(spec)) {\n return new LayerModel(spec, parent, parentGivenName, unitSize, config);\n } else if (isUnitSpec(spec)) {\n return new UnitModel(spec, parent, parentGivenName, unitSize, config);\n } else if (isAnyConcatSpec(spec)) {\n return new ConcatModel(spec, parent, parentGivenName, config);\n }\n throw new Error(log.message.invalidSpec(spec));\n}\n", "import type {AutoSizeType, LoggerInterface, Spec as VgSpec} from 'vega';\nimport {isString, mergeConfig} from 'vega-util';\nimport {getPositionScaleChannel} from '../channel';\nimport * as vlFieldDef from '../channeldef';\nimport {Config, initConfig, stripAndRedirectConfig} from '../config';\nimport * as log from '../log';\nimport {normalize} from '../normalize';\nimport {assembleParameterSignals} from '../parameter';\nimport {LayoutSizeMixins, TopLevel, TopLevelSpec} from '../spec';\nimport {\n AutoSizeParams,\n Datasets,\n extractTopLevelProperties,\n getFitType,\n isFitType,\n TopLevelProperties\n} from '../spec/toplevel';\nimport {Dict, keys} from '../util';\nimport {buildModel} from './buildmodel';\nimport {assembleRootData} from './data/assemble';\nimport {optimizeDataflow} from './data/optimize';\nimport {Model} from './model';\n\nexport interface CompileOptions {\n /**\n * Sets a Vega-Lite configuration.\n */\n config?: Config;\n\n /**\n * Sets a custom logger.\n */\n logger?: LoggerInterface;\n\n /**\n * Sets a field title formatter.\n */\n fieldTitle?: vlFieldDef.FieldTitleFormatter;\n}\n\n/**\n * Vega-Lite's main function, for compiling Vega-Lite spec into Vega spec.\n *\n * At a high-level, we make the following transformations in different phases:\n *\n * Input spec\n * |\n * | (Normalization)\n * v\n * Normalized Spec (Row/Column channels in single-view specs becomes faceted specs, composite marks becomes layered specs.)\n * |\n * | (Build Model)\n * v\n * A model tree of the spec\n * |\n * | (Parse)\n * v\n * A model tree with parsed components (intermediate structure of visualization primitives in a format that can be easily merged)\n * |\n * | (Optimize)\n * v\n * A model tree with parsed components with the data component optimized\n * |\n * | (Assemble)\n * v\n * Vega spec\n *\n * @param inputSpec The Vega-Lite specification.\n * @param opt Optional arguments passed to the Vega-Lite compiler.\n * @returns An object containing the compiled Vega spec and normalized Vega-Lite spec.\n */\nexport function compile(inputSpec: TopLevelSpec, opt: CompileOptions = {}) {\n // 0. Augment opt with default opts\n if (opt.logger) {\n // set the singleton logger to the provided logger\n log.set(opt.logger);\n }\n\n if (opt.fieldTitle) {\n // set the singleton field title formatter\n vlFieldDef.setTitleFormatter(opt.fieldTitle);\n }\n\n try {\n // 1. Initialize config by deep merging default config with the config provided via option and the input spec.\n const config = initConfig(mergeConfig(opt.config, inputSpec.config));\n\n // 2. Normalize: Convert input spec -> normalized spec\n\n // - Decompose all extended unit specs into composition of unit spec. For example, a box plot get expanded into multiple layers of bars, ticks, and rules. The shorthand row/column channel is also expanded to a facet spec.\n // - Normalize autosize and width or height spec\n const spec = normalize(inputSpec, config);\n\n // 3. Build Model: normalized spec -> Model (a tree structure)\n\n // This phases instantiates the models with default config by doing a top-down traversal. This allows us to pass properties that child models derive from their parents via their constructors.\n // See the abstract `Model` class and its children (UnitModel, LayerModel, FacetModel, ConcatModel) for different types of models.\n const model: Model = buildModel(spec, null, '', undefined, config);\n\n // 4 Parse: Model --> Model with components\n\n // Note that components = intermediate representations that are equivalent to Vega specs.\n // We need these intermediate representation because we need to merge many visualization \"components\" like projections, scales, axes, and legends.\n // We will later convert these components into actual Vega specs in the assemble phase.\n\n // In this phase, we do a bottom-up traversal over the whole tree to\n // parse for each type of components once (e.g., data, layout, mark, scale).\n // By doing bottom-up traversal, we start parsing components of unit specs and\n // then merge child components of parent composite specs.\n //\n // Please see inside model.parse() for order of different components parsed.\n model.parse();\n\n // drawDataflow(model.component.data.sources);\n\n // 5. Optimize the dataflow. This will modify the data component of the model.\n optimizeDataflow(model.component.data, model);\n\n // drawDataflow(model.component.data.sources);\n\n // 6. Assemble: convert model components --> Vega Spec.\n const vgSpec = assembleTopLevelModel(\n model,\n getTopLevelProperties(inputSpec, spec.autosize, config, model),\n inputSpec.datasets,\n inputSpec.usermeta\n );\n\n return {\n spec: vgSpec,\n normalized: spec\n };\n } finally {\n // Reset the singleton logger if a logger is provided\n if (opt.logger) {\n log.reset();\n }\n // Reset the singleton field title formatter if provided\n if (opt.fieldTitle) {\n vlFieldDef.resetTitleFormatter();\n }\n }\n}\n\nfunction getTopLevelProperties(\n inputSpec: TopLevel<any>,\n autosize: AutoSizeType | AutoSizeParams,\n config: Config,\n model: Model\n) {\n const width = model.component.layoutSize.get('width');\n const height = model.component.layoutSize.get('height');\n if (autosize === undefined) {\n autosize = {type: 'pad'};\n if (model.hasAxisOrientSignalRef()) {\n autosize.resize = true;\n }\n } else if (isString(autosize)) {\n autosize = {type: autosize};\n }\n if (width && height && isFitType(autosize.type)) {\n if (width === 'step' && height === 'step') {\n log.warn(log.message.droppingFit());\n autosize.type = 'pad';\n } else if (width === 'step' || height === 'step') {\n // effectively XOR, because else if\n\n // get step dimension\n const sizeType = width === 'step' ? 'width' : 'height';\n // log that we're dropping fit for respective channel\n log.warn(log.message.droppingFit(getPositionScaleChannel(sizeType)));\n\n // setting type to inverse fit (so if we dropped fit-x, type is now fit-y)\n const inverseSizeType = sizeType === 'width' ? 'height' : 'width';\n autosize.type = getFitType(inverseSizeType);\n }\n }\n\n return {\n ...(keys(autosize).length === 1 && autosize.type\n ? autosize.type === 'pad'\n ? {}\n : {autosize: autosize.type}\n : {autosize}),\n ...extractTopLevelProperties(config, false),\n ...extractTopLevelProperties(inputSpec, true)\n };\n}\n\n/*\n * Assemble the top-level model to a Vega spec.\n *\n * Note: this couldn't be `model.assemble()` since the top-level model\n * needs some special treatment to generate top-level properties.\n */\nfunction assembleTopLevelModel(\n model: Model,\n topLevelProperties: TopLevelProperties & LayoutSizeMixins,\n datasets: Datasets = {},\n usermeta: Dict<any>\n): VgSpec {\n // Config with Vega-Lite only config removed.\n const vgConfig = model.config ? stripAndRedirectConfig(model.config) : undefined;\n\n const rootData = assembleRootData(model.component.data, datasets);\n const data = model.assembleSelectionData(rootData);\n\n const projections = model.assembleProjections();\n const title = model.assembleTitle();\n const style = model.assembleGroupStyle();\n const encodeEntry = model.assembleGroupEncodeEntry(true);\n\n let layoutSignals = model.assembleLayoutSignals();\n\n // move width and height signals with values to top level\n layoutSignals = layoutSignals.filter(signal => {\n if ((signal.name === 'width' || signal.name === 'height') && signal.value !== undefined) {\n topLevelProperties[signal.name] = +signal.value;\n return false;\n }\n return true;\n });\n\n const {params, ...otherTopLevelProps} = topLevelProperties;\n\n return {\n $schema: 'https://vega.github.io/schema/vega/v5.json',\n ...(model.description ? {description: model.description} : {}),\n ...otherTopLevelProps,\n ...(title ? {title} : {}),\n ...(style ? {style} : {}),\n ...(encodeEntry ? {encode: {update: encodeEntry}} : {}),\n data,\n ...(projections.length > 0 ? {projections} : {}),\n ...model.assembleGroup([\n ...layoutSignals,\n ...model.assembleSelectionTopLevelSignals([]),\n ...assembleParameterSignals(params)\n ]),\n ...(vgConfig ? {config: vgConfig} : {}),\n ...(usermeta ? {usermeta} : {})\n };\n}\n", "/**\n * Parse a vega schema url into library and version.\n */\nexport default function(url: string) {\n const regex = /schema\\/([\\w-]+)\\/([\\w\\.\\-]+)\\.json$/g;\n const [library, version] = regex.exec(url)!.slice(1, 3);\n return {library: library as 'vega' | 'vega-lite', version};\n}\n", "var name = \"vega-themes\";\nvar version$1 = \"2.15.0\";\nvar description = \"Themes for stylized Vega and Vega-Lite visualizations.\";\nvar keywords = [\"vega\", \"vega-lite\", \"themes\", \"style\"];\nvar license = \"BSD-3-Clause\";\nvar author = {\n name: \"UW Interactive Data Lab\",\n url: \"https://idl.cs.washington.edu\"\n};\nvar contributors = [{\n name: \"Emily Gu\",\n url: \"https://github.com/emilygu\"\n}, {\n name: \"Arvind Satyanarayan\",\n url: \"http://arvindsatya.com\"\n}, {\n name: \"Jeffrey Heer\",\n url: \"https://idl.cs.washington.edu\"\n}, {\n name: \"Dominik Moritz\",\n url: \"https://www.domoritz.de\"\n}];\nvar main = \"build/vega-themes.js\";\nvar module = \"build/vega-themes.module.js\";\nvar unpkg = \"build/vega-themes.min.js\";\nvar jsdelivr = \"build/vega-themes.min.js\";\nvar types = \"build/vega-themes.module.d.ts\";\nvar repository = {\n type: \"git\",\n url: \"https://github.com/vega/vega-themes.git\"\n};\nvar files = [\"src\", \"build\"];\nvar scripts = {\n prebuild: \"yarn clean\",\n build: \"rollup -c\",\n clean: \"rimraf build && rimraf examples/build\",\n \"copy:data\": \"rsync -r node_modules/vega-datasets/data/* examples/data\",\n \"copy:build\": \"rsync -r build/* examples/build\",\n \"deploy:gh\": \"yarn build && mkdir -p examples/build && rsync -r build/* examples/build && gh-pages -d examples\",\n preversion: \"yarn lint\",\n serve: \"browser-sync start -s -f build examples --serveStatic examples\",\n start: \"yarn build && concurrently --kill-others -n Server,Rollup 'yarn serve' 'rollup -c -w'\",\n format: \"eslint . --fix\",\n lint: \"eslint .\",\n release: \"release-it\"\n};\nvar devDependencies = {\n \"@babel/core\": \"^7.24.6\",\n \"@babel/plugin-transform-runtime\": \"^7.24.6\",\n \"@babel/preset-env\": \"^7.24.6\",\n \"@babel/preset-typescript\": \"^7.24.6\",\n \"@release-it/conventional-changelog\": \"^8.0.1\",\n \"@rollup/plugin-json\": \"^6.1.0\",\n \"@rollup/plugin-node-resolve\": \"^15.2.3\",\n \"@rollup/plugin-terser\": \"^0.4.4\",\n \"@typescript-eslint/eslint-plugin\": \"^7.11.0\",\n \"@typescript-eslint/parser\": \"^7.11.0\",\n \"browser-sync\": \"^3.0.2\",\n concurrently: \"^8.2.2\",\n eslint: \"^8.45.0\",\n \"eslint-config-prettier\": \"^9.1.0\",\n \"eslint-plugin-prettier\": \"^5.1.3\",\n \"gh-pages\": \"^6.1.1\",\n prettier: \"^3.2.5\",\n \"release-it\": \"^17.3.0\",\n rollup: \"^4.18.0\",\n \"rollup-plugin-bundle-size\": \"^1.0.3\",\n \"rollup-plugin-ts\": \"^3.4.5\",\n typescript: \"^5.4.5\",\n vega: \"^5.25.0\",\n \"vega-lite\": \"^5.9.3\"\n};\nvar peerDependencies = {\n vega: \"*\",\n \"vega-lite\": \"*\"\n};\nvar dependencies = {};\nvar pkg = {\n name: name,\n version: version$1,\n description: description,\n keywords: keywords,\n license: license,\n author: author,\n contributors: contributors,\n main: main,\n module: module,\n unpkg: unpkg,\n jsdelivr: jsdelivr,\n types: types,\n repository: repository,\n files: files,\n scripts: scripts,\n devDependencies: devDependencies,\n peerDependencies: peerDependencies,\n dependencies: dependencies\n};\n\nconst lightColor = '#fff';\nconst medColor = '#888';\nconst darkTheme = {\n background: '#333',\n view: {\n stroke: medColor\n },\n title: {\n color: lightColor,\n subtitleColor: lightColor\n },\n style: {\n 'guide-label': {\n fill: lightColor\n },\n 'guide-title': {\n fill: lightColor\n }\n },\n axis: {\n domainColor: lightColor,\n gridColor: medColor,\n tickColor: lightColor\n }\n};\n\nconst markColor$7 = '#4572a7';\nconst excelTheme = {\n background: '#fff',\n arc: {\n fill: markColor$7\n },\n area: {\n fill: markColor$7\n },\n line: {\n stroke: markColor$7,\n strokeWidth: 2\n },\n path: {\n stroke: markColor$7\n },\n rect: {\n fill: markColor$7\n },\n shape: {\n stroke: markColor$7\n },\n symbol: {\n fill: markColor$7,\n strokeWidth: 1.5,\n size: 50\n },\n axis: {\n bandPosition: 0.5,\n grid: true,\n gridColor: '#000000',\n gridOpacity: 1,\n gridWidth: 0.5,\n labelPadding: 10,\n tickSize: 5,\n tickWidth: 0.5\n },\n axisBand: {\n grid: false,\n tickExtra: true\n },\n legend: {\n labelBaseline: 'middle',\n labelFontSize: 11,\n symbolSize: 50,\n symbolType: 'square'\n },\n range: {\n category: ['#4572a7', '#aa4643', '#8aa453', '#71598e', '#4598ae', '#d98445', '#94aace', '#d09393', '#b9cc98', '#a99cbc']\n }\n};\n\nconst markColor$6 = '#30a2da';\nconst axisColor$2 = '#cbcbcb';\nconst guideLabelColor = '#999';\nconst guideTitleColor = '#333';\nconst backgroundColor$2 = '#f0f0f0';\nconst blackTitle = '#333';\nconst fiveThirtyEightTheme = {\n arc: {\n fill: markColor$6\n },\n area: {\n fill: markColor$6\n },\n axis: {\n domainColor: axisColor$2,\n grid: true,\n gridColor: axisColor$2,\n gridWidth: 1,\n labelColor: guideLabelColor,\n labelFontSize: 10,\n titleColor: guideTitleColor,\n tickColor: axisColor$2,\n tickSize: 10,\n titleFontSize: 14,\n titlePadding: 10,\n labelPadding: 4\n },\n axisBand: {\n grid: false\n },\n background: backgroundColor$2,\n group: {\n fill: backgroundColor$2\n },\n legend: {\n labelColor: blackTitle,\n labelFontSize: 11,\n padding: 1,\n symbolSize: 30,\n symbolType: 'square',\n titleColor: blackTitle,\n titleFontSize: 14,\n titlePadding: 10\n },\n line: {\n stroke: markColor$6,\n strokeWidth: 2\n },\n path: {\n stroke: markColor$6,\n strokeWidth: 0.5\n },\n rect: {\n fill: markColor$6\n },\n range: {\n category: ['#30a2da', '#fc4f30', '#e5ae38', '#6d904f', '#8b8b8b', '#b96db8', '#ff9e27', '#56cc60', '#52d2ca', '#52689e', '#545454', '#9fe4f8'],\n diverging: ['#cc0020', '#e77866', '#f6e7e1', '#d6e8ed', '#91bfd9', '#1d78b5'],\n heatmap: ['#d6e8ed', '#cee0e5', '#91bfd9', '#549cc6', '#1d78b5']\n },\n point: {\n filled: true,\n shape: 'circle'\n },\n shape: {\n stroke: markColor$6\n },\n bar: {\n binSpacing: 2,\n fill: markColor$6,\n stroke: null\n },\n title: {\n anchor: 'start',\n fontSize: 24,\n fontWeight: 600,\n offset: 20\n }\n};\n\nconst markColor$5 = '#000';\nconst ggplot2Theme = {\n group: {\n fill: '#e5e5e5'\n },\n arc: {\n fill: markColor$5\n },\n area: {\n fill: markColor$5\n },\n line: {\n stroke: markColor$5\n },\n path: {\n stroke: markColor$5\n },\n rect: {\n fill: markColor$5\n },\n shape: {\n stroke: markColor$5\n },\n symbol: {\n fill: markColor$5,\n size: 40\n },\n axis: {\n domain: false,\n grid: true,\n gridColor: '#FFFFFF',\n gridOpacity: 1,\n labelColor: '#7F7F7F',\n labelPadding: 4,\n tickColor: '#7F7F7F',\n tickSize: 5.67,\n titleFontSize: 16,\n titleFontWeight: 'normal'\n },\n legend: {\n labelBaseline: 'middle',\n labelFontSize: 11,\n symbolSize: 40\n },\n range: {\n category: ['#000000', '#7F7F7F', '#1A1A1A', '#999999', '#333333', '#B0B0B0', '#4D4D4D', '#C9C9C9', '#666666', '#DCDCDC']\n }\n};\n\nconst headlineFontSize = 22;\nconst headlineFontWeight = 'normal';\nconst labelFont$1 = 'Benton Gothic, sans-serif';\nconst labelFontSize = 11.5;\nconst labelFontWeight = 'normal';\nconst markColor$4 = '#82c6df';\n// const markHighlight = '#006d8f';\n// const markDemocrat = '#5789b8';\n// const markRepublican = '#d94f54';\nconst titleFont = 'Benton Gothic Bold, sans-serif';\nconst titleFontWeight = 'normal';\nconst titleFontSize$1 = 13;\nconst colorSchemes$1 = {\n 'category-6': ['#ec8431', '#829eb1', '#c89d29', '#3580b1', '#adc839', '#ab7fb4'],\n 'fire-7': ['#fbf2c7', '#f9e39c', '#f8d36e', '#f4bb6a', '#e68a4f', '#d15a40', '#ab4232'],\n 'fireandice-6': ['#e68a4f', '#f4bb6a', '#f9e39c', '#dadfe2', '#a6b7c6', '#849eae'],\n 'ice-7': ['#edefee', '#dadfe2', '#c4ccd2', '#a6b7c6', '#849eae', '#607785', '#47525d']\n};\nconst latimesTheme = {\n background: '#ffffff',\n title: {\n anchor: 'start',\n color: '#000000',\n font: titleFont,\n fontSize: headlineFontSize,\n fontWeight: headlineFontWeight\n },\n arc: {\n fill: markColor$4\n },\n area: {\n fill: markColor$4\n },\n line: {\n stroke: markColor$4,\n strokeWidth: 2\n },\n path: {\n stroke: markColor$4\n },\n rect: {\n fill: markColor$4\n },\n shape: {\n stroke: markColor$4\n },\n symbol: {\n fill: markColor$4,\n size: 30\n },\n axis: {\n labelFont: labelFont$1,\n labelFontSize,\n labelFontWeight,\n titleFont,\n titleFontSize: titleFontSize$1,\n titleFontWeight\n },\n axisX: {\n labelAngle: 0,\n labelPadding: 4,\n tickSize: 3\n },\n axisY: {\n labelBaseline: 'middle',\n maxExtent: 45,\n minExtent: 45,\n tickSize: 2,\n titleAlign: 'left',\n titleAngle: 0,\n titleX: -45,\n titleY: -11\n },\n legend: {\n labelFont: labelFont$1,\n labelFontSize,\n symbolType: 'square',\n titleFont,\n titleFontSize: titleFontSize$1,\n titleFontWeight\n },\n range: {\n category: colorSchemes$1['category-6'],\n diverging: colorSchemes$1['fireandice-6'],\n heatmap: colorSchemes$1['fire-7'],\n ordinal: colorSchemes$1['fire-7'],\n ramp: colorSchemes$1['fire-7']\n }\n};\n\nconst markColor$3 = '#ab5787';\nconst axisColor$1 = '#979797';\nconst quartzTheme = {\n background: '#f9f9f9',\n arc: {\n fill: markColor$3\n },\n area: {\n fill: markColor$3\n },\n line: {\n stroke: markColor$3\n },\n path: {\n stroke: markColor$3\n },\n rect: {\n fill: markColor$3\n },\n shape: {\n stroke: markColor$3\n },\n symbol: {\n fill: markColor$3,\n size: 30\n },\n axis: {\n domainColor: axisColor$1,\n domainWidth: 0.5,\n gridWidth: 0.2,\n labelColor: axisColor$1,\n tickColor: axisColor$1,\n tickWidth: 0.2,\n titleColor: axisColor$1\n },\n axisBand: {\n grid: false\n },\n axisX: {\n grid: true,\n tickSize: 10\n },\n axisY: {\n domain: false,\n grid: true,\n tickSize: 0\n },\n legend: {\n labelFontSize: 11,\n padding: 1,\n symbolSize: 30,\n symbolType: 'square'\n },\n range: {\n category: ['#ab5787', '#51b2e5', '#703c5c', '#168dd9', '#d190b6', '#00609f', '#d365ba', '#154866', '#666666', '#c4c4c4']\n }\n};\n\nconst markColor$2 = '#3e5c69';\nconst voxTheme = {\n background: '#fff',\n arc: {\n fill: markColor$2\n },\n area: {\n fill: markColor$2\n },\n line: {\n stroke: markColor$2\n },\n path: {\n stroke: markColor$2\n },\n rect: {\n fill: markColor$2\n },\n shape: {\n stroke: markColor$2\n },\n symbol: {\n fill: markColor$2\n },\n axis: {\n domainWidth: 0.5,\n grid: true,\n labelPadding: 2,\n tickSize: 5,\n tickWidth: 0.5,\n titleFontWeight: 'normal'\n },\n axisBand: {\n grid: false\n },\n axisX: {\n gridWidth: 0.2\n },\n axisY: {\n gridDash: [3],\n gridWidth: 0.4\n },\n legend: {\n labelFontSize: 11,\n padding: 1,\n symbolType: 'square'\n },\n range: {\n category: ['#3e5c69', '#6793a6', '#182429', '#0570b0', '#3690c0', '#74a9cf', '#a6bddb', '#e2ddf2']\n }\n};\n\nconst markColor$1 = '#1696d2';\nconst axisColor = '#000000';\nconst backgroundColor$1 = '#FFFFFF';\nconst font = 'Lato';\nconst labelFont = 'Lato';\nconst sourceFont = 'Lato';\nconst gridColor$1 = '#DEDDDD';\nconst titleFontSize = 18;\nconst colorSchemes = {\n 'main-colors': ['#1696d2', '#d2d2d2', '#000000', '#fdbf11', '#ec008b', '#55b748', '#5c5859', '#db2b27'],\n 'shades-blue': ['#CFE8F3', '#A2D4EC', '#73BFE2', '#46ABDB', '#1696D2', '#12719E', '#0A4C6A', '#062635'],\n 'shades-gray': ['#F5F5F5', '#ECECEC', '#E3E3E3', '#DCDBDB', '#D2D2D2', '#9D9D9D', '#696969', '#353535'],\n 'shades-yellow': ['#FFF2CF', '#FCE39E', '#FDD870', '#FCCB41', '#FDBF11', '#E88E2D', '#CA5800', '#843215'],\n 'shades-magenta': ['#F5CBDF', '#EB99C2', '#E46AA7', '#E54096', '#EC008B', '#AF1F6B', '#761548', '#351123'],\n 'shades-green': ['#DCEDD9', '#BCDEB4', '#98CF90', '#78C26D', '#55B748', '#408941', '#2C5C2D', '#1A2E19'],\n 'shades-black': ['#D5D5D4', '#ADABAC', '#848081', '#5C5859', '#332D2F', '#262223', '#1A1717', '#0E0C0D'],\n 'shades-red': ['#F8D5D4', '#F1AAA9', '#E9807D', '#E25552', '#DB2B27', '#A4201D', '#6E1614', '#370B0A'],\n 'one-group': ['#1696d2', '#000000'],\n 'two-groups-cat-1': ['#1696d2', '#000000'],\n 'two-groups-cat-2': ['#1696d2', '#fdbf11'],\n 'two-groups-cat-3': ['#1696d2', '#db2b27'],\n 'two-groups-seq': ['#a2d4ec', '#1696d2'],\n 'three-groups-cat': ['#1696d2', '#fdbf11', '#000000'],\n 'three-groups-seq': ['#a2d4ec', '#1696d2', '#0a4c6a'],\n 'four-groups-cat-1': ['#000000', '#d2d2d2', '#fdbf11', '#1696d2'],\n 'four-groups-cat-2': ['#1696d2', '#ec0008b', '#fdbf11', '#5c5859'],\n 'four-groups-seq': ['#cfe8f3', '#73bf42', '#1696d2', '#0a4c6a'],\n 'five-groups-cat-1': ['#1696d2', '#fdbf11', '#d2d2d2', '#ec008b', '#000000'],\n 'five-groups-cat-2': ['#1696d2', '#0a4c6a', '#d2d2d2', '#fdbf11', '#332d2f'],\n 'five-groups-seq': ['#cfe8f3', '#73bf42', '#1696d2', '#0a4c6a', '#000000'],\n 'six-groups-cat-1': ['#1696d2', '#ec008b', '#fdbf11', '#000000', '#d2d2d2', '#55b748'],\n 'six-groups-cat-2': ['#1696d2', '#d2d2d2', '#ec008b', '#fdbf11', '#332d2f', '#0a4c6a'],\n 'six-groups-seq': ['#cfe8f3', '#a2d4ec', '#73bfe2', '#46abdb', '#1696d2', '#12719e'],\n 'diverging-colors': ['#ca5800', '#fdbf11', '#fdd870', '#fff2cf', '#cfe8f3', '#73bfe2', '#1696d2', '#0a4c6a']\n};\nconst urbanInstituteTheme = {\n background: backgroundColor$1,\n title: {\n anchor: 'start',\n fontSize: titleFontSize,\n font: font\n },\n axisX: {\n domain: true,\n domainColor: axisColor,\n domainWidth: 1,\n grid: false,\n labelFontSize: 12,\n labelFont: labelFont,\n labelAngle: 0,\n tickColor: axisColor,\n tickSize: 5,\n titleFontSize: 12,\n titlePadding: 10,\n titleFont: font\n },\n axisY: {\n domain: false,\n domainWidth: 1,\n grid: true,\n gridColor: gridColor$1,\n gridWidth: 1,\n labelFontSize: 12,\n labelFont: labelFont,\n labelPadding: 8,\n ticks: false,\n titleFontSize: 12,\n titlePadding: 10,\n titleFont: font,\n titleAngle: 0,\n titleY: -10,\n titleX: 18\n },\n legend: {\n labelFontSize: 12,\n labelFont: labelFont,\n symbolSize: 100,\n titleFontSize: 12,\n titlePadding: 10,\n titleFont: font,\n orient: 'right',\n offset: 10\n },\n view: {\n stroke: 'transparent'\n },\n range: {\n category: colorSchemes['six-groups-cat-1'],\n diverging: colorSchemes['diverging-colors'],\n heatmap: colorSchemes['diverging-colors'],\n ordinal: colorSchemes['six-groups-seq'],\n ramp: colorSchemes['shades-blue']\n },\n area: {\n fill: markColor$1\n },\n rect: {\n fill: markColor$1\n },\n line: {\n color: markColor$1,\n stroke: markColor$1,\n strokeWidth: 5\n },\n trail: {\n color: markColor$1,\n stroke: markColor$1,\n strokeWidth: 0,\n size: 1\n },\n path: {\n stroke: markColor$1,\n strokeWidth: 0.5\n },\n point: {\n filled: true\n },\n text: {\n font: sourceFont,\n color: markColor$1,\n fontSize: 11,\n align: 'center',\n fontWeight: 400,\n size: 11\n },\n style: {\n bar: {\n fill: markColor$1,\n stroke: null\n }\n },\n arc: {\n fill: markColor$1\n },\n shape: {\n stroke: markColor$1\n },\n symbol: {\n fill: markColor$1,\n size: 30\n }\n};\n\n/**\n * Copyright 2020 Google LLC.\n *\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file or at\n * https://developers.google.com/open-source/licenses/bsd\n */\n\nconst markColor = '#3366CC';\nconst gridColor = '#ccc';\nconst defaultFont$1 = 'Arial, sans-serif';\nconst googlechartsTheme = {\n arc: {\n fill: markColor\n },\n area: {\n fill: markColor\n },\n path: {\n stroke: markColor\n },\n rect: {\n fill: markColor\n },\n shape: {\n stroke: markColor\n },\n symbol: {\n stroke: markColor\n },\n circle: {\n fill: markColor\n },\n background: '#fff',\n padding: {\n top: 10,\n right: 10,\n bottom: 10,\n left: 10\n },\n style: {\n 'guide-label': {\n font: defaultFont$1,\n fontSize: 12\n },\n 'guide-title': {\n font: defaultFont$1,\n fontSize: 12\n },\n 'group-title': {\n font: defaultFont$1,\n fontSize: 12\n }\n },\n title: {\n font: defaultFont$1,\n fontSize: 14,\n fontWeight: 'bold',\n dy: -3,\n anchor: 'start'\n },\n axis: {\n gridColor: gridColor,\n tickColor: gridColor,\n domain: false,\n grid: true\n },\n range: {\n category: ['#4285F4', '#DB4437', '#F4B400', '#0F9D58', '#AB47BC', '#00ACC1', '#FF7043', '#9E9D24', '#5C6BC0', '#F06292', '#00796B', '#C2185B'],\n heatmap: ['#c6dafc', '#5e97f6', '#2a56c6']\n }\n};\n\nconst ptToPx = value => value * (1 / 3 + 1);\nconst fontSmallPx = ptToPx(9);\nconst legendFontPx = ptToPx(10);\nconst fontLargePx = ptToPx(12);\nconst fontStandard = 'Segoe UI';\nconst fontTitle = 'wf_standard-font, helvetica, arial, sans-serif';\nconst firstLevelElementColor = '#252423';\nconst secondLevelElementColor = '#605E5C';\nconst backgroundColor = 'transparent';\nconst backgroundSecondaryColor = '#C8C6C4';\nconst paletteColor1 = '#118DFF';\nconst paletteColor2 = '#12239E';\nconst paletteColor3 = '#E66C37';\nconst paletteColor4 = '#6B007B';\nconst paletteColor5 = '#E044A7';\nconst paletteColor6 = '#744EC2';\nconst paletteColor7 = '#D9B300';\nconst paletteColor8 = '#D64550';\nconst divergentColorMax = paletteColor1;\nconst divergentColorMin = '#DEEFFF';\nconst divergentPalette = [divergentColorMin, divergentColorMax];\nconst ordinalPalette = [divergentColorMin, '#c7e4ff', '#b0d9ff', '#9aceff', '#83c3ff', '#6cb9ff', '#55aeff', '#3fa3ff', '#2898ff', divergentColorMax];\nconst powerbiTheme = {\n view: {\n stroke: backgroundColor\n },\n background: backgroundColor,\n font: fontStandard,\n header: {\n titleFont: fontTitle,\n titleFontSize: fontLargePx,\n titleColor: firstLevelElementColor,\n labelFont: fontStandard,\n labelFontSize: legendFontPx,\n labelColor: secondLevelElementColor\n },\n axis: {\n ticks: false,\n grid: false,\n domain: false,\n labelColor: secondLevelElementColor,\n labelFontSize: fontSmallPx,\n titleFont: fontTitle,\n titleColor: firstLevelElementColor,\n titleFontSize: fontLargePx,\n titleFontWeight: 'normal'\n },\n axisQuantitative: {\n tickCount: 3,\n grid: true,\n gridColor: backgroundSecondaryColor,\n gridDash: [1, 5],\n labelFlush: false\n },\n axisBand: {\n tickExtra: true\n },\n axisX: {\n labelPadding: 5\n },\n axisY: {\n labelPadding: 10\n },\n bar: {\n fill: paletteColor1\n },\n line: {\n stroke: paletteColor1,\n strokeWidth: 3,\n strokeCap: 'round',\n strokeJoin: 'round'\n },\n text: {\n font: fontStandard,\n fontSize: fontSmallPx,\n fill: secondLevelElementColor\n },\n arc: {\n fill: paletteColor1\n },\n area: {\n fill: paletteColor1,\n line: true,\n opacity: 0.6\n },\n path: {\n stroke: paletteColor1\n },\n rect: {\n fill: paletteColor1\n },\n point: {\n fill: paletteColor1,\n filled: true,\n size: 75\n },\n shape: {\n stroke: paletteColor1\n },\n symbol: {\n fill: paletteColor1,\n strokeWidth: 1.5,\n size: 50\n },\n legend: {\n titleFont: fontStandard,\n titleFontWeight: 'bold',\n titleColor: secondLevelElementColor,\n labelFont: fontStandard,\n labelFontSize: legendFontPx,\n labelColor: secondLevelElementColor,\n symbolType: 'circle',\n symbolSize: 75\n },\n range: {\n category: [paletteColor1, paletteColor2, paletteColor3, paletteColor4, paletteColor5, paletteColor6, paletteColor7, paletteColor8],\n diverging: divergentPalette,\n heatmap: divergentPalette,\n ordinal: ordinalPalette\n }\n};\n\nconst defaultFont = 'IBM Plex Sans,system-ui,-apple-system,BlinkMacSystemFont,\".sfnstext-regular\",sans-serif';\nconst condensedFont = 'IBM Plex Sans Condensed, system-ui, -apple-system, BlinkMacSystemFont, \".SFNSText-Regular\", sans-serif';\nconst fontWeight = 400;\nconst TOKENS = {\n textPrimary: {\n g90: '#f4f4f4',\n g100: '#f4f4f4',\n white: '#161616',\n g10: '#161616'\n },\n textSecondary: {\n g90: '#c6c6c6',\n g100: '#c6c6c6',\n white: '#525252',\n g10: '#525252'\n },\n // layer\n layerAccent01: {\n white: '#e0e0e0',\n g10: '#e0e0e0',\n g90: '#525252',\n g100: '#393939'\n },\n // grid\n gridBg: {\n white: '#ffffff',\n g10: '#ffffff',\n g90: '#161616',\n g100: '#161616'\n }\n};\nconst darkCategories = ['#8a3ffc', '#33b1ff', '#007d79', '#ff7eb6', '#fa4d56', '#fff1f1', '#6fdc8c', '#4589ff', '#d12771', '#d2a106', '#08bdba', '#bae6ff', '#ba4e00', '#d4bbff'];\nconst lightCategories = ['#6929c4', '#1192e8', '#005d5d', '#9f1853', '#fa4d56', '#570408', '#198038', '#002d9c', '#ee538b', '#b28600', '#009d9a', '#012749', '#8a3800', '#a56eff'];\nfunction genCarbonConfig({\n theme,\n background\n}) {\n const type = ['white', 'g10'].includes(theme) ? 'light' : 'dark';\n const viewbg = TOKENS.gridBg[theme];\n const titleColor = TOKENS.textPrimary[theme];\n const textColor = TOKENS.textSecondary[theme];\n const category = type === 'dark' ? darkCategories : lightCategories;\n const markColor = type === 'dark' ? '#d4bbff' : '#6929c4';\n return {\n background,\n arc: {\n fill: markColor\n },\n area: {\n fill: markColor\n },\n path: {\n stroke: markColor\n },\n rect: {\n fill: markColor\n },\n shape: {\n stroke: markColor\n },\n symbol: {\n stroke: markColor\n },\n circle: {\n fill: markColor\n },\n view: {\n fill: viewbg,\n stroke: viewbg\n },\n group: {\n fill: viewbg\n },\n title: {\n color: titleColor,\n anchor: 'start',\n dy: -15,\n fontSize: 16,\n font: defaultFont,\n fontWeight: 600\n },\n axis: {\n // Axis labels\n labelColor: textColor,\n labelFontSize: 12,\n labelFont: condensedFont,\n labelFontWeight: fontWeight,\n // Axis titles\n titleColor: titleColor,\n titleFontWeight: 600,\n titleFontSize: 12,\n // MISC\n grid: true,\n gridColor: TOKENS.layerAccent01[theme],\n labelAngle: 0\n },\n axisX: {\n titlePadding: 10\n },\n axisY: {\n titlePadding: 2.5\n },\n style: {\n 'guide-label': {\n font: defaultFont,\n fill: textColor,\n fontWeight: fontWeight\n },\n 'guide-title': {\n font: defaultFont,\n fill: textColor,\n fontWeight: fontWeight\n }\n },\n range: {\n category,\n diverging: ['#750e13', '#a2191f', '#da1e28', '#fa4d56', '#ff8389', '#ffb3b8', '#ffd7d9', '#fff1f1', '#e5f6ff', '#bae6ff', '#82cfff', '#33b1ff', '#1192e8', '#0072c3', '#00539a', '#003a6d'],\n heatmap: ['#f6f2ff', '#e8daff', '#d4bbff', '#be95ff', '#a56eff', '#8a3ffc', '#6929c4', '#491d8b', '#31135e', '#1c0f30']\n }\n };\n}\n\nconst carbonwhite = genCarbonConfig({\n theme: 'white',\n background: '#ffffff'\n});\n\nconst carbong10 = genCarbonConfig({\n theme: 'g10',\n background: '#f4f4f4'\n});\n\nconst carbong90 = genCarbonConfig({\n theme: 'g90',\n background: '#262626'\n});\n\nconst carbong100 = genCarbonConfig({\n theme: 'g100',\n background: '#161616'\n});\n\nconst version = pkg.version;\n\nexport { carbong10, carbong100, carbong90, carbonwhite, darkTheme as dark, excelTheme as excel, fiveThirtyEightTheme as fivethirtyeight, ggplot2Theme as ggplot2, googlechartsTheme as googlecharts, latimesTheme as latimes, powerbiTheme as powerbi, quartzTheme as quartz, urbanInstituteTheme as urbaninstitute, version, voxTheme as vox };\n", "import {isArray, isObject, isString} from 'vega-util';\n\n/**\n * Format the value to be shown in the tooltip.\n *\n * @param value The value to show in the tooltip.\n * @param valueToHtml Function to convert a single cell value to an HTML string\n */\nexport function formatValue(\n value: any,\n valueToHtml: (value: any) => string,\n maxDepth: number,\n baseURL?: string,\n): string {\n if (isArray(value)) {\n return `[${value.map((v) => valueToHtml(isString(v) ? v : stringify(v, maxDepth))).join(', ')}]`;\n }\n\n if (isObject(value)) {\n let content = '';\n\n const {title, image, ...rest} = value as any;\n\n if (title) {\n content += `<h2>${valueToHtml(title)}</h2>`;\n }\n\n if (image) {\n content += `<img src=\"${new URL(valueToHtml(image), baseURL || location.href).href}\">`;\n }\n\n const keys = Object.keys(rest);\n if (keys.length > 0) {\n content += '<table>';\n for (const key of keys) {\n let val = (rest as any)[key];\n\n // ignore undefined properties\n if (val === undefined) {\n continue;\n }\n\n if (isObject(val)) {\n val = stringify(val, maxDepth);\n }\n\n content += `<tr><td class=\"key\">${valueToHtml(key)}</td><td class=\"value\">${valueToHtml(val)}</td></tr>`;\n }\n content += `</table>`;\n }\n\n return content || '{}'; // show empty object if there are no properties\n }\n\n return valueToHtml(value);\n}\n\nexport function replacer(maxDepth: number) {\n const stack: any[] = [];\n\n return function (this: any, key: string, value: any) {\n if (typeof value !== 'object' || value === null) {\n return value;\n }\n const pos = stack.indexOf(this) + 1;\n stack.length = pos;\n if (stack.length > maxDepth) {\n return '[Object]';\n }\n if (stack.indexOf(value) >= 0) {\n return '[Circular]';\n }\n stack.push(value);\n return value;\n };\n}\n\n/**\n * Stringify any JS object to valid JSON\n */\nexport function stringify(obj: any, maxDepth: number) {\n return JSON.stringify(obj, replacer(maxDepth));\n}\n", "// generated with build-style.sh\nexport default `#vg-tooltip-element {\n visibility: hidden;\n padding: 8px;\n position: fixed;\n z-index: 1000;\n font-family: sans-serif;\n font-size: 11px;\n border-radius: 3px;\n box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.1);\n /* The default theme is the light theme. */\n background-color: rgba(255, 255, 255, 0.95);\n border: 1px solid #d9d9d9;\n color: black;\n}\n#vg-tooltip-element.visible {\n visibility: visible;\n}\n#vg-tooltip-element h2 {\n margin-top: 0;\n margin-bottom: 10px;\n font-size: 13px;\n}\n#vg-tooltip-element table {\n border-spacing: 0;\n}\n#vg-tooltip-element table tr {\n border: none;\n}\n#vg-tooltip-element table tr td {\n overflow: hidden;\n text-overflow: ellipsis;\n padding-top: 2px;\n padding-bottom: 2px;\n}\n#vg-tooltip-element table tr td.key {\n color: #808080;\n max-width: 150px;\n text-align: right;\n padding-right: 4px;\n}\n#vg-tooltip-element table tr td.value {\n display: block;\n max-width: 300px;\n max-height: 7em;\n text-align: left;\n}\n#vg-tooltip-element.dark-theme {\n background-color: rgba(32, 32, 32, 0.9);\n border: 1px solid #f5f5f5;\n color: white;\n}\n#vg-tooltip-element.dark-theme td.key {\n color: #bfbfbf;\n}\n`;\n", "import {formatValue} from './formatValue';\nimport defaultStyle from './style';\n\nconst EL_ID = 'vg-tooltip-element';\n\nexport type Position = 'top' | 'bottom' | 'left' | 'right' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\n\nexport interface Options {\n /**\n * X offset.\n */\n offsetX?: number;\n\n /**\n * Y offset.\n */\n offsetY?: number;\n\n /**\n * ID of the tooltip element.\n */\n id?: string;\n\n /**\n * ID of the tooltip CSS style.\n */\n styleId?: string;\n\n /**\n * The name of the theme. You can use the CSS class called [THEME]-theme to style the tooltips.\n *\n * There are two predefined themes: \"light\" (default) and \"dark\".\n */\n theme?: string;\n\n /**\n * Do not use the default styles provided by Vega Tooltip. If you enable this option, you need to use your own styles. It is not necessary to disable the default style when using a custom theme.\n */\n disableDefaultStyle?: boolean;\n\n /**\n * HTML sanitizer function that removes dangerous HTML to prevent XSS.\n *\n * This should be a function from string to string. You may replace it with a formatter such as a markdown formatter.\n */\n sanitize?: (value: any) => string;\n\n /**\n * The maximum recursion depth when printing objects in the tooltip.\n */\n maxDepth?: number;\n\n /**\n * A function to customize the rendered HTML of the tooltip.\n * @param value A value string, or object of value strings keyed by field\n * @param sanitize The `sanitize` function from `options.sanitize`\n * @param baseURL The `baseURL` from `options.baseURL`\n * @returns {string} The returned string will become the `innerHTML` of the tooltip element\n */\n formatTooltip?: (value: any, valueToHtml: (value: any) => string, maxDepth: number, baseURL: string) => string;\n\n /**\n * The baseurl to use in image paths.\n */\n baseURL?: string;\n\n /**\n * The snap reference for the tooltip.\n */\n anchor?: 'cursor' | 'mark';\n\n /**\n * The position of the tooltip relative to the anchor.\n *\n * Only valid when `anchor` is set to 'mark'.\n */\n position?: Position | Position[];\n}\n\nexport const DEFAULT_OPTIONS: Required<Options> = {\n offsetX: 10,\n offsetY: 10,\n id: EL_ID,\n styleId: 'vega-tooltip-style',\n theme: 'light',\n disableDefaultStyle: false,\n sanitize: escapeHTML,\n maxDepth: 2,\n formatTooltip: formatValue,\n baseURL: '',\n anchor: 'cursor',\n position: ['top', 'bottom', 'left', 'right', 'top-left', 'top-right', 'bottom-left', 'bottom-right'],\n};\n\n/**\n * Escape special HTML characters.\n *\n * @param value A value to convert to string and HTML-escape.\n */\nexport function escapeHTML(value: any): string {\n return String(value).replace(/&/g, '&').replace(/</g, '<');\n}\n\nexport function createDefaultStyle(id: string): string {\n // Just in case this id comes from a user, ensure these is no security issues\n if (!/^[A-Za-z]+[-:.\\w]*$/.test(id)) {\n throw new Error('Invalid HTML ID');\n }\n\n return defaultStyle.toString().replace(EL_ID, id);\n}\n", "import {Bounds} from 'vega-typings';\nimport {Options, Position} from './defaults';\n\ntype MarkBounds = Pick<Bounds, 'x1' | 'x2' | 'y1' | 'y2'>;\n\n/**\n * Position the tooltip\n *\n * @param event The mouse event.\n * @param tooltipBox\n * @param options Tooltip handler options.\n */\nexport function calculatePositionRelativeToCursor(\n event: MouseEvent,\n tooltipBox: {width: number; height: number},\n {offsetX, offsetY}: Required<Options>,\n) {\n // the possible positions for the tooltip\n const positions = getPositions(\n {x1: event.clientX, x2: event.clientX, y1: event.clientY, y2: event.clientY},\n tooltipBox,\n offsetX,\n offsetY,\n );\n\n // order of positions to try\n const postionArr: Position[] = ['bottom-right', 'bottom-left', 'top-right', 'top-left'];\n\n // test positions till a valid one is found\n for (const p of postionArr) {\n if (tooltipIsInViewport(positions[p], tooltipBox)) {\n return positions[p];\n }\n }\n\n // default to top-left if a valid position is not found\n // this is legacy behavior\n return positions['top-left'];\n}\n\n/**\n * Calculates the position of the tooltip relative to the mark.\n * @param handler The handler instance.\n * @param event The mouse event.\n * @param item The item that the tooltip is being shown for.\n * @param tooltipBox Client rect of the tooltip element.\n * @param options Tooltip handler options.\n * @returns\n */\nexport function calculatePositionRelativeToMark(\n handler: any,\n event: MouseEvent,\n item: any,\n tooltipBox: {width: number; height: number},\n options: Required<Options>,\n) {\n const {position, offsetX, offsetY} = options;\n const containerBox = handler._el.getBoundingClientRect();\n const origin = handler._origin;\n\n // bounds of the mark relative to the viewport\n const markBounds = getMarkBounds(containerBox, origin, item);\n\n // the possible positions for the tooltip\n const positions = getPositions(markBounds, tooltipBox, offsetX, offsetY);\n\n // positions to test\n const positionArr = Array.isArray(position) ? position : [position];\n\n // test positions till a valid one is found\n for (const p of positionArr) {\n // verify that the tooltip is in the view and the mouse is not where the tooltip would be\n if (tooltipIsInViewport(positions[p], tooltipBox) && !mouseIsOnTooltip(event, positions[p], tooltipBox)) {\n return positions[p];\n }\n }\n\n // default to cursor position if a valid position is not found\n return calculatePositionRelativeToCursor(event, tooltipBox, options);\n}\n\n// Calculates the bounds of the mark relative to the viewport.\nexport function getMarkBounds(\n containerBox: {left: number; top: number},\n origin: [number, number],\n item: any,\n): MarkBounds {\n // if this is a voronoi mark, we want to use the bounds of the point that voronoi cell represents\n const markBounds = item.isVoronoi ? item.datum.bounds : item.bounds;\n\n let left = containerBox.left + origin[0] + markBounds.x1;\n let top = containerBox.top + origin[1] + markBounds.y1;\n\n // traverse mark groups, summing their offsets to get the total offset\n // item bounds are relative to their group so if there are multiple nested groups we need to add them all\n let parentItem = item;\n while (parentItem.mark.group) {\n parentItem = parentItem.mark.group;\n left += parentItem.x ?? 0;\n top += parentItem.y ?? 0;\n }\n\n const markWidth = markBounds.x2 - markBounds.x1;\n const markHeight = markBounds.y2 - markBounds.y1;\n\n return {\n x1: left,\n x2: left + markWidth,\n y1: top,\n y2: top + markHeight,\n };\n}\n\n// Calculates the tooltip xy for each possible position.\nexport function getPositions(\n markBounds: MarkBounds,\n tooltipBox: {width: number; height: number},\n offsetX: number,\n offsetY: number,\n) {\n const xc = (markBounds.x1 + markBounds.x2) / 2;\n const yc = (markBounds.y1 + markBounds.y2) / 2;\n\n // x positions\n const left = markBounds.x1 - tooltipBox.width - offsetX;\n const center = xc - tooltipBox.width / 2;\n const right = markBounds.x2 + offsetX;\n\n // y positions\n const top = markBounds.y1 - tooltipBox.height - offsetY;\n const middle = yc - tooltipBox.height / 2;\n const bottom = markBounds.y2 + offsetY;\n\n const positions: Record<Position, {x: number; y: number}> = {\n top: {x: center, y: top},\n bottom: {x: center, y: bottom},\n left: {x: left, y: middle},\n right: {x: right, y: middle},\n 'top-left': {x: left, y: top},\n 'top-right': {x: right, y: top},\n 'bottom-left': {x: left, y: bottom},\n 'bottom-right': {x: right, y: bottom},\n };\n return positions;\n}\n\n// Checks if the tooltip would be in the viewport at the given position\nexport function tooltipIsInViewport(position: {x: number; y: number}, tooltipBox: {width: number; height: number}) {\n return (\n position.x >= 0 &&\n position.y >= 0 &&\n position.x + tooltipBox.width <= window.innerWidth &&\n position.y + tooltipBox.height <= window.innerHeight\n );\n}\n\n// Checks if the mouse is within the tooltip area\nexport function mouseIsOnTooltip(\n event: MouseEvent,\n position: {x: number; y: number},\n tooltipBox: {width: number; height: number},\n) {\n return (\n event.clientX >= position.x &&\n event.clientX <= position.x + tooltipBox.width &&\n event.clientY >= position.y &&\n event.clientY <= position.y + tooltipBox.height\n );\n}\n", "import {TooltipHandler} from 'vega-typings';\n\nimport {createDefaultStyle, DEFAULT_OPTIONS, Options} from './defaults';\nimport {calculatePositionRelativeToCursor, calculatePositionRelativeToMark} from './position';\n\n/**\n * The tooltip handler class.\n */\nexport class Handler {\n /**\n * The handler function. We bind this to this function in the constructor.\n */\n public call: TooltipHandler;\n\n /**\n * Complete tooltip options.\n */\n private options: Required<Options>;\n\n /**\n * The tooltip html element.\n */\n private el: HTMLElement | null;\n\n /**\n * Create the tooltip handler and initialize the element and style.\n *\n * @param options Tooltip Options\n */\n constructor(options?: Options) {\n this.options = {...DEFAULT_OPTIONS, ...options};\n const elementId = this.options.id;\n this.el = null;\n\n // bind this to call\n this.call = this.tooltipHandler.bind(this);\n\n // prepend a default stylesheet for tooltips to the head\n if (!this.options.disableDefaultStyle && !document.getElementById(this.options.styleId)) {\n const style = document.createElement('style');\n style.setAttribute('id', this.options.styleId);\n style.innerHTML = createDefaultStyle(elementId);\n\n const head = document.head;\n if (head.childNodes.length > 0) {\n head.insertBefore(style, head.childNodes[0]);\n } else {\n head.appendChild(style);\n }\n }\n }\n\n /**\n * The tooltip handler function.\n */\n private tooltipHandler(handler: any, event: MouseEvent, item: any, value: any) {\n // append a div element that we use as a tooltip unless it already exists\n this.el = document.getElementById(this.options.id);\n if (!this.el) {\n this.el = document.createElement('div');\n this.el.setAttribute('id', this.options.id);\n this.el.classList.add('vg-tooltip');\n\n const tooltipContainer = document.fullscreenElement ?? document.body;\n tooltipContainer.appendChild(this.el);\n }\n\n // hide tooltip for null, undefined, or empty string values\n if (value == null || value === '') {\n this.el.classList.remove('visible', `${this.options.theme}-theme`);\n return;\n }\n\n // set the tooltip content\n this.el.innerHTML = this.options.formatTooltip(\n value,\n this.options.sanitize,\n this.options.maxDepth,\n this.options.baseURL,\n );\n\n // make the tooltip visible\n this.el.classList.add('visible', `${this.options.theme}-theme`);\n\n const {x, y} =\n this.options.anchor === 'mark'\n ? calculatePositionRelativeToMark(handler, event, item, this.el.getBoundingClientRect(), this.options)\n : calculatePositionRelativeToCursor(event, this.el.getBoundingClientRect(), this.options);\n\n this.el.style.top = `${y}px`;\n this.el.style.left = `${x}px`;\n }\n}\n", "import pkg from '../package.json';\nimport {View} from 'vega-typings';\n\nimport {Options} from './defaults';\nimport {Handler} from './Handler';\n\nconst version = pkg.version;\n\nexport * from './defaults';\nexport * from './formatValue';\nexport * from './position';\nexport * from './Handler';\nexport {version};\n\n/**\n * Create a tooltip handler and register it with the provided view.\n *\n * @param view The Vega view.\n * @param opt Tooltip options.\n */\nexport default function (view: View, opt?: Options) {\n const handler = new Handler(opt);\n\n view.tooltip(handler.call).run();\n\n return handler;\n}\n", "/*!\n * https://github.com/Starcounter-Jack/JSON-Patch\n * (c) 2017-2022 Joachim Wester\n * MIT licensed\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\nexport function hasOwnProperty(obj, key) {\n return _hasOwnProperty.call(obj, key);\n}\nexport function _objectKeys(obj) {\n if (Array.isArray(obj)) {\n var keys_1 = new Array(obj.length);\n for (var k = 0; k < keys_1.length; k++) {\n keys_1[k] = \"\" + k;\n }\n return keys_1;\n }\n if (Object.keys) {\n return Object.keys(obj);\n }\n var keys = [];\n for (var i in obj) {\n if (hasOwnProperty(obj, i)) {\n keys.push(i);\n }\n }\n return keys;\n}\n;\n/**\n* Deeply clone the object.\n* https://jsperf.com/deep-copy-vs-json-stringify-json-parse/25 (recursiveDeepCopy)\n* @param {any} obj value to clone\n* @return {any} cloned obj\n*/\nexport function _deepClone(obj) {\n switch (typeof obj) {\n case \"object\":\n return JSON.parse(JSON.stringify(obj)); //Faster than ES5 clone - http://jsperf.com/deep-cloning-of-objects/5\n case \"undefined\":\n return null; //this is how JSON.stringify behaves for array items\n default:\n return obj; //no need to clone primitives\n }\n}\n//3x faster than cached /^\\d+$/.test(str)\nexport function isInteger(str) {\n var i = 0;\n var len = str.length;\n var charCode;\n while (i < len) {\n charCode = str.charCodeAt(i);\n if (charCode >= 48 && charCode <= 57) {\n i++;\n continue;\n }\n return false;\n }\n return true;\n}\n/**\n* Escapes a json pointer path\n* @param path The raw pointer\n* @return the Escaped path\n*/\nexport function escapePathComponent(path) {\n if (path.indexOf('/') === -1 && path.indexOf('~') === -1)\n return path;\n return path.replace(/~/g, '~0').replace(/\\//g, '~1');\n}\n/**\n * Unescapes a json pointer path\n * @param path The escaped pointer\n * @return The unescaped path\n */\nexport function unescapePathComponent(path) {\n return path.replace(/~1/g, '/').replace(/~0/g, '~');\n}\nexport function _getPathRecursive(root, obj) {\n var found;\n for (var key in root) {\n if (hasOwnProperty(root, key)) {\n if (root[key] === obj) {\n return escapePathComponent(key) + '/';\n }\n else if (typeof root[key] === 'object') {\n found = _getPathRecursive(root[key], obj);\n if (found != '') {\n return escapePathComponent(key) + '/' + found;\n }\n }\n }\n }\n return '';\n}\nexport function getPath(root, obj) {\n if (root === obj) {\n return '/';\n }\n var path = _getPathRecursive(root, obj);\n if (path === '') {\n throw new Error(\"Object not found in root\");\n }\n return \"/\" + path;\n}\n/**\n* Recursively checks whether an object has any undefined values inside.\n*/\nexport function hasUndefined(obj) {\n if (obj === undefined) {\n return true;\n }\n if (obj) {\n if (Array.isArray(obj)) {\n for (var i_1 = 0, len = obj.length; i_1 < len; i_1++) {\n if (hasUndefined(obj[i_1])) {\n return true;\n }\n }\n }\n else if (typeof obj === \"object\") {\n var objKeys = _objectKeys(obj);\n var objKeysLength = objKeys.length;\n for (var i = 0; i < objKeysLength; i++) {\n if (hasUndefined(obj[objKeys[i]])) {\n return true;\n }\n }\n }\n }\n return false;\n}\nfunction patchErrorMessageFormatter(message, args) {\n var messageParts = [message];\n for (var key in args) {\n var value = typeof args[key] === 'object' ? JSON.stringify(args[key], null, 2) : args[key]; // pretty print\n if (typeof value !== 'undefined') {\n messageParts.push(key + \": \" + value);\n }\n }\n return messageParts.join('\\n');\n}\nvar PatchError = /** @class */ (function (_super) {\n __extends(PatchError, _super);\n function PatchError(message, name, index, operation, tree) {\n var _newTarget = this.constructor;\n var _this = _super.call(this, patchErrorMessageFormatter(message, { name: name, index: index, operation: operation, tree: tree })) || this;\n _this.name = name;\n _this.index = index;\n _this.operation = operation;\n _this.tree = tree;\n Object.setPrototypeOf(_this, _newTarget.prototype); // restore prototype chain, see https://stackoverflow.com/a/48342359\n _this.message = patchErrorMessageFormatter(message, { name: name, index: index, operation: operation, tree: tree });\n return _this;\n }\n return PatchError;\n}(Error));\nexport { PatchError };\n", "import { PatchError, _deepClone, isInteger, unescapePathComponent, hasUndefined } from './helpers.mjs';\nexport var JsonPatchError = PatchError;\nexport var deepClone = _deepClone;\n/* We use a Javascript hash to store each\n function. Each hash entry (property) uses\n the operation identifiers specified in rfc6902.\n In this way, we can map each patch operation\n to its dedicated function in efficient way.\n */\n/* The operations applicable to an object */\nvar objOps = {\n add: function (obj, key, document) {\n obj[key] = this.value;\n return { newDocument: document };\n },\n remove: function (obj, key, document) {\n var removed = obj[key];\n delete obj[key];\n return { newDocument: document, removed: removed };\n },\n replace: function (obj, key, document) {\n var removed = obj[key];\n obj[key] = this.value;\n return { newDocument: document, removed: removed };\n },\n move: function (obj, key, document) {\n /* in case move target overwrites an existing value,\n return the removed value, this can be taxing performance-wise,\n and is potentially unneeded */\n var removed = getValueByPointer(document, this.path);\n if (removed) {\n removed = _deepClone(removed);\n }\n var originalValue = applyOperation(document, { op: \"remove\", path: this.from }).removed;\n applyOperation(document, { op: \"add\", path: this.path, value: originalValue });\n return { newDocument: document, removed: removed };\n },\n copy: function (obj, key, document) {\n var valueToCopy = getValueByPointer(document, this.from);\n // enforce copy by value so further operations don't affect source (see issue #177)\n applyOperation(document, { op: \"add\", path: this.path, value: _deepClone(valueToCopy) });\n return { newDocument: document };\n },\n test: function (obj, key, document) {\n return { newDocument: document, test: _areEquals(obj[key], this.value) };\n },\n _get: function (obj, key, document) {\n this.value = obj[key];\n return { newDocument: document };\n }\n};\n/* The operations applicable to an array. Many are the same as for the object */\nvar arrOps = {\n add: function (arr, i, document) {\n if (isInteger(i)) {\n arr.splice(i, 0, this.value);\n }\n else { // array props\n arr[i] = this.value;\n }\n // this may be needed when using '-' in an array\n return { newDocument: document, index: i };\n },\n remove: function (arr, i, document) {\n var removedList = arr.splice(i, 1);\n return { newDocument: document, removed: removedList[0] };\n },\n replace: function (arr, i, document) {\n var removed = arr[i];\n arr[i] = this.value;\n return { newDocument: document, removed: removed };\n },\n move: objOps.move,\n copy: objOps.copy,\n test: objOps.test,\n _get: objOps._get\n};\n/**\n * Retrieves a value from a JSON document by a JSON pointer.\n * Returns the value.\n *\n * @param document The document to get the value from\n * @param pointer an escaped JSON pointer\n * @return The retrieved value\n */\nexport function getValueByPointer(document, pointer) {\n if (pointer == '') {\n return document;\n }\n var getOriginalDestination = { op: \"_get\", path: pointer };\n applyOperation(document, getOriginalDestination);\n return getOriginalDestination.value;\n}\n/**\n * Apply a single JSON Patch Operation on a JSON document.\n * Returns the {newDocument, result} of the operation.\n * It modifies the `document` and `operation` objects - it gets the values by reference.\n * If you would like to avoid touching your values, clone them:\n * `jsonpatch.applyOperation(document, jsonpatch._deepClone(operation))`.\n *\n * @param document The document to patch\n * @param operation The operation to apply\n * @param validateOperation `false` is without validation, `true` to use default jsonpatch's validation, or you can pass a `validateOperation` callback to be used for validation.\n * @param mutateDocument Whether to mutate the original document or clone it before applying\n * @param banPrototypeModifications Whether to ban modifications to `__proto__`, defaults to `true`.\n * @return `{newDocument, result}` after the operation\n */\nexport function applyOperation(document, operation, validateOperation, mutateDocument, banPrototypeModifications, index) {\n if (validateOperation === void 0) { validateOperation = false; }\n if (mutateDocument === void 0) { mutateDocument = true; }\n if (banPrototypeModifications === void 0) { banPrototypeModifications = true; }\n if (index === void 0) { index = 0; }\n if (validateOperation) {\n if (typeof validateOperation == 'function') {\n validateOperation(operation, 0, document, operation.path);\n }\n else {\n validator(operation, 0);\n }\n }\n /* ROOT OPERATIONS */\n if (operation.path === \"\") {\n var returnValue = { newDocument: document };\n if (operation.op === 'add') {\n returnValue.newDocument = operation.value;\n return returnValue;\n }\n else if (operation.op === 'replace') {\n returnValue.newDocument = operation.value;\n returnValue.removed = document; //document we removed\n return returnValue;\n }\n else if (operation.op === 'move' || operation.op === 'copy') { // it's a move or copy to root\n returnValue.newDocument = getValueByPointer(document, operation.from); // get the value by json-pointer in `from` field\n if (operation.op === 'move') { // report removed item\n returnValue.removed = document;\n }\n return returnValue;\n }\n else if (operation.op === 'test') {\n returnValue.test = _areEquals(document, operation.value);\n if (returnValue.test === false) {\n throw new JsonPatchError(\"Test operation failed\", 'TEST_OPERATION_FAILED', index, operation, document);\n }\n returnValue.newDocument = document;\n return returnValue;\n }\n else if (operation.op === 'remove') { // a remove on root\n returnValue.removed = document;\n returnValue.newDocument = null;\n return returnValue;\n }\n else if (operation.op === '_get') {\n operation.value = document;\n return returnValue;\n }\n else { /* bad operation */\n if (validateOperation) {\n throw new JsonPatchError('Operation `op` property is not one of operations defined in RFC-6902', 'OPERATION_OP_INVALID', index, operation, document);\n }\n else {\n return returnValue;\n }\n }\n } /* END ROOT OPERATIONS */\n else {\n if (!mutateDocument) {\n document = _deepClone(document);\n }\n var path = operation.path || \"\";\n var keys = path.split('/');\n var obj = document;\n var t = 1; //skip empty element - http://jsperf.com/to-shift-or-not-to-shift\n var len = keys.length;\n var existingPathFragment = undefined;\n var key = void 0;\n var validateFunction = void 0;\n if (typeof validateOperation == 'function') {\n validateFunction = validateOperation;\n }\n else {\n validateFunction = validator;\n }\n while (true) {\n key = keys[t];\n if (key && key.indexOf('~') != -1) {\n key = unescapePathComponent(key);\n }\n if (banPrototypeModifications &&\n (key == '__proto__' ||\n (key == 'prototype' && t > 0 && keys[t - 1] == 'constructor'))) {\n throw new TypeError('JSON-Patch: modifying `__proto__` or `constructor/prototype` prop is banned for security reasons, if this was on purpose, please set `banPrototypeModifications` flag false and pass it to this function. More info in fast-json-patch README');\n }\n if (validateOperation) {\n if (existingPathFragment === undefined) {\n if (obj[key] === undefined) {\n existingPathFragment = keys.slice(0, t).join('/');\n }\n else if (t == len - 1) {\n existingPathFragment = operation.path;\n }\n if (existingPathFragment !== undefined) {\n validateFunction(operation, 0, document, existingPathFragment);\n }\n }\n }\n t++;\n if (Array.isArray(obj)) {\n if (key === '-') {\n key = obj.length;\n }\n else {\n if (validateOperation && !isInteger(key)) {\n throw new JsonPatchError(\"Expected an unsigned base-10 integer value, making the new referenced value the array element with the zero-based index\", \"OPERATION_PATH_ILLEGAL_ARRAY_INDEX\", index, operation, document);\n } // only parse key when it's an integer for `arr.prop` to work\n else if (isInteger(key)) {\n key = ~~key;\n }\n }\n if (t >= len) {\n if (validateOperation && operation.op === \"add\" && key > obj.length) {\n throw new JsonPatchError(\"The specified index MUST NOT be greater than the number of elements in the array\", \"OPERATION_VALUE_OUT_OF_BOUNDS\", index, operation, document);\n }\n var returnValue = arrOps[operation.op].call(operation, obj, key, document); // Apply patch\n if (returnValue.test === false) {\n throw new JsonPatchError(\"Test operation failed\", 'TEST_OPERATION_FAILED', index, operation, document);\n }\n return returnValue;\n }\n }\n else {\n if (t >= len) {\n var returnValue = objOps[operation.op].call(operation, obj, key, document); // Apply patch\n if (returnValue.test === false) {\n throw new JsonPatchError(\"Test operation failed\", 'TEST_OPERATION_FAILED', index, operation, document);\n }\n return returnValue;\n }\n }\n obj = obj[key];\n // If we have more keys in the path, but the next value isn't a non-null object,\n // throw an OPERATION_PATH_UNRESOLVABLE error instead of iterating again.\n if (validateOperation && t < len && (!obj || typeof obj !== \"object\")) {\n throw new JsonPatchError('Cannot perform operation at the desired path', 'OPERATION_PATH_UNRESOLVABLE', index, operation, document);\n }\n }\n }\n}\n/**\n * Apply a full JSON Patch array on a JSON document.\n * Returns the {newDocument, result} of the patch.\n * It modifies the `document` object and `patch` - it gets the values by reference.\n * If you would like to avoid touching your values, clone them:\n * `jsonpatch.applyPatch(document, jsonpatch._deepClone(patch))`.\n *\n * @param document The document to patch\n * @param patch The patch to apply\n * @param validateOperation `false` is without validation, `true` to use default jsonpatch's validation, or you can pass a `validateOperation` callback to be used for validation.\n * @param mutateDocument Whether to mutate the original document or clone it before applying\n * @param banPrototypeModifications Whether to ban modifications to `__proto__`, defaults to `true`.\n * @return An array of `{newDocument, result}` after the patch\n */\nexport function applyPatch(document, patch, validateOperation, mutateDocument, banPrototypeModifications) {\n if (mutateDocument === void 0) { mutateDocument = true; }\n if (banPrototypeModifications === void 0) { banPrototypeModifications = true; }\n if (validateOperation) {\n if (!Array.isArray(patch)) {\n throw new JsonPatchError('Patch sequence must be an array', 'SEQUENCE_NOT_AN_ARRAY');\n }\n }\n if (!mutateDocument) {\n document = _deepClone(document);\n }\n var results = new Array(patch.length);\n for (var i = 0, length_1 = patch.length; i < length_1; i++) {\n // we don't need to pass mutateDocument argument because if it was true, we already deep cloned the object, we'll just pass `true`\n results[i] = applyOperation(document, patch[i], validateOperation, true, banPrototypeModifications, i);\n document = results[i].newDocument; // in case root was replaced\n }\n results.newDocument = document;\n return results;\n}\n/**\n * Apply a single JSON Patch Operation on a JSON document.\n * Returns the updated document.\n * Suitable as a reducer.\n *\n * @param document The document to patch\n * @param operation The operation to apply\n * @return The updated document\n */\nexport function applyReducer(document, operation, index) {\n var operationResult = applyOperation(document, operation);\n if (operationResult.test === false) { // failed test\n throw new JsonPatchError(\"Test operation failed\", 'TEST_OPERATION_FAILED', index, operation, document);\n }\n return operationResult.newDocument;\n}\n/**\n * Validates a single operation. Called from `jsonpatch.validate`. Throws `JsonPatchError` in case of an error.\n * @param {object} operation - operation object (patch)\n * @param {number} index - index of operation in the sequence\n * @param {object} [document] - object where the operation is supposed to be applied\n * @param {string} [existingPathFragment] - comes along with `document`\n */\nexport function validator(operation, index, document, existingPathFragment) {\n if (typeof operation !== 'object' || operation === null || Array.isArray(operation)) {\n throw new JsonPatchError('Operation is not an object', 'OPERATION_NOT_AN_OBJECT', index, operation, document);\n }\n else if (!objOps[operation.op]) {\n throw new JsonPatchError('Operation `op` property is not one of operations defined in RFC-6902', 'OPERATION_OP_INVALID', index, operation, document);\n }\n else if (typeof operation.path !== 'string') {\n throw new JsonPatchError('Operation `path` property is not a string', 'OPERATION_PATH_INVALID', index, operation, document);\n }\n else if (operation.path.indexOf('/') !== 0 && operation.path.length > 0) {\n // paths that aren't empty string should start with \"/\"\n throw new JsonPatchError('Operation `path` property must start with \"/\"', 'OPERATION_PATH_INVALID', index, operation, document);\n }\n else if ((operation.op === 'move' || operation.op === 'copy') && typeof operation.from !== 'string') {\n throw new JsonPatchError('Operation `from` property is not present (applicable in `move` and `copy` operations)', 'OPERATION_FROM_REQUIRED', index, operation, document);\n }\n else if ((operation.op === 'add' || operation.op === 'replace' || operation.op === 'test') && operation.value === undefined) {\n throw new JsonPatchError('Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)', 'OPERATION_VALUE_REQUIRED', index, operation, document);\n }\n else if ((operation.op === 'add' || operation.op === 'replace' || operation.op === 'test') && hasUndefined(operation.value)) {\n throw new JsonPatchError('Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)', 'OPERATION_VALUE_CANNOT_CONTAIN_UNDEFINED', index, operation, document);\n }\n else if (document) {\n if (operation.op == \"add\") {\n var pathLen = operation.path.split(\"/\").length;\n var existingPathLen = existingPathFragment.split(\"/\").length;\n if (pathLen !== existingPathLen + 1 && pathLen !== existingPathLen) {\n throw new JsonPatchError('Cannot perform an `add` operation at the desired path', 'OPERATION_PATH_CANNOT_ADD', index, operation, document);\n }\n }\n else if (operation.op === 'replace' || operation.op === 'remove' || operation.op === '_get') {\n if (operation.path !== existingPathFragment) {\n throw new JsonPatchError('Cannot perform the operation at a path that does not exist', 'OPERATION_PATH_UNRESOLVABLE', index, operation, document);\n }\n }\n else if (operation.op === 'move' || operation.op === 'copy') {\n var existingValue = { op: \"_get\", path: operation.from, value: undefined };\n var error = validate([existingValue], document);\n if (error && error.name === 'OPERATION_PATH_UNRESOLVABLE') {\n throw new JsonPatchError('Cannot perform the operation from a path that does not exist', 'OPERATION_FROM_UNRESOLVABLE', index, operation, document);\n }\n }\n }\n}\n/**\n * Validates a sequence of operations. If `document` parameter is provided, the sequence is additionally validated against the object document.\n * If error is encountered, returns a JsonPatchError object\n * @param sequence\n * @param document\n * @returns {JsonPatchError|undefined}\n */\nexport function validate(sequence, document, externalValidator) {\n try {\n if (!Array.isArray(sequence)) {\n throw new JsonPatchError('Patch sequence must be an array', 'SEQUENCE_NOT_AN_ARRAY');\n }\n if (document) {\n //clone document and sequence so that we can safely try applying operations\n applyPatch(_deepClone(document), _deepClone(sequence), externalValidator || true);\n }\n else {\n externalValidator = externalValidator || validator;\n for (var i = 0; i < sequence.length; i++) {\n externalValidator(sequence[i], i, document, undefined);\n }\n }\n }\n catch (e) {\n if (e instanceof JsonPatchError) {\n return e;\n }\n else {\n throw e;\n }\n }\n}\n// based on https://github.com/epoberezkin/fast-deep-equal\n// MIT License\n// Copyright (c) 2017 Evgeny Poberezkin\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\nexport function _areEquals(a, b) {\n if (a === b)\n return true;\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n var arrA = Array.isArray(a), arrB = Array.isArray(b), i, length, key;\n if (arrA && arrB) {\n length = a.length;\n if (length != b.length)\n return false;\n for (i = length; i-- !== 0;)\n if (!_areEquals(a[i], b[i]))\n return false;\n return true;\n }\n if (arrA != arrB)\n return false;\n var keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length)\n return false;\n for (i = length; i-- !== 0;)\n if (!b.hasOwnProperty(keys[i]))\n return false;\n for (i = length; i-- !== 0;) {\n key = keys[i];\n if (!_areEquals(a[key], b[key]))\n return false;\n }\n return true;\n }\n return a !== a && b !== b;\n}\n;\n", "/*!\n * https://github.com/Starcounter-Jack/JSON-Patch\n * (c) 2017-2021 Joachim Wester\n * MIT license\n */\nimport { _deepClone, _objectKeys, escapePathComponent, hasOwnProperty } from './helpers.mjs';\nimport { applyPatch } from './core.mjs';\nvar beforeDict = new WeakMap();\nvar Mirror = /** @class */ (function () {\n function Mirror(obj) {\n this.observers = new Map();\n this.obj = obj;\n }\n return Mirror;\n}());\nvar ObserverInfo = /** @class */ (function () {\n function ObserverInfo(callback, observer) {\n this.callback = callback;\n this.observer = observer;\n }\n return ObserverInfo;\n}());\nfunction getMirror(obj) {\n return beforeDict.get(obj);\n}\nfunction getObserverFromMirror(mirror, callback) {\n return mirror.observers.get(callback);\n}\nfunction removeObserverFromMirror(mirror, observer) {\n mirror.observers.delete(observer.callback);\n}\n/**\n * Detach an observer from an object\n */\nexport function unobserve(root, observer) {\n observer.unobserve();\n}\n/**\n * Observes changes made to an object, which can then be retrieved using generate\n */\nexport function observe(obj, callback) {\n var patches = [];\n var observer;\n var mirror = getMirror(obj);\n if (!mirror) {\n mirror = new Mirror(obj);\n beforeDict.set(obj, mirror);\n }\n else {\n var observerInfo = getObserverFromMirror(mirror, callback);\n observer = observerInfo && observerInfo.observer;\n }\n if (observer) {\n return observer;\n }\n observer = {};\n mirror.value = _deepClone(obj);\n if (callback) {\n observer.callback = callback;\n observer.next = null;\n var dirtyCheck = function () {\n generate(observer);\n };\n var fastCheck = function () {\n clearTimeout(observer.next);\n observer.next = setTimeout(dirtyCheck);\n };\n if (typeof window !== 'undefined') { //not Node\n window.addEventListener('mouseup', fastCheck);\n window.addEventListener('keyup', fastCheck);\n window.addEventListener('mousedown', fastCheck);\n window.addEventListener('keydown', fastCheck);\n window.addEventListener('change', fastCheck);\n }\n }\n observer.patches = patches;\n observer.object = obj;\n observer.unobserve = function () {\n generate(observer);\n clearTimeout(observer.next);\n removeObserverFromMirror(mirror, observer);\n if (typeof window !== 'undefined') {\n window.removeEventListener('mouseup', fastCheck);\n window.removeEventListener('keyup', fastCheck);\n window.removeEventListener('mousedown', fastCheck);\n window.removeEventListener('keydown', fastCheck);\n window.removeEventListener('change', fastCheck);\n }\n };\n mirror.observers.set(callback, new ObserverInfo(callback, observer));\n return observer;\n}\n/**\n * Generate an array of patches from an observer\n */\nexport function generate(observer, invertible) {\n if (invertible === void 0) { invertible = false; }\n var mirror = beforeDict.get(observer.object);\n _generate(mirror.value, observer.object, observer.patches, \"\", invertible);\n if (observer.patches.length) {\n applyPatch(mirror.value, observer.patches);\n }\n var temp = observer.patches;\n if (temp.length > 0) {\n observer.patches = [];\n if (observer.callback) {\n observer.callback(temp);\n }\n }\n return temp;\n}\n// Dirty check if obj is different from mirror, generate patches and update mirror\nfunction _generate(mirror, obj, patches, path, invertible) {\n if (obj === mirror) {\n return;\n }\n if (typeof obj.toJSON === \"function\") {\n obj = obj.toJSON();\n }\n var newKeys = _objectKeys(obj);\n var oldKeys = _objectKeys(mirror);\n var changed = false;\n var deleted = false;\n //if ever \"move\" operation is implemented here, make sure this test runs OK: \"should not generate the same patch twice (move)\"\n for (var t = oldKeys.length - 1; t >= 0; t--) {\n var key = oldKeys[t];\n var oldVal = mirror[key];\n if (hasOwnProperty(obj, key) && !(obj[key] === undefined && oldVal !== undefined && Array.isArray(obj) === false)) {\n var newVal = obj[key];\n if (typeof oldVal == \"object\" && oldVal != null && typeof newVal == \"object\" && newVal != null && Array.isArray(oldVal) === Array.isArray(newVal)) {\n _generate(oldVal, newVal, patches, path + \"/\" + escapePathComponent(key), invertible);\n }\n else {\n if (oldVal !== newVal) {\n changed = true;\n if (invertible) {\n patches.push({ op: \"test\", path: path + \"/\" + escapePathComponent(key), value: _deepClone(oldVal) });\n }\n patches.push({ op: \"replace\", path: path + \"/\" + escapePathComponent(key), value: _deepClone(newVal) });\n }\n }\n }\n else if (Array.isArray(mirror) === Array.isArray(obj)) {\n if (invertible) {\n patches.push({ op: \"test\", path: path + \"/\" + escapePathComponent(key), value: _deepClone(oldVal) });\n }\n patches.push({ op: \"remove\", path: path + \"/\" + escapePathComponent(key) });\n deleted = true; // property has been deleted\n }\n else {\n if (invertible) {\n patches.push({ op: \"test\", path: path, value: mirror });\n }\n patches.push({ op: \"replace\", path: path, value: obj });\n changed = true;\n }\n }\n if (!deleted && newKeys.length == oldKeys.length) {\n return;\n }\n for (var t = 0; t < newKeys.length; t++) {\n var key = newKeys[t];\n if (!hasOwnProperty(mirror, key) && obj[key] !== undefined) {\n patches.push({ op: \"add\", path: path + \"/\" + escapePathComponent(key), value: _deepClone(obj[key]) });\n }\n }\n}\n/**\n * Create an array of patches from the differences in two objects\n */\nexport function compare(tree1, tree2, invertible) {\n if (invertible === void 0) { invertible = false; }\n var patches = [];\n _generate(tree1, tree2, patches, '', invertible);\n return patches;\n}\n", "export * from './module/core.mjs';\nexport * from './module/duplex.mjs';\nexport {\n PatchError as JsonPatchError,\n _deepClone as deepClone,\n escapePathComponent,\n unescapePathComponent\n} from './module/helpers.mjs';\n\n\n/**\n * Default export for backwards compat\n */\n\nimport * as core from './module/core.mjs';\nimport * as duplex from './module/duplex.mjs';\nimport {\n PatchError as JsonPatchError,\n _deepClone as deepClone,\n escapePathComponent,\n unescapePathComponent\n} from './module/helpers.mjs';\n\nexport default Object.assign({}, core, duplex, {\n JsonPatchError,\n deepClone,\n escapePathComponent,\n unescapePathComponent\n});", "class LRUCache {\n constructor () {\n this.max = 1000\n this.map = new Map()\n }\n\n get (key) {\n const value = this.map.get(key)\n if (value === undefined) {\n return undefined\n } else {\n // Remove the key from the map and add it to the end\n this.map.delete(key)\n this.map.set(key, value)\n return value\n }\n }\n\n delete (key) {\n return this.map.delete(key)\n }\n\n set (key, value) {\n const deleted = this.delete(key)\n\n if (!deleted && value !== undefined) {\n // If cache is full, delete the least recently used item\n if (this.map.size >= this.max) {\n const firstKey = this.map.keys().next().value\n this.delete(firstKey)\n }\n\n this.map.set(key, value)\n }\n\n return this\n }\n}\n\nmodule.exports = LRUCache\n", "// parse out just the options we care about\nconst looseOption = Object.freeze({ loose: true })\nconst emptyOpts = Object.freeze({ })\nconst parseOptions = options => {\n if (!options) {\n return emptyOpts\n }\n\n if (typeof options !== 'object') {\n return looseOption\n }\n\n return options\n}\nmodule.exports = parseOptions\n", "// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n/* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\n// Max safe length for a build identifier. The max length minus 6 characters for\n// the shortest version with a build 0.0.0+BUILD.\nconst MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6\n\nconst RELEASE_TYPES = [\n 'major',\n 'premajor',\n 'minor',\n 'preminor',\n 'patch',\n 'prepatch',\n 'prerelease',\n]\n\nmodule.exports = {\n MAX_LENGTH,\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_SAFE_INTEGER,\n RELEASE_TYPES,\n SEMVER_SPEC_VERSION,\n FLAG_INCLUDE_PRERELEASE: 0b001,\n FLAG_LOOSE: 0b010,\n}\n", "const debug = (\n typeof process === 'object' &&\n process.env &&\n process.env.NODE_DEBUG &&\n /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n : () => {}\n\nmodule.exports = debug\n", "const {\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_LENGTH,\n} = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst safeRe = exports.safeRe = []\nconst src = exports.src = []\nconst t = exports.t = {}\nlet R = 0\n\nconst LETTERDASHNUMBER = '[a-zA-Z0-9-]'\n\n// Replace some greedy regex tokens to prevent regex dos issues. These regex are\n// used internally via the safeRe object since all inputs in this library get\n// normalized first to trim and collapse all extra whitespace. The original\n// regexes are exported for userland consumption and lower level usage. A\n// future breaking change could export the safer regex only with a note that\n// all input should have extra whitespace removed.\nconst safeRegexReplacements = [\n ['\\\\s', 1],\n ['\\\\d', MAX_LENGTH],\n [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH],\n]\n\nconst makeSafeRegex = (value) => {\n for (const [token, max] of safeRegexReplacements) {\n value = value\n .split(`${token}*`).join(`${token}{0,${max}}`)\n .split(`${token}+`).join(`${token}{1,${max}}`)\n }\n return value\n}\n\nconst createToken = (name, value, isGlobal) => {\n const safe = makeSafeRegex(value)\n const index = R++\n debug(name, index, value)\n t[name] = index\n src[index] = value\n re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '\\\\d+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`)\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`)\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups. The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:${src[t.PRERELEASE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:${src[t.PRERELEASELOOSE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCEPLAIN', `${'(^|[^\\\\d])' +\n '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`)\ncreateToken('COERCE', `${src[t.COERCEPLAIN]}(?:$|[^\\\\d])`)\ncreateToken('COERCEFULL', src[t.COERCEPLAIN] +\n `(?:${src[t.PRERELEASE]})?` +\n `(?:${src[t.BUILD]})?` +\n `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\ncreateToken('COERCERTLFULL', src[t.COERCEFULL], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAIN]})` +\n `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$')\n", "const numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n const anum = numeric.test(a)\n const bnum = numeric.test(b)\n\n if (anum && bnum) {\n a = +a\n b = +b\n }\n\n return a === b ? 0\n : (anum && !bnum) ? -1\n : (bnum && !anum) ? 1\n : a < b ? -1\n : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n compareIdentifiers,\n rcompareIdentifiers,\n}\n", "const debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst parseOptions = require('../internal/parse-options')\nconst { compareIdentifiers } = require('../internal/identifiers')\nclass SemVer {\n constructor (version, options) {\n options = parseOptions(options)\n\n if (version instanceof SemVer) {\n if (version.loose === !!options.loose &&\n version.includePrerelease === !!options.includePrerelease) {\n return version\n } else {\n version = version.version\n }\n } else if (typeof version !== 'string') {\n throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`)\n }\n\n if (version.length > MAX_LENGTH) {\n throw new TypeError(\n `version is longer than ${MAX_LENGTH} characters`\n )\n }\n\n debug('SemVer', version, options)\n this.options = options\n this.loose = !!options.loose\n // this isn't actually relevant for versions, but keep it so that we\n // don't run into trouble passing this.options around.\n this.includePrerelease = !!options.includePrerelease\n\n const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n if (!m) {\n throw new TypeError(`Invalid Version: ${version}`)\n }\n\n this.raw = version\n\n // these are actually numbers\n this.major = +m[1]\n this.minor = +m[2]\n this.patch = +m[3]\n\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError('Invalid major version')\n }\n\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError('Invalid minor version')\n }\n\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError('Invalid patch version')\n }\n\n // numberify any prerelease numeric ids\n if (!m[4]) {\n this.prerelease = []\n } else {\n this.prerelease = m[4].split('.').map((id) => {\n if (/^[0-9]+$/.test(id)) {\n const num = +id\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num\n }\n }\n return id\n })\n }\n\n this.build = m[5] ? m[5].split('.') : []\n this.format()\n }\n\n format () {\n this.version = `${this.major}.${this.minor}.${this.patch}`\n if (this.prerelease.length) {\n this.version += `-${this.prerelease.join('.')}`\n }\n return this.version\n }\n\n toString () {\n return this.version\n }\n\n compare (other) {\n debug('SemVer.compare', this.version, this.options, other)\n if (!(other instanceof SemVer)) {\n if (typeof other === 'string' && other === this.version) {\n return 0\n }\n other = new SemVer(other, this.options)\n }\n\n if (other.version === this.version) {\n return 0\n }\n\n return this.compareMain(other) || this.comparePre(other)\n }\n\n compareMain (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n return (\n compareIdentifiers(this.major, other.major) ||\n compareIdentifiers(this.minor, other.minor) ||\n compareIdentifiers(this.patch, other.patch)\n )\n }\n\n comparePre (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n // NOT having a prerelease is > having one\n if (this.prerelease.length && !other.prerelease.length) {\n return -1\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0\n }\n\n let i = 0\n do {\n const a = this.prerelease[i]\n const b = other.prerelease[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n compareBuild (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n let i = 0\n do {\n const a = this.build[i]\n const b = other.build[i]\n debug('build compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n // preminor will bump the version up to the next minor release, and immediately\n // down to pre-release. premajor and prepatch work the same way.\n inc (release, identifier, identifierBase) {\n switch (release) {\n case 'premajor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor = 0\n this.major++\n this.inc('pre', identifier, identifierBase)\n break\n case 'preminor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor++\n this.inc('pre', identifier, identifierBase)\n break\n case 'prepatch':\n // If this is already a prerelease, it will bump to the next version\n // drop any prereleases that might already exist, since they are not\n // relevant at this point.\n this.prerelease.length = 0\n this.inc('patch', identifier, identifierBase)\n this.inc('pre', identifier, identifierBase)\n break\n // If the input is a non-prerelease version, this acts the same as\n // prepatch.\n case 'prerelease':\n if (this.prerelease.length === 0) {\n this.inc('patch', identifier, identifierBase)\n }\n this.inc('pre', identifier, identifierBase)\n break\n\n case 'major':\n // If this is a pre-major version, bump up to the same major version.\n // Otherwise increment major.\n // 1.0.0-5 bumps to 1.0.0\n // 1.1.0 bumps to 2.0.0\n if (\n this.minor !== 0 ||\n this.patch !== 0 ||\n this.prerelease.length === 0\n ) {\n this.major++\n }\n this.minor = 0\n this.patch = 0\n this.prerelease = []\n break\n case 'minor':\n // If this is a pre-minor version, bump up to the same minor version.\n // Otherwise increment minor.\n // 1.2.0-5 bumps to 1.2.0\n // 1.2.1 bumps to 1.3.0\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++\n }\n this.patch = 0\n this.prerelease = []\n break\n case 'patch':\n // If this is not a pre-release version, it will increment the patch.\n // If it is a pre-release it will bump up to the same patch version.\n // 1.2.0-5 patches to 1.2.0\n // 1.2.0 patches to 1.2.1\n if (this.prerelease.length === 0) {\n this.patch++\n }\n this.prerelease = []\n break\n // This probably shouldn't be used publicly.\n // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n case 'pre': {\n const base = Number(identifierBase) ? 1 : 0\n\n if (!identifier && identifierBase === false) {\n throw new Error('invalid increment argument: identifier is empty')\n }\n\n if (this.prerelease.length === 0) {\n this.prerelease = [base]\n } else {\n let i = this.prerelease.length\n while (--i >= 0) {\n if (typeof this.prerelease[i] === 'number') {\n this.prerelease[i]++\n i = -2\n }\n }\n if (i === -1) {\n // didn't increment anything\n if (identifier === this.prerelease.join('.') && identifierBase === false) {\n throw new Error('invalid increment argument: identifier already exists')\n }\n this.prerelease.push(base)\n }\n }\n if (identifier) {\n // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n let prerelease = [identifier, base]\n if (identifierBase === false) {\n prerelease = [identifier]\n }\n if (compareIdentifiers(this.prerelease[0], identifier) === 0) {\n if (isNaN(this.prerelease[1])) {\n this.prerelease = prerelease\n }\n } else {\n this.prerelease = prerelease\n }\n }\n break\n }\n default:\n throw new Error(`invalid increment argument: ${release}`)\n }\n this.raw = this.format()\n if (this.build.length) {\n this.raw += `+${this.build.join('.')}`\n }\n return this\n }\n}\n\nmodule.exports = SemVer\n", "const SemVer = require('../classes/semver')\nconst compare = (a, b, loose) =>\n new SemVer(a, loose).compare(new SemVer(b, loose))\n\nmodule.exports = compare\n", "const compare = require('./compare')\nconst eq = (a, b, loose) => compare(a, b, loose) === 0\nmodule.exports = eq\n", "const compare = require('./compare')\nconst neq = (a, b, loose) => compare(a, b, loose) !== 0\nmodule.exports = neq\n", "const compare = require('./compare')\nconst gt = (a, b, loose) => compare(a, b, loose) > 0\nmodule.exports = gt\n", "const compare = require('./compare')\nconst gte = (a, b, loose) => compare(a, b, loose) >= 0\nmodule.exports = gte\n", "const compare = require('./compare')\nconst lt = (a, b, loose) => compare(a, b, loose) < 0\nmodule.exports = lt\n", "const compare = require('./compare')\nconst lte = (a, b, loose) => compare(a, b, loose) <= 0\nmodule.exports = lte\n", "const eq = require('./eq')\nconst neq = require('./neq')\nconst gt = require('./gt')\nconst gte = require('./gte')\nconst lt = require('./lt')\nconst lte = require('./lte')\n\nconst cmp = (a, op, b, loose) => {\n switch (op) {\n case '===':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a === b\n\n case '!==':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a !== b\n\n case '':\n case '=':\n case '==':\n return eq(a, b, loose)\n\n case '!=':\n return neq(a, b, loose)\n\n case '>':\n return gt(a, b, loose)\n\n case '>=':\n return gte(a, b, loose)\n\n case '<':\n return lt(a, b, loose)\n\n case '<=':\n return lte(a, b, loose)\n\n default:\n throw new TypeError(`Invalid operator: ${op}`)\n }\n}\nmodule.exports = cmp\n", "const ANY = Symbol('SemVer ANY')\n// hoisted class for cyclic dependency\nclass Comparator {\n static get ANY () {\n return ANY\n }\n\n constructor (comp, options) {\n options = parseOptions(options)\n\n if (comp instanceof Comparator) {\n if (comp.loose === !!options.loose) {\n return comp\n } else {\n comp = comp.value\n }\n }\n\n comp = comp.trim().split(/\\s+/).join(' ')\n debug('comparator', comp, options)\n this.options = options\n this.loose = !!options.loose\n this.parse(comp)\n\n if (this.semver === ANY) {\n this.value = ''\n } else {\n this.value = this.operator + this.semver.version\n }\n\n debug('comp', this)\n }\n\n parse (comp) {\n const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n const m = comp.match(r)\n\n if (!m) {\n throw new TypeError(`Invalid comparator: ${comp}`)\n }\n\n this.operator = m[1] !== undefined ? m[1] : ''\n if (this.operator === '=') {\n this.operator = ''\n }\n\n // if it literally is just '>' or '' then allow anything.\n if (!m[2]) {\n this.semver = ANY\n } else {\n this.semver = new SemVer(m[2], this.options.loose)\n }\n }\n\n toString () {\n return this.value\n }\n\n test (version) {\n debug('Comparator.test', version, this.options.loose)\n\n if (this.semver === ANY || version === ANY) {\n return true\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n return cmp(version, this.operator, this.semver, this.options)\n }\n\n intersects (comp, options) {\n if (!(comp instanceof Comparator)) {\n throw new TypeError('a Comparator is required')\n }\n\n if (this.operator === '') {\n if (this.value === '') {\n return true\n }\n return new Range(comp.value, options).test(this.value)\n } else if (comp.operator === '') {\n if (comp.value === '') {\n return true\n }\n return new Range(this.value, options).test(comp.semver)\n }\n\n options = parseOptions(options)\n\n // Special cases where nothing can possibly be lower\n if (options.includePrerelease &&\n (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {\n return false\n }\n if (!options.includePrerelease &&\n (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {\n return false\n }\n\n // Same direction increasing (> or >=)\n if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {\n return true\n }\n // Same direction decreasing (< or <=)\n if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {\n return true\n }\n // same SemVer and both sides are inclusive (<= or >=)\n if (\n (this.semver.version === comp.semver.version) &&\n this.operator.includes('=') && comp.operator.includes('=')) {\n return true\n }\n // opposite directions less than\n if (cmp(this.semver, '<', comp.semver, options) &&\n this.operator.startsWith('>') && comp.operator.startsWith('<')) {\n return true\n }\n // opposite directions greater than\n if (cmp(this.semver, '>', comp.semver, options) &&\n this.operator.startsWith('<') && comp.operator.startsWith('>')) {\n return true\n }\n return false\n }\n}\n\nmodule.exports = Comparator\n\nconst parseOptions = require('../internal/parse-options')\nconst { safeRe: re, t } = require('../internal/re')\nconst cmp = require('../functions/cmp')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst Range = require('./range')\n", "const SPACE_CHARACTERS = /\\s+/g\n\n// hoisted class for cyclic dependency\nclass Range {\n constructor (range, options) {\n options = parseOptions(options)\n\n if (range instanceof Range) {\n if (\n range.loose === !!options.loose &&\n range.includePrerelease === !!options.includePrerelease\n ) {\n return range\n } else {\n return new Range(range.raw, options)\n }\n }\n\n if (range instanceof Comparator) {\n // just put it in the set and return\n this.raw = range.value\n this.set = [[range]]\n this.formatted = undefined\n return this\n }\n\n this.options = options\n this.loose = !!options.loose\n this.includePrerelease = !!options.includePrerelease\n\n // First reduce all whitespace as much as possible so we do not have to rely\n // on potentially slow regexes like \\s*. This is then stored and used for\n // future error messages as well.\n this.raw = range.trim().replace(SPACE_CHARACTERS, ' ')\n\n // First, split on ||\n this.set = this.raw\n .split('||')\n // map the range to a 2d array of comparators\n .map(r => this.parseRange(r.trim()))\n // throw out any comparator lists that are empty\n // this generally means that it was not a valid range, which is allowed\n // in loose mode, but will still throw if the WHOLE range is invalid.\n .filter(c => c.length)\n\n if (!this.set.length) {\n throw new TypeError(`Invalid SemVer Range: ${this.raw}`)\n }\n\n // if we have any that are not the null set, throw out null sets.\n if (this.set.length > 1) {\n // keep the first one, in case they're all null sets\n const first = this.set[0]\n this.set = this.set.filter(c => !isNullSet(c[0]))\n if (this.set.length === 0) {\n this.set = [first]\n } else if (this.set.length > 1) {\n // if we have any that are *, then the range is just *\n for (const c of this.set) {\n if (c.length === 1 && isAny(c[0])) {\n this.set = [c]\n break\n }\n }\n }\n }\n\n this.formatted = undefined\n }\n\n get range () {\n if (this.formatted === undefined) {\n this.formatted = ''\n for (let i = 0; i < this.set.length; i++) {\n if (i > 0) {\n this.formatted += '||'\n }\n const comps = this.set[i]\n for (let k = 0; k < comps.length; k++) {\n if (k > 0) {\n this.formatted += ' '\n }\n this.formatted += comps[k].toString().trim()\n }\n }\n }\n return this.formatted\n }\n\n format () {\n return this.range\n }\n\n toString () {\n return this.range\n }\n\n parseRange (range) {\n // memoize range parsing for performance.\n // this is a very hot path, and fully deterministic.\n const memoOpts =\n (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) |\n (this.options.loose && FLAG_LOOSE)\n const memoKey = memoOpts + ':' + range\n const cached = cache.get(memoKey)\n if (cached) {\n return cached\n }\n\n const loose = this.options.loose\n // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]\n range = range.replace(hr, hyphenReplace(this.options.includePrerelease))\n debug('hyphen replace', range)\n\n // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)\n debug('comparator trim', range)\n\n // `~ 1.2.3` => `~1.2.3`\n range = range.replace(re[t.TILDETRIM], tildeTrimReplace)\n debug('tilde trim', range)\n\n // `^ 1.2.3` => `^1.2.3`\n range = range.replace(re[t.CARETTRIM], caretTrimReplace)\n debug('caret trim', range)\n\n // At this point, the range is completely trimmed and\n // ready to be split into comparators.\n\n let rangeList = range\n .split(' ')\n .map(comp => parseComparator(comp, this.options))\n .join(' ')\n .split(/\\s+/)\n // >=0.0.0 is equivalent to *\n .map(comp => replaceGTE0(comp, this.options))\n\n if (loose) {\n // in loose mode, throw out any that are not valid comparators\n rangeList = rangeList.filter(comp => {\n debug('loose invalid filter', comp, this.options)\n return !!comp.match(re[t.COMPARATORLOOSE])\n })\n }\n debug('range list', rangeList)\n\n // if any comparators are the null set, then replace with JUST null set\n // if more than one comparator, remove any * comparators\n // also, don't include the same comparator more than once\n const rangeMap = new Map()\n const comparators = rangeList.map(comp => new Comparator(comp, this.options))\n for (const comp of comparators) {\n if (isNullSet(comp)) {\n return [comp]\n }\n rangeMap.set(comp.value, comp)\n }\n if (rangeMap.size > 1 && rangeMap.has('')) {\n rangeMap.delete('')\n }\n\n const result = [...rangeMap.values()]\n cache.set(memoKey, result)\n return result\n }\n\n intersects (range, options) {\n if (!(range instanceof Range)) {\n throw new TypeError('a Range is required')\n }\n\n return this.set.some((thisComparators) => {\n return (\n isSatisfiable(thisComparators, options) &&\n range.set.some((rangeComparators) => {\n return (\n isSatisfiable(rangeComparators, options) &&\n thisComparators.every((thisComparator) => {\n return rangeComparators.every((rangeComparator) => {\n return thisComparator.intersects(rangeComparator, options)\n })\n })\n )\n })\n )\n })\n }\n\n // if ANY of the sets match ALL of its comparators, then pass\n test (version) {\n if (!version) {\n return false\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n for (let i = 0; i < this.set.length; i++) {\n if (testSet(this.set[i], version, this.options)) {\n return true\n }\n }\n return false\n }\n}\n\nmodule.exports = Range\n\nconst LRU = require('../internal/lrucache')\nconst cache = new LRU()\n\nconst parseOptions = require('../internal/parse-options')\nconst Comparator = require('./comparator')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst {\n safeRe: re,\n t,\n comparatorTrimReplace,\n tildeTrimReplace,\n caretTrimReplace,\n} = require('../internal/re')\nconst { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require('../internal/constants')\n\nconst isNullSet = c => c.value === '<0.0.0-0'\nconst isAny = c => c.value === ''\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nconst isSatisfiable = (comparators, options) => {\n let result = true\n const remainingComparators = comparators.slice()\n let testComparator = remainingComparators.pop()\n\n while (result && remainingComparators.length) {\n result = remainingComparators.every((otherComparator) => {\n return testComparator.intersects(otherComparator, options)\n })\n\n testComparator = remainingComparators.pop()\n }\n\n return result\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nconst parseComparator = (comp, options) => {\n debug('comp', comp, options)\n comp = replaceCarets(comp, options)\n debug('caret', comp)\n comp = replaceTildes(comp, options)\n debug('tildes', comp)\n comp = replaceXRanges(comp, options)\n debug('xrange', comp)\n comp = replaceStars(comp, options)\n debug('stars', comp)\n return comp\n}\n\nconst isX = id => !id || id.toLowerCase() === 'x' || id === '*'\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\n// ~0.0.1 --> >=0.0.1 <0.1.0-0\nconst replaceTildes = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceTilde(c, options))\n .join(' ')\n}\n\nconst replaceTilde = (comp, options) => {\n const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('tilde', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0 <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n // ~1.2 == >=1.2.0 <1.3.0-0\n ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`\n } else if (pr) {\n debug('replaceTilde pr', pr)\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n } else {\n // ~1.2.3 == >=1.2.3 <1.3.0-0\n ret = `>=${M}.${m}.${p\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('tilde return', ret)\n return ret\n })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n// ^1.2.3 --> >=1.2.3 <2.0.0-0\n// ^1.2.0 --> >=1.2.0 <2.0.0-0\n// ^0.0.1 --> >=0.0.1 <0.0.2-0\n// ^0.1.0 --> >=0.1.0 <0.2.0-0\nconst replaceCarets = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceCaret(c, options))\n .join(' ')\n}\n\nconst replaceCaret = (comp, options) => {\n debug('caret', comp, options)\n const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]\n const z = options.includePrerelease ? '-0' : ''\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('caret', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n if (M === '0') {\n ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n } else {\n ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`\n }\n } else if (pr) {\n debug('replaceCaret pr', pr)\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${+M + 1}.0.0-0`\n }\n } else {\n debug('no pr')\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p\n } <${+M + 1}.0.0-0`\n }\n }\n\n debug('caret return', ret)\n return ret\n })\n}\n\nconst replaceXRanges = (comp, options) => {\n debug('replaceXRanges', comp, options)\n return comp\n .split(/\\s+/)\n .map((c) => replaceXRange(c, options))\n .join(' ')\n}\n\nconst replaceXRange = (comp, options) => {\n comp = comp.trim()\n const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]\n return comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n debug('xRange', comp, ret, gtlt, M, m, p, pr)\n const xM = isX(M)\n const xm = xM || isX(m)\n const xp = xm || isX(p)\n const anyX = xp\n\n if (gtlt === '=' && anyX) {\n gtlt = ''\n }\n\n // if we're including prereleases in the match, then we need\n // to fix this to -0, the lowest possible prerelease value\n pr = options.includePrerelease ? '-0' : ''\n\n if (xM) {\n if (gtlt === '>' || gtlt === '<') {\n // nothing is allowed\n ret = '<0.0.0-0'\n } else {\n // nothing is forbidden\n ret = '*'\n }\n } else if (gtlt && anyX) {\n // we know patch is an x, because we have any x at all.\n // replace X with 0\n if (xm) {\n m = 0\n }\n p = 0\n\n if (gtlt === '>') {\n // >1 => >=2.0.0\n // >1.2 => >=1.3.0\n gtlt = '>='\n if (xm) {\n M = +M + 1\n m = 0\n p = 0\n } else {\n m = +m + 1\n p = 0\n }\n } else if (gtlt === '<=') {\n // <=0.7.x is actually <0.8.0, since any 0.7.x should\n // pass. Similarly, <=7.x is actually <8.0.0, etc.\n gtlt = '<'\n if (xm) {\n M = +M + 1\n } else {\n m = +m + 1\n }\n }\n\n if (gtlt === '<') {\n pr = '-0'\n }\n\n ret = `${gtlt + M}.${m}.${p}${pr}`\n } else if (xm) {\n ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`\n } else if (xp) {\n ret = `>=${M}.${m}.0${pr\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('xRange return', ret)\n\n return ret\n })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nconst replaceStars = (comp, options) => {\n debug('replaceStars', comp, options)\n // Looseness is ignored here. star is always as loose as it gets!\n return comp\n .trim()\n .replace(re[t.STAR], '')\n}\n\nconst replaceGTE0 = (comp, options) => {\n debug('replaceGTE0', comp, options)\n return comp\n .trim()\n .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0-0\n// TODO build?\nconst hyphenReplace = incPr => ($0,\n from, fM, fm, fp, fpr, fb,\n to, tM, tm, tp, tpr) => {\n if (isX(fM)) {\n from = ''\n } else if (isX(fm)) {\n from = `>=${fM}.0.0${incPr ? '-0' : ''}`\n } else if (isX(fp)) {\n from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`\n } else if (fpr) {\n from = `>=${from}`\n } else {\n from = `>=${from}${incPr ? '-0' : ''}`\n }\n\n if (isX(tM)) {\n to = ''\n } else if (isX(tm)) {\n to = `<${+tM + 1}.0.0-0`\n } else if (isX(tp)) {\n to = `<${tM}.${+tm + 1}.0-0`\n } else if (tpr) {\n to = `<=${tM}.${tm}.${tp}-${tpr}`\n } else if (incPr) {\n to = `<${tM}.${tm}.${+tp + 1}-0`\n } else {\n to = `<=${to}`\n }\n\n return `${from} ${to}`.trim()\n}\n\nconst testSet = (set, version, options) => {\n for (let i = 0; i < set.length; i++) {\n if (!set[i].test(version)) {\n return false\n }\n }\n\n if (version.prerelease.length && !options.includePrerelease) {\n // Find the set of versions that are allowed to have prereleases\n // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n // That should allow `1.2.3-pr.2` to pass.\n // However, `1.2.4-alpha.notready` should NOT be allowed,\n // even though it's within the range set by the comparators.\n for (let i = 0; i < set.length; i++) {\n debug(set[i].semver)\n if (set[i].semver === Comparator.ANY) {\n continue\n }\n\n if (set[i].semver.prerelease.length > 0) {\n const allowed = set[i].semver\n if (allowed.major === version.major &&\n allowed.minor === version.minor &&\n allowed.patch === version.patch) {\n return true\n }\n }\n }\n\n // Version has a -pre, but it's not one of the ones we like.\n return false\n }\n\n return true\n}\n", "const Range = require('../classes/range')\nconst satisfies = (version, range, options) => {\n try {\n range = new Range(range, options)\n } catch (er) {\n return false\n }\n return range.test(version)\n}\nmodule.exports = satisfies\n", "import {MessageData} from './types';\n\n/**\n * Open editor url in a new window, and pass a message.\n */\nexport default function (window: Window, url: string, data: MessageData) {\n const editor = window.open(url)!;\n const wait = 10_000;\n const step = 250;\n const {origin} = new URL(url);\n\n let count = ~~(wait / step);\n\n function listen(evt: MessageEvent) {\n if (evt.source === editor) {\n count = 0;\n window.removeEventListener('message', listen, false);\n }\n }\n window.addEventListener('message', listen, false);\n\n // send message\n // periodically resend until ack received or timeout\n function send() {\n if (count <= 0) {\n return;\n }\n editor.postMessage(data, origin);\n setTimeout(send, step);\n count -= 1;\n }\n setTimeout(send, step);\n}\n", "// generated with build-style.sh\nexport default `.vega-embed {\n position: relative;\n display: inline-block;\n box-sizing: border-box;\n}\n.vega-embed.has-actions {\n padding-right: 38px;\n}\n.vega-embed details:not([open]) > :not(summary) {\n display: none !important;\n}\n.vega-embed summary {\n list-style: none;\n position: absolute;\n top: 0;\n right: 0;\n padding: 6px;\n z-index: 1000;\n background: white;\n box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.1);\n color: #1b1e23;\n border: 1px solid #aaa;\n border-radius: 999px;\n opacity: 0.2;\n transition: opacity 0.4s ease-in;\n cursor: pointer;\n line-height: 0px;\n}\n.vega-embed summary::-webkit-details-marker {\n display: none;\n}\n.vega-embed summary:active {\n box-shadow: #aaa 0px 0px 0px 1px inset;\n}\n.vega-embed summary svg {\n width: 14px;\n height: 14px;\n}\n.vega-embed details[open] summary {\n opacity: 0.7;\n}\n.vega-embed:hover summary, .vega-embed:focus-within summary {\n opacity: 1 !important;\n transition: opacity 0.2s ease;\n}\n.vega-embed .vega-actions {\n position: absolute;\n z-index: 1001;\n top: 35px;\n right: -9px;\n display: flex;\n flex-direction: column;\n padding-bottom: 8px;\n padding-top: 8px;\n border-radius: 4px;\n box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.2);\n border: 1px solid #d9d9d9;\n background: white;\n animation-duration: 0.15s;\n animation-name: scale-in;\n animation-timing-function: cubic-bezier(0.2, 0, 0.13, 1.5);\n text-align: left;\n}\n.vega-embed .vega-actions a {\n padding: 8px 16px;\n font-family: sans-serif;\n font-size: 14px;\n font-weight: 600;\n white-space: nowrap;\n color: #434a56;\n text-decoration: none;\n}\n.vega-embed .vega-actions a:hover, .vega-embed .vega-actions a:focus {\n background-color: #f7f7f9;\n color: black;\n}\n.vega-embed .vega-actions::before, .vega-embed .vega-actions::after {\n content: \"\";\n display: inline-block;\n position: absolute;\n}\n.vega-embed .vega-actions::before {\n left: auto;\n right: 14px;\n top: -16px;\n border: 8px solid rgba(0, 0, 0, 0);\n border-bottom-color: #d9d9d9;\n}\n.vega-embed .vega-actions::after {\n left: auto;\n right: 15px;\n top: -14px;\n border: 7px solid rgba(0, 0, 0, 0);\n border-bottom-color: #fff;\n}\n.vega-embed .chart-wrapper.fit-x {\n width: 100%;\n}\n.vega-embed .chart-wrapper.fit-y {\n height: 100%;\n}\n\n.vega-embed-wrapper {\n max-width: 100%;\n overflow: auto;\n padding-right: 14px;\n}\n\n@keyframes scale-in {\n from {\n opacity: 0;\n transform: scale(0.6);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n}\n`;\n", "import {writeConfig} from 'vega';\n\nexport function isURL(s: string): boolean {\n return s.startsWith('http://') || s.startsWith('https://') || s.startsWith('//');\n}\n\nexport type DeepPartial<T> = {[P in keyof T]?: P extends unknown ? unknown : DeepPartial<T[P]>};\n\nexport function mergeDeep<T>(dest: T, ...src: readonly DeepPartial<T>[]): T {\n for (const s of src) {\n deepMerge_(dest, s);\n }\n return dest;\n}\n\nfunction deepMerge_(dest: any, src: any) {\n for (const property of Object.keys(src)) {\n writeConfig(dest, property, src[property], true);\n }\n}\n", "import {applyPatch, Operation} from 'fast-json-patch/index.mjs';\nimport stringify from 'json-stringify-pretty-compact';\n// need this import because of https://github.com/npm/node-semver/issues/381\nimport satisfies from 'semver/functions/satisfies';\nimport * as vegaImport from 'vega';\nimport {\n AutoSize,\n Config as VgConfig,\n EncodeEntryName,\n isBoolean,\n isObject,\n isString,\n Loader,\n LoaderOptions,\n mergeConfig,\n Renderers,\n Spec as VgSpec,\n TooltipHandler,\n View,\n} from 'vega';\nimport {expressionInterpreter} from 'vega-interpreter';\nimport * as vegaLiteImport from 'vega-lite';\nimport {Config as VlConfig, TopLevelSpec as VlSpec} from 'vega-lite';\nimport schemaParser from 'vega-schema-url-parser';\nimport * as themes from 'vega-themes';\nimport {Handler, Options as TooltipOptions} from 'vega-tooltip';\nimport post from './post';\nimport embedStyle from './style';\nimport {Config, ExpressionFunction, Mode} from './types';\nimport {mergeDeep} from './util';\nimport pkg from '../package.json';\n\nexport const version = pkg.version;\n\nexport * from './types';\n\nexport const vega = vegaImport;\nexport let vegaLite = vegaLiteImport;\n\n// For backwards compatibility with Vega-Lite before v4.\nconst w = (typeof window !== 'undefined' ? window : undefined) as any;\nif (vegaLite === undefined && w?.vl?.compile) {\n vegaLite = w.vl;\n}\n\nexport interface Actions {\n export?: boolean | {svg?: boolean; png?: boolean};\n source?: boolean;\n compiled?: boolean;\n editor?: boolean;\n}\n\nexport const DEFAULT_ACTIONS = {export: {svg: true, png: true}, source: true, compiled: true, editor: true};\n\nexport interface Hover {\n hoverSet?: EncodeEntryName;\n updateSet?: EncodeEntryName;\n}\n\nexport type PatchFunc = (spec: VgSpec) => VgSpec;\n\nconst I18N = {\n CLICK_TO_VIEW_ACTIONS: 'Click to view actions',\n COMPILED_ACTION: 'View Compiled Vega',\n EDITOR_ACTION: 'Open in Vega Editor',\n PNG_ACTION: 'Save as PNG',\n SOURCE_ACTION: 'View Source',\n SVG_ACTION: 'Save as SVG',\n};\n\nexport interface EmbedOptions<S = string, R = Renderers> {\n bind?: HTMLElement | string;\n actions?: boolean | Actions;\n mode?: Mode;\n theme?: keyof Omit<typeof themes, 'version'>;\n defaultStyle?: boolean | string;\n logLevel?: number;\n loader?: Loader | LoaderOptions;\n renderer?: R;\n tooltip?: TooltipHandler | TooltipOptions | boolean;\n patch?: S | PatchFunc | Operation[];\n width?: number;\n height?: number;\n padding?: number | {left?: number; right?: number; top?: number; bottom?: number};\n scaleFactor?: number | {svg?: number; png?: number};\n config?: S | Config;\n sourceHeader?: string;\n sourceFooter?: string;\n editorUrl?: string;\n hover?: boolean | Hover;\n i18n?: Partial<typeof I18N>;\n downloadFileName?: string;\n formatLocale?: Record<string, unknown>;\n timeFormatLocale?: Record<string, unknown>;\n expressionFunctions?: ExpressionFunction;\n ast?: boolean;\n expr?: typeof expressionInterpreter;\n viewClass?: typeof View;\n forceActionsMenu?: boolean;\n}\n\nconst NAMES: {[key in Mode]: string} = {\n vega: 'Vega',\n 'vega-lite': 'Vega-Lite',\n};\n\nconst VERSION = {\n vega: vega.version,\n 'vega-lite': vegaLite ? vegaLite.version : 'not available',\n};\n\nconst PREPROCESSOR: {[mode in Mode]: (spec: any, config?: Config) => VgSpec} = {\n vega: (vgSpec: VgSpec) => vgSpec,\n 'vega-lite': (vlSpec, config) => vegaLite.compile(vlSpec as VlSpec, {config: config as VlConfig}).spec,\n};\n\nconst SVG_CIRCLES = `\n<svg viewBox=\"0 0 16 16\" fill=\"currentColor\" stroke=\"none\" stroke-width=\"1\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <circle r=\"2\" cy=\"8\" cx=\"2\"></circle>\n <circle r=\"2\" cy=\"8\" cx=\"8\"></circle>\n <circle r=\"2\" cy=\"8\" cx=\"14\"></circle>\n</svg>`;\n\nconst CHART_WRAPPER_CLASS = 'chart-wrapper';\n\nexport type VisualizationSpec = VlSpec | VgSpec;\n\nexport interface Result {\n /** The Vega view. */\n view: View;\n\n /** The input specification. */\n spec: VisualizationSpec;\n\n /** The compiled and patched Vega specification. */\n vgSpec: VgSpec;\n\n /** The Vega-Embed options. */\n embedOptions: EmbedOptions;\n\n /** Removes references to unwanted behaviors and memory leaks. Calls Vega's `view.finalize`. */\n finalize: () => void;\n}\n\nfunction isTooltipHandler(h?: boolean | TooltipOptions | TooltipHandler): h is TooltipHandler {\n return typeof h === 'function';\n}\n\nfunction viewSource(source: string, sourceHeader: string, sourceFooter: string, mode: Mode) {\n const header = `<html><head>${sourceHeader}</head><body><pre><code class=\"json\">`;\n const footer = `</code></pre>${sourceFooter}</body></html>`;\n\n const win = window.open('')!;\n win.document.write(header + source + footer);\n win.document.title = `${NAMES[mode]} JSON Source`;\n}\n\n/**\n * Try to guess the type of spec.\n *\n * @param spec Vega or Vega-Lite spec.\n */\nexport function guessMode(spec: VisualizationSpec, providedMode?: Mode): Mode {\n // Decide mode\n if (spec.$schema) {\n const parsed = schemaParser(spec.$schema);\n if (providedMode && providedMode !== parsed.library) {\n console.warn(\n `The given visualization spec is written in ${NAMES[parsed.library]}, but mode argument sets ${\n NAMES[providedMode] ?? providedMode\n }.`,\n );\n }\n\n const mode = parsed.library as Mode;\n\n if (!satisfies(VERSION[mode], `^${parsed.version.slice(1)}`)) {\n console.warn(\n `The input spec uses ${NAMES[mode]} ${parsed.version}, but the current version of ${NAMES[mode]} is v${VERSION[mode]}.`,\n );\n }\n\n return mode;\n }\n\n // try to guess from the provided spec\n if (\n 'mark' in spec ||\n 'encoding' in spec ||\n 'layer' in spec ||\n 'hconcat' in spec ||\n 'vconcat' in spec ||\n 'facet' in spec ||\n 'repeat' in spec\n ) {\n return 'vega-lite';\n }\n\n if ('marks' in spec || 'signals' in spec || 'scales' in spec || 'axes' in spec) {\n return 'vega';\n }\n\n return providedMode ?? 'vega';\n}\n\nfunction isLoader(o?: LoaderOptions | Loader): o is Loader {\n return !!(o && 'load' in o);\n}\n\nfunction createLoader(opts?: Loader | LoaderOptions) {\n return isLoader(opts) ? opts : vega.loader(opts);\n}\n\nfunction embedOptionsFromUsermeta(parsedSpec: VisualizationSpec) {\n const opts = (parsedSpec.usermeta as any)?.embedOptions ?? {};\n if (isString(opts.defaultStyle)) {\n // we don't allow styles set via usermeta since it would allow injection of logic (we set the style via innerHTML)\n opts.defaultStyle = false;\n }\n return opts;\n}\n\n/**\n * Embed a Vega visualization component in a web page. This function returns a promise.\n *\n * @param el DOM element in which to place component (DOM node or CSS selector).\n * @param spec String : A URL string from which to load the Vega specification.\n * Object : The Vega/Vega-Lite specification as a parsed JSON object.\n * @param opts A JavaScript object containing options for embedding.\n */\nexport default async function embed(\n el: HTMLElement | string,\n spec: VisualizationSpec | string,\n opts: EmbedOptions = {},\n): Promise<Result> {\n let parsedSpec: VisualizationSpec;\n let loader: Loader | undefined;\n\n if (isString(spec)) {\n loader = createLoader(opts.loader);\n parsedSpec = JSON.parse(await loader.load(spec));\n } else {\n parsedSpec = spec;\n }\n\n const loadedEmbedOptions = embedOptionsFromUsermeta(parsedSpec);\n const usermetaLoader = loadedEmbedOptions.loader;\n\n // either create the loader for the first time or create a new loader if the spec has new loader options\n if (!loader || usermetaLoader) {\n loader = createLoader(opts.loader ?? usermetaLoader);\n }\n\n const usermetaOpts = await loadOpts(loadedEmbedOptions, loader);\n const parsedOpts = await loadOpts(opts, loader);\n\n const mergedOpts = {\n ...mergeDeep(parsedOpts, usermetaOpts),\n config: mergeConfig(parsedOpts.config ?? {}, usermetaOpts.config ?? {}),\n };\n\n return await _embed(el, parsedSpec, mergedOpts, loader);\n}\n\nasync function loadOpts(opt: EmbedOptions, loader: Loader): Promise<EmbedOptions<never>> {\n const config: Config = isString(opt.config) ? JSON.parse(await loader.load(opt.config)) : (opt.config ?? {});\n const patch: PatchFunc | Operation[] = isString(opt.patch) ? JSON.parse(await loader.load(opt.patch)) : opt.patch;\n return {\n ...(opt as any),\n ...(patch ? {patch} : {}),\n ...(config ? {config} : {}),\n };\n}\n\nfunction getRoot(el: Element) {\n const possibleRoot = el.getRootNode ? el.getRootNode() : document;\n return possibleRoot instanceof ShadowRoot\n ? {root: possibleRoot, rootContainer: possibleRoot}\n : {root: document, rootContainer: document.head ?? document.body};\n}\n\nasync function _embed(\n el: HTMLElement | string,\n spec: VisualizationSpec,\n opts: EmbedOptions<never> = {},\n loader: Loader,\n): Promise<Result> {\n const config = opts.theme ? mergeConfig(themes[opts.theme], opts.config ?? {}) : opts.config;\n\n const actions = isBoolean(opts.actions) ? opts.actions : mergeDeep<Actions>({}, DEFAULT_ACTIONS, opts.actions ?? {});\n const i18n = {...I18N, ...opts.i18n};\n\n const renderer = opts.renderer ?? 'canvas';\n const logLevel = opts.logLevel ?? vega.Warn;\n const downloadFileName = opts.downloadFileName ?? 'visualization';\n\n const element = typeof el === 'string' ? document.querySelector(el) : el;\n if (!element) {\n throw new Error(`${el} does not exist`);\n }\n\n if (opts.defaultStyle !== false) {\n const ID = 'vega-embed-style';\n const {root, rootContainer} = getRoot(element);\n if (!root.getElementById(ID)) {\n const style = document.createElement('style');\n style.id = ID;\n style.innerHTML =\n opts.defaultStyle === undefined || opts.defaultStyle === true\n ? (embedStyle ?? '').toString()\n : opts.defaultStyle;\n rootContainer.appendChild(style);\n }\n }\n\n const mode = guessMode(spec, opts.mode);\n\n let vgSpec: VgSpec = PREPROCESSOR[mode](spec, config);\n\n if (mode === 'vega-lite') {\n if (vgSpec.$schema) {\n const parsed = schemaParser(vgSpec.$schema);\n\n if (!satisfies(VERSION.vega, `^${parsed.version.slice(1)}`)) {\n console.warn(`The compiled spec uses Vega ${parsed.version}, but current version is v${VERSION.vega}.`);\n }\n }\n }\n\n element.classList.add('vega-embed');\n if (actions) {\n element.classList.add('has-actions');\n }\n element.innerHTML = ''; // clear container\n\n let container = element;\n if (actions) {\n const chartWrapper = document.createElement('div');\n chartWrapper.classList.add(CHART_WRAPPER_CLASS);\n element.appendChild(chartWrapper);\n container = chartWrapper;\n }\n\n const patch = opts.patch;\n if (patch) {\n vgSpec = patch instanceof Function ? patch(vgSpec) : applyPatch(vgSpec, patch, true, false).newDocument;\n }\n\n // Set locale. Note that this is a global setting.\n if (opts.formatLocale) {\n vega.formatLocale(opts.formatLocale);\n }\n\n if (opts.timeFormatLocale) {\n vega.timeFormatLocale(opts.timeFormatLocale);\n }\n\n // Set custom expression functions\n if (opts.expressionFunctions) {\n for (const name in opts.expressionFunctions) {\n const expressionFunction = opts.expressionFunctions[name];\n if ('fn' in expressionFunction) {\n vega.expressionFunction(name, expressionFunction.fn, expressionFunction['visitor']);\n } else if (expressionFunction instanceof Function) {\n vega.expressionFunction(name, expressionFunction);\n }\n }\n }\n\n const {ast} = opts;\n\n // Do not apply the config to Vega when we have already applied it to Vega-Lite.\n // This call may throw an Error if parsing fails.\n const runtime = vega.parse(vgSpec, mode === 'vega-lite' ? {} : (config as VgConfig), {ast});\n\n const view = new (opts.viewClass || vega.View)(runtime, {\n loader,\n logLevel,\n renderer,\n ...(ast ? {expr: (vega as any).expressionInterpreter ?? opts.expr ?? expressionInterpreter} : {}),\n });\n\n view.addSignalListener('autosize', (_, autosize: Exclude<AutoSize, string>) => {\n const {type} = autosize;\n if (type == 'fit-x') {\n container.classList.add('fit-x');\n container.classList.remove('fit-y');\n } else if (type == 'fit-y') {\n container.classList.remove('fit-x');\n container.classList.add('fit-y');\n } else if (type == 'fit') {\n container.classList.add('fit-x', 'fit-y');\n } else {\n container.classList.remove('fit-x', 'fit-y');\n }\n });\n\n if (opts.tooltip !== false) {\n const {loader: loader_, tooltip} = opts;\n const baseURL = loader_ && !isLoader(loader_) ? loader_?.baseURL : undefined;\n const handler = isTooltipHandler(tooltip)\n ? tooltip\n : // user provided boolean true or tooltip options\n new Handler({baseURL, ...(tooltip === true ? {} : tooltip)}).call;\n\n view.tooltip(handler);\n }\n\n let {hover} = opts;\n\n if (hover === undefined) {\n hover = mode === 'vega';\n }\n\n if (hover) {\n const {hoverSet, updateSet} = (typeof hover === 'boolean' ? {} : hover) as Hover;\n\n view.hover(hoverSet, updateSet);\n }\n\n if (opts) {\n if (opts.width != null) {\n view.width(opts.width);\n }\n if (opts.height != null) {\n view.height(opts.height);\n }\n if (opts.padding != null) {\n view.padding(opts.padding);\n }\n }\n\n await view.initialize(container, opts.bind).runAsync();\n\n let documentClickHandler: ((this: Document, ev: MouseEvent) => void) | undefined;\n\n if (actions !== false) {\n let wrapper = element;\n\n if (opts.defaultStyle !== false || opts.forceActionsMenu) {\n const details = document.createElement('details');\n details.title = i18n.CLICK_TO_VIEW_ACTIONS;\n element.append(details);\n\n wrapper = details;\n const summary = document.createElement('summary');\n summary.innerHTML = SVG_CIRCLES;\n\n details.append(summary);\n\n documentClickHandler = (ev: MouseEvent) => {\n if (!details.contains(ev.target as any)) {\n details.removeAttribute('open');\n }\n };\n document.addEventListener('click', documentClickHandler);\n }\n\n const ctrl = document.createElement('div');\n wrapper.append(ctrl);\n ctrl.classList.add('vega-actions');\n\n // add 'Export' action\n if (actions === true || actions.export !== false) {\n for (const ext of ['svg', 'png'] as const) {\n if (actions === true || actions.export === true || (actions.export as {svg?: boolean; png?: boolean})[ext]) {\n const i18nExportAction = (i18n as {[key: string]: string})[`${ext.toUpperCase()}_ACTION`];\n const exportLink = document.createElement('a');\n const scaleFactor = isObject(opts.scaleFactor) ? opts.scaleFactor[ext] : opts.scaleFactor;\n\n exportLink.text = i18nExportAction;\n exportLink.href = '#';\n exportLink.target = '_blank';\n exportLink.download = `${downloadFileName}.${ext}`;\n // add link on mousedown so that it's correct when the click happens\n exportLink.addEventListener('mousedown', async function (this, e) {\n e.preventDefault();\n const url = await view.toImageURL(ext, scaleFactor);\n this.href = url;\n });\n\n ctrl.append(exportLink);\n }\n }\n }\n\n // add 'View Source' action\n if (actions === true || actions.source !== false) {\n const viewSourceLink = document.createElement('a');\n\n viewSourceLink.text = i18n.SOURCE_ACTION;\n viewSourceLink.href = '#';\n viewSourceLink.addEventListener('click', function (this, e) {\n viewSource(stringify(spec), opts.sourceHeader ?? '', opts.sourceFooter ?? '', mode);\n e.preventDefault();\n });\n\n ctrl.append(viewSourceLink);\n }\n\n // add 'View Compiled' action\n if (mode === 'vega-lite' && (actions === true || actions.compiled !== false)) {\n const compileLink = document.createElement('a');\n\n compileLink.text = i18n.COMPILED_ACTION;\n compileLink.href = '#';\n compileLink.addEventListener('click', function (this, e) {\n viewSource(stringify(vgSpec), opts.sourceHeader ?? '', opts.sourceFooter ?? '', 'vega');\n e.preventDefault();\n });\n\n ctrl.append(compileLink);\n }\n\n // add 'Open in Vega Editor' action\n if (actions === true || actions.editor !== false) {\n const editorUrl = opts.editorUrl ?? 'https://vega.github.io/editor/';\n const editorLink = document.createElement('a');\n\n editorLink.text = i18n.EDITOR_ACTION;\n editorLink.href = '#';\n editorLink.addEventListener('click', function (this, e) {\n post(window, editorUrl, {\n config: config as Config,\n mode: patch ? 'vega' : mode,\n renderer,\n spec: stringify(patch ? vgSpec : spec),\n });\n e.preventDefault();\n });\n\n ctrl.append(editorLink);\n }\n }\n\n function finalize() {\n if (documentClickHandler) {\n document.removeEventListener('click', documentClickHandler);\n }\n view.finalize();\n }\n\n return {view, spec, vgSpec, finalize, embedOptions: opts};\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport embed from \"vega-embed\"\n\n// Connects to data-controller=\"vega\"\nexport default class extends Controller {\n connect() {\n\t window.vegaEmbed = embed\n\t window.dispatchEvent(new Event(\"vega:load\"))\n }\n}\n", "// This file is auto-generated by ./bin/rails stimulus:manifest:update\n// Run that command whenever you add a new controller or create them with\n// ./bin/rails generate stimulus controllerName\n\nimport { application } from \"./application\"\n\nimport ArticleEditorController from \"./article_editor_controller\"\napplication.register(\"article-editor\", ArticleEditorController)\n\nimport FlashController from \"./flash_controller\"\napplication.register(\"flash\", FlashController)\n\nimport HomeHeroController from \"./home_hero_controller\"\napplication.register(\"home-hero\", HomeHeroController)\n\nimport MapController from \"./map_controller\"\napplication.register(\"map\", MapController)\n\nimport MarkdownEditorController from \"./markdown_editor_controller\"\napplication.register(\"markdown-editor\", MarkdownEditorController)\n\nimport RemoteModalController from \"./remote_modal_controller\"\napplication.register(\"remote-modal\", RemoteModalController)\n\nimport SliderController from \"./slider_controller\"\napplication.register(\"slider\", SliderController)\n\nimport TomSelectController from \"./tom_select_controller\"\napplication.register(\"tom-select\", TomSelectController)\n\nimport TooltipsController from \"./tooltips_controller\"\napplication.register(\"tooltips\", TooltipsController)\n\nimport VegaController from \"./vega_controller\"\napplication.register(\"vega\", VegaController)\n"], "mappings": "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", "names": ["exports", "module", "fn", "undefined", "x", "a", "b", "c", "length", "hex", "clamp", "end", "target", "second", "content", "hash", "FileChecksum", "create", "event", "start", "name", "element", "dispatchEvent", "type", "value", "BlobRecord", "key", "responseType", "BlobUpload", "id", "DirectUpload", "error", "object", "DirectUploadController", "dispatch", "DirectUploadsController", "form", "startNextController", "time", "jitter", "consumer", "data", "error", "event", "type", "object", "key", "value", "consumer", "params", "data", "consumer", "params", "subscription", "a", "data", "name", "element", "extend", "create", "bind", "fn", "slice", "time", "context", "x", "range", "max", "min", "pow", "params", "data", "str", "key", "value", "isArray", "indexOf", "array", "name", "id", "Util.setOptions", "Util.create", "Util.extend", "i", "init", "Util.isArray", "Events", "types", "type", "Util.splitWords", "removeAll", "Util.falseFn", "index", "listener", "event", "Util.stamp", "e", "Point", "y", "round", "v", "point", "Bounds", "a", "b", "points", "min2", "max2", "bounds", "Util.formatNum", "c", "zoom", "scale", "Util.wrapNum", "sin", "style", "chrome", "touch", "canvas", "svg", "shape", "DomEvent.preventDefault", "path", "DomEvent.getPropagationPath", "now", "TRANSITION_END", "get", "getStyle", "remove", "hasClass", "addClass", "removeClass", "Util.trim", "filter", "offset", "DomEvent.on", "DomEvent.off", "element", "getScale", "rect", "on", "Util.indexOf", "preventDefault", "stop", "DomUtil.getPosition", "Util.requestAnimFrame", "DomUtil.setPosition", "Util.cancelAnimFrame", "Map", "Util.bind", "DomUtil.TRANSITION", "DomUtil.TRANSITION_END", "target", "DomUtil.addClass", "t1", "log", "sinh", "cosh", "tanh", "w", "u", "start", "frame", "error", "DomUtil.remove", "DomUtil.create", "padding", "DomEvent.getMousePosition", "DomUtil.get", "position", "DomUtil.getStyle", "DomEvent.isExternalTarget", "DomUtil.preventOutline", "viewBounds", "left", "right", "DomUtil.removeClass", "DomUtil.TRANSFORM", "transform", "DomUtil.setTransform", "map", "control", "DomEvent.disableClickPropagation", "DomEvent.disableScrollPropagation", "link", "DomUtil.empty", "title", "DomEvent.stop", "Scale", "text", "pow10", "Handler", "preventOutline", "DomUtil.hasClass", "DomUtil.disableImageDrag", "DomUtil.disableTextSelection", "DomUtil.getSizedParentNode", "DomUtil.getScale", "DomUtil.enableImageDrag", "DomUtil.enableTextSelection", "edge", "LineUtil._getBitCode", "LineUtil._getEdgeIntersection", "area", "LineUtil.isFlat", "sqDist", "dist", "ts", "phi", "events", "method", "layers", "re", "match", "marker", "icon", "shadow", "latLng", "opacity", "DomUtil.setOpacity", "Path", "radius", "top", "bottom", "circle", "closest", "LineUtil._sqClosestPointOnSegment", "LineUtil.polylineCenter", "LineUtil.clipSegment", "LineUtil.simplify", "LineUtil.pointToSegmentDistance", "LineUtil._flat", "Polygon", "PolyUtil.polygonCenter", "PolyUtil.clipPolygon", "GeoJSON", "feature", "json", "DomUtil.toFront", "DomUtil.toBack", "image", "source", "content", "DomEvent.stopPropagation", "width", "height", "popup", "Tooltip", "tooltip", "Util.throttle", "compare", "x2", "y2", "translate", "latLngBounds", "Util.template", "Util.emptyImageUrl", "Renderer", "Canvas", "m", "order", "stroke", "fill", "SVG", "arc", "rectangle", "threshold", "limit", "keys", "DomEvent.getWheelDelta", "debounce", "exports", "module", "L", "attr", "match", "exports", "module", "chrome", "current", "match", "e", "count", "content", "style", "i", "range", "start", "end", "contains", "rootNode", "doc", "addClass", "a", "b", "element", "bind", "target", "prop", "self", "time", "indexOf", "array", "elt", "map", "value", "score", "ch", "isEmpty", "order", "types", "i$1", "type", "i$2", "replace", "m", "isRTL", "line", "on", "index", "set", "measure", "test", "name", "info", "a2", "sz", "text", "height", "h", "cmp", "x", "Context", "copy", "context", "o", "stream", "asArray", "output", "span", "change", "offset", "lineNo", "estimateHeight", "cache", "attr", "group", "wrap", "id", "width", "data", "rect", "key", "place", "top", "scaleY", "ref", "left", "get", "right", "partPos", "invert", "y", "widgetHeight", "part", "ltr", "dist", "cursor", "padding", "add", "bottom", "extent", "w", "viewport", "limit", "screen", "bar", "ops", "update", "node", "align", "ranges", "History", "events", "event", "extend", "source", "filter", "children", "min", "max", "off", "CodeMirror", "link", "files", "read", "keys", "dir", "wrappedLineExtent", "moveInStorageOrder", "bound", "now", "repeat", "e2", "unit", "move", "prevent", "defaults", "optionHandlers", "integer", "toggle", "touch", "textLines", "field", "interpret", "walk", "find", "textNode", "topNode", "reset", "form", "cm", "method", "exports", "module", "CodeMirror", "ranges", "line", "match", "CodeMirror", "ranges", "exports", "module", "CodeMirror", "wrap", "info", "exports", "module", "CodeMirror", "defaults", "type", "setStyle", "stream", "parser", "ch", "style", "Context", "context", "exports", "module", "CodeMirror", "info", "i", "name", "exports", "module", "CodeMirror", "name", "mode", "stream", "line", "match", "style", "ch", "count", "type", "end", "exports", "module", "CodeMirror", "stream", "line", "exports", "module", "CodeMirror", "isEmpty", "exports", "module", "CodeMirror", "exports", "module", "CodeMirror", "reset", "clear", "update", "cmp", "array", "line", "start", "end", "ranges", "exports", "module", "CodeMirror", "current", "target", "start", "line", "ch", "match", "end", "min", "max", "top", "reverse", "pos", "ranges", "exports", "module", "CodeMirror", "stream", "attr", "exports", "module", "self", "path", "setup", "data", "rule", "resolve", "e", "line", "entries", "entry", "word", "flag", "limit", "i", "_len", "a", "b", "exports", "module", "stream", "ch", "exports", "target", "source", "key", "getEscapeReplacement", "ch", "escape", "encode", "unescape", "replace", "name", "sanitize", "href", "e", "domain", "noopTest", "count", "match", "offset", "c", "invert", "b", "link", "lexer", "title", "text", "Tokenizer", "options", "top", "line", "list", "def", "start", "br", "del", "mangle", "smartypants", "Lexer", "lex", "inline", "get", "Renderer", "id", "type", "checkbox", "content", "image", "TextRenderer", "Slugger", "value", "slug", "Parser", "parse", "parser", "parseInline", "cell", "Hooks", "throwError", "highlight", "done", "src", "tokens", "html", "args", "_loop", "prop", "_loop2", "_loop3", "ret", "values", "_loop4", "exports", "module", "CodeMirror", "key", "a", "match", "parser", "name", "shortcuts", "content", "e", "markup", "title", "tooltip", "getState", "types", "data", "text", "line", "cm", "cur_start", "cur_end", "fenceCharsToInsert", "sel_multi", "start", "end", "newValue", "i", "map", "type", "u", "target", "source", "property", "extend", "m", "count", "timeFormat", "EasyMDE", "link", "self", "event", "files", "repeat", "height", "value", "onSuccess", "request", "error", "v", "move", "bar", "x", "el", "item", "exports", "module", "a", "match", "b", "value", "exp", "encoder", "output", "validate", "method", "wNumb", "exports", "module", "exports", "module", "createPopper", "element", "name", "style", "element", "value", "property", "element", "scaleY", "x", "y", "width", "height", "element", "width", "height", "getComputedStyle", "element", "element", "element", "element", "element", "getComputedStyle", "window", "min", "value", "max", "v", "paddingObject", "value", "keys", "key", "toPaddingObject", "padding", "name", "popperOffsets", "paddingObject", "min", "max", "offset", "effect", "x", "y", "popper", "offsets", "position", "getComputedStyle", "effect", "resize", "window", "hash", "element", "element", "width", "height", "x", "y", "element", "width", "height", "x", "y", "getComputedStyle", "element", "getComputedStyle", "element", "target", "rect", "element", "rect", "clippingParents", "getComputedStyle", "reference", "element", "offsets", "padding", "paddingObject", "element", "popperOffsets", "offset", "key", "padding", "placements", "placement", "a", "b", "name", "padding", "placements", "placement", "_loop", "_i", "checks", "rect", "name", "offset", "name", "data", "x", "y", "name", "name", "padding", "popperOffsets", "data", "offset", "min", "max", "element", "element", "rect", "scaleY", "offsets", "map", "sort", "fn", "resolve", "merged", "current", "key", "element", "defaultModifiers", "defaultOptions", "createPopper", "reference", "popper", "options", "m", "index", "fn", "name", "resolve", "state", "effect", "noopFn", "createPopper", "defaultModifiers", "createPopper", "elementMap", "Map", "set", "element", "key", "instance", "has", "instanceMap", "get", "size", "console", "error", "Array", "from", "keys", "remove", "delete", "MAX_UID", "MILLISECONDS_MULTIPLIER", "TRANSITION_END", "parseSelector", "selector", "window", "CSS", "escape", "replace", "match", "id", "toType", "object", "undefined", "Object", "prototype", "toString", "call", "toLowerCase", "getUID", "prefix", "Math", "floor", "random", "document", "getElementById", "getTransitionDurationFromElement", "transitionDuration", "transitionDelay", "getComputedStyle", "floatTransitionDuration", "Number", "parseFloat", "floatTransitionDelay", "split", "triggerTransitionEnd", "dispatchEvent", "Event", "isElement", "jquery", "nodeType", "getElement", "length", "querySelector", "isVisible", "getClientRects", "elementIsVisible", "getPropertyValue", "closedDetails", "closest", "summary", "parentNode", "isDisabled", "Node", "ELEMENT_NODE", "classList", "contains", "disabled", "hasAttribute", "getAttribute", "findShadowRoot", "documentElement", "attachShadow", "getRootNode", "root", "ShadowRoot", "noop", "reflow", "offsetHeight", "getjQuery", "jQuery", "body", "DOMContentLoadedCallbacks", "onDOMContentLoaded", "callback", "readyState", "addEventListener", "push", "isRTL", "dir", "defineJQueryPlugin", "plugin", "$", "name", "NAME", "JQUERY_NO_CONFLICT", "fn", "jQueryInterface", "Constructor", "noConflict", "execute", "possibleCallback", "args", "defaultValue", "executeAfterTransition", "transitionElement", "waitForTransition", "durationPadding", "emulatedDuration", "called", "handler", "target", "removeEventListener", "setTimeout", "getNextActiveElement", "list", "activeElement", "shouldGetNext", "isCycleAllowed", "listLength", "index", "indexOf", "max", "min", "namespaceRegex", "stripNameRegex", "stripUidRegex", "eventRegistry", "uidEvent", "customEvents", "mouseenter", "mouseleave", "nativeEvents", "Set", "makeEventUid", "uid", "getElementEvents", "bootstrapHandler", "event", "hydrateObj", "delegateTarget", "oneOff", "EventHandler", "off", "type", "apply", "bootstrapDelegationHandler", "domElements", "querySelectorAll", "domElement", "findHandler", "events", "callable", "delegationSelector", "values", "find", "normalizeParameters", "originalTypeEvent", "delegationFunction", "isDelegated", "typeEvent", "getTypeEvent", "addHandler", "wrapFunction", "relatedTarget", "handlers", "previousFunction", "removeHandler", "Boolean", "removeNamespacedHandlers", "namespace", "storeElementEvent", "handlerKey", "entries", "includes", "on", "one", "inNamespace", "isNamespace", "startsWith", "elementEvent", "slice", "keyHandlers", "trigger", "jQueryEvent", "bubbles", "nativeDispatch", "defaultPrevented", "isPropagationStopped", "isImmediatePropagationStopped", "isDefaultPrevented", "evt", "cancelable", "preventDefault", "obj", "meta", "value", "_unused", "defineProperty", "configurable", "normalizeData", "JSON", "parse", "decodeURIComponent", "normalizeDataKey", "chr", "Manipulator", "setDataAttribute", "setAttribute", "removeDataAttribute", "removeAttribute", "getDataAttributes", "attributes", "bsKeys", "dataset", "filter", "pureKey", "charAt", "getDataAttribute", "Config", "Default", "DefaultType", "Error", "_getConfig", "config", "_mergeConfigObj", "_configAfterMerge", "_typeCheckConfig", "jsonConfig", "constructor", "configTypes", "property", "expectedTypes", "valueType", "RegExp", "test", "TypeError", "toUpperCase", "VERSION", "BaseComponent", "_element", "_config", "Data", "DATA_KEY", "dispose", "EVENT_KEY", "propertyName", "getOwnPropertyNames", "_queueCallback", "isAnimated", "getInstance", "getOrCreateInstance", "eventName", "getSelector", "hrefAttribute", "trim", "map", "sel", "join", "SelectorEngine", "concat", "Element", "findOne", "children", "child", "matches", "parents", "ancestor", "prev", "previous", "previousElementSibling", "next", "nextElementSibling", "focusableChildren", "focusables", "el", "getSelectorFromElement", "getElementFromSelector", "getMultipleElementsFromSelector", "enableDismissTrigger", "component", "method", "clickEvent", "tagName", "EVENT_CLOSE", "EVENT_CLOSED", "CLASS_NAME_FADE", "CLASS_NAME_SHOW", "Alert", "close", "closeEvent", "_destroyElement", "each", "data", "DATA_API_KEY", "CLASS_NAME_ACTIVE", "SELECTOR_DATA_TOGGLE", "EVENT_CLICK_DATA_API", "Button", "toggle", "button", "EVENT_TOUCHSTART", "EVENT_TOUCHMOVE", "EVENT_TOUCHEND", "EVENT_POINTERDOWN", "EVENT_POINTERUP", "POINTER_TYPE_TOUCH", "POINTER_TYPE_PEN", "CLASS_NAME_POINTER_EVENT", "SWIPE_THRESHOLD", "endCallback", "leftCallback", "rightCallback", "Swipe", "isSupported", "_deltaX", "_supportPointerEvents", "PointerEvent", "_initEvents", "_start", "touches", "clientX", "_eventIsPointerPenTouch", "_end", "_handleSwipe", "_move", "absDeltaX", "abs", "direction", "add", "pointerType", "navigator", "maxTouchPoints", "ARROW_LEFT_KEY", "ARROW_RIGHT_KEY", "TOUCHEVENT_COMPAT_WAIT", "ORDER_NEXT", "ORDER_PREV", "DIRECTION_LEFT", "DIRECTION_RIGHT", "EVENT_SLIDE", "EVENT_SLID", "EVENT_KEYDOWN", "EVENT_MOUSEENTER", "EVENT_MOUSELEAVE", "EVENT_DRAG_START", "EVENT_LOAD_DATA_API", "CLASS_NAME_CAROUSEL", "CLASS_NAME_SLIDE", "CLASS_NAME_END", "CLASS_NAME_START", "CLASS_NAME_NEXT", "CLASS_NAME_PREV", "SELECTOR_ACTIVE", "SELECTOR_ITEM", "SELECTOR_ACTIVE_ITEM", "SELECTOR_ITEM_IMG", "SELECTOR_INDICATORS", "SELECTOR_DATA_SLIDE", "SELECTOR_DATA_RIDE", "KEY_TO_DIRECTION", "interval", "keyboard", "pause", "ride", "touch", "wrap", "Carousel", "_interval", "_activeElement", "_isSliding", "touchTimeout", "_swipeHelper", "_indicatorsElement", "_addEventListeners", "cycle", "_slide", "nextWhenVisible", "hidden", "_clearInterval", "_updateInterval", "setInterval", "_maybeEnableCycle", "to", "items", "_getItems", "activeIndex", "_getItemIndex", "_getActive", "order", "defaultInterval", "_keydown", "_addTouchEventListeners", "img", "endCallBack", "clearTimeout", "swipeConfig", "_directionToOrder", "_setActiveIndicatorElement", "activeIndicator", "newActiveIndicator", "elementInterval", "parseInt", "isNext", "nextElement", "nextElementIndex", "triggerEvent", "_orderToDirection", "slideEvent", "isCycling", "directionalClassName", "orderClassName", "completeCallBack", "_isAnimated", "clearInterval", "carousel", "slideIndex", "carousels", "EVENT_SHOW", "EVENT_SHOWN", "EVENT_HIDE", "EVENT_HIDDEN", "CLASS_NAME_COLLAPSE", "CLASS_NAME_COLLAPSING", "CLASS_NAME_COLLAPSED", "CLASS_NAME_DEEPER_CHILDREN", "CLASS_NAME_HORIZONTAL", "WIDTH", "HEIGHT", "SELECTOR_ACTIVES", "parent", "Collapse", "_isTransitioning", "_triggerArray", "toggleList", "elem", "filterElement", "foundElement", "_initializeChildren", "_addAriaAndCollapsedClass", "_isShown", "hide", "show", "activeChildren", "_getFirstLevelChildren", "startEvent", "activeInstance", "dimension", "_getDimension", "style", "complete", "capitalizedDimension", "scrollSize", "getBoundingClientRect", "selected", "triggerArray", "isOpen", "ESCAPE_KEY", "TAB_KEY", "ARROW_UP_KEY", "ARROW_DOWN_KEY", "RIGHT_MOUSE_BUTTON", "EVENT_KEYDOWN_DATA_API", "EVENT_KEYUP_DATA_API", "CLASS_NAME_DROPUP", "CLASS_NAME_DROPEND", "CLASS_NAME_DROPSTART", "CLASS_NAME_DROPUP_CENTER", "CLASS_NAME_DROPDOWN_CENTER", "SELECTOR_DATA_TOGGLE_SHOWN", "SELECTOR_MENU", "SELECTOR_NAVBAR", "SELECTOR_NAVBAR_NAV", "SELECTOR_VISIBLE_ITEMS", "PLACEMENT_TOP", "PLACEMENT_TOPEND", "PLACEMENT_BOTTOM", "PLACEMENT_BOTTOMEND", "PLACEMENT_RIGHT", "PLACEMENT_LEFT", "PLACEMENT_TOPCENTER", "PLACEMENT_BOTTOMCENTER", "autoClose", "boundary", "display", "offset", "popperConfig", "reference", "Dropdown", "_popper", "_parent", "_menu", "_inNavbar", "_detectNavbar", "showEvent", "_createPopper", "focus", "_completeHide", "destroy", "update", "hideEvent", "Popper", "referenceElement", "_getPopperConfig", "createPopper", "_getPlacement", "parentDropdown", "isEnd", "_getOffset", "popperData", "defaultBsPopperConfig", "placement", "modifiers", "options", "enabled", "_selectMenuItem", "clearMenus", "openToggles", "context", "composedPath", "isMenuTarget", "dataApiKeydownHandler", "isInput", "isEscapeEvent", "isUpOrDownEvent", "getToggleButton", "stopPropagation", "EVENT_MOUSEDOWN", "className", "clickCallback", "rootElement", "Backdrop", "_isAppended", "_append", "_getElement", "_emulateAnimation", "backdrop", "createElement", "append", "EVENT_FOCUSIN", "EVENT_KEYDOWN_TAB", "TAB_NAV_FORWARD", "TAB_NAV_BACKWARD", "autofocus", "trapElement", "FocusTrap", "_isActive", "_lastTabNavDirection", "activate", "_handleFocusin", "_handleKeydown", "deactivate", "elements", "shiftKey", "SELECTOR_FIXED_CONTENT", "SELECTOR_STICKY_CONTENT", "PROPERTY_PADDING", "PROPERTY_MARGIN", "ScrollBarHelper", "getWidth", "documentWidth", "clientWidth", "innerWidth", "width", "_disableOverFlow", "_setElementAttributes", "calculatedValue", "reset", "_resetElementAttributes", "isOverflowing", "_saveInitialAttribute", "overflow", "styleProperty", "scrollbarWidth", "manipulationCallBack", "setProperty", "_applyManipulationCallback", "actualValue", "removeProperty", "callBack", "EVENT_HIDE_PREVENTED", "EVENT_RESIZE", "EVENT_CLICK_DISMISS", "EVENT_MOUSEDOWN_DISMISS", "EVENT_KEYDOWN_DISMISS", "CLASS_NAME_OPEN", "CLASS_NAME_STATIC", "OPEN_SELECTOR", "SELECTOR_DIALOG", "SELECTOR_MODAL_BODY", "Modal", "_dialog", "_backdrop", "_initializeBackDrop", "_focustrap", "_initializeFocusTrap", "_scrollBar", "_adjustDialog", "_showElement", "_hideModal", "handleUpdate", "scrollTop", "modalBody", "transitionComplete", "_triggerBackdropTransition", "event2", "_resetAdjustments", "isModalOverflowing", "scrollHeight", "clientHeight", "initialOverflowY", "overflowY", "isBodyOverflowing", "paddingLeft", "paddingRight", "alreadyOpen", "CLASS_NAME_SHOWING", "CLASS_NAME_HIDING", "CLASS_NAME_BACKDROP", "scroll", "Offcanvas", "blur", "completeCallback", "position", "ARIA_ATTRIBUTE_PATTERN", "DefaultAllowlist", "a", "area", "b", "br", "col", "code", "dd", "div", "dl", "dt", "em", "hr", "h1", "h2", "h3", "h4", "h5", "h6", "i", "li", "ol", "p", "pre", "s", "small", "span", "sub", "sup", "strong", "u", "ul", "uriAttributes", "SAFE_URL_PATTERN", "allowedAttribute", "attribute", "allowedAttributeList", "attributeName", "nodeName", "nodeValue", "attributeRegex", "some", "regex", "sanitizeHtml", "unsafeHtml", "allowList", "sanitizeFunction", "domParser", "DOMParser", "createdDocument", "parseFromString", "elementName", "attributeList", "allowedAttributes", "innerHTML", "content", "extraClass", "html", "sanitize", "sanitizeFn", "template", "DefaultContentType", "entry", "TemplateFactory", "getContent", "_resolvePossibleFunction", "hasContent", "changeContent", "_checkContent", "toHtml", "templateWrapper", "_maybeSanitize", "text", "_setContent", "arg", "templateElement", "_putElementInTemplate", "textContent", "DISALLOWED_ATTRIBUTES", "CLASS_NAME_MODAL", "SELECTOR_TOOLTIP_INNER", "SELECTOR_MODAL", "EVENT_MODAL_HIDE", "TRIGGER_HOVER", "TRIGGER_FOCUS", "TRIGGER_CLICK", "TRIGGER_MANUAL", "EVENT_INSERTED", "EVENT_CLICK", "EVENT_FOCUSOUT", "AttachmentMap", "AUTO", "TOP", "RIGHT", "BOTTOM", "LEFT", "animation", "container", "customClass", "delay", "fallbackPlacements", "title", "Tooltip", "_isEnabled", "_timeout", "_isHovered", "_activeTrigger", "_templateFactory", "_newContent", "tip", "_setListeners", "_fixTitle", "enable", "disable", "toggleEnabled", "click", "_leave", "_enter", "_hideModalHandler", "_disposePopper", "_isWithContent", "shadowRoot", "isInTheDom", "ownerDocument", "_getTipElement", "_isWithActiveTrigger", "_getTitle", "_createTipElement", "_getContentForTemplate", "_getTemplateFactory", "tipId", "setContent", "_initializeOnDelegatedTarget", "_getDelegateConfig", "attachment", "phase", "state", "triggers", "eventIn", "eventOut", "_setTimeout", "timeout", "dataAttributes", "dataAttribute", "SELECTOR_TITLE", "SELECTOR_CONTENT", "Popover", "_getContent", "EVENT_ACTIVATE", "CLASS_NAME_DROPDOWN_ITEM", "SELECTOR_DATA_SPY", "SELECTOR_TARGET_LINKS", "SELECTOR_NAV_LIST_GROUP", "SELECTOR_NAV_LINKS", "SELECTOR_NAV_ITEMS", "SELECTOR_LIST_ITEMS", "SELECTOR_LINK_ITEMS", "SELECTOR_DROPDOWN", "SELECTOR_DROPDOWN_TOGGLE", "rootMargin", "smoothScroll", "threshold", "ScrollSpy", "_targetLinks", "_observableSections", "_rootElement", "_activeTarget", "_observer", "_previousScrollData", "visibleEntryTop", "parentScrollTop", "refresh", "_initializeTargetsAndObservables", "_maybeEnableSmoothScroll", "disconnect", "_getNewObserver", "section", "observe", "observableSection", "hash", "height", "offsetTop", "scrollTo", "top", "behavior", "IntersectionObserver", "_observerCallback", "targetElement", "_process", "userScrollsDown", "isIntersecting", "_clearActiveClass", "entryIsLowerThanPrevious", "targetLinks", "anchor", "decodeURI", "_activateParents", "listGroup", "item", "activeNodes", "node", "spy", "HOME_KEY", "END_KEY", "CLASS_DROPDOWN", "SELECTOR_DROPDOWN_MENU", "NOT_SELECTOR_DROPDOWN_TOGGLE", "SELECTOR_TAB_PANEL", "SELECTOR_OUTER", "SELECTOR_INNER", "SELECTOR_INNER_ELEM", "SELECTOR_DATA_TOGGLE_ACTIVE", "Tab", "_setInitialAttributes", "_getChildren", "innerElem", "_elemIsActive", "active", "_getActiveElem", "_deactivate", "_activate", "relatedElem", "_toggleDropDown", "nextActiveElement", "preventScroll", "_setAttributeIfNotExists", "_setInitialAttributesOnChild", "_getInnerElement", "isActive", "outerElem", "_getOuterElement", "_setInitialAttributesOnTargetPanel", "open", "EVENT_MOUSEOVER", "EVENT_MOUSEOUT", "CLASS_NAME_HIDE", "autohide", "Toast", "_hasMouseInteraction", "_hasKeyboardInteraction", "_clearTimeout", "_maybeScheduleHide", "isShown", "_onInteraction", "isInteracting", "HTMLElement", "prototype", "form", "name", "target", "element", "event", "FrameLoadingStyle", "value", "style", "location", "left", "right", "resolve", "values", "match", "line", "content", "FetchMethod", "method", "error", "entries", "FormSubmissionState", "FormEnctype", "request", "cookie", "id", "x", "y", "link", "type", "index", "source", "TimingMetric", "VisitState", "SystemStatusCode", "session", "visit", "frame", "PageStage", "position", "key", "e", "start", "document", "c", "createConsumer", "key", "m", "x", "data", "event", "event", "form", "method", "event", "left", "right", "application", "map", "error", "key", "value", "element", "source", "object", "property", "index", "filters", "params", "name", "match", "e", "context", "method", "filter", "target", "fetch", "values", "set", "element", "match", "key", "value", "oldValue", "content", "index", "left", "right", "length", "error", "context", "name", "values", "constructor", "definition", "dependencies", "module", "identifiers", "scope", "extend", "prototype", "object", "a", "b", "application", "logger", "target", "c", "array", "v", "filter", "resolve", "read", "write", "constant", "hasType", "type", "event", "LassoPolygon", "_super", "latlngs", "options", "_this", "this", "polyline", "L", "polygon", "__assign", "weight", "r", "__extends", "prototype", "onAdd", "map", "addTo", "onRemove", "remove", "addLatLng", "latlng", "getLatLngs", "toGeoJSON", "Layer", "calculateBoundsFromNestedArrays", "array", "x1", "x2", "y1", "y2", "i", "length", "inner", "j", "lonlat", "lon", "lat", "calculateBoundsFromArray", "calculateBoundsForFeatureCollection", "featureCollection", "extents", "features", "extent", "calculateBounds", "geometry", "push", "calculateBoundsForGeometryCollection", "geometryCollection", "geometries", "geojson", "type", "coordinates", "innerinner", "k", "Error", "isNumber", "n", "isNaN", "parseFloat", "isFinite", "edgeIntersectsEdge", "a1", "a2", "b1", "b2", "uaT", "ubT", "uB", "ua", "ub", "arraysIntersectArrays", "a", "b", "l", "coordinatesContainPoint", "point", "contains", "pointsEqual", "compSort", "p1", "p2", "closedPolygon", "outer", "slice", "coordinatesEqual", "na", "sort", "nb", "polygonContainsPoint", "within", "geoJSON", "comparisonGeoJSON", "intersects", "some", "componentPolygon", "args", "Array", "apply", "arguments", "console", "warn", "VINCENTY", "toCircle", "center", "radius", "interpolate", "steps", "rad", "createGeodesicCircle", "properties", "angle", "destinationVincenty", "coords", "brng", "dist", "cos2SigmaM", "sinSigma", "cosSigma", "f", "lon1", "lat1", "s", "pi", "Math", "PI", "alpha1", "sinAlpha1", "sin", "cosAlpha1", "cos", "tanU1", "tan", "cosU1", "sqrt", "sinU1", "sigma1", "atan2", "sinAlpha", "cosSqAlpha", "uSq", "A", "B", "sigma", "sigmaP", "abs", "tmp", "lat2", "C", "circleToGeoJSONGeometry", "latLng", "GeoJSON", "latLngToCoords", "layerToGeoJSONGeometry", "layer", "Circle", "getLatLng", "getRadius", "CircleMarker", "undefined", "zoom", "crs", "circleMarker", "latLngToPoint", "delta", "SQRT2", "topLeftPoint", "x", "y", "topLeftLatLng", "pointToLatLng", "distance", "Marker", "Polyline", "getLayersInPolygon", "layers", "polygonGeometry", "polygonBounds", "getBounds", "selectedLayers", "filter", "layerGeometry", "layerBounds", "bounds", "latLngBounds", "isValid", "intersect", "geometryResult", "styleInject", "css", "ref", "insertAt", "document", "head", "getElementsByTagName", "style", "createElement", "firstChild", "insertBefore", "appendChild", "styleSheet", "cssText", "createTextNode", "ENABLED_EVENT", "DISABLED_EVENT", "FINISHED_EVENT", "ACTIVE_CLASS", "LassoHandler", "call", "color", "onMapMouseDownBound", "onMapMouseDown", "bind", "onDocumentMouseMoveBound", "onDocumentMouseMove", "onDocumentMouseUpBound", "onDocumentMouseUp", "Util", "setOptions", "toggle", "enabled", "disable", "enable", "addHooks", "getPane", "getContainer", "addEventListener", "classList", "add", "dragging", "fire", "removeHooks", "removeLayer", "removeEventListener", "body", "event", "stopPropagation", "event2", "eventToMouseEvent", "MouseEvent", "_simulated", "buttons", "target", "closest", "mouseEventToLatLng", "preventDefault", "finish", "TouchEvent", "touches", "screenX", "screenY", "clientX", "clientY", "eachLayer", "MarkerCluster", "getAllChildMarkers", "Path", "selectedFeatures", "getZoom", "originalEvent", "latLngs", "Handler", "LassoControl", "position", "title", "lasso", "container", "DomUtil", "create", "button", "href", "setAttribute", "DomEvent", "addListener", "disableClickPropagation", "Control", "window", "Lasso", "_i", "__spreadArray", "control", "X", "left", "right", "m", "maxY", "stack", "x", "y", "right", "left", "m", "within", "stack", "right", "left", "m", "x", "y", "points", "getX", "getY", "maxY", "x", "y", "within", "defaultOptions", "x", "extend", "points", "log", "now", "zoom", "id", "c", "index", "children", "limit", "offset", "y", "extent", "radius", "top", "bottom", "px", "py", "reduce", "b", "point", "count", "sin", "y2", "bounds", "L", "map", "index", "update", "e", "extend", "data", "feature", "count", "EasyMDE", "event", "PipsMode", "PipsType", "entry", "value", "e", "array", "a", "offset", "orientation", "rect", "element", "x", "y", "pa", "range", "b", "Spectrum", "index", "connect", "hover", "key", "defaults", "name", "target", "event", "add", "tooltip", "values", "aria", "min", "max", "now", "text", "pips", "interval", "increment", "group", "current", "type", "source", "filter", "format", "events", "data", "method", "methods", "touch", "location", "c", "bind", "reference", "getValue", "v", "position", "h", "decrement", "range", "values", "wNumb", "events", "event", "self", "name", "fn", "key", "self", "plugin", "array", "value", "start", "initialize", "form", "code_points", "value", "unicode_map", "set", "a", "b", "sequence", "filter", "position", "match", "name", "value", "score", "key", "object", "a", "b", "field", "data", "sum", "value", "score", "self", "sort", "name", "a", "b", "id", "value", "fn", "timeout", "self", "types", "type", "preventDefault", "stop", "target", "count", "id", "iterate", "object", "key", "event", "iterate", "target", "attr", "element", "match", "el", "data", "json", "group", "value", "id", "iterate", "values", "filter", "input", "value", "iterate", "attr", "self", "e", "preventDefault", "target", "data", "escape", "key", "fn", "hash", "events", "end", "swap", "content", "y", "sort", "create", "optgroup", "order", "a", "b", "id", "type", "values", "x", "output", "label", "context", "rect", "top", "left", "method", "addEvent", "target", "type", "callback", "options", "addEventListener", "input", "sync", "hash_key", "value", "get_hash", "preventDefault", "evt", "stop", "stopPropagation", "getDom", "query", "jquery", "HTMLElement", "isHtmlString", "tpl", "document", "createElement", "innerHTML", "trim", "content", "firstChild", "querySelector", "arg", "indexOf", "plugin", "userOptions", "self", "orig_onOptionSelect", "onOptionSelect", "settings", "hideSelected", "cbOptions", "Object", "assign", "className", "checkedClassNames", "undefined", "uncheckedClassNames", "UpdateChecked", "checkbox", "toCheck", "checked", "classList", "remove", "add", "UpdateCheckbox", "option", "setTimeout", "HTMLInputElement", "contains", "hook", "orig_render_option", "render", "data", "escape_html", "rendered", "call", "addEventListener", "type", "hashed", "valueField", "items", "prepend", "on", "getOption", "removeItem", "dataset", "refreshOptions", "getDom", "query", "jquery", "HTMLElement", "isHtmlString", "tpl", "document", "createElement", "innerHTML", "trim", "content", "firstChild", "querySelector", "arg", "indexOf", "plugin", "userOptions", "self", "options", "Object", "assign", "className", "title", "html", "data", "on", "button", "addEventListener", "evt", "isLocked", "clear", "settings", "mode", "allowEmptyOption", "addItem", "preventDefault", "stopPropagation", "control", "appendChild", "preventDefault", "evt", "stop", "stopPropagation", "addEvent", "target", "type", "callback", "options", "addEventListener", "iterate", "object", "Array", "isArray", "forEach", "key", "hasOwnProperty", "getDom", "query", "jquery", "HTMLElement", "isHtmlString", "tpl", "document", "createElement", "innerHTML", "trim", "content", "firstChild", "querySelector", "arg", "indexOf", "setAttr", "el", "attrs", "val", "attr", "removeAttribute", "setAttribute", "insertAfter", "referenceNode", "newNode", "_referenceNode$parent", "parentNode", "insertBefore", "nextSibling", "_referenceNode$parent2", "isBefore", "_newNode", "previousElementSibling", "plugin", "self", "settings", "mode", "orig_lock", "lock", "orig_unlock", "unlock", "sortable", "drag_item", "hook", "orig_render_item", "render", "item", "data", "escape", "call", "mousedown", "dragStart", "setTimeout", "classList", "add", "dragOver", "moveitem", "dragLeave", "remove", "targetitem", "dragitem", "undefined", "dragend", "_drag_item", "querySelectorAll", "values", "control", "dataset", "value", "push", "setValue", "preventDefault", "evt", "stop", "stopPropagation", "getDom", "query", "jquery", "HTMLElement", "isHtmlString", "tpl", "document", "createElement", "innerHTML", "trim", "content", "firstChild", "querySelector", "arg", "indexOf", "plugin", "userOptions", "self", "options", "Object", "assign", "title", "headerClass", "titleRowClass", "labelClass", "closeClass", "html", "data", "on", "header", "close_link", "addEventListener", "close", "dropdown", "insertBefore", "iterate", "object", "callback", "Array", "isArray", "forEach", "key", "hasOwnProperty", "removeClasses", "elmts", "classes", "norm_classes", "classesArray", "castAsArray", "map", "el", "cls", "classList", "remove", "args", "_classes", "trim", "split", "concat", "filter", "Boolean", "arg", "nodeIndex", "amongst", "nodeName", "i", "previousElementSibling", "matches", "plugin", "self", "hook", "new_pos", "settings", "mode", "control", "contains", "control_input", "items", "length", "Math", "max", "min", "caretPos", "isPending", "controlChildren", "child", "j", "insertAdjacentElement", "appendChild", "direction", "isFocused", "last_active", "getLastActive", "idx", "setCaret", "setActiveItem", "KEY_ESC", "KEY_TAB", "preventDefault", "evt", "stop", "stopPropagation", "addEvent", "target", "type", "callback", "options", "addEventListener", "iterate", "object", "Array", "isArray", "forEach", "key", "hasOwnProperty", "getDom", "query", "jquery", "HTMLElement", "isHtmlString", "tpl", "document", "createElement", "innerHTML", "trim", "content", "firstChild", "querySelector", "arg", "indexOf", "addClasses", "elmts", "classes", "norm_classes", "classesArray", "castAsArray", "map", "el", "cls", "classList", "add", "args", "_classes", "split", "concat", "filter", "Boolean", "plugin", "self", "settings", "shouldOpen", "hook", "focus_node", "control", "control_input", "div", "append", "dropdown", "insertBefore", "placeholder", "on", "keyCode", "constants", "isOpen", "close", "clearActiveItems", "tabIndex", "onKeyDown", "call", "isDisabled", "focus", "orig_onBlur", "onBlur", "relatedTarget", "preventScroll", "addEvent", "target", "type", "callback", "options", "addEventListener", "plugin", "self", "on", "test_input", "document", "createElement", "control", "control_input", "style", "cssText", "wrapper", "appendChild", "transfer_styles", "style_name", "resize", "textContent", "value", "width", "clientWidth", "plugin", "self", "orig_deleteSelection", "deleteSelection", "hook", "evt", "activeItems", "length", "call", "plugin", "hook", "KEY_LEFT", "KEY_RIGHT", "parentMatch", "target", "selector", "wrapper", "matches", "parentNode", "nodeIndex", "el", "amongst", "nodeName", "i", "previousElementSibling", "plugin", "self", "orig_keydown", "onKeyDown", "hook", "evt", "index", "option", "options", "optgroup", "isOpen", "keyCode", "constants", "call", "ignoreHover", "activeOption", "previousSibling", "nextSibling", "querySelectorAll", "Math", "min", "length", "setActiveOption", "escape_html", "str", "replace", "preventDefault", "evt", "stop", "stopPropagation", "addEvent", "target", "type", "callback", "options", "addEventListener", "getDom", "query", "jquery", "HTMLElement", "isHtmlString", "tpl", "document", "createElement", "innerHTML", "trim", "content", "firstChild", "querySelector", "arg", "indexOf", "plugin", "userOptions", "Object", "assign", "label", "title", "className", "append", "self", "html", "hook", "orig_render_item", "settings", "render", "item", "data", "escape", "call", "close_button", "appendChild", "isLocked", "shouldDelete", "removeItem", "refreshOptions", "inputState", "plugin", "userOptions", "self", "options", "Object", "assign", "text", "option", "settings", "labelField", "on", "value", "isFocused", "control_input", "trim", "setTextboxValue", "call", "iterate", "object", "callback", "Array", "isArray", "forEach", "key", "hasOwnProperty", "addClasses", "elmts", "classes", "norm_classes", "classesArray", "castAsArray", "map", "el", "cls", "classList", "add", "args", "_classes", "trim", "split", "concat", "filter", "Boolean", "arg", "plugin", "self", "orig_canLoad", "canLoad", "orig_clearActiveOption", "clearActiveOption", "orig_loadCallback", "loadCallback", "pagination", "dropdown_content", "loading_more", "load_more_opt", "default_values", "settings", "shouldLoadMore", "scroll_percent", "clientHeight", "scrollHeight", "scrollTop", "activeOption", "selectable", "index", "from", "indexOf", "length", "firstUrl", "sortField", "field", "canLoadMore", "query", "maxOptions", "children", "clearFilter", "option", "value", "items", "setNextUrl", "next_url", "getUrl", "clearPagination", "call", "hook", "options", "optgroups", "clearOptions", "first_option", "undefined", "dataset", "valueField", "lastValue", "render", "setAttribute", "querySelector", "optionClass", "append", "on", "Object", "keys", "assign", "no_more_results", "addEventListener", "load", "plugin", "self", "json", "replacer", "length", "match", "index", "start", "end", "keys", "key", "value", "Renderer", "View", "bin", "debounce", "defaultLocale", "error", "extend", "format", "interpolate", "intersect", "locale", "parse", "symbols", "point", "projection", "read", "constant", "exp", "log", "pow", "context", "visit", "timeInterval", "fn", "name", "path", "field", "error", "b", "c", "method", "_", "key", "source", "output", "value", "recurse", "a", "map", "add", "array", "sign", "x", "domain", "constant", "scale", "da", "date", "range", "min", "max", "span", "get", "u", "v", "order", "debounce", "e", "extend", "object", "property", "test", "threshold", "left", "right", "clear", "update", "compare", "length", "align", "parser", "filter", "name", "object", "pad", "value", "width", "length", "date", "seconds", "milliseconds", "parse", "text", "c", "formatValue", "format", "x", "transform", "x0", "y0", "output", "array", "o", "id", "arc", "points", "a", "point", "line", "arcs", "type", "arc", "e", "start", "end", "p0", "flush", "fragmentByEnd", "fragmentByStart", "object", "filter", "arcs", "ascending", "a", "b", "a", "b", "compare1", "compare2", "ascending", "x", "zero", "left", "a", "right", "x", "values", "value", "index", "ascending", "bisect_default", "values", "count", "mean", "sum", "value", "index", "values", "v", "x", "y", "entries", "key", "value", "values", "source", "keys", "key", "compare", "ascending", "a", "b", "x", "start", "stop", "count", "error", "reverse", "ticks", "max", "values", "value", "index", "min", "values", "value", "index", "array", "left", "right", "compare", "m", "swap", "values", "min", "max", "values", "count", "sum", "value", "index", "values", "array", "merge", "range", "start", "stop", "values", "sum", "value", "index", "values", "value", "set", "x", "x", "value", "width", "length", "value", "match", "x", "x", "x", "identity_default", "x", "locale", "group", "identity_default", "fill", "align", "sign", "symbol", "zero", "width", "type", "format", "value", "c", "length", "padding", "formatPrefix", "e", "definition", "value", "max", "count", "field", "interval", "date", "start", "stop", "range", "test", "end", "date", "start", "end", "date", "start", "end", "date", "start", "end", "date", "start", "end", "date", "start", "end", "date", "start", "end", "date", "start", "end", "date", "start", "end", "week", "ticks", "start", "stop", "count", "reverse", "interval", "target", "step", "u", "m", "error", "unit", "a", "b", "extend", "start", "end", "key", "t0", "y", "M", "L", "date", "get", "newDate", "v", "week", "w", "timeInterval", "offset", "stop", "durationSecond", "durationMinute", "durationHour", "durationDay", "durationWeek", "durationMonth", "durationYear", "max", "target", "i", "localDate", "date", "utcDate", "y", "m", "locale", "formats", "formatYear", "c", "pad", "format", "week", "parse", "value", "fill", "width", "sign", "length", "name", "locale", "defaultLocale", "definition", "method", "cache", "numberFormat", "x", "end", "c", "locale", "format", "formatPrefix", "start", "stop", "count", "value", "definition", "interval", "error", "second", "week", "quarter", "L", "M", "w", "m", "y", "date", "timeFormat", "utcFormat", "timeInterval", "number", "time", "extend", "defaultLocale", "fetch", "extend", "error", "data", "type", "isBoolean", "isDate", "isNumber", "values", "field", "m", "a", "value", "u", "v", "types", "parse", "format", "b", "method", "object", "property", "filter", "name", "read", "locale", "datum", "$", "id", "datum", "cmp", "a", "b", "v", "add", "rem", "reflow", "field", "value", "m", "set", "pulse", "t", "modify", "f", "name", "index", "init", "update", "params", "error", "target", "filter", "apply", "now", "debounce", "e", "source", "type", "parse", "data", "format", "locale", "read", "fn", "stream", "extend", "encode", "map", "hash", "sum", "c", "op", "count", "clear", "enqueue", "changeset", "x", "array", "start", "end", "defaultLocale", "method", "logger", "Proxy", "Sequence", "numbers", "values", "value", "index", "array", "ascending", "h", "v", "bin", "min", "max", "span", "m", "a", "b", "w", "x", "c", "dist", "mean", "y", "cd", "exp", "sum", "bandwidth", "normalize", "constant", "data", "sort", "d", "u", "X", "Y", "X2", "log", "ly", "pow", "lx", "X3", "x2", "order", "interval", "left", "right", "extent", "point", "stop", "p0", "init", "points", "x", "field", "noop", "m", "v", "key", "value", "extend", "param", "name", "a", "b", "map", "add", "set", "get", "ops", "cell", "count", "params", "pulse", "vals", "collect", "generate", "index", "fields", "n", "i", "error", "rem", "band", "bins", "start", "flag", "bin", "stop", "source", "$", "data", "compare", "sort", "tokenize", "text", "match", "process", "update", "init", "w", "c", "reset", "filter", "left", "parse", "def", "mixture", "dist", "method", "domain", "values", "min", "max", "expr", "datum", "extent", "target", "cache", "id", "output", "test", "group", "k", "bandwidth", "scale", "df", "keys", "e", "_", "limit", "derive", "Proxy", "range", "Sequence", "floor", "offset", "timeInterval", "run", "fn", "rank", "cmp", "frame", "bisect", "x", "constant", "max", "min", "epsilon", "x", "pi", "tau", "epsilon", "append", "x", "y", "x1", "y1", "x2", "y2", "x0", "y0", "cw", "da", "w", "h", "shape", "x0", "y0", "x1", "y1", "x2", "y2", "x3", "y3", "x32", "y32", "epsilon", "cw", "x00", "y00", "D", "max", "context", "path", "arc", "da", "min", "t0", "t1", "p0", "a", "x", "context", "x", "y", "x", "y", "defined", "context", "curve", "output", "path", "line", "data", "x0", "y0", "y1", "x1", "defined", "context", "curve", "output", "path", "area", "data", "context", "Symbol", "type", "context", "path", "symbol", "x", "y", "context", "context", "x", "y", "context", "x", "y", "x0", "y0", "context", "x", "y", "x0", "y0", "bundle", "beta", "point", "x", "y", "context", "custom", "tension", "context", "x", "y", "point", "custom", "tension", "context", "x", "y", "point", "custom", "tension", "point", "x", "y", "x1", "y1", "x2", "y2", "epsilon", "a", "b", "m", "context", "custom", "alpha", "context", "x", "y", "point", "custom", "alpha", "context", "x", "y", "point", "custom", "alpha", "context", "x", "y", "x", "x2", "y2", "h", "point", "t0", "t1", "x0", "y0", "x1", "y1", "context", "y", "context", "x", "y", "px", "py", "m", "a", "b", "context", "x", "y", "x1", "w", "h", "c", "domain", "range", "index", "domain", "range", "scale", "value", "src_exports", "array_default", "basis_default", "basisClosed_default", "lab", "quantize_default", "prototype", "extend", "definition", "key", "format", "m", "b", "a", "opacity", "extend", "value", "h", "min", "max", "m2", "t0", "t1", "b", "y", "x", "a", "b", "opacity", "extend", "y", "x", "t0", "t1", "h", "h", "c", "opacity", "extend", "b", "bl", "h", "opacity", "extend", "a", "cosh", "sinh", "t1", "t2", "t3", "basis_default", "values", "basisClosed_default", "values", "constant_default", "x", "linear", "a", "b", "y", "constant_default", "y", "color", "rgb", "start", "end", "b", "opacity", "colors", "basis_default", "basisClosed_default", "a", "b", "c", "x", "array_default", "a", "b", "x", "c", "a", "b", "a", "b", "a", "b", "c", "zero", "b", "one", "a", "i", "a", "b", "c", "constant_default", "range", "a", "b", "x", "a", "b", "degrees", "identity", "a", "b", "c", "e", "scaleY", "value", "m", "identity", "parse", "translate", "rotate", "a", "b", "scale", "epsilon2", "x", "zoom", "p0", "u", "hsl", "hue", "start", "end", "h", "opacity", "lab", "start", "end", "a", "b", "opacity", "hcl", "hue", "start", "end", "h", "c", "opacity", "cubehelix", "hue", "y", "start", "end", "h", "opacity", "interpolate", "values", "v", "i", "quantize_default", "x", "number", "x", "identity", "x", "normalize", "a", "b", "domain", "range", "interpolate", "i", "bisect_default", "source", "target", "transform", "clamp", "piecewise", "output", "scale", "y", "number", "u", "start", "stop", "count", "value", "scale", "domain", "count", "start", "stop", "linear", "identity", "domain", "scale", "x", "number", "domain", "interval", "x0", "x1", "x", "transform", "scale", "domain", "count", "u", "v", "log", "c", "x", "transform", "scale", "symlog", "x", "transform", "scale", "identity", "pow", "sqrt", "quantile", "domain", "range", "scale", "x", "bisect_default", "y", "ascending", "x0", "x1", "domain", "range", "scale", "x", "bisect_default", "y", "domain", "range", "scale", "x", "bisect_default", "y", "number", "ticks", "week", "second", "format", "scale", "invert", "domain", "formatYear", "tickFormat", "date", "y", "interval", "count", "transformer", "x0", "x1", "t0", "t1", "transform", "identity", "clamp", "scale", "x", "range", "interpolate", "copy", "source", "target", "transformer", "x0", "x1", "x2", "t0", "t1", "t2", "identity", "transform", "clamp", "scale", "x", "range", "interpolate", "copy", "colors", "count", "paddingInner", "paddingOuter", "Linear", "Quantile", "scale", "range", "min", "max", "domain", "bandwidth", "round", "align", "reverse", "stop", "start", "values", "a", "b", "value", "copy", "point", "map", "numbers", "slice", "x", "bisect_default", "type", "metadata", "identity", "linear", "log", "pow", "sqrt", "symlog", "quantile", "key", "span", "colors", "gamma", "interpolate", "scale$1", "min", "max", "m", "interpolate", "type", "gamma", "src_exports", "continuous", "c", "name", "scheme", "defaultFormatter", "value", "v", "ascending", "a", "b", "descending", "scale", "count", "timeInterval", "error", "ticks", "range", "cmp", "tickFormat", "locale", "format", "test", "values", "Quantile", "formats", "bins", "index", "array", "limit", "get", "domain", "span", "value", "type", "id", "get", "def", "p0", "gradient", "offset", "color", "orientation", "entry", "curve", "parse", "path", "params", "count", "index", "match", "x", "y", "key", "px", "py", "x0", "y0", "x1", "y1", "x3", "y3", "x2", "y2", "current", "c", "context", "w", "v", "h", "b", "symbols", "custom", "C", "number", "min", "max", "width", "height", "rectangle", "tl", "tr", "bl", "br", "defined", "point", "w2", "trail", "data", "a", "Symbol", "clip", "angle", "cos", "sin", "loader", "Image", "e", "bounds", "add", "sa", "ea", "update", "t0", "t1", "t2", "draw", "u", "image", "opacity", "Empty", "compare", "output", "visit", "hit", "test", "fill", "stroke", "scale", "scaleY", "shape", "attr", "emit", "bound", "pick", "group", "m", "align", "baseline", "cache", "text", "line", "truncate", "limit", "font", "json", "initialize", "event", "rect", "name", "href", "Renderer", "method", "tooltip", "touch", "addEventListener", "types", "error", "hide", "recurse", "datum", "orient", "title", "locale", "scales", "capitalize", "stack", "clear", "set", "children", "i", "markType", "events", "aria", "process", "stop", "ts", "extend", "scene", "object", "fn", "None", "modules", "intersect", "filter", "None", "params", "pulse", "type", "entry", "bound", "boundItem", "id", "a", "b", "intersect", "pad", "scale", "orient", "range", "source", "reflow", "reduce", "test", "bounds", "tempBounds", "set", "property", "value", "datum", "index", "width", "height", "offset", "position", "title", "x", "y", "isYAxis", "sign", "v", "min", "max", "group", "get", "key", "m", "c", "px", "py", "x2", "y2", "band", "field", "limit", "isX", "start", "init", "h", "lookup", "w", "mult", "translate", "e", "u", "entries", "viewBounds", "frame", "padding", "end", "auto", "viewWidth", "viewHeight", "left", "top", "right", "bottom", "params", "pulse", "locale", "ticks", "scale", "count", "format", "tickFormat", "values", "value", "key", "map", "error", "x", "encode", "e", "update", "set", "flag", "type", "limit", "domain", "offset", "max", "index", "orient", "shape", "path", "line", "sa", "tr", "arc", "ts", "m", "field", "start", "stop", "data", "a", "range", "v", "b", "Linear", "SKIP", "scale$1", "zero", "pad", "constant", "span", "s", "bins", "round", "flip", "interpolate", "extent", "name", "Quantile", "scheme", "reverse", "array", "y0", "y1", "sort", "stack", "partition", "group", "get", "epsilon", "epsilon2", "pi", "halfPi", "tau", "degrees", "radians", "abs", "atan2", "cos", "exp", "log", "pow", "sin", "sign", "x", "sqrt", "acos", "pi", "asin", "halfPi", "noop", "stream", "object", "noop", "tau", "phi", "radians", "cos", "sin", "u", "v", "atan2", "area_default", "object", "cartesian", "atan2", "asin", "spherical", "phi", "cos", "sin", "a", "b", "sqrt", "lambda0", "lambda00", "phi00", "range", "epsilon", "phi", "radians", "sign", "degrees", "abs", "lambda1", "a", "b", "x", "feature", "lambda00", "phi00", "noop", "phi", "radians", "cos", "sin", "x", "y", "w", "atan2", "sqrt", "m", "asin", "v", "object", "epsilon2", "epsilon", "degrees", "a", "b", "x", "y", "phi", "abs", "pi", "tau", "cos", "sin", "x", "y", "atan2", "asin", "rotate", "radians", "degrees", "stream", "radius", "t0", "t1", "cos", "sin", "tau", "point", "acos", "epsilon", "line", "x", "y", "m", "noop", "a", "b", "abs", "epsilon", "point", "points", "entry", "segments", "compareIntersection", "interpolate", "stream", "clip", "n", "p0", "x", "epsilon", "start", "current", "array", "a", "b", "point", "abs", "pi", "sign", "tau", "phi", "sin", "cos", "angle", "sum", "halfPi", "epsilon", "m", "lambda0", "phi0", "sinPhi0", "cosPhi0", "lambda1", "phi1", "atan2", "arc", "intersection", "asin", "epsilon2", "interpolate", "start", "line", "segments", "clip", "point", "merge", "phi", "m", "a", "b", "halfPi", "epsilon", "pi", "halfPi", "stream", "lambda0", "phi0", "lambda1", "phi1", "abs", "epsilon", "cosPhi0", "sin", "cos", "phi", "circle_default", "radius", "cr", "cos", "radians", "abs", "epsilon", "interpolate", "stream", "phi", "point2", "v", "c", "pi", "intersect", "a", "b", "pa", "c2", "A", "B", "u", "w", "t2", "sqrt", "lambda0", "lambda1", "phi0", "phi1", "delta", "code", "line_default", "a", "b", "x0", "y0", "x1", "y1", "t0", "t1", "x0", "y0", "x1", "y1", "x", "y", "interpolate", "stream", "a", "abs", "epsilon", "compareIntersection", "b", "ca", "segments", "point", "ring", "m", "visible", "merge", "linePoint", "v", "line_default", "y0", "y1", "y", "range", "epsilon", "x", "x0", "x1", "X1", "X0", "Y1", "Y0", "X", "Y", "graticule", "abs", "identity_default", "x", "areaSum", "areaRingSum", "x0", "y0", "areaStream", "noop", "areaRingStart", "areaRingEnd", "abs", "area", "areaPointFirst", "x", "y", "areaPoint", "area_default", "x0", "y0", "boundsStream", "boundsPoint", "noop", "bounds", "x", "y", "bounds_default", "X0", "Y0", "Z0", "X1", "Y1", "Z1", "X2", "Y2", "Z2", "x00", "y00", "x0", "y0", "centroidStream", "centroidPoint", "centroidLineStart", "centroidLineEnd", "centroidRingStart", "centroidRingEnd", "x", "y", "sqrt", "centroid_default", "context", "x", "y", "tau", "noop", "x00", "y00", "x0", "y0", "noop", "length", "x", "y", "sqrt", "append", "appendRound", "x", "y", "projection", "context", "path", "object", "area_default", "bounds_default", "centroid_default", "identity_default", "transformer", "methods", "stream", "key", "x", "y", "projection", "object", "clip", "bounds_default", "extent", "b", "w", "h", "x", "y", "width", "height", "cos", "radians", "project", "transformer", "x", "y", "x0", "y0", "lambda0", "x1", "y1", "lambda1", "stream", "a", "b", "c", "m", "sqrt", "asin", "lambda2", "abs", "epsilon", "atan2", "x2", "y2", "lambda00", "x00", "y00", "point", "linePoint", "phi", "transformer", "x", "y", "radians", "rotate", "transform", "cos", "sin", "a", "b", "project", "phi", "x0", "y0", "x1", "y1", "identity_default", "cache", "projection", "point", "invert", "degrees", "stream", "reset", "circle_default", "sqrt", "extent", "object", "width", "height", "phi0", "phi1", "pi", "m", "radians", "degrees", "phi0", "cosPhi0", "cos", "phi", "sin", "x", "y", "asin", "y0", "y1", "sin", "abs", "epsilon", "c", "sqrt", "project", "x", "y", "cos", "atan2", "sign", "pi", "asin", "x", "y", "cache", "point", "stream", "reset", "epsilon", "extent", "object", "width", "height", "scale", "x", "y", "cos", "sin", "angle", "sqrt", "c", "cc", "atan2", "asin", "sqrt", "asin", "c", "acos", "sin", "phi", "log", "halfPi", "x", "y", "exp", "tau", "project", "m", "scale", "translate", "x0", "y0", "x1", "y1", "pi", "y", "halfPi", "y0", "y1", "cos", "sin", "log", "pow", "project", "x", "epsilon", "sign", "sqrt", "atan2", "abs", "pi", "phi", "y0", "y1", "cos", "sin", "abs", "epsilon", "project", "x", "y", "atan2", "sign", "pi", "sqrt", "sqrt", "phi", "asin", "sin", "cos", "x", "y", "abs", "epsilon2", "x", "y", "cos", "sin", "identity_default", "ca", "sa", "x0", "y0", "x1", "y1", "transform", "transformer", "x", "y", "projection", "cache", "reset", "stream", "radians", "sin", "cos", "degrees", "extent", "object", "width", "height", "phi", "phi2", "x", "y", "abs", "epsilon", "x", "y", "cos", "sin", "asin", "epsilon", "x", "y", "cos", "sin", "phi", "log", "halfPi", "x", "y", "exp", "m", "rotate", "abs", "cos", "sin", "epsilon", "pi", "halfPi", "quarterPi", "sqrt2", "sqrt", "pi", "tau", "degrees", "radians", "asin", "x", "halfPi", "sqrt", "x", "phi", "sin", "cos", "abs", "epsilon", "x", "y", "asin", "sqrt2", "halfPi", "pi", "create", "type", "projection", "c", "identity_default", "key", "noop", "contours", "values", "value", "area", "contains", "x", "y", "t0", "t1", "t2", "t3", "line", "start", "end", "index", "point", "error", "c", "pi", "a", "b", "within", "quantize", "nice", "zero", "stop", "span", "range", "params", "pulse", "source", "field", "max", "datum", "transform", "x1", "y1", "flip", "data", "v", "number", "bandwidth", "m", "sz", "target", "w", "param", "partition", "kde", "set", "vals", "get", "map", "post", "points", "flag", "path", "shape", "opacity", "color", "extend", "x2", "y2", "create", "fit", "type", "projection", "key", "x", "y", "x", "y", "add", "x0", "y0", "x1", "y1", "right", "bottom", "data", "x", "y", "x0", "y0", "x1", "y1", "data", "x0", "y0", "x1", "y1", "x", "y", "radius", "data", "x0", "y0", "x1", "y1", "x2", "y2", "x3", "y3", "x", "y", "x0", "y0", "x1", "y1", "right", "bottom", "data", "x0", "y0", "x1", "y1", "x0", "y0", "x1", "y1", "x", "y", "x0", "y0", "x1", "y1", "copy", "constant_default", "x", "random", "x", "y", "radius", "random", "iterations", "constant_default", "prepare", "apply", "quad", "x0", "y0", "x1", "y1", "data", "initialize", "find", "id", "constant_default", "count", "random", "iterations", "link", "source", "target", "x", "y", "b", "initialize", "m", "i", "noop", "dispatch", "types", "name", "get", "set", "copy", "type", "c", "timeout", "now", "time", "e", "t0", "t1", "t2", "time", "callback", "delay", "now", "tick", "x", "y", "simulation", "event", "random", "tick", "iterations", "radius", "angle", "name", "closest", "random", "constant_default", "x", "y", "apply", "initialize", "node", "quad", "strength", "c", "x1", "x2", "w", "x_default", "x", "constant_default", "initialize", "y_default", "y", "constant_default", "initialize", "x_default", "y_default", "params", "pulse", "change", "m", "ops", "stop", "init", "name", "v", "error", "a", "b", "children", "x", "c", "y", "left", "right", "x0", "x1", "sum", "children", "index", "children", "index", "children", "index", "find_default", "index", "value", "sum", "children", "compare", "path_default", "end", "start", "a", "b", "c", "current", "children", "data", "children", "Node", "height", "find_default", "path_default", "constant_default", "x", "a", "c", "m", "lcg_default", "array_default", "x", "array", "random", "m", "random", "B", "e", "a", "b", "x1", "y1", "x2", "y2", "c", "x3", "y3", "a2", "a3", "b2", "c2", "c3", "ab", "A", "C", "b", "a", "c", "x", "a2", "y", "b2", "ab", "Node", "circle", "random", "array_default", "aa", "ca", "radius", "padding", "random", "lcg_default", "x", "constant_default", "children", "e", "round_default", "x0", "y0", "x1", "y1", "padding", "round", "partition", "round_default", "dy", "x0", "y0", "x1", "y1", "x", "id", "path", "data", "d", "i", "normalize", "Node", "node", "x", "defaultSeparation", "a", "b", "v", "children", "change", "w", "Node", "left", "right", "bottom", "x", "x0", "y0", "x1", "y1", "x0", "y0", "x1", "y1", "value", "custom", "x", "round", "paddingInner", "round_default", "x0", "y0", "x1", "y1", "x", "constant_default", "x0", "y0", "x1", "y1", "sum", "partition", "i", "value", "x0", "y0", "x1", "y1", "custom", "x0", "y0", "x1", "y1", "m", "value", "x", "lookup", "key", "filter", "map", "params", "pulse", "error", "keys", "nest", "array", "entries", "apply", "value", "values", "defaultSeparation", "a", "b", "run", "method", "m", "link", "Output", "x", "$", "data", "width", "height", "context", "draw", "x", "y", "u", "v", "index", "type", "group", "source", "MOD", "w", "h", "array", "x2", "y2", "start", "end", "padding", "scale", "x1", "y1", "_x", "_y", "_x2", "_y2", "stack", "offsets", "compare", "offset", "method", "a", "b", "place", "count", "Output", "params", "pulse", "param", "error", "partition", "data", "get", "map", "params", "pulse", "source", "m", "values", "Methods", "constant", "log", "exp", "pow", "method", "order", "fit", "domain", "error", "add", "x", "Voronoi", "epsilon", "sum", "e", "h", "e", "epsilon", "B", "C2", "D", "c", "t1", "t0", "u3", "sum", "epsilon", "u", "epsilon", "bc", "ca", "ab", "u", "abt", "bct", "cat", "_8", "_16", "fin", "fin2", "epsilon", "ab", "bc", "ea", "_8", "_8b", "_16", "_48", "fin", "EPSILON", "points", "getX", "defaultGetX", "getY", "defaultGetY", "maxY", "x", "y", "id", "start", "key", "e", "n", "a", "b", "bl", "p0", "br", "c", "px", "py", "left", "right", "temp", "median", "swap", "epsilon", "Path", "x", "y", "x0", "y0", "w", "h", "x", "y", "points", "x", "y", "t1", "t2", "t3", "x1", "y1", "x2", "y2", "x3", "y3", "ab", "i", "a", "bl", "h", "p0", "x0", "y0", "context", "Path", "v", "cell", "e", "flip", "c", "tau", "pow", "collinear", "a", "b", "c", "cross", "x", "y", "points", "e", "bounds", "p0", "context", "Path", "h", "t0", "t1", "t2", "array", "Voronoi", "params", "pulse", "data", "x", "y", "text", "font", "fontSize", "fontWeight", "rotate", "padding", "random", "cloud", "getContext", "bounds", "data", "d", "a", "b", "place", "context", "w", "lx", "h", "x", "c", "y", "cr", "m", "e", "sign", "Output", "Params", "params", "pulse", "error", "param", "range", "width", "data", "array", "map", "copy", "one", "m", "length", "index", "range", "i", "value", "insert", "key", "merge", "remove", "bisect", "values", "a", "b", "x", "y", "params", "pulse", "init", "output", "add", "rem", "c", "Identifier", "type", "c", "children", "source", "index", "ch", "id", "start", "number", "e", "value", "peek", "operator", "left", "right", "test", "name", "accessor", "object", "property", "key", "error", "map", "toString", "expr", "stack", "codegen", "fn", "DATE", "a", "constants", "visit", "generator", "getter", "datum", "entry", "values", "name", "data", "entries", "intersect", "count", "unit", "b", "bisectLeft", "bisectRight", "value", "index", "array", "x", "extend", "types", "field", "type", "union", "m", "j", "key", "v", "scope", "params", "error", "name", "data", "field", "value", "index", "entry", "target", "method", "locale", "format", "timeFormat", "utcFormat", "timeParse", "utcParse", "time", "DataPrefix", "IndexPrefix", "scope", "params", "error", "codegen", "ref", "projection", "group", "area_default", "log", "color", "c", "b", "color2", "merge", "extend", "a", "key", "insert", "remove", "toggle", "modify", "values", "event", "accessor", "array", "sequence", "join", "slice", "replace", "count", "paddingInner", "paddingOuter", "copy", "range", "scale", "p0", "gradient", "min", "max", "context", "path", "parse", "source", "screen", "w", "intersect", "u", "v", "filter", "types", "x", "y", "unit", "bb", "px", "py", "intersection", "id", "fn", "parser", "expr", "visit", "parse", "entry", "encode", "type", "fn", "u", "v", "expr", "name", "path", "ref", "get", "map", "error", "params", "key", "value", "getField", "c", "_", "filter", "stream", "source", "target", "update", "SKIP", "data", "ctx", "context", "transforms", "Context", "keys", "id", "background", "Default", "cursor", "event", "value", "name", "data", "error", "values", "padding", "offset", "w", "h", "e", "translate", "point", "group", "item", "events", "extend", "keys", "type", "def", "prevent", "key", "rule", "source", "filter", "tooltip", "m", "element", "attr", "text", "bind", "param", "debounce", "create", "select", "range", "labels", "max", "min", "span", "update", "a", "b", "fn", "initialize", "module", "lookup", "Handler", "Renderer", "clear", "number", "expr", "context", "scale", "scales", "Padding", "Skip", "width", "height", "viewWidth", "viewHeight", "auto", "rerun", "v", "getState", "setState", "timer", "tick", "defaultTooltip", "formatValue", "remove", "View", "locale", "op", "encode", "loader", "VIEW", "NAME", "ILLEGAL", "source", "parseSelector", "type", "find", "count", "c", "output", "start", "parseStream", "b", "stream", "filter", "e", "a", "x", "number", "paddingObject", "extend", "object", "name", "value", "set", "update", "encode", "has", "key", "FrameRole", "ScopeRole", "AxisRole", "LegendRole", "TitleRole", "type", "style", "defaults", "props", "scale", "field", "gradient", "color", "x", "y", "property", "ref", "error", "rule", "scope", "params", "expr", "parser", "sort", "View", "v", "Timer", "parseStream", "stream", "method", "source", "entry", "id", "param", "parseUpdate", "target", "events", "transform", "Aggregate", "AxisTicks", "Bound", "Collect", "Compare", "DataJoin", "Encode", "Expression", "Facet", "Field", "Key", "LegendEntries", "Load", "Mark", "MultiExtent", "MultiValues", "Overlap", "Params", "PreFacet", "Projection", "Proxy", "Relay", "Render", "Scale", "Sieve", "SortItems", "ViewLayout", "Values", "domain", "data", "a", "c", "values", "nice", "interpolate", "range", "_", "Top", "Left", "Right", "Bottom", "Center", "Start", "Middle", "End", "Label", "Symbols", "Gradient", "Discrete", "Skip", "zero", "one", "lookup", "e", "m", "offset", "band", "length", "start", "stop", "width", "height", "u", "entries", "interactive", "index", "symbols", "labels", "clip", "definition", "def", "parseParameters", "parseParameter", "group", "output", "cache", "remove", "insert", "toggle", "modify", "ops", "md", "bound", "on", "scales", "children", "datum", "scaleType", "count", "fontSize", "text", "transforms", "generate", "load", "orient", "b", "test", "sign", "axisConfig", "keys", "map", "or", "offsetValue", "sz", "threshold", "flush", "align", "baseline", "offsetExpr", "auto", "Scope", "cmp", "bind", "array", "defaultFont", "gray", "parse", "extend", "adjustSpatial", "encode", "swap", "Constants", "a", "b", "slice", "apply", "m", "y", "M", "Functions", "c", "x", "$", "id", "name", "fn", "params", "datum", "event", "expression", "expr", "v", "src_exports", "contains", "hasProperty", "hash", "isBoolean", "isNumeric", "keys", "normalize", "pick", "stringify", "unique", "version", "hasProperty", "fn", "pick", "copy", "x", "stringify", "hash", "a", "h", "contains", "array", "property", "keys", "unique", "values", "u", "v", "key", "b", "e", "prefixes", "y", "isBoolean", "or", "path", "datum", "find", "id", "name", "angle", "isNumeric", "value", "length", "data", "hasProperty", "X", "Y", "X2", "Y2", "SIZE", "URL", "c", "keys", "main", "a", "hasProperty", "contains", "bin", "keys", "extent", "hasProperty", "SIZE", "hasProperty", "index", "keys", "frame", "offset", "orient", "angle", "limit", "color", "pick", "v", "hasProperty", "range", "domain", "keys", "value", "expr", "ref", "v", "e", "property", "hasProperty", "style", "stringify", "name", "field", "type", "extent", "transform", "projection", "value", "fill", "stroke", "align", "scaleType", "property", "sort", "unitName", "main", "set", "reset", "main", "error", "warn", "debug", "hasProperty", "m", "isNumeric", "warn", "normalize", "keys", "quarter", "unit", "keys", "index", "field", "end", "fieldRef", "stringify", "expr", "params", "keys", "wrap", "x", "hasProperty", "v", "vals", "field", "unit", "fieldExpr", "range", "stringify", "isContinuous", "type", "isDiscrete", "keys", "keys", "scaleType", "type", "type", "scheme", "hasProperty", "domain", "range", "keys", "scaleType", "contains", "X", "Y", "SIZE", "Mark", "TEXT", "m", "keys", "Mark", "hasProperty", "keys", "hasProperty", "m", "scaleType", "scale", "domain", "min", "max", "scale", "scaleType", "value", "params", "scale", "datum", "stringify", "encode", "ref", "offset", "band", "expr", "start", "end", "field", "stack", "scaleType", "bin", "type", "X", "X2", "Y2", "warn", "value", "contains", "field", "format", "stringify", "expr", "type", "timeFormat", "scaleType", "start", "end", "c", "sort", "hasProperty", "hasProperty", "c", "hasProperty", "field", "bin", "scaleType", "cd", "isDiscrete", "fn", "def", "isDiscretizing", "unit", "format", "warn", "type", "datum", "sort", "orient", "X", "Y", "URL", "SIZE", "X2", "Y2", "v", "isTime", "expr", "stringify", "values", "v", "keys", "hasProperty", "name", "run", "isDiscrete", "bins", "timeUnits", "field", "bin", "X2", "X", "Y", "key", "keys", "warn", "isContinuous", "SIZE", "def", "init", "map", "URL", "Y2", "tooltip", "unique", "hash", "title", "field", "scale", "clip", "color", "opacity", "orient", "warn", "x", "y", "extent", "params", "warn", "bins", "timeUnits", "transform", "color", "fieldExpr", "tooltip", "scale", "title", "orient", "transform", "tick", "x", "y", "x2", "y2", "params", "warn", "orient", "bins", "timeUnits", "extent", "transform", "interpolate", "warn", "add", "run", "keys", "add", "keys", "keys", "bind", "param", "params", "param", "expr", "bind", "hasProperty", "hasProperty", "keys", "defaultConfig", "color", "fontSize", "font", "axisConfig", "keys", "markType", "m", "style", "hasProperty", "hasProperty", "params", "TEXT", "x", "orient", "y", "m", "offset", "warn", "warn", "cursor", "contains", "graticule", "TEXT", "x", "y", "x2", "y2", "keys", "normalize", "params", "projection", "name", "e", "offset", "pick", "warn", "sort", "def", "hasProperty", "cd", "params", "normalize", "warn", "params", "repeat", "data", "warn", "projection", "width", "height", "def", "align", "keys", "hasProperty", "isQuantile", "isAggregate", "transform", "name", "value", "bind", "select", "transform", "normalizePredicate", "param", "domain", "c", "test", "bin", "params", "param", "path", "v", "method", "normalize", "width", "height", "warn", "implicit", "key", "value", "keys", "compare", "property", "warn", "implicit", "data", "hasProperty", "DataSourceType", "scales", "warn", "source", "type", "field", "timeUnits", "hash", "key", "transforms", "unit", "params", "expr", "reverse", "start", "end", "project", "name", "timeUnits", "range", "type", "init", "key", "keys", "warn", "field", "hash", "v", "hasSignal", "point", "name", "project", "datum", "b", "test", "update", "values", "events", "index", "init", "isExpr", "wrap", "v", "stringify", "name", "c", "keys", "resolve", "isPoint", "data", "unit", "contains", "extent", "domain", "bound", "scale", "scaleType", "warn", "update", "domain", "CENTER", "interval", "def", "keys", "warn", "filters", "name", "X", "Y", "init", "scaleType", "update", "projection", "x", "y", "intersect", "key", "fill", "cursor", "stroke", "interval_default", "scale", "c", "param", "test", "expression", "text", "expr", "format", "stack", "datum", "expr", "add", "title", "key", "value", "format", "data", "stack", "data", "key", "value", "index", "color", "markType", "contains", "warn", "order", "cd", "ref", "stack", "scale", "offset", "params", "align", "warn", "range", "stack", "scale", "offset", "warn", "scale", "scaleType", "orient", "warn", "padding", "stack", "offset", "reverse", "offsetExpr", "sign", "offset2", "fill", "stroke", "color", "text", "m", "hasProperty", "scaleType", "field", "value", "x", "y", "markType", "warn", "index", "name", "name", "bind", "init", "datum", "hasSignal", "values", "v", "update", "warn", "evt", "stream", "name", "hasSignal", "events", "values", "v", "update", "toggle", "field", "translate", "name", "x", "y", "events", "e", "domain", "X", "Y", "scaleType", "sign", "extent", "offset", "update", "ANCHOR", "DELTA", "zoom", "name", "x", "y", "X", "Y", "events", "e", "expr", "onDelta", "zoom_default", "scaleType", "domain", "update", "interval_default", "zoom_default", "escape", "name", "e", "name", "expression", "filter", "expression", "def", "name", "type", "defaults", "key", "c", "warn", "datum", "e", "fn", "resolve", "test", "length", "extent", "field", "main", "expression", "title", "orient", "scale", "zindex", "c", "test", "expression", "contains", "expr", "update", "x", "y", "a", "orient", "keys", "scaleType", "c", "style", "property", "format", "scaleType", "orient", "values", "angle", "X", "contains", "a", "isX", "type", "sort", "vals", "isDiscrete", "transform", "field", "sort", "hash", "orient", "contains", "value", "title", "angle", "align", "baseline", "group", "sort", "format", "contains", "band", "value", "name", "type", "range", "expr", "padding", "paddingOuter", "paddingInner", "keys", "encode", "def", "resolve", "warn", "keys", "symbols", "gradient", "entries", "legendType", "color", "opacity", "hasProperty", "fill", "stroke", "format", "text", "v", "field", "name", "format", "scaleType", "params", "defaultLabelOverlap", "legendType", "values", "vals", "shape", "params", "defaultType", "scaleType", "contains", "legendType", "orient", "min", "max", "defaultLabelOverlap", "parseLegend", "def", "scale", "value", "property", "scaleType", "orient", "legendType", "resolve", "keys", "keys", "stringify", "property", "expr", "projections", "projection", "name", "ref", "data", "source", "contains", "name", "data", "parseProjection", "fit", "data", "second", "projection", "merge", "name", "bin", "field", "key", "span", "bins", "keys", "unique", "hash", "c", "transform", "extent", "params", "field", "keys", "ops", "isAggregate", "debug", "m", "hash", "name", "data", "bin", "sort", "hash", "type", "range", "domain", "field", "warn", "ops", "layoutHeaders", "stop", "parseExpression", "field", "parse", "warn", "transform", "implicit", "filter", "add", "name", "keys", "hash", "data", "key", "expr", "params", "hash", "params", "hash", "data", "format", "contains", "name", "a", "b", "x", "keys", "parse", "field", "key", "hash", "group", "bin", "children", "transform", "unique", "w", "hash", "ops", "filter", "scales", "scaleType", "keys", "hash", "filters", "field", "ref", "stack", "offset", "sort", "def", "field", "hash", "transform", "bin", "transform", "unique", "m", "w", "hash", "ops", "params", "window", "frame", "sort", "copy", "c", "modified", "data", "warn", "parseScaleDomain", "keys", "resolve", "domain", "warn", "scaleType", "type", "v", "data", "stack", "sort", "field", "isBoolean", "bin", "contains", "order", "scale", "extent", "property", "unique", "hash", "x", "scales", "keys", "scale", "name", "type", "_d", "_r", "reverse", "range", "domain", "name", "scaleType", "contains", "bin", "field", "scaleType", "property", "warn", "range", "v", "X", "rangeMin", "rangeMax", "scheme", "Y", "name", "type", "domain", "contains", "SIZE", "interpolateRange", "w", "h", "isDiscrete", "paddingInner", "expr", "padding", "min", "property", "keys", "scaleType", "warn", "type", "value", "hasProperty", "interpolate", "domain", "nice", "padding", "sort", "reverse", "zero", "parseScaleRange", "bin", "contains", "orient", "defaultType", "type", "warn", "contains", "parseScaleDomain", "parseScaleRange", "resolve", "keys", "name", "name", "type", "resolve", "parseProjection", "parseLegend", "e", "property", "keys", "value", "encodeEntry", "layoutHeaders", "title", "contains", "group", "scales", "text", "range", "domain", "field", "fieldRef", "warn", "parse", "a", "init", "cd", "c", "transform", "resolve", "hash", "transform", "hash", "extent", "param", "transform", "flatten", "hash", "transform", "hash", "def", "hash", "projection", "def", "hash", "transform", "start", "stop", "method", "value", "frame", "hash", "key", "transform", "hash", "loess", "on", "transform", "e", "hash", "warn", "transform", "hash", "quantile", "transform", "hash", "on", "transform", "unique", "hash", "value", "limit", "transform", "hash", "data", "source", "orient", "title", "labels", "contains", "layoutHeaders", "resolve", "resolve", "scaleType", "range", "sort", "keys", "warn", "hasProperty", "parseData", "error", "data", "align", "ops", "field", "type", "range", "domain", "name", "bin", "cross", "order", "encodeEntry", "title", "style", "c", "field", "data", "source", "implicit", "isAggregate", "isQuantile", "warn", "field", "parseData", "scales", "main", "name", "warn", "parseData", "key", "keys", "error", "data", "title", "style", "encodeEntry", "v", "keys", "implicit", "labels", "format", "parseAxis", "resolve", "keys", "orient", "index", "length", "isExplicit", "value", "property", "scaleType", "format", "e", "labels", "warn", "arc", "area", "transform", "image", "text", "line", "trail", "point", "rect", "rule", "orient", "text", "baseline", "a", "b", "orient", "arc", "area", "image", "line", "point", "rect", "rule", "text", "trail", "contains", "hasCornerRadius", "expr", "field", "pick", "key", "encode", "getSort", "stack", "order", "clip", "style", "sort", "interactive", "aria", "projection", "keys", "mark", "scale", "scales", "domain", "range", "X", "Y", "keys", "parseData", "data", "style", "parseData", "key", "keys", "error", "data", "style", "title", "set", "normalize", "reset", "width", "height", "warn", "keys", "data", "projections", "title", "style", "encodeEntry", "params", "version", "url", "library", "version", "exec", "slice", "version", "description", "keywords", "main", "module", "font", "value", "background", "type", "markColor", "formatValue", "value", "maxDepth", "v", "stringify", "content", "title", "image", "keys", "key", "stack", "DEFAULT_OPTIONS", "id", "event", "position", "left", "top", "right", "bottom", "Handler", "style", "x", "y", "version", "pkg", "b", "d", "key", "keys", "isInteger", "path", "value", "PatchError", "name", "index", "document", "patch", "error", "sequence", "e", "a", "length", "Mirror", "ObserverInfo", "generate", "temp", "compare", "JsonPatchError", "deepClone", "constants", "debug", "require$$0", "require$$1", "exports", "module", "re", "max", "require$$2", "require$$3", "require$$4", "version", "m", "id", "require$$5", "cmp", "comparator", "range", "c", "cache", "require$$6", "isX", "M", "set", "satisfies", "window", "data", "count", "mergeDeep", "deepMerge_", "property", "pkg", "src_exports", "w", "VERSION", "h", "source", "loader", "element", "style", "expressionFunction", "runtime", "expression", "type", "tooltip", "Handler", "hover", "finalize"] }