@splunk/visualizations 28.9.0 → 28.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Area.js +2 -2
- package/Bar.js +2 -2
- package/Bubble.js +2 -2
- package/CHANGELOG.external.md +28 -16
- package/ChoroplethSvg.js +2 -2
- package/Column.js +2 -2
- package/Ellipse.js +2 -2
- package/Events.js +2 -2
- package/FillerGauge.js +2 -2
- package/Image.js +2 -2
- package/Line.js +2 -2
- package/LinkGraph.js +2 -2
- package/Map/PureMap/ChoroplethLayer.d.ts.map +1 -1
- package/Map/PureMap/PureMap.d.ts.map +1 -1
- package/Map/PureMap/mapWorker.d.ts +2 -0
- package/Map/PureMap/mapWorker.d.ts.map +1 -0
- package/Map.js +79 -26
- package/Map.js.map +3 -3
- package/Markdown.js +2 -2
- package/MarkerGauge.js +2 -2
- package/NetworkGraph.js +2 -2
- package/ParallelCoordinates.js +2 -2
- package/Pie.js +2 -2
- package/ProcessTree.js +2 -2
- package/Punchcard.js +2 -2
- package/Rectangle.js +2 -2
- package/RichText.js +2 -2
- package/Sankey.js +2 -2
- package/Scatter.js +2 -2
- package/SingleValue.js +2 -2
- package/SingleValueIcon.js +2 -2
- package/SingleValueRadial.js +2 -2
- package/Table.js +2 -2
- package/Timeline.js +2 -2
- package/Treemap.js +2 -2
- package/common/DocExampleWithVizSandbox.d.ts +2 -0
- package/common/DocExampleWithVizSandbox.d.ts.map +1 -1
- package/common/DocExampleWithVizSandbox.js +51 -3
- package/common/DocExampleWithVizSandbox.js.map +2 -2
- package/common/OverviewDoc.js +51 -3
- package/common/OverviewDoc.js.map +2 -2
- package/common/utils/mapUtils.js +3 -3
- package/common/utils/mapUtils.js.map +2 -2
- package/common/withDashboardViz.js +2 -2
- package/docs-llm/map/examples-react.md +39 -39
- package/package.json +23 -20
package/Map.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["src/Map/index.ts", "esm-externals:react", "esm-externals:@splunk/visualizations-shared/colorUtils", "esm-externals:@splunk/visualizations-shared/hocUtils", "esm-externals:@splunk/visualizations-shared/JSONSchemaUtils", "esm-externals:styled-components", "esm-externals:lodash", "esm-externals:chroma-js", "esm-externals:maplibre-gl", "esm-externals:@splunk/ui-utils/i18n", "esm-externals:@splunk/react-ui/Button", "esm-externals:@splunk/react-ui/Tooltip", "esm-externals:@splunk/visualization-context/MapContext", "esm-externals:@splunk/visualization-schemas", "src/common/utils/shadowDomUtils.ts", "esm-externals:@splunk/visualizations-shared/style", "esm-externals:maplibre-gl/dist/maplibre-gl.css", "esm-externals:@splunk/visualizations-shared/iconUtils", "esm-externals:@splunk/visualizations-shared/RemoteIcon", "esm-externals:@splunk/visualization-context/FeatureFlagContext", "esm-externals:@splunk/ui-utils/format", "src/Map/PureMap/keyboardConstants.ts", "esm-externals:@splunk/react-ui/Popover", "esm-externals:@splunk/themes", "esm-externals:@splunk/ui-utils/id", "src/Map/PureMap/Tooltip.tsx", "esm-externals:d3-scale", "esm-externals:@splunk/visualization-color-palettes", "esm-externals:@splunk/visualization-encoding/utils/types", "src/Map/PureMap/MapUtils.ts", "src/Map/PureMap/MapContext.tsx", "src/Map/PureMap/MarkerWrapper.tsx", "src/Map/PureMap/useRovingTabindex.ts", "src/Map/PureMap/BubbleLayer.tsx", "src/Map/PureMap/PureMapContainer.tsx", "src/Map/PureMap/MarkerLayer.tsx", "src/Map/PureMap/ClusterLayer.tsx", "src/Map/PureMap/ChoroplethLayer.tsx", "esm-externals:@splunk/visualizations-shared/Message", "esm-externals:@splunk/visualization-context/GeoRegistry", "esm-externals:@splunk/visualization-context/GeoJsonProvider", "src/Map/PureMap/LocalChoroplethLayer.tsx", "src/Map/PureMap/PureMap.tsx", "esm-externals:@splunk/visualization-color-palettes/editors/PresetPalettes", "esm-externals:@splunk/visualization-icons", "esm-externals:@splunk/visualization-icons/placeholders", "esm-externals:@splunk/visualizations-shared/configUtils", "src/common/utils/configUtils.ts", "src/common/editorConfig/BackgroundColor.ts", "esm-externals:@splunk/themes/pick", "esm-externals:@splunk/themes/variables", "src/common/ThemedDefaults.tsx", "src/Map/config.ts", "esm-externals:@splunk/themes/getSettingsFromThemedProps", "esm-externals:@splunk/visualization-encoding/Options", "esm-externals:@splunk/visualizations-shared/SanitizeProps", "esm-externals:@splunk/visualization-context/TimezoneContext", "esm-externals:@splunk/moment", "esm-externals:@splunk/async-dynamic-options-evaluator", "esm-externals:prop-types", "src/common/interfaces/VizActionHandler.ts", "src/common/SplunkVisualization.tsx", "src/common/interfaces/DataSource.ts", "src/common/hooks/useSorting.ts", "src/common/hooks/usePagination.ts", "src/common/hooks/useDeepMemo.ts", "esm-externals:@splunk/visualizations-shared/SizeAwareWrapper", "src/common/components/MissingPropsMessage.tsx", "src/common/utils/hocUtils.ts", "src/common/hocs/withEditModeCover.tsx", "src/common/hocs/FixedSizeContainer.tsx", "src/common/components/IconPlaceholder.tsx", "src/common/hocs/withPlaceholder.tsx", "esm-externals:@splunk/visualizations-shared/numberUtils", "src/common/utils/dataUtils.ts", "src/common/hooks/usePrevious.ts", "src/common/hooks/useGetXAndYFields.tsx", "src/common/hooks/useDownsampleDataSources.tsx", "esm-externals:@splunk/visualization-context/FeatureFlags", "src/common/utils/featureFlagUtils.ts", "esm-externals:@splunk/visualizations-shared/trellisUtils", "src/common/utils/trellisUtils.ts", "esm-externals:@splunk/visualization-canvas", "src/common/components/VizStyleWrapper.jsx", "esm-externals:@splunk/react-icons/Triangle", "esm-externals:@splunk/visualizations-shared/propUtils", "esm-externals:@splunk/visualizations-shared/simpleXMLOptions", "src/common/chartingUtils.ts", "src/common/hooks/useTrellisEnabled.ts", "src/common/components/TrellisTitle.tsx", "src/common/TimeSeriesChartWrapper.tsx", "src/common/withDashboardViz.tsx", "esm-externals:@splunk/visualization-encoding/utils/dsl", "src/common/utils/mapUtils.ts", "src/Map/Map.tsx"],
|
|
4
|
-
"sourcesContent": ["export * from './Map';\nexport { default } from './Map';\n", "\nimport * as defaultImport from \"react\";\nexport * from \"react\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/colorUtils\";\nexport * from \"@splunk/visualizations-shared/colorUtils\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/hocUtils\";\nexport * from \"@splunk/visualizations-shared/hocUtils\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/JSONSchemaUtils\";\nexport * from \"@splunk/visualizations-shared/JSONSchemaUtils\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"styled-components\";\nexport * from \"styled-components\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"lodash\";\nexport * from \"lodash\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"chroma-js\";\nexport * from \"chroma-js\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"maplibre-gl\";\nexport * from \"maplibre-gl\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/ui-utils/i18n\";\nexport * from \"@splunk/ui-utils/i18n\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-ui/Button\";\nexport * from \"@splunk/react-ui/Button\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-ui/Tooltip\";\nexport * from \"@splunk/react-ui/Tooltip\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualization-context/MapContext\";\nexport * from \"@splunk/visualization-context/MapContext\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualization-schemas\";\nexport * from \"@splunk/visualization-schemas\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "export const getFloatingLayerStyleTarget = (anchor?: HTMLElement | null): HTMLElement | undefined => {\n if (!anchor || typeof anchor.getRootNode !== 'function') {\n return undefined;\n }\n\n const rootNode = anchor.getRootNode();\n\n if (typeof ShadowRoot !== 'undefined' && rootNode instanceof ShadowRoot) {\n return anchor.ownerDocument.head;\n }\n\n return undefined;\n};\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/style\";\nexport * from \"@splunk/visualizations-shared/style\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"maplibre-gl/dist/maplibre-gl.css\";\nexport * from \"maplibre-gl/dist/maplibre-gl.css\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/iconUtils\";\nexport * from \"@splunk/visualizations-shared/iconUtils\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/RemoteIcon\";\nexport * from \"@splunk/visualizations-shared/RemoteIcon\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualization-context/FeatureFlagContext\";\nexport * from \"@splunk/visualization-context/FeatureFlagContext\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/ui-utils/format\";\nexport * from \"@splunk/ui-utils/format\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "export const KEYBOARD_KEYS = {\n ARROW_RIGHT: 'ArrowRight',\n ARROW_LEFT: 'ArrowLeft',\n ARROW_UP: 'ArrowUp',\n ARROW_DOWN: 'ArrowDown',\n HOME: 'Home',\n END: 'End',\n ENTER: 'Enter',\n SPACE: ' ',\n} as const;\n", "\nimport * as defaultImport from \"@splunk/react-ui/Popover\";\nexport * from \"@splunk/react-ui/Popover\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/themes\";\nexport * from \"@splunk/themes\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/ui-utils/id\";\nexport * from \"@splunk/ui-utils/id\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as React from 'react';\nimport styled, { StyleSheetManager } from 'styled-components';\nimport Popover from '@splunk/react-ui/Popover';\nimport { isRemoteIcon, isDataURI } from '@splunk/visualizations-shared/iconUtils';\nimport { _ } from '@splunk/ui-utils/i18n';\nimport FeatureFlagContext from '@splunk/visualization-context/FeatureFlagContext';\nimport RemoteIcon from '@splunk/visualizations-shared/RemoteIcon';\nimport { variables } from '@splunk/themes';\nimport { createDOMID } from '@splunk/ui-utils/id';\nimport { getFloatingLayerStyleTarget } from '../../common/utils/shadowDomUtils';\n\ntype FeatureFlagContextValue = Record<string, boolean | undefined> | null;\n\nconst StyledPopover = styled(Popover)`\n min-width: 250px;\n max-width: 332px;\n max-width: fit-content;\n font-size: 12px;\n`;\n\nconst StyledTable = styled.table`\n margin: 2px 6px 2px 6px;\n width: calc(100% - 12px);\n`;\n\nconst StyledTitleColumn = styled.td`\n opacity: 0.85;\n word-break: break-all;\n vertical-align: top;\n`;\n\nconst StyledValueColumn = styled.td`\n text-align: right;\n word-break: break-all;\n vertical-align: top;\n`;\n\nconst StyledColorBlock = styled.div`\n background-color: ${props => props.color};\n display: inline-block;\n margin-right: 4px;\n border-radius: 2px;\n width: 6px;\n height: 11px;\n transform: translateY(1px);\n`;\n\nconst StyledIconWrapper = styled.span`\n margin-left: 4px;\n display: inline-block;\n vertical-align: middle;\n`;\n\nconst StyledTooltipHeader = styled.thead`\n th {\n height: 16px;\n color: ${variables.contentColorActive};\n padding: 0;\n }\n\n span {\n display: block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n width: 100%;\n }\n`;\n\nexport const convertDegToDMS = (decimalDegree: number, type: 'latitude' | 'longitude'): string => {\n const truncate = n => (n > 0 ? Math.floor(n) : Math.ceil(n));\n const absoluteDegree = Math.abs(decimalDegree);\n let degrees = truncate(absoluteDegree);\n let minutes = truncate((absoluteDegree - degrees) * 60);\n let seconds = Math.round((absoluteDegree - degrees - minutes / 60) * 3600);\n if (seconds === 60) {\n minutes += 1;\n seconds = 0;\n }\n if (minutes === 60) {\n degrees += 1;\n minutes = 0;\n }\n let direction: string;\n if (type === 'longitude') {\n direction = decimalDegree < 0 ? 'W' : 'E';\n } else if (type === 'latitude') {\n direction = decimalDegree < 0 ? 'S' : 'N';\n }\n return `${degrees}\u00B0 ${minutes}' ${seconds}\" ${direction}`;\n};\n\nexport interface TooltipProps {\n id?: string;\n open?: boolean;\n anchor?: HTMLElement;\n latitude?: number;\n longitude?: number;\n areaId?: string;\n areaValue?: number;\n additionalFields?: Array<{ name: string; value: number | string; color?: string; icon?: string }>;\n showCoordinates?: boolean;\n tooltipHeader?: string;\n stylesManagedExternally?: boolean;\n onMouseEnter?: (e: React.MouseEvent) => void;\n onMouseLeave?: (e: React.MouseEvent) => void;\n}\n// only want latitude/longitude for marker and bubble\n// omit for choropleth, and put areaid, areavalue instead\nconst Tooltip = ({\n id,\n open,\n anchor,\n latitude,\n longitude,\n areaId,\n areaValue,\n additionalFields = [],\n showCoordinates = true,\n tooltipHeader = null,\n stylesManagedExternally = false,\n onMouseEnter,\n onMouseLeave,\n}: TooltipProps): JSX.Element => {\n const featureFlagContext = React.useContext<FeatureFlagContextValue>(FeatureFlagContext);\n const isTooltipIconFlagEnabled = Boolean(featureFlagContext?.visualizations_enableTooltipIcon);\n const styleTarget = stylesManagedExternally ? undefined : getFloatingLayerStyleTarget(anchor);\n\n const popover = (\n <StyledPopover\n id={id}\n role=\"tooltip\"\n open={open}\n animation={false}\n anchor={anchor}\n data-test=\"map-marker-tooltip\"\n defaultPlacement=\"above\"\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n <StyledTable>\n {tooltipHeader && (\n <StyledTooltipHeader data-test=\"tooltip-header\">\n <tr>\n <th colSpan={2}>\n <span data-test=\"tooltip-header-value\">{tooltipHeader}</span>\n </th>\n </tr>\n </StyledTooltipHeader>\n )}\n <tbody>\n {Boolean(areaId && areaValue) && (\n <tr>\n <StyledTitleColumn data-test=\"area-id\">{areaId}</StyledTitleColumn>\n <StyledValueColumn data-test=\"area-value\">{areaValue}</StyledValueColumn>\n </tr>\n )}\n {Boolean(showCoordinates && latitude) && (\n <tr>\n <StyledTitleColumn>{_('Latitude')}</StyledTitleColumn>\n <StyledValueColumn data-test=\"latitude\">\n {convertDegToDMS(latitude, 'latitude')}\n </StyledValueColumn>\n </tr>\n )}\n {Boolean(showCoordinates && longitude) && (\n <tr>\n <StyledTitleColumn>{_('Longitude')}</StyledTitleColumn>\n <StyledValueColumn data-test=\"longitude\">\n {convertDegToDMS(longitude, 'longitude')}\n </StyledValueColumn>\n </tr>\n )}\n {additionalFields\n .filter(({ value }) => value && String(value) !== '0')\n .map(({ name, value, color, icon }) => (\n <tr key={createDOMID()}>\n <StyledTitleColumn data-test=\"field-title\">\n {color ? (\n <StyledColorBlock data-test=\"field-color\" color={color} />\n ) : null}\n <span>\n {name}\n {isTooltipIconFlagEnabled &&\n icon &&\n (isRemoteIcon(icon) || isDataURI(icon)) ? (\n <StyledIconWrapper data-test=\"field-icon\">\n <RemoteIcon iconURL={icon} width={16} height={16} />\n </StyledIconWrapper>\n ) : null}\n </span>\n </StyledTitleColumn>\n <StyledValueColumn data-test=\"field-value\">{value}</StyledValueColumn>\n </tr>\n ))}\n </tbody>\n </StyledTable>\n </StyledPopover>\n );\n\n return styleTarget ? <StyleSheetManager target={styleTarget}>{popover}</StyleSheetManager> : popover;\n};\n\nexport default Tooltip;\n", "\nimport * as defaultImport from \"d3-scale\";\nexport * from \"d3-scale\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualization-color-palettes\";\nexport * from \"@splunk/visualization-color-palettes\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualization-encoding/utils/types\";\nexport * from \"@splunk/visualization-encoding/utils/types\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import { forEach, sum, isNumber, min as lodashMin, max as lodashMax, get, isEqual, isObject } from 'lodash';\nimport { LngLatBoundsLike } from 'maplibre-gl';\nimport { scalePow } from 'd3-scale';\nimport chroma from 'chroma-js';\nimport type { MapContextInterface, BaseTileConfig } from '@splunk/visualization-context/MapContext';\nimport { isColor } from '@splunk/visualizations-shared/colorUtils';\nimport { VIZ_CATEGORICAL } from '@splunk/visualization-color-palettes';\nimport { isNumber as isNumberUtil } from '@splunk/visualization-encoding/utils/types';\nimport type { GeoJsonDataType } from '@splunk/visualizations-shared/mapUtils';\nimport { LAYER_TYPE } from '@splunk/visualization-schemas';\n\nexport const MAX_LATITUDE = 90;\nexport const MIN_LATITUDE = -90;\nexport const MAX_LONGITUDE = 180;\nexport const MIN_LONGITUDE = -180;\nexport const DEFAULT_RESULT_LIMIT = 1000;\nexport const DEFAULT_CLUSTER_COLOR = '#909090';\nexport const DEFAULT_SERIES_COLORS = VIZ_CATEGORICAL;\n// MapLibre requires a map style specification number which is always 8\nexport const MAP_STYLE_VERSION_NUMBER = 8;\n// currently using one [min, max] value set for bubbles across all zoom levels\nexport const MIN_BUBBLE_RADIUS = 7.11; // 10px\nexport const MAX_BUBBLE_RADIUS = 45.26; // 85px\nexport const DEFAULT_OPACITY = 0.8;\nconst LONGITUDE = 'longitude';\nconst LATITUDE = 'latitude';\nexport type MaybeBaseTileConfig = BaseTileConfig | Record<string, never>;\ninterface GenericLayerType {\n type: string;\n latitude: number[];\n longitude: number[];\n dataColors?: string[] | '';\n seriesColors: string[];\n additionalTooltipFields?: string[];\n tooltipHeaderField?: string[];\n resultLimit: number;\n metadata?: Array<{ [key: string]: number | string }>;\n}\n\nexport interface MarkerLayerType extends GenericLayerType {\n type: LAYER_TYPE.Marker;\n}\n\nexport interface BubbleLayerType extends GenericLayerType {\n type: LAYER_TYPE.Bubble;\n bubbleSize?: number[][] | number[];\n bubbleSizeFields: string[];\n dataValuesField?: string;\n tooltipHeaderFieldName?: string;\n geobin?: string[];\n icon?: string[];\n tooltipFieldIcons?: string;\n}\n\ninterface BubbleLayerDatumType {\n zoom?: number | null;\n values: number[];\n sanitizedValues: number[];\n coordinates: number[];\n}\n\nexport interface BubbleLayerDataType {\n data: BubbleLayerDatumType[];\n dataRange: number[];\n isPie: boolean;\n resultLimit: number;\n bubbleSizeFields: string[];\n}\n\nexport interface ChoroplethLayerType {\n type: LAYER_TYPE.Choropleth;\n areaIds: string[];\n areaValues: number[];\n dataColors: string[];\n additionalTooltipFields?: string[];\n tooltipHeaderField?: string[];\n geom?: GeoJsonDataType[] | null;\n resultLimit?: number;\n metadata?: Array<{ [key: string]: number | string | GeoJsonDataType }>;\n source?: string;\n width?: string | number;\n height?: string | number;\n choroplethEmptyAreaColor?: string;\n choroplethStrokeColor?: string;\n choroplethOpacity?: number;\n}\n\nexport interface MapLayerClickPayloadType {\n name?: string;\n value?: string | number;\n /* cell values of all cells of clicked row with the field and value - in shape row.<field>.value */\n [key: string]: string | number;\n}\n\nexport type ClusterLayerType = BubbleLayerType | MarkerLayerType;\nexport type LayerType = ClusterLayerType | ChoroplethLayerType;\n/**\n * Construct a tile preset {key: config} by combining the default + custom tile configs\n * Also returns the default tile config for each theme - light/dark\n * @param {MapContextInterface} args\n * @param {BaseTileConfig[]} args.defaultTileConfig\n * @param {BaseTileConfig[]} args.customTileConfig\n * @returns {Object} tile preset\n */\nexport const getTilePreset = ({\n defaultTileConfig = [],\n customTileConfig = [],\n}: MapContextInterface): {\n tilePreset: Record<string, BaseTileConfig>;\n defaultTileLight: MaybeBaseTileConfig;\n defaultTileDark: MaybeBaseTileConfig;\n} => {\n const tilePreset: Record<string, BaseTileConfig> = {};\n let defaultTileLight: MaybeBaseTileConfig = {};\n let defaultTileDark: MaybeBaseTileConfig = {};\n const tileConfigs = [...defaultTileConfig, ...customTileConfig];\n forEach(tileConfigs, tileConfig => {\n const key = tileConfig?.key;\n if (!key) {\n return;\n }\n const updatedConfig: BaseTileConfig = {\n ...tileConfig,\n version: MAP_STYLE_VERSION_NUMBER,\n };\n tilePreset[key] = updatedConfig;\n });\n\n if (defaultTileConfig.length > 0) {\n defaultTileLight =\n defaultTileConfig.find(config => config.theme === 'light') ??\n defaultTileConfig.find(config => config.theme === undefined) ??\n {};\n defaultTileDark =\n defaultTileConfig.find(config => config.theme === 'dark') ??\n defaultTileConfig.find(config => config.theme === undefined) ??\n {};\n }\n\n return { tilePreset, defaultTileLight, defaultTileDark };\n};\n\n/**\n * Check if baseLayerTileServer is in tilePreset and config matches current theme, if yes, return.\n * If no, construct a mapStyle with baseLayerTilerServer and baseLayerTileServerType\n * Else return default tile config based on current theme\n * @param {Object} args\n * @param {BaseTileConfig[]} args.tilePreset\n * @param {String} args.baseLayerTilerServer\n * @param {String} args.baseLayerTileServerType\n * @param {String} args.colorScheme\n * @param {BaseTileConfig} args.defaultTileDark\n * @param {BaseTileConfig} args.defaultTileLight\n * @returns {BaseTileConfig} mapStyle\n */\nexport const getMapStyle = ({\n showBaseLayer,\n baseLayerTileServer = '',\n baseLayerTileServerType = '',\n tilePreset = {},\n colorScheme = 'light',\n defaultTileLight = {},\n defaultTileDark = {},\n}: {\n showBaseLayer: boolean;\n baseLayerTileServer?: string;\n baseLayerTileServerType?: string;\n tilePreset?: Record<string, BaseTileConfig>;\n colorScheme?: string;\n defaultTileLight?: MaybeBaseTileConfig;\n defaultTileDark?: MaybeBaseTileConfig;\n}): MaybeBaseTileConfig => {\n if (!showBaseLayer) {\n return {\n name: 'empty-base-layer',\n key: 'empty-base-layer',\n version: MAP_STYLE_VERSION_NUMBER,\n sources: {\n 'base-tiles': {\n type: 'raster',\n tiles: [\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=',\n ],\n tileSize: 256,\n },\n },\n layers: [\n {\n id: 'base-layer',\n type: 'raster',\n source: 'base-tiles',\n minzoom: 0,\n maxzoom: 22,\n },\n ],\n };\n }\n\n if (\n baseLayerTileServer &&\n tilePreset[baseLayerTileServer] &&\n (!tilePreset[baseLayerTileServer].theme || tilePreset[baseLayerTileServer].theme === colorScheme)\n ) {\n return tilePreset[baseLayerTileServer];\n }\n\n if (baseLayerTileServer && baseLayerTileServerType) {\n let tiles: string[] = [];\n /**\n * Tile Server URLs (eg: http://{s}.somedomain.com/blabla/{z}/{x}/{y}{r}.png) can specify the variable {s} which refers to a subdomain\n * Subdomains are used to help with browser parallel requests per domain limitation. These subdomains are typically single letters 'a', 'b' and 'c'\n * Refer to https://leafletjs.com/SlavaUkraini/reference.html#tilelayer and https://wiki.openstreetmap.org/wiki/Tile_servers\n */\n if (/^(https?):\\/\\/{[sS]}\\./.exec(baseLayerTileServer)) {\n /**\n * sXML (Leaflet) allows users to define their own tile server URLs + list of available subdomains\n * In order to preserve this behavior during conversion to splunk.map,\n * if the variable {s} or {S} is detected, replace it with 'a', 'b' and 'c' - default values for subdomains\n */\n tiles = [\n baseLayerTileServer.replace(/{[sS]}/, 'a'),\n baseLayerTileServer.replace(/{[sS]}/, 'b'),\n baseLayerTileServer.replace(/{[sS]}/, 'c'),\n ];\n } else {\n tiles = [baseLayerTileServer];\n }\n const mapStyle: BaseTileConfig = {\n name: baseLayerTileServer,\n key: baseLayerTileServer,\n version: MAP_STYLE_VERSION_NUMBER,\n sources: {\n 'base-tiles': {\n type: baseLayerTileServerType,\n tiles,\n tileSize: 256,\n },\n },\n layers: [\n {\n id: 'base-layer',\n type: 'raster',\n source: 'base-tiles',\n minzoom: 0,\n maxzoom: 24, // https://maplibre.org/maplibre-gl-js-docs/api/map/\n },\n ],\n };\n return mapStyle;\n }\n\n // if tile server is not present in the preset AND we can't construct a mapStyle, fall back on defaults\n return colorScheme === 'light' ? defaultTileLight : defaultTileDark;\n};\n\nexport interface ZoomConstraints {\n minZoom: number;\n maxZoom: number;\n}\n\nexport const getZoomConstraintsFromTileConfig = (\n tileConfig: BaseTileConfig,\n baseLayerTileServer?: string\n): ZoomConstraints => {\n const { sources, layers } = tileConfig;\n let matchedBaseLayerTileServer = false;\n // check sources for minzoom maxzoom first\n const sourceKeys = Object.keys(sources);\n for (const key of sourceKeys) {\n const source = sources[key] as { [key: string]: unknown };\n const { minzoom, maxzoom } = source;\n const tiles = Array.isArray(source?.tiles) ? (source.tiles as string[]) : [];\n if (baseLayerTileServer && tiles.includes(baseLayerTileServer)) {\n matchedBaseLayerTileServer = true;\n }\n if (\n ((baseLayerTileServer && matchedBaseLayerTileServer) || !baseLayerTileServer) &&\n isNumber(minzoom) &&\n isNumber(maxzoom)\n ) {\n return {\n minZoom: minzoom,\n maxZoom: maxzoom,\n };\n }\n }\n // then check layers\n for (const layer of layers) {\n const { minzoom, maxzoom } = layer;\n if (\n ((baseLayerTileServer && matchedBaseLayerTileServer) || !baseLayerTileServer) &&\n isNumber(minzoom) &&\n isNumber(maxzoom)\n ) {\n return {\n minZoom: minzoom,\n maxZoom: maxzoom,\n };\n }\n }\n // Maplibre default - would reset previous min/maxZoom https://maplibre.org/maplibre-gl-js-docs/api/map/\n return {\n minZoom: 0,\n maxZoom: 24,\n };\n};\n\nexport const isBaseTileConfig = (config: MaybeBaseTileConfig): config is BaseTileConfig =>\n Boolean(config && 'name' in config && 'key' in config && 'sources' in config && 'layers' in config);\n\nexport const getZoomLevelFromGeobin = (geobinStr?: string | null): number | null => {\n if (!geobinStr) {\n return null;\n }\n // geostats cmds return geobin with zoom level 0-18, 0-99 in the geobinPattern covers the range\n const geobinPattern = /bin_id_zl_(\\d{1,2})_y_/g;\n const match = geobinPattern.exec(geobinStr);\n return (match?.length && Number.parseInt(match[1], 10)) ?? null;\n};\n\n// Bubble colors - static\nexport const getStaticColors = (colorCount: number, colorArray: string[]): string[] => {\n if (colorCount < 0 || !colorCount) {\n return [DEFAULT_CLUSTER_COLOR];\n }\n if (!colorArray?.length) {\n return [...new Array(colorCount).keys()].map(i => DEFAULT_SERIES_COLORS[i]);\n }\n // loop through colorArray to pick the first $colorCount colors\n // start from begining again if colorCount > colorArray.length\n return [...new Array(colorCount).keys()].map(i =>\n isColor(colorArray[i % colorArray.length]) ? colorArray[i % colorArray.length] : DEFAULT_CLUSTER_COLOR\n );\n};\n\n// Bubble size\nexport const matchBubbleSize = (dataRange: number[], data: number): any => {\n const size = scalePow().exponent(0.2).domain(dataRange).range([MIN_BUBBLE_RADIUS, MAX_BUBBLE_RADIUS])(\n data\n );\n\n if (size > MAX_BUBBLE_RADIUS) {\n return MAX_BUBBLE_RADIUS;\n }\n if (size < MIN_BUBBLE_RADIUS) {\n return MIN_BUBBLE_RADIUS;\n }\n return size;\n};\n\nexport const transposeArray = (array: number[][]): number[][] => {\n if (!array?.length || !array[0]?.length) {\n return [];\n }\n return array[0].map((_, i) => array.map(row => row[i]));\n};\n\n// sanitize values: update all null, undefined, or negative values to 0\nexport const sanitizeValues = (values: number[] | number[][]) => {\n // null / undefined\n if (!values) {\n return 0;\n }\n // number\n if (!Array.isArray(values)) {\n return Math.max(values, 0);\n }\n // array\n return values.map(arr => sanitizeValues(arr));\n};\n\n// eslint-disable-next-line consistent-return\nexport const sortByValuesField = (bubbleLayer: BubbleLayerType) => {\n const { bubbleSizeFields, dataValuesField } = bubbleLayer;\n\n // Find the index of dataValuesField in fields\n const index = bubbleSizeFields.indexOf(dataValuesField);\n if (index === -1) return bubbleLayer; // If not found, return as is\n\n // Move dataValuesField and corresponding sizes to the first position\n bubbleLayer.bubbleSizeFields.unshift(bubbleLayer.bubbleSizeFields.splice(index, 1)[0]);\n bubbleLayer.bubbleSize.unshift(bubbleLayer.bubbleSize.splice(index, 1)[0] as number & number[]);\n};\n\nexport const bakeBubbleData = (layer: BubbleLayerType): BubbleLayerDataType => {\n if (!layer?.bubbleSize?.length || !layer?.latitude?.length || !layer?.longitude?.length) {\n return null;\n }\n const hasGeobinData = Array.isArray(layer.geobin) && layer.geobin.length > 0;\n // if bubbleSize is passed as an array of single number array (data series)\n // e.g. [value0, value1, ...]\n // format each value as an array to unify data operations for data series and frames\n const sanitizedBubbleSize = sanitizeValues(layer.bubbleSize);\n let transposedBubbleSize: number[][];\n let transposedSanitizedBubbleSize: number[][];\n let isPie = false;\n // format array if bubbleSize is passed as an array of array (data frame)\n if (Array.isArray(layer.bubbleSize[0])) {\n // one-time array transpose,\n // e.g. from [column0data, column0data] (multi series)\n // to [[column0datum0, column1datum0], [column0datum1, column1data1], ...]\n // or e.g. from [column0data] (single series)\n // to [[column0data]]\n // for easy access of values at each geo location,\n // and min max pie size computation\n transposedBubbleSize = transposeArray(layer.bubbleSize as number[][]);\n transposedSanitizedBubbleSize = transposeArray(sanitizedBubbleSize);\n // if multiple series in the dataframe, set isPie to true\n if (layer.bubbleSize.length > 1) {\n isPie = true;\n // when dynamic coloring is enabled,\n // set the configured dataValues field as the first field\n // to apply dynamic colors only to the first pie slice.\n if (layer.dataValuesField && !!layer.dataColors) {\n sortByValuesField(layer); // here\n }\n }\n } else {\n transposedBubbleSize = layer.bubbleSize.map(n => [n]);\n transposedSanitizedBubbleSize = sanitizedBubbleSize.map(n => [n]);\n }\n if (!transposedBubbleSize?.length) {\n return null;\n }\n const data = layer.latitude\n .map((lat, i) => ({\n zoom: hasGeobinData ? getZoomLevelFromGeobin(layer.geobin[i]) : null,\n values: transposedBubbleSize[i],\n sanitizedValues: transposedSanitizedBubbleSize[i],\n coordinates: [layer.longitude[i], lat],\n metadata: layer.metadata ? layer.metadata[i] : {},\n }))\n .filter(d => Boolean(d.values));\n\n // compute the min/max value to encode min/max pie or bubble size\n let min = sum(transposedSanitizedBubbleSize[0]);\n let max = min;\n transposedSanitizedBubbleSize.forEach(row => {\n const bubbleSize = sum(row);\n max = Math.max(bubbleSize, max);\n min = Math.min(bubbleSize, min);\n });\n return {\n data,\n dataRange: [min, max],\n isPie,\n resultLimit: layer.resultLimit,\n bubbleSizeFields: layer.bubbleSizeFields,\n };\n};\n\nexport const isValidLatLon = (latlon: Array<number | string>): boolean => {\n if (!latlon || !Array.isArray(latlon) || latlon.length !== 2) {\n return false;\n }\n const [lat, lon] = latlon;\n if (!isNumberUtil(lat) || !(Number(lat) >= MIN_LATITUDE && Number(lat) <= MAX_LATITUDE)) {\n return false;\n }\n if (!isNumberUtil(lon) || !(Number(lon) >= MIN_LONGITUDE && Number(lon) <= MAX_LONGITUDE)) {\n return false;\n }\n return true;\n};\n\nexport const getChoroplethValues = (field: string, choroplethLayer: ChoroplethLayerType): number[] => {\n if (!Array.isArray(choroplethLayer.geom) || choroplethLayer.geom.length === 0) {\n return [];\n }\n const limit = choroplethLayer.resultLimit ?? DEFAULT_RESULT_LIMIT;\n const slicedGeomList = choroplethLayer.geom.slice(0, limit);\n const flatCoordinates = slicedGeomList.flatMap(geomObject => {\n if (!geomObject) {\n return [];\n }\n if (geomObject.type === 'MultiPolygon') {\n return geomObject.coordinates.flat(2);\n }\n if (geomObject.type === 'Polygon') {\n return geomObject.coordinates.flat();\n }\n return [];\n });\n return flatCoordinates.map(coord => coord[field === LONGITUDE ? 0 : 1]);\n};\n\n/**\n * Returns a list of all lat or lon coordinates used in a specified layer\n * @param {LayerType[]} layer\n * @param {string} field\n * @returns {number[]} list of lat coordinates or lon coordinates\n */\nconst getLatOrLonCoordinates = (layer: LayerType, field: string): number[] => {\n const getClusterValues = (clusterLayer: ClusterLayerType): number[] =>\n get(clusterLayer, field, []).slice(\n 0,\n clusterLayer.type === LAYER_TYPE.Marker && clusterLayer.resultLimit\n ? clusterLayer.resultLimit\n : DEFAULT_RESULT_LIMIT\n );\n return layer.type === LAYER_TYPE.Choropleth ? getChoroplethValues(field, layer) : getClusterValues(layer);\n};\n\n/**\n * Returns the min and max LongLat pairs to determine the layer boundaries to fit all markers/bubbles\n * @param {LayerType[]} layers\n * @returns {LngLatBoundsLike}\n */\nexport const getGlobalLayerBoundaries = (layers: LayerType[]): LngLatBoundsLike => {\n const isLayerValid = (field: string): boolean =>\n layers.every(layer => layer[field] || (layer as ChoroplethLayerType).geom);\n const getDefaultMax = (field: string) => (field === LONGITUDE ? MAX_LONGITUDE : MAX_LATITUDE);\n const getDefaultMin = (field: string) => (field === LONGITUDE ? MIN_LONGITUDE : MIN_LATITUDE);\n\n if (!layers || !Array.isArray(layers) || !layers.length) {\n return null;\n }\n\n const getMin = (field: string): number => {\n if (!isLayerValid(field)) {\n return getDefaultMin(field);\n }\n return layers.reduce((prevVal, layer) => {\n const coordinatesNumArr = getLatOrLonCoordinates(layer, field).map(x => +x);\n return lodashMin([prevVal, ...coordinatesNumArr]);\n }, getDefaultMax(field));\n };\n\n const getMax = (field: string): number => {\n if (!isLayerValid(field)) {\n return getDefaultMax(field);\n }\n return layers.reduce((prevVal, layer) => {\n const coordinatesNumArr = getLatOrLonCoordinates(layer, field).map(Number);\n return lodashMax([prevVal, ...coordinatesNumArr]);\n }, getDefaultMin(field));\n };\n\n return [\n [getMin(LONGITUDE), getMin(LATITUDE)],\n [getMax(LONGITUDE), getMax(LATITUDE)],\n ];\n};\n\nexport const formatTooltipFieldValue = (value: unknown): string | number => {\n if (value === null || value === undefined) {\n return '';\n }\n if (typeof value === 'string' || typeof value === 'number') {\n return value;\n }\n return JSON.stringify(value);\n};\n\nexport const getScaledOpacities = (colors: string[], cfgOpacity: number): number[] => {\n // extract opacity information from 8 digit hex codes\n const opacities = colors?.map(color => (color?.length === 9 ? (chroma(color).alpha() ?? 1) : 1));\n // opacity cannot be greater than configured opacity\n return opacities?.map(opacity => opacity * cfgOpacity);\n};\n\nexport const compareBaseStyles = (curr, next): boolean => {\n const currBaseLayer = curr?.layers?.find(layer => layer?.id === 'base-layer');\n const nextBaseLayer = next?.layers?.find(layer => layer?.id === 'base-layer');\n const currBaseSource = get(curr?.sources, (currBaseLayer?.source as string) ?? '');\n const nextBaseSource = get(next?.sources, (nextBaseLayer?.source as string) ?? '');\n\n if (!currBaseLayer || !nextBaseLayer || !currBaseSource || !nextBaseSource) {\n return false;\n }\n\n return isEqual(currBaseLayer, nextBaseLayer) && isEqual(currBaseSource, nextBaseSource);\n};\n\nexport const formatMetadata = (\n choroplethLayer: ChoroplethLayerType,\n i: number\n): { [key: string]: string } => {\n if (!choroplethLayer?.areaIds || !choroplethLayer?.areaValues) return {};\n if (i >= choroplethLayer.areaIds.length) return {};\n\n const metadata = choroplethLayer.metadata ? choroplethLayer.metadata[i] : {};\n const name = choroplethLayer.areaIds[i];\n const value = choroplethLayer.areaValues[i];\n const base = { name, value: String(value) };\n\n return Object.keys(metadata).reduce((result, curr) => {\n const key = `row.${curr}.value`;\n const val = isObject(metadata[curr]) ? JSON.stringify(metadata[curr]) : String(metadata[curr]);\n return { ...result, [key]: val };\n }, base);\n};\n", "import * as React from 'react';\n\ninterface MapContextValue {\n activeTooltipId: string | null;\n setActiveTooltipId: (id: string | null | ((prev: string | null) => string | null)) => void;\n activeChoroplethId: string | null;\n setActiveChoroplethId: (id: string | null) => void;\n}\n\nconst MapContext = React.createContext<MapContextValue>({\n activeTooltipId: null,\n setActiveTooltipId: () => {},\n activeChoroplethId: null,\n setActiveChoroplethId: () => {},\n});\n\nexport const MapProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\n const [activeTooltipId, setActiveTooltipId] = React.useState<string | null>(null);\n const [activeChoroplethId, setActiveChoroplethId] = React.useState<string | null>(null);\n\n const value = React.useMemo(\n () => ({\n activeTooltipId,\n setActiveTooltipId,\n activeChoroplethId,\n setActiveChoroplethId,\n }),\n [activeTooltipId, activeChoroplethId]\n );\n\n return <MapContext.Provider value={value}>{children}</MapContext.Provider>;\n};\n\nexport const useMapContext = () => React.useContext(MapContext);\n", "import type { Map } from 'maplibre-gl';\nimport { Marker } from 'maplibre-gl';\nimport * as React from 'react';\nimport { createDOMID } from '@splunk/ui-utils/id';\nimport Tooltip from './Tooltip';\nimport type { TooltipProps } from './Tooltip';\nimport { useMapContext } from './MapContext';\n\nexport interface MarkerWrapperProps extends React.HTMLAttributes<HTMLDivElement> {\n latitude: number;\n longitude: number;\n areaId?: string;\n areaValue?: number;\n additionalFields?: TooltipProps['additionalFields'];\n tooltipHeader?: TooltipProps['tooltipHeader'];\n map: React.MutableRefObject<Map>;\n showCoordinates?: boolean;\n stylesManagedExternally?: boolean;\n customMarkerId?: string;\n}\n\nconst MarkerWrapper = ({\n longitude,\n latitude,\n areaId,\n areaValue,\n additionalFields = [],\n tooltipHeader = null,\n map,\n children,\n showCoordinates = true,\n stylesManagedExternally = false,\n customMarkerId,\n ...otherProps\n}: MarkerWrapperProps): JSX.Element => {\n const container = React.useRef<HTMLDivElement>();\n const marker = React.useRef<Marker>();\n const [isTooltipOpen, setTooltipOpenStatus] = React.useState(false);\n const [isFocused, setIsFocused] = React.useState(false);\n const [isHovered, setIsHovered] = React.useState(false);\n const [isPopoverHovered, setIsPopoverHovered] = React.useState(false);\n const tooltipId = React.useMemo(() => createDOMID(), []);\n const pendingMoveEndHandler = React.useRef<(() => void) | null>(null);\n const closeTimeoutRef = React.useRef<NodeJS.Timeout | null>(null);\n const generatedMarkerId = React.useMemo(() => createDOMID(), []);\n const markerId = customMarkerId || generatedMarkerId;\n const { activeTooltipId, setActiveTooltipId } = useMapContext();\n const mapMoveHandlerRef = React.useRef<(() => void) | null>(null);\n\n const openTooltip = React.useCallback(() => {\n setActiveTooltipId(markerId);\n setTooltipOpenStatus(true);\n }, [markerId, setActiveTooltipId]);\n\n const cleanupPendingMoveEnd = React.useCallback(() => {\n if (pendingMoveEndHandler.current && map.current && typeof map.current.off === 'function') {\n map.current.off('moveend', pendingMoveEndHandler.current);\n pendingMoveEndHandler.current = null;\n }\n }, [map]);\n\n const cleanupMapMoveHandler = React.useCallback(() => {\n if (mapMoveHandlerRef.current && map.current && typeof map.current.off === 'function') {\n map.current.off('move', mapMoveHandlerRef.current);\n mapMoveHandlerRef.current = null;\n }\n }, [map]);\n\n // Consolidated close logic: only close if nothing is keeping tooltip open\n const shouldCloseTooltip = React.useCallback(\n (focused: boolean, hovered: boolean, popoverHovered: boolean) => {\n return !focused && !hovered && !popoverHovered;\n },\n []\n );\n\n const cancelCloseTimeout = React.useCallback(() => {\n if (closeTimeoutRef.current) {\n clearTimeout(closeTimeoutRef.current);\n closeTimeoutRef.current = null;\n }\n }, []);\n\n const closeTooltipIfShould = React.useCallback(\n (focused: boolean, hovered: boolean, popoverHovered: boolean) => {\n cancelCloseTimeout();\n\n if (shouldCloseTooltip(focused, hovered, popoverHovered)) {\n // Small delay to allow mouse to reach tooltip\n closeTimeoutRef.current = setTimeout(() => {\n setTooltipOpenStatus(false);\n setActiveTooltipId(currentId => (currentId === markerId ? null : currentId));\n closeTimeoutRef.current = null;\n }, 100);\n }\n },\n [shouldCloseTooltip, markerId, setActiveTooltipId, cancelCloseTimeout]\n );\n\n const handleMouseEnter = React.useCallback(() => {\n cancelCloseTimeout();\n setIsHovered(true);\n openTooltip();\n }, [openTooltip, cancelCloseTimeout]);\n\n const handleMouseLeave = React.useCallback(() => {\n setIsHovered(false);\n closeTooltipIfShould(isFocused, false, isPopoverHovered);\n }, [isFocused, isPopoverHovered, closeTooltipIfShould]);\n\n const handlePopoverMouseEnter = React.useCallback(() => {\n cancelCloseTimeout();\n setIsPopoverHovered(true);\n }, [cancelCloseTimeout]);\n\n const handlePopoverMouseLeave = React.useCallback(() => {\n setIsPopoverHovered(false);\n closeTooltipIfShould(isFocused, isHovered, false);\n }, [isFocused, isHovered, closeTooltipIfShould]);\n\n const handleBlur = React.useCallback(() => {\n setIsFocused(false);\n cleanupPendingMoveEnd();\n closeTooltipIfShould(false, isHovered, isPopoverHovered);\n }, [isHovered, isPopoverHovered, cleanupPendingMoveEnd, closeTooltipIfShould]);\n\n const handleEscapeKey = React.useCallback(\n (e: KeyboardEvent) => {\n if (e.key === 'Escape' && activeTooltipId === markerId) {\n cancelCloseTimeout();\n setIsFocused(false);\n setIsHovered(false);\n setIsPopoverHovered(false);\n cleanupPendingMoveEnd();\n setTooltipOpenStatus(false);\n setActiveTooltipId(null);\n }\n },\n [activeTooltipId, markerId, cleanupPendingMoveEnd, setActiveTooltipId, cancelCloseTimeout]\n );\n\n const handleFocus = React.useCallback(() => {\n // Clean up any pending moveend handler from previous focus\n cleanupPendingMoveEnd();\n\n // Pan map to show focused datapoint if it's outside current bounds\n if (\n map.current &&\n longitude !== undefined &&\n latitude !== undefined &&\n typeof map.current.once === 'function'\n ) {\n const bounds = map.current.getBounds();\n if (!bounds.contains([longitude, latitude])) {\n // Set focused state and open tooltip after pan completes\n const moveEndHandler = () => {\n pendingMoveEndHandler.current = null;\n setIsFocused(true);\n openTooltip();\n };\n pendingMoveEndHandler.current = moveEndHandler;\n map.current.once('moveend', moveEndHandler);\n map.current.panTo([longitude, latitude]);\n return;\n }\n }\n // No pan needed, set focused immediately\n setIsFocused(true);\n openTooltip();\n }, [openTooltip, map, longitude, latitude, cleanupPendingMoveEnd]);\n\n const cleanupMarker = React.useCallback(() => {\n if (marker.current) {\n marker.current.remove();\n marker.current = undefined;\n }\n }, []);\n\n React.useEffect(() => {\n try {\n if (marker.current) {\n marker.current.setLngLat([longitude, latitude]);\n } else {\n marker.current = new Marker({ element: container.current });\n marker.current.setLngLat([longitude, latitude]);\n marker.current.addTo(map.current);\n }\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error);\n cleanupMarker();\n }\n }, [latitude, longitude, map]);\n\n // Add Escape key listener when tooltip is open\n React.useEffect(() => {\n if (isTooltipOpen && activeTooltipId === markerId) {\n document.addEventListener('keydown', handleEscapeKey);\n return () => {\n document.removeEventListener('keydown', handleEscapeKey);\n };\n }\n return undefined;\n }, [isTooltipOpen, activeTooltipId, markerId, handleEscapeKey]);\n\n // Close tooltip if another marker becomes active\n React.useEffect(() => {\n if (isTooltipOpen && activeTooltipId !== markerId && activeTooltipId !== null) {\n setTooltipOpenStatus(false);\n }\n }, [activeTooltipId, markerId, isTooltipOpen]);\n\n // Reopen tooltip if this marker has focus/hover/popoverHover when another tooltip closes\n React.useEffect(() => {\n if (!isTooltipOpen && activeTooltipId === null && (isFocused || isHovered || isPopoverHovered)) {\n openTooltip();\n }\n }, [activeTooltipId, isTooltipOpen, isFocused, isHovered, isPopoverHovered, openTooltip]);\n\n // For choropleths: sync local tooltip state with global active state\n // Choropleths set activeTooltipId from MapLibre event handlers, so open tooltip when this marker becomes active\n React.useEffect(() => {\n if (!customMarkerId) return;\n\n if (activeTooltipId === markerId) {\n setTooltipOpenStatus(true);\n } else {\n setTooltipOpenStatus(false);\n }\n }, [customMarkerId, activeTooltipId, markerId]);\n\n // Update marker position during map movement/zoom when tooltip is open\n // Use requestAnimationFrame to throttle updates to once per frame\n const [, forceUpdate] = React.useReducer(x => x + 1, 0);\n\n React.useEffect(() => {\n if (!isTooltipOpen || !map.current || typeof map.current.on !== 'function') {\n return undefined;\n }\n\n let rafId: number | null = null;\n\n const handleMapMove = () => {\n rafId ??= requestAnimationFrame(() => {\n forceUpdate();\n rafId = null;\n });\n };\n\n mapMoveHandlerRef.current = handleMapMove;\n map.current.on('move', handleMapMove);\n\n return () => {\n if (rafId !== null) {\n cancelAnimationFrame(rafId);\n }\n cleanupMapMoveHandler();\n };\n }, [isTooltipOpen, map, cleanupMapMoveHandler]);\n\n React.useEffect(\n () => () => {\n cancelCloseTimeout();\n cleanupPendingMoveEnd();\n cleanupMapMoveHandler();\n cleanupMarker();\n },\n [cancelCloseTimeout, cleanupPendingMoveEnd, cleanupMapMoveHandler, cleanupMarker]\n );\n const filteredAdditionalFields = additionalFields.filter(({ value }) => value && String(value) !== '0');\n const showTooltip =\n showCoordinates || filteredAdditionalFields.length || (areaId && !Number.isNaN(areaValue));\n // Only show tooltip if this marker is the active one in the global context\n // keepChildrenVisible allows tooltip to show during state sync for choropleths\n const isTooltipVisible = activeTooltipId === markerId && (isTooltipOpen || customMarkerId !== undefined);\n\n const childrenWithTooltipId = React.useMemo(() => {\n if (!children) return null;\n if (!React.isValidElement(children)) return children;\n return React.cloneElement(children, {\n 'aria-describedby': tooltipId,\n } as any);\n }, [children, tooltipId]);\n\n return (\n <div>\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */}\n <div // NOSONAR typescript:S6848 - this wrapper only forwards hover/focus events to position a tooltip; it is not an interactive control and adding a role would misrepresent it to assistive tech\n ref={container}\n data-test=\"map-marker\"\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onFocus={handleFocus}\n onBlur={handleBlur}\n {...otherProps}\n >\n {childrenWithTooltipId}\n </div>\n <div>\n {showTooltip && (\n <Tooltip\n id={tooltipId}\n open={isTooltipVisible}\n anchor={container.current}\n latitude={showCoordinates ? latitude : null}\n longitude={showCoordinates ? longitude : null}\n areaId={areaId}\n areaValue={areaValue}\n additionalFields={additionalFields}\n showCoordinates={showCoordinates}\n tooltipHeader={tooltipHeader}\n stylesManagedExternally={stylesManagedExternally}\n onMouseEnter={handlePopoverMouseEnter}\n onMouseLeave={handlePopoverMouseLeave}\n />\n )}\n </div>\n </div>\n );\n};\n\nexport default MarkerWrapper;\n", "import * as React from 'react';\nimport type { Map } from 'maplibre-gl';\nimport { KEYBOARD_KEYS } from './keyboardConstants';\n\nexport interface UseRovingTabindexReturn {\n handleKeyDown: (e: React.KeyboardEvent) => void;\n handleFocus: () => void;\n handleBlur: () => void;\n setElementRef: (index: number, element: HTMLElement | SVGElement | null) => void;\n}\n\n/**\n * Custom hook to implement roving tabindex pattern for map datapoints.\n *\n * This hook manages tabIndex attributes imperatively via direct DOM manipulation\n * to avoid React reconciliation issues when changing tabIndex on focused elements.\n * Only one datapoint is in the tab order at a time (tabIndex={0}),\n * while others are not (tabIndex={-1}).\n */\nexport const useRovingTabindex = (map: React.MutableRefObject<Map>): UseRovingTabindexReturn => {\n const elementRefsRef = React.useRef<globalThis.Map<number, HTMLElement | SVGElement>>(\n new globalThis.Map()\n );\n const focusedIndexRef = React.useRef<number>(0);\n\n const moveFocusOnElementRemove = React.useCallback((removedElementIndex: number) => {\n const removedElement = elementRefsRef.current.get(removedElementIndex);\n const wasFocused = removedElement?.getAttribute('tabindex') === '0';\n\n elementRefsRef.current.delete(removedElementIndex);\n\n if (wasFocused) {\n // Find a suitable replacement element to receive tabindex=\"0\"\n // Priority: next element, or previous element, or first available\n let replacementIndex: number | null = null;\n const indices = Array.from(elementRefsRef.current.keys()).sort((a, b) => a - b);\n\n // Try to find the next index after the removed one\n const nextIndex = indices.find(i => i > removedElementIndex);\n if (nextIndex !== undefined) {\n replacementIndex = nextIndex;\n } else if (indices.length > 0) {\n // If no next index, use the last available element\n replacementIndex = indices.at(-1);\n }\n\n if (replacementIndex === null) {\n focusedIndexRef.current = 0;\n } else {\n focusedIndexRef.current = replacementIndex;\n const replacementElement = elementRefsRef.current.get(replacementIndex);\n if (replacementElement) {\n replacementElement.setAttribute('tabindex', '0');\n }\n }\n }\n }, []);\n\n const setElementRef = React.useCallback(\n (index: number, element: HTMLElement | SVGElement) => {\n if (element) {\n const existingElement = elementRefsRef.current.get(index);\n const hadFocus = existingElement?.getAttribute('tabindex') === '0';\n\n elementRefsRef.current.set(index, element);\n\n if (hadFocus) {\n element.setAttribute('tabindex', '0');\n } else {\n element.setAttribute('tabindex', index === focusedIndexRef.current ? '0' : '-1');\n }\n } else {\n moveFocusOnElementRemove(index);\n }\n },\n [moveFocusOnElementRemove]\n );\n\n const resolveFocusedIndex = React.useCallback(() => {\n let currentIndex = focusedIndexRef.current;\n\n if (!elementRefsRef.current.has(currentIndex)) {\n for (const [index, element] of elementRefsRef.current.entries()) {\n if (element.getAttribute('tabindex') === '0') {\n currentIndex = index;\n focusedIndexRef.current = index;\n break;\n }\n }\n }\n\n return currentIndex;\n }, []);\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent) => {\n const currentIndex = resolveFocusedIndex();\n\n const count = elementRefsRef.current.size;\n let newIndex: number;\n\n switch (e.key) {\n case KEYBOARD_KEYS.ARROW_RIGHT:\n case KEYBOARD_KEYS.ARROW_DOWN:\n e.preventDefault();\n newIndex = currentIndex === count - 1 ? 0 : currentIndex + 1;\n break;\n case KEYBOARD_KEYS.ARROW_LEFT:\n case KEYBOARD_KEYS.ARROW_UP:\n e.preventDefault();\n newIndex = currentIndex === 0 ? count - 1 : currentIndex - 1;\n break;\n case KEYBOARD_KEYS.HOME:\n e.preventDefault();\n newIndex = 0;\n break;\n case KEYBOARD_KEYS.END:\n e.preventDefault();\n newIndex = count - 1;\n break;\n default:\n return;\n }\n\n if (newIndex !== currentIndex) {\n focusedIndexRef.current = newIndex;\n const oldElement = elementRefsRef.current.get(currentIndex);\n const newElement = elementRefsRef.current.get(newIndex);\n\n if (oldElement) {\n oldElement.setAttribute('tabindex', '-1');\n }\n\n if (newElement) {\n newElement.setAttribute('tabindex', '0');\n // defer to after render to prevent render loops\n requestAnimationFrame(() => {\n newElement.focus();\n });\n }\n }\n },\n [resolveFocusedIndex]\n );\n\n const handleFocus = React.useCallback(() => {\n if (map.current?.keyboard) {\n map.current.keyboard.disable();\n }\n }, [map]);\n\n const handleBlur = React.useCallback(() => {\n if (map.current?.keyboard) {\n map.current.keyboard.enable();\n }\n }, [map]);\n\n return {\n handleKeyDown,\n handleFocus,\n handleBlur,\n setElementRef,\n };\n};\n", "import * as React from 'react';\nimport styled from 'styled-components';\nimport type { Map } from 'maplibre-gl';\nimport { sum } from 'lodash';\nimport { isRemoteIcon, isDataURI } from '@splunk/visualizations-shared/iconUtils';\nimport { isColor } from '@splunk/visualizations-shared/colorUtils';\nimport RemoteIcon from '@splunk/visualizations-shared/RemoteIcon';\nimport FeatureFlagContext from '@splunk/visualization-context/FeatureFlagContext';\nimport { _ } from '@splunk/ui-utils/i18n';\nimport { sprintf } from '@splunk/ui-utils/format';\nimport { KEYBOARD_KEYS } from './keyboardConstants';\nimport { convertDegToDMS } from './Tooltip';\nimport {\n bakeBubbleData,\n BubbleLayerType,\n DEFAULT_SERIES_COLORS,\n DEFAULT_RESULT_LIMIT,\n DEFAULT_CLUSTER_COLOR,\n getStaticColors,\n matchBubbleSize,\n} from './MapUtils';\nimport MarkerWrapper from './MarkerWrapper';\nimport type { TooltipProps } from './Tooltip';\nimport { useRovingTabindex } from './useRovingTabindex';\n\ntype FeatureFlagContextValue = Record<string, boolean | undefined> | null;\n\nexport const GEO_BOUND_PREFIX = '_geo_bounds_';\nexport const GEO_LAT_AND_LONG_FIELD = ['_geo_long_field', '_geo_lat_field'];\nexport const ICON_DISPLAY_CUTOFF = 16;\n\nexport interface PieSegmentProps {\n start: number;\n end: number;\n radius: number;\n color: string;\n themeColor: string;\n segmentMetadata?: { name: string; value: number; color: string };\n handleBubbleClick?: (e: React.UIEvent, name: string, count: number) => void;\n ariaLabel?: string;\n 'aria-describedby'?: string;\n onKeyDown?: (e: React.KeyboardEvent) => void;\n onFocus?: () => void;\n onBlur?: () => void;\n elementRef?: React.Ref<Element>;\n hasEventHandlers?: boolean;\n}\n\nexport const PieSegment = React.memo(\n ({\n start,\n end,\n radius,\n color,\n themeColor,\n segmentMetadata,\n handleBubbleClick,\n ariaLabel,\n 'aria-describedby': ariaDescribedBy,\n onKeyDown,\n onFocus,\n onBlur,\n elementRef,\n hasEventHandlers,\n }: PieSegmentProps): JSX.Element => {\n const { name, value } = segmentMetadata ?? {};\n const handleInteraction = React.useCallback(\n (e: React.UIEvent) => {\n if ('key' in e && e.key !== KEYBOARD_KEYS.ENTER && e.key !== KEYBOARD_KEYS.SPACE) {\n return;\n }\n e.preventDefault();\n handleBubbleClick(e, name, value);\n },\n [name, value, handleBubbleClick]\n );\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent) => {\n // Handle Enter/Space for activation only when interactive\n if (hasEventHandlers && (e.key === KEYBOARD_KEYS.ENTER || e.key === KEYBOARD_KEYS.SPACE)) {\n handleInteraction(e);\n }\n\n // Always call the navigation handler for arrow keys, Home, End\n if (onKeyDown) {\n onKeyDown(e);\n }\n },\n [hasEventHandlers, handleInteraction, onKeyDown]\n );\n\n if (end - start === 1) {\n return (\n <BubbleSegment\n $hasEventHandlers={hasEventHandlers}\n ref={elementRef as React.Ref<SVGCircleElement>}\n as=\"circle\"\n role={hasEventHandlers ? 'button' : 'graphics-symbol'}\n aria-label={ariaLabel}\n aria-describedby={ariaDescribedBy}\n onClick={hasEventHandlers ? handleInteraction : undefined}\n onKeyDown={handleKeyDown}\n onFocus={onFocus}\n onBlur={onBlur}\n cx={radius}\n cy={radius}\n r={radius}\n fill={color}\n fillOpacity={0.5}\n strokeWidth={1.5}\n stroke={color}\n />\n );\n }\n const a0 = 2 * Math.PI * (start - 0.25);\n const a1 = 2 * Math.PI * (end - 0.25);\n const x0 = Math.cos(a0);\n const y0 = Math.sin(a0);\n const x1 = Math.cos(a1);\n const y1 = Math.sin(a1);\n const arc = end - start > 0.5 ? 1 : 0;\n\n return (\n <BubbleSegment\n $hasEventHandlers={hasEventHandlers}\n ref={elementRef as React.Ref<SVGPathElement>}\n as=\"path\"\n role={hasEventHandlers ? 'button' : 'graphics-symbol'}\n aria-label={ariaLabel}\n aria-describedby={ariaDescribedBy}\n onClick={hasEventHandlers ? handleInteraction : undefined}\n onKeyDown={handleKeyDown}\n onFocus={onFocus}\n onBlur={onBlur}\n d={`M ${radius} ${radius} L ${radius + radius * x0} ${\n radius + radius * y0\n } A ${radius} ${radius} 0 ${arc} 1 ${radius + radius * x1} ${\n radius + radius * y1\n } L ${radius} ${radius} A 0 0 0 ${arc} 0 ${radius} ${radius}`}\n fill={color}\n fillOpacity={0.8}\n stroke={themeColor}\n strokeWidth={2}\n strokeOpacity={0.3}\n />\n );\n }\n);\n\nPieSegment.displayName = 'MapBubblePieSegment';\n\nexport const BubbleSegment = styled.path<{ $hasEventHandlers: boolean }>`\n transition: 0.2s ease-in-out;\n transition-property: fill, stroke;\n ${({ $hasEventHandlers }) => $hasEventHandlers && 'cursor: pointer;'}\n\n &:focus {\n outline: none;\n }\n`;\n\nexport const BUBBLE_SEGMENT_DIMMED_STYLES = {\n fill: 'rgba(150, 150, 150, 0.3)',\n stroke: 'rgba(200, 200, 200, 0.4)',\n} as const;\n\ninterface BubbleSvgProps {\n values: number[];\n valueRange: number[];\n tooltipHeader?: string;\n latitude: number;\n longitude: number;\n icon?: string;\n isPie: boolean;\n themeColor: string;\n segmentStartIndex: number;\n colors: string[];\n bubbleSize: Required<TooltipProps['additionalFields'][number] & { value: number }>[];\n onClick: (e: React.UIEvent, name: string, count: number) => void;\n 'aria-describedby'?: string;\n onKeyDown?: (e: React.KeyboardEvent) => void;\n onFocus?: () => void;\n onBlur?: () => void;\n setElementRef?: (index: number, element: Element | null) => void;\n hasEventHandlers?: boolean;\n}\n\nconst BubbleSvg = React.memo(\n ({\n values,\n valueRange,\n tooltipHeader,\n latitude,\n longitude,\n icon,\n isPie,\n themeColor,\n segmentStartIndex,\n colors,\n bubbleSize,\n onClick,\n 'aria-describedby': ariaDescribedBy,\n onKeyDown,\n onFocus,\n onBlur,\n setElementRef,\n hasEventHandlers,\n }: BubbleSvgProps) => {\n const featureFlagContext = React.useContext<FeatureFlagContextValue>(FeatureFlagContext);\n const isBubbleMapIconFlagEnabled = Boolean(featureFlagContext?.visualizations_enableBubbleMapIcon);\n\n const total = values.reduce((totalValue, v) => totalValue + v, 0);\n const radius = matchBubbleSize(valueRange, total);\n\n const getAriaLabel = React.useCallback(\n (segmentName?: string, segmentValue?: number) => {\n let segmentLabel = _('Map marker');\n if (tooltipHeader) {\n segmentLabel = tooltipHeader;\n } else if (latitude !== undefined && longitude !== undefined) {\n segmentLabel = sprintf(_('Location: %(lat)s, %(lng)s'), {\n lat: convertDegToDMS(latitude, 'latitude'),\n lng: convertDegToDMS(longitude, 'longitude'),\n });\n }\n\n if (segmentName != null && segmentValue != null) {\n segmentLabel = sprintf(_('%(locationLabel)s, %(segmentName)s: %(segmentValue)s'), {\n locationLabel: segmentLabel,\n segmentName,\n segmentValue: segmentValue.toString(),\n });\n }\n if (hasEventHandlers) {\n segmentLabel = sprintf(_('%(label)s, Click for drilldown'), { label: segmentLabel });\n }\n\n return segmentLabel;\n },\n [tooltipHeader, latitude, longitude, hasEventHandlers]\n );\n\n const offsets: number[] = [];\n let runningTotal = 0;\n values.forEach(count => {\n offsets.push(runningTotal);\n runningTotal += count;\n });\n\n const width = radius * 2;\n const showIcon =\n isBubbleMapIconFlagEnabled &&\n radius >= ICON_DISPLAY_CUTOFF &&\n icon &&\n (isRemoteIcon(icon) || isDataURI(icon));\n\n return (\n <svg width={width} height={width} viewBox={`-3 -3 ${width + 6} ${width + 6}`}>\n {isPie && (\n <circle\n cx={radius}\n cy={radius}\n r={radius}\n fill=\"none\"\n strokeWidth={2}\n stroke={themeColor}\n strokeOpacity={0.3}\n />\n )}\n {values.map((v, i) => {\n const globalIndex = segmentStartIndex + i;\n return (\n <PieSegment\n key={globalIndex}\n start={offsets[i] / total}\n end={(offsets[i] + v) / total}\n radius={radius}\n color={colors[i]}\n themeColor={themeColor}\n segmentMetadata={bubbleSize[i]}\n handleBubbleClick={onClick}\n ariaLabel={getAriaLabel(bubbleSize[i]?.name, bubbleSize[i]?.value)}\n aria-describedby={ariaDescribedBy}\n onKeyDown={onKeyDown}\n onFocus={onFocus}\n onBlur={onBlur}\n elementRef={\n setElementRef ? element => setElementRef(globalIndex, element) : undefined\n }\n hasEventHandlers={hasEventHandlers}\n />\n );\n })}\n {showIcon && (\n <foreignObject\n x={radius - (radius * 0.8) / 2}\n y={radius - (radius * 0.8) / 2}\n width={radius * 0.8}\n height={radius * 0.8}\n style={{ pointerEvents: 'none' }}\n data-test=\"bubble-icon-wrapper\"\n >\n <RemoteIcon iconURL={icon} width={radius * 0.8} height={radius * 0.8} />\n </foreignObject>\n )}\n </svg>\n );\n }\n);\n\nexport interface BubbleProps {\n originalValues: number[];\n valueRange: number[];\n colors: string[];\n themeColor: string;\n isPie: boolean;\n latitude: number;\n longitude: number;\n bubbleSize: Required<TooltipProps['additionalFields'][number] & { value: number }>[];\n additionalFields?: TooltipProps['additionalFields'];\n tooltipHeader?: TooltipProps['tooltipHeader'];\n map: React.MutableRefObject<Map>;\n handleMapClick?: any;\n icon?: string;\n showCoordinates?: boolean;\n stylesManagedExternally?: boolean;\n segmentStartIndex?: number;\n onKeyDown?: (e: React.KeyboardEvent) => void;\n onFocus?: () => void;\n onBlur?: () => void;\n setElementRef?: (index: number, element: Element) => void;\n hasEventHandlers?: boolean;\n}\n\nexport const Bubble = React.memo(\n ({\n originalValues,\n valueRange,\n colors,\n themeColor,\n isPie,\n latitude,\n longitude,\n bubbleSize,\n additionalFields = [],\n tooltipHeader = null,\n map,\n handleMapClick,\n icon,\n showCoordinates,\n stylesManagedExternally,\n segmentStartIndex = 0,\n onKeyDown,\n onFocus,\n onBlur,\n setElementRef,\n hasEventHandlers,\n }: BubbleProps): JSX.Element => {\n const onBubbleClick = React.useCallback(\n (e, name, value) => {\n handleMapClick(e, name, value);\n e.stopPropagation();\n },\n [handleMapClick]\n );\n\n // sanitize values\n const allZeros = originalValues.every(v => v === 0);\n const values = originalValues.map(v => Math.max(v, 0));\n\n if (allZeros || !originalValues.length) return null;\n\n return (\n <MarkerWrapper\n longitude={longitude}\n latitude={latitude}\n additionalFields={[...bubbleSize, ...additionalFields]}\n tooltipHeader={tooltipHeader}\n map={map}\n data-test-type=\"bubble\"\n showCoordinates={showCoordinates}\n stylesManagedExternally={stylesManagedExternally}\n >\n <BubbleSvg\n values={values}\n valueRange={valueRange}\n colors={colors}\n bubbleSize={bubbleSize}\n isPie={isPie}\n themeColor={themeColor}\n segmentStartIndex={segmentStartIndex}\n latitude={latitude}\n longitude={longitude}\n tooltipHeader={tooltipHeader}\n icon={icon}\n onClick={onBubbleClick}\n onKeyDown={onKeyDown}\n onFocus={onFocus}\n onBlur={onBlur}\n setElementRef={setElementRef}\n hasEventHandlers={hasEventHandlers}\n />\n </MarkerWrapper>\n );\n }\n);\nBubble.displayName = 'MapBubble';\n\nexport interface BubbleLayerProps {\n bubbleLayer: BubbleLayerType;\n themeColorScheme: string;\n zoom: number;\n map: React.MutableRefObject<Map>;\n onMapClick?: any;\n showCoordinates?: boolean;\n stylesManagedExternally?: boolean;\n hasEventHandlers?: boolean;\n}\n\nconst BubbleLayer = (props: BubbleLayerProps): JSX.Element => {\n const {\n bubbleLayer,\n themeColorScheme,\n map,\n zoom,\n onMapClick,\n showCoordinates,\n stylesManagedExternally = false,\n hasEventHandlers,\n } = props;\n\n bubbleLayer.seriesColors = bubbleLayer.seriesColors || DEFAULT_SERIES_COLORS;\n bubbleLayer.bubbleSize = bubbleLayer.bubbleSize || [];\n bubbleLayer.icon = bubbleLayer.icon || [];\n const bakedData = React.useMemo(() => bakeBubbleData(bubbleLayer), [bubbleLayer]);\n const staticColors = React.useMemo(\n () => getStaticColors(bubbleLayer.bubbleSize.length, bubbleLayer.seriesColors),\n [bubbleLayer.bubbleSize.length, bubbleLayer.seriesColors]\n );\n const { data = [], dataRange = [], resultLimit, bubbleSizeFields, isPie } = bakedData ?? {};\n const { additionalTooltipFields = [], tooltipHeaderFieldName = null } = bubbleLayer;\n const roundedZoom = Math.round(zoom);\n const themeColor = themeColorScheme === 'light' ? '#ffffff' : '#1a1c20';\n const dynamicColors = bubbleLayer.dataColors;\n\n // filter data for the current zoom level and sort base on values\n const dataToRender = React.useMemo(\n () =>\n data\n .reduce((acc, datum, i) => {\n const shouldRender =\n datum.zoom === null || datum.zoom === undefined || datum.zoom === roundedZoom;\n if (shouldRender) {\n acc.push({ data: datum, idx: i });\n }\n return acc;\n }, [])\n .slice(0, resultLimit || DEFAULT_RESULT_LIMIT)\n .sort((a, b) => sum(b.data.values) - sum(a.data.values)),\n [data, resultLimit, roundedZoom]\n );\n\n const handleMapClick = React.useCallback(\n (e, name, value, i) => {\n // retrieve metadata from the appropriate datum, indexed by i\n const metadata = dataToRender[i]?.data?.metadata ?? {};\n const payload = Object.keys(metadata).reduce(\n (acc, curr) => {\n const key = `row.${curr}.value`;\n const val = String(metadata[curr]);\n return { ...acc, [key]: val };\n },\n { name, value: String(value) }\n );\n\n onMapClick({ e, payload });\n },\n [dataToRender, onMapClick]\n );\n\n const { handleKeyDown, handleFocus, handleBlur, setElementRef } = useRovingTabindex(map);\n\n let globalSegmentIndex = 0;\n\n return (\n <>\n {dataToRender.map((datum, i) => {\n const allZeros = datum.data.values.every(v => v === 0);\n const segmentStartIndex = globalSegmentIndex;\n const segmentCount = datum.data.values.length;\n if (!allZeros) {\n globalSegmentIndex += segmentCount;\n }\n const colors = dynamicColors\n ? [\n dataToRender.map(obj =>\n isColor(dynamicColors[obj.idx]) ? dynamicColors[obj.idx] : DEFAULT_CLUSTER_COLOR\n )[i],\n ]\n : staticColors;\n\n const [longitude, latitude] = datum.data.coordinates;\n const bubbleSize = datum.data.values.map((value, index) => ({\n name: bubbleSizeFields[index],\n value,\n color: colors[index],\n }));\n\n const additionalFields = bubbleLayer.metadata\n ? additionalTooltipFields.map(field => ({\n name: field,\n value: datum.data.metadata[field],\n icon: bubbleLayer.tooltipFieldIcons?.[field],\n }))\n : [];\n\n const tooltipHeaderField =\n bubbleLayer.metadata && datum.data.metadata[tooltipHeaderFieldName];\n\n return (\n <Bubble\n key={String(datum.idx)}\n originalValues={datum.data.values}\n valueRange={dataRange}\n colors={colors}\n themeColor={themeColor}\n isPie={isPie}\n longitude={longitude}\n latitude={latitude}\n bubbleSize={bubbleSize}\n additionalFields={additionalFields}\n tooltipHeader={tooltipHeaderField}\n map={map}\n handleMapClick={(e, name, value) => handleMapClick(e, name, value, i)}\n icon={bubbleLayer.icon[datum.idx]}\n showCoordinates={showCoordinates}\n stylesManagedExternally={stylesManagedExternally}\n segmentStartIndex={segmentStartIndex}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n onBlur={handleBlur}\n setElementRef={setElementRef}\n hasEventHandlers={hasEventHandlers}\n />\n );\n })}\n </>\n );\n};\n\nexport default BubbleLayer;\n", "import styled from 'styled-components';\nimport { pick } from 'lodash';\nimport { toDimension } from '@splunk/visualizations-shared/style';\n// @ts-ignore\nimport css from 'maplibre-gl/dist/maplibre-gl.css';\nimport { HexColorObj } from './PureMap';\nimport { BubbleSegment, BUBBLE_SEGMENT_DIMMED_STYLES } from './BubbleLayer';\n\nconst PureMapContainer = styled.div.attrs({\n 'data-test': 'puremap-container',\n})<{\n width: number | string;\n height: number | string;\n backgroundColor: string;\n controlBackgroundColor: string;\n controlForegroundColor: string;\n controlIconColorEncoded: HexColorObj;\n showScale: boolean;\n showZoomControls: boolean;\n}>`\n ${css}\n overflow: hidden;\n position: relative;\n z-index: 0;\n background-color: ${props => props.backgroundColor};\n ${props => toDimension(pick(props, ['width', 'height']))};\n\n // keep zoom control on top of cooperative gesture layer\n .maplibregl-cooperative-gesture-screen {\n z-index: 0;\n }\n\n // overwrite maplibregl scale styles\n .maplibregl-ctrl-bottom-left {\n display: ${props => (props.showScale ? 'block' : 'none')};\n position: absolute;\n z-index: 0;\n bottom: 16px;\n left: 12px;\n width: 86px;\n height: 29px;\n border-radius: 4px;\n margin: 0;\n background-color: ${props => props.controlBackgroundColor};\n box-shadow:\n 0px 26px 103px rgba(0, 0, 0, 0.13),\n 0px 11px 18px rgba(0, 0, 0, 0.06),\n 0px 3px 6px rgba(0, 0, 0, 0.06);\n .maplibregl-ctrl-scale {\n background-color: ${props => props.controlBackgroundColor};\n color: ${props => props.controlForegroundColor};\n border: 2px solid ${props => props.controlForegroundColor};\n border-top: 0;\n border-left: 0;\n border-right: 0;\n padding: 0;\n margin: 6px 8px 8px 8px;\n line-height: 13px;\n letter-spacing: 0.02em;\n font-family: sans-serif;\n font-size: 10px;\n }\n }\n\n /* When a segment is hovered/focused, dim other segments */\n :has(${BubbleSegment}:is(:focus-visible, :hover)) ${BubbleSegment}:not(:is(:focus-visible, :hover)) {\n fill: ${BUBBLE_SEGMENT_DIMMED_STYLES.fill};\n stroke: ${BUBBLE_SEGMENT_DIMMED_STYLES.stroke};\n }\n`;\n\nexport default PureMapContainer;\n", "import styled, { css } from 'styled-components';\nimport { Map } from 'maplibre-gl';\nimport * as React from 'react';\nimport { isColor } from '@splunk/visualizations-shared/colorUtils';\nimport { noop } from 'lodash';\nimport { variables } from '@splunk/themes';\nimport { _ } from '@splunk/ui-utils/i18n';\nimport { sprintf } from '@splunk/ui-utils/format';\nimport { KEYBOARD_KEYS } from './keyboardConstants';\nimport { convertDegToDMS } from './Tooltip';\nimport { DEFAULT_CLUSTER_COLOR, DEFAULT_RESULT_LIMIT, DEFAULT_SERIES_COLORS } from './MapUtils';\nimport type { MarkerLayerType } from './MapUtils';\nimport MarkerWrapper from './MarkerWrapper';\nimport type { TooltipProps } from './Tooltip';\nimport { useRovingTabindex } from './useRovingTabindex';\n\nconst svgFocusStyle = css`\n &:focus {\n outline: none;\n filter: drop-shadow(2px 0px 1px ${variables.focusColor})\n drop-shadow(-2px 0px 1px ${variables.focusColor}) drop-shadow(0px 2px 1px ${variables.focusColor})\n drop-shadow(0px -2px 1px ${variables.focusColor});\n }\n`;\n\nconst FocusableSvg = styled.svg<{ $hasEventHandlers: boolean }>`\n ${({ $hasEventHandlers }) => $hasEventHandlers && 'cursor: pointer;'}\n ${svgFocusStyle}\n`;\n\ninterface MarkerIconProps\n extends Omit<React.HTMLAttributes<HTMLOrSVGElement>, 'onKeyDown' | 'onFocus' | 'onBlur'> {\n theme: string;\n color: string;\n ariaLabel?: string;\n 'aria-describedby'?: string;\n onInteraction?: (e: React.MouseEvent | React.KeyboardEvent) => void;\n tabIndex?: number;\n onKeyDown?: (e: React.KeyboardEvent) => void;\n onFocus?: (e: React.FocusEvent) => void;\n onBlur?: (e: React.FocusEvent) => void;\n elementRef?: (element: HTMLElement | SVGElement | null) => void;\n hasEventHandlers?: boolean;\n}\n\nexport const MarkerIcon = ({\n theme,\n color,\n ariaLabel,\n 'aria-describedby': ariaDescribedby,\n onInteraction,\n onKeyDown: onKeyDownProp,\n onFocus,\n onBlur,\n elementRef,\n hasEventHandlers,\n ...otherProps\n}: MarkerIconProps): JSX.Element => {\n const strokeOpacity = theme === 'light' ? 0.7 : 0.15;\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent) => {\n if (hasEventHandlers && (e.key === KEYBOARD_KEYS.ENTER || e.key === KEYBOARD_KEYS.SPACE)) {\n e.preventDefault();\n onInteraction?.(e);\n }\n onKeyDownProp?.(e);\n },\n [hasEventHandlers, onInteraction, onKeyDownProp]\n );\n return (\n <FocusableSvg\n $hasEventHandlers={hasEventHandlers}\n ref={elementRef as React.Ref<SVGSVGElement>}\n width={22}\n height={28}\n fill=\"none\"\n role={hasEventHandlers ? 'button' : 'graphics-symbol'}\n aria-label={ariaLabel}\n aria-describedby={ariaDescribedby}\n onClick={hasEventHandlers ? onInteraction : undefined}\n onKeyDown={handleKeyDown}\n onFocus={onFocus}\n onBlur={onBlur}\n {...otherProps}\n >\n <path\n d=\"M11 .5C5.201.5.5 5.201.5 11c0 3.136 1.376 5.952 3.555 7.875 2.839 2.506 4.144 4.58 4.893 6.02.183.35.334.665.469.946l.014.03c.136.285.263.548.387.766.235.412.571.863 1.182.863.61 0 .947-.45 1.182-.863.124-.218.25-.48.387-.765l.014-.03c.135-.282.286-.597.469-.947.75-1.44 2.054-3.514 4.893-6.02A10.476 10.476 0 0 0 21.5 11C21.5 5.201 16.799.5 11 .5Z\"\n fill={color}\n />\n <path\n d=\"M11 .5C5.201.5.5 5.201.5 11c0 3.136 1.376 5.952 3.555 7.875 2.839 2.506 4.144 4.58 4.893 6.02.183.35.334.665.469.946l.014.03c.136.285.263.548.387.766.235.412.571.863 1.182.863.61 0 .947-.45 1.182-.863.124-.218.25-.48.387-.765l.014-.03c.135-.282.286-.597.469-.947.75-1.44 2.054-3.514 4.893-6.02A10.476 10.476 0 0 0 21.5 11C21.5 5.201 16.799.5 11 .5Z\"\n stroke=\"#08090A\"\n />\n <path\n d=\"M11 .5C5.201.5.5 5.201.5 11c0 3.136 1.376 5.952 3.555 7.875 2.839 2.506 4.144 4.58 4.893 6.02.183.35.334.665.469.946l.014.03c.136.285.263.548.387.766.235.412.571.863 1.182.863.61 0 .947-.45 1.182-.863.124-.218.25-.48.387-.765l.014-.03c.135-.282.286-.597.469-.947.75-1.44 2.054-3.514 4.893-6.02A10.476 10.476 0 0 0 21.5 11C21.5 5.201 16.799.5 11 .5Z\"\n stroke={color}\n strokeOpacity={strokeOpacity}\n />\n </FocusableSvg>\n );\n};\n\ninterface MarkerProps {\n latitude: number;\n longitude: number;\n color: string;\n themeColorScheme: string;\n additionalFields?: TooltipProps['additionalFields'];\n tooltipHeader?: TooltipProps['tooltipHeader'];\n map: React.MutableRefObject<Map>;\n handleLayerClick?: (e) => void;\n showCoordinates: boolean;\n stylesManagedExternally?: boolean;\n onKeyDown?: (e: React.KeyboardEvent) => void;\n onFocus?: () => void;\n onBlur?: () => void;\n elementRef?: (element: HTMLElement | SVGElement | null) => void;\n hasEventHandlers?: boolean;\n}\n\nconst Marker = React.memo(\n ({\n latitude,\n longitude,\n color,\n themeColorScheme,\n map,\n additionalFields,\n handleLayerClick,\n showCoordinates,\n tooltipHeader,\n stylesManagedExternally,\n onKeyDown,\n onFocus,\n onBlur,\n elementRef,\n hasEventHandlers,\n }: MarkerProps): JSX.Element => {\n const ariaLabel = React.useMemo(() => {\n let markerLabel = _('Map marker');\n if (tooltipHeader) {\n markerLabel = tooltipHeader;\n } else if (latitude !== undefined && longitude !== undefined) {\n markerLabel = sprintf(_('Location: %(lat)s, %(lng)s'), {\n lat: convertDegToDMS(latitude, 'latitude'),\n lng: convertDegToDMS(longitude, 'longitude'),\n });\n }\n\n if (hasEventHandlers) {\n markerLabel = sprintf(_('%(label)s, Click for drilldown'), { label: markerLabel });\n }\n return markerLabel;\n }, [tooltipHeader, latitude, longitude, hasEventHandlers]);\n\n const icon = React.useMemo(\n () => (\n <MarkerIcon\n color={color}\n theme={themeColorScheme}\n ariaLabel={ariaLabel}\n onInteraction={handleLayerClick}\n onKeyDown={onKeyDown}\n onFocus={onFocus}\n onBlur={onBlur}\n elementRef={elementRef}\n hasEventHandlers={hasEventHandlers}\n />\n ),\n [\n color,\n handleLayerClick,\n themeColorScheme,\n ariaLabel,\n onKeyDown,\n onFocus,\n onBlur,\n elementRef,\n hasEventHandlers,\n ]\n );\n return (\n <StyledMarkerWrapper\n latitude={latitude}\n longitude={longitude}\n map={map}\n additionalFields={additionalFields}\n data-test-type=\"marker\"\n showCoordinates={showCoordinates}\n tooltipHeader={tooltipHeader}\n stylesManagedExternally={stylesManagedExternally}\n >\n {icon}\n </StyledMarkerWrapper>\n );\n }\n);\n\nMarker.displayName = 'MapMarker';\n\nconst StyledMarkerWrapper = styled(MarkerWrapper)`\n width: 22px;\n height: 28px;\n cursor: pointer;\n`;\n\nexport const generateMarkerWrapperProps = (\n markerLayer: MarkerLayerType,\n showCoordinates?: boolean,\n onMapClick: ({ e, payload }) => void = noop\n): Omit<MarkerProps, 'themeColorScheme' | 'map'>[] => {\n const latArray = markerLayer.latitude;\n const lonArray = markerLayer.longitude;\n const isStaticColor = !markerLayer.dataColors;\n const limit = Math.min(\n latArray.length,\n lonArray.length,\n markerLayer.resultLimit ? markerLayer.resultLimit : DEFAULT_RESULT_LIMIT\n );\n const markerProps: ReturnType<typeof generateMarkerWrapperProps> = [];\n for (let i = 0; i < limit; i += 1) {\n const staticColor =\n markerLayer.seriesColors && isColor(markerLayer.seriesColors[0])\n ? markerLayer.seriesColors[0]\n : DEFAULT_CLUSTER_COLOR;\n const dynamicColor =\n markerLayer.dataColors && isColor(markerLayer.dataColors[i])\n ? markerLayer.dataColors[i]\n : DEFAULT_CLUSTER_COLOR;\n const color = isStaticColor ? staticColor : dynamicColor;\n const tooltipHeader = markerLayer.tooltipHeaderField?.[i];\n const additionalFields = markerLayer.metadata?.[i]\n ? markerLayer.additionalTooltipFields.map(field => ({\n name: field,\n value: markerLayer.metadata[i][field],\n }))\n : [];\n const handleLayerClick = e => {\n const metadata = markerLayer?.metadata[i] ?? {};\n const payload = Object.keys(metadata).reduce((acc, curr) => {\n const key = `row.${curr}.value`;\n const value = String(metadata[curr]);\n return { ...acc, [key]: value };\n }, {});\n\n onMapClick({ e, payload });\n };\n markerProps.push({\n latitude: latArray[i],\n longitude: lonArray[i],\n color,\n additionalFields,\n tooltipHeader,\n handleLayerClick,\n showCoordinates,\n });\n }\n return markerProps;\n};\n\nexport interface MarkerLayerProps {\n markerLayer: MarkerLayerType;\n themeColorScheme: string;\n map: React.MutableRefObject<Map>;\n onMapClick?: ({ e, payload }) => void;\n showCoordinates?: boolean;\n stylesManagedExternally?: boolean;\n hasEventHandlers?: boolean;\n}\n\nconst MarkerLayer = (props: MarkerLayerProps): JSX.Element => {\n const {\n map,\n themeColorScheme,\n markerLayer,\n onMapClick,\n showCoordinates = true,\n stylesManagedExternally = false,\n hasEventHandlers,\n } = props;\n markerLayer.seriesColors = markerLayer.seriesColors || DEFAULT_SERIES_COLORS;\n const markerPropsList = React.useMemo(\n () => generateMarkerWrapperProps(markerLayer, showCoordinates, onMapClick),\n [markerLayer, onMapClick, showCoordinates]\n );\n\n const { handleKeyDown, handleFocus, handleBlur, setElementRef } = useRovingTabindex(map);\n\n return (\n <>\n {markerPropsList.map((markerProps, i) => (\n <Marker\n // eslint-disable-next-line react/no-array-index-key\n key={String(i)}\n themeColorScheme={themeColorScheme}\n map={map}\n {...markerProps}\n showCoordinates={showCoordinates}\n stylesManagedExternally={stylesManagedExternally}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n onBlur={handleBlur}\n elementRef={element => setElementRef(i, element)}\n hasEventHandlers={hasEventHandlers}\n />\n ))}\n </>\n );\n};\n\nexport default MarkerLayer;\n", "import * as React from 'react';\nimport type { Map } from 'maplibre-gl';\nimport { LAYER_TYPE } from '@splunk/visualization-schemas';\nimport BubbleLayer from './BubbleLayer';\nimport MarkerLayer from './MarkerLayer';\nimport type { ClusterLayerType, BubbleLayerType } from './MapUtils';\nimport { MapProvider } from './MapContext';\n\ninterface ClusterLayerProps {\n clusterLayer: ClusterLayerType;\n themeColorScheme: string;\n map: React.MutableRefObject<Map>;\n zoom?: number;\n onMapClick?: ({ e, payload }) => void;\n showCoordinates?: boolean;\n stylesManagedExternally?: boolean;\n hasEventHandlers?: boolean;\n}\n\nconst ClusterLayer = ({\n clusterLayer,\n themeColorScheme,\n zoom,\n map,\n onMapClick,\n showCoordinates,\n stylesManagedExternally = false,\n hasEventHandlers,\n}: ClusterLayerProps): JSX.Element => {\n if (map?.current?.isStyleLoaded && [clusterLayer.longitude, clusterLayer.latitude].every(Array.isArray)) {\n if (clusterLayer?.type === LAYER_TYPE.Marker && !('geobin' in clusterLayer)) {\n return (\n <MapProvider>\n <MarkerLayer\n markerLayer={clusterLayer}\n themeColorScheme={themeColorScheme}\n map={map}\n onMapClick={onMapClick}\n showCoordinates={showCoordinates}\n stylesManagedExternally={stylesManagedExternally}\n hasEventHandlers={hasEventHandlers}\n />\n </MapProvider>\n );\n }\n if (\n clusterLayer?.type === LAYER_TYPE.Bubble &&\n Array.isArray((clusterLayer as BubbleLayerType).bubbleSize)\n ) {\n return (\n <MapProvider>\n <BubbleLayer\n bubbleLayer={clusterLayer as BubbleLayerType}\n themeColorScheme={themeColorScheme}\n map={map}\n zoom={zoom}\n onMapClick={onMapClick}\n showCoordinates={showCoordinates}\n stylesManagedExternally={stylesManagedExternally}\n hasEventHandlers={hasEventHandlers}\n />\n </MapProvider>\n );\n }\n }\n return null;\n};\n\nexport default ClusterLayer;\n", "import * as React from 'react';\nimport type { Map } from 'maplibre-gl';\nimport type { GeoJsonDataType } from '@splunk/visualizations-shared/mapUtils';\nimport { isEqual, uniq } from 'lodash';\nimport styled from 'styled-components';\nimport { mixins } from '@splunk/themes';\nimport { sprintf } from '@splunk/ui-utils/format';\nimport { _ } from '@splunk/ui-utils/i18n';\nimport { KEYBOARD_KEYS } from './keyboardConstants';\nimport {\n ChoroplethLayerType,\n getScaledOpacities,\n formatMetadata,\n DEFAULT_RESULT_LIMIT,\n formatTooltipFieldValue,\n} from './MapUtils';\nimport MarkerWrapper from './MarkerWrapper';\nimport type { TooltipProps } from './Tooltip';\nimport { useMapContext } from './MapContext';\nimport { useRovingTabindex } from './useRovingTabindex';\n\nconst getShapeId = id => `shape-${id}`;\nconst getSourceId = id => `source-${id}`;\nconst getStrokeId = id => `stroke-${id}`;\n\n// Calculate centroid of a GeoJSON geometry (simple average of coordinates)\nconst getCentroid = (geom: GeoJsonDataType): [number, number] | null => {\n if (!geom?.coordinates) {\n return null;\n }\n\n const flattenCoordinates = (coords: any[]): number[][] => {\n if (typeof coords[0] === 'number') return [coords as number[]];\n return coords.flatMap(flattenCoordinates);\n };\n\n const allCoords = flattenCoordinates(geom.coordinates);\n if (allCoords.length === 0) {\n return null;\n }\n\n const lngs = allCoords.map(c => c[0]);\n const lats = allCoords.map(c => c[1]);\n\n return [lngs.reduce((a, b) => a + b, 0) / lngs.length, lats.reduce((a, b) => a + b, 0) / lats.length];\n};\n\nconst FocusableShapeButton = styled.button`\n ${mixins.screenReaderContent()};\n`;\n\nexport const compareGeom = (prev: GeoJsonDataType, next: GeoJsonDataType) => {\n if (prev !== null && next !== null) {\n return prev.type === next.type && isEqual(prev.coordinates, next.coordinates);\n }\n return prev === null && next === null;\n};\n\nexport const compareChoropleth = (prevProps: ChoroplethProps, nextProps: ChoroplethProps): boolean => {\n return (\n compareGeom(prevProps.geomData, nextProps.geomData) &&\n prevProps.id === nextProps.id &&\n prevProps.map === nextProps.map &&\n prevProps.areaId === nextProps.areaId &&\n prevProps.areaValue === nextProps.areaValue &&\n prevProps.color === nextProps.color &&\n prevProps.opacity === nextProps.opacity &&\n prevProps.strokeColor === nextProps.strokeColor &&\n prevProps.isThemeChanged === nextProps.isThemeChanged &&\n isEqual(prevProps.additionalFields, nextProps.additionalFields) &&\n prevProps.tooltipHeader === nextProps.tooltipHeader &&\n prevProps.handleMapClick === nextProps.handleMapClick &&\n prevProps.hasEventHandlers === nextProps.hasEventHandlers\n );\n};\n\nexport const cleanupChoropleth = (\n shapeId: string,\n sourceId: string,\n strokeId: string,\n map: React.MutableRefObject<Map>\n) => {\n // catch errors where map is undefined\n let currLayer;\n let currSource;\n let currStrokeLayer;\n try {\n currLayer = map?.current?.getLayer(shapeId);\n currStrokeLayer = map?.current?.getLayer(strokeId);\n currSource = map?.current?.getSource(sourceId);\n } catch {\n return;\n }\n if (currLayer) {\n map.current.removeLayer(shapeId);\n }\n if (currStrokeLayer) {\n map.current.removeLayer(strokeId);\n }\n if (currSource) {\n map.current.removeSource(sourceId);\n }\n};\n\ninterface ChoroplethProps {\n id: string;\n map: React.MutableRefObject<Map>;\n areaId: string;\n areaValue: number;\n geomData: GeoJsonDataType;\n color: string;\n opacity?: number;\n strokeColor?: string;\n isThemeChanged: boolean;\n additionalFields?: TooltipProps['additionalFields'];\n tooltipHeader?: TooltipProps['tooltipHeader'];\n handleMapClick?: (e) => void;\n stylesManagedExternally?: boolean;\n onKeyDown?: (e: React.KeyboardEvent) => void;\n onFocus?: () => void;\n onBlur?: () => void;\n elementRef?: (element: HTMLElement | SVGElement | null) => void;\n hasEventHandlers?: boolean;\n}\n\nexport const Choropleth = React.memo(\n ({\n id,\n areaId,\n areaValue,\n geomData,\n map,\n color,\n opacity,\n strokeColor,\n isThemeChanged,\n additionalFields,\n tooltipHeader,\n handleMapClick,\n stylesManagedExternally = false,\n onKeyDown,\n onFocus,\n onBlur,\n elementRef,\n hasEventHandlers,\n }: ChoroplethProps): JSX.Element => {\n const sourceId = getSourceId(id);\n const shapeId = getShapeId(id);\n const strokeId = getStrokeId(id);\n const formattedGeomData: GeoJSON.Feature<GeoJSON.Geometry, { [name: string]: any }> = React.useMemo(\n () => ({\n type: 'Feature',\n geometry: geomData,\n properties: {},\n }),\n [geomData]\n );\n const [isFocused, setIsFocused] = React.useState(false);\n const [isHovered, setIsHovered] = React.useState(false);\n const [centroidLat, centroidLng] = React.useMemo(() => {\n const centroid = getCentroid(geomData);\n if (!centroid) {\n return [null, null];\n }\n const [lng, lat] = centroid;\n return [lat, lng];\n }, [geomData]);\n const [mouseLat, setmouseLat] = React.useState(centroidLat ?? 0);\n const [mouseLng, setmouseLng] = React.useState(centroidLng ?? 0);\n const markerId = React.useMemo(() => `choropleth-${shapeId}`, [shapeId]);\n const { activeChoroplethId, setActiveChoroplethId, setActiveTooltipId } = useMapContext();\n\n const updateLayers = React.useCallback(() => {\n // Apply changes by removing the existing choropleth and creating a new one\n // instead of mutating the current\n cleanupChoropleth(shapeId, sourceId, strokeId, map);\n\n // In order to set a different color and opacity to each choropleth region\n // we are creating a different layer for each region, and each layer requires a source\n map.current.addSource(sourceId, {\n type: 'geojson',\n data: formattedGeomData,\n });\n map.current.addLayer({\n id: shapeId,\n type: 'fill',\n source: sourceId,\n layout: {},\n paint: {\n 'fill-opacity': opacity,\n 'fill-color': color,\n },\n });\n\n // needs to add a second layer to adjust the thickness of the line\n // see https://github.com/mapbox/mapbox-gl-js/issues/3018\n if (strokeColor !== 'transparent') {\n map.current.addLayer({\n id: strokeId,\n type: 'line',\n source: sourceId,\n layout: {},\n paint: {\n 'line-color': strokeColor,\n 'line-width': 1,\n },\n });\n }\n }, [shapeId, sourceId, strokeId, map, formattedGeomData, color, opacity, strokeColor]);\n\n const registerEventHandlers = React.useCallback(() => {\n const layer = map.current?.getLayer(shapeId);\n if (!layer) return () => {};\n\n const handleMouseMove = (e: maplibregl.MapLayerMouseEvent) => {\n setmouseLat(e.lngLat.lat);\n setmouseLng(e.lngLat.lng);\n setIsHovered(true);\n setActiveTooltipId(markerId);\n map.current.getCanvas().style.cursor = 'pointer'; // eslint-disable-line no-param-reassign\n };\n\n const handleMouseLeave = () => {\n setIsHovered(false);\n setActiveTooltipId(null);\n map.current.getCanvas().style.cursor = ''; // eslint-disable-line no-param-reassign\n };\n\n const handleClick = (e: maplibregl.MapLayerMouseEvent) => {\n if (hasEventHandlers) {\n handleMapClick?.(e);\n }\n };\n\n map.current.on('mousemove', shapeId, handleMouseMove);\n map.current.on('mouseleave', shapeId, handleMouseLeave);\n map.current.on('click', shapeId, handleClick);\n\n return () => {\n if (map.current) {\n map.current.off('mousemove', shapeId, handleMouseMove);\n map.current.off('mouseleave', shapeId, handleMouseLeave);\n map.current.off('click', shapeId, handleClick);\n }\n };\n }, [shapeId, markerId, map, setActiveTooltipId, hasEventHandlers, handleMapClick]);\n\n React.useEffect(() => {\n updateLayers();\n }, [updateLayers]);\n\n React.useEffect(() => {\n return registerEventHandlers();\n }, [registerEventHandlers]);\n\n // Dim non-focused shapes when a choropleth is focused\n React.useEffect(() => {\n if (!map.current) return;\n\n const layer = map.current.getLayer(shapeId);\n if (!layer) return;\n\n if (activeChoroplethId === null || activeChoroplethId === shapeId) {\n map.current.setPaintProperty(shapeId, 'fill-opacity', opacity);\n } else {\n map.current.setPaintProperty(shapeId, 'fill-opacity', opacity * 0.3);\n }\n }, [activeChoroplethId, shapeId, opacity, map]);\n\n // Clean up on unmount\n React.useEffect(() => () => cleanupChoropleth(shapeId, sourceId, strokeId, map), []);\n\n if (isThemeChanged) {\n // Theme changes will reset the style layers of the entire map\n // so we need to rerender the choropleths\n updateLayers();\n }\n\n const handleFocus = React.useCallback(() => {\n if (onFocus) {\n onFocus();\n }\n setIsFocused(true);\n setmouseLat(centroidLat);\n setmouseLng(centroidLng);\n setActiveChoroplethId(shapeId);\n setActiveTooltipId(markerId);\n }, [centroidLat, centroidLng, shapeId, markerId, setActiveChoroplethId, setActiveTooltipId, onFocus]);\n\n const handleBlur = React.useCallback(() => {\n setIsFocused(false);\n setActiveChoroplethId(null);\n setActiveTooltipId(null);\n onBlur?.();\n }, [setActiveChoroplethId, setActiveTooltipId, onBlur]);\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent) => {\n onKeyDown?.(e);\n if (hasEventHandlers && (e.key === KEYBOARD_KEYS.ENTER || e.key === KEYBOARD_KEYS.SPACE)) {\n e.preventDefault();\n // Create mock MapLibre event with proper coordinates for keyboard activation\n const mockEvent: {\n lngLat: { lng: number; lat: number };\n originalEvent: React.KeyboardEvent;\n } = {\n lngLat: {\n lng: mouseLng ?? centroidLng ?? 0,\n lat: mouseLat ?? centroidLat ?? 0,\n },\n originalEvent: e,\n };\n handleMapClick(mockEvent);\n }\n },\n [hasEventHandlers, handleMapClick, onKeyDown, centroidLat, centroidLng, mouseLat, mouseLng]\n );\n\n // Show tooltip at mouse position on hover, centroid on focus\n // For hover, offset the position upward to create a gap between cursor and tooltip\n const tooltipPosition = React.useMemo(() => {\n if (isFocused) return { lat: centroidLat, lng: centroidLng };\n if (!isHovered || !map.current) return { lat: mouseLat, lng: mouseLng };\n\n // Convert mouse position to screen pixels, add offset, convert back to coordinates\n const mousePoint = map.current.project([mouseLng, mouseLat]);\n mousePoint.y -= 24;\n const offsetCoords = map.current.unproject(mousePoint);\n return { lat: offsetCoords.lat, lng: offsetCoords.lng };\n }, [isFocused, isHovered, mouseLat, mouseLng, centroidLat, centroidLng, map]);\n\n // Don't render if centroid is invalid (prevents panning to 0,0)\n const hasCentroid = centroidLat !== null && centroidLng !== null;\n\n const ariaLabel = React.useMemo(() => {\n const formattedAreaValue =\n typeof areaValue === 'number' && !Number.isNaN(areaValue) ? areaValue.toString() : 'N/A';\n\n let choroplethLabel = sprintf(_('%(areaId)s: %(areaValue)s'), {\n areaId: areaId.toString(),\n areaValue: formattedAreaValue,\n });\n\n if (hasEventHandlers) {\n choroplethLabel = sprintf(_('%(label)s, Click for drilldown'), { label: choroplethLabel });\n }\n\n return choroplethLabel;\n }, [areaId, areaValue, hasEventHandlers]);\n\n return (\n <MarkerWrapper\n additionalFields={additionalFields}\n tooltipHeader={tooltipHeader}\n latitude={tooltipPosition.lat}\n longitude={tooltipPosition.lng}\n map={map}\n areaId={areaId}\n areaValue={areaValue}\n stylesManagedExternally={stylesManagedExternally}\n customMarkerId={markerId}\n showCoordinates={false}\n >\n <FocusableShapeButton\n data-test=\"choropleth-anchor\"\n ref={elementRef as React.Ref<HTMLButtonElement>}\n role={hasEventHandlers && hasCentroid ? 'button' : 'graphics-symbol'}\n aria-label={ariaLabel}\n aria-hidden={!hasCentroid}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n onClick={hasEventHandlers ? handleMapClick : undefined}\n />\n </MarkerWrapper>\n );\n },\n compareChoropleth\n);\n\nChoropleth.displayName = 'MapChoropleth';\n\ninterface ChoroplethLayerProps {\n choroplethLayer: ChoroplethLayerType;\n map: React.MutableRefObject<Map>;\n isThemeChanged: boolean;\n setIsThemeChanged: (isThemeChanged: boolean) => void;\n onMapClick?: ({ e, payload }) => void;\n stylesManagedExternally?: boolean;\n hasEventHandlers?: boolean;\n}\n\nconst ChoroplethLayer = (props: ChoroplethLayerProps): JSX.Element => {\n const {\n map,\n choroplethLayer,\n isThemeChanged,\n setIsThemeChanged,\n onMapClick,\n stylesManagedExternally = false,\n hasEventHandlers,\n } = props;\n const cfgOpacity = Math.min(Math.max(choroplethLayer?.choroplethOpacity, 0), 1);\n const scaledOpacities = getScaledOpacities(choroplethLayer?.dataColors, cfgOpacity) ?? [];\n const colors = choroplethLayer?.dataColors?.map(color => (color?.length > 7 ? color.slice(0, 7) : color));\n\n const limit = Math.min(\n choroplethLayer?.areaIds?.length,\n choroplethLayer?.areaValues?.length,\n choroplethLayer?.geom?.length ?? 0,\n choroplethLayer?.resultLimit ? choroplethLayer.resultLimit : DEFAULT_RESULT_LIMIT\n );\n\n const { handleKeyDown, handleFocus, handleBlur, setElementRef } = useRovingTabindex(map);\n const areaIdSliced = choroplethLayer?.areaIds?.slice(0, limit) ?? [];\n // generate a unique id if areaIds are not unique\n const uniqueAreaIdSliced =\n uniq(areaIdSliced).length === areaIdSliced.length\n ? areaIdSliced\n : areaIdSliced.map((id, i) => `${id}${i}`);\n const additionalFields = choroplethLayer?.metadata\n ? choroplethLayer.metadata.map(choroplethMetadata => {\n if (choroplethLayer.additionalTooltipFields) {\n return choroplethLayer.additionalTooltipFields.map(field => ({\n name: field,\n value: formatTooltipFieldValue(choroplethMetadata[field]),\n }));\n }\n return [];\n })\n : [];\n\n const tooltipHeaderField = choroplethLayer?.tooltipHeaderField || null;\n\n const handleMapClick = (e, i) => {\n const payload = formatMetadata(choroplethLayer, i);\n onMapClick({ e, payload });\n };\n\n if (!map || !choroplethLayer?.geom) {\n return null;\n }\n\n if (isThemeChanged) {\n setIsThemeChanged(false);\n }\n\n return (\n <div>\n {uniqueAreaIdSliced.map((id, i) => {\n const areaId = areaIdSliced[i];\n const areaValue = choroplethLayer.areaValues[i];\n\n return (\n <Choropleth\n key={id}\n id={id}\n geomData={choroplethLayer.geom[i]}\n map={map}\n color={colors[i]}\n opacity={scaledOpacities[i]}\n strokeColor={choroplethLayer.choroplethStrokeColor}\n isThemeChanged={isThemeChanged}\n areaId={areaId}\n areaValue={areaValue}\n additionalFields={additionalFields[i]}\n tooltipHeader={tooltipHeaderField?.[i]}\n handleMapClick={e => handleMapClick(e, i)}\n stylesManagedExternally={stylesManagedExternally}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n onBlur={handleBlur}\n elementRef={element => setElementRef(i, element)}\n hasEventHandlers={hasEventHandlers}\n />\n );\n })}\n </div>\n );\n};\n\nexport default ChoroplethLayer;\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/Message\";\nexport * from \"@splunk/visualizations-shared/Message\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualization-context/GeoRegistry\";\nexport * from \"@splunk/visualization-context/GeoRegistry\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualization-context/GeoJsonProvider\";\nexport * from \"@splunk/visualization-context/GeoJsonProvider\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as React from 'react';\nimport type { Map } from 'maplibre-gl';\nimport Message from '@splunk/visualizations-shared/Message';\nimport GeoRegistry from '@splunk/visualization-context/GeoRegistry';\nimport GeoJsonProvider from '@splunk/visualization-context/GeoJsonProvider';\nimport type { Feature, FeatureCollection } from 'geojson';\nimport type { GeoJsonDataType } from '@splunk/visualizations-shared/mapUtils';\nimport { ChoroplethLayerType, getScaledOpacities, formatMetadata, formatTooltipFieldValue } from './MapUtils';\nimport { Choropleth } from './ChoroplethLayer';\nimport { useRovingTabindex } from './useRovingTabindex';\n\ninterface ChoroplethLayerProps {\n width: number | string;\n height: number | string;\n choroplethLayer: ChoroplethLayerType;\n map: React.MutableRefObject<Map>;\n isThemeChanged: boolean;\n setIsThemeChanged: (isThemeChanged: boolean) => void;\n onMapClick?: ({ e, payload }) => void;\n hasEventHandlers?: boolean;\n}\n\nconst LocalChoroplethLayer = (props: ChoroplethLayerProps): JSX.Element => {\n const {\n width,\n height,\n map,\n choroplethLayer,\n isThemeChanged,\n setIsThemeChanged,\n onMapClick,\n hasEventHandlers,\n } = props;\n const cfgOpacity = Math.min(Math.max(choroplethLayer?.choroplethOpacity, 0), 1);\n const emptyFeature: Feature<GeoJsonDataType, Record<string, unknown>> = {\n type: 'Feature',\n properties: { name: '' },\n geometry: null,\n };\n const [geoJson, setGeoJson] = React.useState<FeatureCollection<GeoJsonDataType, Record<string, unknown>>>(\n {\n type: 'FeatureCollection',\n features: [emptyFeature],\n }\n );\n const [validGeoJson, setValidGeoJson] = React.useState(true);\n const [geoJsonError, setGeoJsonError] = React.useState({\n message: '',\n });\n\n const { handleKeyDown, handleFocus, handleBlur, setElementRef } = useRovingTabindex(map);\n\n // load local geoJson registry data\n React.useEffect(() => {\n let isMounted = true;\n const geoRegistry = GeoRegistry.create();\n geoRegistry.addDefaultProvider(new GeoJsonProvider());\n\n const loadGeoJson = async () => {\n try {\n const geoJsonData = (await geoRegistry.getByURL(choroplethLayer.source)) as FeatureCollection<\n GeoJsonDataType,\n Record<string, unknown>\n >;\n if (!isMounted) {\n return;\n }\n setGeoJson(geoJsonData);\n setValidGeoJson(true);\n } catch (e) {\n if (!isMounted) {\n return;\n }\n setGeoJsonError({ message: e instanceof Error ? e.message : '' });\n setValidGeoJson(false);\n }\n };\n\n loadGeoJson();\n\n return () => {\n isMounted = false;\n };\n }, [choroplethLayer.source]);\n\n const updatedPropertyFormat = React.useMemo(() => {\n let propertyFormat = 'name';\n if (choroplethLayer.areaIds && validGeoJson) {\n const propertyFormats = Object.keys(geoJson.features[0].properties);\n\n // check the state or country format used in dataSource\n /* Accepted format for countries:\n \"properties\":\n {\n \"iso2\": \"AM\",\n \"iso3\": \"ARM\",\n \"name\": \"Armenia\"\n }\n\n Accepted format for US States:\n \"properties\":\n {\n \"iso_3166_2\": \"US-MI\",\n \"postal\": \"MI\",\n \"name\": \"Michigan\",\n \"label_en\": \"Michigan\"\n },\n */\n const formatCheck = geoJson.features.flatMap(element =>\n propertyFormats.filter(key => element.properties[key] === choroplethLayer.areaIds[0])\n )[0];\n\n if (formatCheck !== undefined) {\n propertyFormat = formatCheck;\n }\n }\n return propertyFormat;\n }, [choroplethLayer.areaIds, geoJson]);\n\n const colors = choroplethLayer?.dataColors?.map(color => (color?.length > 7 ? color.slice(0, 7) : color));\n const scaledOpacities = getScaledOpacities(choroplethLayer?.dataColors, cfgOpacity) ?? [];\n\n const buildChoroplethData = (el: Feature<GeoJsonDataType, Record<string, unknown>>) => {\n const choroplethData: {\n color: string;\n areaValue: string | number;\n opacity: number;\n name: string;\n idx: number;\n } = {\n color: choroplethLayer.choroplethEmptyAreaColor,\n areaValue: 'No Data',\n opacity: cfgOpacity,\n name: '',\n idx: 0,\n };\n\n const rawName = el.properties[updatedPropertyFormat];\n choroplethData.name =\n typeof rawName === 'string' || typeof rawName === 'number' ? String(rawName) : '';\n\n if (choroplethLayer.areaIds) {\n const lookupValue = choroplethData.name;\n const dataIdx = choroplethLayer.areaIds.indexOf(lookupValue);\n if (dataIdx === -1) {\n choroplethData.idx = choroplethLayer.areaIds.length;\n } else {\n choroplethData.color = colors[dataIdx];\n choroplethData.areaValue = choroplethLayer.areaValues[dataIdx];\n choroplethData.opacity = scaledOpacities[dataIdx];\n choroplethData.idx = dataIdx;\n }\n }\n return choroplethData;\n };\n\n const updatedAllChoroplethData = React.useMemo(() => {\n if (!validGeoJson) return [];\n return geoJson.features.map(el => buildChoroplethData(el));\n }, [\n choroplethLayer.areaIds,\n choroplethLayer.areaValues,\n choroplethLayer.choroplethEmptyAreaColor,\n colors,\n scaledOpacities,\n cfgOpacity,\n validGeoJson,\n geoJson.features,\n updatedPropertyFormat,\n ]);\n\n const handleMapClick = (e, i) => {\n const payload = formatMetadata(choroplethLayer, i);\n onMapClick({ e, payload });\n };\n\n if (isThemeChanged) {\n setIsThemeChanged(false);\n }\n\n const additionalFields = choroplethLayer?.metadata\n ? choroplethLayer.metadata.map(choroplethMetadata => {\n const tooltipFields = choroplethLayer.additionalTooltipFields ?? [];\n return tooltipFields.map(field => ({\n name: field,\n value: formatTooltipFieldValue(choroplethMetadata[field]),\n }));\n })\n : [];\n\n return (\n <div>\n {!validGeoJson && (\n <Message\n data-test=\"choropleth-message\"\n width={width}\n height={height}\n level=\"error\"\n message={geoJsonError.message}\n />\n )}\n {validGeoJson &&\n (() => {\n let renderIndex = 0;\n return updatedAllChoroplethData.map((el, i) => {\n const geometry = geoJson.features[i]?.geometry;\n const geomData: GeoJsonDataType =\n geometry && (geometry.type === 'MultiPolygon' || geometry.type === 'Polygon')\n ? geometry\n : null;\n\n // Skip rendering if geometry is invalid to avoid [0,0] centroid\n if (!geomData) {\n return null;\n }\n\n const currentRenderIndex = renderIndex;\n renderIndex += 1;\n\n return (\n <Choropleth\n key={el.name}\n id={el.name}\n map={map}\n color={el.color}\n opacity={el.opacity}\n strokeColor={choroplethLayer.choroplethStrokeColor}\n areaId={el.name}\n areaValue={\n typeof el.areaValue === 'number' ? el.areaValue : Number(el.areaValue)\n }\n handleMapClick={e => handleMapClick(e, el.idx)}\n isThemeChanged={isThemeChanged}\n geomData={geomData}\n additionalFields={additionalFields[el.idx]}\n tooltipHeader={choroplethLayer.tooltipHeaderField?.[el.idx]}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n onBlur={handleBlur}\n elementRef={element => setElementRef(currentRenderIndex, element)}\n hasEventHandlers={hasEventHandlers}\n />\n );\n });\n })()}\n </div>\n );\n};\n\nexport default LocalChoroplethLayer;\n", "import * as React from 'react';\nimport styled, { StyleSheetManager } from 'styled-components';\nimport { omit, noop } from 'lodash';\nimport { useRef, useEffect, useCallback, useContext, useMemo } from 'react';\nimport chroma from 'chroma-js';\nimport { Map, ScaleControl } from 'maplibre-gl';\nimport type { StyleSpecification } from 'maplibre-gl';\nimport { _ } from '@splunk/ui-utils/i18n';\nimport Button from '@splunk/react-ui/Button';\nimport Tooltip from '@splunk/react-ui/Tooltip';\nimport MapContext from '@splunk/visualization-context/MapContext';\nimport type { MapContextInterface } from '@splunk/visualization-context/MapContext';\nimport { LAYER_TYPE } from '@splunk/visualization-schemas';\nimport { VizProps } from '../../common/interfaces/VizProps';\nimport { getFloatingLayerStyleTarget } from '../../common/utils/shadowDomUtils';\nimport PureMapContainer from './PureMapContainer';\nimport {\n getTilePreset,\n getMapStyle,\n getZoomConstraintsFromTileConfig,\n MAP_STYLE_VERSION_NUMBER,\n ClusterLayerType,\n LayerType,\n MAX_BUBBLE_RADIUS,\n isValidLatLon,\n getGlobalLayerBoundaries,\n compareBaseStyles,\n ChoroplethLayerType,\n isBaseTileConfig,\n} from './MapUtils';\nimport ClusterLayer from './ClusterLayer';\nimport ChoroplethLayer from './ChoroplethLayer';\nimport LocalChoroplethLayer from './LocalChoroplethLayer';\nimport { MapProvider } from './MapContext';\n\nexport const DEFAULT_CENTER: [number, number] = [0, 0];\nexport const DEFAULT_CONTROL_BACKGROUND_COLOR = '#2b3033';\nexport const DEFAULT_CONTROL_FOREGROUND_COLOR = '#B5B5B5';\nexport const DEFAULT_SCALE_UNIT = 'imperial';\nexport const DEFAULT_SHOW_SCALE = true;\nexport const DEFAULT_SHOW_ZOOM_CONTROLS = true;\nexport const DEFAULT_SHOW_BASELAYER = true;\nexport const DEFAULT_ZOOM = 0;\nexport type ScaleUnitType = 'imperial' | 'metric';\nexport type BaseLayerTileServerType = 'vector' | 'raster';\n\nexport interface PureMapProps extends Partial<VizProps> {\n backgroundColor?: string;\n baseLayerTileServer?: string;\n baseLayerTileServerType?: BaseLayerTileServerType;\n center?: [number, number];\n controlBackgroundColor?: string;\n controlForegroundColor?: string;\n layers?: LayerType[];\n scaleUnit?: ScaleUnitType;\n showScale?: boolean;\n showZoomControls?: boolean;\n showBaseLayer?: boolean;\n themeColorScheme?: string;\n title?: string;\n zoom?: number;\n onMapLoad?: { exec: () => void };\n onMapClick?: (event: { e: unknown; payload: Record<string, unknown> }) => void;\n onOptionsChange?: (options: Record<string, unknown>) => void;\n showCoordinates?: boolean;\n hasEventHandlers?: boolean;\n}\n\nexport interface HexColorObj {\n color: string;\n opacity: number;\n}\n\n// convert rgb/rgba/hex color to encoded color & opacity for SVG strings\nexport const formatColor = (color: string): HexColorObj => {\n const chromaColor = chroma(color);\n return {\n color: chroma(chromaColor.rgb()).hex().replace('#', '%23'),\n opacity: chromaColor.alpha(),\n };\n};\n\nconst ControlButtonContainer = styled.div<{\n controlBackgroundColor: string;\n}>`\n position: absolute;\n left: 16px;\n z-index: 3;\n width: 40px;\n border-radius: 4px;\n background-color: ${props => props.controlBackgroundColor};\n box-shadow:\n 0px 26px 103px rgba(0, 0, 0, 0.64),\n 0px 11px 18px rgba(0, 0, 0, 0.32),\n 0px 3px 6px rgba(0, 0, 0, 0.3);\n`;\n\nconst ZoomControlsContainer = styled(ControlButtonContainer)`\n top: 12px;\n display: flex;\n flex-direction: column;\n`;\n\nconst FitToDataButtonContainer = styled(ControlButtonContainer)<{\n controlBackgroundColor: string;\n showZoomControls?: boolean;\n}>`\n top: ${props => (props.showZoomControls ? '115px' : '12px')};\n`;\n\nconst ControlButton = styled(Button)<{\n controlBackgroundColor: string;\n controlForegroundColor: string;\n controlIconColorEncoded: { color: string; opacity: number };\n}>`\n width: 40px;\n height: 43px;\n border: none;\n background-color: ${props => props.controlBackgroundColor};\n background-repeat: no-repeat;\n background-position: center;\n`;\n\nconst ZoomInButton = styled(ControlButton).attrs({\n 'data-test': 'zoom-in-button',\n 'data-is-first': true,\n})`\n background-image: url('data:image/svg+xml;charset=UTF-8,<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M9 1C9 0.447715 8.55229 0 8 0C7.44772 0 7 0.447715 7 1V7H1C0.447715 7 0 7.44772 0 8C0 8.55229 0.447715 9 1 9H7V15C7 15.5523 7.44772 16 8 16C8.55229 16 9 15.5523 9 15V9H15C15.5523 9 16 8.55229 16 8C16 7.44772 15.5523 7 15 7H9V1Z\" fill=\"${props =>\n props.controlIconColorEncoded.color}\" fill-opacity=\"${props =>\n props.controlIconColorEncoded.opacity}\" /></svg>');\n`;\n\nconst ZoomOutButton = styled(ControlButton).attrs({\n 'data-test': 'zoom-out-button',\n})`\n background-image: url('data:image/svg+xml;charset=UTF-8,<svg width=\"14\" height=\"3\" viewBox=\"0 0 14 3\" xmlns=\"http://www.w3.org/2000/svg\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M0 1.99707C0 1.44479 0.447715 0.99707 1 0.99707H13C13.5523 0.99707 14 1.44479 14 1.99707C14 2.54936 13.5523 2.99707 13 2.99707H1C0.447715 2.99707 0 2.54936 0 1.99707Z\" fill=\"${props =>\n props.controlIconColorEncoded.color}\" fill-opacity=\"${props =>\n props.controlIconColorEncoded.opacity}\" /></svg>');\n`;\n\nconst StyledFitToDataButton = styled(ControlButton).attrs({\n 'data-test': 'fit-to-data-button',\n})`\n height: 40px;\n background-image: url('data:image/svg+xml;charset=UTF-8,<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"${props =>\n props.controlIconColorEncoded\n .color}\" stroke-width=\"2\" stroke-linecap=\"round\"/><path d=\"M12 3.5V6.5M12 20.5V17.5M3.5 12H6.5M20.5 12H17.5\" stroke=\"${props =>\n props.controlIconColorEncoded.color}\" stroke-width=\"2\" stroke-linecap=\"round\"/></svg>');\n`;\n\nPureMapContainer.displayName = 'PureMapContainer';\n\nconst DEFAULT_LAYERS: LayerType[] = [];\nconst DEFAULT_ON_MAP_LOAD = { exec: noop };\n\nconst PureMap = ({\n width = 800,\n height = 500,\n backgroundColor = '#0b0c0e',\n baseLayerTileServer,\n baseLayerTileServerType,\n center,\n controlBackgroundColor = DEFAULT_CONTROL_BACKGROUND_COLOR,\n controlForegroundColor = DEFAULT_CONTROL_FOREGROUND_COLOR,\n layers = DEFAULT_LAYERS,\n scaleUnit = DEFAULT_SCALE_UNIT,\n showScale = DEFAULT_SHOW_SCALE,\n showZoomControls = DEFAULT_SHOW_ZOOM_CONTROLS,\n showBaseLayer = DEFAULT_SHOW_BASELAYER,\n themeColorScheme = 'dark',\n zoom,\n onMapLoad = DEFAULT_ON_MAP_LOAD,\n onMapClick = noop,\n onOptionsChange = noop,\n title,\n showCoordinates,\n hasEventHandlers = false,\n}: PureMapProps): JSX.Element => {\n const { defaultTileConfig, customTileConfig } = useContext<MapContextInterface>(MapContext);\n const basemapContainer = useRef<HTMLDivElement>(null);\n const map = useRef<Map>(null);\n const scaleControl = useRef<ScaleControl>(null);\n const fitToDataButtonClickedRef = useRef<boolean>(false);\n const isUserInteractingRef = useRef<boolean>(false);\n const [hasUserPanned, setHasUserPanned] = React.useState<boolean>(false);\n\n const { tilePreset, defaultTileLight, defaultTileDark } = useMemo(\n () => getTilePreset({ defaultTileConfig, customTileConfig }),\n [defaultTileConfig, customTileConfig]\n );\n\n const [currentZoomLevel, _setCurrentZoomLevel] = React.useState<number>(zoom ?? DEFAULT_ZOOM);\n const currentZoomLevelRef = useRef(currentZoomLevel);\n const setCurrentZoomLevel = newZoom => {\n currentZoomLevelRef.current = newZoom;\n _setCurrentZoomLevel(newZoom);\n };\n const [isMapLoaded, setMapIsLoaded] = React.useState<boolean>(false);\n const [isThemeChanged, setIsThemeChanged] = React.useState<boolean>(false);\n // We are tracking mapMinZoom, which is the smallest zoom the map is capable of doing\n // This is because DEFAULT_ZOOM of 0 is sometimes not possible for maps with height > 500.\n // The map will do a little shake when it tries, and then auto change zoom value to mapMinZoom.\n // Interestingly, the larger the map height, the larger the mapMinZoom is.\n // For some reason, map.getMinZoom() is always 0, might be a MapLibre bug.\n const [mapMinZoom, _setMapMinZoom] = React.useState<number>(-1);\n const mapMinZoomRef = useRef(mapMinZoom);\n const setMapMinZoom = newMinZoom => {\n mapMinZoomRef.current = newMinZoom;\n _setMapMinZoom(newMinZoom);\n };\n // Assign default center when no center is defined\n const lngLatCenter = useMemo<[number, number]>(() => {\n if (!isValidLatLon(center)) {\n return DEFAULT_CENTER;\n }\n return [center[1], center[0]];\n }, [center]);\n\n // Assign default zoom when no zoom is defined\n const zoomLevel = useMemo(() => {\n if (zoom === undefined) {\n return DEFAULT_ZOOM;\n }\n return zoom;\n }, [zoom]);\n\n const setIsThemeChangedCallback = (isMyThemeChanged: boolean) => {\n setIsThemeChanged(isMyThemeChanged);\n };\n\n const onOptionsChangeProxy = useCallback(\n e => {\n onOptionsChange(e);\n },\n [onOptionsChange]\n );\n\n const fitMapToContent = useCallback(() => {\n if (!layers[0] || !map.current) {\n return;\n }\n const lngLatBounds = getGlobalLayerBoundaries([layers[0]]);\n map.current.fitBounds(\n lngLatBounds,\n {\n padding: MAX_BUBBLE_RADIUS + 5,\n animate: false,\n },\n { triggeredFromFitBounds: true }\n );\n }, [layers]);\n\n const addZoomEndEventListener = useCallback(() => {\n // register event listener - zoom\n map.current.on('zoomend', event => {\n const mapZoomLevel = map.current.getZoom();\n if (mapZoomLevel < mapMinZoomRef.current) {\n setMapMinZoom(mapZoomLevel);\n }\n // @ts-ignore\n if (event?.triggeredFromFitBounds) {\n return;\n }\n setCurrentZoomLevel(mapZoomLevel);\n });\n }, []);\n\n const initializeMap = useCallback(\n mapStyle => {\n map.current = new Map({\n container: basemapContainer.current,\n canvasContextAttributes: {\n preserveDrawingBuffer: true,\n },\n style: mapStyle,\n center: lngLatCenter,\n zoom: zoomLevel,\n cooperativeGestures: true,\n locale: {\n 'CooperativeGesturesHandler.WindowsHelpText': _('Use Ctrl + scroll to zoom map'),\n 'CooperativeGesturesHandler.MacHelpText': _('Use \u2318 + scroll to zoom map'),\n 'CooperativeGesturesHandler.MobileHelpText': _('Use two fingers to move the map'),\n },\n attributionControl: false,\n ...getZoomConstraintsFromTileConfig(mapStyle, baseLayerTileServer),\n });\n // Fired immediately after all necessary resources have been downloaded\n // and the first visually complete rendering of the map has occurred.\n map.current.on('load', () => {\n if (layers?.length > 0 && center === undefined && zoom === undefined) {\n setMapMinZoom(map.current.getZoom());\n map.current.once('zoomend', () => {\n addZoomEndEventListener();\n });\n fitMapToContent();\n } else {\n addZoomEndEventListener();\n }\n setMapIsLoaded(true);\n // https://maplibre.org/maplibre-gl-js-docs/api/map/#map#fitbounds. Need alternate approach to handle the same.\n setTimeout(() => {\n if (map?.current?.redraw) {\n map.current.redraw();\n }\n if (onMapLoad && typeof onMapLoad.exec === 'function') {\n onMapLoad.exec();\n }\n }, 500);\n });\n\n map.current.on('dragstart', () => {\n setHasUserPanned(true);\n });\n map.current.on('zoomstart', e => {\n if (e.originalEvent) {\n setHasUserPanned(true);\n }\n });\n\n // register event listener - drag\n map.current.on('dragend', () => {\n const newCenter = map.current.getCenter();\n onOptionsChangeProxy({\n center: [newCenter.lat, newCenter.lng],\n zoom: map.current.getZoom(),\n });\n });\n\n map.current.on('dragstart', () => {\n isUserInteractingRef.current = true;\n });\n\n map.current.on('dragend', () => {\n setTimeout(() => {\n if (isUserInteractingRef) {\n isUserInteractingRef.current = false;\n }\n }, 100);\n });\n\n map.current.on('zoomstart', () => {\n isUserInteractingRef.current = true;\n });\n\n map.current.on('zoomend', () => {\n setTimeout(() => {\n if (isUserInteractingRef) {\n isUserInteractingRef.current = false;\n }\n }, 100);\n });\n\n map.current.on('resize', () => {\n const mapZoomLevel = map.current.getZoom();\n // If the map's zoom value is at the min zoom, and the map did a resize\n // sometimes the map will have a changed min zoom value.\n // Then we want to update the map's min zoom value.\n if (\n currentZoomLevelRef.current <= mapMinZoomRef.current &&\n mapZoomLevel !== mapMinZoomRef.current\n ) {\n setMapMinZoom(mapZoomLevel);\n }\n });\n },\n [lngLatCenter, zoomLevel, layers?.length]\n );\n\n const initializeScale = useCallback(() => {\n scaleControl.current = new ScaleControl({\n maxWidth: 70,\n unit: scaleUnit,\n });\n map.current.addControl(scaleControl.current);\n }, [scaleUnit]);\n\n const updateScale = useCallback(() => {\n if (showScale) {\n scaleControl?.current?.setUnit(scaleUnit);\n }\n }, [scaleUnit, showScale]);\n\n useEffect(() => {\n if (map.current) {\n map.current.resize();\n }\n }, [width, height]);\n\n useEffect(() => {\n if (map.current) {\n // We want to skip onOptionsChangeProxy if we have transitioned into the default map state, with undefined zoom and center.\n // This is because the DEFAULT_ZOOM value, 0, is sometimes not possible for maps with height > 500.\n // So in those cases the map will auto change its zoom from 0 => mapMinZoom\n // Since this is not a user event we don't want to broadcast it.\n if (\n currentZoomLevel === mapMinZoomRef.current &&\n (zoom === undefined || zoom < mapMinZoomRef.current)\n ) {\n return;\n }\n const newCenter = map.current.getCenter();\n onOptionsChangeProxy({\n // when zooming with mouse/track pad,\n // zooming centers at the cursor position, need to update center as well\n center: [newCenter.lat, newCenter.lng],\n zoom: currentZoomLevel,\n });\n }\n }, [currentZoomLevel, onOptionsChangeProxy]);\n\n useEffect(() => {\n // do not render when defaultTileConfig, customTileConfig and tileset are not configured\n if (Object.keys(tilePreset).length === 0 && (!baseLayerTileServer || !baseLayerTileServerType)) {\n // eslint-disable-next-line no-console\n console.warn(\n 'Map Tile Server configuration is missing or invalid. Please provide a valid configuration'\n );\n return;\n }\n\n const mapStyle = getMapStyle({\n showBaseLayer,\n baseLayerTileServer,\n baseLayerTileServerType,\n tilePreset,\n colorScheme: themeColorScheme,\n defaultTileLight,\n defaultTileDark,\n });\n\n if (!isBaseTileConfig(mapStyle)) {\n return;\n }\n\n mapStyle.version = MAP_STYLE_VERSION_NUMBER;\n\n // If the map has already been initialized, we update the styles\n if (map.current) {\n const curr = map.current.getStyle();\n const next = omit(mapStyle, ['theme', 'name', 'key']);\n\n // In dashboard studio this setStyle function is triggered by zoom changes as well\n // Since setStyle will reset all style layers on the map including choropleth,\n // we ONLY want to this to be called when there are style changes\n if (!compareBaseStyles(curr, next)) {\n // Refer to https://maplibre.org/maplibre-gl-js-docs/api/map/#setstyle-example for options.diff (default is true)\n map.current.setStyle(omit(mapStyle, ['theme', 'name', 'key']) as StyleSpecification);\n setIsThemeChanged(true);\n }\n const { minZoom, maxZoom } = getZoomConstraintsFromTileConfig(mapStyle, baseLayerTileServer);\n map.current.setMinZoom(minZoom);\n map.current.setMaxZoom(maxZoom);\n updateScale();\n } else {\n // initialize the map only once with a constructed style from user configured options\n // or default configs from the map context\n initializeMap(omit(mapStyle, ['theme', 'name', 'key']) as StyleSpecification);\n initializeScale();\n }\n }, [\n showBaseLayer,\n tilePreset,\n initializeMap,\n initializeScale,\n updateScale,\n defaultTileLight,\n defaultTileDark,\n baseLayerTileServer,\n baseLayerTileServerType,\n themeColorScheme,\n ]);\n\n useEffect(() => {\n if (map.current) {\n if (fitToDataButtonClickedRef.current) {\n return;\n }\n if (isUserInteractingRef.current) {\n return;\n }\n map.current.flyTo({\n center: lngLatCenter,\n // Make sure we are not flying to a zoom value smaller than the mapMinZoom\n // If we do, the map will do a little shake.\n zoom: Math.max(zoomLevel, mapMinZoomRef.current),\n });\n }\n }, [lngLatCenter, zoomLevel]);\n\n useEffect(\n () => () => {\n if (map.current) {\n map.current.remove();\n }\n },\n []\n );\n\n const [layer] = layers;\n\n // when datasource changes or fit to data button clicked, we want to auto zoom if zoom is undefined\n useEffect(() => {\n if (isMapLoaded && layer && zoom === undefined && center === undefined) {\n fitMapToContent();\n fitToDataButtonClickedRef.current = false;\n }\n }, [\n layer?.resultLimit,\n (layer as ClusterLayerType)?.latitude,\n (layer as ClusterLayerType)?.longitude,\n (layer as ChoroplethLayerType)?.areaIds,\n zoom,\n center,\n ]);\n\n const showResetButton = useCallback(() => {\n return center !== undefined || zoom !== undefined || hasUserPanned;\n }, [center, zoom, hasUserPanned]);\n\n const handleResetClick = useCallback(() => {\n fitToDataButtonClickedRef.current = true;\n setHasUserPanned(false);\n\n if (map.current) {\n if (center !== undefined && zoom !== undefined) {\n map.current.jumpTo({\n center: lngLatCenter,\n zoom: Math.max(zoomLevel, mapMinZoomRef.current),\n });\n } else {\n fitMapToContent();\n }\n }\n\n onOptionsChangeProxy({ center: undefined, zoom: undefined });\n }, [onOptionsChangeProxy, fitMapToContent, center, zoom, lngLatCenter, zoomLevel]);\n\n const floatingLayerStyleTarget = getFloatingLayerStyleTarget(basemapContainer.current);\n const stylesManagedExternally = Boolean(floatingLayerStyleTarget);\n const wrapFloatingLayers = (children: React.ReactNode) =>\n floatingLayerStyleTarget ? (\n <StyleSheetManager target={floatingLayerStyleTarget}>{children}</StyleSheetManager>\n ) : (\n children\n );\n\n const handleZoomIn = useCallback(() => {\n if (map.current) {\n map.current.zoomIn();\n }\n }, []);\n\n const handleZoomOut = useCallback(() => {\n if (map.current) {\n map.current.zoomOut();\n }\n }, []);\n\n return (\n <PureMapContainer\n aria-label={title || _('Map')}\n className=\"puremap\"\n width={width}\n height={height}\n backgroundColor={backgroundColor}\n controlBackgroundColor={controlBackgroundColor}\n controlForegroundColor={controlForegroundColor}\n controlIconColorEncoded={formatColor(controlForegroundColor)}\n ref={basemapContainer}\n showScale={showScale}\n showZoomControls={showZoomControls}\n >\n {showZoomControls && (\n <ZoomControlsContainer controlBackgroundColor={controlBackgroundColor}>\n <Tooltip content={_('Zoom in')} contentRelationship=\"label\" defaultPlacement=\"right\">\n <ZoomInButton\n onClick={handleZoomIn}\n controlBackgroundColor={controlBackgroundColor}\n controlForegroundColor={controlForegroundColor}\n controlIconColorEncoded={formatColor(controlForegroundColor)}\n />\n </Tooltip>\n <Tooltip content={_('Zoom out')} contentRelationship=\"label\" defaultPlacement=\"right\">\n <ZoomOutButton\n onClick={handleZoomOut}\n controlBackgroundColor={controlBackgroundColor}\n controlForegroundColor={controlForegroundColor}\n controlIconColorEncoded={formatColor(controlForegroundColor)}\n />\n </Tooltip>\n </ZoomControlsContainer>\n )}\n {showResetButton() && (\n <FitToDataButtonContainer\n controlBackgroundColor={controlBackgroundColor}\n showZoomControls={showZoomControls}\n >\n <Tooltip content={_('Fit to data')} contentRelationship=\"label\" defaultPlacement=\"right\">\n <StyledFitToDataButton\n onClick={handleResetClick}\n controlBackgroundColor={controlBackgroundColor}\n controlForegroundColor={controlForegroundColor}\n controlIconColorEncoded={formatColor(controlForegroundColor)}\n />\n </Tooltip>\n </FitToDataButtonContainer>\n )}\n {wrapFloatingLayers(\n <>\n {isMapLoaded &&\n layer &&\n (layer.type === LAYER_TYPE.Bubble || layer.type === LAYER_TYPE.Marker) && (\n <ClusterLayer\n clusterLayer={layer as ClusterLayerType}\n themeColorScheme={themeColorScheme}\n map={map}\n zoom={currentZoomLevel}\n onMapClick={onMapClick}\n showCoordinates={showCoordinates}\n stylesManagedExternally={stylesManagedExternally}\n hasEventHandlers={hasEventHandlers}\n />\n )}\n {isMapLoaded &&\n layer &&\n layer.type === LAYER_TYPE.Choropleth &&\n (layer as ChoroplethLayerType).source && (\n <MapProvider>\n <LocalChoroplethLayer\n width={width}\n height={height}\n map={map}\n choroplethLayer={layer as ChoroplethLayerType}\n isThemeChanged={isThemeChanged}\n setIsThemeChanged={setIsThemeChangedCallback}\n onMapClick={onMapClick}\n hasEventHandlers={hasEventHandlers}\n />\n </MapProvider>\n )}\n {isMapLoaded &&\n layer &&\n layer.type === LAYER_TYPE.Choropleth &&\n !(layer as ChoroplethLayerType).source && (\n <MapProvider>\n <ChoroplethLayer\n map={map}\n choroplethLayer={layer as ChoroplethLayerType}\n isThemeChanged={isThemeChanged}\n setIsThemeChanged={setIsThemeChangedCallback}\n onMapClick={onMapClick}\n stylesManagedExternally={stylesManagedExternally}\n hasEventHandlers={hasEventHandlers}\n />\n </MapProvider>\n )}\n </>\n )}\n </PureMapContainer>\n );\n};\n\nexport default PureMap;\n", "\nimport * as defaultImport from \"@splunk/visualization-color-palettes/editors/PresetPalettes\";\nexport * from \"@splunk/visualization-color-palettes/editors/PresetPalettes\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualization-icons\";\nexport * from \"@splunk/visualization-icons\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualization-icons/placeholders\";\nexport * from \"@splunk/visualization-icons/placeholders\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/configUtils\";\nexport * from \"@splunk/visualizations-shared/configUtils\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import { get, range } from 'lodash';\nimport { isDynamicOption } from '@splunk/visualizations-shared/configUtils';\nimport { VizConfig } from '../interfaces/VizConfig';\nimport { EditorLayoutConfig, EditorConfig } from '../interfaces/Editor';\n\n// included for backwards compatibility\nexport { enhanceOptionsSchemaWithDynamicOptions } from '@splunk/visualization-schemas';\n\nexport interface PresetEntry {\n name: string;\n value: any;\n label: string;\n}\n\n/**\n * Helper function to enhance a Visualization Config as needed based on behaviors specified in supports block\n * this function also collapse all editor panels\n * @param vizConfig a Visualization Config\n * @returns an enhanced Visualization Config containing updated config entries based on behaviors it supports\n * and containing `open: false` for all editor panels in editorConfig\n */\nfunction enhanceConfig(vizConfig: VizConfig): VizConfig {\n const enhancedConfig: VizConfig = { ...vizConfig };\n\n enhancedConfig.editorConfig = vizConfig.editorConfig.map((config: EditorConfig): EditorConfig => {\n return { ...config, open: config.open || false };\n });\n return enhancedConfig;\n}\n\n/**\n * Helper function to uncollapse all editor panels by adding `open: true` to the editorConfig\n * Created for editor unit tests\n * @param vizConfig a Visualization Config\n * @returns a Visualization Config containing `open: true` for all editor panels in editorConfig\n */\nfunction uncollapseEditorConfig(vizConfig: VizConfig): VizConfig {\n const editorPanelUncollapsedConfig: VizConfig = { ...vizConfig };\n editorPanelUncollapsedConfig.editorConfig = vizConfig.editorConfig.map(\n (config: EditorConfig): EditorConfig => {\n return { ...config, open: true };\n }\n );\n return editorPanelUncollapsedConfig;\n}\n\n// private helpers to improve readability of getInitialPreset\n// this shouldn't be tested since this util isn't something that we expect to use outside of getInitialPreset\n\n/**\n * this checks to make sure that all values within vizContext are compatible with the given preset's context to determine the initialPreset\n * if a preset has explicitly specified a key as being undefined, the vizContext must also has that key as undefined, or else this CANNOT be the initialPreset\n * the inverse is true; if a preset has key is NOT undefined, it must also be NOT undefined in the corresponding vizContext\n * the internal config contents are irrelevant (as the user could customize them in source), just as long as the presence of `undefined`s match up\n *\n * Since the presetConfigs have explicit undefined keys to override the existing config, we need to explicitly check the undefined values\n */\nfunction hasCompatibleContexts(\n vizContext: { [configKey: string]: any },\n presetContext: { [configKey: string]: any }\n): boolean {\n const presetContextKeys = Object.keys(presetContext);\n return presetContextKeys.every(\n (contextKey): boolean =>\n (presetContext[contextKey] === undefined && vizContext[contextKey] === undefined) ||\n (presetContext[contextKey] !== undefined && vizContext[contextKey] !== undefined)\n );\n}\n\n/**\n * Checks to make sure that dynamic (non-dynamic) options in a given preset are also dynamic (non-dynamic) in the vizOptions\n */\nfunction hasCompatibleOptions(\n vizOptions: { [configKey: string]: any },\n presetOptions: { [configKey: string]: any }\n): boolean {\n const presetOptionKeys = Object.keys(presetOptions);\n return presetOptionKeys.every(\n (optionKey): boolean =>\n isDynamicOption(presetOptions[optionKey]) === isDynamicOption(vizOptions[optionKey])\n );\n}\n\n/**\n * Evaluates whether there is an initialPreset that fits the current state of vizContext + vizOptions\n * This function ignores extraneous vizOptions or vizContext keys, as they could be outside the scope of what the preset is intended to configure\n *\n * @param {Object} vizContext - the current vizContext definition\n * @param {Object} vizOptions - the current vizOptions definition\n * @param {PresetEntry[]} presets - the list of presets, one of which can be considered an initialPreset\n */\nfunction getInitialPreset(\n vizContext: { [configKey: string]: any },\n vizOptions: { [configKey: string]: any },\n presets: PresetEntry[]\n): PresetEntry | null {\n return presets.find((preset): boolean => {\n const presetContext = get(preset, ['value', 'context'], {});\n const presetOptions = get(preset, ['value', 'options'], {});\n const presetContextKeys = Object.keys(presetContext);\n const presetOptionKeys = Object.keys(presetOptions);\n\n // all presets have to explicitly specify which options to reset (i.e. need explicitly undefined keys)\n // if not, then the preset is invalid in config.ts\n if (presetContextKeys.length === 0 || presetOptionKeys.length === 0) return false;\n\n return (\n hasCompatibleContexts(vizContext, presetContext) &&\n hasCompatibleOptions(vizOptions, presetOptions)\n );\n });\n}\n\ninterface PrecisionOption {\n label: string;\n value: number;\n}\n\n/**\n * generates number precision values for a Select editor\n *\n * @param {Number} numPrecisionValues - number of integer precision values to generate\n * @returns {{ label: string; value; string }[]} array of { label, value } tuples\n */\nfunction generatePrecisionValues(numPrecisionValues: number): PrecisionOption[] {\n return range(0, numPrecisionValues + 1).map(\n (i): PrecisionOption => ({\n label: `${i} (0${i > 0 ? '.' : ''}${'0'.repeat(i)})`, // e.g. 0.000 for numPrecisionValues = 3\n value: i,\n })\n );\n}\n\nexport { enhanceConfig, getInitialPreset, generatePrecisionValues, uncollapseEditorConfig, isDynamicOption };\n\n/**\n * insert layout in layout array, return a new layout array instead of updating the original\n *\n * @param {EditorLayoutConfig[][]} layout - editor layout\n * @param {Number} index - the index to insert layout item(s)\n * @param {EditorLayoutConfig[][]} layoutItems - the item(s) to insert\n * @returns {EditorLayoutConfig[][]} new editor layout with insertion\n */\nexport const insertLayout = (\n layout: EditorLayoutConfig[][],\n index: number,\n ...layoutItems: EditorLayoutConfig[][]\n): EditorLayoutConfig[][] => [\n // copy part of the array before the specified index\n ...layout.slice(0, index),\n // inserted layout item\n ...layoutItems,\n // copy part of the array after the specified index\n ...layout.slice(index),\n];\n", "import { _ } from '@splunk/ui-utils/i18n';\nimport { EditorLayoutConfig } from '../interfaces/Editor';\nimport { ThemedDefaults } from '../interfaces/ThemedDefaults';\n\ninterface BackgroundEditorProps {\n label?: string;\n themes: ThemedDefaults;\n labelPosition?: string;\n}\n\nconst background: ({ label, themes, labelPosition }: BackgroundEditorProps) => EditorLayoutConfig[] = ({\n label,\n themes,\n labelPosition,\n}) => [\n {\n label: _(label || 'Background color'),\n option: 'backgroundColor',\n editor: 'editor.color',\n editorProps: {\n labelPosition: labelPosition || 'top',\n themes,\n },\n },\n];\n\nexport default background;\n", "\nimport * as defaultImport from \"@splunk/themes/pick\";\nexport * from \"@splunk/themes/pick\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/themes/variables\";\nexport * from \"@splunk/themes/variables\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import pick from '@splunk/themes/pick';\nimport variables from '@splunk/themes/variables';\n\nexport const defaultBackgroundColor = props =>\n pick({\n enterprise: {\n dark: variables.black(props),\n light: variables.white(props),\n },\n prisma: variables.backgroundColorSection(props),\n })(props);\n", "import { _ } from '@splunk/ui-utils/i18n';\nimport { pick, variables } from '@splunk/themes';\nimport { defaultPalettesConfig } from '@splunk/visualization-color-palettes/editors/PresetPalettes';\nimport { mapOptionsSchema as optionsSchema, LAYER_TYPE } from '@splunk/visualization-schemas';\nimport { Map as MapIcon } from '@splunk/visualization-icons';\nimport { Map as MapPlaceholderIcon } from '@splunk/visualization-icons/placeholders';\n\nimport { DataContract } from '../common/interfaces/DataContract';\nimport { DefaultContext } from '../common/interfaces/DefaultContext';\nimport { EditorConfig } from '../common/interfaces/Editor';\nimport { ThemedDefaults } from '../common/interfaces/ThemedDefaults';\nimport { VizBehavior } from '../common/interfaces/VizBehavior';\nimport { VizCategory } from '../common/interfaces/VizCategory';\nimport { VizConfig } from '../common/interfaces/VizConfig';\nimport { VizSize } from '../common/interfaces/VizSize';\nimport { enhanceConfig } from '../common/utils/configUtils';\nimport getBackgroundColorEditor from '../common/editorConfig/BackgroundColor';\nimport { defaultBackgroundColor } from '../common/ThemedDefaults';\n\nconst defaultContext: DefaultContext = {\n colorRangeConfig: [\n { to: 20, value: '#D41F1F' },\n { from: 20, to: 40, value: '#D94E17' },\n { from: 40, to: 60, value: '#CBA700' },\n { from: 60, to: 80, value: '#669922' },\n { from: 80, value: '#118832' },\n ],\n colorMatchConfig: [{ match: '', value: '#5C33FF' }],\n colorGradientConfig: { colors: ['#252214', '#B846BB'] },\n};\n\nconst dataContract: DataContract = {\n requiredDataSources: [],\n optionalDataSources: [\n {\n name: 'primary',\n description: 'DataSource that powers the visualization.',\n },\n ],\n initialRequestParams: {\n primary: { offset: 0, count: 10000 },\n },\n};\n\nconst size: VizSize = {\n initialWidth: 800,\n initialHeight: 600,\n};\n\nconst themes: ThemedDefaults = {\n defaultBackgroundColor,\n controlBackgroundColor: props =>\n pick({\n enterprise: {\n dark: variables.gray22(props),\n light: variables.white(props),\n },\n prisma: variables.backgroundColorPopup(props),\n })(props),\n controlForegroundColor: props =>\n pick({\n enterprise: variables.textColor(props),\n prisma: variables.contentColorDefault(props),\n })(props),\n defaultChoroplethEmptyAreaColor: props =>\n pick({\n enterprise: {\n dark: variables.gray22(props),\n light: variables.gray92(props),\n },\n prisma: {\n dark: variables.interactiveColorBackground(props),\n light: variables.neutral300(props),\n },\n })(props),\n defaultGradientMigrationConfig: props =>\n pick({\n enterprise: {\n dark: ['#4D4A5D', variables.syntaxPurple(props)],\n light: ['#D2CFDC', variables.syntaxPurple(props)],\n },\n prisma: {\n dark: ['#484558', variables.syntaxPurple(props)],\n light: ['#D8D4E1', variables.syntaxPurple(props)],\n },\n })(props),\n};\n\nconst isChoroplethLayer = options => options.layers?.[0]?.type === LAYER_TYPE.Choropleth;\n\nconst isLocalChoroplethLayer = options =>\n isChoroplethLayer(options) &&\n (options.layers[0].source === 'geo://default/us' || options.layers[0].source === 'geo://default/world');\n\nconst EDITOR_LABEL_WIDTH = 140;\nconst editorConfig: EditorConfig[] = [\n {\n label: _('Data configurations'),\n layout: [\n [\n {\n label: _('Layer type'),\n option: 'layers[0].type',\n editor: 'editor.select',\n editorProps: {\n values: [\n { label: _('Bubble'), value: LAYER_TYPE.Bubble },\n { label: _('Marker'), value: LAYER_TYPE.Marker },\n {\n label: _('Choropleth'),\n value: LAYER_TYPE.Choropleth,\n },\n ],\n },\n },\n ],\n [\n {\n label: _('Area IDs'),\n option: 'layers[0].areaIds',\n editor: 'editor.columnSelector',\n showEditor: ({ options }) => isChoroplethLayer(options),\n editorProps: {\n dataSourceKey: 'primary',\n shouldShowInternalFields: false,\n filterByTypes: ['string'],\n },\n },\n ],\n [\n {\n label: _('Area values'),\n option: 'layers[0].areaValues',\n editor: 'editor.columnSelector',\n showEditor: ({ options }) => isChoroplethLayer(options),\n editorProps: {\n dataSourceKey: 'primary',\n shouldShowInternalFields: false,\n filterByTypes: ['number'],\n },\n },\n ],\n [\n {\n label: _('Latitude'),\n option: 'layers[0].latitude',\n editor: 'editor.columnSelector',\n showEditor: ({ options }) => !isChoroplethLayer(options),\n editorProps: {\n dataSourceKey: 'primary',\n shouldShowInternalFields: false,\n },\n },\n ],\n [\n {\n label: _('Longitude'),\n option: 'layers[0].longitude',\n editor: 'editor.columnSelector',\n showEditor: ({ options }) => !isChoroplethLayer(options),\n editorProps: {\n dataSourceKey: 'primary',\n shouldShowInternalFields: false,\n },\n },\n ],\n [\n {\n label: _('Bubble size'),\n option: 'layers[0].bubbleSize',\n editor: 'editor.columnMultiSelector',\n showEditor: ({ options }) =>\n !(\n options.layers?.length &&\n (options.layers[0].type === 'marker' || options.layers[0].type === 'choropleth')\n ),\n editorProps: {\n dataSourceKey: 'primary',\n shouldShowInternalFields: false,\n excludeByNames: ['latitude', 'longitude', 'geobin'],\n },\n },\n ],\n [\n {\n label: _('Additional tooltip fields'),\n option: 'layers[0].additionalTooltipFields',\n editor: 'editor.columnMultiSelectionByFieldNameEditor',\n },\n ],\n [\n {\n label: _('Tooltip header field'),\n option: 'layers[0].tooltipHeaderField',\n editor: 'editor.columnSelector',\n editorProps: {\n dataSourceKey: 'primary',\n shouldShowInternalFields: false,\n },\n },\n ],\n [\n {\n label: _('Result limit'),\n option: 'layers[0].resultLimit',\n editor: 'editor.number',\n showEditor: ({ options }) => !isLocalChoroplethLayer(options),\n editorProps: {\n themes,\n labelPosition: 'top',\n min: 0,\n },\n },\n ],\n ],\n },\n {\n label: _('Data display'),\n layout: [\n [\n {\n label: _('Latitude (initial map location)'),\n option: 'center[0]',\n editor: 'editor.number',\n editorProps: {\n themes,\n labelPosition: 'top',\n min: -90,\n max: 90,\n },\n },\n ],\n [\n {\n label: _('Longitude (initial map location)'),\n option: 'center[1]',\n editor: 'editor.number',\n editorProps: {\n themes,\n labelPosition: 'top',\n min: -180,\n max: 180,\n },\n },\n ],\n [\n {\n label: _('Zoom (initial map location)'),\n option: 'zoom',\n editor: 'editor.number',\n editorProps: {\n themes,\n labelPosition: 'top',\n min: 0,\n },\n },\n ],\n [\n {\n label: _('Show Latitude and Longitude'),\n option: 'showCoordinates',\n editor: 'editor.checkbox',\n editorProps: {\n labelPosition: 'right',\n labelWidth: EDITOR_LABEL_WIDTH,\n },\n },\n ],\n [\n {\n label: _('Show zoom controls'),\n option: 'showZoomControls',\n editor: 'editor.checkbox',\n editorProps: {\n labelPosition: 'right',\n labelWidth: EDITOR_LABEL_WIDTH,\n },\n },\n ],\n [\n {\n label: _('Show scale'),\n option: 'showScale',\n editor: 'editor.toggle',\n editorProps: {\n labelPosition: 'right',\n labelWidth: EDITOR_LABEL_WIDTH,\n },\n },\n ],\n [\n {\n label: _('Scale unit'),\n option: 'scaleUnit',\n editor: 'editor.radioBar',\n showEditor: ({ options }) => options.showScale !== false,\n editorProps: {\n values: [\n { label: _('Metric'), value: 'metric' },\n { label: _('Imperial'), value: 'imperial' },\n ],\n },\n },\n ],\n ],\n },\n {\n label: _('Color and style'),\n layout: [\n [\n {\n label: _('Data colors'),\n option: 'layers[0].dataColors',\n filterKeywords: ['range', 'match', 'dynamic coloring'],\n showEditor: ({ options }) => !isChoroplethLayer(options),\n context: 'colorRangeConfig',\n editor: 'editor.dynamicColorWithPrecedence',\n editorProps: {\n labelPosition: 'top',\n flyoutTitle: _('Dynamic coloring: value'),\n formatters: [\n {\n label: _('Ranges'),\n value: 'rangeValue',\n isDefault: true,\n defaults: {\n dataValues: defaultContext.colorRangeConfig,\n },\n },\n {\n label: _('Matches'),\n value: 'matchValue',\n defaults: {\n dataValues: defaultContext.colorMatchConfig,\n },\n },\n ],\n dataSelectors: [\n {\n label: _('Data values'),\n value: 'dataValues',\n },\n ],\n defaultPalettesConfig,\n },\n },\n {\n label: _('Data colors'),\n filterKeywords: ['range', 'match', 'gradient', 'dynamic coloring'],\n option: 'layers[0].dataColors',\n context: 'colorGradientConfig',\n editor: 'editor.dynamicColorWithPrecedence',\n showEditor: ({ options }) => isChoroplethLayer(options),\n editorProps: {\n labelPosition: 'top',\n flyoutTitle: _('Dynamic coloring: value'),\n formatters: [\n {\n label: _('Gradient'),\n value: 'gradient',\n isDefault: true,\n defaults: {\n areaValues: defaultContext.colorGradientConfig,\n },\n },\n {\n label: _('Ranges'),\n value: 'rangeValue',\n defaults: {\n areaValues: defaultContext.colorRangeConfig,\n },\n },\n {\n label: _('Matches'),\n value: 'matchValue',\n defaults: {\n areaValues: defaultContext.colorMatchConfig,\n },\n },\n ],\n // Use areaValues for Choropleth\n dataSelectors: [\n {\n label: _('Area values'),\n value: 'areaValues',\n },\n ],\n defaultPalettesConfig,\n },\n },\n ],\n [\n {\n label: _('Data values'),\n editor: 'editor.columnSelector',\n option: 'layers[0].dataValues',\n showEditor: ({ options }) =>\n !isChoroplethLayer(options) && options.layers?.[0]?.dataColors,\n editorProps: {\n dataSourceKey: 'primary',\n filterByTypes: ['number'],\n },\n },\n ],\n [\n {\n label: _('Series colors'),\n option: 'layers[0].seriesColors',\n editor: 'editor.seriesColors',\n showEditor: ({ options }) =>\n !isChoroplethLayer(options) && !options.layers?.[0]?.dataColors,\n },\n ],\n [\n {\n label: _('Choropleth empty area'),\n option: 'layers[0].choroplethEmptyAreaColor',\n editor: 'editor.color',\n showEditor: ({ options }) => isLocalChoroplethLayer(options),\n editorProps: {\n themes,\n },\n },\n ],\n [\n {\n label: _('Choropleth stroke'),\n option: 'layers[0].choroplethStrokeColor',\n editor: 'editor.color',\n showEditor: ({ options }) => isChoroplethLayer(options),\n editorProps: {\n themes,\n },\n },\n ],\n [\n {\n label: _('Choropleth opacity (%)'),\n option: 'layers[0].choroplethOpacity',\n editor: 'editor.percent',\n showEditor: ({ options }) => isChoroplethLayer(options),\n editorProps: {\n themes,\n min: 0,\n },\n },\n ],\n // [\n // {\n // label: _('Series colors by field name'),\n // option: 'seriesColorsByField',\n // editor: 'editor.seriesColorsByField',\n // },\n // ],\n getBackgroundColorEditor({ themes }),\n [\n {\n label: _('Show base layer'),\n option: 'showBaseLayer',\n editor: 'editor.toggle',\n },\n ],\n [\n {\n label: _('Base layer tile server'),\n option: 'baseLayerTileServer',\n editor: 'editor.text',\n showEditor: ({ options }) => options.showBaseLayer !== false,\n },\n ],\n [\n {\n label: _('Base layer tile server type'),\n option: 'baseLayerTileServerType',\n editor: 'editor.radioBar',\n showEditor: ({ options }) =>\n options.showBaseLayer === false\n ? false\n : !(\n options.baseLayerTileServer === undefined ||\n options.baseLayerTileServer === ''\n ),\n editorProps: {\n values: [\n { label: _('Vector'), value: 'vector' },\n { label: _('Raster'), value: 'raster' },\n ],\n },\n },\n ],\n ],\n },\n];\n\n/**\n * visualization configuration\n */\nconst config: VizConfig = {\n /**\n * unique viz key\n */\n key: 'splunk.map',\n /**\n * viz name\n */\n name: _('Map'),\n category: VizCategory.SPATIAL,\n status: 'preview',\n /**\n * viz icon\n */\n icon: MapIcon,\n placeholderIcon: MapPlaceholderIcon,\n dataContract,\n size,\n defaultContext,\n optionsSchema,\n editorConfig,\n events: {\n 'map.load': {\n description: 'triggered when map is fully loaded',\n parentKeys: ['exec'],\n },\n 'map.click': {\n description: 'trigger when user clicks map layer',\n },\n },\n supports: [VizBehavior.DYNAMIC_OPTIONS, VizBehavior.EVENTS, VizBehavior.PLACEHOLDER],\n themes,\n requiredProps: [],\n};\n\nexport default enhanceConfig(config);\n", "\nimport * as defaultImport from \"@splunk/themes/getSettingsFromThemedProps\";\nexport * from \"@splunk/themes/getSettingsFromThemedProps\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualization-encoding/Options\";\nexport * from \"@splunk/visualization-encoding/Options\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/SanitizeProps\";\nexport * from \"@splunk/visualizations-shared/SanitizeProps\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualization-context/TimezoneContext\";\nexport * from \"@splunk/visualization-context/TimezoneContext\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/moment\";\nexport * from \"@splunk/moment\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/async-dynamic-options-evaluator\";\nexport * from \"@splunk/async-dynamic-options-evaluator\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"prop-types\";\nexport * from \"prop-types\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "/* eslint-disable class-methods-use-this */\nexport interface VizActionHandler {\n /**\n * put focus on the visualization\n */\n focus(): void;\n\n /**\n * compute snapshot of this visualization\n */\n snapshot(): Record<string, unknown>; // (This is for pdf export)\n}\n\nexport class DefaultVizActionHandler {\n focus(): void {\n // noop\n }\n\n snapshot(): Record<string, unknown> {\n return null; // noop\n }\n}\n", "/* eslint-disable react/no-unused-prop-types,react/prefer-stateless-function */\nimport * as T from 'prop-types';\nimport { noop } from 'lodash';\nimport { DashboardVizProps } from './interfaces/DashboardVizProps';\nimport { DefaultVizActionHandler } from './interfaces/VizActionHandler';\n\n// this is identical to the initial height and width we use in BaseVisualization in dashboard-visualizations\nexport const INITIAL_WIDTH = 250;\nexport const INITIAL_HEIGHT = 250;\n\n/**\n * A Splunk visualization\n */\nclass SplunkVisualization {\n static readonly propTypes: Record<keyof DashboardVizProps, T.Validator<any>> = {\n /**\n * display mode\n */\n mode: T.oneOf(['view', 'edit', 'export']).isRequired,\n /**\n * width in pixel or string, defaults to 100%\n */\n width: T.oneOfType([T.string, T.number]).isRequired,\n /**\n * height in pixel or string\n */\n height: T.oneOfType([T.string, T.number]).isRequired,\n /**\n * visualization context used for dynamic option evaluation\n */\n context: T.object,\n /**\n * visualization formatting options\n */\n options: T.object,\n /**\n * A callback to update formatting options\n */\n onOptionsChange: T.func,\n /**\n * datasource state which include data and request params, object key indicate the datasource type.\n */\n dataSources: T.objectOf(\n T.shape({\n /**\n * current request params\n */\n requestParams: T.object,\n /**\n * current dataset\n */\n data: T.shape({\n fields: T.array,\n columns: T.array,\n }),\n /**\n * error\n */\n error: T.shape({\n level: T.string,\n message: T.string,\n }),\n /**\n * meta data that came with the dataset\n */\n meta: T.object,\n })\n ),\n /**\n * A callback to trigger event\n */\n onEventTrigger: T.func,\n /**\n * Inform viz if there are handlers listening to events\n */\n hasEventHandlers: T.bool,\n /**\n * A callback to communicate computed props to a consumer\n */\n onComputedProps: T.func,\n /**\n * A callback to obtain visualization api\n */\n vizActionHandlerRef: T.func,\n\n loading: T.bool,\n theme: T.object,\n /**\n * A callback to request new data with updated request params\n */\n onRequestParamsChange: T.func,\n };\n\n /**\n *\n */\n public static readonly defaults: DashboardVizProps = {\n // BaseVisualization in dashboard-visualizations uses 100% for width but 250 for height\n width: '100%',\n height: INITIAL_HEIGHT,\n dataSources: {},\n onEventTrigger: (): Record<string, unknown> => ({}),\n mode: 'view',\n hasEventHandlers: false,\n options: {},\n context: {},\n onOptionsChange: (): Record<string, unknown> => ({}),\n vizActionHandlerRef: (): DefaultVizActionHandler => new DefaultVizActionHandler(),\n onComputedProps: (): Record<string, unknown> => ({}),\n loading: false,\n onRequestParamsChange: noop,\n };\n}\n\nexport default SplunkVisualization;\n", "import { FieldEntry } from '@splunk/visualizations-shared/dataSourceUtils';\nimport { validSegmentationModes } from '@splunk/visualization-schemas';\n\nexport interface JsonColumnData {\n fields: FieldEntry[] | string[];\n columns: (string | number | null)[][];\n}\n\nexport type HighlightedSourceMap = Record<string, Record<string, boolean>>;\nexport type TagsMap = Record<string, Record<string, string[]>>;\n\nexport interface Meta {\n totalCount: number;\n sid: string;\n app: string;\n highlighted?: HighlightedSourceMap;\n tags?: TagsMap;\n}\n\nexport const validSortDirs = ['asc', 'desc', 'none'] as const;\nexport type SortDirType = (typeof validSortDirs)[number];\nexport type SegmentationType = (typeof validSegmentationModes)[number];\nexport const validOutputModes = ['json_cols', 'json'] as const;\nexport type OutputModeType = (typeof validOutputModes)[number];\n\nexport interface RequestParams {\n count?: number;\n offset?: number;\n sort?: {\n [sortKey: string]: SortDirType;\n };\n segmentation?: SegmentationType;\n // eslint-disable-next-line camelcase\n output_mode?: OutputModeType;\n}\n\nexport interface DataSource {\n requestParams: Partial<RequestParams>;\n onRequestParamsChange?: (p: Record<string, unknown>) => void;\n data: JsonColumnData;\n error?: { level: string; message: string };\n meta: Partial<Meta>;\n}\n\nexport interface DataSourceMeta {\n requestParams: Partial<RequestParams>;\n meta: Partial<Meta>;\n onRequestParamsChange: (payload: RequestParams) => void;\n}\n", "import * as T from 'prop-types';\nimport { has } from 'lodash';\nimport { DataSourceMeta, SortDirType, validSortDirs } from '../interfaces/DataSource';\n\nexport interface SortParams {\n currentSortKey?: string;\n currentSortDir?: SortDirType;\n onSort?: (e: MouseEvent, { sortKey, sortDir }: { sortKey: string; sortDir: SortDirType }) => void;\n}\n\nexport const SortParamsPropTypes = T.shape({\n currentSortKey: T.string,\n currentSortDir: T.oneOf(validSortDirs),\n onSort: T.func,\n});\n\nexport const useSortingParams = ({ requestParams, onRequestParamsChange }: DataSourceMeta): SortParams => {\n let currentSortKey: string | undefined;\n let currentSortDir: SortDirType | undefined;\n\n const nextSortDirMap: Record<SortDirType, SortDirType> = {\n asc: 'desc',\n desc: 'asc',\n none: 'asc',\n };\n\n let onSort: SortParams['onSort'];\n if (typeof onRequestParamsChange === 'function') {\n if (requestParams && has(requestParams, 'sort')) {\n currentSortKey = Object.keys(requestParams.sort).shift();\n currentSortDir = requestParams.sort[currentSortKey];\n }\n\n // undid memoization since there is a dependency on requestParams, which is a deeply nested object\n onSort = (e, { sortKey, sortDir }): void => {\n if (typeof sortKey === 'string') {\n const nextSortDir = has(nextSortDirMap, sortDir) ? nextSortDirMap[sortDir] : 'none';\n onRequestParamsChange({\n ...requestParams,\n offset: 0,\n sort: { [sortKey]: nextSortDir },\n });\n } else {\n onRequestParamsChange(requestParams);\n }\n };\n }\n\n return {\n currentSortKey,\n currentSortDir,\n onSort,\n };\n};\n", "import * as T from 'prop-types';\nimport { cloneDeep, noop } from 'lodash';\nimport * as React from 'react';\nimport { DataSourceMeta, RequestParams } from '../interfaces/DataSource';\n\nexport interface OnChangeParams {\n page?: number;\n count?: number;\n}\nexport interface PaginatorParams {\n isPaging?: boolean;\n current?: number;\n totalPages?: number;\n onChange?: (event: React.MouseEvent<HTMLButtonElement>, data: OnChangeParams) => void;\n}\n\nexport const PaginatorParamsPropTypes = T.shape({\n isPaging: T.bool,\n current: T.number,\n totalPages: T.number,\n onChange: T.func,\n});\n\nexport const usePaginationParams = ({\n requestParams,\n meta,\n onRequestParamsChange,\n}: DataSourceMeta): PaginatorParams => {\n const totalCount = meta?.totalCount || 0;\n const offset = requestParams?.offset || 0;\n const count = requestParams?.count;\n const totalPages = typeof count === 'number' && count > 0 ? Math.ceil(totalCount / count) : 0;\n const current = typeof count === 'number' && count > 0 ? Math.floor(offset / count) + 1 : 0;\n const isPaging = totalPages > 1 && typeof onRequestParamsChange === 'function';\n\n const onChangeHandler = (e, { page, count: countArg }: OnChangeParams): void => {\n const newParams: RequestParams = cloneDeep(requestParams);\n\n if (typeof countArg === 'number') {\n newParams.count = countArg;\n newParams.offset = 0;\n }\n\n const pageCount = typeof newParams.count === 'number' ? newParams.count : 10;\n if (typeof page === 'number' && page > 0) {\n newParams.count = pageCount;\n newParams.offset = (page - 1) * pageCount;\n }\n\n onRequestParamsChange(newParams);\n };\n\n return {\n isPaging,\n current,\n totalPages,\n onChange: typeof onRequestParamsChange === 'function' ? onChangeHandler : noop,\n };\n};\n", "import { useRef } from 'react';\nimport { isEqual } from 'lodash';\n\n/**\n * This hook evaluates and stores the result of a passed function and only\n * re-evaluates the function when passed dependencies change.\n *\n * It is different from the internal React useMemo in the following aspects:\n * - it only stores the last evaluated result\n * - it uses a deep equality check to determine if dependencies have changed\n *\n * Inspired by apollo-client's useDeepMemo\n *\n * @param fn the function to be executed and\n * @param dependencies an array of dependencies\n */\nexport const useDeepMemo = <FnReturnType, DepType>(\n fn: () => FnReturnType,\n dependencies: DepType\n): FnReturnType => {\n const ref = useRef<{ dependencies: DepType; value: FnReturnType }>();\n if (!ref.current || !isEqual(dependencies, ref.current.dependencies)) {\n ref.current = {\n dependencies,\n value: fn(),\n };\n }\n return ref.current.value;\n};\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/SizeAwareWrapper\";\nexport * from \"@splunk/visualizations-shared/SizeAwareWrapper\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as React from 'react';\nimport { _ } from '@splunk/ui-utils/i18n';\nimport Message from '@splunk/visualizations-shared/Message';\nimport SizeAwareWrapper from '@splunk/visualizations-shared/SizeAwareWrapper';\nimport SplunkVisualization from '../SplunkVisualization';\n\n/**\n * @method isMissing\n * @param {any} v\n * @returns {boolean} true if the input value === null or undefined\n */\nexport const isMissing = (v): boolean => {\n return v === null || v === undefined;\n};\n\n/**\n * @method misskingKeys\n * @param {string[]} keys\n * @param {object} target\n * @returns {string[]} the keys of missing required props\n */\nexport const missingKeys = (keys: string[], target: Record<string, unknown>): string[] =>\n keys.filter(k => isMissing(target[k]));\n\nexport interface MissingPropsProps {\n width?: string | number;\n height?: string | number;\n missingProps: string[];\n backgroundColor?: string;\n}\n\n/**\n * @method MissingPropsMessage\n * @param {MissingPropsProps} props\n * @returns {React.ReactElement}\n */\nexport const MissingPropsMessage = (props: MissingPropsProps): React.ReactElement => {\n const {\n width = SplunkVisualization.defaults.width,\n height = SplunkVisualization.defaults.height,\n missingProps,\n backgroundColor,\n } = props;\n const cachedHandleResize = React.useCallback((w, h) => {\n setContainerWidth(w);\n setContainerHeight(h);\n }, []);\n const [containerWidth, setContainerWidth] = React.useState<number>(Number(width));\n const [containerHeight, setContainerHeight] = React.useState<number>(Number(height));\n return (\n <div style={{ width: containerWidth, height: containerHeight, background: backgroundColor }}>\n <SizeAwareWrapper width={width} height={height} onResize={cachedHandleResize} />\n <Message\n data-test=\"message\"\n width={width}\n height={height}\n message={_(`Missing property: ${missingProps.join(', ')}`)}\n level=\"error\"\n />\n </div>\n );\n};\n\nexport default MissingPropsMessage;\n", "import { DashboardVizProps } from '../interfaces/DashboardVizProps';\n\nexport type DashboardVizType = React.ComponentType<DashboardVizProps>;\n\n/**\n * @method extendStaticWrapperProps\n * @param {Object} props\n * @param {DashboardVizType} props.Wrapper\n * @param {DashboardVizType} props.Visualization\n */\nexport const extendStaticWrapperProps = ({\n Wrapper,\n Visualization,\n}: {\n [key: string]: DashboardVizType;\n}): void => {\n const extendProperties = ['propTypes', 'config'];\n extendProperties.forEach((prop: string): void => {\n if (Visualization[prop]) {\n // eslint-disable-next-line no-param-reassign\n Wrapper[prop] = Visualization[prop];\n }\n });\n};\n", "import * as React from 'react';\nimport styled from 'styled-components';\nimport { DashboardVizProps } from '../interfaces/DashboardVizProps';\nimport { ExtendedDashViz } from '../interfaces/ExtendedDashViz';\nimport { extendStaticWrapperProps } from '../utils/hocUtils';\n\n// Global provided via webpack\n// eslint-disable-next-line no-underscore-dangle\ndeclare const __VISION_VERSION__: string;\n\nconst Cover = styled.div`\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n`;\n\nconst Blocker = styled.div.attrs({\n 'data-splunk-visualization-version': __VISION_VERSION__,\n})`\n position: relative;\n width: 100%;\n height: 100%;\n`;\n\n/**\n * HOC that renders a cover layer in edit mode\n * @method withEditModeCover\n * @param {ExtendedDashViz} Visualization\n * @returns {ExtendedDashViz} Wrapper\n */\nconst withEditModeCover = (\n Visualization: ExtendedDashViz,\n disableEditModeCover?: boolean\n): ExtendedDashViz => {\n const Wrapper = (props: DashboardVizProps): React.ReactElement<DashboardVizProps> => {\n const { mode } = props;\n const showEditCover = mode === 'edit' && !disableEditModeCover;\n\n return (\n <Blocker>\n <Visualization {...props} />\n {showEditCover && <Cover data-test=\"edit-mode-cover\" />}\n </Blocker>\n );\n };\n extendStaticWrapperProps({ Wrapper, Visualization });\n return Wrapper as ExtendedDashViz;\n};\n\nexport default withEditModeCover;\n", "import * as React from 'react';\nimport styled from 'styled-components';\nimport { toPx } from '@splunk/visualizations-shared/style';\nimport { isColor } from '@splunk/visualizations-shared/colorUtils';\nimport SizeAwareWrapper from '@splunk/visualizations-shared/SizeAwareWrapper';\n\n// Global provided via webpack\n// eslint-disable-next-line no-underscore-dangle\ndeclare const __VISION_VERSION__: string;\n\ninterface ItemProps {\n backgroundColor?: string;\n width?: string | number;\n}\n\nconst Item = styled.div.attrs<ItemProps>(({ width }) => ({\n style: {\n width: toPx(width),\n },\n}))<ItemProps>`\n position: relative;\n background-color: ${(props): string =>\n (isColor(props.backgroundColor) && props.backgroundColor) || props.theme.defaultBackgroundColor}};\n`;\n\ninterface FixSizeItemProps {\n backgroundColor?: string;\n height?: string | number;\n width?: string | number;\n}\n\n// Use `.attrs()` for highly dynamic styles. Ref: https://github.com/styled-components/styled-components/issues/134#issuecomment-312415291\nconst FixSizeItem = styled.div.attrs<FixSizeItemProps>(\n ({\n width,\n height,\n }): {\n style: { width?: string; height?: string };\n } => {\n // Ensure height is never negative (browsers ignore negative height)\n const validHeight = typeof height === 'number' ? Math.max(height, 1) : height;\n return {\n style: {\n ...(width && { width: toPx(width) }),\n ...(validHeight && { height: toPx(validHeight) }),\n },\n };\n }\n)<FixSizeItemProps>`\n position: relative;\n flex-direction: column;\n flex: 1;\n display: flex;\n overflow: hidden !important;\n background-color: ${(props): string =>\n (isColor(props.backgroundColor) && props.backgroundColor) || props.theme.defaultBackgroundColor}};\n`;\n\nconst ItemContent = styled.div`\n position: relative;\n min-height: 100px;\n width: 100%;\n`;\n\nconst FixSizeItemContent = styled.div`\n min-height: 0px;\n flex: 1;\n position: relative;\n box-sizing: border-box;\n overflow: hidden !important;\n`;\n\ninterface HeightAndWidthProps {\n width?: string | number;\n height?: string | number;\n backgroundColor?: string;\n}\n\nconst withFixedSizeContainer = <P extends HeightAndWidthProps>(\n Viz: React.ComponentType<P>\n): React.ComponentType<P> => {\n const FixedSizeContainer = (props: P): React.ReactElement => {\n const { width, height, backgroundColor } = props;\n\n const cachedHandleResize = React.useCallback((w, h) => {\n setContainerWidth(w);\n setContainerHeight(h);\n }, []);\n const [containerWidth, setContainerWidth] = React.useState<number>(Number(props.width));\n const [containerHeight, setContainerHeight] = React.useState<number>(Number(props.height));\n if (!height) {\n return (\n <Item data-test=\"item\" width={width} backgroundColor={backgroundColor}>\n <ItemContent>\n <Viz {...props} />\n </ItemContent>\n </Item>\n );\n }\n return (\n <FixSizeItem\n data-test=\"fix-size-item\"\n data-splunk-visualization-version={__VISION_VERSION__}\n width={width}\n height={height}\n backgroundColor={backgroundColor}\n >\n <FixSizeItemContent>\n <SizeAwareWrapper width={width} height={height} onResize={cachedHandleResize} />\n <Viz {...props} width={containerWidth} height={containerHeight} />\n </FixSizeItemContent>\n </FixSizeItem>\n );\n };\n FixedSizeContainer.displayName = 'withFixedSizeContainer';\n return FixedSizeContainer;\n};\n\nexport default withFixedSizeContainer;\n", "import * as React from 'react';\nimport styled from 'styled-components';\nimport { get } from 'lodash';\nimport { _ } from '@splunk/ui-utils/i18n';\nimport { pick } from '@splunk/themes';\nimport Message from '@splunk/visualizations-shared/Message';\nimport { DataSource } from '../interfaces/DataSource';\nimport withFixedSizeContainer from '../hocs/FixedSizeContainer';\nimport SplunkVisualization from '../SplunkVisualization';\n\n/**\n * @method shouldShowIconPlaceholder\n * @param {object} dataSources\n * @param {boolean} loading\n * @returns {boolean}\n */\nexport const shouldShowIconPlaceholder = (\n dataSources: { [name: string]: DataSource },\n loading = false\n): boolean => {\n const data = get(dataSources, 'primary.data.columns[0]', undefined);\n const noData = data === undefined;\n const fields = get(dataSources, 'primary.data.fields[0]', undefined);\n const noFields = fields === undefined;\n return loading || noData || noFields;\n};\n\nexport interface IconPlaceholderProps {\n icon?: React.ComponentType<any>;\n width?: string | number;\n height?: string | number;\n iconColor?: string;\n backgroundColor: string;\n}\n\nconst PlaceholderContainer = styled.div`\n /* The inline token color wins when supported. Older browsers discard an\n unsupported oklch value and retain this inherited fallback instead. */\n color: ${pick({\n dark: '#fafafa',\n light: '#2c2c2c',\n })};\n`;\n\n/**\n * @method IconPlaceholder\n * @param {IconPlaceholderProps} props\n * @returns {React.ReactElement}\n */\nconst IconPlaceholder = (props: IconPlaceholderProps): React.ReactElement => {\n const {\n width = SplunkVisualization.defaults.width,\n height = SplunkVisualization.defaults.height,\n icon,\n iconColor,\n backgroundColor,\n } = props;\n\n let content = (\n <Message width={width} height={height} level=\"warning\" message={_('No DataSource Connected')} />\n );\n if (icon) {\n content = React.createElement(icon, {\n style: {\n left: '50%',\n top: '50%',\n opacity: 0.15,\n position: 'absolute',\n transform: 'translate(-50%, -50%)',\n },\n width: '50%',\n height: '50%',\n 'data-test': 'icon-placeholder',\n });\n }\n\n return (\n <PlaceholderContainer\n data-test=\"icon-placeholder-container\"\n style={{ width, height, background: backgroundColor, color: iconColor }}\n >\n {content}\n </PlaceholderContainer>\n );\n};\n\nexport default withFixedSizeContainer(IconPlaceholder);\n", "import * as React from 'react';\nimport { isColor } from '@splunk/visualizations-shared/colorUtils';\nimport variables from '@splunk/themes/variables';\nimport IconPlaceholder, { shouldShowIconPlaceholder } from '../components/IconPlaceholder';\nimport { VizBehavior } from '../interfaces/VizBehavior';\nimport { DashboardVizProps } from '../interfaces/DashboardVizProps';\nimport { DataSource } from '../interfaces/DataSource';\nimport { ExtendedDashViz } from '../interfaces/ExtendedDashViz';\nimport { extendStaticWrapperProps } from '../utils/hocUtils';\nimport SplunkVisualization from '../SplunkVisualization';\n\ntype useIconPlaceholderType = (\n dataSources: { [name: string]: DataSource },\n loading: boolean,\n options: Record<string, unknown>\n) => boolean;\n\nconst withPlaceholder = (\n Visualization: ExtendedDashViz,\n useIconPlaceholder: useIconPlaceholderType = shouldShowIconPlaceholder\n): ExtendedDashViz => {\n const { config } = Visualization;\n const { themes } = config;\n\n const Wrapper = (props: DashboardVizProps): React.ReactElement<DashboardVizProps> => {\n const {\n dataSources,\n loading,\n options,\n height = SplunkVisualization.defaults.height,\n width = SplunkVisualization.defaults.width,\n } = props;\n\n const showPlaceholder = useIconPlaceholder(dataSources, loading, options);\n const icon = config.placeholderIcon ?? config.icon;\n const iconColor = variables.contentColorActive(props);\n const bgColorFromTheme = isColor(options?.backgroundColor)\n ? options?.backgroundColor\n : themes?.defaultBackgroundColor?.(props);\n\n if (config.supports.includes(VizBehavior.PLACEHOLDER) && showPlaceholder) {\n return (\n <IconPlaceholder\n data-test=\"icon-placeholder\"\n icon={icon}\n width={width}\n height={height}\n backgroundColor={bgColorFromTheme}\n iconColor={iconColor}\n />\n );\n }\n\n return <Visualization {...props} />;\n };\n extendStaticWrapperProps({ Wrapper, Visualization });\n return Wrapper as ExtendedDashViz;\n};\n\nexport default withPlaceholder;\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/numberUtils\";\nexport * from \"@splunk/visualizations-shared/numberUtils\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import type { FieldEntry } from '@splunk/visualizations-shared/dataSourceUtils';\nimport { startsWithNumber } from '@splunk/visualizations-shared/numberUtils';\nimport type { DashboardVizProps, DataSource, VizConfig } from '../interfaces';\nimport { VizBehavior } from '../interfaces';\nimport { ChartEvent } from '../interfaces/ChartEvent';\n\nexport const convertToArrOfObjects = (columns: (string | any[])[], fields: any[]): any[] => {\n if (!columns?.[0]?.length) return [];\n\n const data = [];\n\n for (let i = 0; i < columns[0].length; i += 1) {\n const newObj = {};\n fields.forEach((field, index) => {\n const fieldName = getFieldName(field);\n if (columns[index][i] === '') {\n newObj[fieldName] = null;\n } else {\n newObj[fieldName] = columns[index][i];\n }\n });\n data.push(newObj);\n }\n\n return data;\n};\n\nconst getFieldName = (field: FieldEntry | string): string => (typeof field === 'string' ? field : field.name);\n\n// LTTB algorithm which can be used to downsample time series data while striving to maintain\n// the spikes and overall shape of the chart\n// Copied from https://github.com/sveinn-steinarsson/flot-downsample/blob/0815010016fc94b1bbc6a010afb8aad13ada6d0d/jquery.flot.downsample.js\n// Modifications include:\n// 1) Convert to modern JavaScript(use const, let, and use array.push to push to last element of array)\n// 2) Convert to camel case\n// 3) Convert to TS and also return the indices of the points that are in the downsampled result.\n// 4) Add a new parameter preferredDownsampleIndices that correspond to the indices of points\n// that should be used in case of a tie of the max area in a bucket\nconst largestTriangleThreeBuckets = (\n data: [Date | number, number][],\n threshold: number,\n preferredDownsampleIndices: Set<number>\n): {\n downsampledData: [Date | number, number][];\n downsampledIndices: number[];\n} => {\n const dataLength = data.length;\n const downsampledIndices = [];\n if (threshold >= dataLength || threshold === 0) {\n const allIndices = data.map((values, index) => index);\n return { downsampledData: data, downsampledIndices: allIndices }; // Nothing to do\n }\n\n const sampled: [Date | number, number][] = [];\n let sampledIndex = 0;\n\n // Bucket size. Leave room for start and end data points\n const every = (dataLength - 2) / (threshold - 2);\n\n let a = 0; // Initially a is the first point in the triangle\n let maxAreaPoint: [Date | number, number];\n let maxArea: number | undefined;\n let area: number | undefined;\n let nextA: number | undefined;\n\n sampled.push(data[a]); // Always add the first point\n downsampledIndices.push(0);\n\n // eslint-disable-next-line no-plusplus\n for (let i = 0; i < threshold - 2; i++) {\n // Calculate point average for next bucket (containing c)\n let avgX = 0;\n let avgY = 0;\n let avgRangeStart = Math.floor((i + 1) * every) + 1;\n let avgRangeEnd = Math.floor((i + 2) * every) + 1;\n avgRangeEnd = Math.min(avgRangeEnd, dataLength);\n\n const avgRangeLength = avgRangeEnd - avgRangeStart;\n\n // eslint-disable-next-line no-plusplus\n for (; avgRangeStart < avgRangeEnd; avgRangeStart++) {\n avgX += Number(data[avgRangeStart][0]); // * 1 enforces Number (value may be Date)\n avgY += data[avgRangeStart][1] * 1;\n }\n avgX /= avgRangeLength;\n avgY /= avgRangeLength;\n\n // Get the range for this bucket\n let rangeOffs = Math.floor((i + 0) * every) + 1;\n const rangeTo = Math.floor((i + 1) * every) + 1;\n\n // Point a\n const pointAX = Number(data[a][0]); // Enforce Number (value may be Date)\n const pointAY = data[a][1] * 1;\n\n // eslint-disable-next-line no-multi-assign\n maxArea = area = -1;\n let maxAreaIndex = rangeOffs;\n\n // eslint-disable-next-line no-plusplus\n for (; rangeOffs < rangeTo; rangeOffs++) {\n // Calculate triangle area over three buckets\n area =\n Math.abs(\n (pointAX - avgX) * (data[rangeOffs][1] - pointAY) -\n (pointAX - Number(data[rangeOffs][0])) * (avgY - pointAY)\n ) * 0.5;\n // Modification: try to downsample the least amount of points possible when there are multiple series\n // If all points in a bucket have the same area, prioritize the one with an x index\n // that also existed from another series so we don't add another point unnecessarily.\n // By default LTTB picks the leftmost point in the bucket\n if (area > maxArea || (area === maxArea && preferredDownsampleIndices.has(rangeOffs))) {\n maxArea = area;\n maxAreaPoint = data[rangeOffs];\n nextA = rangeOffs; // Next a is this b\n // Modification: save the index of the point with the most area\n maxAreaIndex = rangeOffs;\n }\n }\n\n // eslint-disable-next-line no-plusplus\n sampled[sampledIndex++] = maxAreaPoint; // Pick this point from the bucket\n downsampledIndices.push(maxAreaIndex);\n a = nextA; // This a is the next a (chosen b)\n }\n\n // eslint-disable-next-line no-plusplus\n sampled[sampledIndex++] = data[dataLength - 1]; // Always add last\n downsampledIndices.push(dataLength - 1);\n\n return { downsampledData: sampled, downsampledIndices };\n};\n\nexport type DownsampleOptions = { threshold: number } & Pick<DashboardVizProps, 'dataSources' | 'options'>;\n\ntype CoerceYColumnResult = {\n canDownsampleColumn: boolean;\n canLooselyCoerceSomeValues: boolean;\n coercedColumn: number[];\n};\n\n/**\n * Strictly coerces the entire column to numbers if it only consists of numeric strings or numbers. Also determines\n * if at least one of the values in the column can be loosely coerced to a number.\n * If the column cannot be strictly downsampled (if it contains nulls or non-numeric strings), returns an empty array and\n * returns that it cannot downsample the column.\n */\nconst strictlyCoerceYColumn = (\n column: (string | number)[] | number[],\n options: DownsampleOptions['options']\n): CoerceYColumnResult => {\n const isNullCoercionEnabled = options.nullValueDisplay === 'zero';\n // Splunk charting allows for numbers in formats such as negative hex that\n // Number() does not support and also allows loose coercion of hex numbers (but not other formats)\n // We want to identify columns which contain at least one value that can be loosely coerced\n const canLooselyCoerceSomeValues = column.some(\n value => startsWithNumber(`${value}`) || (isNullCoercionEnabled && value === null)\n );\n\n // If not all values in column can be strictly coerced to a number, we do not downsample\n const coercedColumn: number[] = [];\n const canDownsampleColumn = !column.some(value => {\n const coercedValue = Number(value);\n const coerceValueToZero = isNullCoercionEnabled && value === null;\n\n // if it can't be parsed or isn't safe, fail\n if (\n Number.isNaN(coercedValue) ||\n coercedValue <= Number.MIN_SAFE_INTEGER ||\n coercedValue >= Number.MAX_SAFE_INTEGER ||\n (typeof value !== 'string' && typeof value !== 'number' && !coerceValueToZero)\n ) {\n return true;\n }\n // save value and continue to next\n coercedColumn.push(coercedValue);\n return false;\n });\n\n return {\n canDownsampleColumn,\n canLooselyCoerceSomeValues,\n coercedColumn: canDownsampleColumn ? coercedColumn : [],\n };\n};\n\n/**\n * Tries to coerce the x-column to numbers or dates, if it is eligible for downsampling.\n * Only strictly increasing x-columns are eligible for downsampling.\n * If the column is not eligible for downsampling, returns an empty array.\n */\nconst strictlyCoerceXColumn = (column: (string | number)[], fieldType: string): Date[] | number[] => {\n if (fieldType === 'number') {\n const coercedXColumn = column.map(Number);\n if (isColumnStrictlyIncreasing(coercedXColumn, fieldType)) {\n return coercedXColumn;\n }\n } else if (fieldType === 'time') {\n const coercedXColumn = column.map(xValue => new Date(xValue));\n if (isColumnStrictlyIncreasing(coercedXColumn, fieldType)) {\n return coercedXColumn;\n }\n }\n return [];\n};\n\nexport const isDownsamplingEnabledForViz = ({ vizConfig }: { vizConfig: VizConfig }) => {\n return vizConfig.supports?.includes(VizBehavior.DOWNSAMPLING);\n};\n\nexport const calculateThresholdOnRangeSelect = ({\n firstIndex,\n lastIndex,\n dataSources,\n width,\n}: Pick<DashboardVizProps, 'dataSources'> & {\n firstIndex: number;\n lastIndex: number;\n width: number | string;\n}): number => {\n const window = lastIndex - firstIndex + 1;\n // eslint-disable-next-line no-unsafe-optional-chaining\n const ratio = Math.round(Number(dataSources?.primary?.data?.columns[0]?.length / window) * 10) / 10;\n return Math.round(ratio * Number(width));\n};\n\n/**\n * Calculates the downsampling threshold based on the range selection. If search zoom is enabled or there is no selection,\n * then returns the width of the visualization.\n *\n * Otherwise calculates the threshold based on the ratio of the window selected compared to the size of the non-downsampled\n * data sources. Returns null if the chart event's dataset does not match the passed in primary data source or if the chart is zoomed\n * in for a categorical chart.\n */\nexport const calculateDownsamplingThreshold = ({\n enableSearchZoom,\n dataSources,\n selectChartEvent,\n width,\n xField,\n}: {\n enableSearchZoom: boolean;\n dataSources: Record<string, DataSource> | null;\n selectChartEvent: ChartEvent<'chartRangeSelect'> | null;\n width: number;\n xField: string;\n}): number | null => {\n if (enableSearchZoom || !selectChartEvent) {\n return Number(width);\n }\n\n const primaryDataSource = dataSources?.primary;\n if (!primaryDataSource) {\n return null;\n }\n\n const { startXIndex, endXIndex, currentTarget } = selectChartEvent;\n\n try {\n const xFieldIndex = primaryDataSource?.data?.fields.findIndex(field => {\n const name = typeof field === 'string' ? field : field.name;\n return name === xField;\n });\n // .indexOf is not usable here: dataSet.fields is a union type (FieldEntry[] & string[]), so indexOf(xField) fails to type-check\n const downsampledXFieldIndex = currentTarget.dataSet?.fields.findIndex(field => field === xField); // NOSONAR typescript:S7753 - see note above\n\n if (xFieldIndex === -1 || downsampledXFieldIndex === -1) {\n return null;\n }\n\n const fullSeries = primaryDataSource?.data?.columns[xFieldIndex];\n const downsampledSeries = currentTarget.dataSet.seriesList[downsampledXFieldIndex];\n\n const firstIndex = fullSeries.indexOf(downsampledSeries[startXIndex]);\n const lastIndex = fullSeries.indexOf(downsampledSeries[endXIndex]);\n\n if (firstIndex >= 0 && lastIndex >= 0 && firstIndex <= lastIndex) {\n return calculateThresholdOnRangeSelect({\n firstIndex,\n lastIndex,\n dataSources,\n width,\n });\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error occurred while setting downsample threshold on range select event', e);\n }\n\n return null;\n};\n\nconst isColumnStrictlyIncreasing = (column: (number | Date)[], fieldType: 'number' | 'time') => {\n return column.every((value, index) => {\n if (fieldType === 'number') {\n if (Number.isNaN(value)) {\n return false;\n }\n }\n\n if (fieldType === 'time') {\n if (Number.isNaN((value as Date).getTime())) {\n return false;\n }\n }\n if (index === 0) {\n return true;\n }\n return value > column[index - 1];\n });\n};\n\n/**\n * Verifies that all of the columns that are displayed in a chart can be downsampled. Valid columns that can be\n * displayed are those that contain at least one number. We can only downsample columns that only consist of numbers.\n *\n * If all columns can be downsampled, returns the x column coerced to time/number and y columns coerced to numbers.\n * If not all columns can be downsampled, then returns empty arrays for both x and y\n */\nconst tryToCoerceAllDisplayedFields = (\n ds: DataSource,\n xField: string,\n yFields: Set<string>,\n fieldTypes: string[],\n options: DownsampleOptions['options']\n): { xColumn: Date[] | number[]; yColumns: number[][] } => {\n let xColumn: Date[] | number[] = [];\n const yColumns: number[][] = [];\n\n const canDownsample = !ds.data.fields.some((field, index) => {\n const fieldName = getFieldName(field);\n const fieldType = fieldTypes[index] ?? 'unknown';\n const column = ds.data.columns[index];\n let hasDisplayedColumnThatCantBeDownsampled = false;\n\n if (fieldName === xField) {\n xColumn = strictlyCoerceXColumn(column, fieldType);\n } else if (yFields.has(fieldName)) {\n const { coercedColumn, canLooselyCoerceSomeValues, canDownsampleColumn } = strictlyCoerceYColumn(\n ds.data.columns[index],\n options\n );\n // do not perform downsampling if a column can possibly be displayed but cannot\n // be downsampled using LTTB\n hasDisplayedColumnThatCantBeDownsampled = canLooselyCoerceSomeValues && !canDownsampleColumn;\n if (hasDisplayedColumnThatCantBeDownsampled) {\n return true;\n }\n if (canDownsampleColumn) {\n yColumns.push(coercedColumn);\n }\n }\n return false;\n });\n\n if (canDownsample) {\n return { xColumn, yColumns };\n }\n return { xColumn: [], yColumns: [] };\n};\n\nconst pickIndicesFromDataSource = (ds: DataSource, indices: Set<number>): DataSource => {\n const sortedIndices = Array.from(indices).sort((a: number, b: number) => a - b);\n const slicedColumns = [];\n ds.data.columns.forEach(column => {\n const slicedColumn = [];\n sortedIndices.forEach(index => {\n slicedColumn.push(column[index]);\n });\n slicedColumns.push(slicedColumn);\n });\n\n // update data columns with downsampled columns\n return {\n ...ds,\n data: {\n ...ds.data,\n columns: slicedColumns,\n },\n };\n};\n\nexport const downsampleDataSources = ({ dataSources, threshold, options }: DownsampleOptions) => {\n const primaryDS = dataSources?.primary;\n // only downsample time series when number of data points are over threshold\n const numPoints = primaryDS?.data?.columns[0]?.length ?? 0;\n if (Number.isNaN(threshold) || numPoints <= threshold || threshold < 2) {\n return dataSources;\n }\n\n const { xField, yFields, fieldTypes } = options;\n if (!xField || !yFields?.length || !fieldTypes?.length) {\n return dataSources;\n }\n\n const nonInternalYFields = new Set<string>(yFields.filter(yField => !yField.startsWith('_')));\n const maxPointsInDownsample = Math.min(nonInternalYFields.size * threshold, numPoints);\n\n // Do not try to downsample if there are too many downsampled pts\n // At the worst case, each series has non-overlapping downsampled pts\n // which will mean that all points will be included in the downsampled result\n // This will just lead to additional overhead due to coercing each\n // x and y field to number\n if (maxPointsInDownsample >= numPoints) {\n return dataSources;\n }\n\n const { xColumn, yColumns } = tryToCoerceAllDisplayedFields(\n primaryDS,\n xField,\n nonInternalYFields,\n fieldTypes,\n options\n );\n\n if (!yColumns.length || !xColumn.length) {\n return dataSources;\n }\n\n const downsampledDataSources = { ...dataSources };\n const downsampledIndices = new Set<number>();\n\n yColumns.forEach((yColumn, columnIndex) => {\n // perform LTTB downsampling for current series, LTTB takes an [x, y] pair\n const xyPair: [Date | number, number][] = yColumn.map((yValue, index) => {\n return [xColumn[index], yValue];\n });\n\n try {\n const { downsampledIndices: downsampledIndicesForSeries } = largestTriangleThreeBuckets(\n xyPair,\n threshold,\n downsampledIndices\n );\n downsampledIndicesForSeries.forEach(downsampleIndex => downsampledIndices.add(downsampleIndex));\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(`Error occurred while downsampling column ${columnIndex}`, e);\n }\n });\n // update data columns with downsampled columns\n downsampledDataSources.primary = pickIndicesFromDataSource(primaryDS, downsampledIndices);\n\n return downsampledDataSources;\n};\n", "import { useEffect, useRef } from 'react';\n\nexport default function usePrevious<T>(value: T): T | undefined {\n const ref = useRef<T>();\n useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n}\n", "import { useMemo } from 'react';\nimport { Options as Opts } from '@splunk/visualization-encoding/Options';\nimport type { DashboardVizProps } from '../interfaces';\n\n/**\n * Hook that evaluates the DSL for subset of a viz's options needed to determine\n * its x and y fields as well as the types of all its fields.\n */\nconst useGetXAndYFields = ({\n shouldEvaluateDSL,\n options,\n context,\n dataSources,\n}: Pick<DashboardVizProps, 'dataSources' | 'options' | 'context'> & {\n shouldEvaluateDSL: boolean;\n}) => {\n const { dataSourcesWithOnlyOnePoint, dataFrameWithOnlyOnePoint } = useMemo(() => {\n if (!shouldEvaluateDSL) {\n return {\n dataSourcesWithOnlyOnePoint: null,\n dataFrameWithOnlyOnePoint: null,\n };\n }\n\n if (!dataSources?.primary?.data?.columns?.length) {\n return {\n dataSourcesWithOnlyOnePoint: null,\n dataFrameWithOnlyOnePoint: null,\n };\n }\n const { primary: primaryDS } = dataSources;\n\n const columnsWithOnlyOnePoint = primaryDS.data.columns.map(column => {\n return [column[0]];\n });\n\n const filteredDataSources = {\n primary: {\n ...primaryDS,\n data: {\n ...primaryDS.data,\n columns: columnsWithOnlyOnePoint,\n },\n },\n };\n\n return {\n dataSourcesWithOnlyOnePoint: filteredDataSources,\n dataFrameWithOnlyOnePoint: Opts.dataFrameFromDataSource(filteredDataSources),\n };\n }, [dataSources, shouldEvaluateDSL]);\n\n const xAndYFieldsWithTypes = useMemo(() => {\n try {\n if (!dataSourcesWithOnlyOnePoint || !dataFrameWithOnlyOnePoint) {\n return options;\n }\n\n if (!options?.x || (!options?.y && !options?.y2)) {\n return options;\n }\n\n const optionsToEvaluate = {\n x: options.x,\n xField: '> x | getField()',\n y: options.y,\n yFields: options.y ? '> y | getField()' : undefined,\n y2: options.y2,\n y2Fields: options.y2 ? '> y2 | getField()' : undefined,\n fieldTypes: '> primary | getType()',\n };\n\n const {\n xField = '',\n yFields = [],\n y2Fields = [],\n fieldTypes,\n } = Opts.evaluate(\n { options: optionsToEvaluate, context },\n dataSourcesWithOnlyOnePoint,\n () => {},\n dataFrameWithOnlyOnePoint\n );\n return {\n xField,\n yFields: [...yFields, ...y2Fields],\n fieldTypes,\n };\n } catch (e) /* NOSONAR typescript:S2486 - Evaluation failure falls back to empty field data */ {\n return {\n xField: undefined,\n yFields: [],\n fieldTypes: [],\n };\n }\n }, [options, context, dataSourcesWithOnlyOnePoint, dataFrameWithOnlyOnePoint]);\n\n return xAndYFieldsWithTypes;\n};\n\nexport default useGetXAndYFields;\n", "import { useRef, useMemo, useEffect, useState } from 'react';\nimport { debounce, isEqual, pick } from 'lodash';\nimport type { DashboardVizProps } from '../interfaces';\nimport type { DownsampleOptions } from '../utils/dataUtils';\nimport { downsampleDataSources } from '../utils/dataUtils';\nimport usePrevious from './usePrevious';\nimport useGetXAndYFields from './useGetXAndYFields';\n\n// Options properties which impact/require re-downsample on change.\nconst downsampleVizOptionProperties = ['nullValueDisplay'];\n\nconst useDownsampleDataSources = ({\n dataSources,\n options,\n context,\n threshold,\n isDownsamplingEnabled,\n}: Pick<DashboardVizProps, 'dataSources' | 'options' | 'context'> & {\n threshold: number;\n isDownsamplingEnabled?: boolean;\n}) => {\n const isFirstUseEffectCall = useRef(true);\n\n const xAndYFieldsWithTypes = useGetXAndYFields({\n shouldEvaluateDSL: isDownsamplingEnabled,\n options,\n context,\n dataSources,\n });\n\n // Extract viz options that impact downsampling.\n const downsampleVizOptions = useMemo(() => pick(options, downsampleVizOptionProperties), [options]);\n const downsampleDSOptions = useMemo(\n () => ({\n ...downsampleVizOptions,\n ...xAndYFieldsWithTypes,\n }),\n [xAndYFieldsWithTypes, downsampleVizOptions]\n );\n\n const previousDownsampleDSOptions = usePrevious(downsampleDSOptions);\n const previousDataSources = usePrevious(dataSources);\n const previousThreshold = usePrevious(threshold);\n\n const [downsampledDataSources, setDownsampledDataSources] = useState(() => {\n return isDownsamplingEnabled\n ? downsampleDataSources({\n dataSources,\n threshold,\n options: downsampleDSOptions,\n })\n : dataSources;\n });\n\n const debouncedDownsampleDataSources = useMemo(() => {\n return debounce(\n (downsampleOptions: DownsampleOptions) => {\n const downsampledResult = downsampleDataSources(downsampleOptions);\n setDownsampledDataSources(downsampledResult);\n },\n 100,\n { trailing: true }\n );\n }, []);\n\n useEffect(() => {\n // don't downsample again on the use effect call that happened due to the initial render\n // this is since we already downsampled as part of the useState call\n if (isFirstUseEffectCall.current) {\n isFirstUseEffectCall.current = false;\n return;\n }\n\n if (!isDownsamplingEnabled) {\n setDownsampledDataSources(dataSources);\n return;\n }\n\n if (\n isEqual(previousDownsampleDSOptions, downsampleDSOptions) &&\n previousDataSources === dataSources &&\n previousThreshold === threshold\n ) {\n return;\n }\n\n // Debounce the downsampling so we don't have to downsample and execute DSL multiple times\n // while the viz is being resized\n debouncedDownsampleDataSources({\n dataSources,\n options: downsampleDSOptions, // Dont want to re-downsample everytime the options change\n threshold,\n });\n\n // need to detect if this runs as part of the initial render\n }, [\n dataSources,\n downsampleDSOptions,\n debouncedDownsampleDataSources,\n xAndYFieldsWithTypes,\n threshold,\n isDownsamplingEnabled,\n previousDataSources,\n previousThreshold,\n previousDownsampleDSOptions,\n ]);\n\n return downsampledDataSources;\n};\n\nexport default useDownsampleDataSources;\n", "\nimport * as defaultImport from \"@splunk/visualization-context/FeatureFlags\";\nexport * from \"@splunk/visualization-context/FeatureFlags\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as React from 'react';\nimport FeatureFlags from '@splunk/visualization-context/FeatureFlags';\n\nexport const getFeatureFlag = (\n context: React.Context<any> | null | undefined | Record<keyof typeof FeatureFlags, boolean>,\n flagName: string\n): boolean => {\n // look for feature flag in context first\n if (context && Object.keys(context).includes(flagName)) {\n return context[flagName];\n }\n\n // fall back to defaults\n if (Object.keys(FeatureFlags).includes(flagName)) {\n return FeatureFlags[flagName];\n }\n\n // fall back to false\n return false;\n};\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/trellisUtils\";\nexport * from \"@splunk/visualizations-shared/trellisUtils\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import { cloneDeep, omit } from 'lodash';\nimport { FieldEntry } from '@splunk/visualizations-shared/dataSourceUtils';\nimport {\n DataSplitMode,\n CHART,\n TIMECHART,\n STATS,\n UNKNOWN,\n extractDataSourceAggregationKeysChart,\n extractDataSourceAggregationKeysStats,\n extractSplitByFieldsChartFields,\n extractSplitByFieldsForStats,\n extractSplitByFieldsForUnknown,\n} from '@splunk/visualizations-shared/trellisUtils';\nimport { DataSource } from '../interfaces/DataSource';\n\nexport type SplitDataSource = { [key: string]: { [name: string]: DataSource } };\nexport interface DataSplitResult {\n splitDataSources: SplitDataSource;\n errorCode: 'UNKNOWN_DATA_SPLIT_MODE' | 'INVALID_SPLIT_BY_FIELD' | 'UNKNOWN';\n}\nexport const AGGREGATIONS = 'aggregations';\n\n/**\n * There can be certain SPL cmds that can produce dataSource without a specific field meta info (like group_by_rank, split_by_field etc),\n * to categorize it,\n * Example1:- `index = \"_internal\" | chart count`\n * Example2:- `index=_internal | chart avg(count), max(count)`\n * Example3:- `index = \"_internal\" | stats count`\n * Example4:- `index=_internal | stats avg(count), max(count)`\n */\nexport const dataSourcesSplitByAggregationsUnknown = (dataSource: {\n [name: string]: DataSource;\n}): DataSplitResult => {\n const fields = toFieldEntries(dataSource?.primary?.data?.fields);\n const columns = dataSource?.primary?.data?.columns;\n let splitDataSources = null;\n let errorCode = null;\n\n if (fields?.length) {\n splitDataSources = {};\n for (let i = 0; i < fields.length; i += 1) {\n const fieldName = fields[i].name;\n if (!fieldName?.startsWith('_')) {\n splitDataSources[fieldName] = cloneDeep(\n omit(dataSource, ['primary.data.fields', 'primary.data.columns'])\n );\n splitDataSources[fieldName].primary.data.fields = [fields[i]];\n splitDataSources[fieldName].primary.data.columns = [columns[i]];\n }\n }\n } else {\n errorCode = 'INVALID_SPLIT_BY_FIELD';\n }\n return { splitDataSources, errorCode };\n};\n\nconst toFieldEntries = (fields: FieldEntry[] | string[] = []): FieldEntry[] => {\n return fields.map(field => {\n if (typeof field === 'string') {\n return { name: field };\n }\n return field;\n });\n};\n\nexport const dataSourcesSplitByAggregationsTimechartAndChart = (dataSource: {\n [name: string]: DataSource;\n}): DataSplitResult => {\n const fields = toFieldEntries(dataSource?.primary?.data?.fields);\n const columns = dataSource?.primary?.data?.columns;\n let splitDataSources = null;\n let splitByFields = [];\n let errorCode = null;\n\n if (fields.length > 0) {\n splitByFields = extractDataSourceAggregationKeysChart(fields);\n }\n\n if (splitByFields && splitByFields.length > 0) {\n splitDataSources = {};\n splitByFields.forEach(splitByField => {\n splitDataSources[splitByField] = cloneDeep(\n omit(dataSource, ['primary.data.fields', 'primary.data.columns'])\n );\n splitDataSources[splitByField].primary.data.fields = [fields[0]];\n splitDataSources[splitByField].primary.data.columns = [columns[0]];\n fields.forEach((field: FieldEntry, idx) => {\n const fieldName = field?.name;\n if (\n fieldName !== '_time' &&\n !fieldName?.startsWith('_') &&\n field.data_source === splitByField\n ) {\n splitDataSources[splitByField].primary.data.fields.push(field);\n splitDataSources[splitByField].primary.data.columns.push(columns[idx]);\n }\n });\n });\n } else if (!splitByFields?.length && fields.length > 1) {\n // handle where data_source doesnot exist in fields\n // example1 :- index=_internal | timechart count\n // example2 :- index=_internal | timechart max(count) avg(count)\n splitDataSources = {};\n for (let i = 1; i < fields.length; i += 1) {\n const fieldName = fields[i].name;\n if (!fieldName?.startsWith('_')) {\n splitDataSources[fieldName] = cloneDeep(\n omit(dataSource, ['primary.data.fields', 'primary.data.columns'])\n );\n splitDataSources[fieldName].primary.data.fields = [fields[0], fields[i]];\n splitDataSources[fieldName].primary.data.columns = [columns[0], columns[i]];\n }\n }\n } else {\n errorCode = 'INVALID_SPLIT_BY_FIELD';\n }\n return { splitDataSources, errorCode };\n};\n\nexport const dataSourcesSplitByAggregationsStats = (dataSource: {\n [name: string]: DataSource;\n}): DataSplitResult => {\n const fields = toFieldEntries(dataSource?.primary?.data?.fields);\n const columns = dataSource?.primary?.data?.columns;\n let splitDataSources = null;\n let splitByFields = [];\n let errorCode = null;\n if (fields.length > 0) {\n splitByFields = extractDataSourceAggregationKeysStats(fields);\n }\n\n if (splitByFields && splitByFields.length > 0) {\n splitDataSources = {};\n splitByFields.forEach(splitByField => {\n splitDataSources[splitByField] = cloneDeep(\n omit(dataSource, ['primary.data.fields', 'primary.data.columns'])\n );\n splitDataSources[splitByField].primary.data.fields = [fields[0]];\n splitDataSources[splitByField].primary.data.columns = [columns[0]];\n const idx = fields.findIndex(field => field.name === splitByField);\n if (idx > 0) {\n splitDataSources[splitByField].primary.data.fields.push(fields[idx]);\n splitDataSources[splitByField].primary.data.columns.push(columns[idx]);\n }\n });\n } else {\n errorCode = 'INVALID_SPLIT_BY_FIELD';\n }\n return { splitDataSources, errorCode };\n};\n\nexport const dataSourcesSplitByModeTimechart = (\n dataSource: { [name: string]: DataSource },\n splitBy: string\n): DataSplitResult => {\n const fields = toFieldEntries(dataSource?.primary?.data?.fields);\n const columns = dataSource?.primary?.data?.columns;\n let splitDataSources = null;\n let splitByFields = [];\n let errorCode = null;\n if (fields.length > 0) {\n splitByFields = extractSplitByFieldsChartFields(fields);\n }\n if (splitByFields?.includes(splitBy)) {\n splitDataSources = {};\n const dataSourceKeys = extractDataSourceAggregationKeysChart(fields);\n const valueKeys = [];\n for (let i = 1; i < fields.length; i += 1) {\n // not including internal fields\n if (!fields[i].name?.startsWith('_')) {\n valueKeys.push(fields[i].splitby_value ? fields[i].splitby_value : fields[i].name);\n }\n }\n valueKeys.forEach(val => {\n splitDataSources[val] = cloneDeep(\n omit(dataSource, ['primary.data.fields', 'primary.data.columns'])\n );\n splitDataSources[val].primary.data.fields = [{ name: fields[0].name }];\n splitDataSources[val].primary.data.columns = [[...columns[0]]];\n dataSourceKeys.forEach(dsKey => {\n fields.forEach((field, idx) => {\n if (field.data_source === dsKey && (field.splitby_value === val || field.name === val)) {\n // only push valid fields for the current split by valueKey, instead of all fields.\n splitDataSources[val].primary.data.fields.push({\n name: dsKey,\n });\n splitDataSources[val].primary.data.columns.push([...columns[idx]]);\n }\n });\n });\n });\n } else {\n errorCode = 'INVALID_SPLIT_BY_FIELD';\n }\n return { splitDataSources, errorCode };\n};\n\nconst splitRowWise = (\n dataSource: { [name: string]: DataSource },\n columns,\n fields,\n otherSplitBy: string[],\n dataSourceKeys: string[],\n nonDataSourceAggregations: string[]\n) => {\n const splitDataSources = {};\n const valueKeys = cloneDeep(columns[0]);\n valueKeys.forEach((val, idx) => {\n splitDataSources[val] = cloneDeep(omit(dataSource, ['primary.data.fields', 'primary.data.columns']));\n splitDataSources[val].primary.data.fields = [];\n if (otherSplitBy.length) {\n splitDataSources[val].primary.data.fields = [{ name: otherSplitBy[0] }];\n }\n if (dataSourceKeys.length) {\n const columnValues = [[]];\n splitDataSources[val].primary.data.fields = [\n ...splitDataSources[val].primary.data.fields,\n ...dataSourceKeys.map(k => ({ name: k })),\n ];\n dataSourceKeys.forEach(() => {\n columnValues.push([]);\n });\n for (let i = 1; i <= Math.ceil((fields.length - 1) / dataSourceKeys.length); i += 1) {\n columnValues[0].push(fields[i].splitby_value ? fields[i].splitby_value : fields[i].name);\n dataSourceKeys.forEach((dskey, dsIndx) => {\n const mul = (fields.length - 1) / dataSourceKeys.length;\n columnValues[dsIndx + 1].push(columns[i + dsIndx * mul][idx]);\n });\n }\n splitDataSources[val].primary.data.columns = columnValues;\n } else if (nonDataSourceAggregations.length) {\n const columnValues = [];\n fields.forEach((aggregationField, fieldIdx) => {\n if (fieldIdx > 0) {\n splitDataSources[val].primary.data.fields.push(aggregationField);\n columnValues.push([columns[fieldIdx][idx]]);\n }\n });\n splitDataSources[val].primary.data.columns = columnValues;\n }\n });\n return splitDataSources;\n};\n\nconst splitColumnWise = (\n dataSource: { [name: string]: DataSource },\n columns,\n fields,\n otherSplitBy: string[],\n dataSourceKeys: string[]\n) => {\n const splitDataSources = {};\n const valueKeys = [];\n for (let i = 1; i < fields.length; i += 1) {\n valueKeys.push(fields[i].splitby_value ? fields[i].splitby_value : fields[i].name);\n }\n valueKeys.forEach(val => {\n splitDataSources[val] = cloneDeep(omit(dataSource, ['primary.data.fields', 'primary.data.columns']));\n splitDataSources[val].primary.data.fields = [\n { name: otherSplitBy[0] },\n ...dataSourceKeys.map(k => ({ name: k })),\n ];\n splitDataSources[val].primary.data.columns = [[...columns[0]]];\n dataSourceKeys.forEach(dsKey => {\n fields.forEach((field, idx) => {\n if (field.data_source === dsKey && (field.splitby_value === val || field.name === val)) {\n splitDataSources[val].primary.data.columns.push([...columns[idx]]);\n }\n });\n });\n });\n return splitDataSources;\n};\n\nexport const dataSourcesSplitByModeChart = (\n dataSource: { [name: string]: DataSource },\n splitBy: string\n): DataSplitResult => {\n const fields = toFieldEntries(dataSource?.primary?.data?.fields);\n const columns = dataSource?.primary?.data?.columns;\n let splitDataSources = null;\n let splitByFields = [];\n let errorCode = null;\n if (fields.length > 0) {\n splitByFields = extractSplitByFieldsChartFields(fields);\n }\n if (splitByFields?.includes(splitBy)) {\n const splitByFieldIdx = splitByFields.indexOf(splitBy);\n const otherSplitBy = splitByFields.filter(f => f !== splitBy);\n const dataSourceKeys = extractDataSourceAggregationKeysChart(fields);\n const nonDataSourceAggregations = [];\n if (\n !dataSourceKeys.length &&\n fields[0].groupby_rank === '0' &&\n fields.length &&\n !fields[1].groupby_rank\n ) {\n for (let i = 1; i < fields.length; i += 1) {\n nonDataSourceAggregations.push(fields[i].name);\n }\n }\n if (splitByFieldIdx === 0) {\n splitDataSources = splitRowWise(\n dataSource,\n columns,\n fields,\n otherSplitBy,\n dataSourceKeys,\n nonDataSourceAggregations\n );\n } else {\n splitDataSources = splitColumnWise(dataSource, columns, fields, otherSplitBy, dataSourceKeys);\n }\n } else {\n errorCode = 'INVALID_SPLIT_BY_FIELD';\n }\n return { splitDataSources, errorCode };\n};\n\n/**\n * This method does datasplitting for 'stats' and generic cmds('makeresults','table' etc - categoried as 'unknown' splitMode).\n * The main difference is for 'stats' cmd possible splitBy fields have 'group_by_rank' in field meta info, whereas for 'unknown' cmd it can be any fieldnames\n */\nexport const dataSourcesSplitByModeStatsorUnknown = (\n dataSource: { [name: string]: DataSource },\n splitBy: string,\n splitMode?: DataSplitMode\n): DataSplitResult => {\n const fields = toFieldEntries(dataSource?.primary?.data?.fields);\n const columns = dataSource?.primary?.data?.columns;\n let splitDataSources = null;\n let splitByFields = [];\n let errorCode = null;\n if (fields.length > 0) {\n splitByFields =\n splitMode === UNKNOWN\n ? extractSplitByFieldsForUnknown(fields)\n : extractSplitByFieldsForStats(fields);\n }\n const splitByIndex = fields.findIndex(field => field.name === splitBy);\n if (splitByFields?.includes(splitBy)) {\n const splitByColumn = dataSource?.primary?.data?.columns[splitByIndex];\n splitDataSources = {};\n splitByColumn.forEach((val, idx) => {\n if (splitDataSources[val]) {\n splitDataSources[val].push(idx);\n } else {\n splitDataSources[val] = [idx];\n }\n });\n const cloneFields = cloneDeep(fields);\n cloneFields.splice(splitByIndex, 1);\n const valueKeys = Object.keys(splitDataSources);\n valueKeys.forEach(val => {\n const valIndices = cloneDeep(splitDataSources[val]);\n splitDataSources[val] = cloneDeep(\n omit(dataSource, ['primary.data.fields', 'primary.data.columns'])\n );\n splitDataSources[val].primary.data.fields = cloneFields;\n splitDataSources[val].primary.data.columns = [];\n columns.forEach((col, idx) => {\n if (idx !== splitByIndex) {\n const newCol = valIndices.map(valIdx => col[valIdx]);\n splitDataSources[val].primary.data.columns.push(newCol);\n }\n });\n });\n } else {\n errorCode = 'INVALID_SPLIT_BY_FIELD';\n }\n return { splitDataSources, errorCode };\n};\n\nexport const getTrellisDataSourcesBySplitMode = (\n splitMode: DataSplitMode,\n dataSources: { [name: string]: DataSource },\n trellisSplitBy: string\n): DataSplitResult => {\n let result: DataSplitResult = null;\n try {\n if (splitMode === TIMECHART) {\n result =\n trellisSplitBy === AGGREGATIONS\n ? dataSourcesSplitByAggregationsTimechartAndChart(dataSources)\n : dataSourcesSplitByModeTimechart(dataSources, trellisSplitBy);\n } else if (splitMode === STATS) {\n result =\n trellisSplitBy === AGGREGATIONS\n ? dataSourcesSplitByAggregationsStats(dataSources)\n : dataSourcesSplitByModeStatsorUnknown(dataSources, trellisSplitBy, STATS);\n } else if (splitMode === CHART) {\n result =\n trellisSplitBy === AGGREGATIONS\n ? dataSourcesSplitByAggregationsTimechartAndChart(dataSources)\n : dataSourcesSplitByModeChart(dataSources, trellisSplitBy);\n } else if (splitMode === UNKNOWN) {\n result =\n trellisSplitBy === AGGREGATIONS\n ? dataSourcesSplitByAggregationsUnknown(dataSources)\n : dataSourcesSplitByModeStatsorUnknown(dataSources, trellisSplitBy, UNKNOWN);\n }\n } catch (ex) {\n // eslint-disable-next-line no-console\n console.error('getTrellisDataSourcesBySplitMode ', ex);\n result = { splitDataSources: null, errorCode: 'UNKNOWN' };\n }\n return result;\n};\n\n/**\n * sets legendDisplay to off when a visualization is in trellis mode and not set by the user\n * @param {Boolean} isTrellisOn\n * @param {DashboardVizOpts} options\n * @param {DashboardVizOpts} defaultOptions\n * @returns { {'legendDisplay', 'off'} or {} }\n */\nexport const turnOffLegendDisplayWhenTrellisIsOn = (\n isTrellisOn: boolean,\n options: Record<string, any>\n): Record<string, string> => {\n if (isTrellisOn && !options.legendDisplay) {\n return {\n legendDisplay: 'off',\n };\n }\n return {};\n};\n\ninterface MinMax {\n min: number;\n max: number;\n}\n\n// Returns the range extended to include every numeric point in the column.\n// Non-numeric strings become NaN and are ignored by the comparisons.\nconst extendMinMaxWithColumn = (column: Array<any>, range: MinMax): MinMax =>\n column.reduce((acc, point) => {\n const pointNumber = Number(point);\n if (Number.isNaN(pointNumber)) {\n return acc;\n }\n return {\n min: Math.min(pointNumber, acc.min),\n max: Math.max(pointNumber, acc.max),\n };\n }, range);\n\nconst calculateSharedMinMax = (splitData: SplitDataSource): Array<number> => {\n let range: MinMax = { min: Infinity, max: -Infinity };\n\n Object.keys(splitData).forEach(splitByKey => {\n const datasources = splitData[splitByKey];\n Object.keys(datasources).forEach(datasourceName => {\n const dataColumns = datasources[datasourceName].data.columns;\n dataColumns.forEach(column => {\n range = extendMinMaxWithColumn(column, range);\n });\n });\n });\n\n return [range.min, range.max];\n};\n\n/**\n * determines min and max to use in trellis mode\n * @param {splitData} SplitDataSource\n * @returns {Array<number | string>} [min, max]\n */\nexport const determineMinMax = (\n splitData: SplitDataSource,\n trellisSharedScale: boolean,\n yAxisMin: number | string,\n yAxisMax: number | string,\n stackMode?: string\n) => {\n if (!trellisSharedScale || stackMode === 'stacked100' || (yAxisMin !== 'auto' && yAxisMax !== 'auto'))\n return [yAxisMin, yAxisMax];\n\n const [sharedMin, sharedMax] = calculateSharedMinMax(splitData);\n\n const shouldUseSharedMax = sharedMax !== -Infinity && yAxisMax === 'auto';\n const shouldUseSharedMin = sharedMin !== Infinity && yAxisMin === 'auto';\n\n return [shouldUseSharedMin ? sharedMin : yAxisMin, shouldUseSharedMax ? sharedMax : yAxisMax];\n};\n", "\nimport * as defaultImport from \"@splunk/visualization-canvas\";\nexport * from \"@splunk/visualization-canvas\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import styled from 'styled-components';\n\nconst VizStyleWrapper = styled.div.attrs(({ dataTestKey }) => ({\n 'data-test': dataTestKey,\n 'data-testid': dataTestKey,\n}))`\n display: flex;\n justify-content: center;\n flex-direction: column;\n width: 100%;\n height: 100%;\n background-color: ${props => props.backgroundColor};\n`;\n\nVizStyleWrapper.displayName = 'VizStyleWrapper';\n\nexport default VizStyleWrapper;\n", "\nimport * as defaultImport from \"@splunk/react-icons/Triangle\";\nexport * from \"@splunk/react-icons/Triangle\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/propUtils\";\nexport * from \"@splunk/visualizations-shared/propUtils\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/simpleXMLOptions\";\nexport * from \"@splunk/visualizations-shared/simpleXMLOptions\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import { has, isArray, isUndefined } from 'lodash';\nimport React from 'react';\nimport styled from 'styled-components';\nimport variables from '@splunk/themes/variables';\nimport Triangle from '@splunk/react-icons/Triangle';\nimport { adjustOptionsToSchema } from '@splunk/visualizations-shared/propUtils';\nimport { getSimpleXMLOptionsForProps } from '@splunk/visualizations-shared/simpleXMLOptions';\nimport {\n BottomLegendFactory,\n Legend,\n SideLegendFactory,\n LeftLegendFactory,\n TopLegendFactory,\n ScaleConfig,\n shortenNumber,\n SeriesConfig,\n EventAnnotation,\n EventAnnotationRendererProps,\n} from '@splunk/visualization-canvas';\nimport type { LegendTruncation } from '@splunk/visualization-canvas';\nimport type { JsonColumnData } from './interfaces/DataSource';\n\ninterface ChartOptions {\n [key: string]: any;\n}\n\ninterface TransformAxisChartOptionsParams {\n originalOptions: Record<string, any>;\n optionsSchema: Record<string, any>;\n chart: string;\n convertToSCProps: (options: Record<string, any>) => Record<string, any>;\n preservedProps: string[];\n}\n\nexport const SHARED_AXIS_CHART_CANVAS_SPECIFIC_PROPS = [\n 'yAxisMin',\n 'yAxisMax',\n 'y2AxisMin',\n 'y2AxisMax',\n 'showXMajorGridLines',\n 'showYMajorGridLines',\n 'showY2MajorGridLines',\n 'showYMinorGridLines',\n 'showY2MinorGridLines',\n 'xAxisMajorTickVisibility',\n 'xAxisMajorTickSize',\n 'yAxisMajorTickVisibility',\n 'y2AxisMajorTickVisibility',\n 'yAxisMajorTickSize',\n 'y2AxisMajorTickSize',\n 'yAxisMinorTickVisibility',\n 'y2AxisMinorTickVisibility',\n 'yAxisMinorTickSize',\n 'y2AxisMinorTickSize',\n 'legendMode',\n 'legendTruncation',\n];\n\nexport const transformAxisChartOptions = ({\n originalOptions,\n optionsSchema,\n chart,\n convertToSCProps,\n preservedProps,\n}: TransformAxisChartOptionsParams): Record<string, any> => {\n const returnOptions = adjustOptionsToSchema(originalOptions, optionsSchema);\n const convertedOptions = convertToSCProps(returnOptions);\n const transformed = {\n ...getSimpleXMLOptionsForProps(convertedOptions),\n chart,\n };\n\n const preserved = preservedProps.reduce(\n (acc, prop) => {\n if (returnOptions[prop] !== undefined) {\n acc[prop] = returnOptions[prop];\n }\n return acc;\n },\n {} as Record<string, any>\n );\n\n // Preserve legendLabels as stringified JSON (converted in convertTo*SCProperties)\n if (convertedOptions.legendLabels !== undefined) {\n preserved.legendLabels = convertedOptions.legendLabels;\n }\n\n return { ...transformed, ...preserved };\n};\n\nexport const DEFAULT_LINE_WIDTH = 2;\n/**\n * Get formatted annotations - highcharts expects annotations in a specific format\n * @method getAnnotations\n * @param {Object} options\n * @param {Array} options.annotationX\n * @param {Array} options.annotationColor\n * @param {Array} options.annotationLabel\n * @returns {Array}\n */\nexport const getAnnotations = ({ annotationX, annotationColor, annotationLabel }) =>\n annotationX?.length\n ? annotationX.map((timestamp, i) => ({\n color: annotationColor?.[i],\n label: annotationLabel?.[i],\n time: timestamp,\n }))\n : [];\n\n/**\n * Get formatted annotations for canvas - viz-canvas timeseries expects annotations in a specific format\n * @method getAnnotationsForCanvas\n * @param {Object} options\n * @param {Array} options.annotationX\n * @param {Array} options.annotationColor\n * @param {Array} options.annotationLabel\n * @returns {Array}\n */\nexport const getAnnotationsForCanvas = ({\n annotationX,\n annotationColor,\n annotationLabel,\n}): EventAnnotation[] =>\n annotationX?.length\n ? annotationX.map((timestamp, i) => ({\n key: annotationLabel?.[i],\n time: timestamp,\n color: annotationColor?.[i],\n }))\n : [];\n\n/**\n * Styled Triangle component for event annotations with default severityColorNotice\n */\nconst StyledTriangle = styled(Triangle)<{ eventColor?: string }>`\n color: ${props => props.eventColor || variables.severityColorNotice(props)};\n`;\n\n/**\n * Custom event annotation renderer using Triangle icon from @splunk/react-icons\n * @method triangleEventAnnotationRenderer\n * @param {EventAnnotationRendererProps} props\n * @returns {ReactElement}\n */\nexport const triangleEventAnnotationRenderer: React.FC<EventAnnotationRendererProps> = ({\n event,\n dimensions,\n}) => {\n const eventWithColor = event as EventAnnotation & { color?: string };\n return React.createElement(StyledTriangle, {\n width: `${dimensions.width}px`,\n height: `${dimensions.height}px`,\n viewBox: '0 0 24 24',\n variant: 'filled',\n eventColor: eventWithColor.color,\n });\n};\n\n/**\n * Truncate the result set to given limit\n * @method truncateData\n * @param {Object} dataSet - dataSources.primary.data\n * @param {Number|String} truncationLimit - options['chart.resultTruncationLimit']\n * @returns {Object}\n */\nexport const truncateData = (dataSet, truncationLimit): Record<string, any[]> => {\n if (!dataSet) {\n return null;\n }\n\n const limit = Number.parseInt(truncationLimit, 10);\n if (!limit || limit <= 0) {\n return dataSet;\n }\n\n const truncatedData: Record<string, Array<string[] | number[]>> = {\n ...dataSet,\n };\n truncatedData.columns = truncatedData.columns.map(columnData =>\n columnData && Array.isArray(columnData) ? columnData.slice(0, limit) : columnData\n );\n return truncatedData;\n};\n\n/**\n * Helper method to update the option values into the values that SC accepts\n * @method mapToValues\n * @param {Object} options\n * @returns {Object}\n */\nexport const mapToValues = (optionValuesSCMapping: Record<string, any>) => options => {\n const convertedOptions: Record<string, any> = { ...options };\n Object.keys(optionValuesSCMapping).forEach(key => {\n if (has(options, key)) {\n const updatedValue = optionValuesSCMapping[key][options[key]];\n if (!isUndefined(updatedValue)) {\n convertedOptions[key] = updatedValue;\n }\n }\n });\n return convertedOptions;\n};\n\ninterface Y2AxisOptions extends ChartOptions {\n y2Fields?: string | string[];\n}\n\n/**\n * Helper method to process options related to y2Fields\n * @method convertY2AxisOptions\n * @param {Object} originalOptions\n * @returns {Object}\n */\nexport const convertY2AxisOptions = ({\n y2Fields,\n ...originalOptions\n}: Y2AxisOptions): Record<string, any> => {\n const convertedOptions: Record<string, any> = {\n ...originalOptions,\n };\n if (y2Fields) {\n convertedOptions['axisY2.enabled'] = true;\n convertedOptions['axisY2.fields'] = isArray(y2Fields) ? y2Fields.filter(Boolean).join(',') : y2Fields;\n }\n return convertedOptions;\n};\n\n/**\n * Helper method to format value for overlayFields\n * @method convertOverlayFields\n * @param {Object} originalOptions\n * @returns {Object}\n */\nexport const convertOverlayFields = (originalOptions: ChartOptions): ChartOptions => {\n const convertedOptions: ChartOptions = {\n ...originalOptions,\n };\n const { overlayFields } = originalOptions;\n if (overlayFields) {\n convertedOptions.overlayFields = Array.isArray(overlayFields)\n ? overlayFields\n .filter(Boolean)\n .map(field => field.trim())\n .join(',')\n : overlayFields;\n }\n return convertedOptions;\n};\n\n/**\n * checks whether data is multi series data\n * @param {array} data array\n * @return {Boolean}\n */\nexport const isMultiSeriesData = (data: string[] | string[][]): boolean =>\n Array.isArray(data) && Array.isArray(data[0]);\n/**\n * checks whether data is multi series data and returns value as array\n * @param {array} data array\n * @param {*} value to return as array\n * @return {array}\n */\nexport const toArrayForSeries = (data, value): any[] => {\n if (isMultiSeriesData(data)) {\n return Array.isArray(value) ? value : [value];\n }\n return [value];\n};\ninterface ConstructFieldsAndColumnsParams {\n x: string[];\n y: string[] | string[][];\n xField: string;\n yFields: string | string[];\n y2?: string[] | string[][];\n y2Fields?: string | string[];\n}\nexport const constructFieldsAndColumns = ({\n x = [],\n y = [],\n xField,\n yFields,\n y2,\n y2Fields,\n}: ConstructFieldsAndColumnsParams): JsonColumnData => {\n const columns = [x.map(String), ...toArrayForSeries(y, y).map(series => series.map(String))];\n const yFieldsArray = toArrayForSeries(y, yFields);\n const fields = [{ name: xField }, ...yFieldsArray.map(field => ({ name: field }))];\n // splunk-charting requires y2 to be part of columns\n // when y & y2 options are configured with different (mutually exclusive) series\n // y2 columns need to be added to columns\n if (y2Fields) {\n const y2FieldsArray = toArrayForSeries(y2, y2Fields);\n const y2AsArray = toArrayForSeries(y2, y2).map(series => series?.map(String));\n y2FieldsArray.forEach((y2Field, index) => {\n if (!yFieldsArray.includes(y2Field) && y2AsArray[index]) {\n fields.push({\n name: y2Field,\n });\n columns.push(y2AsArray[index]);\n }\n });\n }\n return {\n columns,\n fields,\n };\n};\n\nexport function constructAdditionalTooltipFieldsMap({ fields, columns, additionalTooltipFields }) {\n const map = {};\n\n additionalTooltipFields?.forEach(fieldName => {\n const index = fields.findIndex(f => f.name === fieldName);\n if (index !== -1) {\n map[fieldName] = columns[index];\n }\n });\n\n return map;\n}\n\n/**\n * Extracts additional tooltip values from columns and fields into an array of objects.\n * Each object in the array represents the values at a specific data point index.\n * This follows the same pattern used by Timeline visualization.\n *\n * @param columns - Array of column data\n * @param fields - Array of field definitions with name property\n * @param additionalTooltipFields - Array of field names to extract\n * @returns Array of objects, where each object maps field names to values at that index\n */\n// Type alias for a single tooltip field value record\ntype TooltipFieldRecord = Record<string, string | number | null>;\n\nexport function extractAdditionalTooltipValues(\n columns: (string | number | null)[][],\n fields: { name: string }[],\n additionalTooltipFields: string[]\n): TooltipFieldRecord[] {\n if (!additionalTooltipFields?.length || !columns?.length || !fields?.length) {\n return [];\n }\n\n // Create a mapping of field names to their column indices\n const fieldIndexMap = fields.reduce<Record<string, number>>((acc, field, index) => {\n acc[field.name] = index;\n return acc;\n }, {});\n\n const numRows = columns[0]?.length || 0;\n const additionalTooltipValuesArray: TooltipFieldRecord[] = [];\n\n for (let i = 0; i < numRows; i += 1) {\n const tooltipObject: TooltipFieldRecord = {};\n\n additionalTooltipFields.forEach(fieldName => {\n if (fieldName in fieldIndexMap) {\n const columnIndex = fieldIndexMap[fieldName];\n tooltipObject[fieldName] = columns[columnIndex]?.[i] ?? null;\n } else {\n tooltipObject[fieldName] = null;\n }\n });\n\n additionalTooltipValuesArray.push(tooltipObject);\n }\n\n return additionalTooltipValuesArray;\n}\n\nexport type AdditionalTooltipResult = TooltipFieldRecord[];\n\ntype AdditionalTooltipValuesCache = {\n columns: unknown;\n fields: unknown;\n additionalTooltipFields: string[] | undefined;\n result: AdditionalTooltipResult | undefined;\n};\n\nexport const areStringArraysEqual = (a: string[] | undefined, b: string[] | undefined): boolean => {\n if (a === b) return true;\n if (!a || !b) return false;\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i += 1) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n};\n\nexport const createAdditionalTooltipValuesMemoizer = () => {\n let cache: AdditionalTooltipValuesCache = {\n columns: null,\n fields: null,\n additionalTooltipFields: undefined,\n result: undefined,\n };\n\n return (\n columns: (string | number | null)[][],\n fields: { name: string }[],\n additionalTooltipFields: string[] | undefined\n ): AdditionalTooltipResult | undefined => {\n if (\n cache.columns === columns &&\n cache.fields === fields &&\n areStringArraysEqual(cache.additionalTooltipFields, additionalTooltipFields)\n ) {\n return cache.result;\n }\n\n let result: AdditionalTooltipResult | undefined;\n if (additionalTooltipFields?.length && columns && fields) {\n result = extractAdditionalTooltipValues(columns, fields, additionalTooltipFields);\n }\n\n cache = {\n columns,\n fields,\n additionalTooltipFields,\n result,\n };\n\n return result;\n };\n};\n\n// Note: we are making the assumption that attaching a range.select listener means the user wants to enable search zoom\n// This is because we don't know if the time range tokens being updated by the drilldown is used by the current viz.\n// In the future we are considering using a shared context to pass this information from UDF to Viz.\ninterface OptionsProps {\n events?: string[];\n selectedItemId?: string;\n [key: string]: unknown;\n}\ninterface EventHandler {\n type: string;\n options: OptionsProps;\n}\n\nexport const shouldEnableSearchZoom = (eventHandlers: EventHandler[] = [], xField = '') => {\n const rangeSelectEventHandler = eventHandlers.find(eventHandler =>\n eventHandler.options.events?.includes('range.select')\n );\n // Check if xField is _time. This is how splunk-charting distinguishes a time chart from categorical.\n // Note: search zoom will be buggy if the x axis uses timestamp values but is not _time\n const xAxisIsTime = xField === '_time';\n\n return !!rangeSelectEventHandler && xAxisIsTime;\n};\n\nconst canvasSupportedTimeSeriesCharts = new Set(['splunk.line', 'splunk.area']);\nexport const isTimeSeriesCanvasRenderSupported = (vizConfigKey: string): boolean => {\n return canvasSupportedTimeSeriesCharts.has(vizConfigKey);\n};\n\ntype ChartData = {\n fields: (string | { name: string })[];\n columns: (string | number)[][];\n};\n\n// Filter all internal fields and columns except for _time fild\nexport const filterChartDataFromInternalFields = (chartData: ChartData): ChartData => {\n const { fields, columns } = chartData;\n\n // Determine the indexes to keep\n const keepIndexes = fields.reduce<number[]>((acc, field, index) => {\n const fieldName = typeof field === 'object' ? field?.name : field;\n if (!fieldName?.startsWith('_') || fieldName === '_time') {\n acc.push(index);\n }\n return acc;\n }, []);\n\n // Filter fields and columns\n const filteredFields = keepIndexes.map(index => fields[index]);\n const filteredColumns = keepIndexes.map(index => columns[index]);\n\n return { fields: filteredFields, columns: filteredColumns };\n};\n\nexport const isTimeField = (field): boolean => {\n return (\n (typeof field === 'object' && field?.name === '_time') ||\n (typeof field === 'string' && field === '_time')\n );\n};\n\nexport const convert2DArrayToNumbers = arr => {\n return arr.map(subArray => subArray.map(element => Number.parseFloat(element)));\n};\n\nexport const convertTimeStringToUnix = arr => {\n return arr.map(timeStr => Number.parseInt((new Date(timeStr).getTime() / 1000).toFixed(0), 10));\n};\n\n/**\n * Parses an axis value that may be 'auto', null, undefined, empty string, or a numeric value.\n * Returns undefined for non-numeric values, allowing the renderer to auto-calculate the range.\n * @param {any} val - The value to parse (string, number, null, undefined)\n * @returns {number | undefined} - Parsed number or undefined\n */\nexport const parseAxisValue = (val: any): number | undefined => {\n if (val === undefined || val === null || val === 'auto' || val === '') {\n return undefined;\n }\n const num = typeof val === 'number' ? val : Number.parseFloat(val);\n return Number.isNaN(num) ? undefined : num;\n};\n\n/**\n * Parses X-axis line visibility option from string to boolean or undefined.\n * @param {string | undefined} visibility - The visibility option ('hide', 'show', or other)\n * @returns {boolean | undefined} - false for 'hide', true for 'show', undefined otherwise\n */\nexport const parseXAxisLineVisibility = (visibility?: string): boolean | undefined => {\n if (visibility === 'hide') return false;\n if (visibility === 'show') return true;\n return undefined;\n};\n\n// Legend placement logic for canvas render, used in TimeseriesChartWrapper\nexport const getLegend = (props: {\n legendDisplay: string;\n isSeriesCompare: boolean;\n legendTruncation?: LegendTruncation;\n}): Legend | false => {\n const legendPlacement = props?.legendDisplay;\n const { isSeriesCompare, legendTruncation } = props;\n const commonLegendProps = {\n center: true,\n fontSize: 12,\n largerTiles: true,\n hideSeriesValue: !isSeriesCompare, // Show values if in seriesCompare mode\n legendTruncation,\n };\n\n // \"right\" | \"left\" | \"top\" | \"bottom\" | \"off\"\n switch (legendPlacement) {\n case 'off':\n return false;\n case 'left':\n return LeftLegendFactory({\n ...commonLegendProps,\n });\n case 'bottom':\n return BottomLegendFactory({\n wrap: true,\n ...commonLegendProps,\n });\n case 'top':\n return TopLegendFactory({\n wrap: true,\n ...commonLegendProps,\n });\n // Note: By default, use right legend\n default:\n return SideLegendFactory({\n ...commonLegendProps,\n });\n }\n};\n\nexport const getComputedAxisTitles = (\n inputAxisTitle: string,\n fields: string[],\n axisTitleVisibility: 'show' | 'collapsed'\n): string => {\n if (axisTitleVisibility === 'collapsed') {\n return '';\n }\n let fieldTitle = fields.length > 1 ? '' : fields[0]; // If more than one series (multi-series) default empty title\n if (!fieldTitle) {\n fieldTitle = '';\n }\n return inputAxisTitle?.length ? inputAxisTitle.trim() : fieldTitle;\n};\n\n/**\n * Truncates Y-axis title based on available container height and font metrics\n * @param axisTitle - The title text to potentially truncate\n * @param containerSpacing - Available height/ width in pixels depending on axis orientation\n * @param fontSize - Font size in pixels (default: 12)\n * @returns Truncated title with ellipsis if needed\n */\nexport const ellipsisAxisTitle = (axisTitle: string, containerSpacing: number, fontSize = 12): string => {\n if (!axisTitle) {\n return '';\n }\n if (Number.isNaN(containerSpacing) || containerSpacing <= 0) {\n return axisTitle;\n }\n // Calculate available height for text (leave 40% margin)\n const availableHeight = containerSpacing * 0.6;\n\n // Use a generic character width ratio that works across most fonts\n // 0.55 is a reasonable average for most fonts\n const avgCharWidth = fontSize * 0.55;\n\n // Calculate maximum characters that fit in available height\n const maxChars = Math.floor(availableHeight / avgCharWidth);\n\n // If title fits, return as-is\n if (axisTitle.length <= maxChars) {\n return axisTitle;\n }\n\n // Need to truncate - use middle ellipsis for better context\n if (maxChars <= 3) {\n return '...'; // Not enough space for meaningful text\n }\n\n // Reserve 3 characters for ellipsis\n const availableChars = maxChars - 3;\n const halfChars = Math.floor(availableChars / 2);\n\n // Create truncated title with middle ellipsis\n const start = axisTitle.slice(0, halfChars);\n const end = axisTitle.slice(-halfChars);\n\n return `${start}...${end}`;\n};\n\nexport type FieldObject = {\n name: string;\n};\n\nexport const getFieldName = (field: string | FieldObject): string => {\n const fieldName = typeof field === 'object' ? field?.name : field;\n return fieldName;\n};\n\nexport const getFieldNames = (fields: (string | FieldObject)[]): string[] => {\n return fields.map(field => getFieldName(field));\n};\n\n/**\n * Type alias for axis label visibility options\n */\nexport type AxisLabelVisibility = 'hide' | 'show' | 'auto';\n\n/**\n * Returns X scale config for viz-canvas charts\n * @param label\n * @param xAxisLabelVisibility\n * @returns\n */\nexport const getXScaleConfig = (\n label: string,\n xAxisLabelVisibility?: AxisLabelVisibility,\n xAxisLabelRotation?: -90 | -45 | 0 | 45 | 90\n): ScaleConfig => {\n const xConfig: ScaleConfig = { x: {} };\n xConfig.x.label = label;\n // Set hideLabels to true when xAxisLabelVisibility is \"hide\"\n if (xAxisLabelVisibility === 'hide') {\n xConfig.x.hideLabels = true;\n }\n // Set labelRotation if provided\n if (xAxisLabelRotation !== undefined) {\n xConfig.x.labelRotation = xAxisLabelRotation;\n }\n return xConfig;\n};\n\n/**\n * Returns Y scale config for viz-canvas charts\n * @param label\n * @param yAxisAbbreviation\n * @param yAxisScale\n * @param yAxisLabelVisibility\n * @param yAxisMin\n * @param yAxisMax\n * @returns\n */\nexport const getYScaleConfig = (\n label: string,\n yAxisAbbreviation: string,\n yAxisScale?: 'linear' | 'log',\n yAxisLabelVisibility?: AxisLabelVisibility,\n yAxisMin?: number,\n yAxisMax?: number\n): ScaleConfig => {\n const scaleType = yAxisScale ?? 'linear';\n const yConfig: ScaleConfig = { y: {} };\n yConfig.y.label = label;\n yConfig.y.type = scaleType;\n if (yAxisAbbreviation !== 'none') {\n yConfig.y.tickFmt = (v): string => shortenNumber(v, 1);\n }\n // Only set fixed width when abbreviation is ON\n // When abbreviation is OFF, width remains undefined to allow dynamic sizing in uplot-utils\n // based on actual data label lengths\n if (yAxisAbbreviation !== 'none') {\n yConfig.y.width = label && label.length > 0 ? 30 : 10;\n }\n if (yAxisLabelVisibility === 'hide') {\n yConfig.y.hideLabels = true;\n }\n if (yAxisMin !== undefined || yAxisMax !== undefined) {\n yConfig.y.range = (u, dataMin, dataMax) => {\n const min = yAxisMin ?? dataMin;\n const max = yAxisMax ?? dataMax;\n return [min, max];\n };\n }\n return yConfig;\n};\n/**\n * Returns Y2 scale config for viz-canvas charts\n * @param label\n * @param axisAbbreviation\n * @param axisScale\n * @param roundAxisLabelsToInteger\n * @param y2AxisLabelVisibility\n * @param y2AxisMin\n * @param y2AxisMax\n * @returns\n */\nexport const getY2ScaleConfig = (\n label: string,\n axisAbbreviation: string,\n axisScale?: 'linear' | 'log',\n roundAxisLabelsToInteger?: boolean,\n y2AxisLabelVisibility?: AxisLabelVisibility,\n y2AxisMin?: number,\n y2AxisMax?: number\n): ScaleConfig => {\n const y2Config: ScaleConfig = { y2: {} };\n const scaleType = axisScale ?? 'linear';\n y2Config.y2.label = label;\n y2Config.y2.side = 'right';\n // Note: showGrid is intentionally not set here so that the top-level\n // showY2MajorGridLines prop can control it (defaults to false)\n y2Config.y2.type = scaleType;\n if (axisAbbreviation !== 'none') {\n y2Config.y2.tickFmt = (v): string => shortenNumber(v, 1, roundAxisLabelsToInteger);\n // Set width for abbreviated Y2 axis\n // Y2 needs more width (50px) than Y-axis (30px) because of rotated title positioning\n // Width will be used to detect abbreviation setting in padding calculations\n y2Config.y2.width = label && label.length > 0 ? 50 : 10;\n } else if (roundAxisLabelsToInteger) {\n y2Config.y2.tickFmt = (v): string =>\n roundAxisLabelsToInteger ? Math.round(v).toString() : v.toString();\n }\n if (y2AxisLabelVisibility === 'hide') {\n y2Config.y2.hideLabels = true;\n }\n if (y2AxisMin !== undefined || y2AxisMax !== undefined) {\n y2Config.y2.range = (u, dataMin, dataMax) => {\n const min = y2AxisMin ?? dataMin;\n const max = y2AxisMax ?? dataMax;\n return [min, max];\n };\n }\n return y2Config;\n};\n\n/**\n * Add series overrides for viz-canvas charts (for eg:- line width)\n */\nconst getSeriesType = (\n isOverlay: boolean,\n isAreaChart: boolean,\n isStacked: boolean\n): SeriesConfig[string]['type'] | undefined => {\n if (isOverlay) return 'line';\n if (!isAreaChart) return undefined;\n return isStacked ? 'stacked-area' : 'area';\n};\n\nconst getY2Scale = (\n field: string,\n y2fields: string[] | undefined,\n overlayFields: string[] | undefined\n): 'y' | 'y2' => {\n const assignToY2 =\n (y2fields?.length > 0 && y2fields.includes(field)) ||\n (!y2fields?.length && overlayFields?.includes(field));\n return assignToY2 ? 'y2' : 'y';\n};\n\nexport const getSeriesOverrides = (opts: {\n yfields: string[];\n y2fields?: string[];\n lineWidth?: number;\n overlayFields?: string[];\n y2Enabled?: boolean;\n nullValueMode?: 'gaps' | 'connect' | 'zero';\n markerDisplay?: 'off' | 'filled' | 'outlined';\n lineDashStyle?: string;\n lineDashStylesByField?: Record<string, string>;\n stepPosition?: 'off' | 'before' | 'after';\n stepPositionsByField?: Record<string, 'off' | 'before' | 'after'>;\n type?: 'line' | 'area';\n stackMode?: 'auto' | 'stacked' | 'stacked100';\n showLines?: boolean;\n}): SeriesConfig => {\n const {\n yfields,\n y2fields,\n lineWidth,\n overlayFields,\n y2Enabled,\n nullValueMode,\n markerDisplay,\n lineDashStyle,\n lineDashStylesByField,\n stepPosition,\n stepPositionsByField,\n type,\n stackMode,\n showLines,\n } = opts;\n const seriesConfig: SeriesConfig = {};\n\n let spanGaps: boolean | undefined;\n if (nullValueMode === 'gaps') {\n spanGaps = false;\n } else if (nullValueMode == null) {\n spanGaps = undefined;\n } else {\n spanGaps = true;\n }\n const replaceNullsWithZero = nullValueMode === 'zero' ? true : undefined;\n\n const isAreaChart = type === 'area';\n const isStacked = isAreaChart && (stackMode === 'stacked' || stackMode === 'stacked100');\n\n // Non-overlay area fields first, then overlay fields - so overlays render on top\n const areaFields = isAreaChart ? yfields.filter(f => !overlayFields?.includes(f)) : yfields;\n const overlayFieldsInOrder = overlayFields?.filter(f => yfields.includes(f)) ?? [];\n const orderedFields = isAreaChart ? [...areaFields, ...overlayFieldsInOrder] : yfields;\n\n orderedFields.forEach(field => {\n const isOverlay = overlayFields?.includes(field) ?? false;\n const isPercent = isAreaChart && stackMode === 'stacked100' && !isOverlay;\n const shouldHideAreaOutline = isAreaChart && showLines === false && !isOverlay;\n\n seriesConfig[field] = {\n overrides: {\n width: shouldHideAreaOutline ? 0 : (lineWidth ?? DEFAULT_LINE_WIDTH),\n ...(isPercent ? ({ stacking: { mode: 'percent', group: 'A' } } as object) : {}),\n } as SeriesConfig[string]['overrides'],\n };\n\n const seriesType = getSeriesType(isOverlay, isAreaChart, isStacked);\n if (seriesType !== undefined) seriesConfig[field].type = seriesType;\n\n if (spanGaps !== undefined) seriesConfig[field].overrides.spanGaps = spanGaps;\n\n if (y2Enabled) seriesConfig[field].overrides.scale = getY2Scale(field, y2fields, overlayFields);\n\n if (markerDisplay !== undefined) seriesConfig[field].markerDisplay = markerDisplay;\n\n if (!isAreaChart || isOverlay) {\n const fieldDashStyle = lineDashStylesByField?.[field] || lineDashStyle;\n if (fieldDashStyle) seriesConfig[field].lineDashStyle = fieldDashStyle as any;\n }\n\n const hasFieldStepPosition = Object.hasOwn(stepPositionsByField || {}, field);\n const fieldStepPosition = hasFieldStepPosition ? stepPositionsByField?.[field] : stepPosition;\n if (fieldStepPosition && fieldStepPosition !== 'off') {\n (seriesConfig[field] as SeriesConfig[string] & { stepPosition?: string }).stepPosition =\n fieldStepPosition;\n }\n\n if (replaceNullsWithZero !== undefined) {\n (\n seriesConfig[field] as SeriesConfig[string] & { replaceNullsWithZero?: boolean }\n ).replaceNullsWithZero = replaceNullsWithZero;\n }\n });\n\n return seriesConfig;\n};\n\n/**\n * Finds the start and end indices in time series data for a given range.\n * @param xData - Array of time values (can be ISO strings or epoch timestamps)\n * @param startValue - Start value of the range (epoch timestamp)\n * @param endValue - End value of the range (epoch timestamp)\n * @returns Object with startXIndex (first index where time >= startValue) and endXIndex (last index where time <= endValue)\n */\nexport const findRangeIndices = (\n xData: (string | number)[],\n startValue: number,\n endValue: number\n): { startXIndex: number; endXIndex: number } => {\n let startXIndex = -1;\n let endXIndex = -1;\n\n // Convert xData to epoch timestamps if they are ISO strings\n const xDataEpoch = xData.map(val => {\n if (typeof val === 'string') {\n return new Date(val).getTime() / 1000; // Convert to epoch seconds\n }\n return val;\n });\n\n // Find the closest time value >= startValue\n for (let i = 0; i < xDataEpoch.length; i += 1) {\n if (xDataEpoch[i] >= startValue) {\n startXIndex = i;\n break;\n }\n }\n\n // If no value >= startValue found, use the last index (all values are less)\n if (startXIndex === -1 && xDataEpoch.length > 0) {\n startXIndex = xDataEpoch.length - 1;\n }\n\n // Find the closest time value <= endValue\n for (let i = xDataEpoch.length - 1; i >= 0; i -= 1) {\n if (xDataEpoch[i] <= endValue) {\n endXIndex = i;\n break;\n }\n }\n\n // If no value <= endValue found, use the first index (all values are greater)\n if (endXIndex === -1 && xDataEpoch.length > 0) {\n endXIndex = 0;\n }\n\n return { startXIndex, endXIndex };\n};\n", "import { useContext } from 'react';\nimport FeatureFlagContext from '@splunk/visualization-context/FeatureFlagContext';\nimport { LAYOUT_TYPE } from '@splunk/visualization-schemas';\n\nexport const useTrellisFeatureFlagOn = (): boolean => {\n const context = useContext(FeatureFlagContext) as Record<string, unknown>;\n return Boolean(context?.visualizations_enableTrellis);\n};\n\nexport const useTrellisEnabled = (layoutType = LAYOUT_TYPE.Off): boolean => {\n const trellisFeatureEnabled = useTrellisFeatureFlagOn();\n return trellisFeatureEnabled && layoutType === LAYOUT_TYPE.Trellis;\n};\n", "import * as React from 'react';\nimport styled from 'styled-components';\n\nexport const TRELLIS_TITLE_HEIGHT = 28;\n\nconst TrellisTitleText = styled.div`\n margin-left: 10px;\n margin-right: 10px;\n padding-top: 8px;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n`;\n\nconst TrellisTitleDiv = styled.div<{\n fontColor: string;\n backgroundColor: string;\n}>`\n height: ${TRELLIS_TITLE_HEIGHT}px;\n font-size: 14px;\n font-weight: 700;\n color: ${props => props.fontColor};\n background-color: ${props => props.backgroundColor};\n box-shadow: 0 1px ${props => props.backgroundColor}; // this is added to avoid a 1px gap between title and viz divs that showed up intermittently because of pixel rounding error in chrome.\n`;\n\ninterface TrellisTitleProps {\n fontColor: string;\n backgroundColor: string;\n trellisKey: unknown;\n}\n\nconst formatTrellisKey = (value: TrellisTitleProps['trellisKey']): string => {\n if (value === null || value === undefined) {\n return '';\n }\n if (typeof value === 'string') {\n return value;\n }\n if (typeof value === 'number' || typeof value === 'boolean') {\n return value.toString();\n }\n if (typeof value === 'symbol') {\n return value.toString();\n }\n try {\n return JSON.stringify(value);\n } catch {\n // JSON.stringify throws for BigInt and circular references\n return typeof value === 'bigint' ? value.toString() : '';\n }\n};\n\nexport const TrellisTitle = (props: TrellisTitleProps) => {\n const titleText = formatTrellisKey(props.trellisKey);\n return (\n <TrellisTitleDiv\n fontColor={props.fontColor}\n backgroundColor={props.backgroundColor}\n data-test=\"trellis-title\"\n title={titleText}\n >\n <TrellisTitleText>{titleText}</TrellisTitleText>\n </TrellisTitleDiv>\n );\n};\n", "import * as React from 'react';\nimport { useMemo, useRef } from 'react';\nimport { pick } from 'lodash';\nimport styled from 'styled-components';\nimport SizeAwareWrapper from '@splunk/visualizations-shared/SizeAwareWrapper';\nimport { TimeSeriesChart, RangeSelectionProvider } from '@splunk/visualization-canvas';\nimport { toDimension } from '@splunk/visualizations-shared/style';\nimport type { GenericDataSet } from '@splunk/visualization-canvas/types/types';\nimport VizStyleWrapper from './components/VizStyleWrapper';\nimport { ChartingProps } from './Charting';\nimport {\n convert2DArrayToNumbers,\n filterChartDataFromInternalFields,\n getComputedAxisTitles,\n getFieldName,\n getFieldNames,\n getLegend,\n getSeriesOverrides,\n getXScaleConfig,\n getYScaleConfig,\n getY2ScaleConfig,\n ellipsisAxisTitle,\n getAnnotationsForCanvas,\n triangleEventAnnotationRenderer,\n parseAxisValue,\n parseXAxisLineVisibility,\n findRangeIndices,\n shouldEnableSearchZoom,\n} from './chartingUtils';\nimport { useTrellisEnabled } from './hooks/useTrellisEnabled';\nimport { TrellisTitle, TRELLIS_TITLE_HEIGHT } from './components/TrellisTitle';\n\nconst TimeSeriesChartContainer = styled.div<{\n width: number | string;\n height: number | string;\n}>`\n overflow: hidden;\n ${props => toDimension(pick(props, ['width', 'height']))};\n\n canvas {\n position: absolute !important; // This is needed for canvas element export pdf/png to work correctly\n }\n`;\n\n/**\n * Adds trellis information to event payload\n * @param payload - The event payload object to modify\n * @param trellisKey - The current trellis key value (e.g., \"200\", \"404\")\n * @param trellisSplitBy - The field name being split by (e.g., \"status\")\n */\nexport const appendTrellisToPayload = (\n payload: Record<string, unknown>,\n trellisKey?: string,\n trellisSplitBy?: string\n): Record<string, unknown> => {\n const result = { ...payload };\n if (trellisSplitBy) {\n result['trellis.name'] = trellisSplitBy;\n }\n if (trellisKey) {\n result['trellis.value'] = trellisKey;\n }\n return result;\n};\n\n/**\n * Checks if the mouseover payload has changed compared to the previous payload\n * @param currentPayload - The current event payload\n * @param previousPayload - The previous event payload\n * @returns true if the payload has changed, false otherwise\n */\nexport const hasMouseoverPayloadChanged = (\n currentPayload: Record<string, unknown>,\n previousPayload: Record<string, unknown> | null\n): boolean => {\n if (!previousPayload) {\n return true;\n }\n\n // Check if data point index changed - this is the primary indicator of hovering a different point\n if (currentPayload.index !== previousPayload.index) {\n return true;\n }\n\n // Check if seriesIndex changed\n if (currentPayload.seriesIndex !== previousPayload.seriesIndex) {\n return true;\n }\n\n // Check if trellis fields changed (for trellis mode)\n if (currentPayload['trellis.name'] !== previousPayload['trellis.name']) {\n return true;\n }\n if (currentPayload['trellis.value'] !== previousPayload['trellis.value']) {\n return true;\n }\n\n return false;\n};\n\nexport const handleClick = (chartEvent, onClick, trellisKey?: string, trellisSplitBy?: string) => {\n const payload = {\n ...pick(chartEvent, 'value', 'seriesKey'),\n name: chartEvent.seriesKey,\n };\n delete payload.seriesKey;\n\n // Add row context fields in the format: row.${fieldName}.value\n if (chartEvent.rowContext) {\n Object.assign(\n payload,\n Object.keys(chartEvent.rowContext).reduce((acc, fieldName) => {\n acc[`row.${fieldName}.value`] = chartEvent.rowContext[fieldName];\n return acc;\n }, {})\n );\n }\n\n const updatedPayload = appendTrellisToPayload(payload, trellisKey, trellisSplitBy);\n\n if (onClick) {\n onClick({\n type: 'point.click',\n originalEvent: chartEvent,\n payload: updatedPayload,\n });\n }\n};\n\nexport const handleLegendClick = (chartEvent, onClick, trellisKey?: string, trellisSplitBy?: string) => {\n const payload = {\n name: chartEvent,\n };\n\n const updatedPayload = appendTrellisToPayload(payload, trellisKey, trellisSplitBy);\n\n if (onClick) {\n onClick({\n type: 'legend.click',\n originalEvent: chartEvent,\n payload: updatedPayload,\n });\n }\n};\n\nexport const handleRangeSelection = (\n rangeEvent,\n onSelect,\n chartData,\n trellisKey?: string,\n trellisSplitBy?: string\n) => {\n // Handle undefined range (clearing selection)\n if (!rangeEvent) {\n return;\n }\n\n // Find the indices in the data array that correspond to the start and end timestamps\n const xData = chartData?.columns?.[0] || [];\n const { startXIndex, endXIndex } = findRangeIndices(xData, rangeEvent.start, rangeEvent.end);\n\n const payload = {\n startXIndex,\n startXValue: rangeEvent.start,\n endXIndex,\n endXValue: rangeEvent.end,\n };\n\n const updatedPayload = appendTrellisToPayload(payload, trellisKey, trellisSplitBy);\n\n if (onSelect) {\n onSelect({\n type: 'range.selectBeforeZoom',\n originalEvent: rangeEvent,\n payload: updatedPayload,\n });\n }\n};\n\nexport const handleRangeZoom = (\n rangeEvent,\n onSelect,\n chartData,\n trellisKey?: string,\n trellisSplitBy?: string\n) => {\n // Find the indices in the data array that correspond to the start and end timestamps\n const xData = chartData?.columns?.[0] || [];\n const { startXIndex, endXIndex } = findRangeIndices(xData, rangeEvent.start, rangeEvent.end);\n\n const payload = {\n startXIndex,\n startXValue: rangeEvent.start,\n endXIndex,\n endXValue: rangeEvent.end,\n };\n\n const updatedPayload = appendTrellisToPayload(payload, trellisKey, trellisSplitBy);\n\n if (onSelect) {\n onSelect({\n type: 'range.select',\n originalEvent: rangeEvent,\n payload: updatedPayload,\n });\n }\n};\n\nexport const handleCrosshairChange = (\n chartEvent,\n onPointMouseOver,\n onPointMouseOut,\n trellisKey?: string,\n trellisSplitBy?: string,\n lastPayload = null,\n lastOriginalEvent = null\n) => {\n // Handle mouseout when chartEvent is undefined\n if (!chartEvent) {\n if (onPointMouseOut && lastPayload) {\n onPointMouseOut({\n type: 'point.mouseout',\n originalEvent: lastOriginalEvent,\n payload: lastPayload,\n });\n }\n return { payload: null, originalEvent: null };\n }\n\n // Handle mouseover\n const payload = {\n ...pick(chartEvent, 'value', 'seriesKey', 'time', 'index', 'seriesIndex'),\n name: chartEvent.seriesKey,\n };\n delete payload.seriesKey;\n\n // Add row context fields in the format: row.${fieldName}.value\n if (chartEvent.rowContext) {\n Object.assign(\n payload,\n Object.keys(chartEvent.rowContext).reduce((acc, fieldName) => {\n acc[`row.${fieldName}.value`] = chartEvent.rowContext[fieldName];\n return acc;\n }, {})\n );\n }\n\n const updatedPayload = appendTrellisToPayload(payload, trellisKey, trellisSplitBy);\n\n if (onPointMouseOver) {\n onPointMouseOver({\n type: 'point.mouseover',\n originalEvent: chartEvent,\n payload: updatedPayload,\n });\n }\n\n // Return payload and originalEvent for caller to store\n return { payload: updatedPayload, originalEvent: chartEvent };\n};\n\n/**\n * Helper function to parse array options that may be stringified JSON or already arrays\n */\nexport const parseArrayOption = (\n value: string[] | string | undefined | null\n): string[] | undefined | null => {\n if (Array.isArray(value)) {\n return value;\n }\n if (value) {\n return JSON.parse(value);\n }\n return undefined;\n};\n\nconst getAreaOpacityForCanvas = (areaOpacity: number | undefined | null): number | undefined | null =>\n // Preserve legacy visualizations behavior where area opacity is squared to match charting output.\n areaOpacity !== undefined && areaOpacity !== null ? areaOpacity ** 2 : areaOpacity;\n\nconst parseTickIntervalOption = (\n simpleXMLValue?: string | number,\n canvasValue?: number\n): number | undefined => {\n if (simpleXMLValue) return Number(simpleXMLValue);\n if (canvasValue) return Number(canvasValue);\n return undefined;\n};\n\nconst getYAxisTitles = ({\n y2Enabled,\n yFields,\n y2Fields,\n overlayFields,\n yAxisTitleText,\n yAxisTitleVisibility,\n y2AxisTitleText,\n y2AxisTitleVisibility,\n containerHeight,\n}: {\n y2Enabled: boolean;\n yFields: string[];\n y2Fields: string[];\n overlayFields: string[];\n yAxisTitleText?: string;\n yAxisTitleVisibility?: 'show' | 'collapsed';\n y2AxisTitleText?: string;\n y2AxisTitleVisibility?: 'show' | 'collapsed';\n containerHeight: number;\n}) => {\n const yFieldsForTitle = y2Enabled ? yFields.filter(field => !y2Fields.includes(field)) : yFields;\n const fieldsForY2Axis = y2Fields.length > 0 ? y2Fields : overlayFields;\n\n const yAxisTitle = ellipsisAxisTitle(\n getComputedAxisTitles(yAxisTitleText, yFieldsForTitle, yAxisTitleVisibility),\n containerHeight\n );\n const y2AxisTitle = ellipsisAxisTitle(\n getComputedAxisTitles(y2AxisTitleText, fieldsForY2Axis, y2AxisTitleVisibility),\n containerHeight\n );\n\n return { yAxisTitle, y2AxisTitle };\n};\n\nconst TimeSeriesChartWrapper = (props: ChartingProps) => {\n const {\n width,\n height,\n chartData,\n options,\n userLocale,\n annotationX,\n annotationLabel,\n annotationColor,\n legendDisplay,\n markerDisplay,\n onClick,\n onPointMouseOver,\n onPointMouseOut,\n onSelect,\n splitByLayout,\n trellisKey,\n trellisSplitBy,\n backgroundColor,\n defaultFontColor,\n additionalTooltipValues,\n // Extract axis line visibility options from props\n xAxisLineVisibility,\n yAxisLineVisibility,\n y2AxisLineVisibility,\n // Extract showYAxisWithZero directly from props for accelerated render mode\n showYAxisWithZero: showYAxisWithZeroFromProps,\n showY2AxisWithZero: showY2AxisWithZeroFromProps,\n ...otherOptions\n } = props as ChartingProps & {\n showYAxisWithZero?: boolean;\n showY2AxisWithZero?: boolean;\n xAxisLineVisibility?: string;\n yAxisLineVisibility?: string;\n y2AxisLineVisibility?: string;\n };\n const { eventHandlers, xField: xFieldFromProps } = otherOptions;\n const trellisEnabled = useTrellisEnabled(splitByLayout);\n const {\n backgroundColor: bgColorFromOptions,\n seriesColors: seriesColorsStr,\n fieldColors,\n legendLabels: legendLabelsStr,\n legendMode,\n legendTruncation,\n 'axisTitleX.text': xAxisTitleText,\n 'axisTitleY.text': yAxisTitleText,\n 'axisTitleY2.text': y2AxisTitleText,\n 'axisTitleX.visibility': xAxisTitleVisibility,\n 'axisTitleY.visibility': yAxisTitleVisibility,\n 'axisTitleY2.visibility': y2AxisTitleVisibility,\n 'axisLabelsX.majorLabelVisibility': xAxisLabelVisibility,\n 'axisLabelsX.majorLabelStyle.rotation': xAxisLabelRotation,\n 'axisLabelsX.maxLabelParts': xAxisMaxLabelParts,\n 'axisLabelsY.majorLabelVisibility': yAxisLabelVisibility,\n 'axisLabelsY.majorUnit': yAxisMajorUnitFromSimpleXML,\n 'axisLabelsY2.majorLabelVisibility': y2AxisLabelVisibility,\n 'axisLabelsY2.majorUnit': y2AxisMajorUnitFromSimpleXML,\n 'axisY.abbreviation': yAxisAbbreviation,\n 'axisY.scale': yAxisScale,\n 'axisY2.abbreviation': y2AxisAbbreviation,\n 'axisY2.fields': y2FieldsStr,\n 'axisY2.scale': y2AxisScale,\n 'axisY2.enabled': y2Enabled,\n 'axisLabelsY2.integerUnits': y2IntegerUnits,\n 'chart.overlayFields': overlayFieldsStr,\n 'chart.nullValueMode': nullValueMode,\n 'chart.showDataLabels': showDataLabels,\n 'chart.showLines': showLines,\n 'chart.stackMode': stackMode,\n lineWidth,\n lineDashStyle,\n fieldDashStyles: lineDashStylesByFieldStr,\n stepPosition,\n fieldStepPositions: stepPositionsByFieldStr,\n yAxisMin: yAxisMinRaw,\n yAxisMax: yAxisMaxRaw,\n y2AxisMin: y2AxisMinRaw,\n y2AxisMax: y2AxisMaxRaw,\n showXMajorGridLines,\n showYMajorGridLines,\n showY2MajorGridLines,\n showYMinorGridLines,\n showY2MinorGridLines,\n showLineSmoothing,\n xAxisMajorTickVisibility,\n xAxisMajorTickSize,\n yAxisMajorTickVisibility,\n y2AxisMajorTickVisibility,\n yAxisMajorTickSize,\n y2AxisMajorTickSize,\n yAxisMajorTickInterval,\n y2AxisMajorTickInterval,\n yAxisMinorTickVisibility,\n y2AxisMinorTickVisibility,\n yAxisMinorTickSize,\n y2AxisMinorTickSize,\n showYAxisWithZero: showYAxisWithZeroFromOptions,\n showY2AxisWithZero: showY2AxisWithZeroFromOptions,\n // area only props\n areaFillOpacity: areaOpacity,\n chart: chartType,\n } = options;\n\n // Map showDataLabels back to dataValuesDisplay format for canvas mode\n const dataValuesDisplay = showDataLabels === 'none' ? 'off' : showDataLabels;\n\n // Get showYAxisWithZero from top-level props first (accelerated render mode),\n // then fall back to options object (non-accelerated render mode)\n const showYAxisWithZero = showYAxisWithZeroFromProps ?? showYAxisWithZeroFromOptions;\n const showY2AxisWithZero = showY2AxisWithZeroFromProps ?? showY2AxisWithZeroFromOptions;\n\n // Convert visibility to boolean for canvas renderer\n // X-axis ticks default to true (shown) when 'auto' or 'show', false when 'hide'\n const showXMajorTicks = xAxisMajorTickVisibility !== 'hide';\n const showYMajorTicks = yAxisMajorTickVisibility === 'show';\n const showY2MajorTicks = y2AxisMajorTickVisibility === 'show';\n const showYMinorTicks = yAxisMinorTickVisibility === 'show';\n const showY2MinorTicks = y2AxisMinorTickVisibility === 'show';\n // X-axis line defaults to true (shown) for backwards compatibility\n const showXAxisLine = parseXAxisLineVisibility(xAxisLineVisibility);\n const showYAxisLine = yAxisLineVisibility === 'show';\n const showY2AxisLine = y2AxisLineVisibility === 'show';\n\n // Parse axis values - convert strings to numbers\n const yAxisMin = parseAxisValue(yAxisMinRaw);\n const yAxisMax = parseAxisValue(yAxisMaxRaw);\n const y2AxisMin = parseAxisValue(y2AxisMinRaw);\n const y2AxisMax = parseAxisValue(y2AxisMaxRaw);\n\n // Parse tick interval and size values - convert strings to numbers\n // Priority: SimpleXML props (from transformed options) > canvas-specific props\n const yAxisMajorTickIntervalNum = parseTickIntervalOption(\n yAxisMajorUnitFromSimpleXML,\n yAxisMajorTickInterval\n );\n const y2AxisMajorTickIntervalNum = parseTickIntervalOption(\n y2AxisMajorUnitFromSimpleXML,\n y2AxisMajorTickInterval\n );\n const xAxisMajorTickSizeNum = xAxisMajorTickSize == null ? undefined : Number(xAxisMajorTickSize);\n const yAxisMajorTickSizeNum = yAxisMajorTickSize == null ? undefined : Number(yAxisMajorTickSize);\n const y2AxisMajorTickSizeNum = y2AxisMajorTickSize == null ? undefined : Number(y2AxisMajorTickSize);\n const yAxisMinorTickSizeNum = yAxisMinorTickSize == null ? undefined : Number(yAxisMinorTickSize);\n const y2AxisMinorTickSizeNum = y2AxisMinorTickSize == null ? undefined : Number(y2AxisMinorTickSize);\n // Preserve legacy visualizations behavior where area opacity is squared to match charting output.\n const areaOpacityForCanvas = getAreaOpacityForCanvas(areaOpacity);\n const seriesColors = seriesColorsStr ? JSON.parse(seriesColorsStr) : undefined;\n const seriesColorsByField = fieldColors ? JSON.parse(fieldColors) : undefined;\n const lineDashStylesByField = lineDashStylesByFieldStr ? JSON.parse(lineDashStylesByFieldStr) : undefined;\n const stepPositionsByField = stepPositionsByFieldStr ? JSON.parse(stepPositionsByFieldStr) : undefined;\n const legendLabels = parseArrayOption(legendLabelsStr);\n const bgColor = backgroundColor || bgColorFromOptions;\n const [containerWidth, setContainerWidth] = React.useState(Number(props.width));\n const [containerHeight, setContainerHeight] = React.useState(Number(props.height));\n const cachedHandleResize = React.useCallback((w, h) => {\n setContainerWidth(w);\n setContainerHeight(h);\n }, []);\n const filteredChartData = filterChartDataFromInternalFields({\n fields: chartData.fields,\n columns: chartData.seriesList,\n });\n\n const xField = getFieldName(filteredChartData.fields[0]);\n const yFields = getFieldNames(\n filteredChartData.fields.length > 1 ? filteredChartData.fields.slice(1) : []\n );\n const y2Fields = useMemo(\n () => (y2FieldsStr ? y2FieldsStr.split(',').map(f => f.trim()) : []),\n [y2FieldsStr]\n );\n const overlayFields = useMemo(\n () => (overlayFieldsStr ? overlayFieldsStr.split(',').map(f => f.trim()) : []),\n [overlayFieldsStr]\n );\n\n let xAxisTitle = getComputedAxisTitles(xAxisTitleText, [xField], xAxisTitleVisibility);\n xAxisTitle = ellipsisAxisTitle(xAxisTitle, containerWidth);\n const { yAxisTitle, y2AxisTitle } = getYAxisTitles({\n y2Enabled,\n yFields,\n y2Fields,\n overlayFields,\n yAxisTitleText,\n yAxisTitleVisibility,\n y2AxisTitleText,\n y2AxisTitleVisibility,\n containerHeight,\n });\n\n const xScaleConfig = useMemo(\n () => getXScaleConfig(xAxisTitle, xAxisLabelVisibility, xAxisLabelRotation),\n [xAxisTitle, xAxisLabelVisibility, xAxisLabelRotation]\n );\n const isStacked100 = stackMode === 'stacked100';\n const yScaleConfig = useMemo(\n () => {\n const config = getYScaleConfig(\n yAxisTitle,\n yAxisAbbreviation,\n yAxisScale,\n yAxisLabelVisibility,\n yAxisMin,\n yAxisMax\n );\n // For stacked100, override tick formatter to show percentage labels (0-100%)\n // uPlot stores stacked100 values as 0-1 fractions after processPercentStacking\n if (isStacked100) {\n config.y.tickFmt = (v): string => `${Math.round(v * 100)}%`;\n config.y.range = () => [0, 1];\n }\n return config;\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [yAxisTitle, yAxisAbbreviation, yAxisScale, yAxisLabelVisibility, yAxisMin, yAxisMax, isStacked100]\n );\n const y2ScaleConfig = useMemo(() => {\n if (y2Enabled) {\n return getY2ScaleConfig(\n y2AxisTitle,\n y2AxisAbbreviation,\n y2AxisScale,\n y2IntegerUnits,\n y2AxisLabelVisibility,\n y2AxisMin,\n y2AxisMax\n );\n }\n return {};\n }, [\n y2Enabled,\n y2AxisTitle,\n y2AxisAbbreviation,\n y2AxisScale,\n y2IntegerUnits,\n y2AxisLabelVisibility,\n y2AxisMin,\n y2AxisMax,\n ]);\n const uplotContainerElement = useRef(null);\n\n const seriesDataFormatted = [\n filteredChartData.columns[0],\n ...convert2DArrayToNumbers(filteredChartData.columns.slice(1)),\n ];\n chartData.fields = filteredChartData.fields;\n chartData.columns = seriesDataFormatted;\n\n // Map SimpleXML stackMode value ('default' | 'stacked' | 'stacked100') to getSeriesOverrides param\n const normalizedStackMode = stackMode === 'stacked' || stackMode === 'stacked100' ? stackMode : 'auto';\n\n // Memoize seriesOverrides to prevent unnecessary recreations\n const seriesOverrides = useMemo(\n () =>\n getSeriesOverrides({\n yfields: yFields,\n y2fields: y2Fields,\n lineWidth,\n overlayFields,\n y2Enabled,\n nullValueMode,\n markerDisplay,\n lineDashStyle,\n lineDashStylesByField,\n stepPosition,\n stepPositionsByField,\n type: chartType,\n stackMode: normalizedStackMode,\n showLines,\n }),\n [\n yFields,\n y2Fields,\n lineWidth,\n overlayFields,\n y2Enabled,\n nullValueMode,\n markerDisplay,\n lineDashStyle,\n lineDashStylesByField,\n stepPosition,\n stepPositionsByField,\n chartType,\n normalizedStackMode,\n showLines,\n ]\n );\n\n // Memoize annotations to prevent unnecessary recreations\n const chartingEventAnnotations = useMemo(\n () =>\n getAnnotationsForCanvas({\n annotationX,\n annotationColor,\n annotationLabel,\n }),\n [annotationX, annotationColor, annotationLabel]\n );\n\n // Memoize scaleConfig to prevent unnecessary recreations\n const scaleConfig = useMemo(\n () => ({ ...xScaleConfig, ...yScaleConfig, ...y2ScaleConfig }),\n [xScaleConfig, yScaleConfig, y2ScaleConfig]\n );\n\n // Memoize legend configuration\n // In seriesCompare mode, force the legend to the right side so that the legend's\n // fixed width (needed to prevent jitter when hover values appear/disappear) doesn't\n // affect layouts that would otherwise place it on the left.\n const isSeriesCompare = legendMode === 'seriesCompare';\n const legend = useMemo(\n () =>\n getLegend({\n legendDisplay: isSeriesCompare && legendDisplay !== 'off' ? 'right' : legendDisplay,\n isSeriesCompare,\n legendTruncation,\n }),\n [legendDisplay, isSeriesCompare, legendTruncation]\n );\n\n // Memoize click handlers to avoid recreating them on every render\n const handleChartClick = React.useCallback(\n event => {\n // Only invoke if onClick is defined to avoid unnecessary work\n if (onClick) {\n handleClick(event, onClick, trellisKey, trellisSplitBy);\n }\n },\n [onClick, trellisKey, trellisSplitBy]\n );\n\n const handleChartLegendClick = React.useCallback(\n event => {\n // Only invoke if onClick is defined to avoid unnecessary work\n if (onClick) {\n handleLegendClick(event, onClick, trellisKey, trellisSplitBy);\n }\n },\n [onClick, trellisKey, trellisSplitBy]\n );\n\n const handleChartRangeSelection = React.useCallback(\n range => {\n // Only invoke if onSelect is defined to avoid unnecessary work\n if (onSelect) {\n handleRangeSelection(range, onSelect, chartData, trellisKey, trellisSplitBy);\n }\n // Always allow range selection UI to appear, even if onSelect is undefined\n },\n [onSelect, chartData, trellisKey, trellisSplitBy]\n );\n\n const handleChartRangeZoom = React.useCallback(\n range => {\n // Only invoke if onSelect is defined to avoid unnecessary work\n if (onSelect) {\n handleRangeZoom(range, onSelect, chartData, trellisKey, trellisSplitBy);\n }\n },\n [onSelect, chartData, trellisKey, trellisSplitBy]\n );\n\n // Determine if search zoom should be enabled based on eventHandlers and xField\n // Use xFieldFromProps if available, otherwise fall back to computed xField from chartData\n const xFieldToUse = xFieldFromProps || xField;\n const enableSearchZoom = React.useMemo(\n () => shouldEnableSearchZoom(eventHandlers, xFieldToUse),\n [eventHandlers, xFieldToUse]\n );\n\n // Store the last payload and originalEvent to return on mouseout\n const lastPayloadRef = React.useRef<Record<string, any> | null>(null);\n const lastOriginalEventRef = React.useRef<any>(null);\n // Store the previous mouseover payload to check for changes\n const previousMouseoverPayloadRef = React.useRef<Record<string, unknown> | null>(null);\n // Store additionalTooltipValues in a ref to avoid chart remounts when it changes\n // The chart reads from this ref, so changes update the tooltip without remounting\n const additionalTooltipValuesRef = React.useRef(additionalTooltipValues);\n React.useEffect(() => {\n additionalTooltipValuesRef.current = additionalTooltipValues;\n }, [additionalTooltipValues]);\n\n const handleCrosshairMouseout = React.useCallback(() => {\n if (onPointMouseOut && lastPayloadRef.current) {\n onPointMouseOut({\n type: 'point.mouseout',\n originalEvent: lastOriginalEventRef.current,\n payload: lastPayloadRef.current,\n });\n }\n previousMouseoverPayloadRef.current = null;\n }, [onPointMouseOut]);\n\n const handleChartCrosshairChange = React.useCallback(\n event => {\n // Only invoke if onPointMouseOver or onPointMouseOut is defined to avoid unnecessary work\n if (!onPointMouseOver && !onPointMouseOut) {\n return;\n }\n\n // Handle mouseout when event is undefined\n if (!event) {\n handleCrosshairMouseout();\n return;\n }\n\n // Handle mouseover\n const payload = {\n ...pick(event, 'value', 'seriesKey', 'time', 'index', 'seriesIndex'),\n name: event.seriesKey,\n };\n delete payload.seriesKey;\n\n // Add row context fields in the format: row.${fieldName}.value\n if (event.rowContext) {\n Object.assign(\n payload,\n Object.keys(event.rowContext).reduce((acc, fieldName) => {\n acc[`row.${fieldName}.value`] = event.rowContext[fieldName];\n return acc;\n }, {})\n );\n }\n\n const updatedPayload = appendTrellisToPayload(payload, trellisKey, trellisSplitBy);\n\n // Check if the payload has actually changed to avoid emitting duplicate events\n if (!hasMouseoverPayloadChanged(updatedPayload, previousMouseoverPayloadRef.current)) {\n return;\n }\n\n // Store payload and originalEvent for mouseout\n lastPayloadRef.current = updatedPayload;\n lastOriginalEventRef.current = event;\n // Store current payload for next comparison\n previousMouseoverPayloadRef.current = { ...updatedPayload };\n\n if (onPointMouseOver) {\n onPointMouseOver({\n type: 'point.mouseover',\n originalEvent: event,\n payload: updatedPayload,\n });\n }\n },\n [onPointMouseOver, onPointMouseOut, trellisKey, trellisSplitBy, handleCrosshairMouseout]\n );\n\n // Create a key to reset RangeSelectionProvider when data changes\n const dataKey = `${chartData.columns[0]?.[0]}-${chartData.columns[0]?.[chartData.columns[0].length - 1]}-${chartData.columns[0]?.length}`;\n\n const memoizedChart = useMemo(() => {\n // Always pass zoom handler when onSelect exists, serverSideZoom controls behavior\n const computedOnRangeZoom = onSelect ? handleChartRangeZoom : undefined;\n\n return (\n <RangeSelectionProvider key={dataKey}>\n <TimeSeriesChart\n data={chartData as GenericDataSet}\n width={containerWidth}\n height={containerHeight}\n seriesColors={seriesColors}\n seriesColorsByField={seriesColorsByField}\n seriesConfig={seriesOverrides}\n legend={legend}\n legendLabels={legendLabels}\n legendTruncation={legendTruncation}\n isSeriesCompare={legendMode === 'seriesCompare'}\n maxSeriesFocus={legendMode === 'seriesCompare' ? 0 : undefined}\n scaleConfig={scaleConfig}\n timestampFormat=\"expanded\"\n onCrosshairClick={onClick ? handleChartClick : undefined}\n onCrosshairChange={\n onPointMouseOver || onPointMouseOut ? handleChartCrosshairChange : undefined\n }\n onSeriesClick={onClick ? handleChartLegendClick : undefined}\n onRangeSelection={handleChartRangeSelection}\n onRangeZoom={computedOnRangeZoom}\n serverSideZoom={enableSearchZoom}\n userLocale={userLocale}\n events={chartingEventAnnotations}\n eventsConfig={{ renderer: triangleEventAnnotationRenderer }}\n additionalTooltipValuesRef={additionalTooltipValuesRef}\n showXMajorGridLines={showXMajorGridLines}\n showYMajorGridLines={showYMajorGridLines}\n showY2MajorGridLines={showY2MajorGridLines}\n showYMinorGridLines={showYMinorGridLines}\n showY2MinorGridLines={showY2MinorGridLines}\n showLineSmoothing={showLineSmoothing}\n dataValuesDisplay={dataValuesDisplay}\n showXMajorTicks={showXMajorTicks}\n xAxisMajorTickSize={xAxisMajorTickSizeNum}\n showYMajorTicks={showYMajorTicks}\n showY2MajorTicks={showY2MajorTicks}\n yAxisMajorTickSize={yAxisMajorTickSizeNum}\n y2AxisMajorTickSize={y2AxisMajorTickSizeNum}\n yAxisMajorTickInterval={yAxisMajorTickIntervalNum}\n y2AxisMajorTickInterval={y2AxisMajorTickIntervalNum}\n showYMinorTicks={showYMinorTicks}\n showY2MinorTicks={showY2MinorTicks}\n yAxisMinorTickSize={yAxisMinorTickSizeNum}\n y2AxisMinorTickSize={y2AxisMinorTickSizeNum}\n showYAxisWithZero={showYAxisWithZero}\n showY2AxisWithZero={showY2AxisWithZero}\n showXAxisLine={showXAxisLine}\n showYAxisLine={showYAxisLine}\n showY2AxisLine={showY2AxisLine}\n xAxisMaxLabelParts={xAxisMaxLabelParts}\n areaOpacity={areaOpacityForCanvas}\n />\n </RangeSelectionProvider>\n );\n // Note: additionalTooltipValues passed via ref to avoid chart remount when switching stories.\n // The ref is updated via useEffect, so tooltip gets latest values without remounting chart.\n }, [\n onSelect,\n handleChartRangeZoom,\n dataKey,\n chartData,\n containerWidth,\n containerHeight,\n seriesColors,\n seriesColorsByField,\n seriesOverrides,\n legend,\n legendLabels,\n legendTruncation,\n scaleConfig,\n onClick,\n handleChartClick,\n onPointMouseOver,\n onPointMouseOut,\n handleChartCrosshairChange,\n handleChartLegendClick,\n handleChartRangeSelection,\n enableSearchZoom,\n userLocale,\n chartingEventAnnotations,\n showXMajorGridLines,\n showYMajorGridLines,\n showY2MajorGridLines,\n showYMinorGridLines,\n showY2MinorGridLines,\n showLineSmoothing,\n dataValuesDisplay,\n showXMajorTicks,\n xAxisMajorTickSizeNum,\n showYMajorTicks,\n showY2MajorTicks,\n yAxisMajorTickSizeNum,\n y2AxisMajorTickSizeNum,\n yAxisMajorTickIntervalNum,\n y2AxisMajorTickIntervalNum,\n showYMinorTicks,\n showY2MinorTicks,\n yAxisMinorTickSizeNum,\n y2AxisMinorTickSizeNum,\n showYAxisWithZero,\n showY2AxisWithZero,\n showXAxisLine,\n showYAxisLine,\n showY2AxisLine,\n legendMode,\n xAxisMaxLabelParts,\n areaOpacityForCanvas,\n ]);\n\n const memoizedVisualization = useMemo(() => {\n return <VizStyleWrapper backgroundColor={bgColor}>{memoizedChart}</VizStyleWrapper>;\n }, [bgColor, memoizedChart]);\n\n return (\n <>\n {trellisEnabled && (\n <TrellisTitle\n trellisKey={trellisKey}\n backgroundColor={bgColor}\n fontColor={defaultFontColor}\n />\n )}\n <TimeSeriesChartContainer\n height={trellisEnabled ? Number(height) - TRELLIS_TITLE_HEIGHT : height}\n width={width}\n ref={uplotContainerElement}\n data-test=\"timeseries-chart-wrapper\"\n >\n <SizeAwareWrapper width={width} height={height} onResize={cachedHandleResize} />\n {memoizedVisualization}\n </TimeSeriesChartContainer>\n </>\n );\n};\n\nexport default TimeSeriesChartWrapper;\n", "import * as React from 'react';\nimport { camelCase, has, get, defaultsDeep, noop } from 'lodash';\nimport getSettingsFromThemedProps from '@splunk/themes/getSettingsFromThemedProps';\nimport { Options as Opts } from '@splunk/visualization-encoding/Options';\nimport { withSanitizedProps } from '@splunk/visualizations-shared/SanitizeProps';\nimport type { TimezoneContextInterface } from '@splunk/visualization-context/TimezoneContext';\nimport TimezoneContext from '@splunk/visualization-context/TimezoneContext';\nimport moment from '@splunk/moment';\nimport FeatureFlagContext from '@splunk/visualization-context/FeatureFlagContext';\nimport { withTheme } from 'styled-components';\nimport { deepMergeWithArrayPrimitiveOverrides } from '@splunk/visualizations-shared/hocUtils';\nimport { pickFieldFromJSONSchema } from '@splunk/visualizations-shared/JSONSchemaUtils';\nimport AsyncDynamicOptionsEvaluator, {\n AsyncDynamicOptionsEvaluatorParams,\n} from '@splunk/async-dynamic-options-evaluator';\nimport { createGUID } from '@splunk/ui-utils/id';\nimport type { Frames } from '@splunk/visualization-encoding/EncodingExecutor';\nimport type { OptionsStanza } from '@splunk/visualization-encoding/AST';\nimport SplunkVisualization from './SplunkVisualization';\nimport type { DashboardVizProps, DataSource, VizConfig, VizProps } from './interfaces';\nimport { VizBehavior } from './interfaces/VizBehavior';\nimport { useSortingParams } from './hooks/useSorting';\nimport { usePaginationParams } from './hooks/usePagination';\nimport { useDeepMemo } from './hooks/useDeepMemo';\nimport MissingPropsMessage, { missingKeys } from './components/MissingPropsMessage';\nimport withEditModeCover from './hocs/withEditModeCover';\nimport withPlaceholder from './hocs/withPlaceholder';\nimport { ChartingProps } from './Charting';\nimport useDownsampleDataSources from './hooks/useDownsampleDataSources';\nimport { isDownsamplingEnabledForViz } from './utils/dataUtils';\nimport { getFeatureFlag } from '../common/utils/featureFlagUtils';\nimport { turnOffLegendDisplayWhenTrellisIsOn } from '../common/utils/trellisUtils';\nimport TimeSeriesChartWrapper from './TimeSeriesChartWrapper';\nimport { isTimeSeriesCanvasRenderSupported } from './chartingUtils';\n\n// Create the sanitized version once, outside the component to prevent remounting\nconst SanitizedTimeSeriesChartWrapper = withSanitizedProps(TimeSeriesChartWrapper);\n\ntype FeatureFlagContextValue = Record<string, boolean | undefined> | null;\n\ntype HOC = React.ComponentType<DashboardVizProps> & {\n config: VizConfig;\n};\nexport interface DashboardVizOpts {\n ReactViz: React.ComponentType<ChartingProps | VizProps>; // we will wrap this in DashboardViz (see const DashboardViz = ...)\n vizConfig: VizConfig;\n computeVizProps?: (props) => any;\n computeVizPropsBeforeEval?: (props) => any;\n computeDataFrames?: (args: {\n dataSources: { [key: string]: DataSource };\n options: Record<string, unknown>;\n }) => Partial<Frames>;\n disableEditModeCover?: boolean;\n useIconPlaceholder?: (\n dataSources: { [name: string]: DataSource },\n loading: boolean,\n options: Record<string, unknown>\n ) => boolean;\n}\n\nconst buildEventCallbackProps = (\n supportedEvents,\n evaluatedOptionsToUse,\n onEventTrigger\n): Record<string, unknown> => {\n const result = {};\n Object.keys(supportedEvents).forEach((eventName): void => {\n const { parentKeys, payloadKeys } = supportedEvents[eventName];\n const eventCallbackPropName = camelCase(`on.${eventName}`);\n\n let payload = {};\n if (Array.isArray(payloadKeys) && payloadKeys.length) {\n payloadKeys.forEach(p => {\n payload[p] = evaluatedOptionsToUse[p];\n });\n }\n\n result[eventCallbackPropName] = (ev): Record<string, unknown> => {\n if (ev?.payload) {\n payload = { ...ev.payload };\n }\n return onEventTrigger({\n originalEvent: ev,\n payload,\n type: eventName,\n });\n };\n\n if (parentKeys) {\n for (let i = parentKeys.length - 1; i >= 0; i -= 1) {\n const newObject = {};\n newObject[parentKeys[i]] = result[eventCallbackPropName];\n result[eventCallbackPropName] = newObject;\n }\n }\n });\n return result;\n};\n\n// Build the event callback props for a viz, splitting declared events by source.\n// 'default' events (e.g. RichText link.open) act as default handlers: injected\n// whenever the viz supports events, ungated by hasEventHandlers and in edit mode.\n// 'user' events (the default) only fire in view mode once handlers are bound.\nconst buildAllEventCallbackProps = (\n events: Record<string, { source?: 'default' | 'user' }>,\n evaluatedOptionsToUse,\n onEventTrigger,\n { supportsEvents, hasEventHandlers, mode }\n): Record<string, unknown> => {\n if (!supportsEvents) return {};\n const defaultEvents = {};\n const userEvents = {};\n Object.entries(events || {}).forEach(([eventKey, eventConfig]) => {\n (eventConfig.source === 'default' ? defaultEvents : userEvents)[eventKey] = eventConfig;\n });\n const userProps =\n hasEventHandlers && mode === 'view'\n ? buildEventCallbackProps(userEvents, evaluatedOptionsToUse, onEventTrigger)\n : {};\n return {\n ...userProps,\n ...buildEventCallbackProps(defaultEvents, evaluatedOptionsToUse, onEventTrigger),\n };\n};\n\n/**\n * @splunk/moment currently does not allow us to customize the timezone on a per\n * visualization basis. This ensures that if a timezone was provided via\n * TimezoneContext, @splunk/moment time formatting will use it.\n */\nconst applyContextTimezone = (localeContext: TimezoneContextInterface): void => {\n if (localeContext.serializedTimezone && !moment.getDefaultSplunkTimezone()) {\n moment.setDefaultSplunkTimezone(localeContext.serializedTimezone);\n }\n};\n\ninterface AsyncOptionsEvalArgs {\n visualizationID: string;\n props: DashboardVizProps;\n optionsToEvaluate: OptionsStanza;\n downsampledDataSources: Record<string, DataSource>;\n vizConfig: VizConfig;\n bypassCloneDeepOptionScope: boolean;\n lazyLoadingDataFrame: boolean;\n}\n\n/**\n * Builds the inputs for async (web worker) DSL evaluation without starting work during render.\n */\nconst getAsyncOptionsEvaluationParams = ({\n visualizationID,\n props,\n optionsToEvaluate,\n downsampledDataSources,\n vizConfig,\n bypassCloneDeepOptionScope,\n lazyLoadingDataFrame,\n}: AsyncOptionsEvalArgs): AsyncDynamicOptionsEvaluatorParams => {\n return {\n visualizationID,\n props,\n options: { ...optionsToEvaluate },\n dataSources: downsampledDataSources,\n theme: vizConfig.themes,\n bypassCloneDeepOptionScope,\n lazyLoadingDataFrame,\n };\n};\n\ninterface SyncOptionsEvalArgs {\n optionsToEvaluate: OptionsStanza;\n downsampledDataSources: Record<string, DataSource>;\n dataSourcesInState: Record<string, DataSource>;\n dataFramesInState: Frames | undefined;\n setDataSourcesInState: (dataSources: Record<string, DataSource>) => void;\n setDataFramesInState: (frames: Frames | undefined) => void;\n computeDataFrames?: DashboardVizOpts['computeDataFrames'];\n featureFlagContext: FeatureFlagContextValue;\n themeFunc: (themeVar: string) => unknown;\n}\n\n/**\n * Synchronously builds data frames (memoizing them in component state) and evaluates DSL\n * options against them. Extracted out of the DashboardViz render body to keep its cognitive\n * complexity down.\n */\nconst evaluateOptionsSync = ({\n optionsToEvaluate,\n downsampledDataSources,\n dataSourcesInState,\n dataFramesInState,\n setDataSourcesInState,\n setDataFramesInState,\n computeDataFrames,\n featureFlagContext,\n themeFunc,\n}: SyncOptionsEvalArgs): Record<string, unknown> => {\n let dataFrames: Frames | undefined = dataFramesInState;\n if (downsampledDataSources !== dataSourcesInState) {\n setDataSourcesInState(downsampledDataSources);\n dataFrames = Opts.dataFrameFromDataSource(\n downsampledDataSources,\n getFeatureFlag(featureFlagContext, 'visualizations_lazyLoadingDataFrame')\n );\n setDataFramesInState(dataFrames);\n }\n // Merge derived frames when provided\n let mergedFrames = dataFrames;\n if (computeDataFrames && dataFrames) {\n const derivedFrames = computeDataFrames({\n dataSources: downsampledDataSources,\n options: optionsToEvaluate.options as Record<string, unknown>,\n });\n mergedFrames = { ...dataFrames, ...derivedFrames };\n }\n return Opts.evaluate(\n optionsToEvaluate,\n downsampledDataSources,\n themeFunc,\n mergedFrames,\n getFeatureFlag(featureFlagContext, 'visualizations_bypassCloneDeepOptionScope')\n );\n};\n\n/**\n * hoc that wraps a pure react visualization in a Dashboard visualization\n * @param {DashboardVizOpts} opts\n * @returns {HOC}\n */\nconst withDashboardViz = (opts: DashboardVizOpts): HOC => {\n const {\n ReactViz,\n vizConfig,\n computeVizProps = () => {},\n computeVizPropsBeforeEval = () => {},\n computeDataFrames,\n disableEditModeCover,\n useIconPlaceholder,\n } = opts;\n\n // sanitizing props before sending them to reactviz.\n const SanitizedReactViz = withSanitizedProps(ReactViz); // Default assigned to ReactViz\n const defaultOptions = pickFieldFromJSONSchema(vizConfig.optionsSchema, 'default');\n\n const DashboardViz = (props: DashboardVizProps): React.ReactElement<DashboardVizProps> => {\n const {\n mode = 'view',\n hasEventHandlers,\n dataSources, // type of { [key: string]: DataSource }\n options = {},\n context = {},\n width,\n height,\n onComputedProps = noop,\n onEventTrigger = SplunkVisualization.defaults.onEventTrigger,\n theme,\n onRequestParamsChange = noop,\n } = props;\n const localeContext = React.useContext<TimezoneContextInterface>(TimezoneContext);\n applyContextTimezone(localeContext);\n\n const themeFunc = themeVar => vizConfig.themes[themeVar]?.(props);\n const {\n family: currentThemeFamily,\n colorScheme: currentThemeColorScheme,\n density: currentThemeDensity,\n } = getSettingsFromThemedProps({ theme });\n let evaluatedOptions: Record<string, unknown> = {}; // evaluatedOptions need to be initialized as an empty object\n const [evaluatedOptionsAsync, setEvaluatedOptionsAsync] = React.useState({}); // evaluatedOptions need to be initialized as an empty object\n const featureFlagContext = React.useContext<FeatureFlagContextValue>(FeatureFlagContext);\n\n const [visualizationID] = React.useState(`${vizConfig.name} - ${createGUID()}`);\n\n const [dataSourcesInState, setDataSourcesInState] = React.useState({});\n const [dataFramesInState, setDataFramesInState] = React.useState<Frames | undefined>();\n\n const [useAsyncEvaluatedOptions, setUseAsyncEvaluatedOptions] = React.useState(\n Boolean(getFeatureFlag(featureFlagContext, 'visualizations_useWebWorkersForDSL'))\n );\n const isDownsamplingEnabledByFeatureFlag = Boolean(\n featureFlagContext?.visualizations_enableDownsampling\n );\n const isTrellisFeatureFlagOn = Boolean(featureFlagContext?.visualizations_enableTrellis);\n const isTrellisOn =\n isTrellisFeatureFlagOn &&\n vizConfig?.supports?.includes(VizBehavior.TRELLIS) &&\n options?.splitByLayout === VizBehavior.TRELLIS;\n\n const isAcceleratedRenderFeatureFlagOn = Boolean(\n featureFlagContext?.visualizations_enableAcceleratedRender\n );\n const isAcceleratedRenderOn =\n isAcceleratedRenderFeatureFlagOn &&\n isTimeSeriesCanvasRenderSupported(vizConfig.key) &&\n options?.acceleratedRender === true;\n const bypassCloneDeepOptionScope = Boolean(\n getFeatureFlag(featureFlagContext, 'visualizations_bypassCloneDeepOptionScope')\n );\n const lazyLoadingDataFrame = Boolean(\n getFeatureFlag(featureFlagContext, 'visualizations_lazyLoadingDataFrame')\n );\n const optionsToEvaluate = React.useMemo(() => {\n const legendDisplay = turnOffLegendDisplayWhenTrellisIsOn(isTrellisOn, options);\n // computeVizPropsBeforeEval will run before DSL gets evaluated\n const computedOptions = computeVizPropsBeforeEval(options) ?? {};\n return {\n context: defaultsDeep({}, context, vizConfig.defaultContext),\n options: deepMergeWithArrayPrimitiveOverrides(\n {},\n legendDisplay,\n computedOptions,\n options,\n defaultOptions\n ),\n };\n }, [isTrellisOn, options, context]);\n\n const [threshold, setThreshold] = React.useState(Number(width));\n const onDownsamplingThresholdChange = React.useCallback((newThreshold: number) => {\n setThreshold(newThreshold);\n }, []);\n const isDownsamplingEnabled = React.useMemo(() => {\n return isDownsamplingEnabledByFeatureFlag && isDownsamplingEnabledForViz({ vizConfig });\n }, [isDownsamplingEnabledByFeatureFlag]);\n\n const downsamplingProps = React.useMemo(() => {\n if (!isDownsamplingEnabled) {\n return {};\n }\n return {\n onDownsamplingThresholdChange,\n originalDataSources: dataSources,\n };\n }, [dataSources, isDownsamplingEnabled, onDownsamplingThresholdChange]);\n const downsampledDataSources = useDownsampleDataSources({\n options: optionsToEvaluate.options,\n context: optionsToEvaluate.context,\n dataSources,\n threshold,\n isDownsamplingEnabled,\n });\n\n const asyncOptionsEvaluationParams = useDeepMemo(\n () =>\n getAsyncOptionsEvaluationParams({\n visualizationID,\n props,\n optionsToEvaluate,\n downsampledDataSources,\n vizConfig,\n bypassCloneDeepOptionScope,\n lazyLoadingDataFrame,\n }),\n [\n visualizationID,\n optionsToEvaluate,\n downsampledDataSources,\n vizConfig,\n bypassCloneDeepOptionScope,\n lazyLoadingDataFrame,\n currentThemeFamily,\n currentThemeColorScheme,\n currentThemeDensity,\n localeContext.serializedTimezone,\n ]\n );\n\n React.useEffect(() => {\n if (!useAsyncEvaluatedOptions) {\n return undefined;\n }\n\n let ownsEvaluation = true;\n try {\n AsyncDynamicOptionsEvaluator.evaluate(asyncOptionsEvaluationParams)\n .then(results => {\n if (ownsEvaluation) {\n setEvaluatedOptionsAsync(results.results as Record<string, unknown>);\n }\n })\n .catch(() => {\n if (ownsEvaluation) {\n setUseAsyncEvaluatedOptions(false);\n }\n });\n } catch {\n setUseAsyncEvaluatedOptions(false);\n }\n\n return () => {\n ownsEvaluation = false;\n AsyncDynamicOptionsEvaluator.reset(visualizationID);\n };\n }, [asyncOptionsEvaluationParams, useAsyncEvaluatedOptions, visualizationID]);\n\n evaluatedOptions = useDeepMemo(() => {\n try {\n if (useAsyncEvaluatedOptions) {\n return {};\n }\n return evaluateOptionsSync({\n optionsToEvaluate,\n downsampledDataSources,\n dataSourcesInState,\n dataFramesInState,\n setDataSourcesInState,\n setDataFramesInState,\n computeDataFrames,\n featureFlagContext,\n themeFunc,\n });\n } catch (e) {\n if (e instanceof Error) {\n // eslint-disable-next-line no-console\n console.error(`unexpected error evaluating options: ${e.message}`);\n }\n return {};\n }\n }, [\n currentThemeFamily,\n currentThemeColorScheme,\n currentThemeDensity,\n optionsToEvaluate,\n downsampledDataSources,\n localeContext.serializedTimezone,\n useAsyncEvaluatedOptions,\n ]);\n\n const evaluatedOptionsToUse = useAsyncEvaluatedOptions ? evaluatedOptionsAsync : evaluatedOptions;\n\n /**\n * PAGE_AND_SORT behavior\n *\n * Some visualizations, like table, requires metadata about the datasource,\n * like total number of results, current count, offset, and sort, for rendering\n * paginator and sorting direction. In this approach, the visualization\n * allow users to set 'paginateDataSourceKey' to select which datasource\n * should the visualization extract the metadata from. It defaults to 'primary' datasource.\n * The visualization config should set the PAGE_AND_SORT behavior to receive\n * 'requestParams', 'meta' and onRequestParams callback as props.\n *\n * In future, we could automatically detect which all datasources are being used\n * and bind those magically to pagination/sorting behavior.\n */\n let dataSourceMetadata = {};\n const OptionKey = 'paginateDataSourceKey';\n const optsKey = has(evaluatedOptionsToUse, OptionKey) && evaluatedOptionsToUse[OptionKey];\n const paginateDataSourceKey = typeof optsKey === 'string' ? optsKey : 'primary';\n\n const requestParams = get(dataSources, [paginateDataSourceKey, 'requestParams'], {});\n const meta = get(dataSources, [paginateDataSourceKey, 'meta'], {});\n const handleRequestParamsChange = (payload: Record<string, unknown>): void =>\n onRequestParamsChange(paginateDataSourceKey, payload);\n\n const sortParams = useSortingParams({\n requestParams,\n meta,\n onRequestParamsChange: handleRequestParamsChange,\n });\n\n const paginatorParams = usePaginationParams({\n requestParams,\n meta,\n onRequestParamsChange: handleRequestParamsChange,\n });\n\n dataSourceMetadata = {\n sortParams,\n paginatorParams,\n };\n\n if (\n !vizConfig.supports.includes(VizBehavior.PAGE_AND_SORT) &&\n !has(dataSources, paginateDataSourceKey)\n ) {\n dataSourceMetadata = {};\n }\n\n // trellis specific backgroundColor update for onComputedProps\n // if trellis is enabled following these three criteria - 1) trellis feature flag is enabled 2) vizConfig supports array has 'trellis' 3) option 'splitByLayout' is set to 'trellis\n // onComputedProps api should return back trellisBackgroundColor value for backgroundColor option to support coloring of sibling panels (for eg:- title/ description on UDF side)\n const clonedEvaluatedOptions: Record<string, unknown> = { ...evaluatedOptionsToUse };\n if (isTrellisOn) {\n clonedEvaluatedOptions.backgroundColor = clonedEvaluatedOptions?.trellisBackgroundColor;\n }\n // useEffect hook needs to be initialized before any early returns\n // this is in accordance with the order of hook calls being the same on each render https://reactjs.org/docs/hooks-rules.html#explanation\n React.useEffect((): void => {\n onComputedProps(clonedEvaluatedOptions);\n });\n\n // present warning message if any required props are missing\n const { requiredProps = [], supports } = vizConfig;\n const missing = missingKeys(requiredProps, evaluatedOptionsToUse);\n if (\n missing.length > 0 &&\n supports.includes(VizBehavior.PLACEHOLDER) &&\n vizConfig.key !== 'splunk.singlevalue' // For SV missing props msg is not displayed if required props majorValue is missing, instead this will be handled from the component, instead handled within component\n ) {\n return (\n <MissingPropsMessage\n data-test=\"missing-props-message\"\n width={width}\n height={height}\n missingProps={missing}\n backgroundColor={themeFunc('defaultBackgroundColor')}\n />\n );\n }\n\n // events\n const eventCallbackProps = buildAllEventCallbackProps(\n vizConfig.events,\n evaluatedOptionsToUse,\n onEventTrigger,\n {\n supportsEvents: vizConfig.supports.includes(VizBehavior.EVENTS),\n hasEventHandlers,\n mode,\n }\n );\n\n // compute pure viz props which are not from options\n const computedVizProps = computeVizProps({\n ...props,\n ...evaluatedOptionsToUse,\n // Align option transformation with the actual renderer selected below.\n // This prevents canvas-only option preservation from leaking into Highcharts mode.\n isAcceleratedRenderOn,\n ...eventCallbackProps,\n themeFunc,\n });\n\n // if were using webworkers and this is the first render we dont want to show a viz with missing data so we return null\n if (useAsyncEvaluatedOptions && Object.keys(evaluatedOptionsToUse).length === 0) {\n return null;\n }\n\n // if acceleratedRender mode is on, then use canvas viz\n const SanitizedViz = isAcceleratedRenderOn ? SanitizedTimeSeriesChartWrapper : SanitizedReactViz;\n\n return (\n <SanitizedViz\n {...SplunkVisualization.defaults}\n mode={mode}\n width={width || SplunkVisualization.defaults.width}\n height={height || SplunkVisualization.defaults.height}\n userLocale={localeContext}\n {...downsamplingProps}\n {...evaluatedOptionsToUse}\n {...computedVizProps}\n {...eventCallbackProps}\n {...dataSourceMetadata}\n />\n );\n };\n\n DashboardViz.propTypes = {\n ...SplunkVisualization.propTypes,\n ...ReactViz.propTypes,\n };\n\n DashboardViz.defaultProps = {\n ...ReactViz.defaultProps, // we still need ReactViz.defaultProps for the visualizations that still have them\n onEventTrigger: SplunkVisualization.defaults.onEventTrigger,\n };\n\n // attach viz config\n DashboardViz.config = vizConfig;\n\n return Object.assign(\n withTheme(withPlaceholder(withEditModeCover(DashboardViz, disableEditModeCover), useIconPlaceholder)),\n { config: vizConfig }\n );\n};\n\nexport default withDashboardViz;\n", "\nimport * as defaultImport from \"@splunk/visualization-encoding/utils/dsl\";\nexport * from \"@splunk/visualization-encoding/utils/dsl\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import { isNumber } from '@splunk/visualization-encoding/utils/types';\nimport { getFieldsFromDSL } from '@splunk/visualization-encoding/utils/dsl';\nimport { deepMergeWithArrayPrimitiveOverrides } from '@splunk/visualizations-shared/hocUtils';\nimport { pickFieldFromJSONSchema } from '@splunk/visualizations-shared/JSONSchemaUtils';\nimport { GEO_LAT_AND_LONG_FIELD } from '../../Map/PureMap/BubbleLayer';\n\nexport const columnsNullToZeros = (config, dataSources, options) => {\n const { primary } = dataSources;\n const { columns, fields } = primary.data;\n let newColumns = columns;\n const mergedOptions = deepMergeWithArrayPrimitiveOverrides(\n {},\n options,\n pickFieldFromJSONSchema(config.optionsSchema, 'default')\n );\n if (mergedOptions.layers?.[0]?.type === 'bubble') {\n const latitudeField = getFieldsFromDSL(mergedOptions.layers[0].latitude, dataSources)[0] || '';\n const longitudeField = getFieldsFromDSL(mergedOptions.layers[0].longitude, dataSources)[0] || '';\n const stringsFields = getFieldsFromDSL(\"> primary | frameBySeriesTypes('string')\", dataSources);\n const excludedFields = new Set([\n latitudeField,\n longitudeField,\n 'geobin',\n 'name',\n ...stringsFields,\n ...GEO_LAT_AND_LONG_FIELD,\n ]);\n const indicesToEvaluate = new Set(\n fields.reduce((arr, e, i) => {\n const field = typeof e === 'string' ? e : e.name.toString();\n if (!excludedFields.has(field)) {\n arr.push(i);\n }\n return arr;\n }, [])\n );\n\n newColumns = columns.map((column, i) => {\n if (indicesToEvaluate.has(i)) {\n // sanitize value and convert string to numeric numbers\n return column.map(value => (!value || !isNumber(value) ? 0 : +value));\n }\n return column;\n });\n }\n\n const modifiedDatasources = {\n ...dataSources,\n primary: {\n ...primary,\n data: {\n ...primary.data,\n columns: newColumns,\n },\n },\n };\n\n return modifiedDatasources;\n};\n", "/* eslint-disable no-sequences */\nimport * as React from 'react';\nimport { sanitizeArrayOfColors } from '@splunk/visualizations-shared/colorUtils';\nimport { deepMergeWithArrayPrimitiveOverrides } from '@splunk/visualizations-shared/hocUtils';\nimport { pickFieldFromJSONSchema } from '@splunk/visualizations-shared/JSONSchemaUtils';\nimport { DataSource } from '../common/interfaces/DataSource';\nimport type { DashboardVizProps } from '../common/interfaces';\nimport PureMap from './PureMap/PureMap';\nimport config from './config';\nimport withDashboardViz from '../common/withDashboardViz';\nimport { columnsNullToZeros } from '../common/utils/mapUtils';\nimport { GEO_BOUND_PREFIX, GEO_LAT_AND_LONG_FIELD } from './PureMap/BubbleLayer';\nimport { convertToArrOfObjects } from '../common/utils/dataUtils';\n\nconst formatLayer = (l, dataFields, dataSourceData, transformedData) => {\n // add key `geobin` to the layer object if the data is returned from geostats commands\n // to distinguish geostats commands from table commands\n const geobinIdx = dataFields.indexOf('geobin');\n const layer = l;\n\n if (geobinIdx > -1) {\n layer.geobin = dataSourceData.columns[geobinIdx];\n }\n // similarly add key `geom` to layer object for choropleths\n const geomIdx = dataFields.indexOf('geom');\n if (geomIdx > -1) {\n layer.geom = dataSourceData.columns[geomIdx].map(geomItem => {\n return typeof geomItem === 'string' ? JSON.parse(geomItem) : geomItem;\n });\n }\n // Sanitize colors within layers\n if (Object.hasOwn(layer, 'seriesColors')) {\n layer.seriesColors = Array.isArray(layer.seriesColors)\n ? sanitizeArrayOfColors(layer.seriesColors)\n : undefined;\n }\n if (Object.hasOwn(layer, 'dataColors')) {\n layer.dataColors = Array.isArray(layer.dataColors)\n ? sanitizeArrayOfColors(layer.dataColors)\n : undefined;\n }\n layer.metadata = transformedData;\n};\n\ntype MapWrapperProps = Omit<DashboardVizProps, 'dataSources' | 'width' | 'height'> & {\n dataSources?: DashboardVizProps['dataSources'];\n width?: DashboardVizProps['width'];\n height?: DashboardVizProps['height'];\n};\n\ntype MapVisualizationComponent = React.ComponentType<MapWrapperProps> & {\n config: typeof config;\n};\n\nexport const computeVizProps = (props: {\n themeFunc: any;\n theme: any;\n dataSources: any;\n layers: any;\n onOptionsChange?: any;\n title?: string;\n hasEventHandlers?: boolean;\n}): any => {\n const { themeFunc, theme, layers, dataSources, onOptionsChange, title, hasEventHandlers } = props;\n const themeColorVariables = ['controlBackgroundColor', 'controlForegroundColor'];\n const themeColors: Record<string, unknown> = {};\n themeColorVariables.forEach(variable => {\n themeColors[variable] = themeFunc(variable);\n });\n // Markers use different icons, Bubbles has different styles for light and dark theme\n // this prop is passed for that\n const themeColorScheme = theme?.splunkThemeV1 ? theme?.splunkThemeV1.colorScheme : 'dark';\n\n const dataSourceData = dataSources?.primary?.data ?? {};\n // transforms data structure into array of objects to allow for indexing metadata at layer level\n const transformedData = convertToArrOfObjects(dataSourceData.columns, dataSourceData.fields);\n\n const dataFields = (dataSourceData.fields ?? []).map(field =>\n typeof field === 'string' ? field : field.name\n );\n\n layers?.forEach(l => formatLayer(l, dataFields, dataSourceData, transformedData));\n\n return {\n ...themeColors,\n themeColorScheme,\n ...layers,\n onOptionsChange,\n title,\n hasEventHandlers,\n };\n};\n\nconst withTooltipFields = (Viz: MapVisualizationComponent): MapVisualizationComponent => {\n const VizWithTooltipFields = ({ dataSources, options, ...otherProps }: MapWrapperProps): JSX.Element => {\n if (!dataSources?.primary?.data) {\n return <Viz {...otherProps} options={options} />;\n }\n const mergedOptions = deepMergeWithArrayPrimitiveOverrides(\n {},\n options,\n pickFieldFromJSONSchema(config.optionsSchema, 'default')\n );\n if (mergedOptions.layers?.[0]) {\n if (mergedOptions.layers?.[0]?.type === 'bubble') {\n // make sure bubbleSize and bubbleSizeFields dsl evaluation happen at the last HOC \"withDashboardViz\".\n // so value/type augmentation in the HOCs stay consistent\n mergedOptions.layers[0].bubbleSizeFields = '> bubbleSize | getField()';\n mergedOptions.layers[0].dataValuesField = '> dataValues | getField()';\n mergedOptions.layers[0].tooltipHeaderFieldName = '> tooltipHeaderField | getField()';\n }\n const { fields } = dataSources.primary.data;\n if (\n Array.isArray(mergedOptions.layers[0].additionalTooltipFields) &&\n Array.isArray(fields) &&\n fields.length\n ) {\n const { bubbleSizeFields = [] } = mergedOptions.layers[0];\n const fieldNames = new Set(\n (fields as Array<string | { name: string }>).map(field =>\n typeof field === 'string' ? field : field.name\n )\n );\n mergedOptions.layers[0].additionalTooltipFields =\n mergedOptions.layers[0].additionalTooltipFields.filter(\n (field: string) => fieldNames.has(field) && !bubbleSizeFields.includes(field)\n );\n }\n }\n\n return <Viz dataSources={dataSources} options={mergedOptions} {...otherProps} />;\n };\n return Object.assign(VizWithTooltipFields, { config: Viz.config });\n};\n\n// HOC for stripping the internal fields for Maps\nconst withoutInternalFields = (Viz: MapVisualizationComponent): MapVisualizationComponent => {\n // eslint-disable-next-line react/display-name\n const VizWithoutInternalFields = ({\n dataSources,\n mode = 'view',\n width = 800,\n height = 500,\n ...otherProps\n }: MapWrapperProps): JSX.Element => {\n if (!dataSources?.primary?.data) {\n return <Viz mode={mode} width={width} height={height} {...otherProps} />;\n }\n const { primary } = dataSources;\n const { columns, fields } = primary.data;\n let newColumns = [];\n let newFields = [];\n if (fields && columns && fields.length === columns.length) {\n // computed sorted index for removal\n const indicesToRemove = new Set(\n fields.reduce((arr, e, i) => {\n const field = typeof e === 'string' ? e : e.name.toString();\n if (\n field.startsWith('_') &&\n !field.startsWith(GEO_BOUND_PREFIX) &&\n !GEO_LAT_AND_LONG_FIELD.includes(field)\n ) {\n arr.push(i);\n }\n return arr;\n }, [])\n );\n newFields = fields.filter((d, i) => !indicesToRemove.has(i));\n newColumns = columns.filter((d, i) => !indicesToRemove.has(i));\n }\n const modifiedDatasources = {\n ...dataSources,\n primary: {\n ...primary,\n data: {\n ...primary.data,\n columns: newColumns,\n fields: newFields,\n },\n },\n };\n return (\n <Viz\n dataSources={modifiedDatasources}\n mode={mode}\n width={width}\n height={height}\n {...otherProps}\n />\n );\n };\n return Object.assign(VizWithoutInternalFields, { config: Viz.config });\n};\n\n// HOC for updating all null values in data columns to zeros\n// excluding 'latitude', 'longitude' and 'geobin' and string fields\nconst withNullToZeros = (Viz: MapVisualizationComponent): MapVisualizationComponent => {\n // eslint-disable-next-line react/display-name\n const VizWithColumnsNullToZeros = ({\n dataSources,\n options,\n ...otherProps\n }: MapWrapperProps): JSX.Element => {\n if (!dataSources?.primary?.data) {\n return <Viz options={options} {...otherProps} />;\n }\n const modifiedDatasources = columnsNullToZeros(config, dataSources, options);\n return <Viz dataSources={modifiedDatasources} options={options} {...otherProps} />;\n };\n return Object.assign(VizWithColumnsNullToZeros, { config: Viz.config });\n};\n\nexport function useIconPlaceholder(dataSources: { [name: string]: DataSource }, loading: boolean): boolean {\n return loading;\n}\n\nconst MapVisualization = withoutInternalFields(\n withTooltipFields(\n withNullToZeros(\n withDashboardViz({\n ReactViz: PureMap,\n vizConfig: config,\n computeVizProps,\n disableEditModeCover: true,\n useIconPlaceholder,\n })\n )\n )\n);\nconst { themes } = config;\nexport default MapVisualization;\nexport { themes, config, PureMap };\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAAAA;AAAA,EAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AACA,oBAA+B;AAC/B,0BAAc;AACd,IAAO,gBAAS,aAAa,gBAA8B,wBAAU;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAC,iBAA+B;AAC/B,+BAAc;AACd,IAAO,qBAAS,aAAaA,iBAA8B,yBAAUA;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAC,iBAA+B;AAC/B,6BAAc;AACd,IAAO,mBAAS,aAAaA,iBAA8B,yBAAUA;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAC,iBAA+B;AAC/B,oCAAc;AACd,IAAO,0BAAS,aAAaA,iBAA8B,yBAAUA;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAC,iBAA+B;AAC/B,sCAAc;AACd,IAAO,4BAAS,aAAaA,iBAA8B,yBAAUA;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAC,iBAA+B;AAC/B,2BAAc;AACd,IAAO,iBAAS,aAAaA,iBAA8B,yBAAUA;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAC,iBAA+B;AAC/B,8BAAc;AACd,IAAO,oBAAS,aAAaA,iBAA8B,yBAAUA;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAC,iBAA+B;AAC/B,gCAAc;AACd,IAAO,sBAAS,aAAaA,iBAA8B,yBAAUA;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAC,iBAA+B;AAC/B,yBAAc;AACd,IAAO,eAAS,aAAaA,iBAA8B,yBAAUA;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAC,kBAA+B;AAC/B,2BAAc;AACd,IAAO,iBAAS,aAAaA,kBAA8B,0BAAUA;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAC,kBAA+B;AAC/B,4BAAc;AACd,IAAO,kBAAS,aAAaA,kBAA8B,0BAAUA;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAC,kBAA+B;AAC/B,+BAAc;AACd,IAAO,qBAAS,aAAaA,kBAA8B,0BAAUA;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAC,kBAA+B;AAC/B,0CAAc;AACd,IAAO,gCAAS,aAAaA,kBAA8B,0BAAUA;;;ACH9D,IAAM,8BAA8B,CAAC,WAAyD;AACjG,MAAI,CAAC,UAAU,OAAO,OAAO,gBAAgB,YAAY;AACrD,WAAO;AAAA,EACX;AAEA,QAAM,WAAW,OAAO,YAAY;AAEpC,MAAI,OAAO,eAAe,eAAe,oBAAoB,YAAY;AACrE,WAAO,OAAO,cAAc;AAAA,EAChC;AAEA,SAAO;AACX;;;ACZA;AAAA;AAAA;AAAA;AACA,IAAAC,kBAA+B;AAC/B,0BAAc;AACd,IAAO,gBAAS,aAAaA,kBAA8B,0BAAUA;;;ACHrE,IAAAC,uBAAA;AAAA,SAAAA,sBAAA;AAAA,iBAAAC;AAAA;AACA,IAAAC,kBAA+B;AAC/B,WAAAC,sBAAc;AACd,IAAOC,uBAAS,aAAaF,kBAA8B,0BAAUA;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAG,kBAA+B;AAC/B,8BAAc;AACd,IAAO,oBAAS,aAAaA,kBAA8B,0BAAUA;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAC,kBAA+B;AAC/B,+BAAc;AACd,IAAO,qBAAS,aAAaA,kBAA8B,0BAAUA;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAC,kBAA+B;AAC/B,uCAAc;AACd,IAAO,6BAAS,aAAaA,kBAA8B,0BAAUA;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAC,kBAA+B;AAC/B,2BAAc;AACd,IAAO,iBAAS,aAAaA,kBAA8B,0BAAUA;;;ACH9D,IAAM,gBAAgB;AAAA,EACzB,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,MAAM;AAAA,EACN,KAAK;AAAA,EACL,OAAO;AAAA,EACP,OAAO;AACX;;;ACTA;AAAA;AAAA;AAAA;AACA,IAAAC,kBAA+B;AAC/B,4BAAc;AACd,IAAO,kBAAS,aAAaA,kBAA8B,0BAAUA;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAC,kBAA+B;AAC/B,2BAAc;AACd,IAAO,iBAAS,aAAaA,kBAA8B,0BAAUA;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAC,kBAA+B;AAC/B,uBAAc;AACd,IAAO,aAAS,aAAaA,kBAA8B,0BAAUA;;;ACUrE,IAAM,gBAAgB,0BAAO,eAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAOpC,IAAM,cAAc,0BAAO;AAAA;AAAA;AAAA;AAK3B,IAAM,oBAAoB,0BAAO;AAAA;AAAA;AAAA;AAAA;AAMjC,IAAM,oBAAoB,0BAAO;AAAA;AAAA;AAAA;AAAA;AAMjC,IAAM,mBAAmB,0BAAO;AAAA,wBACR,WAAS,MAAM,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAS5C,IAAM,oBAAoB,0BAAO;AAAA;AAAA;AAAA;AAAA;AAMjC,IAAM,sBAAsB,0BAAO;AAAA;AAAA;AAAA,iBAGlB,yBAAU,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAatC,IAAM,kBAAkB,CAAC,eAAuB,SAA2C;AAC9F,QAAM,WAAW,OAAM,IAAI,IAAI,KAAK,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC;AAC1D,QAAM,iBAAiB,KAAK,IAAI,aAAa;AAC7C,MAAI,UAAU,SAAS,cAAc;AACrC,MAAI,UAAU,UAAU,iBAAiB,WAAW,EAAE;AACtD,MAAI,UAAU,KAAK,OAAO,iBAAiB,UAAU,UAAU,MAAM,IAAI;AACzE,MAAI,YAAY,IAAI;AAChB,eAAW;AACX,cAAU;AAAA,EACd;AACA,MAAI,YAAY,IAAI;AAChB,eAAW;AACX,cAAU;AAAA,EACd;AACA,MAAI;AACJ,MAAI,SAAS,aAAa;AACtB,gBAAY,gBAAgB,IAAI,MAAM;AAAA,EAC1C,WAAW,SAAS,YAAY;AAC5B,gBAAY,gBAAgB,IAAI,MAAM;AAAA,EAC1C;AACA,SAAO,GAAG,OAAO,QAAK,OAAO,KAAK,OAAO,KAAK,SAAS;AAC3D;AAmBA,IAAM,UAAU,CAAC;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,mBAAmB,CAAC;AAAA,EACpB,kBAAkB;AAAA,EAClB,gBAAgB;AAAA,EAChB,0BAA0B;AAAA,EAC1B;AAAA,EACA;AACJ,MAAiC;AAC7B,QAAM,qBAA2B,yBAAoC,0BAAkB;AACvF,QAAM,2BAA2B,QAAQ,yDAAoB,gCAAgC;AAC7F,QAAM,cAAc,0BAA0B,SAAY,4BAA4B,MAAM;AAE5F,QAAM,UACF;AAAA,IAAC;AAAA;AAAA,MACG;AAAA,MACA,MAAK;AAAA,MACL;AAAA,MACA,WAAW;AAAA,MACX;AAAA,MACA,aAAU;AAAA,MACV,kBAAiB;AAAA,MACjB;AAAA,MACA;AAAA;AAAA,IAEA,4CAAC,mBACI,iBACG,4CAAC,uBAAoB,aAAU,oBAC3B,4CAAC,YACG,4CAAC,QAAG,SAAS,KACT,4CAAC,UAAK,aAAU,0BAAwB,aAAc,CAC1D,CACJ,CACJ,GAEJ,4CAAC,eACI,QAAQ,UAAU,SAAS,KACxB,4CAAC,YACG,4CAAC,qBAAkB,aAAU,aAAW,MAAO,GAC/C,4CAAC,qBAAkB,aAAU,gBAAc,SAAU,CACzD,GAEH,QAAQ,mBAAmB,QAAQ,KAChC,4CAAC,YACG,4CAAC,6BAAmB,gBAAE,UAAU,CAAE,GAClC,4CAAC,qBAAkB,aAAU,cACxB,gBAAgB,UAAU,UAAU,CACzC,CACJ,GAEH,QAAQ,mBAAmB,SAAS,KACjC,4CAAC,YACG,4CAAC,6BAAmB,gBAAE,WAAW,CAAE,GACnC,4CAAC,qBAAkB,aAAU,eACxB,gBAAgB,WAAW,WAAW,CAC3C,CACJ,GAEH,iBACI,OAAO,CAAC,EAAE,MAAM,MAAM,SAAS,OAAO,KAAK,MAAM,GAAG,EACpD,IAAI,CAAC,EAAE,MAAM,OAAO,OAAO,KAAK,MAC7B,4CAAC,QAAG,SAAK,wBAAY,KACjB,4CAAC,qBAAkB,aAAU,iBACxB,QACG,4CAAC,oBAAiB,aAAU,eAAc,OAAc,IACxD,MACJ,4CAAC,cACI,MACA,4BACD,aACC,gCAAa,IAAI,SAAK,6BAAU,IAAI,KACjC,4CAAC,qBAAkB,aAAU,gBACzB,4CAAC,sBAAW,SAAS,MAAM,OAAO,IAAI,QAAQ,IAAI,CACtD,IACA,IACR,CACJ,GACA,4CAAC,qBAAkB,aAAU,iBAAe,KAAM,CACtD,CACH,CACT,CACJ;AAAA,EACJ;AAGJ,SAAO,cAAc,4CAAC,+CAAkB,QAAQ,eAAc,OAAQ,IAAuB;AACjG;AAEA,IAAOC,mBAAQ;;;AC3Mf;AAAA;AAAA;AAAA;AACA,IAAAC,kBAA+B;AAC/B,6BAAc;AACd,IAAO,mBAAS,aAAaA,kBAA8B,0BAAUA;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAC,kBAA+B;AAC/B,iDAAc;AACd,IAAO,uCAAS,aAAaA,kBAA8B,0BAAUA;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAC,kBAA+B;AAC/B,0BAAc;AACd,IAAO,gBAAS,aAAaA,kBAA8B,0BAAUA;;;ACQ9D,IAAM,eAAe;AACrB,IAAM,eAAe;AACrB,IAAM,gBAAgB;AACtB,IAAM,gBAAgB;AACtB,IAAM,uBAAuB;AAC7B,IAAM,wBAAwB;AAC9B,IAAM,wBAAwB;AAE9B,IAAM,2BAA2B;AAEjC,IAAM,oBAAoB;AAC1B,IAAM,oBAAoB;AAEjC,IAAM,YAAY;AAClB,IAAM,WAAW;AA+EV,IAAM,gBAAgB,CAAC;AAAA,EAC1B,oBAAoB,CAAC;AAAA,EACrB,mBAAmB,CAAC;AACxB,MAIK;AA/GL;AAgHI,QAAM,aAA6C,CAAC;AACpD,MAAI,mBAAwC,CAAC;AAC7C,MAAI,kBAAuC,CAAC;AAC5C,QAAM,cAAc,CAAC,GAAG,mBAAmB,GAAG,gBAAgB;AAC9D,8BAAQ,aAAa,gBAAc;AAC/B,UAAM,MAAM,yCAAY;AACxB,QAAI,CAAC,KAAK;AACN;AAAA,IACJ;AACA,UAAM,gBAAgC,iCAC/B,aAD+B;AAAA,MAElC,SAAS;AAAA,IACb;AACA,eAAW,GAAG,IAAI;AAAA,EACtB,CAAC;AAED,MAAI,kBAAkB,SAAS,GAAG;AAC9B,wBACI,6BAAkB,KAAK,CAAAC,YAAUA,QAAO,UAAU,OAAO,MAAzD,YACA,kBAAkB,KAAK,CAAAA,YAAUA,QAAO,UAAU,MAAS,MAD3D,YAEA,CAAC;AACL,uBACI,6BAAkB,KAAK,CAAAA,YAAUA,QAAO,UAAU,MAAM,MAAxD,YACA,kBAAkB,KAAK,CAAAA,YAAUA,QAAO,UAAU,MAAS,MAD3D,YAEA,CAAC;AAAA,EACT;AAEA,SAAO,EAAE,YAAY,kBAAkB,gBAAgB;AAC3D;AAeO,IAAM,cAAc,CAAC;AAAA,EACxB;AAAA,EACA,sBAAsB;AAAA,EACtB,0BAA0B;AAAA,EAC1B,aAAa,CAAC;AAAA,EACd,cAAc;AAAA,EACd,mBAAmB,CAAC;AAAA,EACpB,kBAAkB,CAAC;AACvB,MAQ2B;AACvB,MAAI,CAAC,eAAe;AAChB,WAAO;AAAA,MACH,MAAM;AAAA,MACN,KAAK;AAAA,MACL,SAAS;AAAA,MACT,SAAS;AAAA,QACL,cAAc;AAAA,UACV,MAAM;AAAA,UACN,OAAO;AAAA,YACH;AAAA,UACJ;AAAA,UACA,UAAU;AAAA,QACd;AAAA,MACJ;AAAA,MACA,QAAQ;AAAA,QACJ;AAAA,UACI,IAAI;AAAA,UACJ,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,SAAS;AAAA,QACb;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAEA,MACI,uBACA,WAAW,mBAAmB,MAC7B,CAAC,WAAW,mBAAmB,EAAE,SAAS,WAAW,mBAAmB,EAAE,UAAU,cACvF;AACE,WAAO,WAAW,mBAAmB;AAAA,EACzC;AAEA,MAAI,uBAAuB,yBAAyB;AAChD,QAAI,QAAkB,CAAC;AAMvB,QAAI,yBAAyB,KAAK,mBAAmB,GAAG;AAMpD,cAAQ;AAAA,QACJ,oBAAoB,QAAQ,UAAU,GAAG;AAAA,QACzC,oBAAoB,QAAQ,UAAU,GAAG;AAAA,QACzC,oBAAoB,QAAQ,UAAU,GAAG;AAAA,MAC7C;AAAA,IACJ,OAAO;AACH,cAAQ,CAAC,mBAAmB;AAAA,IAChC;AACA,UAAM,WAA2B;AAAA,MAC7B,MAAM;AAAA,MACN,KAAK;AAAA,MACL,SAAS;AAAA,MACT,SAAS;AAAA,QACL,cAAc;AAAA,UACV,MAAM;AAAA,UACN;AAAA,UACA,UAAU;AAAA,QACd;AAAA,MACJ;AAAA,MACA,QAAQ;AAAA,QACJ;AAAA,UACI,IAAI;AAAA,UACJ,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,SAAS;AAAA;AAAA,QACb;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAGA,SAAO,gBAAgB,UAAU,mBAAmB;AACxD;AAOO,IAAM,mCAAmC,CAC5C,YACA,wBACkB;AAClB,QAAM,EAAE,SAAS,OAAO,IAAI;AAC5B,MAAI,6BAA6B;AAEjC,QAAM,aAAa,OAAO,KAAK,OAAO;AACtC,aAAW,OAAO,YAAY;AAC1B,UAAM,SAAS,QAAQ,GAAG;AAC1B,UAAM,EAAE,SAAS,QAAQ,IAAI;AAC7B,UAAM,QAAQ,MAAM,QAAQ,iCAAQ,KAAK,IAAK,OAAO,QAAqB,CAAC;AAC3E,QAAI,uBAAuB,MAAM,SAAS,mBAAmB,GAAG;AAC5D,mCAA6B;AAAA,IACjC;AACA,SACM,uBAAuB,8BAA+B,CAAC,4BACzD,yBAAS,OAAO,SAChB,yBAAS,OAAO,GAClB;AACE,aAAO;AAAA,QACH,SAAS;AAAA,QACT,SAAS;AAAA,MACb;AAAA,IACJ;AAAA,EACJ;AAEA,aAAW,SAAS,QAAQ;AACxB,UAAM,EAAE,SAAS,QAAQ,IAAI;AAC7B,SACM,uBAAuB,8BAA+B,CAAC,4BACzD,yBAAS,OAAO,SAChB,yBAAS,OAAO,GAClB;AACE,aAAO;AAAA,QACH,SAAS;AAAA,QACT,SAAS;AAAA,MACb;AAAA,IACJ;AAAA,EACJ;AAEA,SAAO;AAAA,IACH,SAAS;AAAA,IACT,SAAS;AAAA,EACb;AACJ;AAEO,IAAM,mBAAmB,CAACA,YAC7B,QAAQA,WAAU,UAAUA,WAAU,SAASA,WAAU,aAAaA,WAAU,YAAYA,OAAM;AAE/F,IAAM,yBAAyB,CAAC,cAA6C;AAtTpF;AAuTI,MAAI,CAAC,WAAW;AACZ,WAAO;AAAA,EACX;AAEA,QAAM,gBAAgB;AACtB,QAAM,QAAQ,cAAc,KAAK,SAAS;AAC1C,UAAQ,qCAAO,WAAU,OAAO,SAAS,MAAM,CAAC,GAAG,EAAE,MAA7C,YAAmD;AAC/D;AAGO,IAAM,kBAAkB,CAAC,YAAoB,eAAmC;AACnF,MAAI,aAAa,KAAK,CAAC,YAAY;AAC/B,WAAO,CAAC,qBAAqB;AAAA,EACjC;AACA,MAAI,EAAC,yCAAY,SAAQ;AACrB,WAAO,CAAC,GAAG,IAAI,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,IAAI,OAAK,sBAAsB,CAAC,CAAC;AAAA,EAC9E;AAGA,SAAO,CAAC,GAAG,IAAI,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE;AAAA,IAAI,WACzC,4BAAQ,WAAW,IAAI,WAAW,MAAM,CAAC,IAAI,WAAW,IAAI,WAAW,MAAM,IAAI;AAAA,EACrF;AACJ;AAGO,IAAM,kBAAkB,CAAC,WAAqB,SAAsB;AACvE,QAAMC,YAAO,2BAAS,EAAE,SAAS,GAAG,EAAE,OAAO,SAAS,EAAE,MAAM,CAAC,mBAAmB,iBAAiB,CAAC;AAAA,IAChG;AAAA,EACJ;AAEA,MAAIA,QAAO,mBAAmB;AAC1B,WAAO;AAAA,EACX;AACA,MAAIA,QAAO,mBAAmB;AAC1B,WAAO;AAAA,EACX;AACA,SAAOA;AACX;AAEO,IAAM,iBAAiB,CAACC,WAAkC;AA9VjE;AA+VI,MAAI,EAACA,UAAA,gBAAAA,OAAO,WAAU,GAAC,KAAAA,OAAM,CAAC,MAAP,mBAAU,SAAQ;AACrC,WAAO,CAAC;AAAA,EACZ;AACA,SAAOA,OAAM,CAAC,EAAE,IAAI,CAACC,KAAG,MAAMD,OAAM,IAAI,SAAO,IAAI,CAAC,CAAC,CAAC;AAC1D;AAGO,IAAM,iBAAiB,CAAC,WAAkC;AAE7D,MAAI,CAAC,QAAQ;AACT,WAAO;AAAA,EACX;AAEA,MAAI,CAAC,MAAM,QAAQ,MAAM,GAAG;AACxB,WAAO,KAAK,IAAI,QAAQ,CAAC;AAAA,EAC7B;AAEA,SAAO,OAAO,IAAI,SAAO,eAAe,GAAG,CAAC;AAChD;AAGO,IAAM,oBAAoB,CAAC,gBAAiC;AAC/D,QAAM,EAAE,kBAAkB,gBAAgB,IAAI;AAG9C,QAAM,QAAQ,iBAAiB,QAAQ,eAAe;AACtD,MAAI,UAAU,GAAI,QAAO;AAGzB,cAAY,iBAAiB,QAAQ,YAAY,iBAAiB,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC;AACrF,cAAY,WAAW,QAAQ,YAAY,WAAW,OAAO,OAAO,CAAC,EAAE,CAAC,CAAsB;AAClG;AAEO,IAAM,iBAAiB,CAAC,UAAgD;AAhY/E;AAiYI,MAAI,GAAC,oCAAO,eAAP,mBAAmB,WAAU,GAAC,oCAAO,aAAP,mBAAiB,WAAU,GAAC,oCAAO,cAAP,mBAAkB,SAAQ;AACrF,WAAO;AAAA,EACX;AACA,QAAM,gBAAgB,MAAM,QAAQ,MAAM,MAAM,KAAK,MAAM,OAAO,SAAS;AAI3E,QAAM,sBAAsB,eAAe,MAAM,UAAU;AAC3D,MAAI;AACJ,MAAI;AACJ,MAAI,QAAQ;AAEZ,MAAI,MAAM,QAAQ,MAAM,WAAW,CAAC,CAAC,GAAG;AAQpC,2BAAuB,eAAe,MAAM,UAAwB;AACpE,oCAAgC,eAAe,mBAAmB;AAElE,QAAI,MAAM,WAAW,SAAS,GAAG;AAC7B,cAAQ;AAIR,UAAI,MAAM,mBAAmB,CAAC,CAAC,MAAM,YAAY;AAC7C,0BAAkB,KAAK;AAAA,MAC3B;AAAA,IACJ;AAAA,EACJ,OAAO;AACH,2BAAuB,MAAM,WAAW,IAAI,OAAK,CAAC,CAAC,CAAC;AACpD,oCAAgC,oBAAoB,IAAI,OAAK,CAAC,CAAC,CAAC;AAAA,EACpE;AACA,MAAI,EAAC,6DAAsB,SAAQ;AAC/B,WAAO;AAAA,EACX;AACA,QAAM,OAAO,MAAM,SACd,IAAI,CAAC,KAAK,OAAO;AAAA,IACd,MAAM,gBAAgB,uBAAuB,MAAM,OAAO,CAAC,CAAC,IAAI;AAAA,IAChE,QAAQ,qBAAqB,CAAC;AAAA,IAC9B,iBAAiB,8BAA8B,CAAC;AAAA,IAChD,aAAa,CAAC,MAAM,UAAU,CAAC,GAAG,GAAG;AAAA,IACrC,UAAU,MAAM,WAAW,MAAM,SAAS,CAAC,IAAI,CAAC;AAAA,EACpD,EAAE,EACD,OAAO,OAAK,QAAQ,EAAE,MAAM,CAAC;AAGlC,MAAI,UAAM,oBAAI,8BAA8B,CAAC,CAAC;AAC9C,MAAI,MAAM;AACV,gCAA8B,QAAQ,SAAO;AACzC,UAAM,iBAAa,oBAAI,GAAG;AAC1B,UAAM,KAAK,IAAI,YAAY,GAAG;AAC9B,UAAM,KAAK,IAAI,YAAY,GAAG;AAAA,EAClC,CAAC;AACD,SAAO;AAAA,IACH;AAAA,IACA,WAAW,CAAC,KAAK,GAAG;AAAA,IACpB;AAAA,IACA,aAAa,MAAM;AAAA,IACnB,kBAAkB,MAAM;AAAA,EAC5B;AACJ;AAEO,IAAM,gBAAgB,CAAC,WAA4C;AACtE,MAAI,CAAC,UAAU,CAAC,MAAM,QAAQ,MAAM,KAAK,OAAO,WAAW,GAAG;AAC1D,WAAO;AAAA,EACX;AACA,QAAM,CAAC,KAAK,GAAG,IAAI;AACnB,MAAI,KAAC,cAAAE,UAAa,GAAG,KAAK,EAAE,OAAO,GAAG,KAAK,gBAAgB,OAAO,GAAG,KAAK,eAAe;AACrF,WAAO;AAAA,EACX;AACA,MAAI,KAAC,cAAAA,UAAa,GAAG,KAAK,EAAE,OAAO,GAAG,KAAK,iBAAiB,OAAO,GAAG,KAAK,gBAAgB;AACvF,WAAO;AAAA,EACX;AACA,SAAO;AACX;AAEO,IAAM,sBAAsB,CAAC,OAAe,oBAAmD;AAjdtG;AAkdI,MAAI,CAAC,MAAM,QAAQ,gBAAgB,IAAI,KAAK,gBAAgB,KAAK,WAAW,GAAG;AAC3E,WAAO,CAAC;AAAA,EACZ;AACA,QAAM,SAAQ,qBAAgB,gBAAhB,YAA+B;AAC7C,QAAM,iBAAiB,gBAAgB,KAAK,MAAM,GAAG,KAAK;AAC1D,QAAM,kBAAkB,eAAe,QAAQ,gBAAc;AACzD,QAAI,CAAC,YAAY;AACb,aAAO,CAAC;AAAA,IACZ;AACA,QAAI,WAAW,SAAS,gBAAgB;AACpC,aAAO,WAAW,YAAY,KAAK,CAAC;AAAA,IACxC;AACA,QAAI,WAAW,SAAS,WAAW;AAC/B,aAAO,WAAW,YAAY,KAAK;AAAA,IACvC;AACA,WAAO,CAAC;AAAA,EACZ,CAAC;AACD,SAAO,gBAAgB,IAAI,WAAS,MAAM,UAAU,YAAY,IAAI,CAAC,CAAC;AAC1E;AAQA,IAAM,yBAAyB,CAAC,OAAkB,UAA4B;AAC1E,QAAM,mBAAmB,CAAC,qBACtB,oBAAI,cAAc,OAAO,CAAC,CAAC,EAAE;AAAA,IACzB;AAAA,IACA,aAAa,SAAS,yCAAW,UAAU,aAAa,cAClD,aAAa,cACb;AAAA,EACV;AACJ,SAAO,MAAM,SAAS,yCAAW,aAAa,oBAAoB,OAAO,KAAK,IAAI,iBAAiB,KAAK;AAC5G;AAOO,IAAM,2BAA2B,CAAC,WAA0C;AAC/E,QAAM,eAAe,CAAC,UAClB,OAAO,MAAM,WAAS,MAAM,KAAK,KAAM,MAA8B,IAAI;AAC7E,QAAM,gBAAgB,CAAC,UAAmB,UAAU,YAAY,gBAAgB;AAChF,QAAM,gBAAgB,CAAC,UAAmB,UAAU,YAAY,gBAAgB;AAEhF,MAAI,CAAC,UAAU,CAAC,MAAM,QAAQ,MAAM,KAAK,CAAC,OAAO,QAAQ;AACrD,WAAO;AAAA,EACX;AAEA,QAAM,SAAS,CAAC,UAA0B;AACtC,QAAI,CAAC,aAAa,KAAK,GAAG;AACtB,aAAO,cAAc,KAAK;AAAA,IAC9B;AACA,WAAO,OAAO,OAAO,CAAC,SAAS,UAAU;AACrC,YAAM,oBAAoB,uBAAuB,OAAO,KAAK,EAAE,IAAI,OAAK,CAAC,CAAC;AAC1E,iBAAO,eAAAC,KAAU,CAAC,SAAS,GAAG,iBAAiB,CAAC;AAAA,IACpD,GAAG,cAAc,KAAK,CAAC;AAAA,EAC3B;AAEA,QAAM,SAAS,CAAC,UAA0B;AACtC,QAAI,CAAC,aAAa,KAAK,GAAG;AACtB,aAAO,cAAc,KAAK;AAAA,IAC9B;AACA,WAAO,OAAO,OAAO,CAAC,SAAS,UAAU;AACrC,YAAM,oBAAoB,uBAAuB,OAAO,KAAK,EAAE,IAAI,MAAM;AACzE,iBAAO,eAAAC,KAAU,CAAC,SAAS,GAAG,iBAAiB,CAAC;AAAA,IACpD,GAAG,cAAc,KAAK,CAAC;AAAA,EAC3B;AAEA,SAAO;AAAA,IACH,CAAC,OAAO,SAAS,GAAG,OAAO,QAAQ,CAAC;AAAA,IACpC,CAAC,OAAO,SAAS,GAAG,OAAO,QAAQ,CAAC;AAAA,EACxC;AACJ;AAEO,IAAM,0BAA0B,CAAC,UAAoC;AACxE,MAAI,UAAU,QAAQ,UAAU,QAAW;AACvC,WAAO;AAAA,EACX;AACA,MAAI,OAAO,UAAU,YAAY,OAAO,UAAU,UAAU;AACxD,WAAO;AAAA,EACX;AACA,SAAO,KAAK,UAAU,KAAK;AAC/B;AAEO,IAAM,qBAAqB,CAAC,QAAkB,eAAiC;AAElF,QAAM,YAAY,iCAAQ,IAAI,WAAM;AA5iBxC;AA4iB4C,2CAAO,YAAW,KAAK,uBAAO,KAAK,EAAE,MAAM,MAApB,YAAyB,IAAK;AAAA;AAE7F,SAAO,uCAAW,IAAI,aAAW,UAAU;AAC/C;AAEO,IAAM,oBAAoB,CAAC,MAAM,SAAkB;AAjjB1D;AAkjBI,QAAM,iBAAgB,kCAAM,WAAN,mBAAc,KAAK,YAAS,+BAAO,QAAO;AAChE,QAAM,iBAAgB,kCAAM,WAAN,mBAAc,KAAK,YAAS,+BAAO,QAAO;AAChE,QAAM,qBAAiB,oBAAI,6BAAM,UAAU,oDAAe,WAAf,YAAoC,EAAE;AACjF,QAAM,qBAAiB,oBAAI,6BAAM,UAAU,oDAAe,WAAf,YAAoC,EAAE;AAEjF,MAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,gBAAgB;AACxE,WAAO;AAAA,EACX;AAEA,aAAO,wBAAQ,eAAe,aAAa,SAAK,wBAAQ,gBAAgB,cAAc;AAC1F;AAEO,IAAM,iBAAiB,CAC1B,iBACA,MAC4B;AAC5B,MAAI,EAAC,mDAAiB,YAAW,EAAC,mDAAiB,YAAY,QAAO,CAAC;AACvE,MAAI,KAAK,gBAAgB,QAAQ,OAAQ,QAAO,CAAC;AAEjD,QAAM,WAAW,gBAAgB,WAAW,gBAAgB,SAAS,CAAC,IAAI,CAAC;AAC3E,QAAM,OAAO,gBAAgB,QAAQ,CAAC;AACtC,QAAM,QAAQ,gBAAgB,WAAW,CAAC;AAC1C,QAAM,OAAO,EAAE,MAAM,OAAO,OAAO,KAAK,EAAE;AAE1C,SAAO,OAAO,KAAK,QAAQ,EAAE,OAAO,CAAC,QAAQ,SAAS;AAClD,UAAM,MAAM,OAAO,IAAI;AACvB,UAAM,UAAM,yBAAS,SAAS,IAAI,CAAC,IAAI,KAAK,UAAU,SAAS,IAAI,CAAC,IAAI,OAAO,SAAS,IAAI,CAAC;AAC7F,WAAO,iCAAK,SAAL,EAAa,CAAC,GAAG,GAAG,IAAI;AAAA,EACnC,GAAG,IAAI;AACX;;;ACtkBA,IAAM,aAAmB,4BAA+B;AAAA,EACpD,iBAAiB;AAAA,EACjB,oBAAoB,MAAM;AAAA,EAAC;AAAA,EAC3B,oBAAoB;AAAA,EACpB,uBAAuB,MAAM;AAAA,EAAC;AAClC,CAAC;AAEM,IAAM,cAAuD,CAAC,EAAE,SAAS,MAAM;AAClF,QAAM,CAAC,iBAAiB,kBAAkB,IAAU,uBAAwB,IAAI;AAChF,QAAM,CAAC,oBAAoB,qBAAqB,IAAU,uBAAwB,IAAI;AAEtF,QAAM,QAAc;AAAA,IAChB,OAAO;AAAA,MACH;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ;AAAA,IACA,CAAC,iBAAiB,kBAAkB;AAAA,EACxC;AAEA,SAAO,4CAAC,WAAW,UAAX,EAAoB,SAAe,QAAS;AACxD;AAEO,IAAM,gBAAgB,MAAY,yBAAW,UAAU;;;ACZ9D,IAAM,gBAAgB,CAAC,OAagB;AAbhB,eACnB;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,mBAAmB,CAAC;AAAA,IACpB,gBAAgB;AAAA,IAChB;AAAA,IACA;AAAA,IACA,kBAAkB;AAAA,IAClB,0BAA0B;AAAA,IAC1B;AAAA,EAhCJ,IAqBuB,IAYhB,uBAZgB,IAYhB;AAAA,IAXH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAGA,QAAM,YAAkB,qBAAuB;AAC/C,QAAM,SAAe,qBAAe;AACpC,QAAM,CAAC,eAAe,oBAAoB,IAAU,uBAAS,KAAK;AAClE,QAAM,CAAC,WAAW,YAAY,IAAU,uBAAS,KAAK;AACtD,QAAM,CAAC,WAAW,YAAY,IAAU,uBAAS,KAAK;AACtD,QAAM,CAAC,kBAAkB,mBAAmB,IAAU,uBAAS,KAAK;AACpE,QAAM,YAAkB,sBAAQ,UAAM,wBAAY,GAAG,CAAC,CAAC;AACvD,QAAM,wBAA8B,qBAA4B,IAAI;AACpE,QAAM,kBAAwB,qBAA8B,IAAI;AAChE,QAAM,oBAA0B,sBAAQ,UAAM,wBAAY,GAAG,CAAC,CAAC;AAC/D,QAAM,WAAW,kBAAkB;AACnC,QAAM,EAAE,iBAAiB,mBAAmB,IAAI,cAAc;AAC9D,QAAM,oBAA0B,qBAA4B,IAAI;AAEhE,QAAM,cAAoB,0BAAY,MAAM;AACxC,uBAAmB,QAAQ;AAC3B,yBAAqB,IAAI;AAAA,EAC7B,GAAG,CAAC,UAAU,kBAAkB,CAAC;AAEjC,QAAM,wBAA8B,0BAAY,MAAM;AAClD,QAAI,sBAAsB,WAAW,IAAI,WAAW,OAAO,IAAI,QAAQ,QAAQ,YAAY;AACvF,UAAI,QAAQ,IAAI,WAAW,sBAAsB,OAAO;AACxD,4BAAsB,UAAU;AAAA,IACpC;AAAA,EACJ,GAAG,CAAC,GAAG,CAAC;AAER,QAAM,wBAA8B,0BAAY,MAAM;AAClD,QAAI,kBAAkB,WAAW,IAAI,WAAW,OAAO,IAAI,QAAQ,QAAQ,YAAY;AACnF,UAAI,QAAQ,IAAI,QAAQ,kBAAkB,OAAO;AACjD,wBAAkB,UAAU;AAAA,IAChC;AAAA,EACJ,GAAG,CAAC,GAAG,CAAC;AAGR,QAAM,qBAA2B;AAAA,IAC7B,CAAC,SAAkB,SAAkB,mBAA4B;AAC7D,aAAO,CAAC,WAAW,CAAC,WAAW,CAAC;AAAA,IACpC;AAAA,IACA,CAAC;AAAA,EACL;AAEA,QAAM,qBAA2B,0BAAY,MAAM;AAC/C,QAAI,gBAAgB,SAAS;AACzB,mBAAa,gBAAgB,OAAO;AACpC,sBAAgB,UAAU;AAAA,IAC9B;AAAA,EACJ,GAAG,CAAC,CAAC;AAEL,QAAM,uBAA6B;AAAA,IAC/B,CAAC,SAAkB,SAAkB,mBAA4B;AAC7D,yBAAmB;AAEnB,UAAI,mBAAmB,SAAS,SAAS,cAAc,GAAG;AAEtD,wBAAgB,UAAU,WAAW,MAAM;AACvC,+BAAqB,KAAK;AAC1B,6BAAmB,eAAc,cAAc,WAAW,OAAO,SAAU;AAC3E,0BAAgB,UAAU;AAAA,QAC9B,GAAG,GAAG;AAAA,MACV;AAAA,IACJ;AAAA,IACA,CAAC,oBAAoB,UAAU,oBAAoB,kBAAkB;AAAA,EACzE;AAEA,QAAM,mBAAyB,0BAAY,MAAM;AAC7C,uBAAmB;AACnB,iBAAa,IAAI;AACjB,gBAAY;AAAA,EAChB,GAAG,CAAC,aAAa,kBAAkB,CAAC;AAEpC,QAAM,mBAAyB,0BAAY,MAAM;AAC7C,iBAAa,KAAK;AAClB,yBAAqB,WAAW,OAAO,gBAAgB;AAAA,EAC3D,GAAG,CAAC,WAAW,kBAAkB,oBAAoB,CAAC;AAEtD,QAAM,0BAAgC,0BAAY,MAAM;AACpD,uBAAmB;AACnB,wBAAoB,IAAI;AAAA,EAC5B,GAAG,CAAC,kBAAkB,CAAC;AAEvB,QAAM,0BAAgC,0BAAY,MAAM;AACpD,wBAAoB,KAAK;AACzB,yBAAqB,WAAW,WAAW,KAAK;AAAA,EACpD,GAAG,CAAC,WAAW,WAAW,oBAAoB,CAAC;AAE/C,QAAM,aAAmB,0BAAY,MAAM;AACvC,iBAAa,KAAK;AAClB,0BAAsB;AACtB,yBAAqB,OAAO,WAAW,gBAAgB;AAAA,EAC3D,GAAG,CAAC,WAAW,kBAAkB,uBAAuB,oBAAoB,CAAC;AAE7E,QAAM,kBAAwB;AAAA,IAC1B,CAAC,MAAqB;AAClB,UAAI,EAAE,QAAQ,YAAY,oBAAoB,UAAU;AACpD,2BAAmB;AACnB,qBAAa,KAAK;AAClB,qBAAa,KAAK;AAClB,4BAAoB,KAAK;AACzB,8BAAsB;AACtB,6BAAqB,KAAK;AAC1B,2BAAmB,IAAI;AAAA,MAC3B;AAAA,IACJ;AAAA,IACA,CAAC,iBAAiB,UAAU,uBAAuB,oBAAoB,kBAAkB;AAAA,EAC7F;AAEA,QAAM,cAAoB,0BAAY,MAAM;AAExC,0BAAsB;AAGtB,QACI,IAAI,WACJ,cAAc,UACd,aAAa,UACb,OAAO,IAAI,QAAQ,SAAS,YAC9B;AACE,YAAM,SAAS,IAAI,QAAQ,UAAU;AACrC,UAAI,CAAC,OAAO,SAAS,CAAC,WAAW,QAAQ,CAAC,GAAG;AAEzC,cAAM,iBAAiB,MAAM;AACzB,gCAAsB,UAAU;AAChC,uBAAa,IAAI;AACjB,sBAAY;AAAA,QAChB;AACA,8BAAsB,UAAU;AAChC,YAAI,QAAQ,KAAK,WAAW,cAAc;AAC1C,YAAI,QAAQ,MAAM,CAAC,WAAW,QAAQ,CAAC;AACvC;AAAA,MACJ;AAAA,IACJ;AAEA,iBAAa,IAAI;AACjB,gBAAY;AAAA,EAChB,GAAG,CAAC,aAAa,KAAK,WAAW,UAAU,qBAAqB,CAAC;AAEjE,QAAM,gBAAsB,0BAAY,MAAM;AAC1C,QAAI,OAAO,SAAS;AAChB,aAAO,QAAQ,OAAO;AACtB,aAAO,UAAU;AAAA,IACrB;AAAA,EACJ,GAAG,CAAC,CAAC;AAEL,EAAM,wBAAU,MAAM;AAClB,QAAI;AACA,UAAI,OAAO,SAAS;AAChB,eAAO,QAAQ,UAAU,CAAC,WAAW,QAAQ,CAAC;AAAA,MAClD,OAAO;AACH,eAAO,UAAU,IAAI,2BAAO,EAAE,SAAS,UAAU,QAAQ,CAAC;AAC1D,eAAO,QAAQ,UAAU,CAAC,WAAW,QAAQ,CAAC;AAC9C,eAAO,QAAQ,MAAM,IAAI,OAAO;AAAA,MACpC;AAAA,IACJ,SAAS,OAAO;AAEZ,cAAQ,MAAM,KAAK;AACnB,oBAAc;AAAA,IAClB;AAAA,EACJ,GAAG,CAAC,UAAU,WAAW,GAAG,CAAC;AAG7B,EAAM,wBAAU,MAAM;AAClB,QAAI,iBAAiB,oBAAoB,UAAU;AAC/C,eAAS,iBAAiB,WAAW,eAAe;AACpD,aAAO,MAAM;AACT,iBAAS,oBAAoB,WAAW,eAAe;AAAA,MAC3D;AAAA,IACJ;AACA,WAAO;AAAA,EACX,GAAG,CAAC,eAAe,iBAAiB,UAAU,eAAe,CAAC;AAG9D,EAAM,wBAAU,MAAM;AAClB,QAAI,iBAAiB,oBAAoB,YAAY,oBAAoB,MAAM;AAC3E,2BAAqB,KAAK;AAAA,IAC9B;AAAA,EACJ,GAAG,CAAC,iBAAiB,UAAU,aAAa,CAAC;AAG7C,EAAM,wBAAU,MAAM;AAClB,QAAI,CAAC,iBAAiB,oBAAoB,SAAS,aAAa,aAAa,mBAAmB;AAC5F,kBAAY;AAAA,IAChB;AAAA,EACJ,GAAG,CAAC,iBAAiB,eAAe,WAAW,WAAW,kBAAkB,WAAW,CAAC;AAIxF,EAAM,wBAAU,MAAM;AAClB,QAAI,CAAC,eAAgB;AAErB,QAAI,oBAAoB,UAAU;AAC9B,2BAAqB,IAAI;AAAA,IAC7B,OAAO;AACH,2BAAqB,KAAK;AAAA,IAC9B;AAAA,EACJ,GAAG,CAAC,gBAAgB,iBAAiB,QAAQ,CAAC;AAI9C,QAAM,CAAC,EAAE,WAAW,IAAU,yBAAW,OAAK,IAAI,GAAG,CAAC;AAEtD,EAAM,wBAAU,MAAM;AAClB,QAAI,CAAC,iBAAiB,CAAC,IAAI,WAAW,OAAO,IAAI,QAAQ,OAAO,YAAY;AACxE,aAAO;AAAA,IACX;AAEA,QAAI,QAAuB;AAE3B,UAAM,gBAAgB,MAAM;AACxB,sCAAU,sBAAsB,MAAM;AAClC,oBAAY;AACZ,gBAAQ;AAAA,MACZ,CAAC;AAAA,IACL;AAEA,sBAAkB,UAAU;AAC5B,QAAI,QAAQ,GAAG,QAAQ,aAAa;AAEpC,WAAO,MAAM;AACT,UAAI,UAAU,MAAM;AAChB,6BAAqB,KAAK;AAAA,MAC9B;AACA,4BAAsB;AAAA,IAC1B;AAAA,EACJ,GAAG,CAAC,eAAe,KAAK,qBAAqB,CAAC;AAE9C,EAAM;AAAA,IACF,MAAM,MAAM;AACR,yBAAmB;AACnB,4BAAsB;AACtB,4BAAsB;AACtB,oBAAc;AAAA,IAClB;AAAA,IACA,CAAC,oBAAoB,uBAAuB,uBAAuB,aAAa;AAAA,EACpF;AACA,QAAM,2BAA2B,iBAAiB,OAAO,CAAC,EAAE,MAAM,MAAM,SAAS,OAAO,KAAK,MAAM,GAAG;AACtG,QAAM,cACF,mBAAmB,yBAAyB,UAAW,UAAU,CAAC,OAAO,MAAM,SAAS;AAG5F,QAAM,mBAAmB,oBAAoB,aAAa,iBAAiB,mBAAmB;AAE9F,QAAM,wBAA8B,sBAAQ,MAAM;AAC9C,QAAI,CAAC,SAAU,QAAO;AACtB,QAAI,CAAO,6BAAe,QAAQ,EAAG,QAAO;AAC5C,WAAa,2BAAa,UAAU;AAAA,MAChC,oBAAoB;AAAA,IACxB,CAAQ;AAAA,EACZ,GAAG,CAAC,UAAU,SAAS,CAAC;AAExB,SACI,4CAAC,aAEG;AAAA,IAAC;AAAA;AAAA,MACG,KAAK;AAAA,MACL,aAAU;AAAA,MACV,cAAc;AAAA,MACd,cAAc;AAAA,MACd,SAAS;AAAA,MACT,QAAQ;AAAA,OACJ;AAAA,IAEH;AAAA,EACL,GACA,4CAAC,aACI,eACG;AAAA,IAACC;AAAA,IAAA;AAAA,MACG,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,QAAQ,UAAU;AAAA,MAClB,UAAU,kBAAkB,WAAW;AAAA,MACvC,WAAW,kBAAkB,YAAY;AAAA,MACzC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAc;AAAA,MACd,cAAc;AAAA;AAAA,EAClB,CAER,CACJ;AAER;AAEA,IAAO,wBAAQ;;;AC9SR,IAAM,oBAAoB,CAAC,QAA8D;AAC5F,QAAM,iBAAuB;AAAA,IACzB,IAAI,WAAW,IAAI;AAAA,EACvB;AACA,QAAM,kBAAwB,qBAAe,CAAC;AAE9C,QAAM,2BAAiC,0BAAY,CAAC,wBAAgC;AAChF,UAAM,iBAAiB,eAAe,QAAQ,IAAI,mBAAmB;AACrE,UAAM,cAAa,iDAAgB,aAAa,iBAAgB;AAEhE,mBAAe,QAAQ,OAAO,mBAAmB;AAEjD,QAAI,YAAY;AAGZ,UAAI,mBAAkC;AACtC,YAAM,UAAU,MAAM,KAAK,eAAe,QAAQ,KAAK,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC;AAG9E,YAAM,YAAY,QAAQ,KAAK,OAAK,IAAI,mBAAmB;AAC3D,UAAI,cAAc,QAAW;AACzB,2BAAmB;AAAA,MACvB,WAAW,QAAQ,SAAS,GAAG;AAE3B,2BAAmB,QAAQ,GAAG,EAAE;AAAA,MACpC;AAEA,UAAI,qBAAqB,MAAM;AAC3B,wBAAgB,UAAU;AAAA,MAC9B,OAAO;AACH,wBAAgB,UAAU;AAC1B,cAAM,qBAAqB,eAAe,QAAQ,IAAI,gBAAgB;AACtE,YAAI,oBAAoB;AACpB,6BAAmB,aAAa,YAAY,GAAG;AAAA,QACnD;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ,GAAG,CAAC,CAAC;AAEL,QAAM,gBAAsB;AAAA,IACxB,CAAC,OAAe,YAAsC;AAClD,UAAI,SAAS;AACT,cAAM,kBAAkB,eAAe,QAAQ,IAAI,KAAK;AACxD,cAAM,YAAW,mDAAiB,aAAa,iBAAgB;AAE/D,uBAAe,QAAQ,IAAI,OAAO,OAAO;AAEzC,YAAI,UAAU;AACV,kBAAQ,aAAa,YAAY,GAAG;AAAA,QACxC,OAAO;AACH,kBAAQ,aAAa,YAAY,UAAU,gBAAgB,UAAU,MAAM,IAAI;AAAA,QACnF;AAAA,MACJ,OAAO;AACH,iCAAyB,KAAK;AAAA,MAClC;AAAA,IACJ;AAAA,IACA,CAAC,wBAAwB;AAAA,EAC7B;AAEA,QAAM,sBAA4B,0BAAY,MAAM;AAChD,QAAI,eAAe,gBAAgB;AAEnC,QAAI,CAAC,eAAe,QAAQ,IAAI,YAAY,GAAG;AAC3C,iBAAW,CAAC,OAAO,OAAO,KAAK,eAAe,QAAQ,QAAQ,GAAG;AAC7D,YAAI,QAAQ,aAAa,UAAU,MAAM,KAAK;AAC1C,yBAAe;AACf,0BAAgB,UAAU;AAC1B;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAEA,WAAO;AAAA,EACX,GAAG,CAAC,CAAC;AAEL,QAAM,gBAAsB;AAAA,IACxB,CAAC,MAA2B;AACxB,YAAM,eAAe,oBAAoB;AAEzC,YAAM,QAAQ,eAAe,QAAQ;AACrC,UAAI;AAEJ,cAAQ,EAAE,KAAK;AAAA,QACX,KAAK,cAAc;AAAA,QACnB,KAAK,cAAc;AACf,YAAE,eAAe;AACjB,qBAAW,iBAAiB,QAAQ,IAAI,IAAI,eAAe;AAC3D;AAAA,QACJ,KAAK,cAAc;AAAA,QACnB,KAAK,cAAc;AACf,YAAE,eAAe;AACjB,qBAAW,iBAAiB,IAAI,QAAQ,IAAI,eAAe;AAC3D;AAAA,QACJ,KAAK,cAAc;AACf,YAAE,eAAe;AACjB,qBAAW;AACX;AAAA,QACJ,KAAK,cAAc;AACf,YAAE,eAAe;AACjB,qBAAW,QAAQ;AACnB;AAAA,QACJ;AACI;AAAA,MACR;AAEA,UAAI,aAAa,cAAc;AAC3B,wBAAgB,UAAU;AAC1B,cAAM,aAAa,eAAe,QAAQ,IAAI,YAAY;AAC1D,cAAM,aAAa,eAAe,QAAQ,IAAI,QAAQ;AAEtD,YAAI,YAAY;AACZ,qBAAW,aAAa,YAAY,IAAI;AAAA,QAC5C;AAEA,YAAI,YAAY;AACZ,qBAAW,aAAa,YAAY,GAAG;AAEvC,gCAAsB,MAAM;AACxB,uBAAW,MAAM;AAAA,UACrB,CAAC;AAAA,QACL;AAAA,MACJ;AAAA,IACJ;AAAA,IACA,CAAC,mBAAmB;AAAA,EACxB;AAEA,QAAM,cAAoB,0BAAY,MAAM;AAjJhD;AAkJQ,SAAI,SAAI,YAAJ,mBAAa,UAAU;AACvB,UAAI,QAAQ,SAAS,QAAQ;AAAA,IACjC;AAAA,EACJ,GAAG,CAAC,GAAG,CAAC;AAER,QAAM,aAAmB,0BAAY,MAAM;AAvJ/C;AAwJQ,SAAI,SAAI,YAAJ,mBAAa,UAAU;AACvB,UAAI,QAAQ,SAAS,OAAO;AAAA,IAChC;AAAA,EACJ,GAAG,CAAC,GAAG,CAAC;AAER,SAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AACJ;;;ACxIO,IAAM,mBAAmB;AACzB,IAAM,yBAAyB,CAAC,mBAAmB,gBAAgB;AACnE,IAAM,sBAAsB;AAmB5B,IAAM,aAAmB;AAAA,EAC5B,CAAC;AAAA,IACG;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,oBAAoB;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,MAAoC;AAChC,UAAM,EAAE,MAAM,MAAM,IAAI,4CAAmB,CAAC;AAC5C,UAAM,oBAA0B;AAAA,MAC5B,CAAC,MAAqB;AAClB,YAAI,SAAS,KAAK,EAAE,QAAQ,cAAc,SAAS,EAAE,QAAQ,cAAc,OAAO;AAC9E;AAAA,QACJ;AACA,UAAE,eAAe;AACjB,0BAAkB,GAAG,MAAM,KAAK;AAAA,MACpC;AAAA,MACA,CAAC,MAAM,OAAO,iBAAiB;AAAA,IACnC;AAEA,UAAM,gBAAsB;AAAA,MACxB,CAAC,MAA2B;AAExB,YAAI,qBAAqB,EAAE,QAAQ,cAAc,SAAS,EAAE,QAAQ,cAAc,QAAQ;AACtF,4BAAkB,CAAC;AAAA,QACvB;AAGA,YAAI,WAAW;AACX,oBAAU,CAAC;AAAA,QACf;AAAA,MACJ;AAAA,MACA,CAAC,kBAAkB,mBAAmB,SAAS;AAAA,IACnD;AAEA,QAAI,MAAM,UAAU,GAAG;AACnB,aACI;AAAA,QAAC;AAAA;AAAA,UACG,mBAAmB;AAAA,UACnB,KAAK;AAAA,UACL,IAAG;AAAA,UACH,MAAM,mBAAmB,WAAW;AAAA,UACpC,cAAY;AAAA,UACZ,oBAAkB;AAAA,UAClB,SAAS,mBAAmB,oBAAoB;AAAA,UAChD,WAAW;AAAA,UACX;AAAA,UACA;AAAA,UACA,IAAI;AAAA,UACJ,IAAI;AAAA,UACJ,GAAG;AAAA,UACH,MAAM;AAAA,UACN,aAAa;AAAA,UACb,aAAa;AAAA,UACb,QAAQ;AAAA;AAAA,MACZ;AAAA,IAER;AACA,UAAM,KAAK,IAAI,KAAK,MAAM,QAAQ;AAClC,UAAM,KAAK,IAAI,KAAK,MAAM,MAAM;AAChC,UAAM,KAAK,KAAK,IAAI,EAAE;AACtB,UAAM,KAAK,KAAK,IAAI,EAAE;AACtB,UAAM,KAAK,KAAK,IAAI,EAAE;AACtB,UAAM,KAAK,KAAK,IAAI,EAAE;AACtB,UAAM,MAAM,MAAM,QAAQ,MAAM,IAAI;AAEpC,WACI;AAAA,MAAC;AAAA;AAAA,QACG,mBAAmB;AAAA,QACnB,KAAK;AAAA,QACL,IAAG;AAAA,QACH,MAAM,mBAAmB,WAAW;AAAA,QACpC,cAAY;AAAA,QACZ,oBAAkB;AAAA,QAClB,SAAS,mBAAmB,oBAAoB;AAAA,QAChD,WAAW;AAAA,QACX;AAAA,QACA;AAAA,QACA,GAAG,KAAK,MAAM,IAAI,MAAM,MAAM,SAAS,SAAS,EAAE,IAC9C,SAAS,SAAS,EACtB,MAAM,MAAM,IAAI,MAAM,MAAM,GAAG,MAAM,SAAS,SAAS,EAAE,IACrD,SAAS,SAAS,EACtB,MAAM,MAAM,IAAI,MAAM,YAAY,GAAG,MAAM,MAAM,IAAI,MAAM;AAAA,QAC3D,MAAM;AAAA,QACN,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,eAAe;AAAA;AAAA,IACnB;AAAA,EAER;AACJ;AAEA,WAAW,cAAc;AAElB,IAAM,gBAAgB,0BAAO;AAAA;AAAA;AAAA,MAG9B,CAAC,EAAE,kBAAkB,MAAM,qBAAqB,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAOjE,IAAM,+BAA+B;AAAA,EACxC,MAAM;AAAA,EACN,QAAQ;AACZ;AAuBA,IAAM,YAAkB;AAAA,EACpB,CAAC;AAAA,IACG;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,oBAAoB;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,MAAsB;AAClB,UAAM,qBAA2B,yBAAoC,0BAAkB;AACvF,UAAM,6BAA6B,QAAQ,yDAAoB,kCAAkC;AAEjG,UAAM,QAAQ,OAAO,OAAO,CAAC,YAAY,MAAM,aAAa,GAAG,CAAC;AAChE,UAAM,SAAS,gBAAgB,YAAY,KAAK;AAEhD,UAAM,eAAqB;AAAA,MACvB,CAAC,aAAsB,iBAA0B;AAC7C,YAAI,mBAAe,gBAAE,YAAY;AACjC,YAAI,eAAe;AACf,yBAAe;AAAA,QACnB,WAAW,aAAa,UAAa,cAAc,QAAW;AAC1D,6BAAe,4BAAQ,gBAAE,4BAA4B,GAAG;AAAA,YACpD,KAAK,gBAAgB,UAAU,UAAU;AAAA,YACzC,KAAK,gBAAgB,WAAW,WAAW;AAAA,UAC/C,CAAC;AAAA,QACL;AAEA,YAAI,eAAe,QAAQ,gBAAgB,MAAM;AAC7C,6BAAe,4BAAQ,gBAAE,sDAAsD,GAAG;AAAA,YAC9E,eAAe;AAAA,YACf;AAAA,YACA,cAAc,aAAa,SAAS;AAAA,UACxC,CAAC;AAAA,QACL;AACA,YAAI,kBAAkB;AAClB,6BAAe,4BAAQ,gBAAE,gCAAgC,GAAG,EAAE,OAAO,aAAa,CAAC;AAAA,QACvF;AAEA,eAAO;AAAA,MACX;AAAA,MACA,CAAC,eAAe,UAAU,WAAW,gBAAgB;AAAA,IACzD;AAEA,UAAM,UAAoB,CAAC;AAC3B,QAAI,eAAe;AACnB,WAAO,QAAQ,WAAS;AACpB,cAAQ,KAAK,YAAY;AACzB,sBAAgB;AAAA,IACpB,CAAC;AAED,UAAM,QAAQ,SAAS;AACvB,UAAM,WACF,8BACA,UAAU,uBACV,aACC,gCAAa,IAAI,SAAK,6BAAU,IAAI;AAEzC,WACI,4CAAC,SAAI,OAAc,QAAQ,OAAO,SAAS,SAAS,QAAQ,CAAC,IAAI,QAAQ,CAAC,MACrE,SACG;AAAA,MAAC;AAAA;AAAA,QACG,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,GAAG;AAAA,QACH,MAAK;AAAA,QACL,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,eAAe;AAAA;AAAA,IACnB,GAEH,OAAO,IAAI,CAAC,GAAG,MAAM;AA9QtC;AA+QoB,YAAM,cAAc,oBAAoB;AACxC,aACI;AAAA,QAAC;AAAA;AAAA,UACG,KAAK;AAAA,UACL,OAAO,QAAQ,CAAC,IAAI;AAAA,UACpB,MAAM,QAAQ,CAAC,IAAI,KAAK;AAAA,UACxB;AAAA,UACA,OAAO,OAAO,CAAC;AAAA,UACf;AAAA,UACA,iBAAiB,WAAW,CAAC;AAAA,UAC7B,mBAAmB;AAAA,UACnB,WAAW,cAAa,gBAAW,CAAC,MAAZ,mBAAe,OAAM,gBAAW,CAAC,MAAZ,mBAAe,KAAK;AAAA,UACjE,oBAAkB;AAAA,UAClB;AAAA,UACA;AAAA,UACA;AAAA,UACA,YACI,gBAAgB,aAAW,cAAc,aAAa,OAAO,IAAI;AAAA,UAErE;AAAA;AAAA,MACJ;AAAA,IAER,CAAC,GACA,YACG;AAAA,MAAC;AAAA;AAAA,QACG,GAAG,SAAU,SAAS,MAAO;AAAA,QAC7B,GAAG,SAAU,SAAS,MAAO;AAAA,QAC7B,OAAO,SAAS;AAAA,QAChB,QAAQ,SAAS;AAAA,QACjB,OAAO,EAAE,eAAe,OAAO;AAAA,QAC/B,aAAU;AAAA;AAAA,MAEV,4CAAC,sBAAW,SAAS,MAAM,OAAO,SAAS,KAAK,QAAQ,SAAS,KAAK;AAAA,IAC1E,CAER;AAAA,EAER;AACJ;AA0BO,IAAM,SAAe;AAAA,EACxB,CAAC;AAAA,IACG;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,mBAAmB,CAAC;AAAA,IACpB,gBAAgB;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,oBAAoB;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,MAAgC;AAC5B,UAAM,gBAAsB;AAAA,MACxB,CAAC,GAAG,MAAM,UAAU;AAChB,uBAAe,GAAG,MAAM,KAAK;AAC7B,UAAE,gBAAgB;AAAA,MACtB;AAAA,MACA,CAAC,cAAc;AAAA,IACnB;AAGA,UAAM,WAAW,eAAe,MAAM,OAAK,MAAM,CAAC;AAClD,UAAM,SAAS,eAAe,IAAI,OAAK,KAAK,IAAI,GAAG,CAAC,CAAC;AAErD,QAAI,YAAY,CAAC,eAAe,OAAQ,QAAO;AAE/C,WACI;AAAA,MAAC;AAAA;AAAA,QACG;AAAA,QACA;AAAA,QACA,kBAAkB,CAAC,GAAG,YAAY,GAAG,gBAAgB;AAAA,QACrD;AAAA,QACA;AAAA,QACA,kBAAe;AAAA,QACf;AAAA,QACA;AAAA;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACG;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,SAAS;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA;AAAA,MACJ;AAAA,IACJ;AAAA,EAER;AACJ;AACA,OAAO,cAAc;AAarB,IAAM,cAAc,CAAC,UAAyC;AAC1D,QAAM;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,0BAA0B;AAAA,IAC1B;AAAA,EACJ,IAAI;AAEJ,cAAY,eAAe,YAAY,gBAAgB;AACvD,cAAY,aAAa,YAAY,cAAc,CAAC;AACpD,cAAY,OAAO,YAAY,QAAQ,CAAC;AACxC,QAAM,YAAkB,sBAAQ,MAAM,eAAe,WAAW,GAAG,CAAC,WAAW,CAAC;AAChF,QAAM,eAAqB;AAAA,IACvB,MAAM,gBAAgB,YAAY,WAAW,QAAQ,YAAY,YAAY;AAAA,IAC7E,CAAC,YAAY,WAAW,QAAQ,YAAY,YAAY;AAAA,EAC5D;AACA,QAAM,EAAE,OAAO,CAAC,GAAG,YAAY,CAAC,GAAG,aAAa,kBAAkB,MAAM,IAAI,gCAAa,CAAC;AAC1F,QAAM,EAAE,0BAA0B,CAAC,GAAG,yBAAyB,KAAK,IAAI;AACxE,QAAM,cAAc,KAAK,MAAM,IAAI;AACnC,QAAM,aAAa,qBAAqB,UAAU,YAAY;AAC9D,QAAM,gBAAgB,YAAY;AAGlC,QAAM,eAAqB;AAAA,IACvB,MACI,KACK,OAAO,CAAC,KAAK,OAAO,MAAM;AACvB,YAAM,eACF,MAAM,SAAS,QAAQ,MAAM,SAAS,UAAa,MAAM,SAAS;AACtE,UAAI,cAAc;AACd,YAAI,KAAK,EAAE,MAAM,OAAO,KAAK,EAAE,CAAC;AAAA,MACpC;AACA,aAAO;AAAA,IACX,GAAG,CAAC,CAAC,EACJ,MAAM,GAAG,eAAe,oBAAoB,EAC5C,KAAK,CAAC,GAAG,UAAM,oBAAI,EAAE,KAAK,MAAM,QAAI,oBAAI,EAAE,KAAK,MAAM,CAAC;AAAA,IAC/D,CAAC,MAAM,aAAa,WAAW;AAAA,EACnC;AAEA,QAAM,iBAAuB;AAAA,IACzB,CAAC,GAAG,MAAM,OAAO,MAAM;AAhd/B;AAkdY,YAAM,YAAW,8BAAa,CAAC,MAAd,mBAAiB,SAAjB,mBAAuB,aAAvB,YAAmC,CAAC;AACrD,YAAM,UAAU,OAAO,KAAK,QAAQ,EAAE;AAAA,QAClC,CAAC,KAAK,SAAS;AACX,gBAAM,MAAM,OAAO,IAAI;AACvB,gBAAM,MAAM,OAAO,SAAS,IAAI,CAAC;AACjC,iBAAO,iCAAK,MAAL,EAAU,CAAC,GAAG,GAAG,IAAI;AAAA,QAChC;AAAA,QACA,EAAE,MAAM,OAAO,OAAO,KAAK,EAAE;AAAA,MACjC;AAEA,iBAAW,EAAE,GAAG,QAAQ,CAAC;AAAA,IAC7B;AAAA,IACA,CAAC,cAAc,UAAU;AAAA,EAC7B;AAEA,QAAM,EAAE,eAAe,aAAa,YAAY,cAAc,IAAI,kBAAkB,GAAG;AAEvF,MAAI,qBAAqB;AAEzB,SACI,0EACK,aAAa,IAAI,CAAC,OAAO,MAAM;AAC5B,UAAM,WAAW,MAAM,KAAK,OAAO,MAAM,OAAK,MAAM,CAAC;AACrD,UAAM,oBAAoB;AAC1B,UAAM,eAAe,MAAM,KAAK,OAAO;AACvC,QAAI,CAAC,UAAU;AACX,4BAAsB;AAAA,IAC1B;AACA,UAAM,SAAS,gBACT;AAAA,MACI,aAAa;AAAA,QAAI,aACb,4BAAQ,cAAc,IAAI,GAAG,CAAC,IAAI,cAAc,IAAI,GAAG,IAAI;AAAA,MAC/D,EAAE,CAAC;AAAA,IACP,IACA;AAEN,UAAM,CAAC,WAAW,QAAQ,IAAI,MAAM,KAAK;AACzC,UAAM,aAAa,MAAM,KAAK,OAAO,IAAI,CAAC,OAAO,WAAW;AAAA,MACxD,MAAM,iBAAiB,KAAK;AAAA,MAC5B;AAAA,MACA,OAAO,OAAO,KAAK;AAAA,IACvB,EAAE;AAEF,UAAM,mBAAmB,YAAY,WAC/B,wBAAwB,IAAI,WAAM;AA9fxD;AA8f4D;AAAA,QAClC,MAAM;AAAA,QACN,OAAO,MAAM,KAAK,SAAS,KAAK;AAAA,QAChC,OAAM,iBAAY,sBAAZ,mBAAgC;AAAA,MAC1C;AAAA,KAAE,IACF,CAAC;AAEP,UAAM,qBACF,YAAY,YAAY,MAAM,KAAK,SAAS,sBAAsB;AAEtE,WACI;AAAA,MAAC;AAAA;AAAA,QACG,KAAK,OAAO,MAAM,GAAG;AAAA,QACrB,gBAAgB,MAAM,KAAK;AAAA,QAC3B,YAAY;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,eAAe;AAAA,QACf;AAAA,QACA,gBAAgB,CAAC,GAAG,MAAM,UAAU,eAAe,GAAG,MAAM,OAAO,CAAC;AAAA,QACpE,MAAM,YAAY,KAAK,MAAM,GAAG;AAAA,QAChC;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW;AAAA,QACX,SAAS;AAAA,QACT,QAAQ;AAAA,QACR;AAAA,QACA;AAAA;AAAA,IACJ;AAAA,EAER,CAAC,CACL;AAER;AAEA,IAAO,sBAAQ;;;AC/hBf,IAAM,mBAAmB,0BAAO,IAAI,MAAM;AAAA,EACtC,aAAa;AACjB,CAAC;AAAA,MAUKC,oBAAG;AAAA;AAAA;AAAA;AAAA,wBAIe,WAAS,MAAM,eAAe;AAAA,MAChD,eAAS,+BAAY,qBAAK,OAAO,CAAC,SAAS,QAAQ,CAAC,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBASzC,WAAU,MAAM,YAAY,UAAU,MAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BASpC,WAAS,MAAM,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAMjC,WAAS,MAAM,sBAAsB;AAAA,qBAChD,WAAS,MAAM,sBAAsB;AAAA,gCAC1B,WAAS,MAAM,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAc1D,aAAa,gCAAgC,aAAa;AAAA,gBACrD,6BAA6B,IAAI;AAAA,kBAC/B,6BAA6B,MAAM;AAAA;AAAA;AAIrD,IAAO,2BAAQ;;;ACvDf,IAAM,gBAAgB;AAAA;AAAA;AAAA,0CAGoB,yBAAU,UAAU;AAAA,uCACvB,yBAAU,UAAU,6BAA6B,yBAAU,UAAU;AAAA,uCACrE,yBAAU,UAAU;AAAA;AAAA;AAI3D,IAAM,eAAe,0BAAO;AAAA,MACtB,CAAC,EAAE,kBAAkB,MAAM,qBAAqB,kBAAkB;AAAA,MAClE,aAAa;AAAA;AAkBZ,IAAM,aAAa,CAAC,OAYS;AAZT,eACvB;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA,oBAAoB;AAAA,IACpB;AAAA,IACA,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAvDJ,IA6C2B,IAWpB,uBAXoB,IAWpB;AAAA,IAVH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAGA,QAAM,gBAAgB,UAAU,UAAU,MAAM;AAChD,QAAM,gBAAsB;AAAA,IACxB,CAAC,MAA2B;AACxB,UAAI,qBAAqB,EAAE,QAAQ,cAAc,SAAS,EAAE,QAAQ,cAAc,QAAQ;AACtF,UAAE,eAAe;AACjB,uDAAgB;AAAA,MACpB;AACA,qDAAgB;AAAA,IACpB;AAAA,IACA,CAAC,kBAAkB,eAAe,aAAa;AAAA,EACnD;AACA,SACI;AAAA,IAAC;AAAA;AAAA,MACG,mBAAmB;AAAA,MACnB,KAAK;AAAA,MACL,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,MAAK;AAAA,MACL,MAAM,mBAAmB,WAAW;AAAA,MACpC,cAAY;AAAA,MACZ,oBAAkB;AAAA,MAClB,SAAS,mBAAmB,gBAAgB;AAAA,MAC5C,WAAW;AAAA,MACX;AAAA,MACA;AAAA,OACI;AAAA,IAEJ;AAAA,MAAC;AAAA;AAAA,QACG,GAAE;AAAA,QACF,MAAM;AAAA;AAAA,IACV;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACG,GAAE;AAAA,QACF,QAAO;AAAA;AAAA,IACX;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACG,GAAE;AAAA,QACF,QAAQ;AAAA,QACR;AAAA;AAAA,IACJ;AAAA,EACJ;AAER;AAoBA,IAAMC,UAAe;AAAA,EACjB,CAAC;AAAA,IACG;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,MAAgC;AAC5B,UAAM,YAAkB,sBAAQ,MAAM;AAClC,UAAI,kBAAc,gBAAE,YAAY;AAChC,UAAI,eAAe;AACf,sBAAc;AAAA,MAClB,WAAW,aAAa,UAAa,cAAc,QAAW;AAC1D,0BAAc,4BAAQ,gBAAE,4BAA4B,GAAG;AAAA,UACnD,KAAK,gBAAgB,UAAU,UAAU;AAAA,UACzC,KAAK,gBAAgB,WAAW,WAAW;AAAA,QAC/C,CAAC;AAAA,MACL;AAEA,UAAI,kBAAkB;AAClB,0BAAc,4BAAQ,gBAAE,gCAAgC,GAAG,EAAE,OAAO,YAAY,CAAC;AAAA,MACrF;AACA,aAAO;AAAA,IACX,GAAG,CAAC,eAAe,UAAU,WAAW,gBAAgB,CAAC;AAEzD,UAAM,OAAa;AAAA,MACf,MACI;AAAA,QAAC;AAAA;AAAA,UACG;AAAA,UACA,OAAO;AAAA,UACP;AAAA,UACA,eAAe;AAAA,UACf;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA;AAAA,MACJ;AAAA,MAEJ;AAAA,QACI;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AACA,WACI;AAAA,MAAC;AAAA;AAAA,QACG;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,kBAAe;AAAA,QACf;AAAA,QACA;AAAA,QACA;AAAA;AAAA,MAEC;AAAA,IACL;AAAA,EAER;AACJ;AAEAA,QAAO,cAAc;AAErB,IAAM,sBAAsB,0BAAO,qBAAa;AAAA;AAAA;AAAA;AAAA;AAMzC,IAAM,6BAA6B,CACtC,aACA,iBACA,aAAuC,wBACW;AAlNtD;AAmNI,QAAM,WAAW,YAAY;AAC7B,QAAM,WAAW,YAAY;AAC7B,QAAM,gBAAgB,CAAC,YAAY;AACnC,QAAM,QAAQ,KAAK;AAAA,IACf,SAAS;AAAA,IACT,SAAS;AAAA,IACT,YAAY,cAAc,YAAY,cAAc;AAAA,EACxD;AACA,QAAM,cAA6D,CAAC;AACpE,WAAS,IAAI,GAAG,IAAI,OAAO,KAAK,GAAG;AAC/B,UAAM,cACF,YAAY,oBAAgB,4BAAQ,YAAY,aAAa,CAAC,CAAC,IACzD,YAAY,aAAa,CAAC,IAC1B;AACV,UAAM,eACF,YAAY,kBAAc,4BAAQ,YAAY,WAAW,CAAC,CAAC,IACrD,YAAY,WAAW,CAAC,IACxB;AACV,UAAM,QAAQ,gBAAgB,cAAc;AAC5C,UAAM,iBAAgB,iBAAY,uBAAZ,mBAAiC;AACvD,UAAM,qBAAmB,iBAAY,aAAZ,mBAAuB,MAC1C,YAAY,wBAAwB,IAAI,YAAU;AAAA,MAC9C,MAAM;AAAA,MACN,OAAO,YAAY,SAAS,CAAC,EAAE,KAAK;AAAA,IACxC,EAAE,IACF,CAAC;AACP,UAAM,mBAAmB,OAAK;AA7OtC,UAAAC;AA8OY,YAAM,YAAWA,MAAA,2CAAa,SAAS,OAAtB,OAAAA,MAA4B,CAAC;AAC9C,YAAM,UAAU,OAAO,KAAK,QAAQ,EAAE,OAAO,CAAC,KAAK,SAAS;AACxD,cAAM,MAAM,OAAO,IAAI;AACvB,cAAM,QAAQ,OAAO,SAAS,IAAI,CAAC;AACnC,eAAO,iCAAK,MAAL,EAAU,CAAC,GAAG,GAAG,MAAM;AAAA,MAClC,GAAG,CAAC,CAAC;AAEL,iBAAW,EAAE,GAAG,QAAQ,CAAC;AAAA,IAC7B;AACA,gBAAY,KAAK;AAAA,MACb,UAAU,SAAS,CAAC;AAAA,MACpB,WAAW,SAAS,CAAC;AAAA,MACrB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ,CAAC;AAAA,EACL;AACA,SAAO;AACX;AAYA,IAAM,cAAc,CAAC,UAAyC;AAC1D,QAAM;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,kBAAkB;AAAA,IAClB,0BAA0B;AAAA,IAC1B;AAAA,EACJ,IAAI;AACJ,cAAY,eAAe,YAAY,gBAAgB;AACvD,QAAM,kBAAwB;AAAA,IAC1B,MAAM,2BAA2B,aAAa,iBAAiB,UAAU;AAAA,IACzE,CAAC,aAAa,YAAY,eAAe;AAAA,EAC7C;AAEA,QAAM,EAAE,eAAe,aAAa,YAAY,cAAc,IAAI,kBAAkB,GAAG;AAEvF,SACI,0EACK,gBAAgB,IAAI,CAAC,aAAa,MAC/B;AAAA,IAACD;AAAA,IAAA;AAAA,MAEG,KAAK,OAAO,CAAC;AAAA,MACb;AAAA,MACA;AAAA,OACI,cALP;AAAA,MAMG;AAAA,MACA;AAAA,MACA,WAAW;AAAA,MACX,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,YAAY,aAAW,cAAc,GAAG,OAAO;AAAA,MAC/C;AAAA;AAAA,EACJ,CACH,CACL;AAER;AAEA,IAAO,sBAAQ;;;ACnSf,IAAM,eAAe,CAAC;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,0BAA0B;AAAA,EAC1B;AACJ,MAAsC;AA5BtC;AA6BI,QAAI,gCAAK,YAAL,mBAAc,kBAAiB,CAAC,aAAa,WAAW,aAAa,QAAQ,EAAE,MAAM,MAAM,OAAO,GAAG;AACrG,SAAI,6CAAc,UAAS,yCAAW,UAAU,EAAE,YAAY,eAAe;AACzE,aACI,4CAAC,mBACG;AAAA,QAAC;AAAA;AAAA,UACG,aAAa;AAAA,UACb;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA;AAAA,MACJ,CACJ;AAAA,IAER;AACA,SACI,6CAAc,UAAS,yCAAW,UAClC,MAAM,QAAS,aAAiC,UAAU,GAC5D;AACE,aACI,4CAAC,mBACG;AAAA,QAAC;AAAA;AAAA,UACG,aAAa;AAAA,UACb;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA;AAAA,MACJ,CACJ;AAAA,IAER;AAAA,EACJ;AACA,SAAO;AACX;AAEA,IAAO,uBAAQ;;;AC/Cf,IAAM,aAAa,QAAM,SAAS,EAAE;AACpC,IAAM,cAAc,QAAM,UAAU,EAAE;AACtC,IAAM,cAAc,QAAM,UAAU,EAAE;AAGtC,IAAM,cAAc,CAAC,SAAmD;AACpE,MAAI,EAAC,6BAAM,cAAa;AACpB,WAAO;AAAA,EACX;AAEA,QAAM,qBAAqB,CAAC,WAA8B;AACtD,QAAI,OAAO,OAAO,CAAC,MAAM,SAAU,QAAO,CAAC,MAAkB;AAC7D,WAAO,OAAO,QAAQ,kBAAkB;AAAA,EAC5C;AAEA,QAAM,YAAY,mBAAmB,KAAK,WAAW;AACrD,MAAI,UAAU,WAAW,GAAG;AACxB,WAAO;AAAA,EACX;AAEA,QAAM,OAAO,UAAU,IAAI,OAAK,EAAE,CAAC,CAAC;AACpC,QAAM,OAAO,UAAU,IAAI,OAAK,EAAE,CAAC,CAAC;AAEpC,SAAO,CAAC,KAAK,OAAO,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,KAAK,OAAO,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM;AACxG;AAEA,IAAM,uBAAuB,0BAAO;AAAA,MAC9B,sBAAO,oBAAoB,CAAC;AAAA;AAG3B,IAAM,cAAc,CAAC,MAAuB,SAA0B;AACzE,MAAI,SAAS,QAAQ,SAAS,MAAM;AAChC,WAAO,KAAK,SAAS,KAAK,YAAQ,wBAAQ,KAAK,aAAa,KAAK,WAAW;AAAA,EAChF;AACA,SAAO,SAAS,QAAQ,SAAS;AACrC;AAEO,IAAM,oBAAoB,CAAC,WAA4B,cAAwC;AAClG,SACI,YAAY,UAAU,UAAU,UAAU,QAAQ,KAClD,UAAU,OAAO,UAAU,MAC3B,UAAU,QAAQ,UAAU,OAC5B,UAAU,WAAW,UAAU,UAC/B,UAAU,cAAc,UAAU,aAClC,UAAU,UAAU,UAAU,SAC9B,UAAU,YAAY,UAAU,WAChC,UAAU,gBAAgB,UAAU,eACpC,UAAU,mBAAmB,UAAU,sBACvC,wBAAQ,UAAU,kBAAkB,UAAU,gBAAgB,KAC9D,UAAU,kBAAkB,UAAU,iBACtC,UAAU,mBAAmB,UAAU,kBACvC,UAAU,qBAAqB,UAAU;AAEjD;AAEO,IAAM,oBAAoB,CAC7B,SACA,UACA,UACA,QACC;AAjFL;AAmFI,MAAI;AACJ,MAAI;AACJ,MAAI;AACJ,MAAI;AACA,iBAAY,gCAAK,YAAL,mBAAc,SAAS;AACnC,uBAAkB,gCAAK,YAAL,mBAAc,SAAS;AACzC,kBAAa,gCAAK,YAAL,mBAAc,UAAU;AAAA,EACzC,SAAQ;AACJ;AAAA,EACJ;AACA,MAAI,WAAW;AACX,QAAI,QAAQ,YAAY,OAAO;AAAA,EACnC;AACA,MAAI,iBAAiB;AACjB,QAAI,QAAQ,YAAY,QAAQ;AAAA,EACpC;AACA,MAAI,YAAY;AACZ,QAAI,QAAQ,aAAa,QAAQ;AAAA,EACrC;AACJ;AAuBO,IAAM,aAAmB;AAAA,EAC5B,CAAC;AAAA,IACG;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,0BAA0B;AAAA,IAC1B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,MAAoC;AAChC,UAAM,WAAW,YAAY,EAAE;AAC/B,UAAM,UAAU,WAAW,EAAE;AAC7B,UAAM,WAAW,YAAY,EAAE;AAC/B,UAAM,oBAAsF;AAAA,MACxF,OAAO;AAAA,QACH,MAAM;AAAA,QACN,UAAU;AAAA,QACV,YAAY,CAAC;AAAA,MACjB;AAAA,MACA,CAAC,QAAQ;AAAA,IACb;AACA,UAAM,CAAC,WAAW,YAAY,IAAU,uBAAS,KAAK;AACtD,UAAM,CAAC,WAAW,YAAY,IAAU,uBAAS,KAAK;AACtD,UAAM,CAAC,aAAa,WAAW,IAAU,sBAAQ,MAAM;AACnD,YAAM,WAAW,YAAY,QAAQ;AACrC,UAAI,CAAC,UAAU;AACX,eAAO,CAAC,MAAM,IAAI;AAAA,MACtB;AACA,YAAM,CAAC,KAAK,GAAG,IAAI;AACnB,aAAO,CAAC,KAAK,GAAG;AAAA,IACpB,GAAG,CAAC,QAAQ,CAAC;AACb,UAAM,CAAC,UAAU,WAAW,IAAU,uBAAS,oCAAe,CAAC;AAC/D,UAAM,CAAC,UAAU,WAAW,IAAU,uBAAS,oCAAe,CAAC;AAC/D,UAAM,WAAiB,sBAAQ,MAAM,cAAc,OAAO,IAAI,CAAC,OAAO,CAAC;AACvE,UAAM,EAAE,oBAAoB,uBAAuB,mBAAmB,IAAI,cAAc;AAExF,UAAM,eAAqB,0BAAY,MAAM;AAGzC,wBAAkB,SAAS,UAAU,UAAU,GAAG;AAIlD,UAAI,QAAQ,UAAU,UAAU;AAAA,QAC5B,MAAM;AAAA,QACN,MAAM;AAAA,MACV,CAAC;AACD,UAAI,QAAQ,SAAS;AAAA,QACjB,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,QAAQ,CAAC;AAAA,QACT,OAAO;AAAA,UACH,gBAAgB;AAAA,UAChB,cAAc;AAAA,QAClB;AAAA,MACJ,CAAC;AAID,UAAI,gBAAgB,eAAe;AAC/B,YAAI,QAAQ,SAAS;AAAA,UACjB,IAAI;AAAA,UACJ,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,QAAQ,CAAC;AAAA,UACT,OAAO;AAAA,YACH,cAAc;AAAA,YACd,cAAc;AAAA,UAClB;AAAA,QACJ,CAAC;AAAA,MACL;AAAA,IACJ,GAAG,CAAC,SAAS,UAAU,UAAU,KAAK,mBAAmB,OAAO,SAAS,WAAW,CAAC;AAErF,UAAM,wBAA8B,0BAAY,MAAM;AAlN9D;AAmNY,YAAM,SAAQ,SAAI,YAAJ,mBAAa,SAAS;AACpC,UAAI,CAAC,MAAO,QAAO,MAAM;AAAA,MAAC;AAE1B,YAAM,kBAAkB,CAAC,MAAqC;AAC1D,oBAAY,EAAE,OAAO,GAAG;AACxB,oBAAY,EAAE,OAAO,GAAG;AACxB,qBAAa,IAAI;AACjB,2BAAmB,QAAQ;AAC3B,YAAI,QAAQ,UAAU,EAAE,MAAM,SAAS;AAAA,MAC3C;AAEA,YAAM,mBAAmB,MAAM;AAC3B,qBAAa,KAAK;AAClB,2BAAmB,IAAI;AACvB,YAAI,QAAQ,UAAU,EAAE,MAAM,SAAS;AAAA,MAC3C;AAEA,YAAME,eAAc,CAAC,MAAqC;AACtD,YAAI,kBAAkB;AAClB,2DAAiB;AAAA,QACrB;AAAA,MACJ;AAEA,UAAI,QAAQ,GAAG,aAAa,SAAS,eAAe;AACpD,UAAI,QAAQ,GAAG,cAAc,SAAS,gBAAgB;AACtD,UAAI,QAAQ,GAAG,SAAS,SAASA,YAAW;AAE5C,aAAO,MAAM;AACT,YAAI,IAAI,SAAS;AACb,cAAI,QAAQ,IAAI,aAAa,SAAS,eAAe;AACrD,cAAI,QAAQ,IAAI,cAAc,SAAS,gBAAgB;AACvD,cAAI,QAAQ,IAAI,SAAS,SAASA,YAAW;AAAA,QACjD;AAAA,MACJ;AAAA,IACJ,GAAG,CAAC,SAAS,UAAU,KAAK,oBAAoB,kBAAkB,cAAc,CAAC;AAEjF,IAAM,wBAAU,MAAM;AAClB,mBAAa;AAAA,IACjB,GAAG,CAAC,YAAY,CAAC;AAEjB,IAAM,wBAAU,MAAM;AAClB,aAAO,sBAAsB;AAAA,IACjC,GAAG,CAAC,qBAAqB,CAAC;AAG1B,IAAM,wBAAU,MAAM;AAClB,UAAI,CAAC,IAAI,QAAS;AAElB,YAAM,QAAQ,IAAI,QAAQ,SAAS,OAAO;AAC1C,UAAI,CAAC,MAAO;AAEZ,UAAI,uBAAuB,QAAQ,uBAAuB,SAAS;AAC/D,YAAI,QAAQ,iBAAiB,SAAS,gBAAgB,OAAO;AAAA,MACjE,OAAO;AACH,YAAI,QAAQ,iBAAiB,SAAS,gBAAgB,UAAU,GAAG;AAAA,MACvE;AAAA,IACJ,GAAG,CAAC,oBAAoB,SAAS,SAAS,GAAG,CAAC;AAG9C,IAAM,wBAAU,MAAM,MAAM,kBAAkB,SAAS,UAAU,UAAU,GAAG,GAAG,CAAC,CAAC;AAEnF,QAAI,gBAAgB;AAGhB,mBAAa;AAAA,IACjB;AAEA,UAAM,cAAoB,0BAAY,MAAM;AACxC,UAAI,SAAS;AACT,gBAAQ;AAAA,MACZ;AACA,mBAAa,IAAI;AACjB,kBAAY,WAAW;AACvB,kBAAY,WAAW;AACvB,4BAAsB,OAAO;AAC7B,yBAAmB,QAAQ;AAAA,IAC/B,GAAG,CAAC,aAAa,aAAa,SAAS,UAAU,uBAAuB,oBAAoB,OAAO,CAAC;AAEpG,UAAM,aAAmB,0BAAY,MAAM;AACvC,mBAAa,KAAK;AAClB,4BAAsB,IAAI;AAC1B,yBAAmB,IAAI;AACvB;AAAA,IACJ,GAAG,CAAC,uBAAuB,oBAAoB,MAAM,CAAC;AAEtD,UAAM,gBAAsB;AAAA,MACxB,CAAC,MAA2B;AAzSxC;AA0SgB,+CAAY;AACZ,YAAI,qBAAqB,EAAE,QAAQ,cAAc,SAAS,EAAE,QAAQ,cAAc,QAAQ;AACtF,YAAE,eAAe;AAEjB,gBAAM,YAGF;AAAA,YACA,QAAQ;AAAA,cACJ,MAAK,mCAAY,gBAAZ,YAA2B;AAAA,cAChC,MAAK,mCAAY,gBAAZ,YAA2B;AAAA,YACpC;AAAA,YACA,eAAe;AAAA,UACnB;AACA,yBAAe,SAAS;AAAA,QAC5B;AAAA,MACJ;AAAA,MACA,CAAC,kBAAkB,gBAAgB,WAAW,aAAa,aAAa,UAAU,QAAQ;AAAA,IAC9F;AAIA,UAAM,kBAAwB,sBAAQ,MAAM;AACxC,UAAI,UAAW,QAAO,EAAE,KAAK,aAAa,KAAK,YAAY;AAC3D,UAAI,CAAC,aAAa,CAAC,IAAI,QAAS,QAAO,EAAE,KAAK,UAAU,KAAK,SAAS;AAGtE,YAAM,aAAa,IAAI,QAAQ,QAAQ,CAAC,UAAU,QAAQ,CAAC;AAC3D,iBAAW,KAAK;AAChB,YAAM,eAAe,IAAI,QAAQ,UAAU,UAAU;AACrD,aAAO,EAAE,KAAK,aAAa,KAAK,KAAK,aAAa,IAAI;AAAA,IAC1D,GAAG,CAAC,WAAW,WAAW,UAAU,UAAU,aAAa,aAAa,GAAG,CAAC;AAG5E,UAAM,cAAc,gBAAgB,QAAQ,gBAAgB;AAE5D,UAAM,YAAkB,sBAAQ,MAAM;AAClC,YAAM,qBACF,OAAO,cAAc,YAAY,CAAC,OAAO,MAAM,SAAS,IAAI,UAAU,SAAS,IAAI;AAEvF,UAAI,sBAAkB,4BAAQ,gBAAE,2BAA2B,GAAG;AAAA,QAC1D,QAAQ,OAAO,SAAS;AAAA,QACxB,WAAW;AAAA,MACf,CAAC;AAED,UAAI,kBAAkB;AAClB,8BAAkB,4BAAQ,gBAAE,gCAAgC,GAAG,EAAE,OAAO,gBAAgB,CAAC;AAAA,MAC7F;AAEA,aAAO;AAAA,IACX,GAAG,CAAC,QAAQ,WAAW,gBAAgB,CAAC;AAExC,WACI;AAAA,MAAC;AAAA;AAAA,QACG;AAAA,QACA;AAAA,QACA,UAAU,gBAAgB;AAAA,QAC1B,WAAW,gBAAgB;AAAA,QAC3B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,gBAAgB;AAAA,QAChB,iBAAiB;AAAA;AAAA,MAEjB;AAAA,QAAC;AAAA;AAAA,UACG,aAAU;AAAA,UACV,KAAK;AAAA,UACL,MAAM,oBAAoB,cAAc,WAAW;AAAA,UACnD,cAAY;AAAA,UACZ,eAAa,CAAC;AAAA,UACd,SAAS;AAAA,UACT,QAAQ;AAAA,UACR,WAAW;AAAA,UACX,SAAS,mBAAmB,iBAAiB;AAAA;AAAA,MACjD;AAAA,IACJ;AAAA,EAER;AAAA,EACA;AACJ;AAEA,WAAW,cAAc;AAYzB,IAAM,kBAAkB,CAAC,UAA6C;AAxYtE;AAyYI,QAAM;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,0BAA0B;AAAA,IAC1B;AAAA,EACJ,IAAI;AACJ,QAAM,aAAa,KAAK,IAAI,KAAK,IAAI,mDAAiB,mBAAmB,CAAC,GAAG,CAAC;AAC9E,QAAM,mBAAkB,wBAAmB,mDAAiB,YAAY,UAAU,MAA1D,YAA+D,CAAC;AACxF,QAAM,UAAS,wDAAiB,eAAjB,mBAA6B,IAAI,YAAU,+BAAO,UAAS,IAAI,MAAM,MAAM,GAAG,CAAC,IAAI;AAElG,QAAM,QAAQ,KAAK;AAAA,KACf,wDAAiB,YAAjB,mBAA0B;AAAA,KAC1B,wDAAiB,eAAjB,mBAA6B;AAAA,KAC7B,8DAAiB,SAAjB,mBAAuB,WAAvB,YAAiC;AAAA,KACjC,mDAAiB,eAAc,gBAAgB,cAAc;AAAA,EACjE;AAEA,QAAM,EAAE,eAAe,aAAa,YAAY,cAAc,IAAI,kBAAkB,GAAG;AACvF,QAAM,gBAAe,8DAAiB,YAAjB,mBAA0B,MAAM,GAAG,WAAnC,YAA6C,CAAC;AAEnE,QAAM,yBACF,qBAAK,YAAY,EAAE,WAAW,aAAa,SACrC,eACA,aAAa,IAAI,CAAC,IAAI,MAAM,GAAG,EAAE,GAAG,CAAC,EAAE;AACjD,QAAM,oBAAmB,mDAAiB,YACpC,gBAAgB,SAAS,IAAI,wBAAsB;AAC/C,QAAI,gBAAgB,yBAAyB;AACzC,aAAO,gBAAgB,wBAAwB,IAAI,YAAU;AAAA,QACzD,MAAM;AAAA,QACN,OAAO,wBAAwB,mBAAmB,KAAK,CAAC;AAAA,MAC5D,EAAE;AAAA,IACN;AACA,WAAO,CAAC;AAAA,EACZ,CAAC,IACD,CAAC;AAEP,QAAM,sBAAqB,mDAAiB,uBAAsB;AAElE,QAAM,iBAAiB,CAAC,GAAG,MAAM;AAC7B,UAAM,UAAU,eAAe,iBAAiB,CAAC;AACjD,eAAW,EAAE,GAAG,QAAQ,CAAC;AAAA,EAC7B;AAEA,MAAI,CAAC,OAAO,EAAC,mDAAiB,OAAM;AAChC,WAAO;AAAA,EACX;AAEA,MAAI,gBAAgB;AAChB,sBAAkB,KAAK;AAAA,EAC3B;AAEA,SACI,4CAAC,aACI,mBAAmB,IAAI,CAAC,IAAI,MAAM;AAC/B,UAAM,SAAS,aAAa,CAAC;AAC7B,UAAM,YAAY,gBAAgB,WAAW,CAAC;AAE9C,WACI;AAAA,MAAC;AAAA;AAAA,QACG,KAAK;AAAA,QACL;AAAA,QACA,UAAU,gBAAgB,KAAK,CAAC;AAAA,QAChC;AAAA,QACA,OAAO,OAAO,CAAC;AAAA,QACf,SAAS,gBAAgB,CAAC;AAAA,QAC1B,aAAa,gBAAgB;AAAA,QAC7B;AAAA,QACA;AAAA,QACA;AAAA,QACA,kBAAkB,iBAAiB,CAAC;AAAA,QACpC,eAAe,yDAAqB;AAAA,QACpC,gBAAgB,OAAK,eAAe,GAAG,CAAC;AAAA,QACxC;AAAA,QACA,WAAW;AAAA,QACX,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,YAAY,aAAW,cAAc,GAAG,OAAO;AAAA,QAC/C;AAAA;AAAA,IACJ;AAAA,EAER,CAAC,CACL;AAER;AAEA,IAAO,0BAAQ;;;ACjef;AAAA;AAAA;AAAA;AACA,IAAAC,kBAA+B;AAC/B,4BAAc;AACd,IAAO,kBAAS,aAAaA,kBAA8B,0BAAUA;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAC,kBAA+B;AAC/B,gCAAc;AACd,IAAO,sBAAS,aAAaA,kBAA8B,0BAAUA;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAC,kBAA+B;AAC/B,oCAAc;AACd,IAAO,0BAAS,aAAaA,kBAA8B,0BAAUA;;;ACmBrE,IAAM,uBAAuB,CAAC,UAA6C;AAtB3E;AAuBI,QAAM;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,IAAI;AACJ,QAAM,aAAa,KAAK,IAAI,KAAK,IAAI,mDAAiB,mBAAmB,CAAC,GAAG,CAAC;AAC9E,QAAM,eAAkE;AAAA,IACpE,MAAM;AAAA,IACN,YAAY,EAAE,MAAM,GAAG;AAAA,IACvB,UAAU;AAAA,EACd;AACA,QAAM,CAAC,SAAS,UAAU,IAAU;AAAA,IAChC;AAAA,MACI,MAAM;AAAA,MACN,UAAU,CAAC,YAAY;AAAA,IAC3B;AAAA,EACJ;AACA,QAAM,CAAC,cAAc,eAAe,IAAU,uBAAS,IAAI;AAC3D,QAAM,CAAC,cAAc,eAAe,IAAU,uBAAS;AAAA,IACnD,SAAS;AAAA,EACb,CAAC;AAED,QAAM,EAAE,eAAe,aAAa,YAAY,cAAc,IAAI,kBAAkB,GAAG;AAGvF,EAAM,wBAAU,MAAM;AAClB,QAAI,YAAY;AAChB,UAAM,cAAc,oBAAY,OAAO;AACvC,gBAAY,mBAAmB,IAAI,wBAAgB,CAAC;AAEpD,UAAM,cAAc,MAAY;AAC5B,UAAI;AACA,cAAM,cAAe,MAAM,YAAY,SAAS,gBAAgB,MAAM;AAItE,YAAI,CAAC,WAAW;AACZ;AAAA,QACJ;AACA,mBAAW,WAAW;AACtB,wBAAgB,IAAI;AAAA,MACxB,SAAS,GAAG;AACR,YAAI,CAAC,WAAW;AACZ;AAAA,QACJ;AACA,wBAAgB,EAAE,SAAS,aAAa,QAAQ,EAAE,UAAU,GAAG,CAAC;AAChE,wBAAgB,KAAK;AAAA,MACzB;AAAA,IACJ;AAEA,gBAAY;AAEZ,WAAO,MAAM;AACT,kBAAY;AAAA,IAChB;AAAA,EACJ,GAAG,CAAC,gBAAgB,MAAM,CAAC;AAE3B,QAAM,wBAA8B,sBAAQ,MAAM;AAC9C,QAAI,iBAAiB;AACrB,QAAI,gBAAgB,WAAW,cAAc;AACzC,YAAM,kBAAkB,OAAO,KAAK,QAAQ,SAAS,CAAC,EAAE,UAAU;AAoBlE,YAAM,cAAc,QAAQ,SAAS;AAAA,QAAQ,aACzC,gBAAgB,OAAO,SAAO,QAAQ,WAAW,GAAG,MAAM,gBAAgB,QAAQ,CAAC,CAAC;AAAA,MACxF,EAAE,CAAC;AAEH,UAAI,gBAAgB,QAAW;AAC3B,yBAAiB;AAAA,MACrB;AAAA,IACJ;AACA,WAAO;AAAA,EACX,GAAG,CAAC,gBAAgB,SAAS,OAAO,CAAC;AAErC,QAAM,UAAS,wDAAiB,eAAjB,mBAA6B,IAAI,YAAU,+BAAO,UAAS,IAAI,MAAM,MAAM,GAAG,CAAC,IAAI;AAClG,QAAM,mBAAkB,wBAAmB,mDAAiB,YAAY,UAAU,MAA1D,YAA+D,CAAC;AAExF,QAAM,sBAAsB,CAAC,OAA0D;AACnF,UAAM,iBAMF;AAAA,MACA,OAAO,gBAAgB;AAAA,MACvB,WAAW;AAAA,MACX,SAAS;AAAA,MACT,MAAM;AAAA,MACN,KAAK;AAAA,IACT;AAEA,UAAM,UAAU,GAAG,WAAW,qBAAqB;AACnD,mBAAe,OACX,OAAO,YAAY,YAAY,OAAO,YAAY,WAAW,OAAO,OAAO,IAAI;AAEnF,QAAI,gBAAgB,SAAS;AACzB,YAAM,cAAc,eAAe;AACnC,YAAM,UAAU,gBAAgB,QAAQ,QAAQ,WAAW;AAC3D,UAAI,YAAY,IAAI;AAChB,uBAAe,MAAM,gBAAgB,QAAQ;AAAA,MACjD,OAAO;AACH,uBAAe,QAAQ,OAAO,OAAO;AACrC,uBAAe,YAAY,gBAAgB,WAAW,OAAO;AAC7D,uBAAe,UAAU,gBAAgB,OAAO;AAChD,uBAAe,MAAM;AAAA,MACzB;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAEA,QAAM,2BAAiC,sBAAQ,MAAM;AACjD,QAAI,CAAC,aAAc,QAAO,CAAC;AAC3B,WAAO,QAAQ,SAAS,IAAI,QAAM,oBAAoB,EAAE,CAAC;AAAA,EAC7D,GAAG;AAAA,IACC,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR;AAAA,EACJ,CAAC;AAED,QAAM,iBAAiB,CAAC,GAAG,MAAM;AAC7B,UAAM,UAAU,eAAe,iBAAiB,CAAC;AACjD,eAAW,EAAE,GAAG,QAAQ,CAAC;AAAA,EAC7B;AAEA,MAAI,gBAAgB;AAChB,sBAAkB,KAAK;AAAA,EAC3B;AAEA,QAAM,oBAAmB,mDAAiB,YACpC,gBAAgB,SAAS,IAAI,wBAAsB;AArL7D,QAAAC;AAsLc,UAAM,iBAAgBA,MAAA,gBAAgB,4BAAhB,OAAAA,MAA2C,CAAC;AAClE,WAAO,cAAc,IAAI,YAAU;AAAA,MAC/B,MAAM;AAAA,MACN,OAAO,wBAAwB,mBAAmB,KAAK,CAAC;AAAA,IAC5D,EAAE;AAAA,EACN,CAAC,IACD,CAAC;AAEP,SACI,4CAAC,aACI,CAAC,gBACE;AAAA,IAAC;AAAA;AAAA,MACG,aAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA,OAAM;AAAA,MACN,SAAS,aAAa;AAAA;AAAA,EAC1B,GAEH,iBACI,MAAM;AACH,QAAI,cAAc;AAClB,WAAO,yBAAyB,IAAI,CAAC,IAAI,MAAM;AA5MnE,UAAAA,KAAAC;AA6MwB,YAAM,YAAWD,MAAA,QAAQ,SAAS,CAAC,MAAlB,gBAAAA,IAAqB;AACtC,YAAM,WACF,aAAa,SAAS,SAAS,kBAAkB,SAAS,SAAS,aAC7D,WACA;AAGV,UAAI,CAAC,UAAU;AACX,eAAO;AAAA,MACX;AAEA,YAAM,qBAAqB;AAC3B,qBAAe;AAEf,aACI;AAAA,QAAC;AAAA;AAAA,UACG,KAAK,GAAG;AAAA,UACR,IAAI,GAAG;AAAA,UACP;AAAA,UACA,OAAO,GAAG;AAAA,UACV,SAAS,GAAG;AAAA,UACZ,aAAa,gBAAgB;AAAA,UAC7B,QAAQ,GAAG;AAAA,UACX,WACI,OAAO,GAAG,cAAc,WAAW,GAAG,YAAY,OAAO,GAAG,SAAS;AAAA,UAEzE,gBAAgB,OAAK,eAAe,GAAG,GAAG,GAAG;AAAA,UAC7C;AAAA,UACA;AAAA,UACA,kBAAkB,iBAAiB,GAAG,GAAG;AAAA,UACzC,gBAAeC,MAAA,gBAAgB,uBAAhB,gBAAAA,IAAqC,GAAG;AAAA,UACvD,WAAW;AAAA,UACX,SAAS;AAAA,UACT,QAAQ;AAAA,UACR,YAAY,aAAW,cAAc,oBAAoB,OAAO;AAAA,UAChE;AAAA;AAAA,MACJ;AAAA,IAER,CAAC;AAAA,EACL,GAAG,CACX;AAER;AAEA,IAAO,+BAAQ;;;ACtNR,IAAM,iBAAmC,CAAC,GAAG,CAAC;AAC9C,IAAM,mCAAmC;AACzC,IAAM,mCAAmC;AACzC,IAAM,qBAAqB;AAC3B,IAAM,qBAAqB;AAC3B,IAAM,6BAA6B;AACnC,IAAM,yBAAyB;AAC/B,IAAM,eAAe;AAgCrB,IAAM,cAAc,CAAC,UAA+B;AACvD,QAAM,cAAc,kBAAO,KAAK;AAChC,SAAO;AAAA,IACH,OAAO,kBAAO,YAAY,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,KAAK,KAAK;AAAA,IACzD,SAAS,YAAY,MAAM;AAAA,EAC/B;AACJ;AAEA,IAAM,yBAAyB,0BAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAQd,WAAS,MAAM,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAO7D,IAAM,wBAAwB,0BAAO,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAM3D,IAAM,2BAA2B,0BAAO,sBAAsB;AAAA,WAInD,WAAU,MAAM,mBAAmB,UAAU,MAAO;AAAA;AAG/D,IAAM,gBAAgB,0BAAO,cAAM;AAAA;AAAA;AAAA;AAAA,wBAQX,WAAS,MAAM,sBAAsB;AAAA;AAAA;AAAA;AAK7D,IAAM,eAAe,0BAAO,aAAa,EAAE,MAAM;AAAA,EAC7C,aAAa;AAAA,EACb,iBAAiB;AACrB,CAAC;AAAA,qYACoY,WAC7X,MAAM,wBAAwB,KAAK,mBAAmB,WACtD,MAAM,wBAAwB,OAAO;AAAA;AAG7C,IAAM,gBAAgB,0BAAO,aAAa,EAAE,MAAM;AAAA,EAC9C,aAAa;AACjB,CAAC;AAAA,8WAC6W,WACtW,MAAM,wBAAwB,KAAK,mBAAmB,WACtD,MAAM,wBAAwB,OAAO;AAAA;AAG7C,IAAM,wBAAwB,0BAAO,aAAa,EAAE,MAAM;AAAA,EACtD,aAAa;AACjB,CAAC;AAAA;AAAA,mMAEkM,WAC3L,MAAM,wBACD,KAAK,iHAAiH,WAC3H,MAAM,wBAAwB,KAAK;AAAA;AAG3C,yBAAiB,cAAc;AAE/B,IAAM,iBAA8B,CAAC;AACrC,IAAM,sBAAsB,EAAE,MAAM,oBAAK;AAEzC,IAAM,UAAU,CAAC;AAAA,EACb,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,kBAAkB;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA,yBAAyB;AAAA,EACzB,yBAAyB;AAAA,EACzB,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,mBAAmB;AAAA,EACnB,gBAAgB;AAAA,EAChB,mBAAmB;AAAA,EACnB;AAAA,EACA,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,kBAAkB;AAAA,EAClB;AAAA,EACA;AAAA,EACA,mBAAmB;AACvB,MAAiC;AAC7B,QAAM,EAAE,mBAAmB,iBAAiB,QAAI,0BAAgC,kBAAU;AAC1F,QAAM,uBAAmB,sBAAuB,IAAI;AACpD,QAAM,UAAM,sBAAY,IAAI;AAC5B,QAAM,mBAAe,sBAAqB,IAAI;AAC9C,QAAM,gCAA4B,sBAAgB,KAAK;AACvD,QAAM,2BAAuB,sBAAgB,KAAK;AAClD,QAAM,CAAC,eAAe,gBAAgB,IAAU,uBAAkB,KAAK;AAEvE,QAAM,EAAE,YAAY,kBAAkB,gBAAgB,QAAI;AAAA,IACtD,MAAM,cAAc,EAAE,mBAAmB,iBAAiB,CAAC;AAAA,IAC3D,CAAC,mBAAmB,gBAAgB;AAAA,EACxC;AAEA,QAAM,CAAC,kBAAkB,oBAAoB,IAAU,uBAAiB,sBAAQ,YAAY;AAC5F,QAAM,0BAAsB,sBAAO,gBAAgB;AACnD,QAAM,sBAAsB,aAAW;AACnC,wBAAoB,UAAU;AAC9B,yBAAqB,OAAO;AAAA,EAChC;AACA,QAAM,CAAC,aAAa,cAAc,IAAU,uBAAkB,KAAK;AACnE,QAAM,CAAC,gBAAgB,iBAAiB,IAAU,uBAAkB,KAAK;AAMzE,QAAM,CAAC,YAAY,cAAc,IAAU,uBAAiB,EAAE;AAC9D,QAAM,oBAAgB,sBAAO,UAAU;AACvC,QAAM,gBAAgB,gBAAc;AAChC,kBAAc,UAAU;AACxB,mBAAe,UAAU;AAAA,EAC7B;AAEA,QAAM,mBAAe,uBAA0B,MAAM;AACjD,QAAI,CAAC,cAAc,MAAM,GAAG;AACxB,aAAO;AAAA,IACX;AACA,WAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;AAAA,EAChC,GAAG,CAAC,MAAM,CAAC;AAGX,QAAM,gBAAY,uBAAQ,MAAM;AAC5B,QAAI,SAAS,QAAW;AACpB,aAAO;AAAA,IACX;AACA,WAAO;AAAA,EACX,GAAG,CAAC,IAAI,CAAC;AAET,QAAM,4BAA4B,CAAC,qBAA8B;AAC7D,sBAAkB,gBAAgB;AAAA,EACtC;AAEA,QAAM,2BAAuB;AAAA,IACzB,OAAK;AACD,sBAAgB,CAAC;AAAA,IACrB;AAAA,IACA,CAAC,eAAe;AAAA,EACpB;AAEA,QAAM,sBAAkB,2BAAY,MAAM;AACtC,QAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,SAAS;AAC5B;AAAA,IACJ;AACA,UAAM,eAAe,yBAAyB,CAAC,OAAO,CAAC,CAAC,CAAC;AACzD,QAAI,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,QACI,SAAS,oBAAoB;AAAA,QAC7B,SAAS;AAAA,MACb;AAAA,MACA,EAAE,wBAAwB,KAAK;AAAA,IACnC;AAAA,EACJ,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,8BAA0B,2BAAY,MAAM;AAE9C,QAAI,QAAQ,GAAG,WAAW,WAAS;AAC/B,YAAM,eAAe,IAAI,QAAQ,QAAQ;AACzC,UAAI,eAAe,cAAc,SAAS;AACtC,sBAAc,YAAY;AAAA,MAC9B;AAEA,UAAI,+BAAO,wBAAwB;AAC/B;AAAA,MACJ;AACA,0BAAoB,YAAY;AAAA,IACpC,CAAC;AAAA,EACL,GAAG,CAAC,CAAC;AAEL,QAAM,oBAAgB;AAAA,IAClB,cAAY;AACR,UAAI,UAAU,IAAI,wBAAI;AAAA,QAClB,WAAW,iBAAiB;AAAA,QAC5B,yBAAyB;AAAA,UACrB,uBAAuB;AAAA,QAC3B;AAAA,QACA,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,qBAAqB;AAAA,QACrB,QAAQ;AAAA,UACJ,kDAA8C,gBAAE,+BAA+B;AAAA,UAC/E,8CAA0C,gBAAE,iCAA4B;AAAA,UACxE,iDAA6C,gBAAE,iCAAiC;AAAA,QACpF;AAAA,QACA,oBAAoB;AAAA,SACjB,iCAAiC,UAAU,mBAAmB,EACpE;AAGD,UAAI,QAAQ,GAAG,QAAQ,MAAM;AACzB,aAAI,iCAAQ,UAAS,KAAK,WAAW,UAAa,SAAS,QAAW;AAClE,wBAAc,IAAI,QAAQ,QAAQ,CAAC;AACnC,cAAI,QAAQ,KAAK,WAAW,MAAM;AAC9B,oCAAwB;AAAA,UAC5B,CAAC;AACD,0BAAgB;AAAA,QACpB,OAAO;AACH,kCAAwB;AAAA,QAC5B;AACA,uBAAe,IAAI;AAEnB,mBAAW,MAAM;AA5SjC;AA6SoB,eAAI,gCAAK,YAAL,mBAAc,QAAQ;AACtB,gBAAI,QAAQ,OAAO;AAAA,UACvB;AACA,cAAI,aAAa,OAAO,UAAU,SAAS,YAAY;AACnD,sBAAU,KAAK;AAAA,UACnB;AAAA,QACJ,GAAG,GAAG;AAAA,MACV,CAAC;AAED,UAAI,QAAQ,GAAG,aAAa,MAAM;AAC9B,yBAAiB,IAAI;AAAA,MACzB,CAAC;AACD,UAAI,QAAQ,GAAG,aAAa,OAAK;AAC7B,YAAI,EAAE,eAAe;AACjB,2BAAiB,IAAI;AAAA,QACzB;AAAA,MACJ,CAAC;AAGD,UAAI,QAAQ,GAAG,WAAW,MAAM;AAC5B,cAAM,YAAY,IAAI,QAAQ,UAAU;AACxC,6BAAqB;AAAA,UACjB,QAAQ,CAAC,UAAU,KAAK,UAAU,GAAG;AAAA,UACrC,MAAM,IAAI,QAAQ,QAAQ;AAAA,QAC9B,CAAC;AAAA,MACL,CAAC;AAED,UAAI,QAAQ,GAAG,aAAa,MAAM;AAC9B,6BAAqB,UAAU;AAAA,MACnC,CAAC;AAED,UAAI,QAAQ,GAAG,WAAW,MAAM;AAC5B,mBAAW,MAAM;AACb,cAAI,sBAAsB;AACtB,iCAAqB,UAAU;AAAA,UACnC;AAAA,QACJ,GAAG,GAAG;AAAA,MACV,CAAC;AAED,UAAI,QAAQ,GAAG,aAAa,MAAM;AAC9B,6BAAqB,UAAU;AAAA,MACnC,CAAC;AAED,UAAI,QAAQ,GAAG,WAAW,MAAM;AAC5B,mBAAW,MAAM;AACb,cAAI,sBAAsB;AACtB,iCAAqB,UAAU;AAAA,UACnC;AAAA,QACJ,GAAG,GAAG;AAAA,MACV,CAAC;AAED,UAAI,QAAQ,GAAG,UAAU,MAAM;AAC3B,cAAM,eAAe,IAAI,QAAQ,QAAQ;AAIzC,YACI,oBAAoB,WAAW,cAAc,WAC7C,iBAAiB,cAAc,SACjC;AACE,wBAAc,YAAY;AAAA,QAC9B;AAAA,MACJ,CAAC;AAAA,IACL;AAAA,IACA,CAAC,cAAc,WAAW,iCAAQ,MAAM;AAAA,EAC5C;AAEA,QAAM,sBAAkB,2BAAY,MAAM;AACtC,iBAAa,UAAU,IAAI,iCAAa;AAAA,MACpC,UAAU;AAAA,MACV,MAAM;AAAA,IACV,CAAC;AACD,QAAI,QAAQ,WAAW,aAAa,OAAO;AAAA,EAC/C,GAAG,CAAC,SAAS,CAAC;AAEd,QAAM,kBAAc,2BAAY,MAAM;AAxX1C;AAyXQ,QAAI,WAAW;AACX,yDAAc,YAAd,mBAAuB,QAAQ;AAAA,IACnC;AAAA,EACJ,GAAG,CAAC,WAAW,SAAS,CAAC;AAEzB,+BAAU,MAAM;AACZ,QAAI,IAAI,SAAS;AACb,UAAI,QAAQ,OAAO;AAAA,IACvB;AAAA,EACJ,GAAG,CAAC,OAAO,MAAM,CAAC;AAElB,+BAAU,MAAM;AACZ,QAAI,IAAI,SAAS;AAKb,UACI,qBAAqB,cAAc,YAClC,SAAS,UAAa,OAAO,cAAc,UAC9C;AACE;AAAA,MACJ;AACA,YAAM,YAAY,IAAI,QAAQ,UAAU;AACxC,2BAAqB;AAAA;AAAA;AAAA,QAGjB,QAAQ,CAAC,UAAU,KAAK,UAAU,GAAG;AAAA,QACrC,MAAM;AAAA,MACV,CAAC;AAAA,IACL;AAAA,EACJ,GAAG,CAAC,kBAAkB,oBAAoB,CAAC;AAE3C,+BAAU,MAAM;AAEZ,QAAI,OAAO,KAAK,UAAU,EAAE,WAAW,MAAM,CAAC,uBAAuB,CAAC,0BAA0B;AAE5F,cAAQ;AAAA,QACJ;AAAA,MACJ;AACA;AAAA,IACJ;AAEA,UAAM,WAAW,YAAY;AAAA,MACzB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAa;AAAA,MACb;AAAA,MACA;AAAA,IACJ,CAAC;AAED,QAAI,CAAC,iBAAiB,QAAQ,GAAG;AAC7B;AAAA,IACJ;AAEA,aAAS,UAAU;AAGnB,QAAI,IAAI,SAAS;AACb,YAAM,OAAO,IAAI,QAAQ,SAAS;AAClC,YAAM,WAAO,qBAAK,UAAU,CAAC,SAAS,QAAQ,KAAK,CAAC;AAKpD,UAAI,CAAC,kBAAkB,MAAM,IAAI,GAAG;AAEhC,YAAI,QAAQ,aAAS,qBAAK,UAAU,CAAC,SAAS,QAAQ,KAAK,CAAC,CAAuB;AACnF,0BAAkB,IAAI;AAAA,MAC1B;AACA,YAAM,EAAE,SAAS,QAAQ,IAAI,iCAAiC,UAAU,mBAAmB;AAC3F,UAAI,QAAQ,WAAW,OAAO;AAC9B,UAAI,QAAQ,WAAW,OAAO;AAC9B,kBAAY;AAAA,IAChB,OAAO;AAGH,wBAAc,qBAAK,UAAU,CAAC,SAAS,QAAQ,KAAK,CAAC,CAAuB;AAC5E,sBAAgB;AAAA,IACpB;AAAA,EACJ,GAAG;AAAA,IACC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,CAAC;AAED,+BAAU,MAAM;AACZ,QAAI,IAAI,SAAS;AACb,UAAI,0BAA0B,SAAS;AACnC;AAAA,MACJ;AACA,UAAI,qBAAqB,SAAS;AAC9B;AAAA,MACJ;AACA,UAAI,QAAQ,MAAM;AAAA,QACd,QAAQ;AAAA;AAAA;AAAA,QAGR,MAAM,KAAK,IAAI,WAAW,cAAc,OAAO;AAAA,MACnD,CAAC;AAAA,IACL;AAAA,EACJ,GAAG,CAAC,cAAc,SAAS,CAAC;AAE5B;AAAA,IACI,MAAM,MAAM;AACR,UAAI,IAAI,SAAS;AACb,YAAI,QAAQ,OAAO;AAAA,MACvB;AAAA,IACJ;AAAA,IACA,CAAC;AAAA,EACL;AAEA,QAAM,CAAC,KAAK,IAAI;AAGhB,+BAAU,MAAM;AACZ,QAAI,eAAe,SAAS,SAAS,UAAa,WAAW,QAAW;AACpE,sBAAgB;AAChB,gCAA0B,UAAU;AAAA,IACxC;AAAA,EACJ,GAAG;AAAA,IACC,+BAAO;AAAA,IACN,+BAA4B;AAAA,IAC5B,+BAA4B;AAAA,IAC5B,+BAA+B;AAAA,IAChC;AAAA,IACA;AAAA,EACJ,CAAC;AAED,QAAM,sBAAkB,2BAAY,MAAM;AACtC,WAAO,WAAW,UAAa,SAAS,UAAa;AAAA,EACzD,GAAG,CAAC,QAAQ,MAAM,aAAa,CAAC;AAEhC,QAAM,uBAAmB,2BAAY,MAAM;AACvC,8BAA0B,UAAU;AACpC,qBAAiB,KAAK;AAEtB,QAAI,IAAI,SAAS;AACb,UAAI,WAAW,UAAa,SAAS,QAAW;AAC5C,YAAI,QAAQ,OAAO;AAAA,UACf,QAAQ;AAAA,UACR,MAAM,KAAK,IAAI,WAAW,cAAc,OAAO;AAAA,QACnD,CAAC;AAAA,MACL,OAAO;AACH,wBAAgB;AAAA,MACpB;AAAA,IACJ;AAEA,yBAAqB,EAAE,QAAQ,QAAW,MAAM,OAAU,CAAC;AAAA,EAC/D,GAAG,CAAC,sBAAsB,iBAAiB,QAAQ,MAAM,cAAc,SAAS,CAAC;AAEjF,QAAM,2BAA2B,4BAA4B,iBAAiB,OAAO;AACrF,QAAM,0BAA0B,QAAQ,wBAAwB;AAChE,QAAM,qBAAqB,CAAC,aACxB,2BACI,4CAAC,+CAAkB,QAAQ,4BAA2B,QAAS,IAE/D;AAGR,QAAM,mBAAe,2BAAY,MAAM;AACnC,QAAI,IAAI,SAAS;AACb,UAAI,QAAQ,OAAO;AAAA,IACvB;AAAA,EACJ,GAAG,CAAC,CAAC;AAEL,QAAM,oBAAgB,2BAAY,MAAM;AACpC,QAAI,IAAI,SAAS;AACb,UAAI,QAAQ,QAAQ;AAAA,IACxB;AAAA,EACJ,GAAG,CAAC,CAAC;AAEL,SACI;AAAA,IAAC;AAAA;AAAA,MACG,cAAY,aAAS,gBAAE,KAAK;AAAA,MAC5B,WAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,yBAAyB,YAAY,sBAAsB;AAAA,MAC3D,KAAK;AAAA,MACL;AAAA,MACA;AAAA;AAAA,IAEC,oBACG,4CAAC,yBAAsB,0BACnB,4CAAC,mBAAQ,aAAS,gBAAE,SAAS,GAAG,qBAAoB,SAAQ,kBAAiB,WACzE;AAAA,MAAC;AAAA;AAAA,QACG,SAAS;AAAA,QACT;AAAA,QACA;AAAA,QACA,yBAAyB,YAAY,sBAAsB;AAAA;AAAA,IAC/D,CACJ,GACA,4CAAC,mBAAQ,aAAS,gBAAE,UAAU,GAAG,qBAAoB,SAAQ,kBAAiB,WAC1E;AAAA,MAAC;AAAA;AAAA,QACG,SAAS;AAAA,QACT;AAAA,QACA;AAAA,QACA,yBAAyB,YAAY,sBAAsB;AAAA;AAAA,IAC/D,CACJ,CACJ;AAAA,IAEH,gBAAgB,KACb;AAAA,MAAC;AAAA;AAAA,QACG;AAAA,QACA;AAAA;AAAA,MAEA,4CAAC,mBAAQ,aAAS,gBAAE,aAAa,GAAG,qBAAoB,SAAQ,kBAAiB,WAC7E;AAAA,QAAC;AAAA;AAAA,UACG,SAAS;AAAA,UACT;AAAA,UACA;AAAA,UACA,yBAAyB,YAAY,sBAAsB;AAAA;AAAA,MAC/D,CACJ;AAAA,IACJ;AAAA,IAEH;AAAA,MACG,0EACK,eACG,UACC,MAAM,SAAS,yCAAW,UAAU,MAAM,SAAS,yCAAW,WAC3D;AAAA,QAAC;AAAA;AAAA,UACG,cAAc;AAAA,UACd;AAAA,UACA;AAAA,UACA,MAAM;AAAA,UACN;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA;AAAA,MACJ,GAEP,eACG,SACA,MAAM,SAAS,yCAAW,cACzB,MAA8B,UAC3B,4CAAC,mBACG;AAAA,QAAC;AAAA;AAAA,UACG;AAAA,UACA;AAAA,UACA;AAAA,UACA,iBAAiB;AAAA,UACjB;AAAA,UACA,mBAAmB;AAAA,UACnB;AAAA,UACA;AAAA;AAAA,MACJ,CACJ,GAEP,eACG,SACA,MAAM,SAAS,yCAAW,cAC1B,CAAE,MAA8B,UAC5B,4CAAC,mBACG;AAAA,QAAC;AAAA;AAAA,UACG;AAAA,UACA,iBAAiB;AAAA,UACjB;AAAA,UACA,mBAAmB;AAAA,UACnB;AAAA,UACA;AAAA,UACA;AAAA;AAAA,MACJ,CACJ,CAEZ;AAAA,IACJ;AAAA,EACJ;AAER;AAEA,IAAO,kBAAQ;;;ACtpBf;AAAA;AAAA;AAAA;AACA,IAAAC,kBAA+B;AAC/B,mCAAc;AACd,IAAO,yBAAS,aAAaA,kBAA8B,0BAAUA;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAC,kBAA+B;AAC/B,wCAAc;AACd,IAAO,8BAAS,aAAaA,kBAA8B,0BAAUA;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAC,kBAA+B;AAC/B,iCAAc;AACd,IAAO,uBAAS,aAAaA,kBAA8B,0BAAUA;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAC,kBAA+B;AAC/B,gCAAc;AACd,IAAO,sBAAS,aAAaA,kBAA8B,0BAAUA;;;ACkBrE,SAAS,cAAc,WAAiC;AACpD,QAAM,iBAA4B,mBAAK;AAEvC,iBAAe,eAAe,UAAU,aAAa,IAAI,CAACC,YAAuC;AAC7F,WAAO,iCAAKA,UAAL,EAAa,MAAMA,QAAO,QAAQ,MAAM;AAAA,EACnD,CAAC;AACD,SAAO;AACX;;;AClBA,IAAM,aAAgG,CAAC;AAAA,EACnG;AAAA,EACA,QAAAC;AAAA,EACA;AACJ,MAAM;AAAA,EACF;AAAA,IACI,WAAO,gBAAE,SAAS,kBAAkB;AAAA,IACpC,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,aAAa;AAAA,MACT,eAAe,iBAAiB;AAAA,MAChC,QAAAA;AAAA,IACJ;AAAA,EACJ;AACJ;AAEA,IAAO,0BAAQ;;;AC1Bf;AAAA;AAAA;AAAA;AACA,IAAAC,kBAA+B;AAC/B,yBAAc;AACd,IAAO,eAAS,aAAaA,kBAA8B,0BAAUA;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAC,kBAA+B;AAC/B,8BAAc;AACd,IAAO,oBAAS,aAAaA,kBAA8B,0BAAUA;;;ACA9D,IAAM,yBAAyB,WAClC,aAAK;AAAA,EACD,YAAY;AAAA,IACR,MAAM,kBAAU,MAAM,KAAK;AAAA,IAC3B,OAAO,kBAAU,MAAM,KAAK;AAAA,EAChC;AAAA,EACA,QAAQ,kBAAU,uBAAuB,KAAK;AAClD,CAAC,EAAE,KAAK;;;ACSZ,IAAM,iBAAiC;AAAA,EACnC,kBAAkB;AAAA,IACd,EAAE,IAAI,IAAI,OAAO,UAAU;AAAA,IAC3B,EAAE,MAAM,IAAI,IAAI,IAAI,OAAO,UAAU;AAAA,IACrC,EAAE,MAAM,IAAI,IAAI,IAAI,OAAO,UAAU;AAAA,IACrC,EAAE,MAAM,IAAI,IAAI,IAAI,OAAO,UAAU;AAAA,IACrC,EAAE,MAAM,IAAI,OAAO,UAAU;AAAA,EACjC;AAAA,EACA,kBAAkB,CAAC,EAAE,OAAO,IAAI,OAAO,UAAU,CAAC;AAAA,EAClD,qBAAqB,EAAE,QAAQ,CAAC,WAAW,SAAS,EAAE;AAC1D;AAEA,IAAM,eAA6B;AAAA,EAC/B,qBAAqB,CAAC;AAAA,EACtB,qBAAqB;AAAA,IACjB;AAAA,MACI,MAAM;AAAA,MACN,aAAa;AAAA,IACjB;AAAA,EACJ;AAAA,EACA,sBAAsB;AAAA,IAClB,SAAS,EAAE,QAAQ,GAAG,OAAO,IAAM;AAAA,EACvC;AACJ;AAEA,IAAM,OAAgB;AAAA,EAClB,cAAc;AAAA,EACd,eAAe;AACnB;AAEA,IAAM,SAAyB;AAAA,EAC3B;AAAA,EACA,wBAAwB,eACpB,qBAAK;AAAA,IACD,YAAY;AAAA,MACR,MAAM,yBAAU,OAAO,KAAK;AAAA,MAC5B,OAAO,yBAAU,MAAM,KAAK;AAAA,IAChC;AAAA,IACA,QAAQ,yBAAU,qBAAqB,KAAK;AAAA,EAChD,CAAC,EAAE,KAAK;AAAA,EACZ,wBAAwB,eACpB,qBAAK;AAAA,IACD,YAAY,yBAAU,UAAU,KAAK;AAAA,IACrC,QAAQ,yBAAU,oBAAoB,KAAK;AAAA,EAC/C,CAAC,EAAE,KAAK;AAAA,EACZ,iCAAiC,eAC7B,qBAAK;AAAA,IACD,YAAY;AAAA,MACR,MAAM,yBAAU,OAAO,KAAK;AAAA,MAC5B,OAAO,yBAAU,OAAO,KAAK;AAAA,IACjC;AAAA,IACA,QAAQ;AAAA,MACJ,MAAM,yBAAU,2BAA2B,KAAK;AAAA,MAChD,OAAO,yBAAU,WAAW,KAAK;AAAA,IACrC;AAAA,EACJ,CAAC,EAAE,KAAK;AAAA,EACZ,gCAAgC,eAC5B,qBAAK;AAAA,IACD,YAAY;AAAA,MACR,MAAM,CAAC,WAAW,yBAAU,aAAa,KAAK,CAAC;AAAA,MAC/C,OAAO,CAAC,WAAW,yBAAU,aAAa,KAAK,CAAC;AAAA,IACpD;AAAA,IACA,QAAQ;AAAA,MACJ,MAAM,CAAC,WAAW,yBAAU,aAAa,KAAK,CAAC;AAAA,MAC/C,OAAO,CAAC,WAAW,yBAAU,aAAa,KAAK,CAAC;AAAA,IACpD;AAAA,EACJ,CAAC,EAAE,KAAK;AAChB;AAEA,IAAM,oBAAoB,aAAQ;AAxFlC;AAwFqC,8BAAQ,WAAR,mBAAiB,OAAjB,mBAAqB,UAAS,yCAAW;AAAA;AAE9E,IAAM,yBAAyB,aAC3B,kBAAkB,OAAO,MACxB,QAAQ,OAAO,CAAC,EAAE,WAAW,sBAAsB,QAAQ,OAAO,CAAC,EAAE,WAAW;AAErF,IAAM,qBAAqB;AAC3B,IAAM,eAA+B;AAAA,EACjC;AAAA,IACI,WAAO,gBAAE,qBAAqB;AAAA,IAC9B,QAAQ;AAAA,MACJ;AAAA,QACI;AAAA,UACI,WAAO,gBAAE,YAAY;AAAA,UACrB,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,aAAa;AAAA,YACT,QAAQ;AAAA,cACJ,EAAE,WAAO,gBAAE,QAAQ,GAAG,OAAO,yCAAW,OAAO;AAAA,cAC/C,EAAE,WAAO,gBAAE,QAAQ,GAAG,OAAO,yCAAW,OAAO;AAAA,cAC/C;AAAA,gBACI,WAAO,gBAAE,YAAY;AAAA,gBACrB,OAAO,yCAAW;AAAA,cACtB;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA;AAAA,QACI;AAAA,UACI,WAAO,gBAAE,UAAU;AAAA,UACnB,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,YAAY,CAAC,EAAE,QAAQ,MAAM,kBAAkB,OAAO;AAAA,UACtD,aAAa;AAAA,YACT,eAAe;AAAA,YACf,0BAA0B;AAAA,YAC1B,eAAe,CAAC,QAAQ;AAAA,UAC5B;AAAA,QACJ;AAAA,MACJ;AAAA,MACA;AAAA,QACI;AAAA,UACI,WAAO,gBAAE,aAAa;AAAA,UACtB,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,YAAY,CAAC,EAAE,QAAQ,MAAM,kBAAkB,OAAO;AAAA,UACtD,aAAa;AAAA,YACT,eAAe;AAAA,YACf,0BAA0B;AAAA,YAC1B,eAAe,CAAC,QAAQ;AAAA,UAC5B;AAAA,QACJ;AAAA,MACJ;AAAA,MACA;AAAA,QACI;AAAA,UACI,WAAO,gBAAE,UAAU;AAAA,UACnB,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,YAAY,CAAC,EAAE,QAAQ,MAAM,CAAC,kBAAkB,OAAO;AAAA,UACvD,aAAa;AAAA,YACT,eAAe;AAAA,YACf,0BAA0B;AAAA,UAC9B;AAAA,QACJ;AAAA,MACJ;AAAA,MACA;AAAA,QACI;AAAA,UACI,WAAO,gBAAE,WAAW;AAAA,UACpB,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,YAAY,CAAC,EAAE,QAAQ,MAAM,CAAC,kBAAkB,OAAO;AAAA,UACvD,aAAa;AAAA,YACT,eAAe;AAAA,YACf,0BAA0B;AAAA,UAC9B;AAAA,QACJ;AAAA,MACJ;AAAA,MACA;AAAA,QACI;AAAA,UACI,WAAO,gBAAE,aAAa;AAAA,UACtB,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,YAAY,CAAC,EAAE,QAAQ,MAAG;AA3K9C;AA4KwB,uBACI,aAAQ,WAAR,mBAAgB,YACf,QAAQ,OAAO,CAAC,EAAE,SAAS,YAAY,QAAQ,OAAO,CAAC,EAAE,SAAS;AAAA;AAAA,UAE3E,aAAa;AAAA,YACT,eAAe;AAAA,YACf,0BAA0B;AAAA,YAC1B,gBAAgB,CAAC,YAAY,aAAa,QAAQ;AAAA,UACtD;AAAA,QACJ;AAAA,MACJ;AAAA,MACA;AAAA,QACI;AAAA,UACI,WAAO,gBAAE,2BAA2B;AAAA,UACpC,QAAQ;AAAA,UACR,QAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,MACA;AAAA,QACI;AAAA,UACI,WAAO,gBAAE,sBAAsB;AAAA,UAC/B,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,aAAa;AAAA,YACT,eAAe;AAAA,YACf,0BAA0B;AAAA,UAC9B;AAAA,QACJ;AAAA,MACJ;AAAA,MACA;AAAA,QACI;AAAA,UACI,WAAO,gBAAE,cAAc;AAAA,UACvB,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,YAAY,CAAC,EAAE,QAAQ,MAAM,CAAC,uBAAuB,OAAO;AAAA,UAC5D,aAAa;AAAA,YACT;AAAA,YACA,eAAe;AAAA,YACf,KAAK;AAAA,UACT;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EACA;AAAA,IACI,WAAO,gBAAE,cAAc;AAAA,IACvB,QAAQ;AAAA,MACJ;AAAA,QACI;AAAA,UACI,WAAO,gBAAE,iCAAiC;AAAA,UAC1C,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,aAAa;AAAA,YACT;AAAA,YACA,eAAe;AAAA,YACf,KAAK;AAAA,YACL,KAAK;AAAA,UACT;AAAA,QACJ;AAAA,MACJ;AAAA,MACA;AAAA,QACI;AAAA,UACI,WAAO,gBAAE,kCAAkC;AAAA,UAC3C,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,aAAa;AAAA,YACT;AAAA,YACA,eAAe;AAAA,YACf,KAAK;AAAA,YACL,KAAK;AAAA,UACT;AAAA,QACJ;AAAA,MACJ;AAAA,MACA;AAAA,QACI;AAAA,UACI,WAAO,gBAAE,6BAA6B;AAAA,UACtC,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,aAAa;AAAA,YACT;AAAA,YACA,eAAe;AAAA,YACf,KAAK;AAAA,UACT;AAAA,QACJ;AAAA,MACJ;AAAA,MACA;AAAA,QACI;AAAA,UACI,WAAO,gBAAE,6BAA6B;AAAA,UACtC,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,aAAa;AAAA,YACT,eAAe;AAAA,YACf,YAAY;AAAA,UAChB;AAAA,QACJ;AAAA,MACJ;AAAA,MACA;AAAA,QACI;AAAA,UACI,WAAO,gBAAE,oBAAoB;AAAA,UAC7B,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,aAAa;AAAA,YACT,eAAe;AAAA,YACf,YAAY;AAAA,UAChB;AAAA,QACJ;AAAA,MACJ;AAAA,MACA;AAAA,QACI;AAAA,UACI,WAAO,gBAAE,YAAY;AAAA,UACrB,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,aAAa;AAAA,YACT,eAAe;AAAA,YACf,YAAY;AAAA,UAChB;AAAA,QACJ;AAAA,MACJ;AAAA,MACA;AAAA,QACI;AAAA,UACI,WAAO,gBAAE,YAAY;AAAA,UACrB,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,YAAY,CAAC,EAAE,QAAQ,MAAM,QAAQ,cAAc;AAAA,UACnD,aAAa;AAAA,YACT,QAAQ;AAAA,cACJ,EAAE,WAAO,gBAAE,QAAQ,GAAG,OAAO,SAAS;AAAA,cACtC,EAAE,WAAO,gBAAE,UAAU,GAAG,OAAO,WAAW;AAAA,YAC9C;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EACA;AAAA,IACI,WAAO,gBAAE,iBAAiB;AAAA,IAC1B,QAAQ;AAAA,MACJ;AAAA,QACI;AAAA,UACI,WAAO,gBAAE,aAAa;AAAA,UACtB,QAAQ;AAAA,UACR,gBAAgB,CAAC,SAAS,SAAS,kBAAkB;AAAA,UACrD,YAAY,CAAC,EAAE,QAAQ,MAAM,CAAC,kBAAkB,OAAO;AAAA,UACvD,SAAS;AAAA,UACT,QAAQ;AAAA,UACR,aAAa;AAAA,YACT,eAAe;AAAA,YACf,iBAAa,gBAAE,yBAAyB;AAAA,YACxC,YAAY;AAAA,cACR;AAAA,gBACI,WAAO,gBAAE,QAAQ;AAAA,gBACjB,OAAO;AAAA,gBACP,WAAW;AAAA,gBACX,UAAU;AAAA,kBACN,YAAY,eAAe;AAAA,gBAC/B;AAAA,cACJ;AAAA,cACA;AAAA,gBACI,WAAO,gBAAE,SAAS;AAAA,gBAClB,OAAO;AAAA,gBACP,UAAU;AAAA,kBACN,YAAY,eAAe;AAAA,gBAC/B;AAAA,cACJ;AAAA,YACJ;AAAA,YACA,eAAe;AAAA,cACX;AAAA,gBACI,WAAO,gBAAE,aAAa;AAAA,gBACtB,OAAO;AAAA,cACX;AAAA,YACJ;AAAA,YACA;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,WAAO,gBAAE,aAAa;AAAA,UACtB,gBAAgB,CAAC,SAAS,SAAS,YAAY,kBAAkB;AAAA,UACjE,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,QAAQ;AAAA,UACR,YAAY,CAAC,EAAE,QAAQ,MAAM,kBAAkB,OAAO;AAAA,UACtD,aAAa;AAAA,YACT,eAAe;AAAA,YACf,iBAAa,gBAAE,yBAAyB;AAAA,YACxC,YAAY;AAAA,cACR;AAAA,gBACI,WAAO,gBAAE,UAAU;AAAA,gBACnB,OAAO;AAAA,gBACP,WAAW;AAAA,gBACX,UAAU;AAAA,kBACN,YAAY,eAAe;AAAA,gBAC/B;AAAA,cACJ;AAAA,cACA;AAAA,gBACI,WAAO,gBAAE,QAAQ;AAAA,gBACjB,OAAO;AAAA,gBACP,UAAU;AAAA,kBACN,YAAY,eAAe;AAAA,gBAC/B;AAAA,cACJ;AAAA,cACA;AAAA,gBACI,WAAO,gBAAE,SAAS;AAAA,gBAClB,OAAO;AAAA,gBACP,UAAU;AAAA,kBACN,YAAY,eAAe;AAAA,gBAC/B;AAAA,cACJ;AAAA,YACJ;AAAA;AAAA,YAEA,eAAe;AAAA,cACX;AAAA,gBACI,WAAO,gBAAE,aAAa;AAAA,gBACtB,OAAO;AAAA,cACX;AAAA,YACJ;AAAA,YACA;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA;AAAA,QACI;AAAA,UACI,WAAO,gBAAE,aAAa;AAAA,UACtB,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,YAAY,CAAC,EAAE,QAAQ,MAAG;AA5Y9C;AA6YwB,oBAAC,kBAAkB,OAAO,OAAK,mBAAQ,WAAR,mBAAiB,OAAjB,mBAAqB;AAAA;AAAA,UACxD,aAAa;AAAA,YACT,eAAe;AAAA,YACf,eAAe,CAAC,QAAQ;AAAA,UAC5B;AAAA,QACJ;AAAA,MACJ;AAAA,MACA;AAAA,QACI;AAAA,UACI,WAAO,gBAAE,eAAe;AAAA,UACxB,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,YAAY,CAAC,EAAE,QAAQ,MAAG;AAzZ9C;AA0ZwB,oBAAC,kBAAkB,OAAO,KAAK,GAAC,mBAAQ,WAAR,mBAAiB,OAAjB,mBAAqB;AAAA;AAAA,QAC7D;AAAA,MACJ;AAAA,MACA;AAAA,QACI;AAAA,UACI,WAAO,gBAAE,uBAAuB;AAAA,UAChC,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,YAAY,CAAC,EAAE,QAAQ,MAAM,uBAAuB,OAAO;AAAA,UAC3D,aAAa;AAAA,YACT;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA;AAAA,QACI;AAAA,UACI,WAAO,gBAAE,mBAAmB;AAAA,UAC5B,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,YAAY,CAAC,EAAE,QAAQ,MAAM,kBAAkB,OAAO;AAAA,UACtD,aAAa;AAAA,YACT;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA;AAAA,QACI;AAAA,UACI,WAAO,gBAAE,wBAAwB;AAAA,UACjC,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,YAAY,CAAC,EAAE,QAAQ,MAAM,kBAAkB,OAAO;AAAA,UACtD,aAAa;AAAA,YACT;AAAA,YACA,KAAK;AAAA,UACT;AAAA,QACJ;AAAA,MACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,wBAAyB,EAAE,OAAO,CAAC;AAAA,MACnC;AAAA,QACI;AAAA,UACI,WAAO,gBAAE,iBAAiB;AAAA,UAC1B,QAAQ;AAAA,UACR,QAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,MACA;AAAA,QACI;AAAA,UACI,WAAO,gBAAE,wBAAwB;AAAA,UACjC,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,YAAY,CAAC,EAAE,QAAQ,MAAM,QAAQ,kBAAkB;AAAA,QAC3D;AAAA,MACJ;AAAA,MACA;AAAA,QACI;AAAA,UACI,WAAO,gBAAE,6BAA6B;AAAA,UACtC,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,YAAY,CAAC,EAAE,QAAQ,MACnB,QAAQ,kBAAkB,QACpB,QACA,EACI,QAAQ,wBAAwB,UAChC,QAAQ,wBAAwB;AAAA,UAE9C,aAAa;AAAA,YACT,QAAQ;AAAA,cACJ,EAAE,WAAO,gBAAE,QAAQ,GAAG,OAAO,SAAS;AAAA,cACtC,EAAE,WAAO,gBAAE,QAAQ,GAAG,OAAO,SAAS;AAAA,YAC1C;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AACJ;AAKA,IAAM,SAAoB;AAAA;AAAA;AAAA;AAAA,EAItB,KAAK;AAAA;AAAA;AAAA;AAAA,EAIL,UAAM,gBAAE,KAAK;AAAA,EACb;AAAA,EACA,QAAQ;AAAA;AAAA;AAAA;AAAA,EAIR,MAAM,4BAAAC;AAAA,EACN,iBAAiB,qBAAAC;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA,6CAAAC;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,IACJ,YAAY;AAAA,MACR,aAAa;AAAA,MACb,YAAY,CAAC,MAAM;AAAA,IACvB;AAAA,IACA,aAAa;AAAA,MACT,aAAa;AAAA,IACjB;AAAA,EACJ;AAAA,EACA,UAAU,gGAAyE;AAAA,EACnF;AAAA,EACA,eAAe,CAAC;AACpB;AAEA,IAAO,iBAAQ,cAAc,MAAM;;;ACphBnC;AAAA;AAAA;AAAA;AACA,IAAAC,kBAA+B;AAC/B,+CAAc;AACd,IAAO,qCAAS,aAAaA,kBAA8B,0BAAUA;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAC,kBAA+B;AAC/B,4BAAc;AACd,IAAO,kBAAS,aAAaA,kBAA8B,0BAAUA;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAC,kBAA+B;AAC/B,kCAAc;AACd,IAAO,wBAAS,aAAaA,kBAA8B,0BAAUA;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAC,kBAA+B;AAC/B,oCAAc;AACd,IAAO,0BAAS,aAAaA,kBAA8B,0BAAUA;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAC,kBAA+B;AAC/B,2BAAc;AACd,IAAO,iBAAS,aAAaA,kBAA8B,0BAAUA;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAC,kBAA+B;AAC/B,oDAAc;AACd,IAAO,0CAAS,aAAaA,kBAA8B,0BAAUA;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAC,kBAA+B;AAC/B,+BAAc;AACd,IAAO,qBAAS,aAAaA,kBAA8B,0BAAUA;;;ACU9D,IAAM,0BAAN,MAA8B;AAAA,EACjC,QAAc;AAAA,EAEd;AAAA,EAEA,WAAoC;AAChC,WAAO;AAAA,EACX;AACJ;;;ACbO,IAAM,iBAAiB;AAK9B,IAAM,sBAAN,MAA0B;AAmG1B;AAlGI,cADE,qBACc,aAA+D;AAAA;AAAA;AAAA;AAAA,EAI3E,MAAQ,yBAAM,CAAC,QAAQ,QAAQ,QAAQ,CAAC,EAAE;AAAA;AAAA;AAAA;AAAA,EAI1C,OAAS,6BAAU,CAAG,2BAAU,yBAAM,CAAC,EAAE;AAAA;AAAA;AAAA;AAAA,EAIzC,QAAU,6BAAU,CAAG,2BAAU,yBAAM,CAAC,EAAE;AAAA;AAAA;AAAA;AAAA,EAI1C,SAAW;AAAA;AAAA;AAAA;AAAA,EAIX,SAAW;AAAA;AAAA;AAAA;AAAA,EAIX,iBAAmB;AAAA;AAAA;AAAA;AAAA,EAInB,aAAe;AAAA,IACT,yBAAM;AAAA;AAAA;AAAA;AAAA,MAIJ,eAAiB;AAAA;AAAA;AAAA;AAAA,MAIjB,MAAQ,yBAAM;AAAA,QACV,QAAU;AAAA,QACV,SAAW;AAAA,MACf,CAAC;AAAA;AAAA;AAAA;AAAA,MAID,OAAS,yBAAM;AAAA,QACX,OAAS;AAAA,QACT,SAAW;AAAA,MACf,CAAC;AAAA;AAAA;AAAA;AAAA,MAID,MAAQ;AAAA,IACZ,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAIA,gBAAkB;AAAA;AAAA;AAAA;AAAA,EAIlB,kBAAoB;AAAA;AAAA;AAAA;AAAA,EAIpB,iBAAmB;AAAA;AAAA;AAAA;AAAA,EAInB,qBAAuB;AAAA,EAEvB,SAAW;AAAA,EACX,OAAS;AAAA;AAAA;AAAA;AAAA,EAIT,uBAAyB;AAC7B;AAAA;AAAA;AAAA;AAKA,cAnFE,qBAmFqB,YAA8B;AAAA;AAAA,EAEjD,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,aAAa,CAAC;AAAA,EACd,gBAAgB,OAAgC,CAAC;AAAA,EACjD,MAAM;AAAA,EACN,kBAAkB;AAAA,EAClB,SAAS,CAAC;AAAA,EACV,SAAS,CAAC;AAAA,EACV,iBAAiB,OAAgC,CAAC;AAAA,EAClD,qBAAqB,MAA+B,IAAI,wBAAwB;AAAA,EAChF,iBAAiB,OAAgC,CAAC;AAAA,EAClD,SAAS;AAAA,EACT,uBAAuB;AAC3B;AAGJ,IAAO,8BAAQ;;;AC/FR,IAAM,gBAAgB,CAAC,OAAO,QAAQ,MAAM;;;ACT5C,IAAM,sBAAwB,yBAAM;AAAA,EACvC,gBAAkB;AAAA,EAClB,gBAAkB,yBAAM,aAAa;AAAA,EACrC,QAAU;AACd,CAAC;AAEM,IAAM,mBAAmB,CAAC,EAAE,eAAe,sBAAsB,MAAkC;AACtG,MAAI;AACJ,MAAI;AAEJ,QAAM,iBAAmD;AAAA,IACrD,KAAK;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,EACV;AAEA,MAAI;AACJ,MAAI,OAAO,0BAA0B,YAAY;AAC7C,QAAI,qBAAiB,oBAAI,eAAe,MAAM,GAAG;AAC7C,uBAAiB,OAAO,KAAK,cAAc,IAAI,EAAE,MAAM;AACvD,uBAAiB,cAAc,KAAK,cAAc;AAAA,IACtD;AAGA,aAAS,CAAC,GAAG,EAAE,SAAS,QAAQ,MAAY;AACxC,UAAI,OAAO,YAAY,UAAU;AAC7B,cAAM,kBAAc,oBAAI,gBAAgB,OAAO,IAAI,eAAe,OAAO,IAAI;AAC7E,8BAAsB,iCACf,gBADe;AAAA,UAElB,QAAQ;AAAA,UACR,MAAM,EAAE,CAAC,OAAO,GAAG,YAAY;AAAA,QACnC,EAAC;AAAA,MACL,OAAO;AACH,8BAAsB,aAAa;AAAA,MACvC;AAAA,IACJ;AAAA,EACJ;AAEA,SAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AACJ;;;ACrCO,IAAM,2BAA6B,yBAAM;AAAA,EAC5C,UAAY;AAAA,EACZ,SAAW;AAAA,EACX,YAAc;AAAA,EACd,UAAY;AAChB,CAAC;AAEM,IAAM,sBAAsB,CAAC;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AACJ,MAAuC;AACnC,QAAM,cAAa,6BAAM,eAAc;AACvC,QAAM,UAAS,+CAAe,WAAU;AACxC,QAAM,QAAQ,+CAAe;AAC7B,QAAM,aAAa,OAAO,UAAU,YAAY,QAAQ,IAAI,KAAK,KAAK,aAAa,KAAK,IAAI;AAC5F,QAAM,UAAU,OAAO,UAAU,YAAY,QAAQ,IAAI,KAAK,MAAM,SAAS,KAAK,IAAI,IAAI;AAC1F,QAAM,WAAW,aAAa,KAAK,OAAO,0BAA0B;AAEpE,QAAM,kBAAkB,CAAC,GAAG,EAAE,MAAM,OAAO,SAAS,MAA4B;AAC5E,UAAM,gBAA2B,0BAAU,aAAa;AAExD,QAAI,OAAO,aAAa,UAAU;AAC9B,gBAAU,QAAQ;AAClB,gBAAU,SAAS;AAAA,IACvB;AAEA,UAAM,YAAY,OAAO,UAAU,UAAU,WAAW,UAAU,QAAQ;AAC1E,QAAI,OAAO,SAAS,YAAY,OAAO,GAAG;AACtC,gBAAU,QAAQ;AAClB,gBAAU,UAAU,OAAO,KAAK;AAAA,IACpC;AAEA,0BAAsB,SAAS;AAAA,EACnC;AAEA,SAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU,OAAO,0BAA0B,aAAa,kBAAkB;AAAA,EAC9E;AACJ;;;AC1CO,IAAM,cAAc,CACvB,IACA,iBACe;AACf,QAAM,UAAM,sBAAuD;AACnE,MAAI,CAAC,IAAI,WAAW,KAAC,wBAAQ,cAAc,IAAI,QAAQ,YAAY,GAAG;AAClE,QAAI,UAAU;AAAA,MACV;AAAA,MACA,OAAO,GAAG;AAAA,IACd;AAAA,EACJ;AACA,SAAO,IAAI,QAAQ;AACvB;;;AC5BA;AAAA;AAAA;AAAA;AACA,IAAAC,kBAA+B;AAC/B,qCAAc;AACd,IAAO,2BAAS,aAAaA,kBAA8B,0BAAUA;;;ACQ9D,IAAM,YAAY,CAAC,MAAe;AACrC,SAAO,MAAM,QAAQ,MAAM;AAC/B;AAQO,IAAM,cAAc,CAAC,MAAgB,WACxC,KAAK,OAAO,OAAK,UAAU,OAAO,CAAC,CAAC,CAAC;AAclC,IAAM,sBAAsB,CAAC,UAAiD;AACjF,QAAM;AAAA,IACF,QAAQ,4BAAoB,SAAS;AAAA,IACrC,SAAS,4BAAoB,SAAS;AAAA,IACtC;AAAA,IACA;AAAA,EACJ,IAAI;AACJ,QAAM,qBAA2B,0BAAY,CAAC,GAAG,MAAM;AACnD,sBAAkB,CAAC;AACnB,uBAAmB,CAAC;AAAA,EACxB,GAAG,CAAC,CAAC;AACL,QAAM,CAAC,gBAAgB,iBAAiB,IAAU,uBAAiB,OAAO,KAAK,CAAC;AAChF,QAAM,CAAC,iBAAiB,kBAAkB,IAAU,uBAAiB,OAAO,MAAM,CAAC;AACnF,SACI,4CAAC,SAAI,OAAO,EAAE,OAAO,gBAAgB,QAAQ,iBAAiB,YAAY,gBAAgB,KACtF,4CAAC,4BAAiB,OAAc,QAAgB,UAAU,oBAAoB,GAC9E;AAAA,IAAC;AAAA;AAAA,MACG,aAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA,aAAS,gBAAE,qBAAqB,aAAa,KAAK,IAAI,CAAC,EAAE;AAAA,MACzD,OAAM;AAAA;AAAA,EACV,CACJ;AAER;AAEA,IAAO,8BAAQ;;;ACrDR,IAAM,2BAA2B,CAAC;AAAA,EACrC;AAAA,EACA;AACJ,MAEY;AACR,QAAM,mBAAmB,CAAC,aAAa,QAAQ;AAC/C,mBAAiB,QAAQ,CAAC,SAAuB;AAC7C,QAAI,cAAc,IAAI,GAAG;AAErB,cAAQ,IAAI,IAAI,cAAc,IAAI;AAAA,IACtC;AAAA,EACJ,CAAC;AACL;;;ACbA,IAAM,QAAQ,0BAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQrB,IAAM,UAAU,0BAAO,IAAI,MAAM;AAAA,EAC7B,qCAAqC;AACzC,CAAC;AAAA;AAAA;AAAA;AAAA;AAYD,IAAM,oBAAoB,CACtB,eACA,yBACkB;AAClB,QAAM,UAAU,CAAC,UAAoE;AACjF,UAAM,EAAE,KAAK,IAAI;AACjB,UAAM,gBAAgB,SAAS,UAAU,CAAC;AAE1C,WACI,4CAAC,eACG,4CAAC,kCAAkB,MAAO,GACzB,iBAAiB,4CAAC,SAAM,aAAU,mBAAkB,CACzD;AAAA,EAER;AACA,2BAAyB,EAAE,SAAS,cAAc,CAAC;AACnD,SAAO;AACX;AAEA,IAAO,4BAAQ;;;ACpCf,IAAM,OAAO,0BAAO,IAAI,MAAiB,CAAC,EAAE,MAAM,OAAO;AAAA,EACrD,OAAO;AAAA,IACH,WAAO,oBAAK,KAAK;AAAA,EACrB;AACJ,EAAE;AAAA;AAAA,wBAEsB,CAAC,cAChB,4BAAQ,MAAM,eAAe,KAAK,MAAM,mBAAoB,MAAM,MAAM,sBAAsB;AAAA;AAUvG,IAAM,cAAc,0BAAO,IAAI;AAAA,EAC3B,CAAC;AAAA,IACG;AAAA,IACA;AAAA,EACJ,MAEK;AAED,UAAM,cAAc,OAAO,WAAW,WAAW,KAAK,IAAI,QAAQ,CAAC,IAAI;AACvE,WAAO;AAAA,MACH,OAAO,kCACC,SAAS,EAAE,WAAO,oBAAK,KAAK,EAAE,IAC9B,eAAe,EAAE,YAAQ,oBAAK,WAAW,EAAE;AAAA,IAEvD;AAAA,EACJ;AACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAMwB,CAAC,cAChB,4BAAQ,MAAM,eAAe,KAAK,MAAM,mBAAoB,MAAM,MAAM,sBAAsB;AAAA;AAGvG,IAAM,cAAc,0BAAO;AAAA;AAAA;AAAA;AAAA;AAM3B,IAAM,qBAAqB,0BAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAclC,IAAM,yBAAyB,CAC3B,QACyB;AACzB,QAAM,qBAAqB,CAAC,UAAiC;AACzD,UAAM,EAAE,OAAO,QAAQ,gBAAgB,IAAI;AAE3C,UAAM,qBAA2B,0BAAY,CAAC,GAAG,MAAM;AACnD,wBAAkB,CAAC;AACnB,yBAAmB,CAAC;AAAA,IACxB,GAAG,CAAC,CAAC;AACL,UAAM,CAAC,gBAAgB,iBAAiB,IAAU,uBAAiB,OAAO,MAAM,KAAK,CAAC;AACtF,UAAM,CAAC,iBAAiB,kBAAkB,IAAU,uBAAiB,OAAO,MAAM,MAAM,CAAC;AACzF,QAAI,CAAC,QAAQ;AACT,aACI,4CAAC,QAAK,aAAU,QAAO,OAAc,mBACjC,4CAAC,mBACG,4CAAC,wBAAQ,MAAO,CACpB,CACJ;AAAA,IAER;AACA,WACI;AAAA,MAAC;AAAA;AAAA,QACG,aAAU;AAAA,QACV,qCAAmC;AAAA,QACnC;AAAA,QACA;AAAA,QACA;AAAA;AAAA,MAEA,4CAAC,0BACG,4CAAC,4BAAiB,OAAc,QAAgB,UAAU,oBAAoB,GAC9E,4CAAC,sCAAQ,QAAR,EAAe,OAAO,gBAAgB,QAAQ,kBAAiB,CACpE;AAAA,IACJ;AAAA,EAER;AACA,qBAAmB,cAAc;AACjC,SAAO;AACX;AAEA,IAAO,6BAAQ;;;ACtGR,IAAM,4BAA4B,CACrC,aACA,UAAU,UACA;AACV,QAAM,WAAO,oBAAI,aAAa,2BAA2B,MAAS;AAClE,QAAM,SAAS,SAAS;AACxB,QAAM,aAAS,oBAAI,aAAa,0BAA0B,MAAS;AACnE,QAAM,WAAW,WAAW;AAC5B,SAAO,WAAW,UAAU;AAChC;AAUA,IAAM,uBAAuB,0BAAO;AAAA;AAAA;AAAA,iBAGvB,qBAAK;AAAA,EACV,MAAM;AAAA,EACN,OAAO;AACX,CAAC,CAAC;AAAA;AAQN,IAAM,kBAAkB,CAAC,UAAoD;AACzE,QAAM;AAAA,IACF,QAAQ,4BAAoB,SAAS;AAAA,IACrC,SAAS,4BAAoB,SAAS;AAAA,IACtC;AAAA,IACA;AAAA,IACA;AAAA,EACJ,IAAI;AAEJ,MAAI,UACA,4CAAC,mBAAQ,OAAc,QAAgB,OAAM,WAAU,aAAS,gBAAE,yBAAyB,GAAG;AAElG,MAAI,MAAM;AACN,cAAgB,4BAAc,MAAM;AAAA,MAChC,OAAO;AAAA,QACH,MAAM;AAAA,QACN,KAAK;AAAA,QACL,SAAS;AAAA,QACT,UAAU;AAAA,QACV,WAAW;AAAA,MACf;AAAA,MACA,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,aAAa;AAAA,IACjB,CAAC;AAAA,EACL;AAEA,SACI;AAAA,IAAC;AAAA;AAAA,MACG,aAAU;AAAA,MACV,OAAO,EAAE,OAAO,QAAQ,YAAY,iBAAiB,OAAO,UAAU;AAAA;AAAA,IAErE;AAAA,EACL;AAER;AAEA,IAAO,0BAAQ,2BAAuB,eAAe;;;ACrErD,IAAM,kBAAkB,CACpB,eACAC,sBAA6C,8BAC3B;AAClB,QAAM,EAAE,QAAAC,QAAO,IAAI;AACnB,QAAM,EAAE,QAAAC,QAAO,IAAID;AAEnB,QAAM,UAAU,CAAC,UAAoE;AAxBzF;AAyBQ,UAAM;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS,4BAAoB,SAAS;AAAA,MACtC,QAAQ,4BAAoB,SAAS;AAAA,IACzC,IAAI;AAEJ,UAAM,kBAAkBD,oBAAmB,aAAa,SAAS,OAAO;AACxE,UAAM,QAAO,KAAAC,QAAO,oBAAP,YAA0BA,QAAO;AAC9C,UAAM,YAAY,kBAAU,mBAAmB,KAAK;AACpD,UAAM,uBAAmB,4BAAQ,mCAAS,eAAe,IACnD,mCAAS,mBACT,KAAAC,WAAA,gBAAAA,QAAQ,2BAAR,wBAAAA,SAAiC;AAEvC,QAAID,QAAO,SAAS,wCAAgC,KAAK,iBAAiB;AACtE,aACI;AAAA,QAAC;AAAA;AAAA,UACG,aAAU;AAAA,UACV;AAAA,UACA;AAAA,UACA;AAAA,UACA,iBAAiB;AAAA,UACjB;AAAA;AAAA,MACJ;AAAA,IAER;AAEA,WAAO,4CAAC,kCAAkB,MAAO;AAAA,EACrC;AACA,2BAAyB,EAAE,SAAS,cAAc,CAAC;AACnD,SAAO;AACX;AAEA,IAAO,0BAAQ;;;AC3Df;AAAA;AAAA;AAAA;AACA,IAAAE,kBAA+B;AAC/B,gCAAc;AACd,IAAO,sBAAS,aAAaA,kBAA8B,0BAAUA;;;ACG9D,IAAM,wBAAwB,CAAC,SAA6B,WAAyB;AAN5F;AAOI,MAAI,GAAC,wCAAU,OAAV,mBAAc,QAAQ,QAAO,CAAC;AAEnC,QAAM,OAAO,CAAC;AAEd,WAAS,IAAI,GAAG,IAAI,QAAQ,CAAC,EAAE,QAAQ,KAAK,GAAG;AAC3C,UAAM,SAAS,CAAC;AAChB,WAAO,QAAQ,CAAC,OAAO,UAAU;AAC7B,YAAM,YAAY,aAAa,KAAK;AACpC,UAAI,QAAQ,KAAK,EAAE,CAAC,MAAM,IAAI;AAC1B,eAAO,SAAS,IAAI;AAAA,MACxB,OAAO;AACH,eAAO,SAAS,IAAI,QAAQ,KAAK,EAAE,CAAC;AAAA,MACxC;AAAA,IACJ,CAAC;AACD,SAAK,KAAK,MAAM;AAAA,EACpB;AAEA,SAAO;AACX;AAEA,IAAM,eAAe,CAAC,UAAwC,OAAO,UAAU,WAAW,QAAQ,MAAM;AAWxG,IAAM,8BAA8B,CAChC,MACA,WACA,+BAIC;AACD,QAAM,aAAa,KAAK;AACxB,QAAM,qBAAqB,CAAC;AAC5B,MAAI,aAAa,cAAc,cAAc,GAAG;AAC5C,UAAM,aAAa,KAAK,IAAI,CAAC,QAAQ,UAAU,KAAK;AACpD,WAAO,EAAE,iBAAiB,MAAM,oBAAoB,WAAW;AAAA,EACnE;AAEA,QAAM,UAAqC,CAAC;AAC5C,MAAI,eAAe;AAGnB,QAAM,SAAS,aAAa,MAAM,YAAY;AAE9C,MAAI,IAAI;AACR,MAAI;AACJ,MAAI;AACJ,MAAI;AACJ,MAAI;AAEJ,UAAQ,KAAK,KAAK,CAAC,CAAC;AACpB,qBAAmB,KAAK,CAAC;AAGzB,WAAS,IAAI,GAAG,IAAI,YAAY,GAAG,KAAK;AAEpC,QAAI,OAAO;AACX,QAAI,OAAO;AACX,QAAI,gBAAgB,KAAK,OAAO,IAAI,KAAK,KAAK,IAAI;AAClD,QAAI,cAAc,KAAK,OAAO,IAAI,KAAK,KAAK,IAAI;AAChD,kBAAc,KAAK,IAAI,aAAa,UAAU;AAE9C,UAAM,iBAAiB,cAAc;AAGrC,WAAO,gBAAgB,aAAa,iBAAiB;AACjD,cAAQ,OAAO,KAAK,aAAa,EAAE,CAAC,CAAC;AACrC,cAAQ,KAAK,aAAa,EAAE,CAAC,IAAI;AAAA,IACrC;AACA,YAAQ;AACR,YAAQ;AAGR,QAAI,YAAY,KAAK,OAAO,IAAI,KAAK,KAAK,IAAI;AAC9C,UAAM,UAAU,KAAK,OAAO,IAAI,KAAK,KAAK,IAAI;AAG9C,UAAM,UAAU,OAAO,KAAK,CAAC,EAAE,CAAC,CAAC;AACjC,UAAM,UAAU,KAAK,CAAC,EAAE,CAAC,IAAI;AAG7B,cAAU,OAAO;AACjB,QAAI,eAAe;AAGnB,WAAO,YAAY,SAAS,aAAa;AAErC,aACI,KAAK;AAAA,SACA,UAAU,SAAS,KAAK,SAAS,EAAE,CAAC,IAAI,YACpC,UAAU,OAAO,KAAK,SAAS,EAAE,CAAC,CAAC,MAAM,OAAO;AAAA,MACzD,IAAI;AAKR,UAAI,OAAO,WAAY,SAAS,WAAW,2BAA2B,IAAI,SAAS,GAAI;AACnF,kBAAU;AACV,uBAAe,KAAK,SAAS;AAC7B,gBAAQ;AAER,uBAAe;AAAA,MACnB;AAAA,IACJ;AAGA,YAAQ,cAAc,IAAI;AAC1B,uBAAmB,KAAK,YAAY;AACpC,QAAI;AAAA,EACR;AAGA,UAAQ,cAAc,IAAI,KAAK,aAAa,CAAC;AAC7C,qBAAmB,KAAK,aAAa,CAAC;AAEtC,SAAO,EAAE,iBAAiB,SAAS,mBAAmB;AAC1D;AAgBA,IAAM,wBAAwB,CAC1B,QACA,YACsB;AACtB,QAAM,wBAAwB,QAAQ,qBAAqB;AAI3D,QAAM,6BAA6B,OAAO;AAAA,IACtC,eAAS,sCAAiB,GAAG,KAAK,EAAE,KAAM,yBAAyB,UAAU;AAAA,EACjF;AAGA,QAAM,gBAA0B,CAAC;AACjC,QAAM,sBAAsB,CAAC,OAAO,KAAK,WAAS;AAC9C,UAAM,eAAe,OAAO,KAAK;AACjC,UAAM,oBAAoB,yBAAyB,UAAU;AAG7D,QACI,OAAO,MAAM,YAAY,KACzB,gBAAgB,OAAO,oBACvB,gBAAgB,OAAO,oBACtB,OAAO,UAAU,YAAY,OAAO,UAAU,YAAY,CAAC,mBAC9D;AACE,aAAO;AAAA,IACX;AAEA,kBAAc,KAAK,YAAY;AAC/B,WAAO;AAAA,EACX,CAAC;AAED,SAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA,eAAe,sBAAsB,gBAAgB,CAAC;AAAA,EAC1D;AACJ;AAOA,IAAM,wBAAwB,CAAC,QAA6B,cAAyC;AACjG,MAAI,cAAc,UAAU;AACxB,UAAM,iBAAiB,OAAO,IAAI,MAAM;AACxC,QAAI,2BAA2B,gBAAgB,SAAS,GAAG;AACvD,aAAO;AAAA,IACX;AAAA,EACJ,WAAW,cAAc,QAAQ;AAC7B,UAAM,iBAAiB,OAAO,IAAI,YAAU,IAAI,KAAK,MAAM,CAAC;AAC5D,QAAI,2BAA2B,gBAAgB,SAAS,GAAG;AACvD,aAAO;AAAA,IACX;AAAA,EACJ;AACA,SAAO,CAAC;AACZ;AAEO,IAAM,8BAA8B,CAAC,EAAE,UAAU,MAAgC;AA9MxF;AA+MI,UAAO,eAAU,aAAV,mBAAoB;AAC/B;AAoFA,IAAM,6BAA6B,CAAC,QAA2B,cAAiC;AAC5F,SAAO,OAAO,MAAM,CAAC,OAAO,UAAU;AAClC,QAAI,cAAc,UAAU;AACxB,UAAI,OAAO,MAAM,KAAK,GAAG;AACrB,eAAO;AAAA,MACX;AAAA,IACJ;AAEA,QAAI,cAAc,QAAQ;AACtB,UAAI,OAAO,MAAO,MAAe,QAAQ,CAAC,GAAG;AACzC,eAAO;AAAA,MACX;AAAA,IACJ;AACA,QAAI,UAAU,GAAG;AACb,aAAO;AAAA,IACX;AACA,WAAO,QAAQ,OAAO,QAAQ,CAAC;AAAA,EACnC,CAAC;AACL;AASA,IAAM,gCAAgC,CAClC,IACA,QACA,SACA,YACA,YACuD;AACvD,MAAI,UAA6B,CAAC;AAClC,QAAM,WAAuB,CAAC;AAE9B,QAAM,gBAAgB,CAAC,GAAG,KAAK,OAAO,KAAK,CAAC,OAAO,UAAU;AAzUjE;AA0UQ,UAAM,YAAY,aAAa,KAAK;AACpC,UAAM,aAAY,gBAAW,KAAK,MAAhB,YAAqB;AACvC,UAAM,SAAS,GAAG,KAAK,QAAQ,KAAK;AACpC,QAAI,0CAA0C;AAE9C,QAAI,cAAc,QAAQ;AACtB,gBAAU,sBAAsB,QAAQ,SAAS;AAAA,IACrD,WAAW,QAAQ,IAAI,SAAS,GAAG;AAC/B,YAAM,EAAE,eAAe,4BAA4B,oBAAoB,IAAI;AAAA,QACvE,GAAG,KAAK,QAAQ,KAAK;AAAA,QACrB;AAAA,MACJ;AAGA,gDAA0C,8BAA8B,CAAC;AACzE,UAAI,yCAAyC;AACzC,eAAO;AAAA,MACX;AACA,UAAI,qBAAqB;AACrB,iBAAS,KAAK,aAAa;AAAA,MAC/B;AAAA,IACJ;AACA,WAAO;AAAA,EACX,CAAC;AAED,MAAI,eAAe;AACf,WAAO,EAAE,SAAS,SAAS;AAAA,EAC/B;AACA,SAAO,EAAE,SAAS,CAAC,GAAG,UAAU,CAAC,EAAE;AACvC;AAEA,IAAM,4BAA4B,CAAC,IAAgB,YAAqC;AACpF,QAAM,gBAAgB,MAAM,KAAK,OAAO,EAAE,KAAK,CAAC,GAAW,MAAc,IAAI,CAAC;AAC9E,QAAM,gBAAgB,CAAC;AACvB,KAAG,KAAK,QAAQ,QAAQ,YAAU;AAC9B,UAAM,eAAe,CAAC;AACtB,kBAAc,QAAQ,WAAS;AAC3B,mBAAa,KAAK,OAAO,KAAK,CAAC;AAAA,IACnC,CAAC;AACD,kBAAc,KAAK,YAAY;AAAA,EACnC,CAAC;AAGD,SAAO,iCACA,KADA;AAAA,IAEH,MAAM,iCACC,GAAG,OADJ;AAAA,MAEF,SAAS;AAAA,IACb;AAAA,EACJ;AACJ;AAEO,IAAM,wBAAwB,CAAC,EAAE,aAAa,WAAW,QAAQ,MAAyB;AA9XjG;AA+XI,QAAM,YAAY,2CAAa;AAE/B,QAAM,aAAY,wDAAW,SAAX,mBAAiB,QAAQ,OAAzB,mBAA6B,WAA7B,YAAuC;AACzD,MAAI,OAAO,MAAM,SAAS,KAAK,aAAa,aAAa,YAAY,GAAG;AACpE,WAAO;AAAA,EACX;AAEA,QAAM,EAAE,QAAQ,SAAS,WAAW,IAAI;AACxC,MAAI,CAAC,UAAU,EAAC,mCAAS,WAAU,EAAC,yCAAY,SAAQ;AACpD,WAAO;AAAA,EACX;AAEA,QAAM,qBAAqB,IAAI,IAAY,QAAQ,OAAO,YAAU,CAAC,OAAO,WAAW,GAAG,CAAC,CAAC;AAC5F,QAAM,wBAAwB,KAAK,IAAI,mBAAmB,OAAO,WAAW,SAAS;AAOrF,MAAI,yBAAyB,WAAW;AACpC,WAAO;AAAA,EACX;AAEA,QAAM,EAAE,SAAS,SAAS,IAAI;AAAA,IAC1B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AAEA,MAAI,CAAC,SAAS,UAAU,CAAC,QAAQ,QAAQ;AACrC,WAAO;AAAA,EACX;AAEA,QAAM,yBAAyB,mBAAK;AACpC,QAAM,qBAAqB,oBAAI,IAAY;AAE3C,WAAS,QAAQ,CAAC,SAAS,gBAAgB;AAEvC,UAAM,SAAoC,QAAQ,IAAI,CAAC,QAAQ,UAAU;AACrE,aAAO,CAAC,QAAQ,KAAK,GAAG,MAAM;AAAA,IAClC,CAAC;AAED,QAAI;AACA,YAAM,EAAE,oBAAoB,4BAA4B,IAAI;AAAA,QACxD;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AACA,kCAA4B,QAAQ,qBAAmB,mBAAmB,IAAI,eAAe,CAAC;AAAA,IAClG,SAAS,GAAG;AAER,cAAQ,MAAM,4CAA4C,WAAW,IAAI,CAAC;AAAA,IAC9E;AAAA,EACJ,CAAC;AAED,yBAAuB,UAAU,0BAA0B,WAAW,kBAAkB;AAExF,SAAO;AACX;;;AC1be,SAAR,YAAgC,OAAyB;AAC5D,QAAM,UAAM,sBAAU;AACtB,+BAAU,MAAM;AACZ,QAAI,UAAU;AAAA,EAClB,CAAC;AACD,SAAO,IAAI;AACf;;;ACAA,IAAM,oBAAoB,CAAC;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,MAEM;AACF,QAAM,EAAE,6BAA6B,0BAA0B,QAAI,uBAAQ,MAAM;AAhBrF;AAiBQ,QAAI,CAAC,mBAAmB;AACpB,aAAO;AAAA,QACH,6BAA6B;AAAA,QAC7B,2BAA2B;AAAA,MAC/B;AAAA,IACJ;AAEA,QAAI,GAAC,4DAAa,YAAb,mBAAsB,SAAtB,mBAA4B,YAA5B,mBAAqC,SAAQ;AAC9C,aAAO;AAAA,QACH,6BAA6B;AAAA,QAC7B,2BAA2B;AAAA,MAC/B;AAAA,IACJ;AACA,UAAM,EAAE,SAAS,UAAU,IAAI;AAE/B,UAAM,0BAA0B,UAAU,KAAK,QAAQ,IAAI,YAAU;AACjE,aAAO,CAAC,OAAO,CAAC,CAAC;AAAA,IACrB,CAAC;AAED,UAAM,sBAAsB;AAAA,MACxB,SAAS,iCACF,YADE;AAAA,QAEL,MAAM,iCACC,UAAU,OADX;AAAA,UAEF,SAAS;AAAA,QACb;AAAA,MACJ;AAAA,IACJ;AAEA,WAAO;AAAA,MACH,6BAA6B;AAAA,MAC7B,2BAA2B,gBAAAC,QAAK,wBAAwB,mBAAmB;AAAA,IAC/E;AAAA,EACJ,GAAG,CAAC,aAAa,iBAAiB,CAAC;AAEnC,QAAM,2BAAuB,uBAAQ,MAAM;AACvC,QAAI;AACA,UAAI,CAAC,+BAA+B,CAAC,2BAA2B;AAC5D,eAAO;AAAA,MACX;AAEA,UAAI,EAAC,mCAAS,MAAM,EAAC,mCAAS,MAAK,EAAC,mCAAS,KAAK;AAC9C,eAAO;AAAA,MACX;AAEA,YAAM,oBAAoB;AAAA,QACtB,GAAG,QAAQ;AAAA,QACX,QAAQ;AAAA,QACR,GAAG,QAAQ;AAAA,QACX,SAAS,QAAQ,IAAI,qBAAqB;AAAA,QAC1C,IAAI,QAAQ;AAAA,QACZ,UAAU,QAAQ,KAAK,sBAAsB;AAAA,QAC7C,YAAY;AAAA,MAChB;AAEA,YAAM;AAAA,QACF,SAAS;AAAA,QACT,UAAU,CAAC;AAAA,QACX,WAAW,CAAC;AAAA,QACZ;AAAA,MACJ,IAAI,gBAAAA,QAAK;AAAA,QACL,EAAE,SAAS,mBAAmB,QAAQ;AAAA,QACtC;AAAA,QACA,MAAM;AAAA,QAAC;AAAA,QACP;AAAA,MACJ;AACA,aAAO;AAAA,QACH;AAAA,QACA,SAAS,CAAC,GAAG,SAAS,GAAG,QAAQ;AAAA,QACjC;AAAA,MACJ;AAAA,IACJ,SAAS,GAAsF;AAC3F,aAAO;AAAA,QACH,QAAQ;AAAA,QACR,SAAS,CAAC;AAAA,QACV,YAAY,CAAC;AAAA,MACjB;AAAA,IACJ;AAAA,EACJ,GAAG,CAAC,SAAS,SAAS,6BAA6B,yBAAyB,CAAC;AAE7E,SAAO;AACX;AAEA,IAAO,4BAAQ;;;AC3Ff,IAAM,gCAAgC,CAAC,kBAAkB;AAEzD,IAAM,2BAA2B,CAAC;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,MAGM;AACF,QAAM,2BAAuB,sBAAO,IAAI;AAExC,QAAM,uBAAuB,0BAAkB;AAAA,IAC3C,mBAAmB;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,EACJ,CAAC;AAGD,QAAM,2BAAuB,uBAAQ,UAAM,qBAAK,SAAS,6BAA6B,GAAG,CAAC,OAAO,CAAC;AAClG,QAAM,0BAAsB;AAAA,IACxB,MAAO,kCACA,uBACA;AAAA,IAEP,CAAC,sBAAsB,oBAAoB;AAAA,EAC/C;AAEA,QAAM,8BAA8B,YAAY,mBAAmB;AACnE,QAAM,sBAAsB,YAAY,WAAW;AACnD,QAAM,oBAAoB,YAAY,SAAS;AAE/C,QAAM,CAAC,wBAAwB,yBAAyB,QAAI,wBAAS,MAAM;AACvE,WAAO,wBACD,sBAAsB;AAAA,MAClB;AAAA,MACA;AAAA,MACA,SAAS;AAAA,IACb,CAAC,IACD;AAAA,EACV,CAAC;AAED,QAAM,qCAAiC,uBAAQ,MAAM;AACjD,eAAO;AAAA,MACH,CAAC,sBAAyC;AACtC,cAAM,oBAAoB,sBAAsB,iBAAiB;AACjE,kCAA0B,iBAAiB;AAAA,MAC/C;AAAA,MACA;AAAA,MACA,EAAE,UAAU,KAAK;AAAA,IACrB;AAAA,EACJ,GAAG,CAAC,CAAC;AAEL,+BAAU,MAAM;AAGZ,QAAI,qBAAqB,SAAS;AAC9B,2BAAqB,UAAU;AAC/B;AAAA,IACJ;AAEA,QAAI,CAAC,uBAAuB;AACxB,gCAA0B,WAAW;AACrC;AAAA,IACJ;AAEA,YACI,wBAAQ,6BAA6B,mBAAmB,KACxD,wBAAwB,eACxB,sBAAsB,WACxB;AACE;AAAA,IACJ;AAIA,mCAA+B;AAAA,MAC3B;AAAA,MACA,SAAS;AAAA;AAAA,MACT;AAAA,IACJ,CAAC;AAAA,EAGL,GAAG;AAAA,IACC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,CAAC;AAED,SAAO;AACX;AAEA,IAAO,mCAAQ;;;AC9Gf;AAAA;AAAA;AAAA;AACA,IAAAC,kBAA+B;AAC/B,iCAAc;AACd,IAAO,uBAAS,aAAaA,kBAA8B,0BAAUA;;;ACA9D,IAAM,iBAAiB,CAC1B,SACA,aACU;AAEV,MAAI,WAAW,OAAO,KAAK,OAAO,EAAE,SAAS,QAAQ,GAAG;AACpD,WAAO,QAAQ,QAAQ;AAAA,EAC3B;AAGA,MAAI,OAAO,KAAK,oBAAY,EAAE,SAAS,QAAQ,GAAG;AAC9C,WAAO,qBAAa,QAAQ;AAAA,EAChC;AAGA,SAAO;AACX;;;ACnBA;AAAA;AAAA;AAAA;AACA,IAAAC,kBAA+B;AAC/B,iCAAc;AACd,IAAO,uBAAS,aAAaA,kBAA8B,0BAAUA;;;AC8Z9D,IAAM,sCAAsC,CAC/C,aACA,YACyB;AACzB,MAAI,eAAe,CAAC,QAAQ,eAAe;AACvC,WAAO;AAAA,MACH,eAAe;AAAA,IACnB;AAAA,EACJ;AACA,SAAO,CAAC;AACZ;;;AC3aA;AAAA;AAAA;AAAA;AACA,IAAAC,kBAA+B;AAC/B,yCAAc;AACd,IAAO,+BAAS,aAAaA,kBAA8B,0BAAUA;;;ACDrE,IAAM,kBAAkB,0BAAO,IAAI,MAAM,CAAC,EAAE,YAAY,OAAO;AAAA,EAC3D,aAAa;AAAA,EACb,eAAe;AACnB,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAMsB,WAAS,MAAM,eAAe;AAAA;AAGtD,gBAAgB,cAAc;AAE9B,IAAO,0BAAQ;;;AChBf;AAAA;AAAA;AAAA;AACA,IAAAC,kBAA+B;AAC/B,6BAAc;AACd,IAAO,mBAAS,aAAaA,kBAA8B,0BAAUA;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAC,kBAA+B;AAC/B,8BAAc;AACd,IAAO,oBAAS,aAAaA,kBAA8B,0BAAUA;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAC,kBAA+B;AAC/B,qCAAc;AACd,IAAO,2BAAS,aAAaA,kBAA8B,0BAAUA;;;ACuF9D,IAAM,qBAAqB;AA4B3B,IAAM,0BAA0B,CAAC;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AACJ,OACI,2CAAa,UACP,YAAY,IAAI,CAAC,WAAW,OAAO;AAAA,EAC/B,KAAK,mDAAkB;AAAA,EACvB,MAAM;AAAA,EACN,OAAO,mDAAkB;AAC7B,EAAE,IACF,CAAC;AAKX,IAAM,iBAAiB,0BAAO,gBAAQ;AAAA,aACzB,WAAS,MAAM,cAAc,kBAAU,oBAAoB,KAAK,CAAC;AAAA;AASvE,IAAM,kCAA0E,CAAC;AAAA,EACpF;AAAA,EACA;AACJ,MAAM;AACF,QAAM,iBAAiB;AACvB,SAAO,cAAM,cAAc,gBAAgB;AAAA,IACvC,OAAO,GAAG,WAAW,KAAK;AAAA,IAC1B,QAAQ,GAAG,WAAW,MAAM;AAAA,IAC5B,SAAS;AAAA,IACT,SAAS;AAAA,IACT,YAAY,eAAe;AAAA,EAC/B,CAAC;AACL;AA2RO,IAAM,yBAAyB,CAAC,gBAAgC,CAAC,GAAG,SAAS,OAAO;AACvF,QAAM,0BAA0B,cAAc;AAAA,IAAK,kBAAa;AAxbpE;AAybQ,gCAAa,QAAQ,WAArB,mBAA6B,SAAS;AAAA;AAAA,EAC1C;AAGA,QAAM,cAAc,WAAW;AAE/B,SAAO,CAAC,CAAC,2BAA2B;AACxC;AAEA,IAAM,kCAAkC,oBAAI,IAAI,CAAC,eAAe,aAAa,CAAC;AACvE,IAAM,oCAAoC,CAAC,iBAAkC;AAChF,SAAO,gCAAgC,IAAI,YAAY;AAC3D;AAQO,IAAM,oCAAoC,CAAC,cAAoC;AAClF,QAAM,EAAE,QAAQ,QAAQ,IAAI;AAG5B,QAAM,cAAc,OAAO,OAAiB,CAAC,KAAK,OAAO,UAAU;AAC/D,UAAM,YAAY,OAAO,UAAU,WAAW,+BAAO,OAAO;AAC5D,QAAI,EAAC,uCAAW,WAAW,SAAQ,cAAc,SAAS;AACtD,UAAI,KAAK,KAAK;AAAA,IAClB;AACA,WAAO;AAAA,EACX,GAAG,CAAC,CAAC;AAGL,QAAM,iBAAiB,YAAY,IAAI,WAAS,OAAO,KAAK,CAAC;AAC7D,QAAM,kBAAkB,YAAY,IAAI,WAAS,QAAQ,KAAK,CAAC;AAE/D,SAAO,EAAE,QAAQ,gBAAgB,SAAS,gBAAgB;AAC9D;AASO,IAAM,0BAA0B,SAAO;AAC1C,SAAO,IAAI,IAAI,cAAY,SAAS,IAAI,aAAW,OAAO,WAAW,OAAO,CAAC,CAAC;AAClF;AAYO,IAAM,iBAAiB,CAAC,QAAiC;AAC5D,MAAI,QAAQ,UAAa,QAAQ,QAAQ,QAAQ,UAAU,QAAQ,IAAI;AACnE,WAAO;AAAA,EACX;AACA,QAAM,MAAM,OAAO,QAAQ,WAAW,MAAM,OAAO,WAAW,GAAG;AACjE,SAAO,OAAO,MAAM,GAAG,IAAI,SAAY;AAC3C;AAOO,IAAM,2BAA2B,CAAC,eAA6C;AAClF,MAAI,eAAe,OAAQ,QAAO;AAClC,MAAI,eAAe,OAAQ,QAAO;AAClC,SAAO;AACX;AAGO,IAAM,YAAY,CAAC,UAIJ;AAClB,QAAM,kBAAkB,+BAAO;AAC/B,QAAM,EAAE,iBAAiB,iBAAiB,IAAI;AAC9C,QAAM,oBAAoB;AAAA,IACtB,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,aAAa;AAAA,IACb,iBAAiB,CAAC;AAAA;AAAA,IAClB;AAAA,EACJ;AAGA,UAAQ,iBAAiB;AAAA,IACrB,KAAK;AACD,aAAO;AAAA,IACX,KAAK;AACD,iBAAO,gDAAkB,mBAClB,kBACN;AAAA,IACL,KAAK;AACD,iBAAO,kDAAoB;AAAA,QACvB,MAAM;AAAA,SACH,kBACN;AAAA,IACL,KAAK;AACD,iBAAO,+CAAiB;AAAA,QACpB,MAAM;AAAA,SACH,kBACN;AAAA;AAAA,IAEL;AACI,iBAAO,gDAAkB,mBAClB,kBACN;AAAA,EACT;AACJ;AAEO,IAAM,wBAAwB,CACjC,gBACA,QACA,wBACS;AACT,MAAI,wBAAwB,aAAa;AACrC,WAAO;AAAA,EACX;AACA,MAAI,aAAa,OAAO,SAAS,IAAI,KAAK,OAAO,CAAC;AAClD,MAAI,CAAC,YAAY;AACb,iBAAa;AAAA,EACjB;AACA,UAAO,iDAAgB,UAAS,eAAe,KAAK,IAAI;AAC5D;AASO,IAAM,oBAAoB,CAAC,WAAmB,kBAA0B,WAAW,OAAe;AACrG,MAAI,CAAC,WAAW;AACZ,WAAO;AAAA,EACX;AACA,MAAI,OAAO,MAAM,gBAAgB,KAAK,oBAAoB,GAAG;AACzD,WAAO;AAAA,EACX;AAEA,QAAM,kBAAkB,mBAAmB;AAI3C,QAAM,eAAe,WAAW;AAGhC,QAAM,WAAW,KAAK,MAAM,kBAAkB,YAAY;AAG1D,MAAI,UAAU,UAAU,UAAU;AAC9B,WAAO;AAAA,EACX;AAGA,MAAI,YAAY,GAAG;AACf,WAAO;AAAA,EACX;AAGA,QAAM,iBAAiB,WAAW;AAClC,QAAM,YAAY,KAAK,MAAM,iBAAiB,CAAC;AAG/C,QAAM,QAAQ,UAAU,MAAM,GAAG,SAAS;AAC1C,QAAM,MAAM,UAAU,MAAM,CAAC,SAAS;AAEtC,SAAO,GAAG,KAAK,MAAM,GAAG;AAC5B;AAMO,IAAMC,gBAAe,CAAC,UAAwC;AACjE,QAAM,YAAY,OAAO,UAAU,WAAW,+BAAO,OAAO;AAC5D,SAAO;AACX;AAEO,IAAM,gBAAgB,CAAC,WAA+C;AACzE,SAAO,OAAO,IAAI,WAASA,cAAa,KAAK,CAAC;AAClD;AAaO,IAAM,kBAAkB,CAC3B,OACA,sBACA,uBACc;AACd,QAAM,UAAuB,EAAE,GAAG,CAAC,EAAE;AACrC,UAAQ,EAAE,QAAQ;AAElB,MAAI,yBAAyB,QAAQ;AACjC,YAAQ,EAAE,aAAa;AAAA,EAC3B;AAEA,MAAI,uBAAuB,QAAW;AAClC,YAAQ,EAAE,gBAAgB;AAAA,EAC9B;AACA,SAAO;AACX;AAYO,IAAM,kBAAkB,CAC3B,OACA,mBACA,YACA,sBACA,UACA,aACc;AACd,QAAM,YAAY,kCAAc;AAChC,QAAM,UAAuB,EAAE,GAAG,CAAC,EAAE;AACrC,UAAQ,EAAE,QAAQ;AAClB,UAAQ,EAAE,OAAO;AACjB,MAAI,sBAAsB,QAAQ;AAC9B,YAAQ,EAAE,UAAU,CAAC,UAAc,4CAAc,GAAG,CAAC;AAAA,EACzD;AAIA,MAAI,sBAAsB,QAAQ;AAC9B,YAAQ,EAAE,QAAQ,SAAS,MAAM,SAAS,IAAI,KAAK;AAAA,EACvD;AACA,MAAI,yBAAyB,QAAQ;AACjC,YAAQ,EAAE,aAAa;AAAA,EAC3B;AACA,MAAI,aAAa,UAAa,aAAa,QAAW;AAClD,YAAQ,EAAE,QAAQ,CAAC,GAAG,SAAS,YAAY;AACvC,YAAM,MAAM,8BAAY;AACxB,YAAM,MAAM,8BAAY;AACxB,aAAO,CAAC,KAAK,GAAG;AAAA,IACpB;AAAA,EACJ;AACA,SAAO;AACX;AAYO,IAAM,mBAAmB,CAC5B,OACA,kBACA,WACA,0BACA,uBACA,WACA,cACc;AACd,QAAM,WAAwB,EAAE,IAAI,CAAC,EAAE;AACvC,QAAM,YAAY,gCAAa;AAC/B,WAAS,GAAG,QAAQ;AACpB,WAAS,GAAG,OAAO;AAGnB,WAAS,GAAG,OAAO;AACnB,MAAI,qBAAqB,QAAQ;AAC7B,aAAS,GAAG,UAAU,CAAC,UAAc,4CAAc,GAAG,GAAG,wBAAwB;AAIjF,aAAS,GAAG,QAAQ,SAAS,MAAM,SAAS,IAAI,KAAK;AAAA,EACzD,WAAW,0BAA0B;AACjC,aAAS,GAAG,UAAU,CAAC,MACnB,2BAA2B,KAAK,MAAM,CAAC,EAAE,SAAS,IAAI,EAAE,SAAS;AAAA,EACzE;AACA,MAAI,0BAA0B,QAAQ;AAClC,aAAS,GAAG,aAAa;AAAA,EAC7B;AACA,MAAI,cAAc,UAAa,cAAc,QAAW;AACpD,aAAS,GAAG,QAAQ,CAAC,GAAG,SAAS,YAAY;AACzC,YAAM,MAAM,gCAAa;AACzB,YAAM,MAAM,gCAAa;AACzB,aAAO,CAAC,KAAK,GAAG;AAAA,IACpB;AAAA,EACJ;AACA,SAAO;AACX;AAKA,IAAM,gBAAgB,CAClB,WACA,aACA,cAC2C;AAC3C,MAAI,UAAW,QAAO;AACtB,MAAI,CAAC,YAAa,QAAO;AACzB,SAAO,YAAY,iBAAiB;AACxC;AAEA,IAAM,aAAa,CACf,OACA,UACA,kBACa;AACb,QAAM,cACD,qCAAU,UAAS,KAAK,SAAS,SAAS,KAAK,KAC/C,EAAC,qCAAU,YAAU,+CAAe,SAAS;AAClD,SAAO,aAAa,OAAO;AAC/B;AAEO,IAAM,qBAAqB,CAAC,SAef;AA5xBpB;AA6xBI,QAAM;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,IAAI;AACJ,QAAM,eAA6B,CAAC;AAEpC,MAAI;AACJ,MAAI,kBAAkB,QAAQ;AAC1B,eAAW;AAAA,EACf,WAAW,iBAAiB,MAAM;AAC9B,eAAW;AAAA,EACf,OAAO;AACH,eAAW;AAAA,EACf;AACA,QAAM,uBAAuB,kBAAkB,SAAS,OAAO;AAE/D,QAAM,cAAc,SAAS;AAC7B,QAAM,YAAY,gBAAgB,cAAc,aAAa,cAAc;AAG3E,QAAM,aAAa,cAAc,QAAQ,OAAO,OAAK,EAAC,+CAAe,SAAS,GAAE,IAAI;AACpF,QAAM,wBAAuB,oDAAe,OAAO,OAAK,QAAQ,SAAS,CAAC,OAA7C,YAAmD,CAAC;AACjF,QAAM,gBAAgB,cAAc,CAAC,GAAG,YAAY,GAAG,oBAAoB,IAAI;AAE/E,gBAAc,QAAQ,WAAS;AAj0BnC,QAAAC;AAk0BQ,UAAM,aAAYA,MAAA,+CAAe,SAAS,WAAxB,OAAAA,MAAkC;AACpD,UAAM,YAAY,eAAe,cAAc,gBAAgB,CAAC;AAChE,UAAM,wBAAwB,eAAe,cAAc,SAAS,CAAC;AAErE,iBAAa,KAAK,IAAI;AAAA,MAClB,WAAW;AAAA,QACP,OAAO,wBAAwB,IAAK,gCAAa;AAAA,SAC7C,YAAa,EAAE,UAAU,EAAE,MAAM,WAAW,OAAO,IAAI,EAAE,IAAe,CAAC;AAAA,IAErF;AAEA,UAAM,aAAa,cAAc,WAAW,aAAa,SAAS;AAClE,QAAI,eAAe,OAAW,cAAa,KAAK,EAAE,OAAO;AAEzD,QAAI,aAAa,OAAW,cAAa,KAAK,EAAE,UAAU,WAAW;AAErE,QAAI,UAAW,cAAa,KAAK,EAAE,UAAU,QAAQ,WAAW,OAAO,UAAU,aAAa;AAE9F,QAAI,kBAAkB,OAAW,cAAa,KAAK,EAAE,gBAAgB;AAErE,QAAI,CAAC,eAAe,WAAW;AAC3B,YAAM,kBAAiB,+DAAwB,WAAU;AACzD,UAAI,eAAgB,cAAa,KAAK,EAAE,gBAAgB;AAAA,IAC5D;AAEA,UAAM,uBAAuB,OAAO,OAAO,wBAAwB,CAAC,GAAG,KAAK;AAC5E,UAAM,oBAAoB,uBAAuB,6DAAuB,SAAS;AACjF,QAAI,qBAAqB,sBAAsB,OAAO;AAClD,MAAC,aAAa,KAAK,EAAuD,eACtE;AAAA,IACR;AAEA,QAAI,yBAAyB,QAAW;AACpC,MACI,aAAa,KAAK,EACpB,uBAAuB;AAAA,IAC7B;AAAA,EACJ,CAAC;AAED,SAAO;AACX;AASO,IAAM,mBAAmB,CAC5B,OACA,YACA,aAC6C;AAC7C,MAAI,cAAc;AAClB,MAAI,YAAY;AAGhB,QAAM,aAAa,MAAM,IAAI,SAAO;AAChC,QAAI,OAAO,QAAQ,UAAU;AACzB,aAAO,IAAI,KAAK,GAAG,EAAE,QAAQ,IAAI;AAAA,IACrC;AACA,WAAO;AAAA,EACX,CAAC;AAGD,WAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK,GAAG;AAC3C,QAAI,WAAW,CAAC,KAAK,YAAY;AAC7B,oBAAc;AACd;AAAA,IACJ;AAAA,EACJ;AAGA,MAAI,gBAAgB,MAAM,WAAW,SAAS,GAAG;AAC7C,kBAAc,WAAW,SAAS;AAAA,EACtC;AAGA,WAAS,IAAI,WAAW,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG;AAChD,QAAI,WAAW,CAAC,KAAK,UAAU;AAC3B,kBAAY;AACZ;AAAA,IACJ;AAAA,EACJ;AAGA,MAAI,cAAc,MAAM,WAAW,SAAS,GAAG;AAC3C,gBAAY;AAAA,EAChB;AAEA,SAAO,EAAE,aAAa,UAAU;AACpC;;;AC15BO,IAAM,0BAA0B,MAAe;AAClD,QAAM,cAAU,0BAAW,0BAAkB;AAC7C,SAAO,QAAQ,mCAAS,4BAA4B;AACxD;AAEO,IAAM,oBAAoB,CAAC,aAAa,0CAAY,QAAiB;AACxE,QAAM,wBAAwB,wBAAwB;AACtD,SAAO,yBAAyB,eAAe,0CAAY;AAC/D;;;ACTO,IAAM,uBAAuB;AAEpC,IAAM,mBAAmB,0BAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAShC,IAAM,kBAAkB,0BAAO;AAAA,cAIjB,oBAAoB;AAAA;AAAA;AAAA,aAGrB,WAAS,MAAM,SAAS;AAAA,wBACb,WAAS,MAAM,eAAe;AAAA,wBAC9B,WAAS,MAAM,eAAe;AAAA;AAStD,IAAM,mBAAmB,CAAC,UAAmD;AACzE,MAAI,UAAU,QAAQ,UAAU,QAAW;AACvC,WAAO;AAAA,EACX;AACA,MAAI,OAAO,UAAU,UAAU;AAC3B,WAAO;AAAA,EACX;AACA,MAAI,OAAO,UAAU,YAAY,OAAO,UAAU,WAAW;AACzD,WAAO,MAAM,SAAS;AAAA,EAC1B;AACA,MAAI,OAAO,UAAU,UAAU;AAC3B,WAAO,MAAM,SAAS;AAAA,EAC1B;AACA,MAAI;AACA,WAAO,KAAK,UAAU,KAAK;AAAA,EAC/B,SAAQ;AAEJ,WAAO,OAAO,UAAU,WAAW,MAAM,SAAS,IAAI;AAAA,EAC1D;AACJ;AAEO,IAAM,eAAe,CAAC,UAA6B;AACtD,QAAM,YAAY,iBAAiB,MAAM,UAAU;AACnD,SACI;AAAA,IAAC;AAAA;AAAA,MACG,WAAW,MAAM;AAAA,MACjB,iBAAiB,MAAM;AAAA,MACvB,aAAU;AAAA,MACV,OAAO;AAAA;AAAA,IAEP,4CAAC,wBAAkB,SAAU;AAAA,EACjC;AAER;;;ACjCA,IAAM,2BAA2B,0BAAO;AAAA;AAAA,MAKlC,eAAS,+BAAY,qBAAK,OAAO,CAAC,SAAS,QAAQ,CAAC,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAarD,IAAM,yBAAyB,CAClC,SACA,YACA,mBAC0B;AAC1B,QAAM,SAAS,mBAAK;AACpB,MAAI,gBAAgB;AAChB,WAAO,cAAc,IAAI;AAAA,EAC7B;AACA,MAAI,YAAY;AACZ,WAAO,eAAe,IAAI;AAAA,EAC9B;AACA,SAAO;AACX;AAQO,IAAM,6BAA6B,CACtC,gBACA,oBACU;AACV,MAAI,CAAC,iBAAiB;AAClB,WAAO;AAAA,EACX;AAGA,MAAI,eAAe,UAAU,gBAAgB,OAAO;AAChD,WAAO;AAAA,EACX;AAGA,MAAI,eAAe,gBAAgB,gBAAgB,aAAa;AAC5D,WAAO;AAAA,EACX;AAGA,MAAI,eAAe,cAAc,MAAM,gBAAgB,cAAc,GAAG;AACpE,WAAO;AAAA,EACX;AACA,MAAI,eAAe,eAAe,MAAM,gBAAgB,eAAe,GAAG;AACtE,WAAO;AAAA,EACX;AAEA,SAAO;AACX;AAEO,IAAM,cAAc,CAAC,YAAY,SAAS,YAAqB,mBAA4B;AAC9F,QAAM,UAAU,qCACT,qBAAK,YAAY,SAAS,WAAW,IAD5B;AAAA,IAEZ,MAAM,WAAW;AAAA,EACrB;AACA,SAAO,QAAQ;AAGf,MAAI,WAAW,YAAY;AACvB,WAAO;AAAA,MACH;AAAA,MACA,OAAO,KAAK,WAAW,UAAU,EAAE,OAAO,CAAC,KAAK,cAAc;AAC1D,YAAI,OAAO,SAAS,QAAQ,IAAI,WAAW,WAAW,SAAS;AAC/D,eAAO;AAAA,MACX,GAAG,CAAC,CAAC;AAAA,IACT;AAAA,EACJ;AAEA,QAAM,iBAAiB,uBAAuB,SAAS,YAAY,cAAc;AAEjF,MAAI,SAAS;AACT,YAAQ;AAAA,MACJ,MAAM;AAAA,MACN,eAAe;AAAA,MACf,SAAS;AAAA,IACb,CAAC;AAAA,EACL;AACJ;AAEO,IAAM,oBAAoB,CAAC,YAAY,SAAS,YAAqB,mBAA4B;AACpG,QAAM,UAAU;AAAA,IACZ,MAAM;AAAA,EACV;AAEA,QAAM,iBAAiB,uBAAuB,SAAS,YAAY,cAAc;AAEjF,MAAI,SAAS;AACT,YAAQ;AAAA,MACJ,MAAM;AAAA,MACN,eAAe;AAAA,MACf,SAAS;AAAA,IACb,CAAC;AAAA,EACL;AACJ;AAEO,IAAM,uBAAuB,CAChC,YACA,UACA,WACA,YACA,mBACC;AAvJL;AAyJI,MAAI,CAAC,YAAY;AACb;AAAA,EACJ;AAGA,QAAM,UAAQ,4CAAW,YAAX,mBAAqB,OAAM,CAAC;AAC1C,QAAM,EAAE,aAAa,UAAU,IAAI,iBAAiB,OAAO,WAAW,OAAO,WAAW,GAAG;AAE3F,QAAM,UAAU;AAAA,IACZ;AAAA,IACA,aAAa,WAAW;AAAA,IACxB;AAAA,IACA,WAAW,WAAW;AAAA,EAC1B;AAEA,QAAM,iBAAiB,uBAAuB,SAAS,YAAY,cAAc;AAEjF,MAAI,UAAU;AACV,aAAS;AAAA,MACL,MAAM;AAAA,MACN,eAAe;AAAA,MACf,SAAS;AAAA,IACb,CAAC;AAAA,EACL;AACJ;AAEO,IAAM,kBAAkB,CAC3B,YACA,UACA,WACA,YACA,mBACC;AAzLL;AA2LI,QAAM,UAAQ,4CAAW,YAAX,mBAAqB,OAAM,CAAC;AAC1C,QAAM,EAAE,aAAa,UAAU,IAAI,iBAAiB,OAAO,WAAW,OAAO,WAAW,GAAG;AAE3F,QAAM,UAAU;AAAA,IACZ;AAAA,IACA,aAAa,WAAW;AAAA,IACxB;AAAA,IACA,WAAW,WAAW;AAAA,EAC1B;AAEA,QAAM,iBAAiB,uBAAuB,SAAS,YAAY,cAAc;AAEjF,MAAI,UAAU;AACV,aAAS;AAAA,MACL,MAAM;AAAA,MACN,eAAe;AAAA,MACf,SAAS;AAAA,IACb,CAAC;AAAA,EACL;AACJ;AA0DO,IAAM,mBAAmB,CAC5B,UAC8B;AAC9B,MAAI,MAAM,QAAQ,KAAK,GAAG;AACtB,WAAO;AAAA,EACX;AACA,MAAI,OAAO;AACP,WAAO,KAAK,MAAM,KAAK;AAAA,EAC3B;AACA,SAAO;AACX;AAEA,IAAM,0BAA0B,CAAC;AAAA;AAAA,EAE7B,gBAAgB,UAAa,gBAAgB,OAAO,mBAAe,KAAI;AAAA;AAE3E,IAAM,0BAA0B,CAC5B,gBACA,gBACqB;AACrB,MAAI,eAAgB,QAAO,OAAO,cAAc;AAChD,MAAI,YAAa,QAAO,OAAO,WAAW;AAC1C,SAAO;AACX;AAEA,IAAM,iBAAiB,CAAC;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,MAUM;AACF,QAAM,kBAAkB,YAAY,QAAQ,OAAO,WAAS,CAAC,SAAS,SAAS,KAAK,CAAC,IAAI;AACzF,QAAM,kBAAkB,SAAS,SAAS,IAAI,WAAW;AAEzD,QAAM,aAAa;AAAA,IACf,sBAAsB,gBAAgB,iBAAiB,oBAAoB;AAAA,IAC3E;AAAA,EACJ;AACA,QAAM,cAAc;AAAA,IAChB,sBAAsB,iBAAiB,iBAAiB,qBAAqB;AAAA,IAC7E;AAAA,EACJ;AAEA,SAAO,EAAE,YAAY,YAAY;AACrC;AAEA,IAAM,yBAAyB,CAAC,UAAyB;AArUzD;AAsUI,QA6BI,YA5BA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA,IAEA,mBAAmB;AAAA,IACnB,oBAAoB;AAAA,EAjW5B,IAmWQ,IADG,yBACH,IADG;AAAA,IA3BH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAEA;AAAA,IACA;AAAA;AASJ,QAAM,EAAE,eAAe,QAAQ,gBAAgB,IAAI;AACnD,QAAM,iBAAiB,kBAAkB,aAAa;AACtD,QAAM;AAAA,IACF,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd;AAAA,IACA,cAAc;AAAA,IACd;AAAA,IACA;AAAA,IACA,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,IACnB,oBAAoB;AAAA,IACpB,yBAAyB;AAAA,IACzB,yBAAyB;AAAA,IACzB,0BAA0B;AAAA,IAC1B,oCAAoC;AAAA,IACpC,wCAAwC;AAAA,IACxC,6BAA6B;AAAA,IAC7B,oCAAoC;AAAA,IACpC,yBAAyB;AAAA,IACzB,qCAAqC;AAAA,IACrC,0BAA0B;AAAA,IAC1B,sBAAsB;AAAA,IACtB,eAAe;AAAA,IACf,uBAAuB;AAAA,IACvB,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,IAChB,kBAAkB;AAAA,IAClB,6BAA6B;AAAA,IAC7B,uBAAuB;AAAA,IACvB,uBAAuB;AAAA,IACvB,wBAAwB;AAAA,IACxB,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,IACnB;AAAA,IACA;AAAA,IACA,iBAAiB;AAAA,IACjB;AAAA,IACA,oBAAoB;AAAA,IACpB,UAAU;AAAA,IACV,UAAU;AAAA,IACV,WAAW;AAAA,IACX,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,mBAAmB;AAAA,IACnB,oBAAoB;AAAA;AAAA,IAEpB,iBAAiB;AAAA,IACjB,OAAO;AAAA,EACX,IAAI;AAGJ,QAAM,oBAAoB,mBAAmB,SAAS,QAAQ;AAI9D,QAAM,oBAAoB,kEAA8B;AACxD,QAAM,qBAAqB,oEAA+B;AAI1D,QAAM,kBAAkB,6BAA6B;AACrD,QAAM,kBAAkB,6BAA6B;AACrD,QAAM,mBAAmB,8BAA8B;AACvD,QAAM,kBAAkB,6BAA6B;AACrD,QAAM,mBAAmB,8BAA8B;AAEvD,QAAM,gBAAgB,yBAAyB,mBAAmB;AAClE,QAAM,gBAAgB,wBAAwB;AAC9C,QAAM,iBAAiB,yBAAyB;AAGhD,QAAM,WAAW,eAAe,WAAW;AAC3C,QAAM,WAAW,eAAe,WAAW;AAC3C,QAAM,YAAY,eAAe,YAAY;AAC7C,QAAM,YAAY,eAAe,YAAY;AAI7C,QAAM,4BAA4B;AAAA,IAC9B;AAAA,IACA;AAAA,EACJ;AACA,QAAM,6BAA6B;AAAA,IAC/B;AAAA,IACA;AAAA,EACJ;AACA,QAAM,wBAAwB,sBAAsB,OAAO,SAAY,OAAO,kBAAkB;AAChG,QAAM,wBAAwB,sBAAsB,OAAO,SAAY,OAAO,kBAAkB;AAChG,QAAM,yBAAyB,uBAAuB,OAAO,SAAY,OAAO,mBAAmB;AACnG,QAAM,wBAAwB,sBAAsB,OAAO,SAAY,OAAO,kBAAkB;AAChG,QAAM,yBAAyB,uBAAuB,OAAO,SAAY,OAAO,mBAAmB;AAEnG,QAAM,uBAAuB,wBAAwB,WAAW;AAChE,QAAM,eAAe,kBAAkB,KAAK,MAAM,eAAe,IAAI;AACrE,QAAM,sBAAsB,cAAc,KAAK,MAAM,WAAW,IAAI;AACpE,QAAM,wBAAwB,2BAA2B,KAAK,MAAM,wBAAwB,IAAI;AAChG,QAAM,uBAAuB,0BAA0B,KAAK,MAAM,uBAAuB,IAAI;AAC7F,QAAM,eAAe,iBAAiB,eAAe;AACrD,QAAM,UAAU,mBAAmB;AACnC,QAAM,CAAC,gBAAgB,iBAAiB,IAAU,uBAAS,OAAO,MAAM,KAAK,CAAC;AAC9E,QAAM,CAAC,iBAAiB,kBAAkB,IAAU,uBAAS,OAAO,MAAM,MAAM,CAAC;AACjF,QAAM,qBAA2B,0BAAY,CAAC,GAAG,MAAM;AACnD,sBAAkB,CAAC;AACnB,uBAAmB,CAAC;AAAA,EACxB,GAAG,CAAC,CAAC;AACL,QAAM,oBAAoB,kCAAkC;AAAA,IACxD,QAAQ,UAAU;AAAA,IAClB,SAAS,UAAU;AAAA,EACvB,CAAC;AAED,QAAM,SAASC,cAAa,kBAAkB,OAAO,CAAC,CAAC;AACvD,QAAM,UAAU;AAAA,IACZ,kBAAkB,OAAO,SAAS,IAAI,kBAAkB,OAAO,MAAM,CAAC,IAAI,CAAC;AAAA,EAC/E;AACA,QAAM,eAAW;AAAA,IACb,MAAO,cAAc,YAAY,MAAM,GAAG,EAAE,IAAI,OAAK,EAAE,KAAK,CAAC,IAAI,CAAC;AAAA,IAClE,CAAC,WAAW;AAAA,EAChB;AACA,QAAM,oBAAgB;AAAA,IAClB,MAAO,mBAAmB,iBAAiB,MAAM,GAAG,EAAE,IAAI,OAAK,EAAE,KAAK,CAAC,IAAI,CAAC;AAAA,IAC5E,CAAC,gBAAgB;AAAA,EACrB;AAEA,MAAI,aAAa,sBAAsB,gBAAgB,CAAC,MAAM,GAAG,oBAAoB;AACrF,eAAa,kBAAkB,YAAY,cAAc;AACzD,QAAM,EAAE,YAAY,YAAY,IAAI,eAAe;AAAA,IAC/C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,CAAC;AAED,QAAM,mBAAe;AAAA,IACjB,MAAM,gBAAgB,YAAY,sBAAsB,kBAAkB;AAAA,IAC1E,CAAC,YAAY,sBAAsB,kBAAkB;AAAA,EACzD;AACA,QAAM,eAAe,cAAc;AACnC,QAAM,mBAAe;AAAA,IACjB,MAAM;AACF,YAAMC,UAAS;AAAA,QACX;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAGA,UAAI,cAAc;AACd,QAAAA,QAAO,EAAE,UAAU,CAAC,MAAc,GAAG,KAAK,MAAM,IAAI,GAAG,CAAC;AACxD,QAAAA,QAAO,EAAE,QAAQ,MAAM,CAAC,GAAG,CAAC;AAAA,MAChC;AACA,aAAOA;AAAA,IACX;AAAA;AAAA,IAEA,CAAC,YAAY,mBAAmB,YAAY,sBAAsB,UAAU,UAAU,YAAY;AAAA,EACtG;AACA,QAAM,oBAAgB,uBAAQ,MAAM;AAChC,QAAI,WAAW;AACX,aAAO;AAAA,QACH;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AACA,WAAO,CAAC;AAAA,EACZ,GAAG;AAAA,IACC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,CAAC;AACD,QAAM,4BAAwB,sBAAO,IAAI;AAEzC,QAAM,sBAAsB;AAAA,IACxB,kBAAkB,QAAQ,CAAC;AAAA,IAC3B,GAAG,wBAAwB,kBAAkB,QAAQ,MAAM,CAAC,CAAC;AAAA,EACjE;AACA,YAAU,SAAS,kBAAkB;AACrC,YAAU,UAAU;AAGpB,QAAM,sBAAsB,cAAc,aAAa,cAAc,eAAe,YAAY;AAGhG,QAAM,sBAAkB;AAAA,IACpB,MACI,mBAAmB;AAAA,MACf,SAAS;AAAA,MACT,UAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAM;AAAA,MACN,WAAW;AAAA,MACX;AAAA,IACJ,CAAC;AAAA,IACL;AAAA,MACI;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ;AAAA,EACJ;AAGA,QAAM,+BAA2B;AAAA,IAC7B,MACI,wBAAwB;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,IACJ,CAAC;AAAA,IACL,CAAC,aAAa,iBAAiB,eAAe;AAAA,EAClD;AAGA,QAAM,kBAAc;AAAA,IAChB,MAAO,iDAAK,eAAiB,eAAiB;AAAA,IAC9C,CAAC,cAAc,cAAc,aAAa;AAAA,EAC9C;AAMA,QAAM,kBAAkB,eAAe;AACvC,QAAM,aAAS;AAAA,IACX,MACI,UAAU;AAAA,MACN,eAAe,mBAAmB,kBAAkB,QAAQ,UAAU;AAAA,MACtE;AAAA,MACA;AAAA,IACJ,CAAC;AAAA,IACL,CAAC,eAAe,iBAAiB,gBAAgB;AAAA,EACrD;AAGA,QAAM,mBAAyB;AAAA,IAC3B,WAAS;AAEL,UAAI,SAAS;AACT,oBAAY,OAAO,SAAS,YAAY,cAAc;AAAA,MAC1D;AAAA,IACJ;AAAA,IACA,CAAC,SAAS,YAAY,cAAc;AAAA,EACxC;AAEA,QAAM,yBAA+B;AAAA,IACjC,WAAS;AAEL,UAAI,SAAS;AACT,0BAAkB,OAAO,SAAS,YAAY,cAAc;AAAA,MAChE;AAAA,IACJ;AAAA,IACA,CAAC,SAAS,YAAY,cAAc;AAAA,EACxC;AAEA,QAAM,4BAAkC;AAAA,IACpC,CAAAC,WAAS;AAEL,UAAI,UAAU;AACV,6BAAqBA,QAAO,UAAU,WAAW,YAAY,cAAc;AAAA,MAC/E;AAAA,IAEJ;AAAA,IACA,CAAC,UAAU,WAAW,YAAY,cAAc;AAAA,EACpD;AAEA,QAAM,uBAA6B;AAAA,IAC/B,CAAAA,WAAS;AAEL,UAAI,UAAU;AACV,wBAAgBA,QAAO,UAAU,WAAW,YAAY,cAAc;AAAA,MAC1E;AAAA,IACJ;AAAA,IACA,CAAC,UAAU,WAAW,YAAY,cAAc;AAAA,EACpD;AAIA,QAAM,cAAc,mBAAmB;AACvC,QAAM,mBAAyB;AAAA,IAC3B,MAAM,uBAAuB,eAAe,WAAW;AAAA,IACvD,CAAC,eAAe,WAAW;AAAA,EAC/B;AAGA,QAAM,iBAAuB,qBAAmC,IAAI;AACpE,QAAM,uBAA6B,qBAAY,IAAI;AAEnD,QAAM,8BAAoC,qBAAuC,IAAI;AAGrF,QAAM,6BAAmC,qBAAO,uBAAuB;AACvE,EAAM,wBAAU,MAAM;AAClB,+BAA2B,UAAU;AAAA,EACzC,GAAG,CAAC,uBAAuB,CAAC;AAE5B,QAAM,0BAAgC,0BAAY,MAAM;AACpD,QAAI,mBAAmB,eAAe,SAAS;AAC3C,sBAAgB;AAAA,QACZ,MAAM;AAAA,QACN,eAAe,qBAAqB;AAAA,QACpC,SAAS,eAAe;AAAA,MAC5B,CAAC;AAAA,IACL;AACA,gCAA4B,UAAU;AAAA,EAC1C,GAAG,CAAC,eAAe,CAAC;AAEpB,QAAM,6BAAmC;AAAA,IACrC,WAAS;AAEL,UAAI,CAAC,oBAAoB,CAAC,iBAAiB;AACvC;AAAA,MACJ;AAGA,UAAI,CAAC,OAAO;AACR,gCAAwB;AACxB;AAAA,MACJ;AAGA,YAAM,UAAU,qCACT,qBAAK,OAAO,SAAS,aAAa,QAAQ,SAAS,aAAa,IADvD;AAAA,QAEZ,MAAM,MAAM;AAAA,MAChB;AACA,aAAO,QAAQ;AAGf,UAAI,MAAM,YAAY;AAClB,eAAO;AAAA,UACH;AAAA,UACA,OAAO,KAAK,MAAM,UAAU,EAAE,OAAO,CAAC,KAAK,cAAc;AACrD,gBAAI,OAAO,SAAS,QAAQ,IAAI,MAAM,WAAW,SAAS;AAC1D,mBAAO;AAAA,UACX,GAAG,CAAC,CAAC;AAAA,QACT;AAAA,MACJ;AAEA,YAAM,iBAAiB,uBAAuB,SAAS,YAAY,cAAc;AAGjF,UAAI,CAAC,2BAA2B,gBAAgB,4BAA4B,OAAO,GAAG;AAClF;AAAA,MACJ;AAGA,qBAAe,UAAU;AACzB,2BAAqB,UAAU;AAE/B,kCAA4B,UAAU,mBAAK;AAE3C,UAAI,kBAAkB;AAClB,yBAAiB;AAAA,UACb,MAAM;AAAA,UACN,eAAe;AAAA,UACf,SAAS;AAAA,QACb,CAAC;AAAA,MACL;AAAA,IACJ;AAAA,IACA,CAAC,kBAAkB,iBAAiB,YAAY,gBAAgB,uBAAuB;AAAA,EAC3F;AAGA,QAAM,UAAU,IAAG,eAAU,QAAQ,CAAC,MAAnB,mBAAuB,EAAE,KAAI,eAAU,QAAQ,CAAC,MAAnB,mBAAuB,UAAU,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAI,eAAU,QAAQ,CAAC,MAAnB,mBAAsB,MAAM;AAEvI,QAAM,oBAAgB,uBAAQ,MAAM;AAEhC,UAAM,sBAAsB,WAAW,uBAAuB;AAE9D,WACI,4CAAC,uDAAuB,KAAK,WACzB;AAAA,MAAC;AAAA;AAAA,QACG,MAAM;AAAA,QACN,OAAO;AAAA,QACP,QAAQ;AAAA,QACR;AAAA,QACA;AAAA,QACA,cAAc;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,QACA,iBAAiB,eAAe;AAAA,QAChC,gBAAgB,eAAe,kBAAkB,IAAI;AAAA,QACrD;AAAA,QACA,iBAAgB;AAAA,QAChB,kBAAkB,UAAU,mBAAmB;AAAA,QAC/C,mBACI,oBAAoB,kBAAkB,6BAA6B;AAAA,QAEvE,eAAe,UAAU,yBAAyB;AAAA,QAClD,kBAAkB;AAAA,QAClB,aAAa;AAAA,QACb,gBAAgB;AAAA,QAChB;AAAA,QACA,QAAQ;AAAA,QACR,cAAc,EAAE,UAAU,gCAAgC;AAAA,QAC1D;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,oBAAoB;AAAA,QACpB;AAAA,QACA;AAAA,QACA,oBAAoB;AAAA,QACpB,qBAAqB;AAAA,QACrB,wBAAwB;AAAA,QACxB,yBAAyB;AAAA,QACzB;AAAA,QACA;AAAA,QACA,oBAAoB;AAAA,QACpB,qBAAqB;AAAA,QACrB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,aAAa;AAAA;AAAA,IACjB,CACJ;AAAA,EAIR,GAAG;AAAA,IACC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,CAAC;AAED,QAAM,4BAAwB,uBAAQ,MAAM;AACxC,WAAO,4CAAC,2BAAgB,iBAAiB,WAAU,aAAc;AAAA,EACrE,GAAG,CAAC,SAAS,aAAa,CAAC;AAE3B,SACI,0EACK,kBACG;AAAA,IAAC;AAAA;AAAA,MACG;AAAA,MACA,iBAAiB;AAAA,MACjB,WAAW;AAAA;AAAA,EACf,GAEJ;AAAA,IAAC;AAAA;AAAA,MACG,QAAQ,iBAAiB,OAAO,MAAM,IAAI,uBAAuB;AAAA,MACjE;AAAA,MACA,KAAK;AAAA,MACL,aAAU;AAAA;AAAA,IAEV,4CAAC,4BAAiB,OAAc,QAAgB,UAAU,oBAAoB;AAAA,IAC7E;AAAA,EACL,CACJ;AAER;AAEA,IAAO,iCAAQ;;;ACp3Bf,IAAM,sCAAkC,0CAAmB,8BAAsB;AAwBjF,IAAM,0BAA0B,CAC5B,iBACA,uBACA,mBAC0B;AAC1B,QAAM,SAAS,CAAC;AAChB,SAAO,KAAK,eAAe,EAAE,QAAQ,CAAC,cAAoB;AACtD,UAAM,EAAE,YAAY,YAAY,IAAI,gBAAgB,SAAS;AAC7D,UAAM,4BAAwB,0BAAU,MAAM,SAAS,EAAE;AAEzD,QAAI,UAAU,CAAC;AACf,QAAI,MAAM,QAAQ,WAAW,KAAK,YAAY,QAAQ;AAClD,kBAAY,QAAQ,OAAK;AACrB,gBAAQ,CAAC,IAAI,sBAAsB,CAAC;AAAA,MACxC,CAAC;AAAA,IACL;AAEA,WAAO,qBAAqB,IAAI,CAAC,OAAgC;AAC7D,UAAI,yBAAI,SAAS;AACb,kBAAU,mBAAK,GAAG;AAAA,MACtB;AACA,aAAO,eAAe;AAAA,QAClB,eAAe;AAAA,QACf;AAAA,QACA,MAAM;AAAA,MACV,CAAC;AAAA,IACL;AAEA,QAAI,YAAY;AACZ,eAAS,IAAI,WAAW,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG;AAChD,cAAM,YAAY,CAAC;AACnB,kBAAU,WAAW,CAAC,CAAC,IAAI,OAAO,qBAAqB;AACvD,eAAO,qBAAqB,IAAI;AAAA,MACpC;AAAA,IACJ;AAAA,EACJ,CAAC;AACD,SAAO;AACX;AAMA,IAAM,6BAA6B,CAC/B,QACA,uBACA,gBACA,EAAE,gBAAgB,kBAAkB,KAAK,MACf;AAC1B,MAAI,CAAC,eAAgB,QAAO,CAAC;AAC7B,QAAM,gBAAgB,CAAC;AACvB,QAAM,aAAa,CAAC;AACpB,SAAO,QAAQ,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,UAAU,WAAW,MAAM;AAC9D,KAAC,YAAY,WAAW,YAAY,gBAAgB,YAAY,QAAQ,IAAI;AAAA,EAChF,CAAC;AACD,QAAM,YACF,oBAAoB,SAAS,SACvB,wBAAwB,YAAY,uBAAuB,cAAc,IACzE,CAAC;AACX,SAAO,kCACA,YACA,wBAAwB,eAAe,uBAAuB,cAAc;AAEvF;AAOA,IAAM,uBAAuB,CAAC,kBAAkD;AAC5E,MAAI,cAAc,sBAAsB,CAAC,eAAO,yBAAyB,GAAG;AACxE,mBAAO,yBAAyB,cAAc,kBAAkB;AAAA,EACpE;AACJ;AAeA,IAAM,kCAAkC,CAAC;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,MAAgE;AAC5D,SAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA,SAAS,mBAAK;AAAA,IACd,aAAa;AAAA,IACb,OAAO,UAAU;AAAA,IACjB;AAAA,IACA;AAAA,EACJ;AACJ;AAmBA,IAAM,sBAAsB,CAAC;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,MAAoD;AAChD,MAAI,aAAiC;AACrC,MAAI,2BAA2B,oBAAoB;AAC/C,0BAAsB,sBAAsB;AAC5C,iBAAa,gBAAAC,QAAK;AAAA,MACd;AAAA,MACA,eAAe,oBAAoB,qCAAqC;AAAA,IAC5E;AACA,yBAAqB,UAAU;AAAA,EACnC;AAEA,MAAI,eAAe;AACnB,MAAI,qBAAqB,YAAY;AACjC,UAAM,gBAAgB,kBAAkB;AAAA,MACpC,aAAa;AAAA,MACb,SAAS,kBAAkB;AAAA,IAC/B,CAAC;AACD,mBAAe,kCAAK,aAAe;AAAA,EACvC;AACA,SAAO,gBAAAA,QAAK;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe,oBAAoB,2CAA2C;AAAA,EAClF;AACJ;AAOA,IAAM,mBAAmB,CAAC,SAAgC;AACtD,QAAM;AAAA,IACF;AAAA,IACA;AAAA,IACA,iBAAAC,mBAAkB,MAAM;AAAA,IAAC;AAAA,IACzB,4BAA4B,MAAM;AAAA,IAAC;AAAA,IACnC;AAAA,IACA;AAAA,IACA,oBAAAC;AAAA,EACJ,IAAI;AAGJ,QAAM,wBAAoB,0CAAmB,QAAQ;AACrD,QAAM,qBAAiB,iDAAwB,UAAU,eAAe,SAAS;AAEjF,QAAM,eAAe,CAAC,UAAoE;AApP9F;AAqPQ,UAAM;AAAA,MACF,OAAO;AAAA,MACP;AAAA,MACA;AAAA;AAAA,MACA,UAAU,CAAC;AAAA,MACX,UAAU,CAAC;AAAA,MACX;AAAA,MACA;AAAA,MACA,kBAAkB;AAAA,MAClB,iBAAiB,4BAAoB,SAAS;AAAA,MAC9C;AAAA,MACA,wBAAwB;AAAA,IAC5B,IAAI;AACJ,UAAM,gBAAsB,yBAAqC,uBAAe;AAChF,yBAAqB,aAAa;AAElC,UAAM,YAAY,cAAS;AArQnC,UAAAC,KAAA;AAqQsC,oBAAAA,MAAA,UAAU,QAAO,cAAjB,wBAAAA,KAA6B;AAAA;AAC3D,UAAM;AAAA,MACF,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,SAAS;AAAA,IACb,IAAI,mCAA2B,EAAE,MAAM,CAAC;AACxC,QAAI,mBAA4C,CAAC;AACjD,UAAM,CAAC,uBAAuB,wBAAwB,IAAU,uBAAS,CAAC,CAAC;AAC3E,UAAM,qBAA2B,yBAAoC,0BAAkB;AAEvF,UAAM,CAAC,eAAe,IAAU,uBAAS,GAAG,UAAU,IAAI,UAAM,uBAAW,CAAC,EAAE;AAE9E,UAAM,CAAC,oBAAoB,qBAAqB,IAAU,uBAAS,CAAC,CAAC;AACrE,UAAM,CAAC,mBAAmB,oBAAoB,IAAU,uBAA6B;AAErF,UAAM,CAAC,0BAA0B,2BAA2B,IAAU;AAAA,MAClE,QAAQ,eAAe,oBAAoB,oCAAoC,CAAC;AAAA,IACpF;AACA,UAAM,qCAAqC;AAAA,MACvC,yDAAoB;AAAA,IACxB;AACA,UAAM,yBAAyB,QAAQ,yDAAoB,4BAA4B;AACvF,UAAM,cACF,4BACA,4CAAW,aAAX,mBAAqB,uCACrB,mCAAS;AAEb,UAAM,mCAAmC;AAAA,MACrC,yDAAoB;AAAA,IACxB;AACA,UAAM,wBACF,oCACA,kCAAkC,UAAU,GAAG,MAC/C,mCAAS,uBAAsB;AACnC,UAAM,6BAA6B;AAAA,MAC/B,eAAe,oBAAoB,2CAA2C;AAAA,IAClF;AACA,UAAM,uBAAuB;AAAA,MACzB,eAAe,oBAAoB,qCAAqC;AAAA,IAC5E;AACA,UAAM,oBAA0B,sBAAQ,MAAM;AA7StD,UAAAA;AA8SY,YAAM,gBAAgB,oCAAoC,aAAa,OAAO;AAE9E,YAAM,mBAAkBA,MAAA,0BAA0B,OAAO,MAAjC,OAAAA,MAAsC,CAAC;AAC/D,aAAO;AAAA,QACH,aAAS,6BAAa,CAAC,GAAG,SAAS,UAAU,cAAc;AAAA,QAC3D,aAAS;AAAA,UACL,CAAC;AAAA,UACD;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ,GAAG,CAAC,aAAa,SAAS,OAAO,CAAC;AAElC,UAAM,CAAC,WAAW,YAAY,IAAU,uBAAS,OAAO,KAAK,CAAC;AAC9D,UAAM,gCAAsC,0BAAY,CAAC,iBAAyB;AAC9E,mBAAa,YAAY;AAAA,IAC7B,GAAG,CAAC,CAAC;AACL,UAAM,wBAA8B,sBAAQ,MAAM;AAC9C,aAAO,sCAAsC,4BAA4B,EAAE,UAAU,CAAC;AAAA,IAC1F,GAAG,CAAC,kCAAkC,CAAC;AAEvC,UAAM,oBAA0B,sBAAQ,MAAM;AAC1C,UAAI,CAAC,uBAAuB;AACxB,eAAO,CAAC;AAAA,MACZ;AACA,aAAO;AAAA,QACH;AAAA,QACA,qBAAqB;AAAA,MACzB;AAAA,IACJ,GAAG,CAAC,aAAa,uBAAuB,6BAA6B,CAAC;AACtE,UAAM,yBAAyB,iCAAyB;AAAA,MACpD,SAAS,kBAAkB;AAAA,MAC3B,SAAS,kBAAkB;AAAA,MAC3B;AAAA,MACA;AAAA,MACA;AAAA,IACJ,CAAC;AAED,UAAM,+BAA+B;AAAA,MACjC,MACI,gCAAgC;AAAA,QAC5B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC;AAAA,MACL;AAAA,QACI;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,cAAc;AAAA,MAClB;AAAA,IACJ;AAEA,IAAM,wBAAU,MAAM;AAClB,UAAI,CAAC,0BAA0B;AAC3B,eAAO;AAAA,MACX;AAEA,UAAI,iBAAiB;AACrB,UAAI;AACA,gDAA6B,SAAS,4BAA4B,EAC7D,KAAK,aAAW;AACb,cAAI,gBAAgB;AAChB,qCAAyB,QAAQ,OAAkC;AAAA,UACvE;AAAA,QACJ,CAAC,EACA,MAAM,MAAM;AACT,cAAI,gBAAgB;AAChB,wCAA4B,KAAK;AAAA,UACrC;AAAA,QACJ,CAAC;AAAA,MACT,SAAQ;AACJ,oCAA4B,KAAK;AAAA,MACrC;AAEA,aAAO,MAAM;AACT,yBAAiB;AACjB,gDAA6B,MAAM,eAAe;AAAA,MACtD;AAAA,IACJ,GAAG,CAAC,8BAA8B,0BAA0B,eAAe,CAAC;AAE5E,uBAAmB,YAAY,MAAM;AACjC,UAAI;AACA,YAAI,0BAA0B;AAC1B,iBAAO,CAAC;AAAA,QACZ;AACA,eAAO,oBAAoB;AAAA,UACvB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AAAA,MACL,SAAS,GAAG;AACR,YAAI,aAAa,OAAO;AAEpB,kBAAQ,MAAM,wCAAwC,EAAE,OAAO,EAAE;AAAA,QACrE;AACA,eAAO,CAAC;AAAA,MACZ;AAAA,IACJ,GAAG;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAc;AAAA,MACd;AAAA,IACJ,CAAC;AAED,UAAM,wBAAwB,2BAA2B,wBAAwB;AAgBjF,QAAI,qBAAqB,CAAC;AAC1B,UAAM,YAAY;AAClB,UAAM,cAAU,oBAAI,uBAAuB,SAAS,KAAK,sBAAsB,SAAS;AACxF,UAAM,wBAAwB,OAAO,YAAY,WAAW,UAAU;AAEtE,UAAM,oBAAgB,oBAAI,aAAa,CAAC,uBAAuB,eAAe,GAAG,CAAC,CAAC;AACnF,UAAM,WAAO,oBAAI,aAAa,CAAC,uBAAuB,MAAM,GAAG,CAAC,CAAC;AACjE,UAAM,4BAA4B,CAAC,YAC/B,sBAAsB,uBAAuB,OAAO;AAExD,UAAM,aAAa,iBAAiB;AAAA,MAChC;AAAA,MACA;AAAA,MACA,uBAAuB;AAAA,IAC3B,CAAC;AAED,UAAM,kBAAkB,oBAAoB;AAAA,MACxC;AAAA,MACA;AAAA,MACA,uBAAuB;AAAA,IAC3B,CAAC;AAED,yBAAqB;AAAA,MACjB;AAAA,MACA;AAAA,IACJ;AAEA,QACI,CAAC,UAAU,SAAS,4CAAkC,KACtD,KAAC,oBAAI,aAAa,qBAAqB,GACzC;AACE,2BAAqB,CAAC;AAAA,IAC1B;AAKA,UAAM,yBAAkD,mBAAK;AAC7D,QAAI,aAAa;AACb,6BAAuB,kBAAkB,iEAAwB;AAAA,IACrE;AAGA,IAAM,wBAAU,MAAY;AACxB,sBAAgB,sBAAsB;AAAA,IAC1C,CAAC;AAGD,UAAM,EAAE,gBAAgB,CAAC,GAAG,SAAS,IAAI;AACzC,UAAM,UAAU,YAAY,eAAe,qBAAqB;AAChE,QACI,QAAQ,SAAS,KACjB,SAAS,wCAAgC,KACzC,UAAU,QAAQ,sBACpB;AACE,aACI;AAAA,QAAC;AAAA;AAAA,UACG,aAAU;AAAA,UACV;AAAA,UACA;AAAA,UACA,cAAc;AAAA,UACd,iBAAiB,UAAU,wBAAwB;AAAA;AAAA,MACvD;AAAA,IAER;AAGA,UAAM,qBAAqB;AAAA,MACvB,UAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,QACI,gBAAgB,UAAU,SAAS,8BAA2B;AAAA,QAC9D;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AAGA,UAAM,mBAAmBF,iBAAgB,6EAClC,QACA,wBAFkC;AAAA;AAAA;AAAA,MAKrC;AAAA,QACG,qBANkC;AAAA,MAOrC;AAAA,IACJ,EAAC;AAGD,QAAI,4BAA4B,OAAO,KAAK,qBAAqB,EAAE,WAAW,GAAG;AAC7E,aAAO;AAAA,IACX;AAGA,UAAM,eAAe,wBAAwB,kCAAkC;AAE/E,WACI;AAAA,MAAC;AAAA,kHACO,4BAAoB,WAD3B;AAAA,QAEG;AAAA,QACA,OAAO,SAAS,4BAAoB,SAAS;AAAA,QAC7C,QAAQ,UAAU,4BAAoB,SAAS;AAAA,QAC/C,YAAY;AAAA,UACR,oBACA,wBACA,mBACA,qBACA;AAAA,IACR;AAAA,EAER;AAEA,eAAa,YAAY,kCAClB,4BAAoB,YACpB,SAAS;AAGhB,eAAa,eAAe,iCACrB,SAAS,eADY;AAAA;AAAA,IAExB,gBAAgB,4BAAoB,SAAS;AAAA,EACjD;AAGA,eAAa,SAAS;AAEtB,SAAO,OAAO;AAAA,QACV,qCAAU,wBAAgB,0BAAkB,cAAc,oBAAoB,GAAGC,mBAAkB,CAAC;AAAA,IACpG,EAAE,QAAQ,UAAU;AAAA,EACxB;AACJ;AAEA,IAAO,2BAAQ;;;AChkBf;AAAA;AAAA;AAAA;AACA,IAAAE,kBAA+B;AAC/B,wBAAc;AACd,IAAO,cAAS,aAAaA,kBAA8B,0BAAUA;;;ACG9D,IAAM,qBAAqB,CAACC,SAAQ,aAAa,YAAY;AANpE;AAOI,QAAM,EAAE,QAAQ,IAAI;AACpB,QAAM,EAAE,SAAS,OAAO,IAAI,QAAQ;AACpC,MAAI,aAAa;AACjB,QAAM,oBAAgB;AAAA,IAClB,CAAC;AAAA,IACD;AAAA,QACA,iDAAwBA,QAAO,eAAe,SAAS;AAAA,EAC3D;AACA,QAAI,yBAAc,WAAd,mBAAuB,OAAvB,mBAA2B,UAAS,UAAU;AAC9C,UAAM,oBAAgB,8BAAiB,cAAc,OAAO,CAAC,EAAE,UAAU,WAAW,EAAE,CAAC,KAAK;AAC5F,UAAM,qBAAiB,8BAAiB,cAAc,OAAO,CAAC,EAAE,WAAW,WAAW,EAAE,CAAC,KAAK;AAC9F,UAAM,oBAAgB,8BAAiB,4CAA4C,WAAW;AAC9F,UAAM,iBAAiB,oBAAI,IAAI;AAAA,MAC3B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG;AAAA,MACH,GAAG;AAAA,IACP,CAAC;AACD,UAAM,oBAAoB,IAAI;AAAA,MAC1B,OAAO,OAAO,CAAC,KAAK,GAAG,MAAM;AACzB,cAAM,QAAQ,OAAO,MAAM,WAAW,IAAI,EAAE,KAAK,SAAS;AAC1D,YAAI,CAAC,eAAe,IAAI,KAAK,GAAG;AAC5B,cAAI,KAAK,CAAC;AAAA,QACd;AACA,eAAO;AAAA,MACX,GAAG,CAAC,CAAC;AAAA,IACT;AAEA,iBAAa,QAAQ,IAAI,CAAC,QAAQ,MAAM;AACpC,UAAI,kBAAkB,IAAI,CAAC,GAAG;AAE1B,eAAO,OAAO,IAAI,WAAU,CAAC,SAAS,KAAC,wBAAS,KAAK,IAAI,IAAI,CAAC,KAAM;AAAA,MACxE;AACA,aAAO;AAAA,IACX,CAAC;AAAA,EACL;AAEA,QAAM,sBAAsB,iCACrB,cADqB;AAAA,IAExB,SAAS,iCACF,UADE;AAAA,MAEL,MAAM,iCACC,QAAQ,OADT;AAAA,QAEF,SAAS;AAAA,MACb;AAAA,IACJ;AAAA,EACJ;AAEA,SAAO;AACX;;;AC5CA,IAAM,cAAc,CAAC,GAAG,YAAY,gBAAgB,oBAAoB;AAGpE,QAAM,YAAY,WAAW,QAAQ,QAAQ;AAC7C,QAAM,QAAQ;AAEd,MAAI,YAAY,IAAI;AAChB,UAAM,SAAS,eAAe,QAAQ,SAAS;AAAA,EACnD;AAEA,QAAM,UAAU,WAAW,QAAQ,MAAM;AACzC,MAAI,UAAU,IAAI;AACd,UAAM,OAAO,eAAe,QAAQ,OAAO,EAAE,IAAI,cAAY;AACzD,aAAO,OAAO,aAAa,WAAW,KAAK,MAAM,QAAQ,IAAI;AAAA,IACjE,CAAC;AAAA,EACL;AAEA,MAAI,OAAO,OAAO,OAAO,cAAc,GAAG;AACtC,UAAM,eAAe,MAAM,QAAQ,MAAM,YAAY,QAC/C,0CAAsB,MAAM,YAAY,IACxC;AAAA,EACV;AACA,MAAI,OAAO,OAAO,OAAO,YAAY,GAAG;AACpC,UAAM,aAAa,MAAM,QAAQ,MAAM,UAAU,QAC3C,0CAAsB,MAAM,UAAU,IACtC;AAAA,EACV;AACA,QAAM,WAAW;AACrB;AAYO,IAAM,kBAAkB,CAAC,UAQrB;AA9DX;AA+DI,QAAM,EAAE,WAAW,OAAO,QAAQ,aAAa,iBAAiB,OAAO,iBAAiB,IAAI;AAC5F,QAAM,sBAAsB,CAAC,0BAA0B,wBAAwB;AAC/E,QAAM,cAAuC,CAAC;AAC9C,sBAAoB,QAAQ,cAAY;AACpC,gBAAY,QAAQ,IAAI,UAAU,QAAQ;AAAA,EAC9C,CAAC;AAGD,QAAM,oBAAmB,+BAAO,iBAAgB,+BAAO,cAAc,cAAc;AAEnF,QAAM,kBAAiB,sDAAa,YAAb,mBAAsB,SAAtB,YAA8B,CAAC;AAEtD,QAAM,kBAAkB,sBAAsB,eAAe,SAAS,eAAe,MAAM;AAE3F,QAAM,eAAc,oBAAe,WAAf,YAAyB,CAAC,GAAG;AAAA,IAAI,WACjD,OAAO,UAAU,WAAW,QAAQ,MAAM;AAAA,EAC9C;AAEA,mCAAQ,QAAQ,OAAK,YAAY,GAAG,YAAY,gBAAgB,eAAe;AAE/E,SAAO,8DACA,cADA;AAAA,IAEH;AAAA,MACG,SAHA;AAAA,IAIH;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AACJ;AAEA,IAAM,oBAAoB,CAAC,QAA8D;AACrF,QAAM,uBAAuB,CAAC,OAA0E;AAA1E,iBAAE,eAAa,QA9FjD,IA8FkC,IAA2B,uBAA3B,IAA2B,CAAzB,eAAa;AA9FjD,QAAAC,KAAAC,KAAA;AA+FQ,QAAI,GAACD,MAAA,2CAAa,YAAb,gBAAAA,IAAsB,OAAM;AAC7B,aAAO,4CAAC,sCAAQ,aAAR,EAAoB,UAAkB;AAAA,IAClD;AACA,UAAM,oBAAgB;AAAA,MAClB,CAAC;AAAA,MACD;AAAA,UACA,iDAAwB,eAAO,eAAe,SAAS;AAAA,IAC3D;AACA,SAAIC,MAAA,cAAc,WAAd,gBAAAA,IAAuB,IAAI;AAC3B,YAAI,yBAAc,WAAd,mBAAuB,OAAvB,mBAA2B,UAAS,UAAU;AAG9C,sBAAc,OAAO,CAAC,EAAE,mBAAmB;AAC3C,sBAAc,OAAO,CAAC,EAAE,kBAAkB;AAC1C,sBAAc,OAAO,CAAC,EAAE,yBAAyB;AAAA,MACrD;AACA,YAAM,EAAE,OAAO,IAAI,YAAY,QAAQ;AACvC,UACI,MAAM,QAAQ,cAAc,OAAO,CAAC,EAAE,uBAAuB,KAC7D,MAAM,QAAQ,MAAM,KACpB,OAAO,QACT;AACE,cAAM,EAAE,mBAAmB,CAAC,EAAE,IAAI,cAAc,OAAO,CAAC;AACxD,cAAM,aAAa,IAAI;AAAA,UAClB,OAA4C;AAAA,YAAI,WAC7C,OAAO,UAAU,WAAW,QAAQ,MAAM;AAAA,UAC9C;AAAA,QACJ;AACA,sBAAc,OAAO,CAAC,EAAE,0BACpB,cAAc,OAAO,CAAC,EAAE,wBAAwB;AAAA,UAC5C,CAAC,UAAkB,WAAW,IAAI,KAAK,KAAK,CAAC,iBAAiB,SAAS,KAAK;AAAA,QAChF;AAAA,MACR;AAAA,IACJ;AAEA,WAAO,4CAAC,sBAAI,aAA0B,SAAS,iBAAmB,WAAY;AAAA,EAClF;AACA,SAAO,OAAO,OAAO,sBAAsB,EAAE,QAAQ,IAAI,OAAO,CAAC;AACrE;AAGA,IAAM,wBAAwB,CAAC,QAA8D;AAEzF,QAAM,2BAA2B,CAAC,OAME;AANF,iBAC9B;AAAA;AAAA,MACA,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,SAAS;AAAA,IA9IjB,IA0IsC,IAK3B,uBAL2B,IAK3B;AAAA,MAJH;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AA9IR,QAAAD;AAiJQ,QAAI,GAACA,MAAA,2CAAa,YAAb,gBAAAA,IAAsB,OAAM;AAC7B,aAAO,4CAAC,sBAAI,MAAY,OAAc,UAAoB,WAAY;AAAA,IAC1E;AACA,UAAM,EAAE,QAAQ,IAAI;AACpB,UAAM,EAAE,SAAS,OAAO,IAAI,QAAQ;AACpC,QAAI,aAAa,CAAC;AAClB,QAAI,YAAY,CAAC;AACjB,QAAI,UAAU,WAAW,OAAO,WAAW,QAAQ,QAAQ;AAEvD,YAAM,kBAAkB,IAAI;AAAA,QACxB,OAAO,OAAO,CAAC,KAAK,GAAG,MAAM;AACzB,gBAAM,QAAQ,OAAO,MAAM,WAAW,IAAI,EAAE,KAAK,SAAS;AAC1D,cACI,MAAM,WAAW,GAAG,KACpB,CAAC,MAAM,WAAW,gBAAgB,KAClC,CAAC,uBAAuB,SAAS,KAAK,GACxC;AACE,gBAAI,KAAK,CAAC;AAAA,UACd;AACA,iBAAO;AAAA,QACX,GAAG,CAAC,CAAC;AAAA,MACT;AACA,kBAAY,OAAO,OAAO,CAAC,GAAG,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAAC;AAC3D,mBAAa,QAAQ,OAAO,CAAC,GAAG,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAAC;AAAA,IACjE;AACA,UAAM,sBAAsB,iCACrB,cADqB;AAAA,MAExB,SAAS,iCACF,UADE;AAAA,QAEL,MAAM,iCACC,QAAQ,OADT;AAAA,UAEF,SAAS;AAAA,UACT,QAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,IACJ;AACA,WACI;AAAA,MAAC;AAAA;AAAA,QACG,aAAa;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,SACI;AAAA,IACR;AAAA,EAER;AACA,SAAO,OAAO,OAAO,0BAA0B,EAAE,QAAQ,IAAI,OAAO,CAAC;AACzE;AAIA,IAAM,kBAAkB,CAAC,QAA8D;AAEnF,QAAM,4BAA4B,CAAC,OAIC;AAJD,iBAC/B;AAAA;AAAA,MACA;AAAA,IAxMR,IAsMuC,IAG5B,uBAH4B,IAG5B;AAAA,MAFH;AAAA,MACA;AAAA;AAxMR,QAAAA;AA2MQ,QAAI,GAACA,MAAA,2CAAa,YAAb,gBAAAA,IAAsB,OAAM;AAC7B,aAAO,4CAAC,sBAAI,WAAsB,WAAY;AAAA,IAClD;AACA,UAAM,sBAAsB,mBAAmB,gBAAQ,aAAa,OAAO;AAC3E,WAAO,4CAAC,sBAAI,aAAa,qBAAqB,WAAsB,WAAY;AAAA,EACpF;AACA,SAAO,OAAO,OAAO,2BAA2B,EAAE,QAAQ,IAAI,OAAO,CAAC;AAC1E;AAEO,SAAS,mBAAmB,aAA6C,SAA2B;AACvG,SAAO;AACX;AAEA,IAAM,mBAAmB;AAAA,EACrB;AAAA,IACI;AAAA,MACI,yBAAiB;AAAA,QACb,UAAU;AAAA,QACV,WAAW;AAAA,QACX;AAAA,QACA,sBAAsB;AAAA,QACtB;AAAA,MACJ,CAAC;AAAA,IACL;AAAA,EACJ;AACJ;AACA,IAAM,EAAE,QAAAE,QAAO,IAAI;AACnB,IAAO,cAAQ;",
|
|
3
|
+
"sources": ["src/Map/index.ts", "esm-externals:react", "esm-externals:@splunk/visualizations-shared/colorUtils", "esm-externals:@splunk/visualizations-shared/hocUtils", "esm-externals:@splunk/visualizations-shared/JSONSchemaUtils", "esm-externals:styled-components", "esm-externals:lodash", "esm-externals:chroma-js", "esm-externals:maplibre-gl/dist/maplibre-gl.mjs", "esm-externals:@splunk/ui-utils/i18n", "esm-externals:@splunk/react-ui/Button", "esm-externals:@splunk/react-ui/Tooltip", "esm-externals:@splunk/visualization-context/MapContext", "esm-externals:@splunk/visualization-schemas", "src/common/utils/shadowDomUtils.ts", "esm-externals:@splunk/visualizations-shared/style", "esm-externals:maplibre-gl/dist/maplibre-gl.css", "esm-externals:@splunk/visualizations-shared/iconUtils", "esm-externals:@splunk/visualizations-shared/RemoteIcon", "esm-externals:@splunk/visualization-context/FeatureFlagContext", "esm-externals:@splunk/ui-utils/format", "src/Map/PureMap/keyboardConstants.ts", "esm-externals:@splunk/react-ui/Popover", "esm-externals:@splunk/themes", "esm-externals:@splunk/ui-utils/id", "src/Map/PureMap/Tooltip.tsx", "esm-externals:d3-scale", "esm-externals:@splunk/visualization-color-palettes", "esm-externals:@splunk/visualization-encoding/utils/types", "src/Map/PureMap/MapUtils.ts", "src/Map/PureMap/MapContext.tsx", "src/Map/PureMap/MarkerWrapper.tsx", "src/Map/PureMap/useRovingTabindex.ts", "src/Map/PureMap/BubbleLayer.tsx", "src/Map/PureMap/PureMapContainer.tsx", "src/Map/PureMap/generated/maplibreWorkerBundle.txt", "src/Map/PureMap/mapWorker.ts", "src/Map/PureMap/MarkerLayer.tsx", "src/Map/PureMap/ClusterLayer.tsx", "src/Map/PureMap/ChoroplethLayer.tsx", "esm-externals:@splunk/visualizations-shared/Message", "esm-externals:@splunk/visualization-context/GeoRegistry", "esm-externals:@splunk/visualization-context/GeoJsonProvider", "src/Map/PureMap/LocalChoroplethLayer.tsx", "src/Map/PureMap/PureMap.tsx", "esm-externals:@splunk/visualization-color-palettes/editors/PresetPalettes", "esm-externals:@splunk/visualization-icons", "esm-externals:@splunk/visualization-icons/placeholders", "esm-externals:@splunk/visualizations-shared/configUtils", "src/common/utils/configUtils.ts", "src/common/editorConfig/BackgroundColor.ts", "esm-externals:@splunk/themes/pick", "esm-externals:@splunk/themes/variables", "src/common/ThemedDefaults.tsx", "src/Map/config.ts", "esm-externals:@splunk/themes/getSettingsFromThemedProps", "esm-externals:@splunk/visualization-encoding/Options", "esm-externals:@splunk/visualizations-shared/SanitizeProps", "esm-externals:@splunk/visualization-context/TimezoneContext", "esm-externals:@splunk/moment", "esm-externals:@splunk/async-dynamic-options-evaluator", "esm-externals:prop-types", "src/common/interfaces/VizActionHandler.ts", "src/common/SplunkVisualization.tsx", "src/common/interfaces/DataSource.ts", "src/common/hooks/useSorting.ts", "src/common/hooks/usePagination.ts", "src/common/hooks/useDeepMemo.ts", "esm-externals:@splunk/visualizations-shared/SizeAwareWrapper", "src/common/components/MissingPropsMessage.tsx", "src/common/utils/hocUtils.ts", "src/common/hocs/withEditModeCover.tsx", "src/common/hocs/FixedSizeContainer.tsx", "src/common/components/IconPlaceholder.tsx", "src/common/hocs/withPlaceholder.tsx", "esm-externals:@splunk/visualizations-shared/numberUtils", "src/common/utils/dataUtils.ts", "src/common/hooks/usePrevious.ts", "src/common/hooks/useGetXAndYFields.tsx", "src/common/hooks/useDownsampleDataSources.tsx", "esm-externals:@splunk/visualization-context/FeatureFlags", "src/common/utils/featureFlagUtils.ts", "esm-externals:@splunk/visualizations-shared/trellisUtils", "src/common/utils/trellisUtils.ts", "esm-externals:@splunk/visualization-canvas", "src/common/components/VizStyleWrapper.jsx", "esm-externals:@splunk/react-icons/Triangle", "esm-externals:@splunk/visualizations-shared/propUtils", "esm-externals:@splunk/visualizations-shared/simpleXMLOptions", "src/common/chartingUtils.ts", "src/common/hooks/useTrellisEnabled.ts", "src/common/components/TrellisTitle.tsx", "src/common/TimeSeriesChartWrapper.tsx", "src/common/withDashboardViz.tsx", "esm-externals:@splunk/visualization-encoding/utils/dsl", "src/common/utils/mapUtils.ts", "src/Map/Map.tsx"],
|
|
4
|
+
"sourcesContent": ["export * from './Map';\nexport { default } from './Map';\n", "\nimport * as defaultImport from \"react\";\nexport * from \"react\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/colorUtils\";\nexport * from \"@splunk/visualizations-shared/colorUtils\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/hocUtils\";\nexport * from \"@splunk/visualizations-shared/hocUtils\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/JSONSchemaUtils\";\nexport * from \"@splunk/visualizations-shared/JSONSchemaUtils\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"styled-components\";\nexport * from \"styled-components\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"lodash\";\nexport * from \"lodash\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"chroma-js\";\nexport * from \"chroma-js\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"maplibre-gl/dist/maplibre-gl.mjs\";\nexport * from \"maplibre-gl/dist/maplibre-gl.mjs\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/ui-utils/i18n\";\nexport * from \"@splunk/ui-utils/i18n\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-ui/Button\";\nexport * from \"@splunk/react-ui/Button\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-ui/Tooltip\";\nexport * from \"@splunk/react-ui/Tooltip\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualization-context/MapContext\";\nexport * from \"@splunk/visualization-context/MapContext\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualization-schemas\";\nexport * from \"@splunk/visualization-schemas\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "export const getFloatingLayerStyleTarget = (anchor?: HTMLElement | null): HTMLElement | undefined => {\n if (!anchor || typeof anchor.getRootNode !== 'function') {\n return undefined;\n }\n\n const rootNode = anchor.getRootNode();\n\n if (typeof ShadowRoot !== 'undefined' && rootNode instanceof ShadowRoot) {\n return anchor.ownerDocument.head;\n }\n\n return undefined;\n};\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/style\";\nexport * from \"@splunk/visualizations-shared/style\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"maplibre-gl/dist/maplibre-gl.css\";\nexport * from \"maplibre-gl/dist/maplibre-gl.css\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/iconUtils\";\nexport * from \"@splunk/visualizations-shared/iconUtils\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/RemoteIcon\";\nexport * from \"@splunk/visualizations-shared/RemoteIcon\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualization-context/FeatureFlagContext\";\nexport * from \"@splunk/visualization-context/FeatureFlagContext\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/ui-utils/format\";\nexport * from \"@splunk/ui-utils/format\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "export const KEYBOARD_KEYS = {\n ARROW_RIGHT: 'ArrowRight',\n ARROW_LEFT: 'ArrowLeft',\n ARROW_UP: 'ArrowUp',\n ARROW_DOWN: 'ArrowDown',\n HOME: 'Home',\n END: 'End',\n ENTER: 'Enter',\n SPACE: ' ',\n} as const;\n", "\nimport * as defaultImport from \"@splunk/react-ui/Popover\";\nexport * from \"@splunk/react-ui/Popover\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/themes\";\nexport * from \"@splunk/themes\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/ui-utils/id\";\nexport * from \"@splunk/ui-utils/id\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as React from 'react';\nimport styled, { StyleSheetManager } from 'styled-components';\nimport Popover from '@splunk/react-ui/Popover';\nimport { isRemoteIcon, isDataURI } from '@splunk/visualizations-shared/iconUtils';\nimport { _ } from '@splunk/ui-utils/i18n';\nimport FeatureFlagContext from '@splunk/visualization-context/FeatureFlagContext';\nimport RemoteIcon from '@splunk/visualizations-shared/RemoteIcon';\nimport { variables } from '@splunk/themes';\nimport { createDOMID } from '@splunk/ui-utils/id';\nimport { getFloatingLayerStyleTarget } from '../../common/utils/shadowDomUtils';\n\ntype FeatureFlagContextValue = Record<string, boolean | undefined> | null;\n\nconst StyledPopover = styled(Popover)`\n min-width: 250px;\n max-width: 332px;\n max-width: fit-content;\n font-size: 12px;\n`;\n\nconst StyledTable = styled.table`\n margin: 2px 6px 2px 6px;\n width: calc(100% - 12px);\n`;\n\nconst StyledTitleColumn = styled.td`\n opacity: 0.85;\n word-break: break-all;\n vertical-align: top;\n`;\n\nconst StyledValueColumn = styled.td`\n text-align: right;\n word-break: break-all;\n vertical-align: top;\n`;\n\nconst StyledColorBlock = styled.div`\n background-color: ${props => props.color};\n display: inline-block;\n margin-right: 4px;\n border-radius: 2px;\n width: 6px;\n height: 11px;\n transform: translateY(1px);\n`;\n\nconst StyledIconWrapper = styled.span`\n margin-left: 4px;\n display: inline-block;\n vertical-align: middle;\n`;\n\nconst StyledTooltipHeader = styled.thead`\n th {\n height: 16px;\n color: ${variables.contentColorActive};\n padding: 0;\n }\n\n span {\n display: block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n width: 100%;\n }\n`;\n\nexport const convertDegToDMS = (decimalDegree: number, type: 'latitude' | 'longitude'): string => {\n const truncate = n => (n > 0 ? Math.floor(n) : Math.ceil(n));\n const absoluteDegree = Math.abs(decimalDegree);\n let degrees = truncate(absoluteDegree);\n let minutes = truncate((absoluteDegree - degrees) * 60);\n let seconds = Math.round((absoluteDegree - degrees - minutes / 60) * 3600);\n if (seconds === 60) {\n minutes += 1;\n seconds = 0;\n }\n if (minutes === 60) {\n degrees += 1;\n minutes = 0;\n }\n let direction: string;\n if (type === 'longitude') {\n direction = decimalDegree < 0 ? 'W' : 'E';\n } else if (type === 'latitude') {\n direction = decimalDegree < 0 ? 'S' : 'N';\n }\n return `${degrees}\u00B0 ${minutes}' ${seconds}\" ${direction}`;\n};\n\nexport interface TooltipProps {\n id?: string;\n open?: boolean;\n anchor?: HTMLElement;\n latitude?: number;\n longitude?: number;\n areaId?: string;\n areaValue?: number;\n additionalFields?: Array<{ name: string; value: number | string; color?: string; icon?: string }>;\n showCoordinates?: boolean;\n tooltipHeader?: string;\n stylesManagedExternally?: boolean;\n onMouseEnter?: (e: React.MouseEvent) => void;\n onMouseLeave?: (e: React.MouseEvent) => void;\n}\n// only want latitude/longitude for marker and bubble\n// omit for choropleth, and put areaid, areavalue instead\nconst Tooltip = ({\n id,\n open,\n anchor,\n latitude,\n longitude,\n areaId,\n areaValue,\n additionalFields = [],\n showCoordinates = true,\n tooltipHeader = null,\n stylesManagedExternally = false,\n onMouseEnter,\n onMouseLeave,\n}: TooltipProps): JSX.Element => {\n const featureFlagContext = React.useContext<FeatureFlagContextValue>(FeatureFlagContext);\n const isTooltipIconFlagEnabled = Boolean(featureFlagContext?.visualizations_enableTooltipIcon);\n const styleTarget = stylesManagedExternally ? undefined : getFloatingLayerStyleTarget(anchor);\n\n const popover = (\n <StyledPopover\n id={id}\n role=\"tooltip\"\n open={open}\n animation={false}\n anchor={anchor}\n data-test=\"map-marker-tooltip\"\n defaultPlacement=\"above\"\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n <StyledTable>\n {tooltipHeader && (\n <StyledTooltipHeader data-test=\"tooltip-header\">\n <tr>\n <th colSpan={2}>\n <span data-test=\"tooltip-header-value\">{tooltipHeader}</span>\n </th>\n </tr>\n </StyledTooltipHeader>\n )}\n <tbody>\n {Boolean(areaId && areaValue) && (\n <tr>\n <StyledTitleColumn data-test=\"area-id\">{areaId}</StyledTitleColumn>\n <StyledValueColumn data-test=\"area-value\">{areaValue}</StyledValueColumn>\n </tr>\n )}\n {Boolean(showCoordinates && latitude) && (\n <tr>\n <StyledTitleColumn>{_('Latitude')}</StyledTitleColumn>\n <StyledValueColumn data-test=\"latitude\">\n {convertDegToDMS(latitude, 'latitude')}\n </StyledValueColumn>\n </tr>\n )}\n {Boolean(showCoordinates && longitude) && (\n <tr>\n <StyledTitleColumn>{_('Longitude')}</StyledTitleColumn>\n <StyledValueColumn data-test=\"longitude\">\n {convertDegToDMS(longitude, 'longitude')}\n </StyledValueColumn>\n </tr>\n )}\n {additionalFields\n .filter(({ value }) => value && String(value) !== '0')\n .map(({ name, value, color, icon }) => (\n <tr key={createDOMID()}>\n <StyledTitleColumn data-test=\"field-title\">\n {color ? (\n <StyledColorBlock data-test=\"field-color\" color={color} />\n ) : null}\n <span>\n {name}\n {isTooltipIconFlagEnabled &&\n icon &&\n (isRemoteIcon(icon) || isDataURI(icon)) ? (\n <StyledIconWrapper data-test=\"field-icon\">\n <RemoteIcon iconURL={icon} width={16} height={16} />\n </StyledIconWrapper>\n ) : null}\n </span>\n </StyledTitleColumn>\n <StyledValueColumn data-test=\"field-value\">{value}</StyledValueColumn>\n </tr>\n ))}\n </tbody>\n </StyledTable>\n </StyledPopover>\n );\n\n return styleTarget ? <StyleSheetManager target={styleTarget}>{popover}</StyleSheetManager> : popover;\n};\n\nexport default Tooltip;\n", "\nimport * as defaultImport from \"d3-scale\";\nexport * from \"d3-scale\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualization-color-palettes\";\nexport * from \"@splunk/visualization-color-palettes\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualization-encoding/utils/types\";\nexport * from \"@splunk/visualization-encoding/utils/types\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import { forEach, sum, isNumber, min as lodashMin, max as lodashMax, get, isEqual, isObject } from 'lodash';\nimport { LngLatBoundsLike } from 'maplibre-gl';\nimport { scalePow } from 'd3-scale';\nimport chroma from 'chroma-js';\nimport type { MapContextInterface, BaseTileConfig } from '@splunk/visualization-context/MapContext';\nimport { isColor } from '@splunk/visualizations-shared/colorUtils';\nimport { VIZ_CATEGORICAL } from '@splunk/visualization-color-palettes';\nimport { isNumber as isNumberUtil } from '@splunk/visualization-encoding/utils/types';\nimport type { GeoJsonDataType } from '@splunk/visualizations-shared/mapUtils';\nimport { LAYER_TYPE } from '@splunk/visualization-schemas';\n\nexport const MAX_LATITUDE = 90;\nexport const MIN_LATITUDE = -90;\nexport const MAX_LONGITUDE = 180;\nexport const MIN_LONGITUDE = -180;\nexport const DEFAULT_RESULT_LIMIT = 1000;\nexport const DEFAULT_CLUSTER_COLOR = '#909090';\nexport const DEFAULT_SERIES_COLORS = VIZ_CATEGORICAL;\n// MapLibre requires a map style specification number which is always 8\nexport const MAP_STYLE_VERSION_NUMBER = 8;\n// currently using one [min, max] value set for bubbles across all zoom levels\nexport const MIN_BUBBLE_RADIUS = 7.11; // 10px\nexport const MAX_BUBBLE_RADIUS = 45.26; // 85px\nexport const DEFAULT_OPACITY = 0.8;\nconst LONGITUDE = 'longitude';\nconst LATITUDE = 'latitude';\nexport type MaybeBaseTileConfig = BaseTileConfig | Record<string, never>;\ninterface GenericLayerType {\n type: string;\n latitude: number[];\n longitude: number[];\n dataColors?: string[] | '';\n seriesColors: string[];\n additionalTooltipFields?: string[];\n tooltipHeaderField?: string[];\n resultLimit: number;\n metadata?: Array<{ [key: string]: number | string }>;\n}\n\nexport interface MarkerLayerType extends GenericLayerType {\n type: LAYER_TYPE.Marker;\n}\n\nexport interface BubbleLayerType extends GenericLayerType {\n type: LAYER_TYPE.Bubble;\n bubbleSize?: number[][] | number[];\n bubbleSizeFields: string[];\n dataValuesField?: string;\n tooltipHeaderFieldName?: string;\n geobin?: string[];\n icon?: string[];\n tooltipFieldIcons?: string;\n}\n\ninterface BubbleLayerDatumType {\n zoom?: number | null;\n values: number[];\n sanitizedValues: number[];\n coordinates: number[];\n}\n\nexport interface BubbleLayerDataType {\n data: BubbleLayerDatumType[];\n dataRange: number[];\n isPie: boolean;\n resultLimit: number;\n bubbleSizeFields: string[];\n}\n\nexport interface ChoroplethLayerType {\n type: LAYER_TYPE.Choropleth;\n areaIds: string[];\n areaValues: number[];\n dataColors: string[];\n additionalTooltipFields?: string[];\n tooltipHeaderField?: string[];\n geom?: GeoJsonDataType[] | null;\n resultLimit?: number;\n metadata?: Array<{ [key: string]: number | string | GeoJsonDataType }>;\n source?: string;\n width?: string | number;\n height?: string | number;\n choroplethEmptyAreaColor?: string;\n choroplethStrokeColor?: string;\n choroplethOpacity?: number;\n}\n\nexport interface MapLayerClickPayloadType {\n name?: string;\n value?: string | number;\n /* cell values of all cells of clicked row with the field and value - in shape row.<field>.value */\n [key: string]: string | number;\n}\n\nexport type ClusterLayerType = BubbleLayerType | MarkerLayerType;\nexport type LayerType = ClusterLayerType | ChoroplethLayerType;\n/**\n * Construct a tile preset {key: config} by combining the default + custom tile configs\n * Also returns the default tile config for each theme - light/dark\n * @param {MapContextInterface} args\n * @param {BaseTileConfig[]} args.defaultTileConfig\n * @param {BaseTileConfig[]} args.customTileConfig\n * @returns {Object} tile preset\n */\nexport const getTilePreset = ({\n defaultTileConfig = [],\n customTileConfig = [],\n}: MapContextInterface): {\n tilePreset: Record<string, BaseTileConfig>;\n defaultTileLight: MaybeBaseTileConfig;\n defaultTileDark: MaybeBaseTileConfig;\n} => {\n const tilePreset: Record<string, BaseTileConfig> = {};\n let defaultTileLight: MaybeBaseTileConfig = {};\n let defaultTileDark: MaybeBaseTileConfig = {};\n const tileConfigs = [...defaultTileConfig, ...customTileConfig];\n forEach(tileConfigs, tileConfig => {\n const key = tileConfig?.key;\n if (!key) {\n return;\n }\n const updatedConfig: BaseTileConfig = {\n ...tileConfig,\n version: MAP_STYLE_VERSION_NUMBER,\n };\n tilePreset[key] = updatedConfig;\n });\n\n if (defaultTileConfig.length > 0) {\n defaultTileLight =\n defaultTileConfig.find(config => config.theme === 'light') ??\n defaultTileConfig.find(config => config.theme === undefined) ??\n {};\n defaultTileDark =\n defaultTileConfig.find(config => config.theme === 'dark') ??\n defaultTileConfig.find(config => config.theme === undefined) ??\n {};\n }\n\n return { tilePreset, defaultTileLight, defaultTileDark };\n};\n\n/**\n * Check if baseLayerTileServer is in tilePreset and config matches current theme, if yes, return.\n * If no, construct a mapStyle with baseLayerTilerServer and baseLayerTileServerType\n * Else return default tile config based on current theme\n * @param {Object} args\n * @param {BaseTileConfig[]} args.tilePreset\n * @param {String} args.baseLayerTilerServer\n * @param {String} args.baseLayerTileServerType\n * @param {String} args.colorScheme\n * @param {BaseTileConfig} args.defaultTileDark\n * @param {BaseTileConfig} args.defaultTileLight\n * @returns {BaseTileConfig} mapStyle\n */\nexport const getMapStyle = ({\n showBaseLayer,\n baseLayerTileServer = '',\n baseLayerTileServerType = '',\n tilePreset = {},\n colorScheme = 'light',\n defaultTileLight = {},\n defaultTileDark = {},\n}: {\n showBaseLayer: boolean;\n baseLayerTileServer?: string;\n baseLayerTileServerType?: string;\n tilePreset?: Record<string, BaseTileConfig>;\n colorScheme?: string;\n defaultTileLight?: MaybeBaseTileConfig;\n defaultTileDark?: MaybeBaseTileConfig;\n}): MaybeBaseTileConfig => {\n if (!showBaseLayer) {\n return {\n name: 'empty-base-layer',\n key: 'empty-base-layer',\n version: MAP_STYLE_VERSION_NUMBER,\n sources: {\n 'base-tiles': {\n type: 'raster',\n tiles: [\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=',\n ],\n tileSize: 256,\n },\n },\n layers: [\n {\n id: 'base-layer',\n type: 'raster',\n source: 'base-tiles',\n minzoom: 0,\n maxzoom: 22,\n },\n ],\n };\n }\n\n if (\n baseLayerTileServer &&\n tilePreset[baseLayerTileServer] &&\n (!tilePreset[baseLayerTileServer].theme || tilePreset[baseLayerTileServer].theme === colorScheme)\n ) {\n return tilePreset[baseLayerTileServer];\n }\n\n if (baseLayerTileServer && baseLayerTileServerType) {\n let tiles: string[] = [];\n /**\n * Tile Server URLs (eg: http://{s}.somedomain.com/blabla/{z}/{x}/{y}{r}.png) can specify the variable {s} which refers to a subdomain\n * Subdomains are used to help with browser parallel requests per domain limitation. These subdomains are typically single letters 'a', 'b' and 'c'\n * Refer to https://leafletjs.com/SlavaUkraini/reference.html#tilelayer and https://wiki.openstreetmap.org/wiki/Tile_servers\n */\n if (/^(https?):\\/\\/{[sS]}\\./.exec(baseLayerTileServer)) {\n /**\n * sXML (Leaflet) allows users to define their own tile server URLs + list of available subdomains\n * In order to preserve this behavior during conversion to splunk.map,\n * if the variable {s} or {S} is detected, replace it with 'a', 'b' and 'c' - default values for subdomains\n */\n tiles = [\n baseLayerTileServer.replace(/{[sS]}/, 'a'),\n baseLayerTileServer.replace(/{[sS]}/, 'b'),\n baseLayerTileServer.replace(/{[sS]}/, 'c'),\n ];\n } else {\n tiles = [baseLayerTileServer];\n }\n const mapStyle: BaseTileConfig = {\n name: baseLayerTileServer,\n key: baseLayerTileServer,\n version: MAP_STYLE_VERSION_NUMBER,\n sources: {\n 'base-tiles': {\n type: baseLayerTileServerType,\n tiles,\n tileSize: 256,\n },\n },\n layers: [\n {\n id: 'base-layer',\n type: 'raster',\n source: 'base-tiles',\n minzoom: 0,\n maxzoom: 24, // https://maplibre.org/maplibre-gl-js-docs/api/map/\n },\n ],\n };\n return mapStyle;\n }\n\n // if tile server is not present in the preset AND we can't construct a mapStyle, fall back on defaults\n return colorScheme === 'light' ? defaultTileLight : defaultTileDark;\n};\n\nexport interface ZoomConstraints {\n minZoom: number;\n maxZoom: number;\n}\n\nexport const getZoomConstraintsFromTileConfig = (\n tileConfig: BaseTileConfig,\n baseLayerTileServer?: string\n): ZoomConstraints => {\n const { sources, layers } = tileConfig;\n let matchedBaseLayerTileServer = false;\n // check sources for minzoom maxzoom first\n const sourceKeys = Object.keys(sources);\n for (const key of sourceKeys) {\n const source = sources[key] as { [key: string]: unknown };\n const { minzoom, maxzoom } = source;\n const tiles = Array.isArray(source?.tiles) ? (source.tiles as string[]) : [];\n if (baseLayerTileServer && tiles.includes(baseLayerTileServer)) {\n matchedBaseLayerTileServer = true;\n }\n if (\n ((baseLayerTileServer && matchedBaseLayerTileServer) || !baseLayerTileServer) &&\n isNumber(minzoom) &&\n isNumber(maxzoom)\n ) {\n return {\n minZoom: minzoom,\n maxZoom: maxzoom,\n };\n }\n }\n // then check layers\n for (const layer of layers) {\n const { minzoom, maxzoom } = layer;\n if (\n ((baseLayerTileServer && matchedBaseLayerTileServer) || !baseLayerTileServer) &&\n isNumber(minzoom) &&\n isNumber(maxzoom)\n ) {\n return {\n minZoom: minzoom,\n maxZoom: maxzoom,\n };\n }\n }\n // Maplibre default - would reset previous min/maxZoom https://maplibre.org/maplibre-gl-js-docs/api/map/\n return {\n minZoom: 0,\n maxZoom: 24,\n };\n};\n\nexport const isBaseTileConfig = (config: MaybeBaseTileConfig): config is BaseTileConfig =>\n Boolean(config && 'name' in config && 'key' in config && 'sources' in config && 'layers' in config);\n\nexport const getZoomLevelFromGeobin = (geobinStr?: string | null): number | null => {\n if (!geobinStr) {\n return null;\n }\n // geostats cmds return geobin with zoom level 0-18, 0-99 in the geobinPattern covers the range\n const geobinPattern = /bin_id_zl_(\\d{1,2})_y_/g;\n const match = geobinPattern.exec(geobinStr);\n return (match?.length && Number.parseInt(match[1], 10)) ?? null;\n};\n\n// Bubble colors - static\nexport const getStaticColors = (colorCount: number, colorArray: string[]): string[] => {\n if (colorCount < 0 || !colorCount) {\n return [DEFAULT_CLUSTER_COLOR];\n }\n if (!colorArray?.length) {\n return [...new Array(colorCount).keys()].map(i => DEFAULT_SERIES_COLORS[i]);\n }\n // loop through colorArray to pick the first $colorCount colors\n // start from begining again if colorCount > colorArray.length\n return [...new Array(colorCount).keys()].map(i =>\n isColor(colorArray[i % colorArray.length]) ? colorArray[i % colorArray.length] : DEFAULT_CLUSTER_COLOR\n );\n};\n\n// Bubble size\nexport const matchBubbleSize = (dataRange: number[], data: number): any => {\n const size = scalePow().exponent(0.2).domain(dataRange).range([MIN_BUBBLE_RADIUS, MAX_BUBBLE_RADIUS])(\n data\n );\n\n if (size > MAX_BUBBLE_RADIUS) {\n return MAX_BUBBLE_RADIUS;\n }\n if (size < MIN_BUBBLE_RADIUS) {\n return MIN_BUBBLE_RADIUS;\n }\n return size;\n};\n\nexport const transposeArray = (array: number[][]): number[][] => {\n if (!array?.length || !array[0]?.length) {\n return [];\n }\n return array[0].map((_, i) => array.map(row => row[i]));\n};\n\n// sanitize values: update all null, undefined, or negative values to 0\nexport const sanitizeValues = (values: number[] | number[][]) => {\n // null / undefined\n if (!values) {\n return 0;\n }\n // number\n if (!Array.isArray(values)) {\n return Math.max(values, 0);\n }\n // array\n return values.map(arr => sanitizeValues(arr));\n};\n\n// eslint-disable-next-line consistent-return\nexport const sortByValuesField = (bubbleLayer: BubbleLayerType) => {\n const { bubbleSizeFields, dataValuesField } = bubbleLayer;\n\n // Find the index of dataValuesField in fields\n const index = bubbleSizeFields.indexOf(dataValuesField);\n if (index === -1) return bubbleLayer; // If not found, return as is\n\n // Move dataValuesField and corresponding sizes to the first position\n bubbleLayer.bubbleSizeFields.unshift(bubbleLayer.bubbleSizeFields.splice(index, 1)[0]);\n bubbleLayer.bubbleSize.unshift(bubbleLayer.bubbleSize.splice(index, 1)[0] as number & number[]);\n};\n\nexport const bakeBubbleData = (layer: BubbleLayerType): BubbleLayerDataType => {\n if (!layer?.bubbleSize?.length || !layer?.latitude?.length || !layer?.longitude?.length) {\n return null;\n }\n const hasGeobinData = Array.isArray(layer.geobin) && layer.geobin.length > 0;\n // if bubbleSize is passed as an array of single number array (data series)\n // e.g. [value0, value1, ...]\n // format each value as an array to unify data operations for data series and frames\n const sanitizedBubbleSize = sanitizeValues(layer.bubbleSize);\n let transposedBubbleSize: number[][];\n let transposedSanitizedBubbleSize: number[][];\n let isPie = false;\n // format array if bubbleSize is passed as an array of array (data frame)\n if (Array.isArray(layer.bubbleSize[0])) {\n // one-time array transpose,\n // e.g. from [column0data, column0data] (multi series)\n // to [[column0datum0, column1datum0], [column0datum1, column1data1], ...]\n // or e.g. from [column0data] (single series)\n // to [[column0data]]\n // for easy access of values at each geo location,\n // and min max pie size computation\n transposedBubbleSize = transposeArray(layer.bubbleSize as number[][]);\n transposedSanitizedBubbleSize = transposeArray(sanitizedBubbleSize);\n // if multiple series in the dataframe, set isPie to true\n if (layer.bubbleSize.length > 1) {\n isPie = true;\n // when dynamic coloring is enabled,\n // set the configured dataValues field as the first field\n // to apply dynamic colors only to the first pie slice.\n if (layer.dataValuesField && !!layer.dataColors) {\n sortByValuesField(layer); // here\n }\n }\n } else {\n transposedBubbleSize = layer.bubbleSize.map(n => [n]);\n transposedSanitizedBubbleSize = sanitizedBubbleSize.map(n => [n]);\n }\n if (!transposedBubbleSize?.length) {\n return null;\n }\n const data = layer.latitude\n .map((lat, i) => ({\n zoom: hasGeobinData ? getZoomLevelFromGeobin(layer.geobin[i]) : null,\n values: transposedBubbleSize[i],\n sanitizedValues: transposedSanitizedBubbleSize[i],\n coordinates: [layer.longitude[i], lat],\n metadata: layer.metadata ? layer.metadata[i] : {},\n }))\n .filter(d => Boolean(d.values));\n\n // compute the min/max value to encode min/max pie or bubble size\n let min = sum(transposedSanitizedBubbleSize[0]);\n let max = min;\n transposedSanitizedBubbleSize.forEach(row => {\n const bubbleSize = sum(row);\n max = Math.max(bubbleSize, max);\n min = Math.min(bubbleSize, min);\n });\n return {\n data,\n dataRange: [min, max],\n isPie,\n resultLimit: layer.resultLimit,\n bubbleSizeFields: layer.bubbleSizeFields,\n };\n};\n\nexport const isValidLatLon = (latlon: Array<number | string>): boolean => {\n if (!latlon || !Array.isArray(latlon) || latlon.length !== 2) {\n return false;\n }\n const [lat, lon] = latlon;\n if (!isNumberUtil(lat) || !(Number(lat) >= MIN_LATITUDE && Number(lat) <= MAX_LATITUDE)) {\n return false;\n }\n if (!isNumberUtil(lon) || !(Number(lon) >= MIN_LONGITUDE && Number(lon) <= MAX_LONGITUDE)) {\n return false;\n }\n return true;\n};\n\nexport const getChoroplethValues = (field: string, choroplethLayer: ChoroplethLayerType): number[] => {\n if (!Array.isArray(choroplethLayer.geom) || choroplethLayer.geom.length === 0) {\n return [];\n }\n const limit = choroplethLayer.resultLimit ?? DEFAULT_RESULT_LIMIT;\n const slicedGeomList = choroplethLayer.geom.slice(0, limit);\n const flatCoordinates = slicedGeomList.flatMap(geomObject => {\n if (!geomObject) {\n return [];\n }\n if (geomObject.type === 'MultiPolygon') {\n return geomObject.coordinates.flat(2);\n }\n if (geomObject.type === 'Polygon') {\n return geomObject.coordinates.flat();\n }\n return [];\n });\n return flatCoordinates.map(coord => coord[field === LONGITUDE ? 0 : 1]);\n};\n\n/**\n * Returns a list of all lat or lon coordinates used in a specified layer\n * @param {LayerType[]} layer\n * @param {string} field\n * @returns {number[]} list of lat coordinates or lon coordinates\n */\nconst getLatOrLonCoordinates = (layer: LayerType, field: string): number[] => {\n const getClusterValues = (clusterLayer: ClusterLayerType): number[] =>\n get(clusterLayer, field, []).slice(\n 0,\n clusterLayer.type === LAYER_TYPE.Marker && clusterLayer.resultLimit\n ? clusterLayer.resultLimit\n : DEFAULT_RESULT_LIMIT\n );\n return layer.type === LAYER_TYPE.Choropleth ? getChoroplethValues(field, layer) : getClusterValues(layer);\n};\n\n/**\n * Returns the min and max LongLat pairs to determine the layer boundaries to fit all markers/bubbles\n * @param {LayerType[]} layers\n * @returns {LngLatBoundsLike}\n */\nexport const getGlobalLayerBoundaries = (layers: LayerType[]): LngLatBoundsLike => {\n const isLayerValid = (field: string): boolean =>\n layers.every(layer => layer[field] || (layer as ChoroplethLayerType).geom);\n const getDefaultMax = (field: string) => (field === LONGITUDE ? MAX_LONGITUDE : MAX_LATITUDE);\n const getDefaultMin = (field: string) => (field === LONGITUDE ? MIN_LONGITUDE : MIN_LATITUDE);\n\n if (!layers || !Array.isArray(layers) || !layers.length) {\n return null;\n }\n\n const getMin = (field: string): number => {\n if (!isLayerValid(field)) {\n return getDefaultMin(field);\n }\n return layers.reduce((prevVal, layer) => {\n const coordinatesNumArr = getLatOrLonCoordinates(layer, field).map(x => +x);\n return lodashMin([prevVal, ...coordinatesNumArr]);\n }, getDefaultMax(field));\n };\n\n const getMax = (field: string): number => {\n if (!isLayerValid(field)) {\n return getDefaultMax(field);\n }\n return layers.reduce((prevVal, layer) => {\n const coordinatesNumArr = getLatOrLonCoordinates(layer, field).map(Number);\n return lodashMax([prevVal, ...coordinatesNumArr]);\n }, getDefaultMin(field));\n };\n\n return [\n [getMin(LONGITUDE), getMin(LATITUDE)],\n [getMax(LONGITUDE), getMax(LATITUDE)],\n ];\n};\n\nexport const formatTooltipFieldValue = (value: unknown): string | number => {\n if (value === null || value === undefined) {\n return '';\n }\n if (typeof value === 'string' || typeof value === 'number') {\n return value;\n }\n return JSON.stringify(value);\n};\n\nexport const getScaledOpacities = (colors: string[], cfgOpacity: number): number[] => {\n // extract opacity information from 8 digit hex codes\n const opacities = colors?.map(color => (color?.length === 9 ? (chroma(color).alpha() ?? 1) : 1));\n // opacity cannot be greater than configured opacity\n return opacities?.map(opacity => opacity * cfgOpacity);\n};\n\nexport const compareBaseStyles = (curr, next): boolean => {\n const currBaseLayer = curr?.layers?.find(layer => layer?.id === 'base-layer');\n const nextBaseLayer = next?.layers?.find(layer => layer?.id === 'base-layer');\n const currBaseSource = get(curr?.sources, (currBaseLayer?.source as string) ?? '');\n const nextBaseSource = get(next?.sources, (nextBaseLayer?.source as string) ?? '');\n\n if (!currBaseLayer || !nextBaseLayer || !currBaseSource || !nextBaseSource) {\n return false;\n }\n\n return isEqual(currBaseLayer, nextBaseLayer) && isEqual(currBaseSource, nextBaseSource);\n};\n\nexport const formatMetadata = (\n choroplethLayer: ChoroplethLayerType,\n i: number\n): { [key: string]: string } => {\n if (!choroplethLayer?.areaIds || !choroplethLayer?.areaValues) return {};\n if (i >= choroplethLayer.areaIds.length) return {};\n\n const metadata = choroplethLayer.metadata ? choroplethLayer.metadata[i] : {};\n const name = choroplethLayer.areaIds[i];\n const value = choroplethLayer.areaValues[i];\n const base = { name, value: String(value) };\n\n return Object.keys(metadata).reduce((result, curr) => {\n const key = `row.${curr}.value`;\n const val = isObject(metadata[curr]) ? JSON.stringify(metadata[curr]) : String(metadata[curr]);\n return { ...result, [key]: val };\n }, base);\n};\n", "import * as React from 'react';\n\ninterface MapContextValue {\n activeTooltipId: string | null;\n setActiveTooltipId: (id: string | null | ((prev: string | null) => string | null)) => void;\n activeChoroplethId: string | null;\n setActiveChoroplethId: (id: string | null) => void;\n}\n\nconst MapContext = React.createContext<MapContextValue>({\n activeTooltipId: null,\n setActiveTooltipId: () => {},\n activeChoroplethId: null,\n setActiveChoroplethId: () => {},\n});\n\nexport const MapProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\n const [activeTooltipId, setActiveTooltipId] = React.useState<string | null>(null);\n const [activeChoroplethId, setActiveChoroplethId] = React.useState<string | null>(null);\n\n const value = React.useMemo(\n () => ({\n activeTooltipId,\n setActiveTooltipId,\n activeChoroplethId,\n setActiveChoroplethId,\n }),\n [activeTooltipId, activeChoroplethId]\n );\n\n return <MapContext.Provider value={value}>{children}</MapContext.Provider>;\n};\n\nexport const useMapContext = () => React.useContext(MapContext);\n", "import type { Map } from 'maplibre-gl';\nimport { Marker } from 'maplibre-gl';\nimport * as React from 'react';\nimport { createDOMID } from '@splunk/ui-utils/id';\nimport Tooltip from './Tooltip';\nimport type { TooltipProps } from './Tooltip';\nimport { useMapContext } from './MapContext';\n\nexport interface MarkerWrapperProps extends React.HTMLAttributes<HTMLDivElement> {\n latitude: number;\n longitude: number;\n areaId?: string;\n areaValue?: number;\n additionalFields?: TooltipProps['additionalFields'];\n tooltipHeader?: TooltipProps['tooltipHeader'];\n map: React.MutableRefObject<Map>;\n showCoordinates?: boolean;\n stylesManagedExternally?: boolean;\n customMarkerId?: string;\n}\n\nconst MarkerWrapper = ({\n longitude,\n latitude,\n areaId,\n areaValue,\n additionalFields = [],\n tooltipHeader = null,\n map,\n children,\n showCoordinates = true,\n stylesManagedExternally = false,\n customMarkerId,\n ...otherProps\n}: MarkerWrapperProps): JSX.Element => {\n const container = React.useRef<HTMLDivElement>();\n const marker = React.useRef<Marker>();\n const [isTooltipOpen, setTooltipOpenStatus] = React.useState(false);\n const [isFocused, setIsFocused] = React.useState(false);\n const [isHovered, setIsHovered] = React.useState(false);\n const [isPopoverHovered, setIsPopoverHovered] = React.useState(false);\n const tooltipId = React.useMemo(() => createDOMID(), []);\n const pendingMoveEndHandler = React.useRef<(() => void) | null>(null);\n const closeTimeoutRef = React.useRef<NodeJS.Timeout | null>(null);\n const generatedMarkerId = React.useMemo(() => createDOMID(), []);\n const markerId = customMarkerId || generatedMarkerId;\n const { activeTooltipId, setActiveTooltipId } = useMapContext();\n const mapMoveHandlerRef = React.useRef<(() => void) | null>(null);\n\n const openTooltip = React.useCallback(() => {\n setActiveTooltipId(markerId);\n setTooltipOpenStatus(true);\n }, [markerId, setActiveTooltipId]);\n\n const cleanupPendingMoveEnd = React.useCallback(() => {\n if (pendingMoveEndHandler.current && map.current && typeof map.current.off === 'function') {\n map.current.off('moveend', pendingMoveEndHandler.current);\n pendingMoveEndHandler.current = null;\n }\n }, [map]);\n\n const cleanupMapMoveHandler = React.useCallback(() => {\n if (mapMoveHandlerRef.current && map.current && typeof map.current.off === 'function') {\n map.current.off('move', mapMoveHandlerRef.current);\n mapMoveHandlerRef.current = null;\n }\n }, [map]);\n\n // Consolidated close logic: only close if nothing is keeping tooltip open\n const shouldCloseTooltip = React.useCallback(\n (focused: boolean, hovered: boolean, popoverHovered: boolean) => {\n return !focused && !hovered && !popoverHovered;\n },\n []\n );\n\n const cancelCloseTimeout = React.useCallback(() => {\n if (closeTimeoutRef.current) {\n clearTimeout(closeTimeoutRef.current);\n closeTimeoutRef.current = null;\n }\n }, []);\n\n const closeTooltipIfShould = React.useCallback(\n (focused: boolean, hovered: boolean, popoverHovered: boolean) => {\n cancelCloseTimeout();\n\n if (shouldCloseTooltip(focused, hovered, popoverHovered)) {\n // Small delay to allow mouse to reach tooltip\n closeTimeoutRef.current = setTimeout(() => {\n setTooltipOpenStatus(false);\n setActiveTooltipId(currentId => (currentId === markerId ? null : currentId));\n closeTimeoutRef.current = null;\n }, 100);\n }\n },\n [shouldCloseTooltip, markerId, setActiveTooltipId, cancelCloseTimeout]\n );\n\n const handleMouseEnter = React.useCallback(() => {\n cancelCloseTimeout();\n setIsHovered(true);\n openTooltip();\n }, [openTooltip, cancelCloseTimeout]);\n\n const handleMouseLeave = React.useCallback(() => {\n setIsHovered(false);\n closeTooltipIfShould(isFocused, false, isPopoverHovered);\n }, [isFocused, isPopoverHovered, closeTooltipIfShould]);\n\n const handlePopoverMouseEnter = React.useCallback(() => {\n cancelCloseTimeout();\n setIsPopoverHovered(true);\n }, [cancelCloseTimeout]);\n\n const handlePopoverMouseLeave = React.useCallback(() => {\n setIsPopoverHovered(false);\n closeTooltipIfShould(isFocused, isHovered, false);\n }, [isFocused, isHovered, closeTooltipIfShould]);\n\n const handleBlur = React.useCallback(() => {\n setIsFocused(false);\n cleanupPendingMoveEnd();\n closeTooltipIfShould(false, isHovered, isPopoverHovered);\n }, [isHovered, isPopoverHovered, cleanupPendingMoveEnd, closeTooltipIfShould]);\n\n const handleEscapeKey = React.useCallback(\n (e: KeyboardEvent) => {\n if (e.key === 'Escape' && activeTooltipId === markerId) {\n cancelCloseTimeout();\n setIsFocused(false);\n setIsHovered(false);\n setIsPopoverHovered(false);\n cleanupPendingMoveEnd();\n setTooltipOpenStatus(false);\n setActiveTooltipId(null);\n }\n },\n [activeTooltipId, markerId, cleanupPendingMoveEnd, setActiveTooltipId, cancelCloseTimeout]\n );\n\n const handleFocus = React.useCallback(() => {\n // Clean up any pending moveend handler from previous focus\n cleanupPendingMoveEnd();\n\n // Pan map to show focused datapoint if it's outside current bounds\n if (\n map.current &&\n longitude !== undefined &&\n latitude !== undefined &&\n typeof map.current.once === 'function'\n ) {\n const bounds = map.current.getBounds();\n if (!bounds.contains([longitude, latitude])) {\n // Set focused state and open tooltip after pan completes\n const moveEndHandler = () => {\n pendingMoveEndHandler.current = null;\n setIsFocused(true);\n openTooltip();\n };\n pendingMoveEndHandler.current = moveEndHandler;\n map.current.once('moveend', moveEndHandler);\n map.current.panTo([longitude, latitude]);\n return;\n }\n }\n // No pan needed, set focused immediately\n setIsFocused(true);\n openTooltip();\n }, [openTooltip, map, longitude, latitude, cleanupPendingMoveEnd]);\n\n const cleanupMarker = React.useCallback(() => {\n if (marker.current) {\n marker.current.remove();\n marker.current = undefined;\n }\n }, []);\n\n React.useEffect(() => {\n try {\n if (marker.current) {\n marker.current.setLngLat([longitude, latitude]);\n } else {\n marker.current = new Marker({ element: container.current });\n marker.current.setLngLat([longitude, latitude]);\n marker.current.addTo(map.current);\n }\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error);\n cleanupMarker();\n }\n }, [latitude, longitude, map]);\n\n // Add Escape key listener when tooltip is open\n React.useEffect(() => {\n if (isTooltipOpen && activeTooltipId === markerId) {\n document.addEventListener('keydown', handleEscapeKey);\n return () => {\n document.removeEventListener('keydown', handleEscapeKey);\n };\n }\n return undefined;\n }, [isTooltipOpen, activeTooltipId, markerId, handleEscapeKey]);\n\n // Close tooltip if another marker becomes active\n React.useEffect(() => {\n if (isTooltipOpen && activeTooltipId !== markerId && activeTooltipId !== null) {\n setTooltipOpenStatus(false);\n }\n }, [activeTooltipId, markerId, isTooltipOpen]);\n\n // Reopen tooltip if this marker has focus/hover/popoverHover when another tooltip closes\n React.useEffect(() => {\n if (!isTooltipOpen && activeTooltipId === null && (isFocused || isHovered || isPopoverHovered)) {\n openTooltip();\n }\n }, [activeTooltipId, isTooltipOpen, isFocused, isHovered, isPopoverHovered, openTooltip]);\n\n // For choropleths: sync local tooltip state with global active state\n // Choropleths set activeTooltipId from MapLibre event handlers, so open tooltip when this marker becomes active\n React.useEffect(() => {\n if (!customMarkerId) return;\n\n if (activeTooltipId === markerId) {\n setTooltipOpenStatus(true);\n } else {\n setTooltipOpenStatus(false);\n }\n }, [customMarkerId, activeTooltipId, markerId]);\n\n // Update marker position during map movement/zoom when tooltip is open\n // Use requestAnimationFrame to throttle updates to once per frame\n const [, forceUpdate] = React.useReducer(x => x + 1, 0);\n\n React.useEffect(() => {\n if (!isTooltipOpen || !map.current || typeof map.current.on !== 'function') {\n return undefined;\n }\n\n let rafId: number | null = null;\n\n const handleMapMove = () => {\n rafId ??= requestAnimationFrame(() => {\n forceUpdate();\n rafId = null;\n });\n };\n\n mapMoveHandlerRef.current = handleMapMove;\n map.current.on('move', handleMapMove);\n\n return () => {\n if (rafId !== null) {\n cancelAnimationFrame(rafId);\n }\n cleanupMapMoveHandler();\n };\n }, [isTooltipOpen, map, cleanupMapMoveHandler]);\n\n React.useEffect(\n () => () => {\n cancelCloseTimeout();\n cleanupPendingMoveEnd();\n cleanupMapMoveHandler();\n cleanupMarker();\n },\n [cancelCloseTimeout, cleanupPendingMoveEnd, cleanupMapMoveHandler, cleanupMarker]\n );\n const filteredAdditionalFields = additionalFields.filter(({ value }) => value && String(value) !== '0');\n const showTooltip =\n showCoordinates || filteredAdditionalFields.length || (areaId && !Number.isNaN(areaValue));\n // Only show tooltip if this marker is the active one in the global context\n // keepChildrenVisible allows tooltip to show during state sync for choropleths\n const isTooltipVisible = activeTooltipId === markerId && (isTooltipOpen || customMarkerId !== undefined);\n\n const childrenWithTooltipId = React.useMemo(() => {\n if (!children) return null;\n if (!React.isValidElement(children)) return children;\n return React.cloneElement(children, {\n 'aria-describedby': tooltipId,\n } as any);\n }, [children, tooltipId]);\n\n return (\n <div>\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */}\n <div // NOSONAR typescript:S6848 - this wrapper only forwards hover/focus events to position a tooltip; it is not an interactive control and adding a role would misrepresent it to assistive tech\n ref={container}\n data-test=\"map-marker\"\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onFocus={handleFocus}\n onBlur={handleBlur}\n {...otherProps}\n >\n {childrenWithTooltipId}\n </div>\n <div>\n {showTooltip && (\n <Tooltip\n id={tooltipId}\n open={isTooltipVisible}\n anchor={container.current}\n latitude={showCoordinates ? latitude : null}\n longitude={showCoordinates ? longitude : null}\n areaId={areaId}\n areaValue={areaValue}\n additionalFields={additionalFields}\n showCoordinates={showCoordinates}\n tooltipHeader={tooltipHeader}\n stylesManagedExternally={stylesManagedExternally}\n onMouseEnter={handlePopoverMouseEnter}\n onMouseLeave={handlePopoverMouseLeave}\n />\n )}\n </div>\n </div>\n );\n};\n\nexport default MarkerWrapper;\n", "import * as React from 'react';\nimport type { Map } from 'maplibre-gl';\nimport { KEYBOARD_KEYS } from './keyboardConstants';\n\nexport interface UseRovingTabindexReturn {\n handleKeyDown: (e: React.KeyboardEvent) => void;\n handleFocus: () => void;\n handleBlur: () => void;\n setElementRef: (index: number, element: HTMLElement | SVGElement | null) => void;\n}\n\n/**\n * Custom hook to implement roving tabindex pattern for map datapoints.\n *\n * This hook manages tabIndex attributes imperatively via direct DOM manipulation\n * to avoid React reconciliation issues when changing tabIndex on focused elements.\n * Only one datapoint is in the tab order at a time (tabIndex={0}),\n * while others are not (tabIndex={-1}).\n */\nexport const useRovingTabindex = (map: React.MutableRefObject<Map>): UseRovingTabindexReturn => {\n const elementRefsRef = React.useRef<globalThis.Map<number, HTMLElement | SVGElement>>(\n new globalThis.Map()\n );\n const focusedIndexRef = React.useRef<number>(0);\n\n const moveFocusOnElementRemove = React.useCallback((removedElementIndex: number) => {\n const removedElement = elementRefsRef.current.get(removedElementIndex);\n const wasFocused = removedElement?.getAttribute('tabindex') === '0';\n\n elementRefsRef.current.delete(removedElementIndex);\n\n if (wasFocused) {\n // Find a suitable replacement element to receive tabindex=\"0\"\n // Priority: next element, or previous element, or first available\n let replacementIndex: number | null = null;\n const indices = Array.from(elementRefsRef.current.keys()).sort((a, b) => a - b);\n\n // Try to find the next index after the removed one\n const nextIndex = indices.find(i => i > removedElementIndex);\n if (nextIndex !== undefined) {\n replacementIndex = nextIndex;\n } else if (indices.length > 0) {\n // If no next index, use the last available element\n replacementIndex = indices.at(-1);\n }\n\n if (replacementIndex === null) {\n focusedIndexRef.current = 0;\n } else {\n focusedIndexRef.current = replacementIndex;\n const replacementElement = elementRefsRef.current.get(replacementIndex);\n if (replacementElement) {\n replacementElement.setAttribute('tabindex', '0');\n }\n }\n }\n }, []);\n\n const setElementRef = React.useCallback(\n (index: number, element: HTMLElement | SVGElement) => {\n if (element) {\n const existingElement = elementRefsRef.current.get(index);\n const hadFocus = existingElement?.getAttribute('tabindex') === '0';\n\n elementRefsRef.current.set(index, element);\n\n if (hadFocus) {\n element.setAttribute('tabindex', '0');\n } else {\n element.setAttribute('tabindex', index === focusedIndexRef.current ? '0' : '-1');\n }\n } else {\n moveFocusOnElementRemove(index);\n }\n },\n [moveFocusOnElementRemove]\n );\n\n const resolveFocusedIndex = React.useCallback(() => {\n let currentIndex = focusedIndexRef.current;\n\n if (!elementRefsRef.current.has(currentIndex)) {\n for (const [index, element] of elementRefsRef.current.entries()) {\n if (element.getAttribute('tabindex') === '0') {\n currentIndex = index;\n focusedIndexRef.current = index;\n break;\n }\n }\n }\n\n return currentIndex;\n }, []);\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent) => {\n const currentIndex = resolveFocusedIndex();\n\n const count = elementRefsRef.current.size;\n let newIndex: number;\n\n switch (e.key) {\n case KEYBOARD_KEYS.ARROW_RIGHT:\n case KEYBOARD_KEYS.ARROW_DOWN:\n e.preventDefault();\n newIndex = currentIndex === count - 1 ? 0 : currentIndex + 1;\n break;\n case KEYBOARD_KEYS.ARROW_LEFT:\n case KEYBOARD_KEYS.ARROW_UP:\n e.preventDefault();\n newIndex = currentIndex === 0 ? count - 1 : currentIndex - 1;\n break;\n case KEYBOARD_KEYS.HOME:\n e.preventDefault();\n newIndex = 0;\n break;\n case KEYBOARD_KEYS.END:\n e.preventDefault();\n newIndex = count - 1;\n break;\n default:\n return;\n }\n\n if (newIndex !== currentIndex) {\n focusedIndexRef.current = newIndex;\n const oldElement = elementRefsRef.current.get(currentIndex);\n const newElement = elementRefsRef.current.get(newIndex);\n\n if (oldElement) {\n oldElement.setAttribute('tabindex', '-1');\n }\n\n if (newElement) {\n newElement.setAttribute('tabindex', '0');\n // defer to after render to prevent render loops\n requestAnimationFrame(() => {\n newElement.focus();\n });\n }\n }\n },\n [resolveFocusedIndex]\n );\n\n const handleFocus = React.useCallback(() => {\n if (map.current?.keyboard) {\n map.current.keyboard.disable();\n }\n }, [map]);\n\n const handleBlur = React.useCallback(() => {\n if (map.current?.keyboard) {\n map.current.keyboard.enable();\n }\n }, [map]);\n\n return {\n handleKeyDown,\n handleFocus,\n handleBlur,\n setElementRef,\n };\n};\n", "import * as React from 'react';\nimport styled from 'styled-components';\nimport type { Map } from 'maplibre-gl';\nimport { sum } from 'lodash';\nimport { isRemoteIcon, isDataURI } from '@splunk/visualizations-shared/iconUtils';\nimport { isColor } from '@splunk/visualizations-shared/colorUtils';\nimport RemoteIcon from '@splunk/visualizations-shared/RemoteIcon';\nimport FeatureFlagContext from '@splunk/visualization-context/FeatureFlagContext';\nimport { _ } from '@splunk/ui-utils/i18n';\nimport { sprintf } from '@splunk/ui-utils/format';\nimport { KEYBOARD_KEYS } from './keyboardConstants';\nimport { convertDegToDMS } from './Tooltip';\nimport {\n bakeBubbleData,\n BubbleLayerType,\n DEFAULT_SERIES_COLORS,\n DEFAULT_RESULT_LIMIT,\n DEFAULT_CLUSTER_COLOR,\n getStaticColors,\n matchBubbleSize,\n} from './MapUtils';\nimport MarkerWrapper from './MarkerWrapper';\nimport type { TooltipProps } from './Tooltip';\nimport { useRovingTabindex } from './useRovingTabindex';\n\ntype FeatureFlagContextValue = Record<string, boolean | undefined> | null;\n\nexport const GEO_BOUND_PREFIX = '_geo_bounds_';\nexport const GEO_LAT_AND_LONG_FIELD = ['_geo_long_field', '_geo_lat_field'];\nexport const ICON_DISPLAY_CUTOFF = 16;\n\nexport interface PieSegmentProps {\n start: number;\n end: number;\n radius: number;\n color: string;\n themeColor: string;\n segmentMetadata?: { name: string; value: number; color: string };\n handleBubbleClick?: (e: React.UIEvent, name: string, count: number) => void;\n ariaLabel?: string;\n 'aria-describedby'?: string;\n onKeyDown?: (e: React.KeyboardEvent) => void;\n onFocus?: () => void;\n onBlur?: () => void;\n elementRef?: React.Ref<Element>;\n hasEventHandlers?: boolean;\n}\n\nexport const PieSegment = React.memo(\n ({\n start,\n end,\n radius,\n color,\n themeColor,\n segmentMetadata,\n handleBubbleClick,\n ariaLabel,\n 'aria-describedby': ariaDescribedBy,\n onKeyDown,\n onFocus,\n onBlur,\n elementRef,\n hasEventHandlers,\n }: PieSegmentProps): JSX.Element => {\n const { name, value } = segmentMetadata ?? {};\n const handleInteraction = React.useCallback(\n (e: React.UIEvent) => {\n if ('key' in e && e.key !== KEYBOARD_KEYS.ENTER && e.key !== KEYBOARD_KEYS.SPACE) {\n return;\n }\n e.preventDefault();\n handleBubbleClick(e, name, value);\n },\n [name, value, handleBubbleClick]\n );\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent) => {\n // Handle Enter/Space for activation only when interactive\n if (hasEventHandlers && (e.key === KEYBOARD_KEYS.ENTER || e.key === KEYBOARD_KEYS.SPACE)) {\n handleInteraction(e);\n }\n\n // Always call the navigation handler for arrow keys, Home, End\n if (onKeyDown) {\n onKeyDown(e);\n }\n },\n [hasEventHandlers, handleInteraction, onKeyDown]\n );\n\n if (end - start === 1) {\n return (\n <BubbleSegment\n $hasEventHandlers={hasEventHandlers}\n ref={elementRef as React.Ref<SVGCircleElement>}\n as=\"circle\"\n role={hasEventHandlers ? 'button' : 'graphics-symbol'}\n aria-label={ariaLabel}\n aria-describedby={ariaDescribedBy}\n onClick={hasEventHandlers ? handleInteraction : undefined}\n onKeyDown={handleKeyDown}\n onFocus={onFocus}\n onBlur={onBlur}\n cx={radius}\n cy={radius}\n r={radius}\n fill={color}\n fillOpacity={0.5}\n strokeWidth={1.5}\n stroke={color}\n />\n );\n }\n const a0 = 2 * Math.PI * (start - 0.25);\n const a1 = 2 * Math.PI * (end - 0.25);\n const x0 = Math.cos(a0);\n const y0 = Math.sin(a0);\n const x1 = Math.cos(a1);\n const y1 = Math.sin(a1);\n const arc = end - start > 0.5 ? 1 : 0;\n\n return (\n <BubbleSegment\n $hasEventHandlers={hasEventHandlers}\n ref={elementRef as React.Ref<SVGPathElement>}\n as=\"path\"\n role={hasEventHandlers ? 'button' : 'graphics-symbol'}\n aria-label={ariaLabel}\n aria-describedby={ariaDescribedBy}\n onClick={hasEventHandlers ? handleInteraction : undefined}\n onKeyDown={handleKeyDown}\n onFocus={onFocus}\n onBlur={onBlur}\n d={`M ${radius} ${radius} L ${radius + radius * x0} ${\n radius + radius * y0\n } A ${radius} ${radius} 0 ${arc} 1 ${radius + radius * x1} ${\n radius + radius * y1\n } L ${radius} ${radius} A 0 0 0 ${arc} 0 ${radius} ${radius}`}\n fill={color}\n fillOpacity={0.8}\n stroke={themeColor}\n strokeWidth={2}\n strokeOpacity={0.3}\n />\n );\n }\n);\n\nPieSegment.displayName = 'MapBubblePieSegment';\n\nexport const BubbleSegment = styled.path<{ $hasEventHandlers: boolean }>`\n transition: 0.2s ease-in-out;\n transition-property: fill, stroke;\n ${({ $hasEventHandlers }) => $hasEventHandlers && 'cursor: pointer;'}\n\n &:focus {\n outline: none;\n }\n`;\n\nexport const BUBBLE_SEGMENT_DIMMED_STYLES = {\n fill: 'rgba(150, 150, 150, 0.3)',\n stroke: 'rgba(200, 200, 200, 0.4)',\n} as const;\n\ninterface BubbleSvgProps {\n values: number[];\n valueRange: number[];\n tooltipHeader?: string;\n latitude: number;\n longitude: number;\n icon?: string;\n isPie: boolean;\n themeColor: string;\n segmentStartIndex: number;\n colors: string[];\n bubbleSize: Required<TooltipProps['additionalFields'][number] & { value: number }>[];\n onClick: (e: React.UIEvent, name: string, count: number) => void;\n 'aria-describedby'?: string;\n onKeyDown?: (e: React.KeyboardEvent) => void;\n onFocus?: () => void;\n onBlur?: () => void;\n setElementRef?: (index: number, element: Element | null) => void;\n hasEventHandlers?: boolean;\n}\n\nconst BubbleSvg = React.memo(\n ({\n values,\n valueRange,\n tooltipHeader,\n latitude,\n longitude,\n icon,\n isPie,\n themeColor,\n segmentStartIndex,\n colors,\n bubbleSize,\n onClick,\n 'aria-describedby': ariaDescribedBy,\n onKeyDown,\n onFocus,\n onBlur,\n setElementRef,\n hasEventHandlers,\n }: BubbleSvgProps) => {\n const featureFlagContext = React.useContext<FeatureFlagContextValue>(FeatureFlagContext);\n const isBubbleMapIconFlagEnabled = Boolean(featureFlagContext?.visualizations_enableBubbleMapIcon);\n\n const total = values.reduce((totalValue, v) => totalValue + v, 0);\n const radius = matchBubbleSize(valueRange, total);\n\n const getAriaLabel = React.useCallback(\n (segmentName?: string, segmentValue?: number) => {\n let segmentLabel = _('Map marker');\n if (tooltipHeader) {\n segmentLabel = tooltipHeader;\n } else if (latitude !== undefined && longitude !== undefined) {\n segmentLabel = sprintf(_('Location: %(lat)s, %(lng)s'), {\n lat: convertDegToDMS(latitude, 'latitude'),\n lng: convertDegToDMS(longitude, 'longitude'),\n });\n }\n\n if (segmentName != null && segmentValue != null) {\n segmentLabel = sprintf(_('%(locationLabel)s, %(segmentName)s: %(segmentValue)s'), {\n locationLabel: segmentLabel,\n segmentName,\n segmentValue: segmentValue.toString(),\n });\n }\n if (hasEventHandlers) {\n segmentLabel = sprintf(_('%(label)s, Click for drilldown'), { label: segmentLabel });\n }\n\n return segmentLabel;\n },\n [tooltipHeader, latitude, longitude, hasEventHandlers]\n );\n\n const offsets: number[] = [];\n let runningTotal = 0;\n values.forEach(count => {\n offsets.push(runningTotal);\n runningTotal += count;\n });\n\n const width = radius * 2;\n const showIcon =\n isBubbleMapIconFlagEnabled &&\n radius >= ICON_DISPLAY_CUTOFF &&\n icon &&\n (isRemoteIcon(icon) || isDataURI(icon));\n\n return (\n <svg width={width} height={width} viewBox={`-3 -3 ${width + 6} ${width + 6}`}>\n {isPie && (\n <circle\n cx={radius}\n cy={radius}\n r={radius}\n fill=\"none\"\n strokeWidth={2}\n stroke={themeColor}\n strokeOpacity={0.3}\n />\n )}\n {values.map((v, i) => {\n const globalIndex = segmentStartIndex + i;\n return (\n <PieSegment\n key={globalIndex}\n start={offsets[i] / total}\n end={(offsets[i] + v) / total}\n radius={radius}\n color={colors[i]}\n themeColor={themeColor}\n segmentMetadata={bubbleSize[i]}\n handleBubbleClick={onClick}\n ariaLabel={getAriaLabel(bubbleSize[i]?.name, bubbleSize[i]?.value)}\n aria-describedby={ariaDescribedBy}\n onKeyDown={onKeyDown}\n onFocus={onFocus}\n onBlur={onBlur}\n elementRef={\n setElementRef ? element => setElementRef(globalIndex, element) : undefined\n }\n hasEventHandlers={hasEventHandlers}\n />\n );\n })}\n {showIcon && (\n <foreignObject\n x={radius - (radius * 0.8) / 2}\n y={radius - (radius * 0.8) / 2}\n width={radius * 0.8}\n height={radius * 0.8}\n style={{ pointerEvents: 'none' }}\n data-test=\"bubble-icon-wrapper\"\n >\n <RemoteIcon iconURL={icon} width={radius * 0.8} height={radius * 0.8} />\n </foreignObject>\n )}\n </svg>\n );\n }\n);\n\nexport interface BubbleProps {\n originalValues: number[];\n valueRange: number[];\n colors: string[];\n themeColor: string;\n isPie: boolean;\n latitude: number;\n longitude: number;\n bubbleSize: Required<TooltipProps['additionalFields'][number] & { value: number }>[];\n additionalFields?: TooltipProps['additionalFields'];\n tooltipHeader?: TooltipProps['tooltipHeader'];\n map: React.MutableRefObject<Map>;\n handleMapClick?: any;\n icon?: string;\n showCoordinates?: boolean;\n stylesManagedExternally?: boolean;\n segmentStartIndex?: number;\n onKeyDown?: (e: React.KeyboardEvent) => void;\n onFocus?: () => void;\n onBlur?: () => void;\n setElementRef?: (index: number, element: Element) => void;\n hasEventHandlers?: boolean;\n}\n\nexport const Bubble = React.memo(\n ({\n originalValues,\n valueRange,\n colors,\n themeColor,\n isPie,\n latitude,\n longitude,\n bubbleSize,\n additionalFields = [],\n tooltipHeader = null,\n map,\n handleMapClick,\n icon,\n showCoordinates,\n stylesManagedExternally,\n segmentStartIndex = 0,\n onKeyDown,\n onFocus,\n onBlur,\n setElementRef,\n hasEventHandlers,\n }: BubbleProps): JSX.Element => {\n const onBubbleClick = React.useCallback(\n (e, name, value) => {\n handleMapClick(e, name, value);\n e.stopPropagation();\n },\n [handleMapClick]\n );\n\n // sanitize values\n const allZeros = originalValues.every(v => v === 0);\n const values = originalValues.map(v => Math.max(v, 0));\n\n if (allZeros || !originalValues.length) return null;\n\n return (\n <MarkerWrapper\n longitude={longitude}\n latitude={latitude}\n additionalFields={[...bubbleSize, ...additionalFields]}\n tooltipHeader={tooltipHeader}\n map={map}\n data-test-type=\"bubble\"\n showCoordinates={showCoordinates}\n stylesManagedExternally={stylesManagedExternally}\n >\n <BubbleSvg\n values={values}\n valueRange={valueRange}\n colors={colors}\n bubbleSize={bubbleSize}\n isPie={isPie}\n themeColor={themeColor}\n segmentStartIndex={segmentStartIndex}\n latitude={latitude}\n longitude={longitude}\n tooltipHeader={tooltipHeader}\n icon={icon}\n onClick={onBubbleClick}\n onKeyDown={onKeyDown}\n onFocus={onFocus}\n onBlur={onBlur}\n setElementRef={setElementRef}\n hasEventHandlers={hasEventHandlers}\n />\n </MarkerWrapper>\n );\n }\n);\nBubble.displayName = 'MapBubble';\n\nexport interface BubbleLayerProps {\n bubbleLayer: BubbleLayerType;\n themeColorScheme: string;\n zoom: number;\n map: React.MutableRefObject<Map>;\n onMapClick?: any;\n showCoordinates?: boolean;\n stylesManagedExternally?: boolean;\n hasEventHandlers?: boolean;\n}\n\nconst BubbleLayer = (props: BubbleLayerProps): JSX.Element => {\n const {\n bubbleLayer,\n themeColorScheme,\n map,\n zoom,\n onMapClick,\n showCoordinates,\n stylesManagedExternally = false,\n hasEventHandlers,\n } = props;\n\n bubbleLayer.seriesColors = bubbleLayer.seriesColors || DEFAULT_SERIES_COLORS;\n bubbleLayer.bubbleSize = bubbleLayer.bubbleSize || [];\n bubbleLayer.icon = bubbleLayer.icon || [];\n const bakedData = React.useMemo(() => bakeBubbleData(bubbleLayer), [bubbleLayer]);\n const staticColors = React.useMemo(\n () => getStaticColors(bubbleLayer.bubbleSize.length, bubbleLayer.seriesColors),\n [bubbleLayer.bubbleSize.length, bubbleLayer.seriesColors]\n );\n const { data = [], dataRange = [], resultLimit, bubbleSizeFields, isPie } = bakedData ?? {};\n const { additionalTooltipFields = [], tooltipHeaderFieldName = null } = bubbleLayer;\n const roundedZoom = Math.round(zoom);\n const themeColor = themeColorScheme === 'light' ? '#ffffff' : '#1a1c20';\n const dynamicColors = bubbleLayer.dataColors;\n\n // filter data for the current zoom level and sort base on values\n const dataToRender = React.useMemo(\n () =>\n data\n .reduce((acc, datum, i) => {\n const shouldRender =\n datum.zoom === null || datum.zoom === undefined || datum.zoom === roundedZoom;\n if (shouldRender) {\n acc.push({ data: datum, idx: i });\n }\n return acc;\n }, [])\n .slice(0, resultLimit || DEFAULT_RESULT_LIMIT)\n .sort((a, b) => sum(b.data.values) - sum(a.data.values)),\n [data, resultLimit, roundedZoom]\n );\n\n const handleMapClick = React.useCallback(\n (e, name, value, i) => {\n // retrieve metadata from the appropriate datum, indexed by i\n const metadata = dataToRender[i]?.data?.metadata ?? {};\n const payload = Object.keys(metadata).reduce(\n (acc, curr) => {\n const key = `row.${curr}.value`;\n const val = String(metadata[curr]);\n return { ...acc, [key]: val };\n },\n { name, value: String(value) }\n );\n\n onMapClick({ e, payload });\n },\n [dataToRender, onMapClick]\n );\n\n const { handleKeyDown, handleFocus, handleBlur, setElementRef } = useRovingTabindex(map);\n\n let globalSegmentIndex = 0;\n\n return (\n <>\n {dataToRender.map((datum, i) => {\n const allZeros = datum.data.values.every(v => v === 0);\n const segmentStartIndex = globalSegmentIndex;\n const segmentCount = datum.data.values.length;\n if (!allZeros) {\n globalSegmentIndex += segmentCount;\n }\n const colors = dynamicColors\n ? [\n dataToRender.map(obj =>\n isColor(dynamicColors[obj.idx]) ? dynamicColors[obj.idx] : DEFAULT_CLUSTER_COLOR\n )[i],\n ]\n : staticColors;\n\n const [longitude, latitude] = datum.data.coordinates;\n const bubbleSize = datum.data.values.map((value, index) => ({\n name: bubbleSizeFields[index],\n value,\n color: colors[index],\n }));\n\n const additionalFields = bubbleLayer.metadata\n ? additionalTooltipFields.map(field => ({\n name: field,\n value: datum.data.metadata[field],\n icon: bubbleLayer.tooltipFieldIcons?.[field],\n }))\n : [];\n\n const tooltipHeaderField =\n bubbleLayer.metadata && datum.data.metadata[tooltipHeaderFieldName];\n\n return (\n <Bubble\n key={String(datum.idx)}\n originalValues={datum.data.values}\n valueRange={dataRange}\n colors={colors}\n themeColor={themeColor}\n isPie={isPie}\n longitude={longitude}\n latitude={latitude}\n bubbleSize={bubbleSize}\n additionalFields={additionalFields}\n tooltipHeader={tooltipHeaderField}\n map={map}\n handleMapClick={(e, name, value) => handleMapClick(e, name, value, i)}\n icon={bubbleLayer.icon[datum.idx]}\n showCoordinates={showCoordinates}\n stylesManagedExternally={stylesManagedExternally}\n segmentStartIndex={segmentStartIndex}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n onBlur={handleBlur}\n setElementRef={setElementRef}\n hasEventHandlers={hasEventHandlers}\n />\n );\n })}\n </>\n );\n};\n\nexport default BubbleLayer;\n", "import styled from 'styled-components';\nimport { pick } from 'lodash';\nimport { toDimension } from '@splunk/visualizations-shared/style';\n// @ts-ignore\nimport css from 'maplibre-gl/dist/maplibre-gl.css';\nimport { HexColorObj } from './PureMap';\nimport { BubbleSegment, BUBBLE_SEGMENT_DIMMED_STYLES } from './BubbleLayer';\n\nconst PureMapContainer = styled.div.attrs({\n 'data-test': 'puremap-container',\n})<{\n width: number | string;\n height: number | string;\n backgroundColor: string;\n controlBackgroundColor: string;\n controlForegroundColor: string;\n controlIconColorEncoded: HexColorObj;\n showScale: boolean;\n showZoomControls: boolean;\n}>`\n ${css}\n overflow: hidden;\n position: relative;\n z-index: 0;\n background-color: ${props => props.backgroundColor};\n ${props => toDimension(pick(props, ['width', 'height']))};\n\n // keep zoom control on top of cooperative gesture layer\n .maplibregl-cooperative-gesture-screen {\n z-index: 0;\n }\n\n // overwrite maplibregl scale styles\n .maplibregl-ctrl-bottom-left {\n display: ${props => (props.showScale ? 'block' : 'none')};\n position: absolute;\n z-index: 0;\n bottom: 16px;\n left: 12px;\n width: 86px;\n height: 29px;\n border-radius: 4px;\n margin: 0;\n background-color: ${props => props.controlBackgroundColor};\n box-shadow:\n 0px 26px 103px rgba(0, 0, 0, 0.13),\n 0px 11px 18px rgba(0, 0, 0, 0.06),\n 0px 3px 6px rgba(0, 0, 0, 0.06);\n .maplibregl-ctrl-scale {\n background-color: ${props => props.controlBackgroundColor};\n color: ${props => props.controlForegroundColor};\n border: 2px solid ${props => props.controlForegroundColor};\n border-top: 0;\n border-left: 0;\n border-right: 0;\n padding: 0;\n margin: 6px 8px 8px 8px;\n line-height: 13px;\n letter-spacing: 0.02em;\n font-family: sans-serif;\n font-size: 10px;\n }\n }\n\n /* When a segment is hovered/focused, dim other segments */\n :has(${BubbleSegment}:is(:focus-visible, :hover)) ${BubbleSegment}:not(:is(:focus-visible, :hover)) {\n fill: ${BUBBLE_SEGMENT_DIMMED_STYLES.fill};\n stroke: ${BUBBLE_SEGMENT_DIMMED_STYLES.stroke};\n }\n`;\n\nexport default PureMapContainer;\n", "\nif (typeof Object.hasOwn !== 'function') {\n Object.hasOwn = function hasOwnPolyfill(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n };\n}\nif (typeof Array.prototype.at !== 'function') {\n Array.prototype.at = function atPolyfill(index) {\n var len = this.length;\n var i = index >= 0 ? index : len + index;\n return i >= 0 && i < len ? this[i] : undefined;\n };\n}\n((_staticBlock,_staticBlock2,_staticBlock3)=>{var e1=Object.create,tp=Object.defineProperty,r1=Object.getOwnPropertyDescriptor,i1=Object.getOwnPropertyNames,n1=Object.getPrototypeOf,ep=Object.prototype.hasOwnProperty,ul=(t,e)=>()=>(e||(t((e={exports:{}}).exports,e),t=null),e.exports),a1=(t,e,r,i)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(var n=i1(e),a=0,s=n.length,o;a<s;a++)o=n[a],!ep.call(t,o)&&o!==r&&tp(t,o,{get:(l=>e[l]).bind(null,o),enumerable:!(i=r1(e,o))||i.enumerable});return t;},s1=(t,e,r)=>(r=t==null?{}:e1(n1(t)),a1(e||!t||!t.__esModule||!ep.call(t,\"default\")?tp(r,\"default\",{value:t,enumerable:!0}):r,t));function M(t,e){this.x=t,this.y=e;}M.prototype={clone(){return new M(this.x,this.y);},add(t){return this.clone()._add(t);},sub(t){return this.clone()._sub(t);},multByPoint(t){return this.clone()._multByPoint(t);},divByPoint(t){return this.clone()._divByPoint(t);},mult(t){return this.clone()._mult(t);},div(t){return this.clone()._div(t);},rotate(t){return this.clone()._rotate(t);},rotateAround(t,e){return this.clone()._rotateAround(t,e);},matMult(t){return this.clone()._matMult(t);},unit(){return this.clone()._unit();},perp(){return this.clone()._perp();},round(){return this.clone()._round();},mag(){return Math.sqrt(this.x*this.x+this.y*this.y);},equals(t){return this.x===t.x&&this.y===t.y;},dist(t){return Math.sqrt(this.distSqr(t));},distSqr(t){let e=t.x-this.x,r=t.y-this.y;return e*e+r*r;},angle(){return Math.atan2(this.y,this.x);},angleTo(t){return Math.atan2(this.y-t.y,this.x-t.x);},angleWith(t){return this.angleWithSep(t.x,t.y);},angleWithSep(t,e){return Math.atan2(this.x*e-this.y*t,this.x*t+this.y*e);},_matMult(t){let e=t[0]*this.x+t[1]*this.y,r=t[2]*this.x+t[3]*this.y;return this.x=e,this.y=r,this;},_add(t){return this.x+=t.x,this.y+=t.y,this;},_sub(t){return this.x-=t.x,this.y-=t.y,this;},_mult(t){return this.x*=t,this.y*=t,this;},_div(t){return this.x/=t,this.y/=t,this;},_multByPoint(t){return this.x*=t.x,this.y*=t.y,this;},_divByPoint(t){return this.x/=t.x,this.y/=t.y,this;},_unit(){return this._div(this.mag()),this;},_perp(){let t=this.y;return this.y=this.x,this.x=-t,this;},_rotate(t){let e=Math.cos(t),r=Math.sin(t),i=e*this.x-r*this.y,n=r*this.x+e*this.y;return this.x=i,this.y=n,this;},_rotateAround(t,e){let r=Math.cos(t),i=Math.sin(t),n=e.x+r*(this.x-e.x)-i*(this.y-e.y),a=e.y+i*(this.x-e.x)+r*(this.y-e.y);return this.x=n,this.y=a,this;},_round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this;},constructor:M},M.convert=function(t){if(t instanceof M)return t;if(Array.isArray(t))return new M(+t[0],+t[1]);if(t.x!==void 0&&t.y!==void 0)return new M(+t.x,+t.y);throw Error(\"Expected [x, y] or {x, y} point format\");};function o1(t,e,r,i){let n=3*t,a=3*(r-t)-n,s=1-n-a,o=3*e,l=3*(i-e)-o,u=1-o-l;return function(h,c=1e-6){if(h<=0)return 0;if(h>=1)return 1;let p=h;for(let y=0;y<8;y++){let m=((s*p+a)*p+n)*p-h;if(Math.abs(m)<c)return((u*p+l)*p+o)*p;let g=(3*s*p+2*a)*p+n;if(Math.abs(g)<1e-6)break;p-=m/g;}let f=0,d=1;p=h;for(let y=0;y<20;y++){let m=((s*p+a)*p+n)*p;if(Math.abs(m-h)<c)break;h>m?f=p:d=p,p=(f+d)*.5;}return((u*p+l)*p+o)*p;};}var eh;function l1(){return eh??=typeof OffscreenCanvas<\"u\"&&!!new OffscreenCanvas(1,1).getContext(\"2d\")&&typeof createImageBitmap==\"function\",eh;}var Ln;function u1(){if(Ln==null&&(Ln=!1,l1())){let t=new OffscreenCanvas(5,5).getContext(\"2d\",{willReadFrequently:!0});if(t){for(let r=0;r<25;r++){let i=r*4;t.fillStyle=`rgb(${i},${i+1},${i+2})`,t.fillRect(r%5,Math.floor(r/5),1,1);}let e=t.getImageData(0,0,5,5).data;for(let r=0;r<100;r++)if(r%4!=3&&e[r]!==r){Ln=!0;break;}}}return Ln||!1;}var ue=typeof Float32Array<\"u\"?Float32Array:Array;Math.PI/180,180/Math.PI;function h1(){var t=new ue(9);return ue!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[5]=0,t[6]=0,t[7]=0),t[0]=1,t[4]=1,t[8]=1,t;}function rp(){var t=new ue(3);return ue!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t;}function c1(t){var e=t[0],r=t[1],i=t[2];return Math.sqrt(e*e+r*r+i*i);}function rh(t,e,r){var i=new ue(3);return i[0]=t,i[1]=e,i[2]=r,i;}function p1(t,e){var r=e[0],i=e[1],n=e[2],a=r*r+i*i+n*n;return a>0&&(a=1/Math.sqrt(a)),t[0]=e[0]*a,t[1]=e[1]*a,t[2]=e[2]*a,t;}function f1(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2];}function ws(t,e,r){var i=e[0],n=e[1],a=e[2],s=r[0],o=r[1],l=r[2];return t[0]=n*l-a*o,t[1]=a*s-i*l,t[2]=i*o-n*s,t;}var d1=c1;(function(){var t=rp();return function(e,r,i,n,a,s){var o,l;for(r||=3,i||=0,l=n?Math.min(n*r+i,e.length):e.length,o=i;o<l;o+=r)t[0]=e[o],t[1]=e[o+1],t[2]=e[o+2],a(t,t,s),e[o]=t[0],e[o+1]=t[1],e[o+2]=t[2];return e;};})();function y1(){var t=new ue(4);return ue!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0,t[3]=0),t;}function m1(t,e){var r=e[0],i=e[1],n=e[2],a=e[3],s=r*r+i*i+n*n+a*a;return s>0&&(s=1/Math.sqrt(s)),t[0]=r*s,t[1]=i*s,t[2]=n*s,t[3]=a*s,t;}function g1(t,e,r){var i=e[0],n=e[1],a=e[2],s=e[3];return t[0]=r[0]*i+r[4]*n+r[8]*a+r[12]*s,t[1]=r[1]*i+r[5]*n+r[9]*a+r[13]*s,t[2]=r[2]*i+r[6]*n+r[10]*a+r[14]*s,t[3]=r[3]*i+r[7]*n+r[11]*a+r[15]*s,t;}(function(){var t=y1();return function(e,r,i,n,a,s){var o,l;for(r||=4,i||=0,l=n?Math.min(n*r+i,e.length):e.length,o=i;o<l;o+=r)t[0]=e[o],t[1]=e[o+1],t[2]=e[o+2],t[3]=e[o+3],a(t,t,s),e[o]=t[0],e[o+1]=t[1],e[o+2]=t[2],e[o+3]=t[3];return e;};})();function ih(){var t=new ue(4);return ue!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t[3]=1,t;}function x1(t,e,r){r*=.5;var i=Math.sin(r);return t[0]=i*e[0],t[1]=i*e[1],t[2]=i*e[2],t[3]=Math.cos(r),t;}function Ds(t,e,r,i){var n=e[0],a=e[1],s=e[2],o=e[3],l=r[0],u=r[1],h=r[2],c=r[3],p,f=n*l+a*u+s*h+o*c,d,y,m;return f<0&&(f=-f,l=-l,u=-u,h=-h,c=-c),1-f>1e-6?(p=Math.acos(f),d=Math.sin(p),y=Math.sin((1-i)*p)/d,m=Math.sin(i*p)/d):(y=1-i,m=i),t[0]=y*n+m*l,t[1]=y*a+m*u,t[2]=y*s+m*h,t[3]=y*o+m*c,t;}function v1(t,e){var r=e[0]+e[4]+e[8],i;if(r>0)i=Math.sqrt(r+1),t[3]=.5*i,i=.5/i,t[0]=(e[5]-e[7])*i,t[1]=(e[6]-e[2])*i,t[2]=(e[1]-e[3])*i;else{var n=0;e[4]>e[0]&&(n=1),e[8]>e[n*3+n]&&(n=2);var a=(n+1)%3,s=(n+2)%3;i=Math.sqrt(e[n*3+n]-e[a*3+a]-e[s*3+s]+1),t[n]=.5*i,i=.5/i,t[3]=(e[a*3+s]-e[s*3+a])*i,t[a]=(e[a*3+n]+e[n*3+a])*i,t[s]=(e[s*3+n]+e[n*3+s])*i;}return t;}var nh=m1;(function(){var t=rp(),e=rh(1,0,0),r=rh(0,1,0);return function(i,n,a){var s=f1(n,a);return s<-.999999?(ws(t,e,n),d1(t)<1e-6&&ws(t,r,n),p1(t,t),x1(i,t,Math.PI),i):s>.999999?(i[0]=0,i[1]=0,i[2]=0,i[3]=1,i):(ws(t,n,a),i[0]=t[0],i[1]=t[1],i[2]=t[2],i[3]=1+s,nh(i,i));};})(),function(){var t=ih(),e=ih();return function(r,i,n,a,s,o){return Ds(t,i,s,o),Ds(e,n,a,o),Ds(r,t,e,2*o*(1-o)),r;};}(),function(){var t=h1();return function(e,r,i,n){return t[0]=i[0],t[3]=i[1],t[6]=i[2],t[1]=n[0],t[4]=n[1],t[7]=n[2],t[2]=-r[0],t[5]=-r[1],t[8]=-r[2],nh(e,v1(e,t));};}();function b1(){var t=new ue(2);return ue!=Float32Array&&(t[0]=0,t[1]=0),t;}(function(){var t=b1();return function(e,r,i,n,a,s){var o,l;for(r||=2,i||=0,l=n?Math.min(n*r+i,e.length):e.length,o=i;o<l;o+=r)t[0]=e[o],t[1]=e[o+1],a(t,t,s),e[o]=t[0],e[o+1]=t[1];return e;};})();var mt=8192;var ip=\"__$json__:\";function Xi(t){return t instanceof Error?t:Error(typeof t==\"string\"?t:String(t));}function w1(t){if(t<=0)return 0;if(t>=1)return 1;let e=t*t,r=e*t;return 4*(t<.5?r:3*(t-e)+r-.75);}function D1(t,e,r,i){return o1(t,e,r,i);}var h5=D1(.25,.1,.25,1);function Yi(t,e,r){return Math.min(r,Math.max(e,t));}function _1(t,e,r){let i=r-e,n=((t-e)%i+i)%i+e;return n===e?r:n;}function Ut(t,...e){for(let r of e)for(let i in r)t[i]=r[i];return t;}function A1(t){return Math.log(t)/Math.LN2%1==0;}function _a(t,e,r){let i={};for(let n in t)i[n]=e.call(r||this,t[n],n,t);return i;}function S1(t,e,r){let i={};for(let n in t)e.call(r||this,t[n],n,t)&&(i[n]=t[n]);return i;}function Xs(t,e){if(Array.isArray(t)){if(!Array.isArray(e)||t.length!==e.length)return!1;for(let r=0;r<t.length;r++)if(!Xs(t[r],e[r]))return!1;return!0;}if(typeof t==\"object\"&&t&&e!==null){if(typeof e!=\"object\"||Object.keys(t).length!==Object.keys(e).length)return!1;for(let r in t)if(!Xs(t[r],e[r]))return!1;return!0;}return t===e;}function Xe(t){return Array.isArray(t)?t.map(Xe):typeof t==\"object\"&&t?_a(t,Xe):t;}var ah={};function Mt(t){ah[t]||(typeof console<\"u\"&&console.warn(t),ah[t]=!0);}function Ye(t,e,r){return(r.y-t.y)*(e.x-t.x)>(e.y-t.y)*(r.x-t.x);}function cr(t){return typeof WorkerGlobalScope<\"u\"&&t!==void 0&&t instanceof WorkerGlobalScope;}function Aa(t){return typeof ImageBitmap<\"u\"&&t instanceof ImageBitmap;}function E1(t,e,r,i,n){let a=Math.max(-e,0)*4,s=(Math.max(0,r)-r)*i*4+a,o=i*4,l=Math.max(0,e),u=Math.max(0,r),h=Math.min(t.width,e+i),c=Math.min(t.height,r+n);return{rect:{x:l,y:u,width:h-l,height:c-u},layout:[{offset:s,stride:o}]};}async function F1(t,e,r,i,n){if(typeof VideoFrame>\"u\")throw Error(\"VideoFrame not supported\");let a=new VideoFrame(t,{timestamp:0});try{let s=a?.format;if(!s||!(s.startsWith(\"BGR\")||s.startsWith(\"RGB\")))throw Error(`Unrecognized format ${s}`);let o=s.startsWith(\"BGR\"),l=new Uint8ClampedArray(i*n*4);if(await a.copyTo(l,E1(t,e,r,i,n)),o)for(let u=0;u<l.length;u+=4){let h=l[u];l[u]=l[u+2],l[u+2]=h;}return l;}finally{a.close();}}var wi,Di;function T1(t,e,r,i,n){let a=t.width,s=t.height;(!wi||!Di)&&(wi=new OffscreenCanvas(a,s),Di=wi.getContext(\"2d\",{willReadFrequently:!0})),wi.width=a,wi.height=s,Di.drawImage(t,0,0,a,s);let o=Di.getImageData(e,r,i,n);return Di.clearRect(0,0,a,s),o.data;}async function np(t,e,r,i,n){if(u1())try{return await F1(t,e,r,i,n);}catch{}return T1(t,e,r,i,n);}function sh(t,e,r,i){return t.addEventListener(e,r,i),{unsubscribe:()=>{t.removeEventListener(e,r,i);}};}function oh(t){return t*Math.PI/180;}var lh=\"AbortError\",hl=class extends Error{constructor(t=lh){super(t instanceof Error?t.message:t),this.name=lh,t instanceof Error&&t.stack&&(this.stack=t.stack);}};function cl(t){return t instanceof Error&&t.name===\"AbortError\";}function k1(t){if(t.aborted)throw new hl(t.reason);}var pl={MAX_PARALLEL_IMAGE_REQUESTS:16,MAX_PARALLEL_IMAGE_REQUESTS_PER_FRAME:8,MAX_TILE_CACHE_ZOOM_LEVELS:5,REGISTERED_PROTOCOLS:{},WORKER_URL:\"\"};function I1(t){return pl.REGISTERED_PROTOCOLS[t.substring(0,t.indexOf(\"://\"))];}function ap(t,e){pl.REGISTERED_PROTOCOLS[t]=e;}function sp(t){delete pl.REGISTERED_PROTOCOLS[t];}var uh=\"global-dispatcher\",la=class extends Error{constructor(t,e,r,i){super(`AJAXError: ${e} (${t}): ${r}`),this.status=t,this.statusText=e,this.url=r,this.body=i;}};function op(){if(cr(self))return self.worker?.referrer;if(window.location.protocol===\"blob:\")try{return window.parent.location.href;}catch{}return window.location.href;}var C1=t=>t.startsWith(\"file:\")||op()?.startsWith(\"file:\")&&!/^\\w+:/.test(t);async function M1(t,e){let r=new Request(t.url,{method:t.method||\"GET\",body:t.body,credentials:t.credentials,headers:t.headers,cache:t.cache,referrer:op(),referrerPolicy:t.referrerPolicy,signal:e.signal});t.type===\"json\"&&!r.headers.has(\"Accept\")&&r.headers.set(\"Accept\",\"application/json\");let i;try{i=await fetch(r);}catch(s){throw cl(s)?s:new la(0,Xi(s).message,t.url,new Blob());}if(!i.ok){let s=await i.blob();throw new la(i.status,i.statusText,t.url,s);}let n;n=t.type===\"arrayBuffer\"||t.type===\"image\"?i.arrayBuffer():t.type===\"json\"?i.json():i.text();let a=await n;return k1(e.signal),{data:a,cacheControl:i.headers.get(\"Cache-Control\"),expires:i.headers.get(\"Expires\"),etag:i.headers.get(\"ETag\")};}function B1(t,e){return new Promise((r,i)=>{let n=new XMLHttpRequest();n.open(t.method||\"GET\",t.url,!0),(t.type===\"arrayBuffer\"||t.type===\"image\")&&(n.responseType=\"arraybuffer\");for(let a in t.headers)n.setRequestHeader(a,t.headers[a]);t.type===\"json\"&&(n.responseType=\"text\",t.headers?.Accept||n.setRequestHeader(\"Accept\",\"application/json\")),n.withCredentials=t.credentials===\"include\",n.onerror=()=>{i(Error(n.statusText));},n.onload=()=>{if(!e.signal.aborted)if((n.status>=200&&n.status<300||n.status===0)&&n.response!==null){let a=n.response;if(t.type===\"json\")try{a=JSON.parse(n.response);}catch(s){i(s);return;}r({data:a,cacheControl:n.getResponseHeader(\"Cache-Control\"),expires:n.getResponseHeader(\"Expires\"),etag:n.getResponseHeader(\"ETag\")});}else{let a=new Blob([n.response],{type:n.getResponseHeader(\"Content-Type\")});i(new la(n.status,n.statusText,t.url,a));}},e.signal.addEventListener(\"abort\",()=>{n.abort(),i(new hl(e.signal.reason));}),n.send(t.body);});}var Sa=async function(t,e){if(t.url.includes(\"://\")&&!/^https?:|^file:/.test(t.url)){let r=I1(t.url);if(r){let i=await r(t,e);return!i.data&&t.type===\"arrayBuffer\"?Ut(i,{data:new ArrayBuffer(0)}):i;}if(cr(self)&&self.worker?.actor)return self.worker.actor.sendAsync({type:\"GR\",data:t,targetMapId:uh},e);}if(!C1(t.url)){if(fetch&&Request&&AbortController&&Object.hasOwn(Request.prototype,\"signal\"))return M1(t,e);if(cr(self)&&self.worker?.actor)return self.worker.actor.sendAsync({type:\"GR\",data:t,mustQueue:!0,targetMapId:uh},e);}return B1(t,e);},lp=(t,e)=>Sa(Ut(t,{type:\"json\"}),e),up=(t,e)=>Sa(Ut(t,{type:\"arrayBuffer\"}),e);function hh(t,e,r){r[t]?.includes(e)||(r[t]||=[],r[t].push(e));}function _s(t,e,r){if(r?.[t]){let i=r[t].indexOf(e);i!==-1&&r[t].splice(i,1);}}var hp=class{constructor(t,e={}){Ut(this,e),this.type=t;}},ua=class extends hp{constructor(t,e={}){super(\"error\",Ut({error:t},e));}},P1=class{on(t,e){return this._listeners||={},hh(t,e,this._listeners),{unsubscribe:()=>{this.off(t,e);}};}off(t,e){return _s(t,e,this._listeners),_s(t,e,this._oneTimeListeners),this;}once(t,e){return e?(this._oneTimeListeners||={},hh(t,e,this._oneTimeListeners),this):new Promise(r=>this.once(t,r));}fire(t,e){let r=typeof t==\"string\"?new hp(t,e||{}):t,i=r.type;if(this.listens(i)){r.target=this;let n=this._listeners?.[i]?.slice()??[];for(let o of n)o.call(this,r);let a=this._oneTimeListeners?.[i]?.slice()??[];for(let o of a)_s(i,o,this._oneTimeListeners),o.call(this,r);let s=this._eventedParent;s&&(Ut(r,typeof this._eventedParentData==\"function\"?this._eventedParentData():this._eventedParentData),s.fire(r));}else r instanceof ua&&console.error(r.error);return this;}listens(t){return!!(this._listeners?.[t]?.length||this._oneTimeListeners?.[t]?.length||this._eventedParent?.listens(t));}setEventedParent(t,e){return this._eventedParent=t,this._eventedParentData=e,this;}},cp={$version:8,$root:{version:{required:!0,type:\"enum\",values:[8]},name:{type:\"string\"},metadata:{type:\"*\"},center:{type:\"array\",value:\"number\",length:2},centerAltitude:{type:\"number\"},zoom:{type:\"number\"},bearing:{type:\"number\",default:0,period:360,units:\"degrees\"},pitch:{type:\"number\",default:0,units:\"degrees\"},roll:{type:\"number\",default:0,units:\"degrees\"},state:{type:\"state\",default:{}},light:{type:\"light\"},sky:{type:\"sky\"},projection:{type:\"projection\"},terrain:{type:\"terrain\"},sources:{required:!0,type:\"sources\"},sprite:{type:\"sprite\"},glyphs:{type:\"string\"},\"font-faces\":{type:\"fontFaces\"},transition:{type:\"transition\"},layers:{required:!0,type:\"array\",value:\"layer\"}},sources:{\"*\":{type:\"source\"}},source:[\"source_vector\",\"source_raster\",\"source_raster_dem\",\"source_geojson\",\"source_video\",\"source_image\"],source_vector:{type:{required:!0,type:\"enum\",values:{vector:{}}},url:{type:\"string\"},tiles:{type:\"array\",value:\"string\"},bounds:{type:\"array\",value:\"number\",length:4,default:[-180,-85.051129,180,85.051129]},scheme:{type:\"enum\",values:{xyz:{},tms:{}},default:\"xyz\"},minzoom:{type:\"number\",default:0},maxzoom:{type:\"number\",default:22},attribution:{type:\"string\"},promoteId:{type:\"promoteId\"},volatile:{type:\"boolean\",default:!1},encoding:{type:\"enum\",values:{mvt:{},mlt:{}},default:\"mvt\"},\"*\":{type:\"*\"}},source_raster:{type:{required:!0,type:\"enum\",values:{raster:{}}},url:{type:\"string\"},tiles:{type:\"array\",value:\"string\"},bounds:{type:\"array\",value:\"number\",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:\"number\",default:0},maxzoom:{type:\"number\",default:22},tileSize:{type:\"number\",default:512,units:\"pixels\"},scheme:{type:\"enum\",values:{xyz:{},tms:{}},default:\"xyz\"},attribution:{type:\"string\"},volatile:{type:\"boolean\",default:!1},\"*\":{type:\"*\"}},source_raster_dem:{type:{required:!0,type:\"enum\",values:{\"raster-dem\":{}}},url:{type:\"string\"},tiles:{type:\"array\",value:\"string\"},bounds:{type:\"array\",value:\"number\",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:\"number\",default:0},maxzoom:{type:\"number\",default:22},tileSize:{type:\"number\",default:512,units:\"pixels\"},attribution:{type:\"string\"},encoding:{type:\"enum\",values:{terrarium:{},mapbox:{},custom:{}},default:\"mapbox\"},redFactor:{type:\"number\",default:1},blueFactor:{type:\"number\",default:1},greenFactor:{type:\"number\",default:1},baseShift:{type:\"number\",default:0},volatile:{type:\"boolean\",default:!1},\"*\":{type:\"*\"}},source_geojson:{type:{required:!0,type:\"enum\",values:{geojson:{}}},data:{required:!0,type:\"*\"},maxzoom:{type:\"number\",default:18},attribution:{type:\"string\"},buffer:{type:\"number\",default:128,maximum:512,minimum:0},filter:{type:\"filter\"},tolerance:{type:\"number\",default:.375},cluster:{type:\"boolean\",default:!1},clusterRadius:{type:\"number\",default:50,minimum:0},clusterMaxZoom:{type:\"number\"},clusterMinPoints:{type:\"number\"},clusterProperties:{type:\"*\"},lineMetrics:{type:\"boolean\",default:!1},generateId:{type:\"boolean\",default:!1},promoteId:{type:\"promoteId\"}},source_video:{type:{required:!0,type:\"enum\",values:{video:{}}},urls:{required:!0,type:\"array\",value:\"string\"},coordinates:{required:!0,type:\"array\",length:4,value:{type:\"array\",length:2,value:\"number\"}}},source_image:{type:{required:!0,type:\"enum\",values:{image:{}}},url:{type:\"string\"},coordinates:{required:!0,type:\"array\",length:4,value:{type:\"array\",length:2,value:\"number\"}}},layer:{id:{type:\"string\",required:!0},type:{type:\"enum\",values:{fill:{},line:{},symbol:{},circle:{},heatmap:{},\"fill-extrusion\":{},raster:{},hillshade:{},\"color-relief\":{},background:{}},required:!0},metadata:{type:\"*\"},source:{type:\"string\"},\"source-layer\":{type:\"string\"},minzoom:{type:\"number\",minimum:0,maximum:24},maxzoom:{type:\"number\",minimum:0,maximum:24},filter:{type:\"filter\"},layout:{type:\"layout\"},paint:{type:\"paint\"}},layout:[\"layout_fill\",\"layout_line\",\"layout_circle\",\"layout_heatmap\",\"layout_fill-extrusion\",\"layout_symbol\",\"layout_raster\",\"layout_hillshade\",\"layout_color-relief\",\"layout_background\"],layout_background:{visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",expression:{interpolated:!1,parameters:[\"global-state\"]},\"property-type\":\"data-constant\"}},layout_fill:{\"fill-sort-key\":{type:\"number\",expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",expression:{interpolated:!1,parameters:[\"global-state\"]},\"property-type\":\"data-constant\"}},layout_circle:{\"circle-sort-key\":{type:\"number\",expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",expression:{interpolated:!1,parameters:[\"global-state\"]},\"property-type\":\"data-constant\"}},layout_heatmap:{visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",expression:{interpolated:!1,parameters:[\"global-state\"]},\"property-type\":\"data-constant\"}},\"layout_fill-extrusion\":{visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",expression:{interpolated:!1,parameters:[\"global-state\"]},\"property-type\":\"data-constant\"},\"fill-extrusion-rounded-corner-distance\":{type:\"number\",default:0,minimum:0,units:\"meters\",\"property-type\":\"constant\"}},layout_line:{\"line-cap\":{type:\"enum\",values:{butt:{},round:{},square:{}},default:\"butt\",expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"line-join\":{type:\"enum\",values:{bevel:{},round:{},miter:{}},default:\"miter\",expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"line-miter-limit\":{type:\"number\",default:2,requires:[{\"line-join\":\"miter\"}],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"line-round-limit\":{type:\"number\",default:1.05,requires:[{\"line-join\":\"round\"}],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"line-sort-key\":{type:\"number\",expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",expression:{interpolated:!1,parameters:[\"global-state\"]},\"property-type\":\"data-constant\"}},layout_symbol:{\"symbol-placement\":{type:\"enum\",values:{point:{},line:{},\"line-center\":{}},default:\"point\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"symbol-spacing\":{type:\"number\",default:250,minimum:1,units:\"pixels\",requires:[{\"symbol-placement\":\"line\"}],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"symbol-avoid-edges\":{type:\"boolean\",default:!1,expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"symbol-sort-key\":{type:\"number\",expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"symbol-z-order\":{type:\"enum\",values:{auto:{},\"viewport-y\":{},source:{}},default:\"auto\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-allow-overlap\":{type:\"boolean\",default:!1,requires:[\"icon-image\",{\"!\":\"icon-overlap\"}],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-overlap\":{type:\"enum\",values:{never:{},always:{},cooperative:{}},requires:[\"icon-image\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-ignore-placement\":{type:\"boolean\",default:!1,requires:[\"icon-image\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-optional\":{type:\"boolean\",default:!1,requires:[\"icon-image\",\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-rotation-alignment\":{type:\"enum\",values:{map:{},viewport:{},auto:{}},default:\"auto\",requires:[\"icon-image\"],expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-size\":{type:\"number\",default:1,minimum:0,units:\"factor of the original icon size\",requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-text-fit\":{type:\"enum\",values:{none:{},width:{},height:{},both:{}},default:\"none\",requires:[\"icon-image\",\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-text-fit-padding\":{type:\"array\",value:\"number\",length:4,default:[0,0,0,0],units:\"pixels\",requires:[\"icon-image\",\"text-field\",{\"icon-text-fit\":[\"both\",\"width\",\"height\"]}],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-image\":{type:\"resolvedImage\",tokens:!0,expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-rotate\":{type:\"number\",default:0,period:360,units:\"degrees\",requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-padding\":{type:\"padding\",default:[2],units:\"pixels\",requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-keep-upright\":{type:\"boolean\",default:!1,requires:[\"icon-image\",{\"icon-rotation-alignment\":\"map\"},{\"symbol-placement\":[\"line\",\"line-center\"]}],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-offset\":{type:\"array\",value:\"number\",length:2,default:[0,0],requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-anchor\":{type:\"enum\",values:{center:{},left:{},right:{},top:{},bottom:{},\"top-left\":{},\"top-right\":{},\"bottom-left\":{},\"bottom-right\":{}},default:\"center\",requires:[\"icon-image\"],expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-pitch-alignment\":{type:\"enum\",values:{map:{},viewport:{},auto:{}},default:\"auto\",requires:[\"icon-image\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-pitch-alignment\":{type:\"enum\",values:{map:{},viewport:{},auto:{}},default:\"auto\",requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-rotation-alignment\":{type:\"enum\",values:{map:{},viewport:{},\"viewport-glyph\":{},auto:{}},default:\"auto\",requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-field\":{type:\"formatted\",default:\"\",tokens:!0,expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-font\":{type:\"array\",value:\"string\",default:[\"Open Sans Regular\",\"Arial Unicode MS Regular\"],requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-size\":{type:\"number\",default:16,minimum:0,units:\"pixels\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-max-width\":{type:\"number\",default:10,minimum:0,units:\"ems\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-line-height\":{type:\"number\",default:1.2,units:\"ems\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-letter-spacing\":{type:\"number\",default:0,units:\"ems\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-justify\":{type:\"enum\",values:{auto:{},left:{},center:{},right:{}},default:\"center\",requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-radial-offset\":{type:\"number\",units:\"ems\",default:0,requires:[\"text-field\"],\"property-type\":\"data-driven\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]}},\"text-variable-anchor\":{type:\"array\",value:\"enum\",values:{center:{},left:{},right:{},top:{},bottom:{},\"top-left\":{},\"top-right\":{},\"bottom-left\":{},\"bottom-right\":{}},requires:[\"text-field\",{\"symbol-placement\":[\"point\"]}],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-variable-anchor-offset\":{type:\"variableAnchorOffsetCollection\",requires:[\"text-field\",{\"symbol-placement\":[\"point\"]}],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-anchor\":{type:\"enum\",values:{center:{},left:{},right:{},top:{},bottom:{},\"top-left\":{},\"top-right\":{},\"bottom-left\":{},\"bottom-right\":{}},default:\"center\",requires:[\"text-field\",{\"!\":\"text-variable-anchor\"}],expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-max-angle\":{type:\"number\",default:45,units:\"degrees\",requires:[\"text-field\",{\"symbol-placement\":[\"line\",\"line-center\"]}],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-writing-mode\":{type:\"array\",value:\"enum\",values:{horizontal:{},vertical:{}},requires:[\"text-field\",{\"symbol-placement\":[\"point\"]}],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-rotate\":{type:\"number\",default:0,period:360,units:\"degrees\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-padding\":{type:\"number\",default:2,minimum:0,units:\"pixels\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-keep-upright\":{type:\"boolean\",default:!0,requires:[\"text-field\",{\"text-rotation-alignment\":\"map\"},{\"symbol-placement\":[\"line\",\"line-center\"]}],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-transform\":{type:\"enum\",values:{none:{},uppercase:{},lowercase:{}},default:\"none\",requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-offset\":{type:\"array\",value:\"number\",units:\"ems\",length:2,default:[0,0],requires:[\"text-field\",{\"!\":\"text-radial-offset\"}],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-allow-overlap\":{type:\"boolean\",default:!1,requires:[\"text-field\",{\"!\":\"text-overlap\"}],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-overlap\":{type:\"enum\",values:{never:{},always:{},cooperative:{}},requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-ignore-placement\":{type:\"boolean\",default:!1,requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-optional\":{type:\"boolean\",default:!1,requires:[\"text-field\",\"icon-image\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"symbol-height-offset\":{type:\"number\",default:0,units:\"meters\",requires:[{\"symbol-placement\":[\"point\"]}],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"symbol-height-anchor\":{type:\"enum\",values:{ground:{},absolute:{}},default:\"ground\",requires:[\"symbol-height-offset\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",expression:{interpolated:!1,parameters:[\"global-state\"]},\"property-type\":\"data-constant\"}},layout_raster:{visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",expression:{interpolated:!1,parameters:[\"global-state\"]},\"property-type\":\"data-constant\"}},layout_hillshade:{visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",expression:{interpolated:!1,parameters:[\"global-state\"]},\"property-type\":\"data-constant\"}},\"layout_color-relief\":{visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",expression:{interpolated:!1,parameters:[\"global-state\"]},\"property-type\":\"data-constant\"}},filter:{type:\"boolean\",expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},filter_operator:{type:\"enum\",values:{\"==\":{},\"!=\":{},\">\":{},\">=\":{},\"<\":{},\"<=\":{},in:{},\"!in\":{},all:{},any:{},none:{},has:{},\"!has\":{}}},geometry_type:{type:\"enum\",values:{Point:{},LineString:{},Polygon:{}}},function:{expression:{type:\"expression\"},stops:{type:\"array\",value:\"function_stop\"},base:{type:\"number\",default:1,minimum:0},property:{type:\"string\",default:\"$zoom\"},type:{type:\"enum\",values:{identity:{},exponential:{},interval:{},categorical:{}},default:\"exponential\"},colorSpace:{type:\"enum\",values:{rgb:{},lab:{},hcl:{}},default:\"rgb\"},default:{type:\"*\",required:!1}},function_stop:{type:\"array\",minimum:0,maximum:24,value:[\"number\",\"color\"],length:2},expression:{type:\"array\",value:\"expression_name\",minimum:1},light:{anchor:{type:\"enum\",default:\"viewport\",values:{map:{},viewport:{}},\"property-type\":\"data-constant\",transition:!1,expression:{interpolated:!1,parameters:[\"zoom\"]}},position:{type:\"array\",default:[1.15,210,30],length:3,value:\"number\",\"property-type\":\"data-constant\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]}},color:{type:\"color\",\"property-type\":\"data-constant\",default:\"#ffffff\",expression:{interpolated:!0,parameters:[\"zoom\"]},transition:!0},intensity:{type:\"number\",\"property-type\":\"data-constant\",default:.5,minimum:0,maximum:1,expression:{interpolated:!0,parameters:[\"zoom\"]},transition:!0}},sky:{\"sky-color\":{type:\"color\",\"property-type\":\"data-constant\",default:\"#88C6FC\",expression:{interpolated:!0,parameters:[\"zoom\"]},transition:!0},\"horizon-color\":{type:\"color\",\"property-type\":\"data-constant\",default:\"#ffffff\",expression:{interpolated:!0,parameters:[\"zoom\"]},transition:!0},\"fog-color\":{type:\"color\",\"property-type\":\"data-constant\",default:\"#ffffff\",expression:{interpolated:!0,parameters:[\"zoom\"]},transition:!0},\"fog-ground-blend\":{type:\"number\",\"property-type\":\"data-constant\",default:.5,minimum:0,maximum:1,expression:{interpolated:!0,parameters:[\"zoom\"]},transition:!0},\"horizon-fog-blend\":{type:\"number\",\"property-type\":\"data-constant\",default:.8,minimum:0,maximum:1,expression:{interpolated:!0,parameters:[\"zoom\"]},transition:!0},\"sky-horizon-blend\":{type:\"number\",\"property-type\":\"data-constant\",default:.8,minimum:0,maximum:1,expression:{interpolated:!0,parameters:[\"zoom\"]},transition:!0},\"atmosphere-blend\":{type:\"number\",\"property-type\":\"data-constant\",default:.8,minimum:0,maximum:1,expression:{interpolated:!0,parameters:[\"zoom\"]},transition:!0}},terrain:{source:{type:\"string\",required:!0},exaggeration:{type:\"number\",minimum:0,default:1}},projection:{type:{type:\"projectionDefinition\",default:\"mercator\",\"property-type\":\"data-constant\",transition:!1,expression:{interpolated:!0,parameters:[\"zoom\"]}}},paint:[\"paint_fill\",\"paint_line\",\"paint_circle\",\"paint_heatmap\",\"paint_fill-extrusion\",\"paint_symbol\",\"paint_raster\",\"paint_hillshade\",\"paint_color-relief\",\"paint_background\"],paint_fill:{\"fill-antialias\":{type:\"boolean\",default:!0,expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-layer-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"global-state\"]},\"property-type\":\"data-constant\"},\"fill-color\":{type:\"color\",default:\"#000000\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-outline-color\":{type:\"color\",transition:!0,requires:[{\"!\":\"fill-pattern\"},{\"fill-antialias\":!0}],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-translate\":{type:\"array\",value:\"number\",length:2,default:[0,0],transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-translate-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",requires:[\"fill-translate\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-pattern\":{type:\"resolvedImage\",transition:!0,expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"cross-faded-data-driven\"}},\"paint_fill-extrusion\":{\"fill-extrusion-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-extrusion-color\":{type:\"color\",default:\"#000000\",transition:!0,requires:[{\"!\":\"fill-extrusion-pattern\"}],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-extrusion-translate\":{type:\"array\",value:\"number\",length:2,default:[0,0],transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-extrusion-translate-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",requires:[\"fill-extrusion-translate\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-extrusion-pattern\":{type:\"resolvedImage\",transition:!0,expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"cross-faded-data-driven\"},\"fill-extrusion-height\":{type:\"number\",default:0,units:\"meters\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-extrusion-base\":{type:\"number\",default:0,units:\"meters\",transition:!0,requires:[\"fill-extrusion-height\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-extrusion-vertical-gradient\":{type:\"boolean\",default:!0,transition:!1,expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},paint_line:{\"line-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-layer-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"global-state\"]},\"property-type\":\"data-constant\"},\"line-color\":{type:\"color\",default:\"#000000\",transition:!0,requires:[{\"!\":\"line-pattern\"}],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-translate\":{type:\"array\",value:\"number\",length:2,default:[0,0],transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-translate-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",requires:[\"line-translate\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-width\":{type:\"number\",default:1,minimum:0,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-gap-width\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-offset\":{type:\"number\",default:0,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-blur\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-dasharray\":{type:\"array\",value:\"number\",minimum:0,transition:!0,units:\"line widths\",requires:[{\"!\":\"line-pattern\"}],expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"cross-faded-data-driven\"},\"line-pattern\":{type:\"resolvedImage\",transition:!0,expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"cross-faded-data-driven\"},\"line-gradient\":{type:\"color\",transition:!1,requires:[{\"!\":\"line-dasharray\"},{\"!\":\"line-pattern\"},{source:\"geojson\",has:{lineMetrics:!0}}],expression:{interpolated:!0,parameters:[\"line-progress\"]},\"property-type\":\"color-ramp\"}},paint_circle:{\"circle-radius\":{type:\"number\",default:5,minimum:0,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-color\":{type:\"color\",default:\"#000000\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-blur\":{type:\"number\",default:0,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-translate\":{type:\"array\",value:\"number\",length:2,default:[0,0],transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-translate-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",requires:[\"circle-translate\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-pitch-scale\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-pitch-alignment\":{type:\"enum\",values:{map:{},viewport:{}},default:\"viewport\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-stroke-width\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-stroke-color\":{type:\"color\",default:\"#000000\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-stroke-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"}},paint_heatmap:{\"heatmap-radius\":{type:\"number\",default:30,minimum:1,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"heatmap-weight\":{type:\"number\",default:1,minimum:0,transition:!1,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"heatmap-intensity\":{type:\"number\",default:1,minimum:0,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"heatmap-color\":{type:\"color\",default:[\"interpolate\",[\"linear\"],[\"heatmap-density\"],0,\"rgba(0, 0, 255, 0)\",.1,\"royalblue\",.3,\"cyan\",.5,\"lime\",.7,\"yellow\",1,\"red\"],transition:!1,expression:{interpolated:!0,parameters:[\"heatmap-density\"]},\"property-type\":\"color-ramp\"},\"heatmap-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},paint_symbol:{\"icon-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-color\":{type:\"color\",default:\"#000000\",transition:!0,requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-halo-color\":{type:\"color\",default:\"rgba(0, 0, 0, 0)\",transition:!0,requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-halo-width\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-halo-blur\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-translate\":{type:\"array\",value:\"number\",length:2,default:[0,0],transition:!0,units:\"pixels\",requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-translate-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",requires:[\"icon-image\",\"icon-translate\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-color\":{type:\"color\",default:\"#000000\",transition:!0,overridable:!0,requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-halo-color\":{type:\"color\",default:\"rgba(0, 0, 0, 0)\",transition:!0,requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-halo-width\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-halo-blur\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-translate\":{type:\"array\",value:\"number\",length:2,default:[0,0],transition:!0,units:\"pixels\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-translate-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",requires:[\"text-field\",\"text-translate\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},paint_raster:{\"raster-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-hue-rotate\":{type:\"number\",default:0,period:360,transition:!0,units:\"degrees\",expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-brightness-min\":{type:\"number\",default:0,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-brightness-max\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-saturation\":{type:\"number\",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-contrast\":{type:\"number\",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},resampling:{type:\"enum\",values:{linear:{},nearest:{}},default:\"linear\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-resampling\":{type:\"enum\",values:{linear:{},nearest:{}},default:\"linear\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-fade-duration\":{type:\"number\",default:300,minimum:0,transition:!1,units:\"milliseconds\",expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},paint_hillshade:{\"hillshade-illumination-direction\":{type:\"numberArray\",default:335,minimum:0,maximum:359,transition:!1,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-illumination-altitude\":{type:\"numberArray\",default:45,minimum:0,maximum:90,transition:!1,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-illumination-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"viewport\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-exaggeration\":{type:\"number\",default:.5,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-shadow-color\":{type:\"colorArray\",default:\"#000000\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-highlight-color\":{type:\"colorArray\",default:\"#FFFFFF\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-accent-color\":{type:\"color\",default:\"#000000\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-method\":{type:\"enum\",values:{standard:{},basic:{},combined:{},igor:{},multidirectional:{}},default:\"standard\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},resampling:{type:\"enum\",values:{linear:{},nearest:{}},default:\"linear\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},\"paint_color-relief\":{\"color-relief-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"color-relief-color\":{type:\"color\",transition:!1,expression:{interpolated:!0,parameters:[\"elevation\"]},\"property-type\":\"color-ramp\"},resampling:{type:\"enum\",values:{linear:{},nearest:{}},default:\"linear\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},paint_background:{\"background-color\":{type:\"color\",default:\"#000000\",transition:!0,requires:[{\"!\":\"background-pattern\"}],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"background-pattern\":{type:\"resolvedImage\",transition:!0,expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"cross-faded\"},\"background-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},transition:{duration:{type:\"number\",default:300,minimum:0,units:\"milliseconds\"},delay:{type:\"number\",default:0,minimum:0,units:\"milliseconds\"}},\"property-type\":{\"data-driven\":{type:\"property-type\"},\"cross-faded\":{type:\"property-type\"},\"cross-faded-data-driven\":{type:\"property-type\"},\"color-ramp\":{type:\"property-type\"},\"data-constant\":{type:\"property-type\"},constant:{type:\"property-type\"}},promoteId:{\"*\":{type:\"string\"}},interpolation:{type:\"array\",value:\"interpolation_name\",minimum:1},interpolation_name:{type:\"enum\",values:{linear:{syntax:{overloads:[{parameters:[],\"output-type\":\"interpolation\"}],parameters:[]}},exponential:{syntax:{overloads:[{parameters:[\"base\"],\"output-type\":\"interpolation\"}],parameters:[{name:\"base\",type:\"number literal\"}]}},\"cubic-bezier\":{syntax:{overloads:[{parameters:[\"x1\",\"y1\",\"x2\",\"y2\"],\"output-type\":\"interpolation\"}],parameters:[{name:\"x1\",type:\"number literal\"},{name:\"y1\",type:\"number literal\"},{name:\"x2\",type:\"number literal\"},{name:\"y2\",type:\"number literal\"}]}}}}},D=cp,pp=[\"type\",\"source\",\"source-layer\",\"minzoom\",\"maxzoom\",\"filter\",\"layout\"],T=class{constructor(t,e,r,i,n=\"error\"){this.message=(t?`${t}: `:\"\")+r,i&&(this.identifier=i),this.severity=n,e!=null&&e.__line__&&(this.line=e.__line__);}},un={kind:\"null\"},k={kind:\"number\"},X={kind:\"string\"},Q={kind:\"boolean\"},le={kind:\"color\"},Ea={kind:\"projectionDefinition\"},ur={kind:\"object\"},W={kind:\"value\"},z1={kind:\"error\"},Fa={kind:\"collator\"},hn={kind:\"formatted\"},Ta={kind:\"padding\"},Wi={kind:\"colorArray\"},ka={kind:\"numberArray\"},cn={kind:\"resolvedImage\"},Ia={kind:\"variableAnchorOffsetCollection\"};function $t(t,e){return{kind:\"array\",itemType:t,N:e};}function yt(t){if(t.kind===\"array\"){let e=yt(t.itemType);return typeof t.N==\"number\"?`array<${e}, ${t.N}>`:t.itemType.kind===\"value\"?\"array\":`array<${e}>`;}return t.kind;}var L1=[un,k,X,Q,le,Ea,hn,ur,$t(W),Ta,ka,Wi,cn,Ia];function Zi(t,e){if(e.kind===\"error\")return null;if(t.kind===\"array\"){if(e.kind===\"array\"&&(e.N===0&&e.itemType.kind===\"value\"||!Zi(t.itemType,e.itemType))&&(typeof t.N!=\"number\"||t.N===e.N))return null;}else{if(t.kind===e.kind)return null;if(t.kind===\"value\"){for(let r of L1)if(!Zi(r,e))return null;}}return`Expected ${yt(t)} but found ${yt(e)} instead.`;}function fl(t,e){return e.some(r=>r.kind===t.kind);}function hr(t,e){return e.some(r=>r===\"null\"?t===null:r===\"array\"?Array.isArray(t):r===\"object\"?t&&!Array.isArray(t)&&typeof t==\"object\":r===typeof t);}function Ne(t,e){return t.kind===\"array\"&&e.kind===\"array\"?t.itemType.kind===e.itemType.kind&&typeof t.N==\"number\":t.kind===e.kind;}var fp=.96422,dp=.82521,yp=4/29,Ys=6/29,mp=3*Ys*Ys,V1=Math.PI/180,O1=180/Math.PI;function gp(t){return t%=360,t<0&&(t+=360),t;}function xp([t,e,r,i]){t=As(t),e=As(e),r=As(r);let n,a,s=Ss((.2225045*t+.7168786*e+.0606169*r)/1);t===e&&e===r?n=a=s:(n=Ss((.4360747*t+.3850649*e+.1430804*r)/fp),a=Ss((.0139322*t+.0971045*e+.7141733*r)/dp));let o=116*s-16;return[o<0?0:o,500*(n-s),200*(s-a),i];}function As(t){return t<=.04045?t/12.92:((t+.055)/1.055)**2.4;}function Ss(t){return t>.008856451679035631?t**(1/3):t/mp+yp;}function vp([t,e,r,i]){let n=(t+16)/116,a=isNaN(e)?n:n+e/500,s=isNaN(r)?n:n-r/200;return n=1*Fs(n),a=fp*Fs(a),s=dp*Fs(s),[Es(3.1338561*a-1.6168667*n-.4906146*s),Es(-.9787684*a+1.9161415*n+.033454*s),Es(.0719453*a-.2289914*n+1.4052427*s),i];}function Es(t){return t=t<=.00304?12.92*t:1.055*t**(1/2.4)-.055,t<0?0:t>1?1:t;}function Fs(t){return t>Ys?t*t*t:mp*(t-yp);}function R1(t){let[e,r,i,n]=xp(t),a=Math.sqrt(r*r+i*i);return[Math.round(a*1e4)?gp(Math.atan2(i,r)*O1):NaN,a,e,n];}function $1([t,e,r,i]){return t=isNaN(t)?0:t*V1,vp([r,Math.cos(t)*e,Math.sin(t)*e,i]);}function N1([t,e,r,i]){t=gp(t),e/=100,r/=100;function n(a){let s=(a+t/30)%12,o=e*Math.min(r,1-r);return r-o*Math.max(-1,Math.min(s-3,9-s,1));}return[n(0),n(8),n(4),i];}var U1=Object.hasOwn||function(t,e){return Object.prototype.hasOwnProperty.call(t,e);};function Ri(t,e){return U1(t,e)?t[e]:void 0;}function q1(t){if(t=t.toLowerCase().trim(),t===\"transparent\")return[0,0,0,0];let e=Ri(j1,t);if(e){let[i,n,a]=e;return[i/255,n/255,a/255,1];}if(t.startsWith(\"#\")&&/^#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/.test(t)){let i=t.length<6?1:2,n=1;return[Vn(t.slice(n,n+=i)),Vn(t.slice(n,n+=i)),Vn(t.slice(n,n+=i)),Vn(t.slice(n,n+i)||\"ff\")];}if(t.startsWith(\"rgb\")){let i=t.match(/^rgba?\\(\\s*([\\de.+-]+)(%)?(?:\\s+|\\s*(,)\\s*)([\\de.+-]+)(%)?(?:\\s+|\\s*(,)\\s*)([\\de.+-]+)(%)?(?:\\s*([,\\/])\\s*([\\de.+-]+)(%)?)?\\s*\\)$/);if(i){let[n,a,s,o,l,u,h,c,p,f,d,y]=i,m=[o||\" \",h||\" \",f].join(\"\");if(m===\" \"||m===\" /\"||m===\",,\"||m===\",,,\"){let g=[s,u,p].join(\"\"),x=g===\"%%%\"?100:g===\"\"?255:0;if(x){let b=[zr(+a/x,0,1),zr(+l/x,0,1),zr(+c/x,0,1),d?ch(+d,y):1];if(ph(b))return b;}}return;}}let r=t.match(/^hsla?\\(\\s*([\\de.+-]+)(?:deg)?(?:\\s+|\\s*(,)\\s*)([\\de.+-]+)%(?:\\s+|\\s*(,)\\s*)([\\de.+-]+)%(?:\\s*([,\\/])\\s*([\\de.+-]+)(%)?)?\\s*\\)$/);if(r){let[i,n,a,s,o,l,u,h,c]=r,p=[a||\" \",o||\" \",u].join(\"\");if(p===\" \"||p===\" /\"||p===\",,\"||p===\",,,\"){let f=[+n,zr(+s,0,100),zr(+l,0,100),h?ch(+h,c):1];if(ph(f))return N1(f);}}}function Vn(t){return parseInt(t.padEnd(2,t),16)/255;}function ch(t,e){return zr(e?t/100:t,0,1);}function zr(t,e,r){return Math.min(Math.max(e,t),r);}function ph(t){return!t.some(Number.isNaN);}var j1={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]};function We(t,e,r){return t+r*(e-t);}function Hr(t,e,r){return t.map((i,n)=>We(i,e[n],r));}function G1(t){return t===\"rgb\"||t===\"hcl\"||t===\"lab\";}var gt=(class me{constructor(e,r,i,n=1,a=!0){this.r=e,this.g=r,this.b=i,this.a=n,a||(this.r*=n,this.g*=n,this.b*=n,n||this.overwriteGetter(\"rgb\",[e,r,i,n]));}static parse(e){if(e instanceof me)return e;if(typeof e!=\"string\")return;let r=q1(e);if(r)return new me(...r,!1);}get rgb(){let{r:e,g:r,b:i,a:n}=this,a=n||1/0;return this.overwriteGetter(\"rgb\",[e/a,r/a,i/a,n]);}get hcl(){return this.overwriteGetter(\"hcl\",R1(this.rgb));}get lab(){return this.overwriteGetter(\"lab\",xp(this.rgb));}overwriteGetter(e,r){return Object.defineProperty(this,e,{value:r}),r;}toString(){let[e,r,i,n]=this.rgb;return`rgba(${[e,r,i].map(a=>Math.round(a*255)).join(\",\")},${n})`;}static interpolate(e,r,i,n=\"rgb\"){switch(n){case\"rgb\":{let[a,s,o,l]=Hr(e.rgb,r.rgb,i);return new me(a,s,o,l,!1);}case\"hcl\":{let[a,s,o,l]=e.hcl,[u,h,c,p]=r.hcl,f,d;if(!isNaN(a)&&!isNaN(u)){let b=u-a;u>a&&b>180?b-=360:u<a&&a-u>180&&(b+=360),f=a+i*b;}else isNaN(a)?isNaN(u)?f=NaN:(f=u,(o===1||o===0)&&(d=h)):(f=a,(c===1||c===0)&&(d=s));let[y,m,g,x]=$1([f,d??We(s,h,i),We(o,c,i),We(l,p,i)]);return new me(y,m,g,x,!1);}case\"lab\":{let[a,s,o,l]=vp(Hr(e.lab,r.lab,i));return new me(a,s,o,l,!1);}}}static#_=_staticBlock=()=>(this.black=new me(0,0,0,1),this.white=new me(1,1,1,1),this.transparent=new me(0,0,0,0),this.red=new me(1,0,0,1),this);},_staticBlock()),X1=[\"bottom\",\"center\",\"top\"],Ws=class{constructor(t,e,r,i,n,a){this.text=t,this.image=e,this.scale=r,this.fontStack=i,this.textColor=n,this.verticalAlign=a;}},Me=class ta{constructor(e){this.sections=e;}static fromString(e){return new ta([new Ws(e,null,null,null,null,null)]);}isEmpty(){return this.sections.length===0||!this.sections.some(e=>e.text.length!==0||e.image&&e.image.name.length!==0);}static factory(e){return e instanceof ta?e:ta.fromString(e);}toString(){return this.sections.length===0?\"\":this.sections.map(e=>e.text).join(\"\");}},De=class Ci{constructor(e){this.values=e.slice();}static parse(e){if(e instanceof Ci)return e;if(typeof e==\"number\")return new Ci([e,e,e,e]);if(Array.isArray(e)&&!(e.length<1||e.length>4)){for(let r of e)if(typeof r!=\"number\")return;switch(e.length){case 1:e=[e[0],e[0],e[0],e[0]];break;case 2:e=[e[0],e[1],e[0],e[1]];break;case 3:e=[e[0],e[1],e[2],e[1]];}return new Ci(e);}}toString(){return JSON.stringify(this.values);}static interpolate(e,r,i){return new Ci(Hr(e.values,r.values,i));}},_e=class Mi{constructor(e){this.values=e.slice();}static parse(e){if(e instanceof Mi)return e;if(typeof e==\"number\")return new Mi([e]);if(Array.isArray(e)){for(let r of e)if(typeof r!=\"number\")return;return new Mi(e);}}toString(){return JSON.stringify(this.values);}static interpolate(e,r,i){return new Mi(Hr(e.values,r.values,i));}},ne=class Bi{constructor(e){this.values=e.slice();}static parse(e){if(e instanceof Bi)return e;if(typeof e==\"string\"){let i=gt.parse(e);return i?new Bi([i]):void 0;}if(!Array.isArray(e))return;let r=[];for(let i of e){if(typeof i!=\"string\")return;let n=gt.parse(i);if(!n)return;r.push(n);}return new Bi(r);}toString(){return JSON.stringify(this.values);}static interpolate(e,r,i,n=\"rgb\"){let a=[];if(e.values.length!=r.values.length)throw Error(`colorArray: Arrays have mismatched length (${e.values.length} vs. ${r.values.length}), cannot interpolate.`);for(let s=0;s<e.values.length;s++)a.push(gt.interpolate(e.values[s],r.values[s],i,n));return new Bi(a);}},ct=class extends Error{constructor(t,e){super(t),this.name=\"RuntimeError\",this.path=e;}toJSON(){return this.message;}},Y1=new Set([\"center\",\"left\",\"right\",\"top\",\"bottom\",\"top-left\",\"top-right\",\"bottom-left\",\"bottom-right\"]),be=class ea{constructor(e){this.values=e.slice();}static parse(e){if(e instanceof ea)return e;if(!(!Array.isArray(e)||e.length<1||e.length%2!=0)){for(let r=0;r<e.length;r+=2){let i=e[r],n=e[r+1];if(typeof i!=\"string\"||!Y1.has(i)||!Array.isArray(n)||n.length!==2||typeof n[0]!=\"number\"||typeof n[1]!=\"number\")return;}return new ea(e);}}toString(){return JSON.stringify(this.values);}static interpolate(e,r,i,n){let a=e.values,s=r.values;if(a.length!==s.length)throw new ct(`Cannot interpolate values of different length. from: ${e.toString()}, to: ${r.toString()}`,n);let o=[];for(let l=0;l<a.length;l+=2){if(a[l]!==s[l])throw new ct(`Cannot interpolate values containing mismatched anchors. from[${l}]: ${a[l]}, to[${l}]: ${s[l]}`,n);o.push(a[l]);let[u,h]=a[l+1],[c,p]=s[l+1];o.push([We(u,c,i),We(h,p,i)]);}return new ea(o);}},we=class bp{constructor(e){this.name=e.name,this.available=e.available;}toString(){return this.name;}static fromString(e){return e?new bp({name:e,available:!1}):null;}},gr=class Lr{constructor(e,r,i){this.from=e,this.to=r,this.transition=i;}toString(){return this.from===this.to&&this.transition===1?this.from:JSON.stringify([this.from,this.to,this.transition]);}static interpolate(e,r,i){return new Lr(e,r,i);}static parse(e){if(e instanceof Lr)return e;if(Array.isArray(e)&&e.length===3&&typeof e[0]==\"string\"&&typeof e[1]==\"string\"&&typeof e[2]==\"number\")return new Lr(e[0],e[1],e[2]);if(typeof e==\"object\"&&typeof e.from==\"string\"&&typeof e.to==\"string\"&&typeof e.transition==\"number\")return new Lr(e.from,e.to,e.transition);if(typeof e==\"string\")return new Lr(e,e,1);}},dl=class{constructor(t,e,r){this.sensitivity=t?e?\"variant\":\"case\":e?\"accent\":\"base\",this.locale=r,this.collator=new Intl.Collator(this.locale?this.locale:[],{sensitivity:this.sensitivity,usage:\"search\"});}compare(t,e){return this.collator.compare(t,e);}resolvedLocale(){return new Intl.Collator(this.locale?this.locale:[]).resolvedOptions().locale;}};function wp(t,e,r,i){return typeof t==\"number\"&&t>=0&&t<=255&&typeof e==\"number\"&&e>=0&&e<=255&&typeof r==\"number\"&&r>=0&&r<=255?i===void 0||typeof i==\"number\"&&i>=0&&i<=1?null:`Invalid rgba value [${[t,e,r,i].join(\", \")}]: 'a' must be between 0 and 1.`:`Invalid rgba value [${(typeof i==\"number\"?[t,e,r,i]:[t,e,r]).join(\", \")}]: 'r', 'g', and 'b' must be between 0 and 255.`;}function Kr(t){if(t===null||typeof t==\"string\"||typeof t==\"boolean\"||typeof t==\"number\"||t instanceof gr||t instanceof gt||t instanceof dl||t instanceof Me||t instanceof De||t instanceof _e||t instanceof ne||t instanceof be||t instanceof we)return!0;if(Array.isArray(t)){for(let e of t)if(!Kr(e))return!1;return!0;}if(typeof t==\"object\"){for(let e in t)if(!Kr(t[e]))return!1;return!0;}return!1;}function _t(t){if(t===null)return un;if(typeof t==\"string\")return X;if(typeof t==\"boolean\")return Q;if(typeof t==\"number\")return k;if(t instanceof gt)return le;if(t instanceof gr)return Ea;if(t instanceof dl)return Fa;if(t instanceof Me)return hn;if(t instanceof De)return Ta;if(t instanceof _e)return ka;if(t instanceof ne)return Wi;if(t instanceof be)return Ia;if(t instanceof we)return cn;if(Array.isArray(t)){let e=t.length,r;for(let i of t){let n=_t(i);if(!r)r=n;else{if(r===n)continue;r=W;break;}}return $t(r||W,e);}return ur;}function $i(t){let e=typeof t;return t===null?\"\":e===\"string\"||e===\"number\"||e===\"boolean\"?String(t):t instanceof gt||t instanceof gr||t instanceof Me||t instanceof De||t instanceof _e||t instanceof ne||t instanceof be||t instanceof we?t.toString():JSON.stringify(t);}var Jr=class Dp{constructor(e,r){this.type=e,this.value=r;}static parse(e,r){if(e.length!==2)return r.error(`'literal' expression requires exactly one argument, but found ${e.length-1} instead.`);if(!Kr(e[1]))return r.error(`invalid value of type \"${typeof e[1]}\"`);let i=e[1],n=_t(i),a=r.expectedType;return n.kind===\"array\"&&n.N===0&&a&&a.kind===\"array\"&&(typeof a.N!=\"number\"||a.N===0)&&(n=a),new Dp(n,i);}evaluate(){return this.value;}eachChild(){}outputDefined(){return!0;}},W1=[\"Unknown\",\"Point\",\"LineString\",\"Polygon\"],_p=class{constructor(){this.globals=null,this.feature=null,this.featureState=null,this.formattedSection=null,this._parseColorCache=new Map(),this.availableImages=null,this.canonical=null;}id(){return this.feature&&\"id\"in this.feature?this.feature.id:null;}geometryType(){return this.feature?typeof this.feature.type==\"number\"?W1[this.feature.type]:this.feature.type:null;}geometry(){return this.feature&&\"geometry\"in this.feature?this.feature.geometry:null;}canonicalID(){return this.canonical;}properties(){return this.feature&&this.feature.properties||{};}parseColor(t){let e=this._parseColorCache.get(t);return e||(e=gt.parse(t),this._parseColorCache.set(t,e)),e;}};function Ca(t,e,r){let i=t.length-1,n=0,a=i,s=0,o,l;for(;n<=a;)if(s=Math.floor((n+a)/2),o=t[s],l=t[s+1],o<=e){if(s===i||e<l)return s;n=s+1;}else if(o>e)a=s-1;else throw new ct(\"Input is not a number.\",r);return 0;}var yl=class Ap{constructor(e,r,i,n){this.type=e,this.input=r,this.key=n,this.labels=[],this.outputs=[];for(let[a,s]of i)this.labels.push(a),this.outputs.push(s);}static parse(e,r){if(e.length-1<4)return r.error(`Expected at least 4 arguments, but found only ${e.length-1}.`);if((e.length-1)%2!=0)return r.error(\"Expected an even number of arguments.\");let i=r.parse(e[1],1,k);if(!i)return null;let n=[],a=null;r.expectedType&&r.expectedType.kind!==\"value\"&&(a=r.expectedType);for(let s=1;s<e.length;s+=2){let o=s===1?-1/0:e[s],l=e[s+1],u=s,h=s+1;if(typeof o!=\"number\")return r.error('Input/output pairs for \"step\" expressions must be defined using literal numeric values (not computed expressions) for the input values.',u);if(n.length&&n[n.length-1][0]>=o)return r.error('Input/output pairs for \"step\" expressions must be arranged with input values in strictly ascending order.',u);let c=r.parse(l,h,a);if(!c)return null;a||=c.type,n.push([o,c]);}return new Ap(a,i,n,r.key);}evaluate(e){let r=this.labels,i=this.outputs;if(r.length===1)return i[0].evaluate(e);let n=this.input.evaluate(e);if(n<=r[0])return i[0].evaluate(e);let a=r.length;return n>=r[a-1]?i[a-1].evaluate(e):i[Ca(r,n,this.key)].evaluate(e);}eachChild(e){e(this.input);for(let r of this.outputs)e(r);}outputDefined(){return this.outputs.every(e=>e.outputDefined());}};function Z1(t,e,r,i){let n=3*t,a=3*(r-t)-n,s=1-n-a,o=3*e,l=3*(i-e)-o,u=1-o-l;return function(h,c=1e-6){if(h<=0)return 0;if(h>=1)return 1;let p=h;for(let y=0;y<8;y++){let m=((s*p+a)*p+n)*p-h;if(Math.abs(m)<c)return((u*p+l)*p+o)*p;let g=(3*s*p+2*a)*p+n;if(Math.abs(g)<1e-6)break;p-=m/g;}let f=0,d=1;p=h;for(let y=0;y<20;y++){let m=((s*p+a)*p+n)*p;if(Math.abs(m-h)<c)break;h>m?f=p:d=p,p=(f+d)*.5;}return((u*p+l)*p+o)*p;};}var xe=class Zs{constructor(e,r,i,n,a,s){this.type=e,this.operator=r,this.interpolation=i,this.input=n,this.key=s,this.labels=[],this.outputs=[];for(let[o,l]of a)this.labels.push(o),this.outputs.push(l);}static interpolationFactor(e,r,i,n){let a=0;if(e.name===\"exponential\")a=Ts(r,e.base,i,n);else if(e.name===\"linear\")a=Ts(r,1,i,n);else if(e.name===\"cubic-bezier\"){let s=e.controlPoints;a=Z1(s[0],s[1],s[2],s[3])(Ts(r,1,i,n));}return a;}static parse(e,r){let[i,n,a,...s]=e;if(!Array.isArray(n)||n.length===0)return r.error(\"Expected an interpolation type expression.\",1);if(n[0]===\"linear\")n={name:\"linear\"};else if(n[0]===\"exponential\"){let u=n[1];if(typeof u!=\"number\")return r.error(\"Exponential interpolation requires a numeric base.\",1,1);n={name:\"exponential\",base:u};}else if(n[0]===\"cubic-bezier\"){let u=n.slice(1);if(u.length!==4||u.some(h=>typeof h!=\"number\"||h<0||h>1))return r.error(\"Cubic bezier interpolation requires four numeric arguments with values between 0 and 1.\",1);n={name:\"cubic-bezier\",controlPoints:u};}else return r.error(`Unknown interpolation type ${String(n[0])}`,1,0);if(e.length-1<4)return r.error(`Expected at least 4 arguments, but found only ${e.length-1}.`);if((e.length-1)%2!=0)return r.error(\"Expected an even number of arguments.\");if(a=r.parse(a,2,k),!a)return null;let o=[],l=null;(i===\"interpolate-hcl\"||i===\"interpolate-lab\")&&r.expectedType!=Wi?l=le:r.expectedType&&r.expectedType.kind!==\"value\"&&(l=r.expectedType);for(let u=0;u<s.length;u+=2){let h=s[u],c=s[u+1],p=u+3,f=u+4;if(typeof h!=\"number\")return r.error('Input/output pairs for \"interpolate\" expressions must be defined using literal numeric values (not computed expressions) for the input values.',p);if(o.length&&o[o.length-1][0]>=h)return r.error('Input/output pairs for \"interpolate\" expressions must be arranged with input values in strictly ascending order.',p);let d=r.parse(c,f,l);if(!d)return null;l||=d.type,o.push([h,d]);}return!Ne(l,k)&&!Ne(l,Ea)&&!Ne(l,le)&&!Ne(l,Ta)&&!Ne(l,ka)&&!Ne(l,Wi)&&!Ne(l,Ia)&&!Ne(l,$t(k))?r.error(`Type ${yt(l)} is not interpolatable.`):new Zs(l,i,n,a,o,r.key);}evaluate(e){let r=this.labels,i=this.outputs;if(r.length===1)return i[0].evaluate(e);let n=this.input.evaluate(e);if(n<=r[0])return i[0].evaluate(e);let a=r.length;if(n>=r[a-1])return i[a-1].evaluate(e);let s=Ca(r,n,this.key),o=r[s],l=r[s+1],u=Zs.interpolationFactor(this.interpolation,n,o,l),h=i[s].evaluate(e),c=i[s+1].evaluate(e);switch(this.operator){case\"interpolate\":switch(this.type.kind){case\"number\":return We(h,c,u);case\"color\":return gt.interpolate(h,c,u);case\"padding\":return De.interpolate(h,c,u);case\"colorArray\":return ne.interpolate(h,c,u);case\"numberArray\":return _e.interpolate(h,c,u);case\"variableAnchorOffsetCollection\":return be.interpolate(h,c,u,this.key);case\"array\":return Hr(h,c,u);case\"projectionDefinition\":return gr.interpolate(h,c,u);}case\"interpolate-hcl\":switch(this.type.kind){case\"color\":return gt.interpolate(h,c,u,\"hcl\");case\"colorArray\":return ne.interpolate(h,c,u,\"hcl\");}case\"interpolate-lab\":switch(this.type.kind){case\"color\":return gt.interpolate(h,c,u,\"lab\");case\"colorArray\":return ne.interpolate(h,c,u,\"lab\");}}}eachChild(e){e(this.input);for(let r of this.outputs)e(r);}outputDefined(){return this.outputs.every(e=>e.outputDefined());}};function Ts(t,e,r,i){let n=i-r,a=t-r;return n===0?0:e===1?a/n:(e**+a-1)/(e**+n-1);}var pr={color:gt.interpolate,number:We,padding:De.interpolate,numberArray:_e.interpolate,colorArray:ne.interpolate,variableAnchorOffsetCollection:be.interpolate,array:Hr},Sp=class Ep{constructor(e){this.type=hn,this.sections=e;}static parse(e,r){if(e.length<2)return r.error(\"Expected at least one argument.\");let i=e[1];if(!Array.isArray(i)&&typeof i==\"object\")return r.error(\"First argument must be an image or text section.\");let n=[],a=!1;for(let s=1;s<=e.length-1;++s){let o=e[s];if(a&&typeof o==\"object\"&&!Array.isArray(o)){a=!1;let l=null;if(o[\"font-scale\"]&&(l=r.parse(o[\"font-scale\"],1,k),!l))return null;let u=null;if(o[\"text-font\"]&&(u=r.parse(o[\"text-font\"],1,$t(X)),!u))return null;let h=null;if(o[\"text-color\"]&&(h=r.parse(o[\"text-color\"],1,le),!h))return null;let c=null;if(o[\"vertical-align\"]){if(typeof o[\"vertical-align\"]==\"string\"&&!X1.includes(o[\"vertical-align\"]))return r.error(`'vertical-align' must be one of: 'bottom', 'center', 'top' but found '${o[\"vertical-align\"]}' instead.`);if(c=r.parse(o[\"vertical-align\"],1,X),!c)return null;}let p=n[n.length-1];p.scale=l,p.font=u,p.textColor=h,p.verticalAlign=c;}else{let l=r.parse(e[s],1,W);if(!l)return null;let u=l.type.kind;if(u!==\"string\"&&u!==\"value\"&&u!==\"null\"&&u!==\"resolvedImage\")return r.error(\"Formatted text type must be 'string', 'value', 'image' or 'null'.\");a=!0,n.push({content:l,scale:null,font:null,textColor:null,verticalAlign:null});}}return new Ep(n);}evaluate(e){return new Me(this.sections.map(r=>{let i=r.content.evaluate(e);return _t(i)===cn?new Ws(\"\",i,null,null,null,r.verticalAlign?r.verticalAlign.evaluate(e):null):new Ws($i(i),null,r.scale?r.scale.evaluate(e):null,r.font?r.font.evaluate(e).join(\",\"):null,r.textColor?r.textColor.evaluate(e):null,r.verticalAlign?r.verticalAlign.evaluate(e):null);}));}eachChild(e){for(let r of this.sections)e(r.content),r.scale&&e(r.scale),r.font&&e(r.font),r.textColor&&e(r.textColor),r.verticalAlign&&e(r.verticalAlign);}outputDefined(){return!1;}};function Fp(t,e,r=0,i=t.length-1,n=H1){for(;i>r;){if(i-r>600){let l=i-r+1,u=e-r+1,h=Math.log(l),c=.5*Math.exp(2*h/3),p=.5*Math.sqrt(h*c*(l-c)/l)*(u-l/2<0?-1:1);Fp(t,e,Math.max(r,Math.floor(e-u*c/l+p)),Math.min(i,Math.floor(e+(l-u)*c/l+p)),n);}let a=t[e],s=r,o=i;for(_i(t,r,e),n(t[i],a)>0&&_i(t,r,i);s<o;){for(_i(t,s,o),s++,o--;n(t[s],a)<0;)s++;for(;n(t[o],a)>0;)o--;}n(t[r],a)===0?_i(t,r,o):(o++,_i(t,o,i)),o<=e&&(r=o+1),e<=o&&(i=o-1);}}function _i(t,e,r){let i=t[e];t[e]=t[r],t[r]=i;}function H1(t,e){return t<e?-1:+(t>e);}function Ma(t,e){if(t.length<=1)return[t];let r=[],i,n;for(let a of t){let s=J1(a);s!==0&&(a.area=Math.abs(s),n===void 0&&(n=s<0),n===s<0?(i&&r.push(i),i=[a]):i.push(a));}if(i&&r.push(i),e>1)for(let a=0;a<r.length;a++)r[a].length<=e||(Fp(r[a],e,1,r[a].length-1,K1),r[a]=r[a].slice(0,e));return r;}function K1(t,e){return e.area-t.area;}function J1(t){let e=0;for(let r=0,i=t.length,n=i-1,a,s;r<i;n=r++)a=t[r],s=t[n],e+=(s.x-a.x)*(a.y+s.y);return e;}var On={string:X,number:k,boolean:Q,object:ur},Te=class Tp{constructor(e,r,i){this.type=e,this.args=r,this.key=i;}static parse(e,r){if(e.length<2)return r.error(\"Expected at least one argument.\");let i=1,n,a=e[0];if(a===\"array\"){let o;if(e.length>2){let u=e[1];if(typeof u!=\"string\"||!(u in On)||u===\"object\")return r.error('The item type argument of \"array\" must be one of string, number, boolean',1);o=On[u],i++;}else o=W;let l;if(e.length>3){if(e[2]!==null&&(typeof e[2]!=\"number\"||e[2]<0||e[2]!==Math.floor(e[2])))return r.error('The length argument to \"array\" must be a positive integer literal',2);l=e[2],i++;}n=$t(o,l);}else{if(!On[a])throw Error(`Types doesn't contain name = ${a}`);n=On[a];}let s=[];for(;i<e.length;i++){let o=r.parse(e[i],i,W);if(!o)return null;s.push(o);}return new Tp(n,s,r.key);}evaluate(e){for(let r=0;r<this.args.length;r++){let i=this.args[r].evaluate(e);if(!Zi(this.type,_t(i)))return i;if(r===this.args.length-1)throw new ct(`Expected value to be of type ${yt(this.type)}, but found ${yt(_t(i))} instead.`,this.key);}throw Error();}eachChild(e){this.args.forEach(e);}outputDefined(){return this.args.every(e=>e.outputDefined());}},fh={\"to-boolean\":Q,\"to-color\":le,\"to-number\":k,\"to-string\":X},$r=class kp{constructor(e,r,i){this.type=e,this.args=r,this.key=i;}static parse(e,r){if(e.length<2)return r.error(\"Expected at least one argument.\");let i=e[0];if(!fh[i])throw Error(`Can't parse ${i} as it is not part of the known types`);if((i===\"to-boolean\"||i===\"to-string\")&&e.length!==2)return r.error(\"Expected one argument.\");let n=fh[i],a=[];for(let s=1;s<e.length;s++){let o=r.parse(e[s],s,W);if(!o)return null;a.push(o);}return new kp(n,a,r.key);}evaluate(e){switch(this.type.kind){case\"boolean\":return!!this.args[0].evaluate(e);case\"color\":{let r,i;for(let n of this.args){if(r=n.evaluate(e),i=null,r instanceof gt)return r;if(typeof r==\"string\"){let a=e.parseColor(r);if(a)return a;}else if(Array.isArray(r)&&(i=r.length<3||r.length>4?`Invalid rgba value ${JSON.stringify(r)}: expected an array containing either three or four numeric values.`:wp(r[0],r[1],r[2],r[3]),!i))return new gt(r[0]/255,r[1]/255,r[2]/255,r[3]);}throw new ct(i||`Could not parse color from value '${typeof r==\"string\"?r:JSON.stringify(r)}'`,this.key);}case\"padding\":{let r;for(let i of this.args){r=i.evaluate(e);let n=De.parse(r);if(n)return n;}throw new ct(`Could not parse padding from value '${typeof r==\"string\"?r:JSON.stringify(r)}'`,this.key);}case\"numberArray\":{let r;for(let i of this.args){r=i.evaluate(e);let n=_e.parse(r);if(n)return n;}throw new ct(`Could not parse numberArray from value '${typeof r==\"string\"?r:JSON.stringify(r)}'`,this.key);}case\"colorArray\":{let r;for(let i of this.args){r=i.evaluate(e);let n=ne.parse(r);if(n)return n;}throw new ct(`Could not parse colorArray from value '${typeof r==\"string\"?r:JSON.stringify(r)}'`,this.key);}case\"variableAnchorOffsetCollection\":{let r;for(let i of this.args){r=i.evaluate(e);let n=be.parse(r);if(n)return n;}throw new ct(`Could not parse variableAnchorOffsetCollection from value '${typeof r==\"string\"?r:JSON.stringify(r)}'`,this.key);}case\"number\":{let r=null;for(let i of this.args){if(r=i.evaluate(e),r===null)return 0;let n=Number(r);if(!isNaN(n))return n;}throw new ct(`Could not convert ${JSON.stringify(r)} to number.`,this.key);}case\"formatted\":return Me.fromString($i(this.args[0].evaluate(e)));case\"resolvedImage\":return we.fromString($i(this.args[0].evaluate(e)));case\"projectionDefinition\":{let r=this.args[0].evaluate(e);if(gr.parse(r))return r;throw new ct(`Could not parse projectionDefinition from value '${typeof r==\"string\"?r:JSON.stringify(r)}'`,this.key);}default:return $i(this.args[0].evaluate(e));}}eachChild(e){this.args.forEach(e);}outputDefined(){return this.args.every(e=>e.outputDefined());}},Ip=class Cp{constructor(e,r){this.type=r.type,this.bindings=[].concat(e),this.result=r;}evaluate(e){return this.result.evaluate(e);}eachChild(e){for(let r of this.bindings)e(r[1]);e(this.result);}static parse(e,r){if(e.length<4)return r.error(`Expected at least 3 arguments, but found ${e.length-1} instead.`);let i=[];for(let a=1;a<e.length-1;a+=2){let s=e[a];if(typeof s!=\"string\")return r.error(`Expected string, but found ${typeof s} instead.`,a);if(/[^a-zA-Z0-9_]/.test(s))return r.error(\"Variable names must contain only alphanumeric characters or '_'.\",a);let o=r.parse(e[a+1],a+1);if(!o)return null;i.push([s,o]);}let n=r.parse(e[e.length-1],e.length-1,r.expectedType,i);return n?new Cp(i,n):null;}outputDefined(){return this.result.outputDefined();}},Mp=class Bp{constructor(e,r){this.type=r.type,this.name=e,this.boundExpression=r;}static parse(e,r){if(e.length!==2||typeof e[1]!=\"string\")return r.error(\"'var' expression requires exactly one string literal argument.\");let i=e[1];return r.scope.has(i)?new Bp(i,r.scope.get(i)):r.error(`Unknown variable \"${i}\". Make sure \"${i}\" has been bound in an enclosing \"let\" expression before using it.`,1);}evaluate(e){return this.boundExpression.evaluate(e);}eachChild(){}outputDefined(){return!1;}},Q1=class Pp{constructor(e,r,i,n){this.type=e,this.index=r,this.input=i,this.key=n;}static parse(e,r){if(e.length!==3)return r.error(`Expected 2 arguments, but found ${e.length-1} instead.`);let i=r.parse(e[1],1,k),n=r.parse(e[2],2,$t(r.expectedType||W));if(!i||!n)return null;let a=n.type;return new Pp(a.itemType,i,n,r.key);}evaluate(e){let r=this.index.evaluate(e),i=this.input.evaluate(e);if(r<0)throw new ct(`Array index out of bounds: ${r} < 0.`,this.key);if(r>=i.length)throw new ct(`Array index out of bounds: ${r} > ${i.length-1}.`,this.key);if(r!==Math.floor(r))throw new ct(`Array index must be an integer, but found ${r} instead.`,this.key);return i[r];}eachChild(e){e(this.index),e(this.input);}outputDefined(){return!1;}},t0=class zp{constructor(e,r,i){this.needle=e,this.haystack=r,this.key=i,this.type=Q;}static parse(e,r){if(e.length!==3)return r.error(`Expected 2 arguments, but found ${e.length-1} instead.`);let i=r.parse(e[1],1,W),n=r.parse(e[2],2,W);return!i||!n?null:fl(i.type,[Q,X,k,un,W])?new zp(i,n,r.key):r.error(`Expected first argument to be of type boolean, string, number or null, but found ${yt(i.type)} instead`);}evaluate(e){let r=this.needle.evaluate(e),i=this.haystack.evaluate(e);if(!i)return!1;if(!hr(r,[\"boolean\",\"string\",\"number\",\"null\"]))throw new ct(`Expected first argument to be of type boolean, string, number or null, but found ${yt(_t(r))} instead.`,this.key);if(!hr(i,[\"string\",\"array\"]))throw new ct(`Expected second argument to be of type array or string, but found ${yt(_t(i))} instead.`,this.key);return i.indexOf(r)>=0;}eachChild(e){e(this.needle),e(this.haystack);}outputDefined(){return!0;}},e0=class Hs{constructor(e,r,i,n){this.needle=e,this.haystack=r,this.key=i,this.fromIndex=n,this.type=k;}static parse(e,r){if(e.length<=2||e.length>=5)return r.error(`Expected 2 or 3 arguments, but found ${e.length-1} instead.`);let i=r.parse(e[1],1,W),n=r.parse(e[2],2,W);if(!i||!n)return null;if(!fl(i.type,[Q,X,k,un,W]))return r.error(`Expected first argument to be of type boolean, string, number or null, but found ${yt(i.type)} instead`);if(e.length===4){let a=r.parse(e[3],3,k);return a?new Hs(i,n,r.key,a):null;}return new Hs(i,n,r.key);}evaluate(e){let r=this.needle.evaluate(e),i=this.haystack.evaluate(e);if(!hr(r,[\"boolean\",\"string\",\"number\",\"null\"]))throw new ct(`Expected first argument to be of type boolean, string, number or null, but found ${yt(_t(r))} instead.`,this.key);let n;if(this.fromIndex&&(n=this.fromIndex.evaluate(e)),hr(i,[\"string\"])){let a=i.indexOf(r,n);return a===-1?-1:[...i.slice(0,a)].length;}if(hr(i,[\"array\"]))return i.indexOf(r,n);throw new ct(`Expected second argument to be of type array or string, but found ${yt(_t(i))} instead.`,this.key);}eachChild(e){e(this.needle),e(this.haystack),this.fromIndex&&e(this.fromIndex);}outputDefined(){return!1;}},r0=class Lp{constructor(e,r,i,n,a,s){this.inputType=e,this.type=r,this.input=i,this.cases=n,this.outputs=a,this.otherwise=s;}static parse(e,r){if(e.length<5)return r.error(`Expected at least 4 arguments, but found only ${e.length-1}.`);if(e.length%2!=1)return r.error(\"Expected an even number of arguments.\");let i,n;r.expectedType&&r.expectedType.kind!==\"value\"&&(n=r.expectedType);let a={},s=[];for(let u=2;u<e.length-1;u+=2){let h=e[u],c=e[u+1];Array.isArray(h)||(h=[h]);let p=r.concat(u);if(h.length===0)return p.error(\"Expected at least one branch label.\");for(let d of h){if(typeof d!=\"number\"&&typeof d!=\"string\")return p.error(\"Branch labels must be numbers or strings.\");if(typeof d==\"number\"&&Math.abs(d)>2**53-1)return p.error(`Branch labels must be integers no larger than ${2**53-1}.`);if(typeof d==\"number\"&&Math.floor(d)!==d)return p.error(\"Numeric branch labels must be integer values.\");if(!i)i=_t(d);else if(p.checkSubtype(i,_t(d)))return null;if(a[String(d)]!==void 0)return p.error(\"Branch labels must be unique.\");a[String(d)]=s.length;}let f=r.parse(c,u,n);if(!f)return null;n||=f.type,s.push(f);}let o=r.parse(e[1],1,W);if(!o)return null;let l=r.parse(e[e.length-1],e.length-1,n);return!l||o.type.kind!==\"value\"&&r.concat(1).checkSubtype(i,o.type)?null:new Lp(i,n,o,a,s,l);}evaluate(e){let r=this.input.evaluate(e);return(_t(r)===this.inputType&&this.outputs[this.cases[r]]||this.otherwise).evaluate(e);}eachChild(e){e(this.input),this.outputs.forEach(e),e(this.otherwise);}outputDefined(){return this.outputs.every(e=>e.outputDefined())&&this.otherwise.outputDefined();}},i0=class Vp{constructor(e,r,i){this.type=e,this.branches=r,this.otherwise=i;}static parse(e,r){if(e.length<4)return r.error(`Expected at least 3 arguments, but found only ${e.length-1}.`);if(e.length%2!=0)return r.error(\"Expected an odd number of arguments.\");let i;r.expectedType&&r.expectedType.kind!==\"value\"&&(i=r.expectedType);let n=[];for(let s=1;s<e.length-1;s+=2){let o=r.parse(e[s],s,Q);if(!o)return null;let l=r.parse(e[s+1],s+1,i);if(!l)return null;n.push([o,l]),i||=l.type;}let a=r.parse(e[e.length-1],e.length-1,i);if(!a)return null;if(!i)throw Error(\"Can't infer output type\");return new Vp(i,n,a);}evaluate(e){for(let[r,i]of this.branches)if(r.evaluate(e))return i.evaluate(e);return this.otherwise.evaluate(e);}eachChild(e){for(let[r,i]of this.branches)e(r),e(i);e(this.otherwise);}outputDefined(){return this.branches.every(([e,r])=>r.outputDefined())&&this.otherwise.outputDefined();}},n0=class Ks{constructor(e,r,i,n,a){this.type=e,this.input=r,this.beginIndex=i,this.key=n,this.endIndex=a;}static parse(e,r){if(e.length<=2||e.length>=5)return r.error(`Expected 2 or 3 arguments, but found ${e.length-1} instead.`);let i=r.parse(e[1],1,W),n=r.parse(e[2],2,k);if(!i||!n)return null;if(!fl(i.type,[$t(W),X,W]))return r.error(`Expected first argument to be of type array or string, but found ${yt(i.type)} instead`);if(e.length===4){let a=r.parse(e[3],3,k);return a?new Ks(i.type,i,n,r.key,a):null;}return new Ks(i.type,i,n,r.key);}evaluate(e){let r=this.input.evaluate(e),i=this.beginIndex.evaluate(e),n;if(this.endIndex&&(n=this.endIndex.evaluate(e)),hr(r,[\"string\"]))return[...r].slice(i,n).join(\"\");if(hr(r,[\"array\"]))return r.slice(i,n);throw new ct(`Expected first argument to be of type array or string, but found ${yt(_t(r))} instead.`,this.key);}eachChild(e){e(this.input),e(this.beginIndex),this.endIndex&&e(this.endIndex);}outputDefined(){return!1;}},Op=class Js{constructor(e,r){this.type=e,this.args=r;}static parse(e,r){if(e.length<2)return r.error(\"Expected at least one argument.\");let i=null,n=r.expectedType;n&&n.kind!==\"value\"&&(i=n);let a=[];for(let s of e.slice(1)){let o=r.parse(s,1+a.length,i,void 0,{typeAnnotation:\"omit\"});if(!o)return null;i||=o.type,a.push(o);}if(!i)throw Error(\"No output type\");return n&&a.some(s=>Zi(n,s.type))?new Js(W,a):new Js(i,a);}evaluate(e){let r=null,i=0,n;for(let a of this.args)if(i++,r=a.evaluate(e),r&&r instanceof we&&!r.available&&(n||=r.name,r=null,i===this.args.length&&(r=n)),r!==null)break;return r;}eachChild(e){this.args.forEach(e);}outputDefined(){return this.args.every(e=>e.outputDefined());}};function dh(t,e){return t===\"==\"||t===\"!=\"?e.kind===\"boolean\"||e.kind===\"string\"||e.kind===\"number\"||e.kind===\"null\"||e.kind===\"value\":e.kind===\"string\"||e.kind===\"number\"||e.kind===\"value\";}function a0(t,e,r){return e===r;}function s0(t,e,r){return e!==r;}function o0(t,e,r){return e<r;}function l0(t,e,r){return e>r;}function u0(t,e,r){return e<=r;}function h0(t,e,r){return e>=r;}function Rp(t,e,r,i){return i.compare(e,r)===0;}function c0(t,e,r,i){return!Rp(t,e,r,i);}function p0(t,e,r,i){return i.compare(e,r)<0;}function f0(t,e,r,i){return i.compare(e,r)>0;}function d0(t,e,r,i){return i.compare(e,r)<=0;}function y0(t,e,r,i){return i.compare(e,r)>=0;}function ni(t,e,r){let i=t!==\"==\"&&t!==\"!=\";return class $p{constructor(a,s,o,l){this.lhs=a,this.rhs=s,this.key=o,this.collator=l,this.type=Q,this.hasUntypedArgument=a.type.kind===\"value\"||s.type.kind===\"value\";}static parse(a,s){if(a.length!==3&&a.length!==4)return s.error(\"Expected two or three arguments.\");let o=a[0],l=s.parse(a[1],1,W);if(!l)return null;if(!dh(o,l.type))return s.concat(1).error(`\"${o}\" comparisons are not supported for type '${yt(l.type)}'.`);let u=s.parse(a[2],2,W);if(!u)return null;if(!dh(o,u.type))return s.concat(2).error(`\"${o}\" comparisons are not supported for type '${yt(u.type)}'.`);if(l.type.kind!==u.type.kind&&l.type.kind!==\"value\"&&u.type.kind!==\"value\")return s.error(`Cannot compare types '${yt(l.type)}' and '${yt(u.type)}'.`);i&&(l.type.kind===\"value\"&&u.type.kind!==\"value\"?l=new Te(u.type,[l],s.key):l.type.kind!==\"value\"&&u.type.kind===\"value\"&&(u=new Te(l.type,[u],s.key)));let h=null;if(a.length===4){if(l.type.kind!==\"string\"&&u.type.kind!==\"string\"&&l.type.kind!==\"value\"&&u.type.kind!==\"value\")return s.error(\"Cannot use collator to compare non-string types.\");if(h=s.parse(a[3],3,Fa),!h)return null;}return new $p(l,u,s.key,h);}evaluate(a){let s=this.lhs.evaluate(a),o=this.rhs.evaluate(a);if(i&&this.hasUntypedArgument){let l=_t(s),u=_t(o);if(l.kind!==u.kind||l.kind!==\"string\"&&l.kind!==\"number\")throw new ct(`Expected arguments for \"${t}\" to be (string, string) or (number, number), but found (${l.kind}, ${u.kind}) instead.`,this.key);}if(this.collator&&!i&&this.hasUntypedArgument){let l=_t(s),u=_t(o);if(l.kind!==\"string\"||u.kind!==\"string\")return e(a,s,o);}return this.collator?r(a,s,o,this.collator.evaluate(a)):e(a,s,o);}eachChild(a){a(this.lhs),a(this.rhs),this.collator&&a(this.collator);}outputDefined(){return!0;}};}var m0=ni(\"==\",a0,Rp),g0=ni(\"!=\",s0,c0),x0=ni(\"<\",o0,p0),v0=ni(\">\",l0,f0),b0=ni(\"<=\",u0,d0),w0=ni(\">=\",h0,y0),Np=class Up{constructor(e,r,i){this.type=Fa,this.locale=i,this.caseSensitive=e,this.diacriticSensitive=r;}static parse(e,r){if(e.length!==2)return r.error(\"Expected one argument.\");let i=e[1];if(typeof i!=\"object\"||Array.isArray(i))return r.error(\"Collator options argument must be an object.\");let n=r.parse(i[\"case-sensitive\"]!==void 0&&i[\"case-sensitive\"],1,Q);if(!n)return null;let a=r.parse(i[\"diacritic-sensitive\"]!==void 0&&i[\"diacritic-sensitive\"],1,Q);if(!a)return null;let s=null;return i.locale&&(s=r.parse(i.locale,1,X),!s)?null:new Up(n,a,s);}evaluate(e){return new dl(this.caseSensitive.evaluate(e),this.diacriticSensitive.evaluate(e),this.locale?this.locale.evaluate(e):null);}eachChild(e){e(this.caseSensitive),e(this.diacriticSensitive),this.locale&&e(this.locale);}outputDefined(){return!1;}},D0=class qp{constructor(e,r,i,n,a,s){this.type=X,this.number=e,this.locale=r,this.currency=i,this.unit=n,this.minFractionDigits=a,this.maxFractionDigits=s;}static parse(e,r){if(e.length!==3)return r.error(\"Expected two arguments.\");let i=r.parse(e[1],1,k);if(!i)return null;let n=e[2];if(typeof n!=\"object\"||Array.isArray(n))return r.error(\"NumberFormat options argument must be an object.\");let a=null;if(n.locale&&(a=r.parse(n.locale,1,X),!a))return null;let s=null;if(n.currency&&(s=r.parse(n.currency,1,X),!s))return null;let o=null;if(n.unit&&(o=r.parse(n.unit,1,X),!o))return null;if(s&&o)return r.error(\"NumberFormat options `currency` and `unit` are mutually exclusive\");let l=null;if(n[\"min-fraction-digits\"]&&(l=r.parse(n[\"min-fraction-digits\"],1,k),!l))return null;let u=null;return n[\"max-fraction-digits\"]&&(u=r.parse(n[\"max-fraction-digits\"],1,k),!u)?null:new qp(i,a,s,o,l,u);}evaluate(e){return new Intl.NumberFormat(this.locale?this.locale.evaluate(e):[],{style:this.currency?\"currency\":this.unit?\"unit\":\"decimal\",currency:this.currency?this.currency.evaluate(e):void 0,unit:this.unit?this.unit.evaluate(e):void 0,minimumFractionDigits:this.minFractionDigits?this.minFractionDigits.evaluate(e):void 0,maximumFractionDigits:this.maxFractionDigits?this.maxFractionDigits.evaluate(e):void 0}).format(this.number.evaluate(e));}eachChild(e){e(this.number),this.locale&&e(this.locale),this.currency&&e(this.currency),this.unit&&e(this.unit),this.minFractionDigits&&e(this.minFractionDigits),this.maxFractionDigits&&e(this.maxFractionDigits);}outputDefined(){return!1;}},_0=class jp{constructor(e){this.type=cn,this.input=e;}static parse(e,r){if(e.length!==2)return r.error(\"Expected two arguments.\");let i=r.parse(e[1],1,X);return i?new jp(i):r.error(\"No image name provided.\");}evaluate(e){let r=this.input.evaluate(e),i=we.fromString(r);return i&&e.availableImages&&(i.available=e.availableImages.indexOf(r)>-1),i;}eachChild(e){e(this.input);}outputDefined(){return!1;}},A0=class Gp{constructor(e,r){this.input=e,this.key=r,this.type=k;}static parse(e,r){if(e.length!==2)return r.error(`Expected 1 argument, but found ${e.length-1} instead.`);let i=r.parse(e[1],1);return i?i.type.kind!==\"array\"&&i.type.kind!==\"string\"&&i.type.kind!==\"value\"?r.error(`Expected argument of type string or array, but found ${yt(i.type)} instead.`):new Gp(i,r.key):null;}evaluate(e){let r=this.input.evaluate(e);if(typeof r==\"string\")return[...r].length;if(Array.isArray(r))return r.length;throw new ct(`Expected value to be of type string or array, but found ${yt(_t(r))} instead.`,this.key);}eachChild(e){e(this.input);}outputDefined(){return!1;}},ve=8192;function S0(t,e){let r=E0(t[0]),i=T0(t[1]),n=2**e.z;return[Math.round(r*n*ve),Math.round(i*n*ve)];}function ml(t,e){let r=2**e.z,i=(t[0]/ve+e.x)/r,n=(t[1]/ve+e.y)/r;return[F0(i),k0(n)];}function E0(t){return(180+t)/360;}function F0(t){return t*360-180;}function T0(t){return(180-180/Math.PI*Math.log(Math.tan(Math.PI/4+t*Math.PI/360)))/360;}function k0(t){return 360/Math.PI*Math.atan(Math.exp((180-t*360)*Math.PI/180))-90;}function pn(t,e){t[0]=Math.min(t[0],e[0]),t[1]=Math.min(t[1],e[1]),t[2]=Math.max(t[2],e[0]),t[3]=Math.max(t[3],e[1]);}function Hi(t,e){return!(t[0]<=e[0]||t[2]>=e[2]||t[1]<=e[1]||t[3]>=e[3]);}function I0(t,e,r){return e[1]>t[1]!=r[1]>t[1]&&t[0]<(r[0]-e[0])*(t[1]-e[1])/(r[1]-e[1])+e[0];}function C0(t,e,r){let i=t[0]-e[0],n=t[1]-e[1],a=t[0]-r[0],s=t[1]-r[1];return i*s-a*n===0&&i*a<=0&&n*s<=0;}function Ba(t,e,r,i){let n=[e[0]-t[0],e[1]-t[1]];return z0([i[0]-r[0],i[1]-r[1]],n)!==0&&!!(yh(t,e,r,i)&&yh(r,i,t,e));}function M0(t,e,r){for(let i of r)for(let n=0;n<i.length-1;++n)if(Ba(t,e,i[n],i[n+1]))return!0;return!1;}function ai(t,e,r=!1){let i=!1;for(let n of e)for(let a=0;a<n.length-1;a++){if(C0(t,n[a],n[a+1]))return r;I0(t,n[a],n[a+1])&&(i=!i);}return i;}function B0(t,e){for(let r of e)if(ai(t,r))return!0;return!1;}function Xp(t,e){for(let r of t)if(!ai(r,e))return!1;for(let r=0;r<t.length-1;++r)if(M0(t[r],t[r+1],e))return!1;return!0;}function P0(t,e){for(let r of e)if(Xp(t,r))return!0;return!1;}function z0(t,e){return t[0]*e[1]-t[1]*e[0];}function yh(t,e,r,i){let n=t[0]-r[0],a=t[1]-r[1],s=e[0]-r[0],o=e[1]-r[1],l=i[0]-r[0],u=i[1]-r[1],h=n*u-l*a,c=s*u-l*o;return h>0&&c<0||h<0&&c>0;}function gl(t,e,r){let i=[];for(let n=0;n<t.length;n++){let a=[];for(let s=0;s<t[n].length;s++){let o=S0(t[n][s],r);pn(e,o),a.push(o);}i.push(a);}return i;}function Yp(t,e,r){let i=[];for(let n=0;n<t.length;n++){let a=gl(t[n],e,r);i.push(a);}return i;}function Wp(t,e,r,i){if(t[0]<r[0]||t[0]>r[2]){let n=i*.5,a=t[0]-r[0]>n?-i:r[0]-t[0]>n?i:0;a===0&&(a=t[0]-r[2]>n?-i:r[2]-t[0]>n?i:0),t[0]+=a;}pn(e,t);}function L0(t){t[0]=t[1]=1/0,t[2]=t[3]=-1/0;}function mh(t,e,r,i){let n=2**i.z*ve,a=[i.x*ve,i.y*ve],s=[];for(let o of t)for(let l of o){let u=[l.x+a[0],l.y+a[1]];Wp(u,e,r,n),s.push(u);}return s;}function gh(t,e,r,i){let n=2**i.z*ve,a=[i.x*ve,i.y*ve],s=[];for(let o of t){let l=[];for(let u of o){let h=[u.x+a[0],u.y+a[1]];pn(e,h),l.push(h);}s.push(l);}if(e[2]-e[0]<=n/2){L0(e);for(let o of s)for(let l of o)Wp(l,e,r,n);}return s;}function V0(t,e){let r=[1/0,1/0,-1/0,-1/0],i=[1/0,1/0,-1/0,-1/0],n=t.canonicalID();if(e.type===\"Polygon\"){let a=gl(e.coordinates,i,n),s=mh(t.geometry(),r,i,n);if(!Hi(r,i))return!1;for(let o of s)if(!ai(o,a))return!1;}if(e.type===\"MultiPolygon\"){let a=Yp(e.coordinates,i,n),s=mh(t.geometry(),r,i,n);if(!Hi(r,i))return!1;for(let o of s)if(!B0(o,a))return!1;}return!0;}function O0(t,e){let r=[1/0,1/0,-1/0,-1/0],i=[1/0,1/0,-1/0,-1/0],n=t.canonicalID();if(e.type===\"Polygon\"){let a=gl(e.coordinates,i,n),s=gh(t.geometry(),r,i,n);if(!Hi(r,i))return!1;for(let o of s)if(!Xp(o,a))return!1;}if(e.type===\"MultiPolygon\"){let a=Yp(e.coordinates,i,n),s=gh(t.geometry(),r,i,n);if(!Hi(r,i))return!1;for(let o of s)if(!P0(o,a))return!1;}return!0;}var xl=class ra{constructor(e,r){this.type=Q,this.geojson=e,this.geometries=r;}static parse(e,r){if(e.length!==2)return r.error(`'within' expression requires exactly one argument, but found ${e.length-1} instead.`);if(Kr(e[1])){let i=e[1];if(i.type===\"FeatureCollection\"){let n=[];for(let a of i.features){let{type:s,coordinates:o}=a.geometry;s===\"Polygon\"&&n.push(o),s===\"MultiPolygon\"&&n.push(...o);}if(n.length)return new ra(i,{type:\"MultiPolygon\",coordinates:n});}else if(i.type===\"Feature\"){let n=i.geometry.type;if(n===\"Polygon\"||n===\"MultiPolygon\")return new ra(i,i.geometry);}else if(i.type===\"Polygon\"||i.type===\"MultiPolygon\")return new ra(i,i);}return r.error(\"'within' expression requires valid geojson object that contains polygon geometry type.\");}evaluate(e){if(e.geometry()!=null&&e.canonicalID()!=null){if(e.geometryType()===\"Point\")return V0(e,this.geometries);if(e.geometryType()===\"LineString\")return O0(e,this.geometries);}return!1;}eachChild(){}outputDefined(){return!0;}},Zp=class{constructor(t=[],e=(r,i)=>r<i?-1:+(r>i)){if(this.data=t,this.length=this.data.length,this.compare=e,this.length>0)for(let r=(this.length>>1)-1;r>=0;r--)this._down(r);}push(t){this.data.push(t),this._up(this.length++);}pop(){if(this.length===0)return;let t=this.data[0],e=this.data.pop();return--this.length>0&&(this.data[0]=e,this._down(0)),t;}peek(){return this.data[0];}_up(t){let{data:e,compare:r}=this,i=e[t];for(;t>0;){let n=t-1>>1,a=e[n];if(r(i,a)>=0)break;e[t]=a,t=n;}e[t]=i;}_down(t){let{data:e,compare:r}=this,i=this.length>>1,n=e[t];for(;t<i;){let a=(t<<1)+1,s=a+1;if(s<this.length&&r(e[s],e[a])<0&&(a=s),r(e[a],n)>=0)break;e[t]=e[a],t=a;}e[t]=n;}},xh=Math.PI/180,vl=class{constructor(t){let e=xh*6378.137*1e3,r=Math.cos(t*xh),i=1/(1-.0066943799901413165*(1-r*r)),n=Math.sqrt(i);this.kx=e*n*r,this.ky=e*n*i*.9933056200098587;}distance(t,e){let r=this.wrap(t[0]-e[0])*this.kx,i=(t[1]-e[1])*this.ky;return Math.sqrt(r*r+i*i);}pointOnLine(t,e){let r=1/0,i,n,a,s;for(let o=0;o<t.length-1;o++){let l=t[o][0],u=t[o][1],h=this.wrap(t[o+1][0]-l)*this.kx,c=(t[o+1][1]-u)*this.ky,p=0;(h!==0||c!==0)&&(p=(this.wrap(e[0]-l)*this.kx*h+(e[1]-u)*this.ky*c)/(h*h+c*c),p>1?(l=t[o+1][0],u=t[o+1][1]):p>0&&(l+=h/this.kx*p,u+=c/this.ky*p)),h=this.wrap(e[0]-l)*this.kx,c=(e[1]-u)*this.ky;let f=h*h+c*c;f<r&&(r=f,i=l,n=u,a=o,s=p);}return{point:[i,n],index:a,t:Math.max(0,Math.min(1,s))};}wrap(t){for(;t<-180;)t+=360;for(;t>180;)t-=360;return t;}};function Hp(t,e){return e[0]-t[0];}function ha(t){return t[1]-t[0]+1;}function Be(t,e){return t[1]>=t[0]&&t[1]<e;}function Qs(t,e){if(t[0]>t[1])return[null,null];let r=ha(t);if(e){if(r===2)return[t,null];let n=Math.floor(r/2);return[[t[0],t[0]+n],[t[0]+n,t[1]]];}if(r===1)return[t,null];let i=Math.floor(r/2)-1;return[[t[0],t[0]+i],[t[0]+i+1,t[1]]];}function to(t,e){if(!Be(e,t.length))return[1/0,1/0,-1/0,-1/0];let r=[1/0,1/0,-1/0,-1/0];for(let i=e[0];i<=e[1];++i)pn(r,t[i]);return r;}function eo(t){let e=[1/0,1/0,-1/0,-1/0];for(let r of t)for(let i of r)pn(e,i);return e;}function vh(t){return t[0]!==-1/0&&t[1]!==-1/0&&t[2]!==1/0&&t[3]!==1/0;}function bl(t,e,r){if(!vh(t)||!vh(e))return NaN;let i=0,n=0;return t[2]<e[0]&&(i=e[0]-t[2]),t[0]>e[2]&&(i=t[0]-e[2]),t[1]>e[3]&&(n=t[1]-e[3]),t[3]<e[1]&&(n=e[1]-t[3]),r.distance([0,0],[i,n]);}function sr(t,e,r){let i=r.pointOnLine(e,t);return r.distance(t,i.point);}function wl(t,e,r,i,n){let a=Math.min(sr(t,[r,i],n),sr(e,[r,i],n)),s=Math.min(sr(r,[t,e],n),sr(i,[t,e],n));return Math.min(a,s);}function R0(t,e,r,i,n){if(!(Be(e,t.length)&&Be(i,r.length)))return 1/0;let a=1/0;for(let s=e[0];s<e[1];++s){let o=t[s],l=t[s+1];for(let u=i[0];u<i[1];++u){let h=r[u],c=r[u+1];if(Ba(o,l,h,c))return 0;a=Math.min(a,wl(o,l,h,c,n));}}return a;}function $0(t,e,r,i,n){if(!(Be(e,t.length)&&Be(i,r.length)))return NaN;let a=1/0;for(let s=e[0];s<=e[1];++s)for(let o=i[0];o<=i[1];++o)if(a=Math.min(a,n.distance(t[s],r[o])),a===0)return a;return a;}function N0(t,e,r){if(ai(t,e,!0))return 0;let i=1/0;for(let n of e){let a=n[0],s=n[n.length-1];if(a!==s&&(i=Math.min(i,sr(t,[s,a],r)),i===0))return i;let o=r.pointOnLine(n,t);if(i=Math.min(i,r.distance(t,o.point)),i===0)return i;}return i;}function U0(t,e,r,i){if(!Be(e,t.length))return NaN;for(let a=e[0];a<=e[1];++a)if(ai(t[a],r,!0))return 0;let n=1/0;for(let a=e[0];a<e[1];++a){let s=t[a],o=t[a+1];for(let l of r)for(let u=0,h=l.length,c=h-1;u<h;c=u++){let p=l[c],f=l[u];if(Ba(s,o,p,f))return 0;n=Math.min(n,wl(s,o,p,f,i));}}return n;}function bh(t,e){for(let r of t)for(let i of r)if(ai(i,e,!0))return!0;return!1;}function q0(t,e,r,i=1/0){let n=eo(t),a=eo(e);if(i!==1/0&&bl(n,a,r)>=i)return i;if(Hi(n,a)){if(bh(t,e))return 0;}else if(bh(e,t))return 0;let s=1/0;for(let o of t)for(let l=0,u=o.length,h=u-1;l<u;h=l++){let c=o[h],p=o[l];for(let f of e)for(let d=0,y=f.length,m=y-1;d<y;m=d++){let g=f[m],x=f[d];if(Ba(c,p,g,x))return 0;s=Math.min(s,wl(c,p,g,x,r));}}return s;}function wh(t,e,r,i,n,a){if(!a)return;let s=bl(to(i,a),n,r);s<e&&t.push([s,a,[0,0]]);}function Rn(t,e,r,i,n,a,s){if(!a||!s)return;let o=bl(to(i,a),to(n,s),r);o<e&&t.push([o,a,s]);}function ca(t,e,r,i,n=1/0){let a=Math.min(i.distance(t[0],r[0][0]),n);if(a===0)return a;let s=new Zp([[0,[0,t.length-1],[0,0]]],Hp),o=eo(r);for(;s.length>0;){let l=s.pop();if(l[0]>=a)continue;let u=l[1],h=e?50:100;if(ha(u)<=h){if(!Be(u,t.length))return NaN;if(e){let c=U0(t,u,r,i);if(isNaN(c)||c===0)return c;a=Math.min(a,c);}else for(let c=u[0];c<=u[1];++c){let p=N0(t[c],r,i);if(a=Math.min(a,p),a===0)return 0;}}else{let c=Qs(u,e);wh(s,a,i,t,o,c[0]),wh(s,a,i,t,o,c[1]);}}return a;}function pa(t,e,r,i,n,a=1/0){let s=Math.min(a,n.distance(t[0],r[0]));if(s===0)return s;let o=new Zp([[0,[0,t.length-1],[0,r.length-1]]],Hp);for(;o.length>0;){let l=o.pop();if(l[0]>=s)continue;let u=l[1],h=l[2],c=e?50:100,p=i?50:100;if(ha(u)<=c&&ha(h)<=p){if(!Be(u,t.length)&&Be(h,r.length))return NaN;let f;if(e&&i)f=R0(t,u,r,h,n),s=Math.min(s,f);else if(e&&!i){let d=t.slice(u[0],u[1]+1);for(let y=h[0];y<=h[1];++y)if(f=sr(r[y],d,n),s=Math.min(s,f),s===0)return s;}else if(!e&&i){let d=r.slice(h[0],h[1]+1);for(let y=u[0];y<=u[1];++y)if(f=sr(t[y],d,n),s=Math.min(s,f),s===0)return s;}else f=$0(t,u,r,h,n),s=Math.min(s,f);}else{let f=Qs(u,e),d=Qs(h,i);Rn(o,s,n,t,r,f[0],d[0]),Rn(o,s,n,t,r,f[0],d[1]),Rn(o,s,n,t,r,f[1],d[0]),Rn(o,s,n,t,r,f[1],d[1]);}}return s;}function j0(t,e){let r=t.geometry(),i=r.flat().map(s=>ml([s.x,s.y],t.canonical));if(r.length===0)return NaN;let n=new vl(i[0][1]),a=1/0;for(let s of e){switch(s.type){case\"Point\":a=Math.min(a,pa(i,!1,[s.coordinates],!1,n,a));break;case\"LineString\":a=Math.min(a,pa(i,!1,s.coordinates,!0,n,a));break;case\"Polygon\":a=Math.min(a,ca(i,!1,s.coordinates,n,a));}if(a===0)return a;}return a;}function G0(t,e){let r=t.geometry(),i=r.flat().map(s=>ml([s.x,s.y],t.canonical));if(r.length===0)return NaN;let n=new vl(i[0][1]),a=1/0;for(let s of e){switch(s.type){case\"Point\":a=Math.min(a,pa(i,!0,[s.coordinates],!1,n,a));break;case\"LineString\":a=Math.min(a,pa(i,!0,s.coordinates,!0,n,a));break;case\"Polygon\":a=Math.min(a,ca(i,!0,s.coordinates,n,a));}if(a===0)return a;}return a;}function X0(t,e){let r=t.geometry();if(r.length===0||r[0].length===0)return NaN;let i=Ma(r,0).map(s=>s.map(o=>o.map(l=>ml([l.x,l.y],t.canonical)))),n=new vl(i[0][0][0][1]),a=1/0;for(let s of e)for(let o of i){switch(s.type){case\"Point\":a=Math.min(a,ca([s.coordinates],!1,o,n,a));break;case\"LineString\":a=Math.min(a,ca(s.coordinates,!0,o,n,a));break;case\"Polygon\":a=Math.min(a,q0(o,s.coordinates,n,a));}if(a===0)return a;}return a;}function ks(t){return t.type===\"MultiPolygon\"?t.coordinates.map(e=>({type:\"Polygon\",coordinates:e})):t.type===\"MultiLineString\"?t.coordinates.map(e=>({type:\"LineString\",coordinates:e})):t.type===\"MultiPoint\"?t.coordinates.map(e=>({type:\"Point\",coordinates:e})):[t];}var Dl=class ia{constructor(e,r){this.type=k,this.geojson=e,this.geometries=r;}static parse(e,r){if(e.length!==2)return r.error(`'distance' expression requires exactly one argument, but found ${e.length-1} instead.`);if(Kr(e[1])){let i=e[1];if(i.type===\"FeatureCollection\")return new ia(i,i.features.map(n=>ks(n.geometry)).flat());if(i.type===\"Feature\")return new ia(i,ks(i.geometry));if(\"type\"in i&&\"coordinates\"in i)return new ia(i,ks(i));}return r.error(\"'distance' expression requires valid geojson object that contains polygon geometry type.\");}evaluate(e){if(e.geometry()!=null&&e.canonicalID()!=null){if(e.geometryType()===\"Point\")return j0(e,this.geometries);if(e.geometryType()===\"LineString\")return G0(e,this.geometries);if(e.geometryType()===\"Polygon\")return X0(e,this.geometries);}return NaN;}eachChild(){}outputDefined(){return!0;}},Y0=class Kp{constructor(e){let r=null;for(let i of e)if(!r)r=i.type;else{if(r===i.type)continue;r=W;break;}this.type=$t(r??W,e.length),this.arr=e;}static parse(e,r){if(e.length!==2)return r.error(`'semiliteral' expression requires exactly one argument, but found ${e.length-1} instead.`);if(!Kr(e[1]))return r.error(`invalid value of type \"${typeof e[1]}\"`);let i=e[1],n=_t(i);if(n.kind===\"array\"){let a=i,s=r.concat(1),o=[];for(let l=0;l<a.length;l++){let u=s.parse(a[l],l,W);if(!u)return null;o.push(u);}return new Kp(o);}return new Jr(n,i);}evaluate(e){return this.arr.map(r=>r.evaluate(e));}eachChild(e){this.arr.forEach(e);}outputDefined(){return this.arr.every(e=>e.outputDefined());}},_l=class Jp{constructor(e){this.key=e,this.type=W;}static parse(e,r){if(e.length!==2)return r.error(`Expected 1 argument, but found ${e.length-1} instead.`);let i=e[1];return i==null?r.error(\"Global state property must be defined.\"):typeof i==\"string\"?new Jp(i):r.error(`Global state property must be string, but found ${typeof e[1]} instead.`);}evaluate(e){let r=e.globals?.globalState;return!r||Object.keys(r).length===0?null:Ri(r,this.key)??null;}eachChild(){}outputDefined(){return!1;}},qr={\"==\":m0,\"!=\":g0,\">\":v0,\"<\":x0,\">=\":w0,\"<=\":b0,array:Te,at:Q1,boolean:Te,case:i0,coalesce:Op,collator:Np,format:Sp,image:_0,in:t0,\"index-of\":e0,interpolate:xe,\"interpolate-hcl\":xe,\"interpolate-lab\":xe,length:A0,let:Ip,literal:Jr,match:r0,number:Te,\"number-format\":D0,object:Te,semiliteral:Y0,slice:n0,step:yl,string:Te,\"to-boolean\":$r,\"to-color\":$r,\"to-number\":$r,\"to-string\":$r,var:Mp,within:xl,distance:Dl,\"global-state\":_l},ge=class extends Error{constructor(t,e){super(e),this.message=e,this.key=t;}},W0=class Qp{constructor(e,r=[]){this.parent=e,this.bindings={};for(let[i,n]of r)this.bindings[i]=n;}concat(e){return new Qp(this,e);}get(e){if(this.bindings[e])return this.bindings[e];if(this.parent)return this.parent.get(e);throw Error(`${e} not found in scope.`);}has(e){return this.bindings[e]?!0:this.parent?this.parent.has(e):!1;}},tf=class ef{constructor(e,r,i=[],n,a=new W0(),s=[]){this.registry=e,this.path=i,this.key=i.map(o=>`[${o}]`).join(\"\"),this.scope=a,this.errors=s,this.expectedType=n,this._isConstant=r;}parse(e,r,i,n,a={}){return r==null?this._parse(e,a):this.concat(r,i,n)._parse(e,a);}_parse(e,r){(e===null||typeof e==\"string\"||typeof e==\"boolean\"||typeof e==\"number\")&&(e=[\"literal\",e]);let i=this.key;function n(a,s,o){return o===\"assert\"?new Te(s,[a],i):o===\"coerce\"?new $r(s,[a],i):a;}if(Array.isArray(e)){if(e.length===0)return this.error('Expected an array with at least one element. If you wanted a literal array, use [\"literal\", []].');let a=e[0];if(typeof a!=\"string\")return this.error(`Expression name must be a string, but found ${typeof a} instead. If you wanted a literal array, use [\"literal\", [...]].`,0),null;let s=this.registry[a];if(s){let o=s.parse(e,this);if(!o)return null;if(this.expectedType){let l=this.expectedType,u=o.type;if((l.kind===\"string\"||l.kind===\"number\"||l.kind===\"boolean\"||l.kind===\"object\"||l.kind===\"array\")&&u.kind===\"value\")o=n(o,l,r.typeAnnotation||\"assert\");else if(l.kind===\"projectionDefinition\"&&[\"string\",\"array\",\"value\"].includes(u.kind)||[\"color\",\"formatted\",\"resolvedImage\"].includes(l.kind)&&[\"value\",\"string\"].includes(u.kind)||[\"padding\",\"numberArray\"].includes(l.kind)&&[\"value\",\"number\",\"array\"].includes(u.kind)||l.kind===\"colorArray\"&&[\"value\",\"string\",\"array\"].includes(u.kind)||l.kind===\"variableAnchorOffsetCollection\"&&[\"value\",\"array\"].includes(u.kind))o=n(o,l,r.typeAnnotation||\"coerce\");else if(this.checkSubtype(l,u))return null;}if(!(o instanceof Jr)&&o.type.kind!==\"resolvedImage\"&&this._isConstant(o)){let l=new _p();try{o=new Jr(o.type,o.evaluate(l));}catch(u){return this.error(u.message),null;}}return o;}return this.error(`Unknown expression \"${a}\". If you wanted a literal array, use [\"literal\", [...]].`,0);}return e===void 0?this.error(\"'undefined' value invalid. Use null instead.\"):typeof e==\"object\"?this.error('Bare objects invalid. Use [\"literal\", {...}] instead.'):this.error(`Expected an array, but found ${typeof e} instead.`);}concat(e,r,i){let n=typeof e==\"number\"?this.path.concat(e):this.path,a=i?this.scope.concat(i):this.scope;return new ef(this.registry,this._isConstant,n,r||null,a,this.errors);}error(e,...r){let i=`${this.key}${r.map(n=>`[${n}]`).join(\"\")}`;this.errors.push(new ge(i,e));}checkSubtype(e,r){let i=Zi(e,r);return i&&this.error(i),i;}},xr=class Pi{constructor(e,r,i,n,a){this.name=e,this.type=r,this._evaluate=i,this.args=n,this.key=a;}evaluate(e){return this._evaluate(e,this.args,this.key);}eachChild(e){this.args.forEach(e);}outputDefined(){return!1;}static parse(e,r){let i=e[0],n=Pi.definitions[i];if(!n)return r.error(`Unknown expression \"${i}\". If you wanted a literal array, use [\"literal\", [...]].`,0);let a=Array.isArray(n)?n[0]:n.type,s=Array.isArray(n)?[[n[1],n[2]]]:n.overloads,o=s.filter(([u])=>!Array.isArray(u)||u.length===e.length-1),l=null;for(let[u,h]of o){l=new tf(r.registry,fa,r.path,null,r.scope);let c=[],p=!1;for(let f=1;f<e.length;f++){let d=e[f],y=Array.isArray(u)?u[f-1]:u.type,m=l.parse(d,1+c.length,y);if(!m){p=!0;break;}c.push(m);}if(!p){if(Array.isArray(u)&&u.length!==c.length){l.error(`Expected ${u.length} arguments, but found ${c.length} instead.`);continue;}for(let f=0;f<c.length;f++){let d=Array.isArray(u)?u[f]:u.type,y=c[f];l.concat(f+1).checkSubtype(d,y.type);}if(l.errors.length===0)return new Pi(i,a,h,c,r.key);}}if(o.length===1)r.errors.push(...l.errors);else{let u=(o.length?o:s).map(([c])=>H0(c)).join(\" | \"),h=[];for(let c=1;c<e.length;c++){let p=r.parse(e[c],1+h.length);if(!p)return null;h.push(yt(p.type));}r.error(`Expected arguments of type ${u}, but found (${h.join(\", \")}) instead.`);}return null;}static register(e,r){Pi.definitions=r;for(let i in r)e[i]=Pi;}};function Dh(t,[e,r,i,n],a){e=e.evaluate(t),r=r.evaluate(t),i=i.evaluate(t);let s=n?n.evaluate(t):1,o=wp(e,r,i,s);if(o)throw new ct(o,a);return new gt(e/255,r/255,i/255,s,!1);}function _h(t,e){return t in e&&e[t]!==void 0;}function Is(t,e){let r=e[t];return r===void 0?null:r;}function Z0(t,e,r,i){for(;r<=i;){let n=r+i>>1;if(e[n]===t)return!0;e[n]>t?i=n-1:r=n+1;}return!1;}function rr(t){return{type:t};}xr.register(qr,{error:[z1,[X],(t,[e],r)=>{throw new ct(e.evaluate(t),r);}],typeof:[X,[W],(t,[e])=>yt(_t(e.evaluate(t)))],\"to-rgba\":[$t(k,4),[le],(t,[e])=>{let[r,i,n,a]=e.evaluate(t).rgb;return[r*255,i*255,n*255,a];}],rgb:[le,[k,k,k],Dh],rgba:[le,[k,k,k,k],Dh],has:{type:Q,overloads:[[[X],(t,[e])=>_h(e.evaluate(t),t.properties())],[[X,ur],(t,[e,r])=>_h(e.evaluate(t),r.evaluate(t))]]},get:{type:W,overloads:[[[X],(t,[e])=>Is(e.evaluate(t),t.properties())],[[X,ur],(t,[e,r])=>Is(e.evaluate(t),r.evaluate(t))]]},\"feature-state\":[W,[X],(t,[e])=>Is(e.evaluate(t),t.featureState||{})],properties:[ur,[],t=>t.properties()],\"geometry-type\":[X,[],t=>t.geometryType()],id:[W,[],t=>t.id()],zoom:[k,[],t=>t.globals.zoom],\"heatmap-density\":[k,[],t=>t.globals.heatmapDensity||0],elevation:[k,[],t=>t.globals.elevation||0],\"line-progress\":[k,[],t=>t.globals.lineProgress||0],accumulated:[W,[],t=>t.globals.accumulated===void 0?null:t.globals.accumulated],\"+\":[k,rr(k),(t,e)=>{let r=0;for(let i of e)r+=i.evaluate(t);return r;}],\"*\":[k,rr(k),(t,e)=>{let r=1;for(let i of e)r*=i.evaluate(t);return r;}],\"-\":{type:k,overloads:[[[k,k],(t,[e,r])=>e.evaluate(t)-r.evaluate(t)],[[k],(t,[e])=>-e.evaluate(t)]]},\"/\":[k,[k,k],(t,[e,r])=>e.evaluate(t)/r.evaluate(t)],\"%\":[k,[k,k],(t,[e,r])=>e.evaluate(t)%r.evaluate(t)],ln2:[k,[],()=>Math.LN2],pi:[k,[],()=>Math.PI],e:[k,[],()=>Math.E],\"^\":[k,[k,k],(t,[e,r])=>e.evaluate(t)**+r.evaluate(t)],sqrt:[k,[k],(t,[e])=>Math.sqrt(e.evaluate(t))],log10:[k,[k],(t,[e])=>Math.log(e.evaluate(t))/Math.LN10],ln:[k,[k],(t,[e])=>Math.log(e.evaluate(t))],log2:[k,[k],(t,[e])=>Math.log(e.evaluate(t))/Math.LN2],sin:[k,[k],(t,[e])=>Math.sin(e.evaluate(t))],cos:[k,[k],(t,[e])=>Math.cos(e.evaluate(t))],tan:[k,[k],(t,[e])=>Math.tan(e.evaluate(t))],asin:[k,[k],(t,[e])=>Math.asin(e.evaluate(t))],acos:[k,[k],(t,[e])=>Math.acos(e.evaluate(t))],atan:[k,[k],(t,[e])=>Math.atan(e.evaluate(t))],min:[k,rr(k),(t,e)=>Math.min(...e.map(r=>r.evaluate(t)))],max:[k,rr(k),(t,e)=>Math.max(...e.map(r=>r.evaluate(t)))],abs:[k,[k],(t,[e])=>Math.abs(e.evaluate(t))],round:[k,[k],(t,[e])=>{let r=e.evaluate(t);return r<0?-Math.round(-r):Math.round(r);}],floor:[k,[k],(t,[e])=>Math.floor(e.evaluate(t))],ceil:[k,[k],(t,[e])=>Math.ceil(e.evaluate(t))],\"filter-==\":[Q,[X,W],(t,[e,r])=>t.properties()[e.value]===r.value],\"filter-id-==\":[Q,[W],(t,[e])=>t.id()===e.value],\"filter-type-==\":[Q,[X],(t,[e])=>t.geometryType()===e.value],\"filter-<\":[Q,[X,W],(t,[e,r])=>{let i=t.properties()[e.value],n=r.value;return typeof i==typeof n&&i<n;}],\"filter-id-<\":[Q,[W],(t,[e])=>{let r=t.id(),i=e.value;return typeof r==typeof i&&r<i;}],\"filter->\":[Q,[X,W],(t,[e,r])=>{let i=t.properties()[e.value],n=r.value;return typeof i==typeof n&&i>n;}],\"filter-id->\":[Q,[W],(t,[e])=>{let r=t.id(),i=e.value;return typeof r==typeof i&&r>i;}],\"filter-<=\":[Q,[X,W],(t,[e,r])=>{let i=t.properties()[e.value],n=r.value;return typeof i==typeof n&&i<=n;}],\"filter-id-<=\":[Q,[W],(t,[e])=>{let r=t.id(),i=e.value;return typeof r==typeof i&&r<=i;}],\"filter->=\":[Q,[X,W],(t,[e,r])=>{let i=t.properties()[e.value],n=r.value;return typeof i==typeof n&&i>=n;}],\"filter-id->=\":[Q,[W],(t,[e])=>{let r=t.id(),i=e.value;return typeof r==typeof i&&r>=i;}],\"filter-has\":[Q,[W],(t,[e])=>{let r=e.value,i=t.properties();return r in i&&i[r]!==void 0;}],\"filter-has-id\":[Q,[],t=>t.id()!==null&&t.id()!==void 0],\"filter-type-in\":[Q,[$t(X)],(t,[e])=>e.value.indexOf(t.geometryType())>=0],\"filter-id-in\":[Q,[$t(W)],(t,[e])=>e.value.indexOf(t.id())>=0],\"filter-in-small\":[Q,[X,$t(W)],(t,[e,r])=>r.value.indexOf(t.properties()[e.value])>=0],\"filter-in-large\":[Q,[X,$t(W)],(t,[e,r])=>Z0(t.properties()[e.value],r.value,0,r.value.length-1)],all:{type:Q,overloads:[[[Q,Q],(t,[e,r])=>e.evaluate(t)&&r.evaluate(t)],[rr(Q),(t,e)=>{for(let r of e)if(!r.evaluate(t))return!1;return!0;}]]},any:{type:Q,overloads:[[[Q,Q],(t,[e,r])=>e.evaluate(t)||r.evaluate(t)],[rr(Q),(t,e)=>{for(let r of e)if(r.evaluate(t))return!0;return!1;}]]},\"!\":[Q,[Q],(t,[e])=>!e.evaluate(t)],\"is-supported-script\":[Q,[X],(t,[e])=>{let r=t.globals&&t.globals.isSupportedScript;return!r||r(e.evaluate(t));}],upcase:[X,[X],(t,[e])=>e.evaluate(t).toUpperCase()],downcase:[X,[X],(t,[e])=>e.evaluate(t).toLowerCase()],concat:[X,rr(W),(t,e)=>e.map(r=>$i(r.evaluate(t))).join(\"\")],split:[$t(X),[X,X],(t,[e,r])=>e.evaluate(t).split(r.evaluate(t))],join:[X,[$t(X),X],(t,[e,r])=>e.evaluate(t).join(r.evaluate(t))],\"resolved-locale\":[X,[Fa],(t,[e])=>e.evaluate(t).resolvedLocale()]});function H0(t){return Array.isArray(t)?`(${t.map(yt).join(\", \")})`:`(${yt(t.type)}...)`;}function fa(t){if(t instanceof Mp)return fa(t.boundExpression);if(t instanceof xr&&t.name===\"error\"||t instanceof Np||t instanceof xl||t instanceof Dl||t instanceof _l)return!1;let e=t instanceof $r||t instanceof Te,r=!0;return t.eachChild(i=>{r&&=e?fa(i):i instanceof Jr;}),r?Pa(t)&&za(t,[\"zoom\",\"heatmap-density\",\"elevation\",\"line-progress\",\"accumulated\",\"is-supported-script\"]):!1;}function Pa(t){if(t instanceof xr&&(t.name===\"get\"&&t.args.length===1||t.name===\"feature-state\"||t.name===\"has\"&&t.args.length===1||t.name===\"properties\"||t.name===\"geometry-type\"||t.name===\"id\"||/^filter-/.test(t.name))||t instanceof xl||t instanceof Dl)return!1;let e=!0;return t.eachChild(r=>{e&&!Pa(r)&&(e=!1);}),e;}function Ki(t){if(t instanceof xr&&t.name===\"feature-state\")return!1;let e=!0;return t.eachChild(r=>{e&&!Ki(r)&&(e=!1);}),e;}function za(t,e){if(t instanceof xr&&e.indexOf(t.name)>=0)return!1;let r=!0;return t.eachChild(i=>{r&&!za(i,e)&&(r=!1);}),r;}function Qr(t){return t[\"property-type\"]===\"data-driven\"||t[\"property-type\"]===\"cross-faded-data-driven\";}function rf(t){return!!t.expression&&t.expression.parameters.indexOf(\"zoom\")>-1;}function Al(t){return!!t.expression&&t.expression.interpolated;}var Sl=/^(.*)-transition$/;function Ji(t,...e){for(let r of e)for(let i in r)t[i]=r[i];return t;}function K(t){return t instanceof Number?\"number\":t instanceof String?\"string\":t instanceof Boolean?\"boolean\":Array.isArray(t)?\"array\":t===null?\"null\":typeof t;}function La(t){return typeof t==\"object\"&&!!t&&!Array.isArray(t)&&_t(t)===ur;}function K0(t){return t;}function J0(t){switch(t.type){case\"color\":return gt.parse;case\"padding\":return De.parse;case\"numberArray\":return _e.parse;case\"colorArray\":return ne.parse;default:return null;}}function Q0(t){switch(t){case\"exponential\":return af;case\"interval\":return em;case\"categorical\":return tm;case\"identity\":return rm;default:throw Error(`Unknown function type \"${t}\"`);}}function nf(t,e){let r=t.stops&&typeof t.stops[0][0]==\"object\",i=r||t.property!==void 0,n=r||!i,a=t.type||(Al(e)?\"exponential\":\"interval\"),s=J0(e);if(s&&(t=Ji({},t),t.stops&&(t.stops=t.stops.map(h=>[h[0],s(h[1])])),t.default?t.default=s(t.default):t.default=s(e.default)),t.colorSpace&&!G1(t.colorSpace))throw Error(`Unknown color space: \"${t.colorSpace}\"`);let o=Q0(a),l,u;if(a===\"categorical\"){l=Object.create(null);for(let h of t.stops)l[h[0]]=h[1];u=typeof t.stops[0][0];}if(r){let h={},c=[];for(let d=0;d<t.stops.length;d++){let y=t.stops[d],m=y[0].zoom;h[m]===void 0&&(h[m]={zoom:m,type:t.type,property:t.property,default:t.default,stops:[]},c.push(m)),h[m].stops.push([y[0].value,y[1]]);}let p=[];for(let d of c)p.push([h[d].zoom,nf(h[d],e)]);let f={name:\"linear\"};return{kind:\"composite\",interpolationType:f,interpolationFactor:xe.interpolationFactor.bind(void 0,f),zoomStops:p.map(d=>d[0]),evaluate({zoom:d},y){return af({stops:p,base:t.base},e,d).evaluate(d,y);}};}if(n){let h=a===\"exponential\"?{name:\"exponential\",base:t.base===void 0?1:t.base}:null;return{kind:\"camera\",interpolationType:h,interpolationFactor:xe.interpolationFactor.bind(void 0,h),zoomStops:t.stops.map(c=>c[0]),evaluate:({zoom:c})=>o(t,e,c,l,u)};}return{kind:\"source\",evaluate(h,c){let p=c&&c.properties?c.properties[t.property]:void 0;return p===void 0?fn(t.default,e.default):o(t,e,p,l,u);}};}function fn(t,e,r){if(t!==void 0)return t;if(e!==void 0)return e;if(r!==void 0)return r;}function tm(t,e,r,i,n){return fn(typeof r===n?i[r]:void 0,t.default,e.default);}function em(t,e,r){if(K(r)!==\"number\")return fn(t.default,e.default);let i=t.stops.length;if(i===1||r<=t.stops[0][0])return t.stops[0][1];if(r>=t.stops[i-1][0])return t.stops[i-1][1];let n=Ca(t.stops.map(a=>a[0]),r,\"\");return t.stops[n][1];}function af(t,e,r){let i=t.base===void 0?1:t.base;if(K(r)!==\"number\")return fn(t.default,e.default);let n=t.stops.length;if(n===1||r<=t.stops[0][0])return t.stops[0][1];if(r>=t.stops[n-1][0])return t.stops[n-1][1];let a=Ca(t.stops.map(h=>h[0]),r,\"\"),s=im(r,i,t.stops[a][0],t.stops[a+1][0]),o=t.stops[a][1],l=t.stops[a+1][1],u=pr[e.type]||K0;return typeof o.evaluate==\"function\"?{evaluate(...h){let c=o.evaluate.apply(void 0,h),p=l.evaluate.apply(void 0,h);if(c!==void 0&&p!==void 0)return u(c,p,s,t.colorSpace);}}:u(o,l,s,t.colorSpace);}function rm(t,e,r){switch(e.type){case\"color\":r=gt.parse(r);break;case\"formatted\":r=Me.fromString(r.toString());break;case\"resolvedImage\":r=we.fromString(r.toString());break;case\"padding\":r=De.parse(r);break;case\"colorArray\":r=ne.parse(r);break;case\"numberArray\":r=_e.parse(r);break;default:K(r)!==e.type&&(e.type!==\"enum\"||!e.values[r])&&(r=void 0);}return fn(r,t.default,e.default);}function im(t,e,r,i){let n=i-r,a=t-r;return n===0?0:e===1?a/n:(e**+a-1)/(e**+n-1);}function ro(t){return{result:\"success\",value:t};}function Vr(t){return{result:\"error\",value:t};}var El=class{constructor(t,e,r,i){this.expression=t,this._warningHistory={},this._evaluator=new _p(),this._defaultValue=r?cf(r):null,this._enumValues=r&&r.type===\"enum\"?r.values:null,this._globalState=i,this._rootKey=e;}evaluateWithoutErrorHandling(t,e,r,i,n,a){return this._globalState&&(t=ti(t,this._globalState)),this._evaluator.globals=t,this._evaluator.feature=e,this._evaluator.featureState=r,this._evaluator.canonical=i,this._evaluator.availableImages=n||null,this._evaluator.formattedSection=a,this.expression.evaluate(this._evaluator);}evaluate(t,e,r,i,n,a){this._globalState&&(t=ti(t,this._globalState)),this._evaluator.globals=t,this._evaluator.feature=e||null,this._evaluator.featureState=r||null,this._evaluator.canonical=i,this._evaluator.availableImages=n||null,this._evaluator.formattedSection=a||null;try{let s=this.expression.evaluate(this._evaluator);if(s==null||typeof s==\"number\"&&s!==s)return this._defaultValue;if(this._enumValues&&!(s in this._enumValues))throw new ct(`Expected value to be one of ${Object.keys(this._enumValues).map(o=>JSON.stringify(o)).join(\", \")}, but found ${JSON.stringify(s)} instead.`,\"\");return s;}catch(s){let o=s instanceof ct?s.path:\"\",l=`${o}|${s.message}`;return this._warningHistory[l]||(this._warningHistory[l]=!0,typeof console<\"u\"&&console.warn(sf(this._rootKey,o,s.message,this._defaultValue))),this._defaultValue;}}};function sf(t,e,r,i){return`${t}${e}: ${r}${i==null?\"\":` Falling back to ${String(i)}.`}`;}function of(t){if(!t)throw Error('rootKey must identify the location of the expression in the style JSON, e.g. \"layers[3].paint.line-width\".');}function Va(t){return Array.isArray(t)&&t.length>0&&typeof t[0]==\"string\"&&t[0]in qr;}function Ke(t,e,r,i){of(e);let n=new tf(qr,fa,[],r?sm(r):void 0),a=n.parse(t,void 0,void 0,void 0,r&&r.type===\"string\"?{typeAnnotation:\"coerce\"}:void 0);return a?ro(new El(a,e,r,i)):Vr(n.errors);}var Qi=class{constructor(t,e,r){this.kind=t,this._styleExpression=e,this.isStateDependent=t!==\"constant\"&&!Ki(e.expression),this.globalStateRefs=dn(e.expression),this._globalState=r;}evaluateWithoutErrorHandling(t,e,r,i,n,a){return this._globalState&&(t=ti(t,this._globalState)),this._styleExpression.evaluateWithoutErrorHandling(t,e,r,i,n,a);}evaluate(t,e,r,i,n,a){return this._globalState&&(t=ti(t,this._globalState)),this._styleExpression.evaluate(t,e,r,i,n,a);}},da=class{constructor(t,e,r,i,n){this.kind=t,this.zoomStops=r,this._styleExpression=e,this.isStateDependent=t!==\"camera\"&&!Ki(e.expression),this.globalStateRefs=dn(e.expression),this.interpolationType=i,this._globalState=n;}evaluateWithoutErrorHandling(t,e,r,i,n,a){return this._globalState&&(t=ti(t,this._globalState)),this._styleExpression.evaluateWithoutErrorHandling(t,e,r,i,n,a);}evaluate(t,e,r,i,n,a){return this._globalState&&(t=ti(t,this._globalState)),this._styleExpression.evaluate(t,e,r,i,n,a);}interpolationFactor(t,e,r){return this.interpolationType?xe.interpolationFactor(this.interpolationType,t,e,r):0;}};function nm(t){return t._styleExpression!==void 0;}function lf(t,e,r,i){let n=Ke(t,e,r,i);if(n.result===\"error\")return n;let a=n.value.expression,s=Pa(a);if(!s&&!Qr(r))return Vr([new ge(\"\",\"data expressions not supported\")]);let o=za(a,[\"zoom\"]);if(!o&&!rf(r))return Vr([new ge(\"\",\"zoom expressions not supported\")]);let l=na(a);if(!l&&!o)return Vr([new ge(\"\",'\"zoom\" expression may only be used as input to a top-level \"step\" or \"interpolate\" expression.')]);if(l instanceof ge)return Vr([l]);if(l instanceof xe&&!Al(r))return Vr([new ge(\"\",'\"interpolate\" expressions cannot be used with this property')]);if(!l)return ro(s?new Qi(\"constant\",n.value,i):new Qi(\"source\",n.value,i));let u=l instanceof xe?l.interpolation:void 0;return ro(s?new da(\"camera\",n.value,l.labels,u,i):new da(\"composite\",n.value,l.labels,u,i));}var uf=class hf{constructor(e,r,i){this.isStateDependent=!1,this.globalStateRefs=new Set(),this._globalState=null,of(r),this._parameters=e,this._specification=i,this._rootKey=r,this._defaultValue=cf(i),this._warningHistory={};let n=nf(this._parameters,this._specification);this.kind=n.kind,this.interpolationFactor=n.interpolationFactor,this.zoomStops=n.zoomStops,this.interpolationType=n.interpolationType,this._innerEvaluate=n.evaluate;}evaluate(e,r){try{return this._innerEvaluate(e,r);}catch(i){let n=i instanceof Error?i.message:String(i),a=`|${n}`;return this._warningHistory[a]||(this._warningHistory[a]=!0,typeof console<\"u\"&&console.warn(sf(this._rootKey,\"\",n,this._defaultValue))),this._defaultValue;}}static deserialize(e){return new hf(e._parameters,e._rootKey,e._specification);}static serialize(e){return{_parameters:e._parameters,_specification:e._specification,_rootKey:e._rootKey};}};function am(t,e,r,i){if(La(t))return new uf(t,e,r);if(Va(t)){let n=lf(t,e,r,i);if(n.result===\"error\")throw Error(n.value.map(a=>`${a.key}: ${a.message}`).join(\", \"));return n.value;}{let n=t;return r.type===\"color\"&&typeof t==\"string\"?n=gt.parse(t):r.type===\"padding\"&&(typeof t==\"number\"||Array.isArray(t))?n=De.parse(t):r.type===\"numberArray\"&&(typeof t==\"number\"||Array.isArray(t))?n=_e.parse(t):r.type===\"colorArray\"&&(typeof t==\"string\"||Array.isArray(t))?n=ne.parse(t):r.type===\"variableAnchorOffsetCollection\"&&Array.isArray(t)?n=be.parse(t):r.type===\"projectionDefinition\"&&typeof t==\"string\"&&(n=gr.parse(t)),{globalStateRefs:new Set(),_globalState:null,kind:\"constant\",evaluate:()=>n};}}function na(t){let e=null;if(t instanceof Ip)e=na(t.result);else if(t instanceof Op){for(let r of t.args)if(e=na(r),e)break;}else(t instanceof yl||t instanceof xe)&&t.input instanceof xr&&t.input.name===\"zoom\"&&(e=t);return e instanceof ge||t.eachChild(r=>{let i=na(r);i instanceof ge?e=i:!e&&i?e=new ge(\"\",'\"zoom\" expression may only be used as input to a top-level \"step\" or \"interpolate\" expression.'):e&&i&&e!==i&&(e=new ge(\"\",'Only one zoom-based \"step\" or \"interpolate\" subexpression may be used in an expression.'));}),e;}function dn(t,e=new Set()){return t instanceof _l&&e.add(t.key),t.eachChild(r=>{dn(r,e);}),e;}function sm(t){let e={color:le,string:X,number:k,enum:X,boolean:Q,formatted:hn,padding:Ta,numberArray:ka,colorArray:Wi,projectionDefinition:Ea,resolvedImage:cn,variableAnchorOffsetCollection:Ia};return t.type===\"array\"?$t(e[t.value]||W,t.length):e[t.type];}function cf(t){if(t.type===\"color\"&&La(t.default))return new gt(0,0,0,0);switch(t.type){case\"color\":return gt.parse(t.default)||null;case\"padding\":return De.parse(t.default)||null;case\"numberArray\":return _e.parse(t.default)||null;case\"colorArray\":return ne.parse(t.default)||null;case\"variableAnchorOffsetCollection\":return be.parse(t.default)||null;case\"projectionDefinition\":return gr.parse(t.default)||null;default:return t.default===void 0?null:t.default;}}function ti(t,e){let{zoom:r,heatmapDensity:i,elevation:n,lineProgress:a,isSupportedScript:s,accumulated:o}=t??{};return{zoom:r,heatmapDensity:i,elevation:n,lineProgress:a,isSupportedScript:s,accumulated:o,globalState:e};}function om(t){let e=!1;for(let r of t){let i=pf(r);if(i===\"expression\")return\"expression\";i===\"legacy\"&&(e=!0);}return e?\"legacy\":\"neutral\";}function pf(t){if(typeof t==\"boolean\")return\"neutral\";if(!Array.isArray(t)||t.length===0)return\"legacy\";switch(t[0]){case\"has\":return t.length<2||t[1]===\"$id\"||t[1]===\"$type\"?\"legacy\":t.length===2?\"neutral\":\"expression\";case\"in\":return t.length>=3&&(typeof t[1]!=\"string\"||Array.isArray(t[2]))?\"expression\":\"legacy\";case\"!in\":case\"!has\":return\"legacy\";case\"==\":case\"!=\":case\">\":case\">=\":case\"<\":case\"<=\":return t.length!==3||Array.isArray(t[1])||Array.isArray(t[2])?\"expression\":\"legacy\";case\"none\":return\"legacy\";case\"any\":case\"all\":return om(t.slice(1));default:return\"expression\";}}function Fl(t){return pf(t)!==\"legacy\";}function Ah(t){return t===\"$type\"?[\"geometry-type\"]:t===\"$id\"?[\"id\"]:[\"get\",t];}function lm(t){switch(t[0]){case\"==\":case\"!=\":case\"<\":case\"<=\":case\">\":case\">=\":return t.length!==3||typeof t[1]!=\"string\"?null:[t[0],Ah(t[1]),t[2]];case\"in\":case\"!in\":{if(t.length<2||typeof t[1]!=\"string\")return null;let e=[\"in\",Ah(t[1]),[\"literal\",t.slice(2)]];return t[0]===\"!in\"?[\"!\",e]:e;}case\"has\":case\"!has\":{if(t.length!==2||typeof t[1]!=\"string\"||t[1]===\"$type\"||t[1]===\"$id\")return null;let e=[\"has\",t[1]];return t[0]===\"!has\"?[\"!\",e]:e;}default:return null;}}function ff(t){if((t[0]===\"<\"||t[0]===\"<=\"||t[0]===\">\"||t[0]===\">=\")&&t[1]===\"$type\")return`\"$type\" cannot be use with operator \"${t[0]}\"`;let e=lm(t);return e?`Mixing deprecated filter syntax with expression syntax is not supported. Replace ${JSON.stringify(t)} with ${JSON.stringify(e)}.`:`Mixing deprecated filter syntax with expression syntax is not supported. Convert ${JSON.stringify(t)} to expression syntax.`;}function Cs(t,e,r){let i=r[t];return Array.isArray(i)?Fl(i)?Tl(i,e.concat(t)):{path:e.concat(t),legacyFilter:i}:null;}function Tl(t,e=[]){if(!Array.isArray(t)||t.length<1)return null;switch(t[0]){case\"all\":case\"any\":case\"none\":for(let r=1;r<t.length;r++){let i=Cs(r,e,t);if(i)return i;}break;case\"!\":{let r=Cs(1,e,t);if(r)return r;break;}case\"case\":for(let r=1;r<t.length-1;r+=2){let i=Cs(r,e,t);if(i)return i;}}return null;}function um(t,e){let r=Tl(t);if(!r||typeof console>\"u\")return;let i=r.path.map(n=>`[${n}]`).join(\"\");console.warn(`${e}${i}: ${ff(r.legacyFilter)}`);}var hm={type:\"boolean\",default:!1,transition:!1,\"property-type\":\"data-driven\",expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]}};function ei(t,e,r){if(t==null)return{filter:()=>!0,needGeometry:!1,getGlobalStateRefs:()=>new Set()};Fl(t)?um(t,e):t=ya(t);let i=Ke(t,e,hm,r);if(i.result===\"error\")throw Error(i.value.map(n=>`${n.key}: ${n.message}`).join(\", \"));return{filter:(n,a,s)=>i.value.evaluate(n,a,{},s),needGeometry:df(t),getGlobalStateRefs:()=>dn(i.value.expression)};}function cm(t,e){return t<e?-1:+(t>e);}function df(t){if(!Array.isArray(t))return!1;if(t[0]===\"within\"||t[0]===\"distance\")return!0;for(let e=1;e<t.length;e++)if(df(t[e]))return!0;return!1;}function ya(t){if(!t)return!0;let e=t[0];return t.length<=1?e!==\"any\":e===\"==\"?Ms(t[1],t[2],\"==\"):e===\"!=\"?$n(Ms(t[1],t[2],\"==\")):e===\"<\"||e===\">\"||e===\"<=\"||e===\">=\"?Ms(t[1],t[2],e):e===\"any\"?pm(t.slice(1)):e===\"all\"?[\"all\"].concat(t.slice(1).map(ya)):e===\"none\"?[\"all\"].concat(t.slice(1).map(ya).map($n)):e===\"in\"?Sh(t[1],t.slice(2)):e===\"!in\"?$n(Sh(t[1],t.slice(2))):e===\"has\"?Eh(t[1]):e!==\"!has\"||$n(Eh(t[1]));}function Ms(t,e,r){switch(t){case\"$type\":return[`filter-type-${r}`,e];case\"$id\":return[`filter-id-${r}`,e];default:return[`filter-${r}`,t,e];}}function pm(t){return[\"any\"].concat(t.map(ya));}function Sh(t,e){if(e.length===0)return!1;switch(t){case\"$type\":return[\"filter-type-in\",[\"literal\",e]];case\"$id\":return[\"filter-id-in\",[\"literal\",e]];default:return e.length>200&&!e.some(r=>typeof r!=typeof e[0])?[\"filter-in-large\",t,[\"literal\",e.sort(cm)]]:[\"filter-in-small\",t,[\"literal\",e]];}}function Eh(t){switch(t){case\"$type\":return!0;case\"$id\":return[\"filter-has-id\"];default:return[\"filter-has\",t];}}function $n(t){return[\"!\",t];}function yf(t){let e=t.key,r=t.value;return r?[new T(e,r,\"constants have been deprecated as of v8\")]:[];}function Dt(t){return t instanceof Number||t instanceof String||t instanceof Boolean?t.valueOf():t;}function fr(t){if(Array.isArray(t))return t.map(fr);if(t instanceof Object&&!(t instanceof Number||t instanceof String||t instanceof Boolean)){let e={};for(let r in t)e[r]=fr(t[r]);return e;}return Dt(t);}function Kt(t){let e=t.key,r=t.value,i=t.valueSpec||{},n=t.objectElementValidators||{},a=t.style,s=t.styleSpec,o=t.validateSpec,l=[],u=K(r);if(u!==\"object\")return[new T(e,r,`object expected, ${u} found`)];for(let h in r){let c=h.split(\".\")[0],p=Ri(i,c)||i[\"*\"],f;if(Ri(n,c))f=n[c];else if(Ri(i,c)){if(r[h]===void 0)continue;f=o;}else if(n[\"*\"])f=n[\"*\"];else if(i[\"*\"])f=o;else{l.push(new T(e,r[h],`unknown property \"${h}\"`));continue;}l=l.concat(f({key:(e&&`${e}.`)+h,value:r[h],valueSpec:p,style:a,styleSpec:s,object:r,objectKey:h,validateSpec:o},r));}for(let h in i)n[h]||i[h].required&&i[h].default===void 0&&r[h]===void 0&&l.push(new T(e,r,`missing required property \"${h}\"`));return l;}function kl(t){let e=t.value,r=t.valueSpec,i=t.validateSpec,n=t.style,a=t.styleSpec,s=t.key,o=t.arrayElementValidator||i;if(K(e)!==\"array\")return[new T(s,e,`array expected, ${K(e)} found`)];if(r.length&&e.length!==r.length)return[new T(s,e,`array length ${r.length} expected, length ${e.length} found`)];let l={type:r.value,values:r.values};a.$version<7&&(l.function=r.function),K(r.value)===\"object\"&&(l=r.value);let u=[];for(let h=0;h<e.length;h++)u=u.concat(o({array:e,arrayIndex:h,value:e[h],valueSpec:l,validateSpec:t.validateSpec,style:n,styleSpec:a,key:`${s}[${h}]`}));return u;}function Oa(t){let e=t.key,r=t.value,i=t.valueSpec,n=K(r);return n===\"number\"&&r!==r&&(n=\"NaN\"),n===\"number\"?\"minimum\"in i&&r<i.minimum?[new T(e,r,`${r} is less than the minimum value ${i.minimum}`)]:\"maximum\"in i&&r>i.maximum?[new T(e,r,`${r} is greater than the maximum value ${i.maximum}`)]:[]:[new T(e,r,`number expected, ${n} found`)];}function mf(t){let e=t.valueSpec,r=Dt(t.value.type),i,n={},a,s,o=r!==\"categorical\"&&t.value.property===void 0,l=!o,u=K(t.value.stops)===\"array\"&&K(t.value.stops[0])===\"array\"&&K(t.value.stops[0][0])===\"object\",h=Kt({key:t.key,value:t.value,valueSpec:t.styleSpec.function,validateSpec:t.validateSpec,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{stops:c,default:d}});return r===\"identity\"&&o&&h.push(new T(t.key,t.value,'missing required property \"property\"')),r!==\"identity\"&&!t.value.stops&&h.push(new T(t.key,t.value,'missing required property \"stops\"')),r===\"exponential\"&&t.valueSpec.expression&&!Al(t.valueSpec)&&h.push(new T(t.key,t.value,\"exponential functions not supported\")),t.styleSpec.$version>=8&&(l&&!Qr(t.valueSpec)?h.push(new T(t.key,t.value,\"property functions not supported\")):o&&!rf(t.valueSpec)&&h.push(new T(t.key,t.value,\"zoom functions not supported\"))),(r===\"categorical\"||u)&&t.value.property===void 0&&h.push(new T(t.key,t.value,'\"property\" property is required')),h;function c(y){if(r===\"identity\")return[new T(y.key,y.value,'identity function may not have a \"stops\" property')];let m=[],g=y.value;return m=m.concat(kl({key:y.key,value:g,valueSpec:y.valueSpec,validateSpec:y.validateSpec,style:y.style,styleSpec:y.styleSpec,arrayElementValidator:p})),K(g)===\"array\"&&g.length===0&&m.push(new T(y.key,g,\"array must have at least one stop\")),m;}function p(y){let m=[],g=y.value,x=y.key;if(K(g)!==\"array\")return[new T(x,g,`array expected, ${K(g)} found`)];if(g.length!==2)return[new T(x,g,`array length 2 expected, length ${g.length} found`)];if(u){if(K(g[0])!==\"object\")return[new T(x,g,`object expected, ${K(g[0])} found`)];if(g[0].zoom===void 0)return[new T(x,g,\"object stop key must have zoom\")];if(g[0].value===void 0)return[new T(x,g,\"object stop key must have value\")];if(s&&s>Dt(g[0].zoom))return[new T(x,g[0].zoom,\"stop zoom values must appear in ascending order\")];Dt(g[0].zoom)!==s&&(s=Dt(g[0].zoom),a=void 0,n={}),m=m.concat(Kt({key:`${x}[0]`,value:g[0],valueSpec:{zoom:{}},validateSpec:y.validateSpec,style:y.style,styleSpec:y.styleSpec,objectElementValidators:{zoom:Oa,value:f}}));}else m=m.concat(f({key:`${x}[0]`,value:g[0],valueSpec:{},validateSpec:y.validateSpec,style:y.style,styleSpec:y.styleSpec},g));return Va(fr(g[1]))?m.concat([new T(`${x}[1]`,g[1],\"expressions are not allowed in function stops.\")]):m.concat(y.validateSpec({key:`${x}[1]`,value:g[1],valueSpec:e,validateSpec:y.validateSpec,style:y.style,styleSpec:y.styleSpec}));}function f(y,m){let g=K(y.value),x=Dt(y.value),b=y.value===null?m:y.value;if(!i)i=g;else if(g!==i)return[new T(y.key,b,`${g} stop domain type must match previous stop domain type ${i}`)];if(g!==\"number\"&&g!==\"string\"&&g!==\"boolean\")return[new T(y.key,b,\"stop domain value must be a number, string, or boolean\")];if(g!==\"number\"&&r!==\"categorical\"){let v=`number expected, ${g} found`;return Qr(e)&&r===void 0&&(v+='\\nIf you intended to use a categorical function, specify `\"type\": \"categorical\"`.'),[new T(y.key,b,v)];}return r===\"categorical\"&&g===\"number\"&&(!isFinite(x)||Math.floor(x)!==x)?[new T(y.key,b,`integer expected, found ${x}`)]:r!==\"categorical\"&&g===\"number\"&&a!==void 0&&x<a?[new T(y.key,b,\"stop domain values must appear in ascending order\")]:(a=x,r===\"categorical\"&&x in n?[new T(y.key,b,\"stop domain values must be unique\")]:(n[x]=!0,[]));}function d(y){return y.validateSpec({key:y.key,value:y.value,valueSpec:e,validateSpec:y.validateSpec,style:y.style,styleSpec:y.styleSpec});}}function ri(t){let e=(t.expressionContext===\"property\"?lf:Ke)(fr(t.value),t.key,t.valueSpec);if(e.result===\"error\")return e.value.map(i=>new T(`${t.key}${i.key}`,t.value,i.message));let r=e.value.expression||e.value._styleExpression.expression;if(t.expressionContext===\"property\"&&t.propertyKey===\"text-font\"&&!r.outputDefined())return[new T(t.key,t.value,`Invalid data expression for \"${t.propertyKey}\". Output values must be contained as literals within the expression.`)];if(t.expressionContext===\"property\"&&t.propertyType===\"layout\"&&!Ki(r))return[new T(t.key,t.value,'\"feature-state\" data expressions are not supported with layout properties.')];if(t.expressionContext===\"filter\"&&!Ki(r))return[new T(t.key,t.value,'\"feature-state\" data expressions are not supported with filters.')];if(t.expressionContext&&t.expressionContext.indexOf(\"cluster\")===0){if(!za(r,[\"zoom\",\"feature-state\"]))return[new T(t.key,t.value,'\"zoom\" and \"feature-state\" expressions are not supported with cluster properties.')];if(t.expressionContext===\"cluster-initial\"&&!Pa(r))return[new T(t.key,t.value,\"Feature data expressions are not supported with initial expression part of cluster properties.\")];}return[];}function fm(t){let e=t.value,r=t.key,i=K(e);return i===\"boolean\"?[]:[new T(r,e,`boolean expected, ${i} found`)];}function io(t){let e=t.key,r=t.value,i=K(r);return i===\"string\"?gt.parse(String(r))?[]:[new T(e,r,`color expected, \"${r}\" found`)]:[new T(e,r,`color expected, ${i} found`)];}function tn(t){let e=t.key,r=t.value,i=t.valueSpec,n=[];return Array.isArray(i.values)?i.values.indexOf(Dt(r))===-1&&n.push(new T(e,r,`expected one of [${i.values.join(\", \")}], ${JSON.stringify(r)} found`)):Object.keys(i.values).indexOf(Dt(r))===-1&&n.push(new T(e,r,`expected one of [${Object.keys(i.values).join(\", \")}], ${JSON.stringify(r)} found`)),n;}function dm(t,e){let r=t;for(let i of e)r=r[i];return r;}function ym(t,e){let r=Tl(e);return r?[new T(`${t.key}${r.path.map(i=>`[${i}]`).join(\"\")}`,dm(t.value,r.path),ff(r.legacyFilter),null,\"warning\")]:[];}function Il(t){let e=fr(t.value);return Fl(e)?[...ym(t,e),...ri(Ji({},t,{expressionContext:\"filter\",valueSpec:{value:\"boolean\"}}))]:gf(t);}function gf(t){let e=t.value,r=t.key;if(K(e)!==\"array\")return[new T(r,e,`array expected, ${K(e)} found`)];let i=t.styleSpec,n,a=[];if(e.length<1)return[new T(r,e,\"filter array must have at least 1 element\")];switch(a=a.concat(tn({key:`${r}[0]`,value:e[0],valueSpec:i.filter_operator,style:t.style,styleSpec:t.styleSpec})),Dt(e[0])){case\"<\":case\"<=\":case\">\":case\">=\":e.length>=2&&Dt(e[1])===\"$type\"&&a.push(new T(r,e,`\"$type\" cannot be use with operator \"${e[0]}\"`));case\"==\":case\"!=\":e.length!==3&&a.push(new T(r,e,`filter array for operator \"${e[0]}\" must have 3 elements`));case\"in\":case\"!in\":e.length>=2&&(n=K(e[1]),n!==\"string\"&&a.push(new T(`${r}[1]`,e[1],`string expected, ${n} found`)));for(let s=2;s<e.length;s++)n=K(e[s]),Dt(e[1])===\"$type\"?a=a.concat(tn({key:`${r}[${s}]`,value:e[s],valueSpec:i.geometry_type,style:t.style,styleSpec:t.styleSpec})):n!==\"string\"&&n!==\"number\"&&n!==\"boolean\"&&a.push(new T(`${r}[${s}]`,e[s],`string, number, or boolean expected, ${n} found`));break;case\"any\":case\"all\":case\"none\":for(let s=1;s<e.length;s++)a=a.concat(gf({key:`${r}[${s}]`,value:e[s],style:t.style,styleSpec:t.styleSpec}));break;case\"has\":case\"!has\":n=K(e[1]),e.length===2?n!==\"string\"&&a.push(new T(`${r}[1]`,e[1],`string expected, ${n} found`)):a.push(new T(r,e,`filter array for \"${e[0]}\" operator must have 2 elements`));}return a;}function xf(t,e){let r=t.key,i=t.validateSpec,n=t.style,a=t.styleSpec,s=t.value,o=t.objectKey,l=a[`${e}_${t.layerType}`];if(!l)return[];let u=o.match(Sl);if(e===\"paint\"&&u&&l[u[1]]&&l[u[1]].transition)return i({key:r,value:s,valueSpec:a.transition,style:n,styleSpec:a});let h=t.valueSpec||l[o];if(!h)return[new T(r,s,`unknown property \"${o}\"`)];let c;if(K(s)===\"string\"&&Qr(h)&&!h.tokens&&(c=/^{([^}]+)}$/.exec(s)))return[new T(r,s,`\"${o}\" does not support interpolation syntax\nUse an identity property function instead: \\`{ \"type\": \"identity\", \"property\": ${JSON.stringify(c[1])} }\\`.`)];let p=[];return t.layerType===\"symbol\"&&o===\"text-font\"&&La(fr(s))&&Dt(s.type)===\"identity\"&&p.push(new T(r,s,'\"text-font\" does not support identity functions')),p.concat(i({key:t.key,value:s,valueSpec:h,style:n,styleSpec:a,expressionContext:\"property\",propertyType:e,propertyKey:o}));}function vf(t){return xf(t,\"paint\");}function bf(t){return xf(t,\"layout\");}function wf(t){let e=[],r=t.value,i=t.key,n=t.style,a=t.styleSpec;if(K(r)!==\"object\")return[new T(i,r,`object expected, ${K(r)} found`)];!r.type&&!r.ref&&e.push(new T(i,r,'either \"type\" or \"ref\" is required'));let s=Dt(r.type),o=Dt(r.ref);if(r.id){let l=Dt(r.id);for(let u=0;u<t.arrayIndex;u++){let h=n.layers[u];Dt(h.id)===l&&e.push(new T(i,r.id,`duplicate layer id \"${r.id}\", previously used at line ${h.id.__line__}`));}}if(\"ref\"in r){[\"type\",\"source\",\"source-layer\",\"filter\",\"layout\"].forEach(u=>{u in r&&e.push(new T(i,r[u],`\"${u}\" is prohibited for ref layers`));});let l;n.layers.forEach(u=>{Dt(u.id)===o&&(l=u);}),l?l.ref?e.push(new T(i,r.ref,\"ref cannot reference another ref layer\")):s=Dt(l.type):e.push(new T(i,r.ref,`ref layer \"${o}\" not found`));}else if(s!==\"background\")if(!r.source)e.push(new T(i,r,'missing required property \"source\"'));else{let l=n.sources&&n.sources[r.source],u=l&&Dt(l.type);l?u===\"vector\"&&s===\"raster\"?e.push(new T(i,r.source,`layer \"${r.id}\" requires a raster source`)):u!==\"raster-dem\"&&s===\"hillshade\"||u!==\"raster-dem\"&&s===\"color-relief\"?e.push(new T(i,r.source,`layer \"${r.id}\" requires a raster-dem source`)):u===\"raster\"&&s!==\"raster\"?e.push(new T(i,r.source,`layer \"${r.id}\" requires a vector source`)):u===\"vector\"&&!r[\"source-layer\"]?e.push(new T(i,r,`layer \"${r.id}\" must specify a \"source-layer\"`)):u===\"raster-dem\"&&s!==\"hillshade\"&&s!==\"color-relief\"?e.push(new T(i,r.source,\"raster-dem source can only be used with layer type 'hillshade' or 'color-relief'.\")):s===\"line\"&&r.paint&&r.paint[\"line-gradient\"]&&(u!==\"geojson\"||!l.lineMetrics)&&e.push(new T(i,r,`layer \"${r.id}\" specifies a line-gradient, which requires a GeoJSON source with \\`lineMetrics\\` enabled.`)):e.push(new T(i,r.source,`source \"${r.source}\" not found`));}return s===\"raster\"&&r.paint?.resampling&&r.paint?.[\"raster-resampling\"]&&e.push(new T(i,r.paint,`layer \"${r.id}\" redundantly specifies \"resampling\" and \"raster-resampling\" paint properties, but only one is allowed. It is advised to use \"resampling\".`)),e=e.concat(Kt({key:i,value:r,valueSpec:a.layer,style:t.style,styleSpec:t.styleSpec,validateSpec:t.validateSpec,objectElementValidators:{\"*\"(){return[];},type(){return t.validateSpec({key:`${i}.type`,value:r.type,valueSpec:a.layer.type,style:t.style,styleSpec:t.styleSpec,validateSpec:t.validateSpec,object:r,objectKey:\"type\"});},filter:Il,layout(l){return Kt({layer:r,key:l.key,value:l.value,style:l.style,styleSpec:l.styleSpec,validateSpec:l.validateSpec,objectElementValidators:{\"*\"(u){return bf(Ji({layerType:s},u));}}});},paint(l){return Kt({layer:r,key:l.key,value:l.value,style:l.style,styleSpec:l.styleSpec,validateSpec:l.validateSpec,objectElementValidators:{\"*\"(u){return vf(Ji({layerType:s},u));}}});}}})),e;}function He(t){let e=t.value,r=t.key,i=K(e);return i===\"string\"?[]:[new T(r,e,`string expected, ${i} found`)];}function mm(t){let e=t.sourceName??\"\",r=t.value,i=t.styleSpec,n=i.source_raster_dem,a=t.style,s=[],o=K(r);if(r===void 0)return s;if(o!==\"object\")return s.push(new T(\"source_raster_dem\",r,`object expected, ${o} found`)),s;let l=Dt(r.encoding)===\"custom\",u=[\"redFactor\",\"greenFactor\",\"blueFactor\",\"baseShift\"],h=t.value.encoding?`\"${t.value.encoding}\"`:\"Default\";for(let c in r)!l&&u.includes(c)?s.push(new T(c,r[c],`In \"${e}\": \"${c}\" is only valid when \"encoding\" is set to \"custom\". ${h} encoding found`)):n[c]?s=s.concat(t.validateSpec({key:c,value:r[c],valueSpec:n[c],validateSpec:t.validateSpec,style:a,styleSpec:i})):s.push(new T(c,r[c],`unknown property \"${c}\"`));return s;}var Fh={promoteId:gm};function Df(t){let e=t.value,r=t.key,i=t.styleSpec,n=t.style,a=t.validateSpec;if(!e.type)return[new T(r,e,'\"type\" is required')];let s=Dt(e.type),o;switch(s){case\"vector\":case\"raster\":return o=Kt({key:r,value:e,valueSpec:i[`source_${s.replace(\"-\",\"_\")}`],style:t.style,styleSpec:i,objectElementValidators:Fh,validateSpec:a}),o;case\"raster-dem\":return o=mm({sourceName:r,value:e,style:t.style,styleSpec:i,validateSpec:a}),o;case\"geojson\":if(o=Kt({key:r,value:e,valueSpec:i.source_geojson,style:n,styleSpec:i,validateSpec:a,objectElementValidators:Fh}),e.cluster)for(let l in e.clusterProperties){let[u,h]=e.clusterProperties[l],c=typeof u==\"string\"?[u,[\"accumulated\"],[\"get\",l]]:u;o.push(...ri({key:`${r}.${l}.map`,value:h,validateSpec:a,expressionContext:\"cluster-map\"})),o.push(...ri({key:`${r}.${l}.reduce`,value:c,validateSpec:a,expressionContext:\"cluster-reduce\"}));}return o;case\"video\":return Kt({key:r,value:e,valueSpec:i.source_video,style:n,validateSpec:a,styleSpec:i});case\"image\":return Kt({key:r,value:e,valueSpec:i.source_image,style:n,validateSpec:a,styleSpec:i});case\"canvas\":return[new T(r,null,\"Please use runtime APIs to add canvas sources, rather than including them in stylesheets.\",\"source.canvas\")];default:return tn({key:`${r}.type`,value:e.type,valueSpec:{values:[\"vector\",\"raster\",\"raster-dem\",\"geojson\",\"video\",\"image\"]},style:n,validateSpec:a,styleSpec:i});}}function gm({key:t,value:e}){if(K(e)===\"string\")return He({key:t,value:e});{let r=[];for(let i in e)r.push(...He({key:`${t}.${i}`,value:e[i]}));return r;}}function _f(t){let e=t.value,r=t.styleSpec,i=r.light,n=t.style,a=[],s=K(e);if(e===void 0)return a;if(s!==\"object\")return a=a.concat([new T(\"light\",e,`object expected, ${s} found`)]),a;for(let o in e){let l=o.match(Sl);a=l&&i[l[1]]&&i[l[1]].transition?a.concat(t.validateSpec({key:o,value:e[o],valueSpec:r.transition,validateSpec:t.validateSpec,style:n,styleSpec:r})):i[o]?a.concat(t.validateSpec({key:o,value:e[o],valueSpec:i[o],validateSpec:t.validateSpec,style:n,styleSpec:r})):a.concat([new T(o,e[o],`unknown property \"${o}\"`)]);}return a;}function Af(t){let e=t.value,r=t.styleSpec,i=r.sky,n=t.style,a=K(e);if(e===void 0)return[];if(a!==\"object\")return[new T(\"sky\",e,`object expected, ${a} found`)];let s=[];for(let o in e){let l=o.match(Sl);s=l&&i[l[1]]&&i[l[1]].transition?s.concat(t.validateSpec({key:o,value:e[o],valueSpec:r.transition,style:n,styleSpec:r})):i[o]?s.concat(t.validateSpec({key:o,value:e[o],valueSpec:i[o],style:n,styleSpec:r})):s.concat([new T(o,e[o],`unknown property \"${o}\"`)]);}return s;}function Sf(t){let e=t.value,r=t.styleSpec,i=r.terrain,n=t.style,a=[],s=K(e);if(e===void 0)return a;if(s!==\"object\")return a=a.concat([new T(\"terrain\",e,`object expected, ${s} found`)]),a;for(let o in e)a=i[o]?a.concat(t.validateSpec({key:o,value:e[o],valueSpec:i[o],validateSpec:t.validateSpec,style:n,styleSpec:r})):a.concat([new T(o,e[o],`unknown property \"${o}\"`)]);return a;}function xm(t){return He(t).length===0?[]:ri(t);}function vm(t){return He(t).length===0?[]:ri(t);}function bm(t){let e=t.key,r=t.value;if(K(r)===\"array\"){if(r.length<1||r.length>4)return[new T(e,r,`padding requires 1 to 4 values; ${r.length} values found`)];let i={type:\"number\"},n=[];for(let a=0;a<r.length;a++)n=n.concat(t.validateSpec({key:`${e}[${a}]`,value:r[a],validateSpec:t.validateSpec,valueSpec:i}));return n;}return Oa({key:e,value:r,valueSpec:{}});}function wm(t){let e=t.key,r=t.value;if(K(r)===\"array\"){let i={type:\"number\"};if(r.length<1)return[new T(e,r,\"array length at least 1 expected, length 0 found\")];let n=[];for(let a=0;a<r.length;a++)n=n.concat(t.validateSpec({key:`${e}[${a}]`,value:r[a],validateSpec:t.validateSpec,valueSpec:i}));return n;}return Oa({key:e,value:r,valueSpec:{}});}function Dm(t){let e=t.key,r=t.value;if(K(r)===\"array\"){if(r.length<1)return[new T(e,r,\"array length at least 1 expected, length 0 found\")];let i=[];for(let n=0;n<r.length;n++)i=i.concat(io({key:`${e}[${n}]`,value:r[n],valueSpec:{}}));return i;}return io({key:e,value:r,valueSpec:{}});}function _m(t){let e=t.key,r=t.value,i=K(r),n=t.styleSpec;if(i!==\"array\"||r.length<1||r.length%2!=0)return[new T(e,r,\"variableAnchorOffsetCollection requires a non-empty array of even length\")];let a=[];for(let s=0;s<r.length;s+=2)a=a.concat(tn({key:`${e}[${s}]`,value:r[s],valueSpec:n.layout_symbol[\"text-anchor\"]})),a=a.concat(kl({key:`${e}[${s+1}]`,value:r[s+1],valueSpec:{length:2,value:\"number\"},validateSpec:t.validateSpec,style:t.style,styleSpec:n}));return a;}function Ef(t){let e=[],r=t.value,i=t.key;if(Array.isArray(r)){let n=[],a=[];for(let s in r)r[s].id&&n.includes(r[s].id)&&e.push(new T(i,r,`all the sprites' ids must be unique, but ${r[s].id} is duplicated`)),n.push(r[s].id),r[s].url&&a.includes(r[s].url)&&e.push(new T(i,r,`all the sprites' URLs must be unique, but ${r[s].url} is duplicated`)),a.push(r[s].url),e=e.concat(Kt({key:`${i}[${s}]`,value:r[s],valueSpec:{id:{type:\"string\",required:!0},url:{type:\"string\",required:!0}},validateSpec:t.validateSpec}));return e;}return He({key:i,value:r});}function Am(t){let e=t.value,r=t.styleSpec,i=r.projection,n=t.style,a=K(e);if(e===void 0)return[];if(a!==\"object\")return[new T(\"projection\",e,`object expected, ${a} found`)];let s=[];for(let o in e)s=i[o]?s.concat(t.validateSpec({key:o,value:e[o],valueSpec:i[o],style:n,styleSpec:r})):s.concat([new T(o,e[o],`unknown property \"${o}\"`)]);return s;}function Sm(t){let e=t.key,r=t.value;r=r instanceof String?r.valueOf():r;let i=K(r);return i===\"array\"&&!Fm(r)&&!Em(r)?[new T(e,r,`projection expected, invalid array ${JSON.stringify(r)} found`)]:[\"array\",\"string\"].includes(i)?[]:[new T(e,r,`projection expected, invalid type \"${i}\" found`)];}function Em(t){return!![\"interpolate\",\"step\",\"literal\"].includes(t[0]);}function Fm(t){return Array.isArray(t)&&t.length===3&&typeof t[0]==\"string\"&&typeof t[1]==\"string\"&&typeof t[2]==\"number\";}function no(t){return!!t&&t.constructor===Object;}function Ff(t){return no(t.value)?[]:[new T(t.key,t.value,`object expected, ${K(t.value)} found`)];}var Th=1114111,Tm=/^u\\+(?:([0-9a-f]{1,6})(?:-([0-9a-f]{1,6}))?|([0-9a-f]{0,5}\\?{1,6}))$/i;function km(t,e){if(K(e)!==\"string\")return[];let r=`${e}`,i=()=>[new T(t,e,'invalid unicode range, expected a value such as \"U+26\", \"U+0-10FFFF\" or \"U+4??\"')],n=r.match(Tm);if(!n)return i();let[,a,s,o]=n;if(o!==void 0)return o.length>6?i():[];let l=parseInt(a,16),u=s===void 0?l:parseInt(s,16);return l>Th||u>Th?[new T(t,e,\"unicode range is out of bounds, the maximum code point is U+10FFFF\")]:l>u?[new T(t,e,`unicode range start must not be greater than its end, but ${r} is`)]:[];}function Tf(t){let e=t.key??\"font-faces\",r=t.value,i=t.validateSpec,n=t.styleSpec??cp,a=t.style;if(!no(r))return[new T(e,r,`object expected, ${K(r)} found`)];let s=[];for(let o in r){let l=r[o],u=K(l);if(u===\"string\")s.push(...He({key:`${e}.${o}`,value:l}));else if(u===\"array\"){let h={url:{type:\"string\",required:!0},\"unicode-range\":{type:\"array\",value:\"string\"}};for(let[c,p]of l.entries()){let f=`${e}.${o}[${c}]`;s.push(...Kt({key:f,value:p,valueSpec:h,styleSpec:n,style:a,validateSpec:i}));let d=no(p)?p[\"unicode-range\"]:void 0;if(K(d)===\"array\")for(let[y,m]of d.entries())s.push(...km(`${f}.unicode-range[${y}]`,m));}}else s.push(new T(`${e}.${o}`,l,`string or array expected, ${u} found`));}return s;}var kh={\"*\"(){return[];},array:kl,boolean:fm,number:Oa,color:io,constants:yf,enum:tn,filter:Il,function:mf,layer:wf,object:Kt,source:Df,light:_f,sky:Af,terrain:Sf,projection:Am,projectionDefinition:Sm,string:He,formatted:xm,resolvedImage:vm,padding:bm,numberArray:wm,colorArray:Dm,variableAnchorOffsetCollection:_m,sprite:Ef,state:Ff,fontFaces:Tf};function Ni(t){let e=t.value,r=t.valueSpec,i=t.styleSpec;return t.validateSpec=Ni,r.expression&&La(Dt(e))?mf(t):r.expression&&Va(fr(e))?ri(t):r.type&&kh[r.type]?kh[r.type](t):Kt(Ji({},t,{valueSpec:r.type?i[r.type]:r}));}function kf(t){let e=t.value,r=t.key,i=He(t);return i.length||(e.indexOf(\"{fontstack}\")===-1&&i.push(new T(r,e,'\"glyphs\" url must include a \"{fontstack}\" token')),e.indexOf(\"{range}\")===-1&&i.push(new T(r,e,'\"glyphs\" url must include a \"{range}\" token'))),i;}function Ht(t,e=D){let r=[];return r=r.concat(Ni({key:\"\",value:t,valueSpec:e.$root,styleSpec:e,style:t,validateSpec:Ni,objectElementValidators:{glyphs:kf,\"*\"(){return[];}}})),t.constants&&(r=r.concat(yf({key:\"constants\",value:t.constants,style:t,styleSpec:e,validateSpec:Ni}))),If(r);}Ht.source=te(Qt(Df)),Ht.sprite=te(Qt(Ef)),Ht.glyphs=te(Qt(kf)),Ht.fontFaces=te(Qt(Tf)),Ht.light=te(Qt(_f)),Ht.sky=te(Qt(Af)),Ht.terrain=te(Qt(Sf)),Ht.state=te(Qt(Ff)),Ht.layer=te(Qt(wf)),Ht.filter=te(Qt(Il)),Ht.paintProperty=te(Qt(vf)),Ht.layoutProperty=te(Qt(bf));function Qt(t){return function(e){return t(Object.assign({},e,{validateSpec:Ni}));};}function If(t){return[].concat(t).sort((e,r)=>e.line-r.line);}function te(t){return function(...e){return If(t.apply(this,e));};}var Im={type:\"enum\",\"property-type\":\"data-constant\",expression:{interpolated:!1,parameters:[\"global-state\"]},values:{visible:{},none:{}},transition:!1,default:\"visible\"},Cm=class{constructor(t,e,r){this._rootKey=e,this._globalState=r,this.setValue(t);}evaluate(){return this._literalValue??this._compiledValue.evaluate({});}setValue(t){if(t==null||t===\"visible\"||t===\"none\"){this._literalValue=t===\"none\"?\"none\":\"visible\",this._compiledValue=void 0,this._globalStateRefs=new Set();return;}let e=Ke(t,this._rootKey,Im,this._globalState);if(e.result===\"error\")throw this._literalValue=\"visible\",this._compiledValue=void 0,Error(e.value.map(r=>`${r.key}: ${r.message}`).join(\", \"));this._literalValue=void 0,this._compiledValue=e.value,this._globalStateRefs=dn(e.value.expression);}getGlobalStateRefs(){return this._globalStateRefs;}};function Mm(t,e,r){return new Cm(t,e,r);}var Ih=Ht,c5=new Set(Object.keys(D).filter(t=>t.startsWith(\"source_\")).map(t=>t.slice(7).replaceAll(\"_\",\"-\")));function Bm(t,e){let r=!1;for(let i of e){if(i.severity===\"warning\"){Mt(i.message);continue;}t.fire(new ua(Error(i.message))),r=!0;}return r;}function Pm(t,e,r,i){return i?.validate!==!1&&Bm(t,e({styleSpec:D,...r}));}var ao=class Cf{constructor(e,r,i){let n=this.cells=[];if(e instanceof ArrayBuffer){this.arrayBuffer=e;let s=new Int32Array(this.arrayBuffer);e=s[0],r=s[1],i=s[2],this.d=r+2*i;for(let u=0;u<this.d*this.d;u++){let h=s[3+u],c=s[3+u+1];n.push(h===c?null:s.subarray(h,c));}let o=s[3+n.length],l=s[3+n.length+1];this.keys=s.subarray(o,l),this.bboxes=s.subarray(l),this.insert=this._insertReadonly;}else{this.d=r+2*i;for(let s=0;s<this.d*this.d;s++)n.push([]);this.keys=[],this.bboxes=[];}this.n=r,this.extent=e,this.padding=i,this.scale=r/e,this.uid=0;let a=i/r*e;this.min=-a,this.max=e+a;}insert(e,r,i,n,a){this._forEachCell(r,i,n,a,this._insertCell,this.uid++,void 0,void 0),this.keys.push(e),this.bboxes.push(r),this.bboxes.push(i),this.bboxes.push(n),this.bboxes.push(a);}_insertReadonly(){throw Error(\"Cannot insert into a GridIndex created from an ArrayBuffer.\");}_insertCell(e,r,i,n,a,s){this.cells[a].push(s);}query(e,r,i,n,a){let s=this.min,o=this.max;if(e<=s&&r<=s&&o<=i&&o<=n&&!a)return[...this.keys];{let l=[];return this._forEachCell(e,r,i,n,this._queryCell,l,{},a),l;}}_queryCell(e,r,i,n,a,s,o,l){let u=this.cells[a];if(u!==null){let h=this.keys,c=this.bboxes;for(let p of u)if(o[p]===void 0){let f=p*4;(l?l(c[f+0],c[f+1],c[f+2],c[f+3]):e<=c[f+2]&&r<=c[f+3]&&i>=c[f+0]&&n>=c[f+1])?(o[p]=!0,s.push(h[p])):o[p]=!1;}}}_forEachCell(e,r,i,n,a,s,o,l){let u=this._convertToCellCoord(e),h=this._convertToCellCoord(r),c=this._convertToCellCoord(i),p=this._convertToCellCoord(n);for(let f=u;f<=c;f++)for(let d=h;d<=p;d++){let y=this.d*d+f;if((!l||l(this._convertFromCellCoord(f),this._convertFromCellCoord(d),this._convertFromCellCoord(f+1),this._convertFromCellCoord(d+1)))&&a.call(this,e,r,i,n,y,s,o,l))return;}}_convertFromCellCoord(e){return(e-this.padding)/this.scale;}_convertToCellCoord(e){return Math.max(0,Math.min(this.d-1,Math.floor(e*this.scale)+this.padding));}toArrayBuffer(){if(this.arrayBuffer)return this.arrayBuffer;let e=this.cells,r=3+this.cells.length+1+1,i=0;for(let s of this.cells)i+=s.length;let n=new Int32Array(r+i+this.keys.length+this.bboxes.length);n[0]=this.extent,n[1]=this.n,n[2]=this.padding;let a=r;for(let s=0;s<e.length;s++){let o=e[s];n[3+s]=a,n.set(o,a),a+=o.length;}return n[3+e.length]=a,n.set(this.keys,a),a+=this.keys.length,n[3+e.length+1]=a,n.set(this.bboxes,a),a+=this.bboxes.length,n.buffer;}static serialize(e,r){let i=e.toArrayBuffer();return r&&r.push(i),{buffer:i};}static deserialize(e){return new Cf(e.buffer);}},ke={};function I(t,e,r={}){if(ke[t])throw Error(`${t} is already registered.`);Object.defineProperty(e,\"_classRegistryKey\",{value:t,writeable:!1}),ke[t]={klass:e,omit:r.omit||[],shallow:r.shallow||[]};}I(\"Object\",Object),I(\"Set\",Set),I(\"TransferableGridIndex\",ao),I(\"Color\",gt),I(\"Error\",Error),I(\"AJAXError\",la),I(\"ResolvedImage\",we),I(\"StylePropertyFunction\",uf),I(\"StyleExpression\",El,{omit:[\"_evaluator\"]}),I(\"ZoomDependentExpression\",da),I(\"ZoomConstantExpression\",Qi),I(\"CompoundExpression\",xr,{omit:[\"_evaluate\"]});for(let t in qr)qr[t]._classRegistryKey||I(`Expression_${t}`,qr[t]);function Mf(t){return t&&typeof ArrayBuffer<\"u\"&&(t instanceof ArrayBuffer||t.constructor?.name===\"ArrayBuffer\");}function Cl(t){let e=t.constructor;return t.$name||e._classRegistryKey;}function zm(t){if(typeof t!=\"object\"||!t)return!1;let e=Cl(t);return e&&e!==\"Object\";}function Bf(t){return!zm(t)&&(t==null||typeof t==\"boolean\"||typeof t==\"number\"||typeof t==\"string\"||t instanceof Boolean||t instanceof Number||t instanceof String||t instanceof Date||t instanceof RegExp||t instanceof Blob||t instanceof Error||Mf(t)||Aa(t)||ArrayBuffer.isView(t)||t instanceof ImageData);}function Ui(t,e){if(Bf(t))return(Mf(t)||Aa(t))&&e&&e.push(t),ArrayBuffer.isView(t)&&e&&e.push(t.buffer),t instanceof ImageData&&e&&e.push(t.data.buffer),t;if(Array.isArray(t)){let a=[];for(let s of t)a.push(Ui(s,e));return a;}if(typeof t!=\"object\")throw Error(`can't serialize object of type ${typeof t}`);let r=Cl(t);if(!r)throw Error(`can't serialize object of unregistered class ${t.constructor.name}`);if(!ke[r])throw Error(`${r} is not registered.`);let{klass:i}=ke[r],n=i.serialize?i.serialize(t,e):{};if(i.serialize){if(n===e?.[e.length-1])throw Error(\"statically serialized object won't survive transfer of $name property\");}else{for(let a in t){if(!t.hasOwnProperty(a)||ke[r].omit.includes(a))continue;let s=t[a];s!==void 0&&(n[a]=ke[r].shallow.includes(a)?s:Ui(s,e));}t instanceof Error&&(n.message=t.message);}if(n.$name)throw Error(\"$name property is reserved for worker serialization logic.\");return r!==\"Object\"&&(n.$name=r),n;}function qi(t){if(Bf(t))return t;if(Array.isArray(t))return t.map(qi);if(typeof t!=\"object\")throw Error(`can't deserialize object of type ${typeof t}`);let e=Cl(t)||\"Object\";if(!ke[e])throw Error(`can't deserialize unregistered class ${e}`);let{klass:r}=ke[e];if(!r)throw Error(`can't deserialize unregistered class ${e}`);if(r.deserialize)return r.deserialize(t);let i=Object.create(r.prototype);for(let n of Object.keys(t)){if(n===\"$name\")continue;let a=t[n];i[n]=ke[e].shallow.includes(n)?a:qi(a);}return i;}var Ch=class{constructor(){this.first=!0;}update(t,e){let r=Math.floor(t);return this.first?(this.first=!1,this.lastIntegerZoom=r,this.lastIntegerZoomTime=0,this.lastZoom=t,this.lastFloorZoom=r,!0):(this.lastFloorZoom>r?(this.lastIntegerZoom=r+1,this.lastIntegerZoomTime=e):this.lastFloorZoom<r&&(this.lastIntegerZoom=r,this.lastIntegerZoomTime=e),t!==this.lastZoom&&(this.lastZoom=t,this.lastFloorZoom=r,!0));}},at=class{constructor(t,e){this.zoom=t,e?(this.now=e.now||0,this.fadeDuration=e.fadeDuration||0,this.zoomHistory=e.zoomHistory||new Ch(),this.transition=e.transition||{}):(this.now=0,this.fadeDuration=0,this.zoomHistory=new Ch(),this.transition={});}crossFadingFactor(){return this.fadeDuration===0?1:Math.min((this.now-this.zoomHistory.lastIntegerZoomTime)/this.fadeDuration,1);}getCrossfadeParameters(){let t=this.zoom,e=t-Math.floor(t),r=this.crossFadingFactor();return t>this.zoomHistory.lastIntegerZoom?{fromScale:2,toScale:1,t:e+(1-e)*r}:{fromScale:.5,toScale:1,t:1-(1-r)*e};}},Ra=class{constructor(t,e,r,i){this.property=t,this.value=e,this.expression=am(e===void 0?t.specification.default:e,r,t.specification,i);}isDataDriven(){return this.expression.kind===\"source\"||this.expression.kind===\"composite\";}getGlobalStateRefs(){return this.expression.globalStateRefs||new Set();}possiblyEvaluate(t,e,r){return this.property.possiblyEvaluate(this,t,e,r);}},so=class{constructor(t,e,r){this.property=t,this.value=new Ra(t,void 0,e,r);}transitioned(t,e){return e.value===this.value?e:new Mh(this.property,this.value,e,Ut({},t.transition,this.transition),t.now);}untransitioned(){return new Mh(this.property,this.value,null,{},0);}},Lm=class{constructor(t,e,r){this._properties=t,this._values=Object.create(t.defaultTransitionablePropertyValues),this._globalState=r,this._rootKey=e;}_propertyRootKey(t){return`${this._rootKey}.${String(t)}`;}hasProperty(t){return t in this._properties.defaultTransitionablePropertyValues;}getValue(t){return Xe(this._values[t].value.value);}setValue(t,e){Object.hasOwn(this._values,t)||(this._values[t]=new so(this._values[t].property,this._propertyRootKey(t),this._globalState)),this._values[t].value=new Ra(this._values[t].property,e===null?void 0:Xe(e),this._propertyRootKey(t),this._globalState);}setValues(t){for(let e in t){let r=t[e];e.endsWith(\"-transition\")?this.setTransition(e.slice(0,-11),r):Xs(this._values[e].value.value,r)||this.setValue(e,r);}}getTransition(t){return Xe(this._values[t].transition);}setTransition(t,e){Object.hasOwn(this._values,t)||(this._values[t]=new so(this._values[t].property,this._propertyRootKey(t),this._globalState)),this._values[t].transition=Xe(e)||void 0;}serialize(){let t={};for(let e of Object.keys(this._values)){let r=this.getValue(e);r!==void 0&&(t[e]=r);let i=this.getTransition(e);i!==void 0&&(t[`${e}-transition`]=i);}return t;}transitioned(t,e){let r=new Bh(this._properties);for(let i of Object.keys(this._values))r._values[i]=this._values[i].transitioned(t,e._values[i]);return r;}untransitioned(){let t=new Bh(this._properties);for(let e of Object.keys(this._values))t._values[e]=this._values[e].untransitioned();return t;}},Mh=class{constructor(t,e,r,i,n){this.property=t,this.value=e,this.begin=n+i.delay||0,this.end=this.begin+i.duration||0,t.specification.transition&&(i.delay||i.duration)&&(this.prior=r);}possiblyEvaluate(t,e,r){let i=t.now||0,n=this.value.possiblyEvaluate(t,e,r),a=this.prior;if(!a)return n;if(i>this.end||this.value.isDataDriven())return this.prior=null,n;if(i<this.begin)return a.possiblyEvaluate(t,e,r);{let s=(i-this.begin)/(this.end-this.begin);return this.property.interpolate(a.possiblyEvaluate(t,e,r),n,w1(s));}}},Bh=class{constructor(t){this._properties=t,this._values=Object.create(t.defaultTransitioningPropertyValues);}possiblyEvaluate(t,e,r){let i=new $a(this._properties);for(let n of Object.keys(this._values))i._values[n]=this._values[n].possiblyEvaluate(t,e,r);return i;}hasTransition(){for(let t of Object.keys(this._values))if(this._values[t].prior)return!0;return!1;}},Vm=class{constructor(t,e,r){this._properties=t,this._values=Object.create(t.defaultPropertyValues),this._globalState=r,this._rootKey=e;}_propertyRootKey(t){return`${this._rootKey}.${String(t)}`;}hasValue(t){return this._values[t].value!==void 0;}hasProperty(t){return t in this._properties.defaultPropertyValues;}getValue(t){return Xe(this._values[t].value);}setValue(t,e){this._values[t]=new Ra(this._values[t].property,e===null?void 0:Xe(e),this._propertyRootKey(t),this._globalState);}serialize(){let t={};for(let e of Object.keys(this._values)){let r=this.getValue(e);r!==void 0&&(t[e]=r);}return t;}possiblyEvaluate(t,e,r){let i=new $a(this._properties);for(let n of Object.keys(this._values))i._values[n]=this._values[n].possiblyEvaluate(t,e,r);return i;}},ie=class{constructor(t,e,r){this.property=t,this.value=e,this.parameters=r;}isConstant(){return this.value.kind===\"constant\";}constantOr(t){return this.value.kind===\"constant\"?this.value.value:t;}evaluate(t,e,r,i){return this.property.evaluate(this.value,this.parameters,t,e,r,i);}},$a=class{constructor(t){this._properties=t,this._values=Object.create(t.defaultPossiblyEvaluatedValues);}get(t){return this._values[t];}};function Ph(t){if(Array.isArray(t))return t.length;let e=t?.values;return Array.isArray(e)?e.length:void 0;}function Pf(t,e){let r=Ph(t),i=Ph(e);return r!==void 0&&i!==void 0&&r!==i;}var V=class{constructor(t,e){this.specification=t,this.name=e;}possiblyEvaluate(t,e){if(t.isDataDriven())throw Error(\"Value should not be data driven\");return t.expression.evaluate(e);}interpolate(t,e,r){if(Pf(t,e))return Mt(`Property \"${this.name}\" is trying to interpolate arrays of different lengths. Rendering may 'jump'.`),e;let i=this.specification.type,n=pr[i];return n?n(t,e,r):t;}},U=class{constructor(t,e,r){this.specification=t,this.name=e,this.overrides=r;}possiblyEvaluate(t,e,r,i){return t.expression.kind===\"constant\"||t.expression.kind===\"camera\"?new ie(this,{kind:\"constant\",value:t.expression.evaluate(e,null,{},r,i)},e):new ie(this,t.expression,e);}interpolate(t,e,r){if(t.value.kind!==\"constant\"||e.value.kind!==\"constant\")return t;if(t.value.value===void 0||e.value.value===void 0)return new ie(this,{kind:\"constant\",value:void 0},t.parameters);if(Pf(t.value.value,e.value.value))return Mt(`Property \"${this.name}\" is trying to interpolate arrays of different lengths. Rendering may 'jump'.`),e;let i=this.specification.type,n=pr[i];if(n){let a=n(t.value.value,e.value.value,r);return new ie(this,{kind:\"constant\",value:a},t.parameters);}return t;}evaluate(t,e,r,i,n,a){return t.kind===\"constant\"?t.value:t.evaluate(e,r,i,n,a);}},en=class extends U{possiblyEvaluate(t,e,r,i){if(t.value===void 0)return new ie(this,{kind:\"constant\",value:void 0},e);if(t.expression.kind===\"constant\"){let n=t.expression.evaluate(e,null,{},r,i),a=t.property.specification.type===\"resolvedImage\"&&typeof n!=\"string\"?n.name:n,s=this._calculate(a,a,a,e);return new ie(this,{kind:\"constant\",value:s},e);}if(t.expression.kind===\"camera\"){let n=this._calculate(t.expression.evaluate({zoom:e.zoom-1}),t.expression.evaluate({zoom:e.zoom}),t.expression.evaluate({zoom:e.zoom+1}),e);return new ie(this,{kind:\"constant\",value:n},e);}return new ie(this,t.expression,e);}evaluate(t,e,r,i,n,a){if(t.kind===\"source\"){let s=t.evaluate(e,r,i,n,a);return this._calculate(s,s,s,e);}return t.kind===\"composite\"?this._calculate(t.evaluate({zoom:Math.floor(e.zoom)-1},r,i),t.evaluate({zoom:Math.floor(e.zoom)},r,i),t.evaluate({zoom:Math.floor(e.zoom)+1},r,i),e):t.value;}_calculate(t,e,r,i){return i.zoom>i.zoomHistory.lastIntegerZoom?{from:t,to:e}:{from:r,to:e};}interpolate(t){return t;}},zf=class{constructor(t,e){this.specification=t,this.name=e;}possiblyEvaluate(t,e,r,i){if(t.value!==void 0){if(t.expression.kind===\"constant\"){let n=t.expression.evaluate(e,null,{},r,i);return this._calculate(n,n,n,e);}return this._calculate(t.expression.evaluate(new at(Math.floor(e.zoom-1),e)),t.expression.evaluate(new at(Math.floor(e.zoom),e)),t.expression.evaluate(new at(Math.floor(e.zoom+1),e)),e);}}_calculate(t,e,r,i){return i.zoom>i.zoomHistory.lastIntegerZoom?{from:t,to:e}:{from:r,to:e};}interpolate(t){return t;}},Na=class{constructor(t,e){this.specification=t,this.name=e;}possiblyEvaluate(t,e,r,i){return!!t.expression.evaluate(e,null,{},r,i);}interpolate(){return!1;}},qt=class{constructor(t){this.properties=t,this.defaultPropertyValues={},this.defaultTransitionablePropertyValues={},this.defaultTransitioningPropertyValues={},this.defaultPossiblyEvaluatedValues={},this.overridableProperties=[];for(let e in t){let r=t[e];r.specification.overridable&&this.overridableProperties.push(e);let i=this.defaultPropertyValues[e]=new Ra(r,void 0,r.name,void 0),n=this.defaultTransitionablePropertyValues[e]=new so(r,r.name,void 0);this.defaultTransitioningPropertyValues[e]=n.untransitioned(),this.defaultPossiblyEvaluatedValues[e]=i.possiblyEvaluate({});}}};I(\"DataDrivenProperty\",U),I(\"DataConstantProperty\",V),I(\"CrossFadedDataDrivenProperty\",en),I(\"CrossFadedProperty\",zf),I(\"ColorRampProperty\",Na);var zh=\" is a PAINT property not a LAYOUT property. Use get/setPaintProperty instead?\",Bs=\" is a LAYOUT property not a PAINT property. Use get/setLayoutProperty instead?\",ce=class extends P1{constructor(t,e,r){if(super(),this.id=t.id,this.type=t.type,this._globalState=r,this._featureFilter={filter:()=>!0,needGeometry:!1,getGlobalStateRefs:()=>new Set()},this._visibilityExpression=Mm(this.visibility,`layers[${this.id}].layout.visibility`,r),t.type!==\"custom\"&&(this.metadata=t.metadata,this.minzoom=t.minzoom,this.maxzoom=t.maxzoom,t.type!==\"background\"&&(this.source=t.source,this.sourceLayer=t[\"source-layer\"],this.filter=t.filter,this._featureFilter=ei(t.filter,`layers[${this.id}].filter`,r)),e.layout&&(this._unevaluatedLayout=new Vm(e.layout,`layers[${this.id}].layout`,r)),e.paint)){this._transitionablePaint=new Lm(e.paint,`layers[${this.id}].paint`,r);for(let i in t.paint)this.setPaintProperty(i,t.paint[i],{validate:!1});for(let i in t.layout)this.setLayoutProperty(i,t.layout[i],{validate:!1});this._transitioningPaint=this._transitionablePaint.untransitioned(),this.paint=new $a(e.paint);}}setFilter(t){this.filter=t,this._featureFilter=ei(t,`layers[${this.id}].filter`,this._globalState);}getCrossfadeParameters(){return this._crossfadeParameters;}getLayoutProperty(t){if(t===\"visibility\")return this.visibility;if(this._transitionablePaint?.hasProperty(t))throw Error(t+zh);if(!this._unevaluatedLayout)throw Error(`Cannot get layout property \"${t}\" on layer type \"${this.type}\" which has no layout properties.`);return this._unevaluatedLayout.getValue(t);}getLayoutAffectingGlobalStateRefs(){let t=new Set();for(let e of this._visibilityExpression.getGlobalStateRefs())t.add(e);if(this._unevaluatedLayout)for(let e in this._unevaluatedLayout._values){let r=this._unevaluatedLayout._values[e];for(let i of r.getGlobalStateRefs())t.add(i);}for(let e of this._featureFilter.getGlobalStateRefs())t.add(e);return t;}getPaintAffectingGlobalStateRefs(){let t=new globalThis.Map();if(this._transitionablePaint)for(let e in this._transitionablePaint._values){let r=this._transitionablePaint._values[e].value;for(let i of r.getGlobalStateRefs()){let n=t.get(i)??[];n.push({name:e,value:r.value}),t.set(i,n);}}return t;}getVisibilityAffectingGlobalStateRefs(){return this._visibilityExpression.getGlobalStateRefs();}setLayoutProperty(t,e,r={}){if(t===\"visibility\"){this.visibility=e,this._visibilityExpression.setValue(e),this.recalculateVisibility();return;}if(this._transitionablePaint?.hasProperty(t)){this.fire(new ua(Error(t+zh)));return;}e!=null&&this._validate(Ih.layoutProperty,`layers.${this.id}.layout.${t}`,t,e,r)||this._unevaluatedLayout.setValue(t,e);}getPaintProperty(t){if(t.endsWith(\"-transition\")){let e=t.slice(0,-11);if(e===\"visibility\"||this._unevaluatedLayout?.hasProperty(e))throw Error(t+Bs);return this._transitionablePaint.getTransition(e);}if(t===\"visibility\"||this._unevaluatedLayout?.hasProperty(t))throw Error(t+Bs);return this._transitionablePaint.getValue(t);}setPaintProperty(t,e,r={}){if(t===\"visibility\"||this._unevaluatedLayout?.hasProperty(t))return this.fire(new ua(Error(t+Bs))),!1;if(e!=null&&this._validate(Ih.paintProperty,`layers.${this.id}.paint.${t}`,t,e,r))return!1;if(t.endsWith(\"-transition\"))return this._transitionablePaint.setTransition(t.slice(0,-11),e||void 0),!1;{let i=this._transitionablePaint._values[t],n=i.property.specification[\"property-type\"]===\"cross-faded-data-driven\",a=i.value.isDataDriven(),s=i.value;this._transitionablePaint.setValue(t,e),this._handleSpecialPaintPropertyUpdate(t);let o=this._transitionablePaint._values[t].value;return o.isDataDriven()||a||n||this._handleOverridablePaintPropertyUpdate(t,s,o);}}_handleSpecialPaintPropertyUpdate(t){}_handleOverridablePaintPropertyUpdate(t,e,r){return!1;}isHidden(t=this.minzoom,e=!1){return this.minzoom&&t<(e?Math.floor(this.minzoom):this.minzoom)||this.maxzoom&&t>=this.maxzoom?!0:this._evaluatedVisibility===\"none\";}updateTransitions(t){this._transitioningPaint=this._transitionablePaint.transitioned(t,this._transitioningPaint);}hasTransition(){return this._transitioningPaint.hasTransition();}recalculateVisibility(){this._evaluatedVisibility=this._visibilityExpression.evaluate();}recalculate(t,e){t.getCrossfadeParameters&&(this._crossfadeParameters=t.getCrossfadeParameters()),this._unevaluatedLayout&&(this.layout=this._unevaluatedLayout.possiblyEvaluate(t,void 0,e)),this.paint=this._transitioningPaint.possiblyEvaluate(t,void 0,e);}serialize(){let t={id:this.id,type:this.type,source:this.source,\"source-layer\":this.sourceLayer,metadata:this.metadata,minzoom:this.minzoom,maxzoom:this.maxzoom,filter:this.filter,layout:this._unevaluatedLayout?.serialize(),paint:this._transitionablePaint?.serialize()};return this.visibility&&(t.layout||={},t.layout.visibility=this.visibility),S1(t,(e,r)=>e!==void 0&&!(r===\"layout\"&&!Object.keys(e).length)&&!(r===\"paint\"&&!Object.keys(e).length));}_validate(t,e,r,i,n={}){return Pm(this,t,{key:e,layerType:this.type,objectKey:r,value:i},n);}is3D(){return!1;}isTileClipped(){return!1;}hasOffscreenPass(){return!1;}resize(){}isStateDependent(){for(let t in this.paint._values){let e=this.paint.get(t);if(e instanceof ie&&Qr(e.property.specification)&&(e.value.kind===\"source\"||e.value.kind===\"composite\")&&e.value.isStateDependent)return!0;}return!1;}},Om,Rm=()=>Om||=new qt({\"raster-opacity\":new V(D.paint_raster[\"raster-opacity\"],\"raster-opacity\"),\"raster-hue-rotate\":new V(D.paint_raster[\"raster-hue-rotate\"],\"raster-hue-rotate\"),\"raster-brightness-min\":new V(D.paint_raster[\"raster-brightness-min\"],\"raster-brightness-min\"),\"raster-brightness-max\":new V(D.paint_raster[\"raster-brightness-max\"],\"raster-brightness-max\"),\"raster-saturation\":new V(D.paint_raster[\"raster-saturation\"],\"raster-saturation\"),\"raster-contrast\":new V(D.paint_raster[\"raster-contrast\"],\"raster-contrast\"),resampling:new V(D.paint_raster.resampling,\"resampling\"),\"raster-resampling\":new V(D.paint_raster[\"raster-resampling\"],\"raster-resampling\"),\"raster-fade-duration\":new V(D.paint_raster[\"raster-fade-duration\"],\"raster-fade-duration\")}),$m={get paint(){return Rm();}};var Nm=class extends ce{constructor(t,e){super(t,$m,e);}},Um={Int8:Int8Array,Uint8:Uint8Array,Int16:Int16Array,Uint16:Uint16Array,Int32:Int32Array,Uint32:Uint32Array,Float32:Float32Array},yn=class{constructor(t,e){this._structArray=t,this._pos1=e*this.size,this._pos2=this._pos1/2,this._pos4=this._pos1/4,this._pos8=this._pos1/8;}},xt=class{constructor(){this.isTransferred=!1,this.capacity=-1,this.resize(0);}static serialize(t,e){return t._trim(),e&&(t.isTransferred=!0,e.push(t.arrayBuffer)),{length:t.length,arrayBuffer:t.arrayBuffer};}static deserialize(t){let e=Object.create(this.prototype);return e.arrayBuffer=t.arrayBuffer,e.length=t.length,e.capacity=t.arrayBuffer.byteLength/e.bytesPerElement,e._refreshViews(),e;}_trim(){this.length!==this.capacity&&(this.capacity=this.length,this.arrayBuffer=this.arrayBuffer.slice(0,this.length*this.bytesPerElement),this._refreshViews());}clear(){this.length=0;}resize(t){this.reserve(t),this.length=t;}reserve(t){if(t>this.capacity){this.capacity=Math.max(t,Math.floor(this.capacity*5),128),this.arrayBuffer=new ArrayBuffer(this.capacity*this.bytesPerElement);let e=this.uint8;this._refreshViews(),e&&this.uint8.set(e);}}_refreshViews(){throw Error(\"_refreshViews() must be implemented by each concrete StructArray layout\");}freeBufferAfterUpload(){this.arrayBuffer=new ArrayBuffer(0),this._refreshViews();}};function At(t,e=1){let r=0,i=0;return{members:t.map(n=>{let a=qm(n.type),s=r=Lh(r,Math.max(e,a)),o=n.components||1;return i=Math.max(i,a),r+=a*o,{name:n.name,type:n.type,components:o,offset:s};}),size:Lh(r,Math.max(i,e)),alignment:e};}function qm(t){return Um[t].BYTES_PER_ELEMENT;}function Lh(t,e){return Math.ceil(t/e)*e;}var rn=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer);}emplaceBack(t,e){let r=this.length;return this.resize(r+1),this.emplace(r,t,e);}emplace(t,e,r){let i=t*2;return this.int16[i+0]=e,this.int16[i+1]=r,t;}};rn.prototype.bytesPerElement=4,I(\"StructArrayLayout2i4\",rn);var oo=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer);}emplaceBack(t,e,r){let i=this.length;return this.resize(i+1),this.emplace(i,t,e,r);}emplace(t,e,r,i){let n=t*3;return this.int16[n+0]=e,this.int16[n+1]=r,this.int16[n+2]=i,t;}};oo.prototype.bytesPerElement=6,I(\"StructArrayLayout3i6\",oo);var Vh=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer);}emplaceBack(t,e,r,i){let n=this.length;return this.resize(n+1),this.emplace(n,t,e,r,i);}emplace(t,e,r,i,n){let a=t*4;return this.int16[a+0]=e,this.int16[a+1]=r,this.int16[a+2]=i,this.int16[a+3]=n,t;}};Vh.prototype.bytesPerElement=8,I(\"StructArrayLayout4i8\",Vh);var lo=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer);}emplaceBack(t,e,r,i,n,a){let s=this.length;return this.resize(s+1),this.emplace(s,t,e,r,i,n,a);}emplace(t,e,r,i,n,a,s){let o=t*6;return this.int16[o+0]=e,this.int16[o+1]=r,this.int16[o+2]=i,this.int16[o+3]=n,this.int16[o+4]=a,this.int16[o+5]=s,t;}};lo.prototype.bytesPerElement=12,I(\"StructArrayLayout2i4i12\",lo);var uo=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer);}emplaceBack(t,e,r,i,n,a){let s=this.length;return this.resize(s+1),this.emplace(s,t,e,r,i,n,a);}emplace(t,e,r,i,n,a,s){let o=t*4,l=t*8;return this.int16[o+0]=e,this.int16[o+1]=r,this.uint8[l+4]=i,this.uint8[l+5]=n,this.uint8[l+6]=a,this.uint8[l+7]=s,t;}};uo.prototype.bytesPerElement=8,I(\"StructArrayLayout2i4ub8\",uo);var nn=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer);}emplaceBack(t,e){let r=this.length;return this.resize(r+1),this.emplace(r,t,e);}emplace(t,e,r){let i=t*2;return this.float32[i+0]=e,this.float32[i+1]=r,t;}};nn.prototype.bytesPerElement=8,I(\"StructArrayLayout2f8\",nn);var ho=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer);}emplaceBack(t,e,r,i,n,a,s,o,l,u){let h=this.length;return this.resize(h+1),this.emplace(h,t,e,r,i,n,a,s,o,l,u);}emplace(t,e,r,i,n,a,s,o,l,u,h){let c=t*10;return this.uint16[c+0]=e,this.uint16[c+1]=r,this.uint16[c+2]=i,this.uint16[c+3]=n,this.uint16[c+4]=a,this.uint16[c+5]=s,this.uint16[c+6]=o,this.uint16[c+7]=l,this.uint16[c+8]=u,this.uint16[c+9]=h,t;}};ho.prototype.bytesPerElement=20,I(\"StructArrayLayout10ui20\",ho);var co=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer);}emplaceBack(t,e,r,i,n,a,s,o){let l=this.length;return this.resize(l+1),this.emplace(l,t,e,r,i,n,a,s,o);}emplace(t,e,r,i,n,a,s,o,l){let u=t*8;return this.uint16[u+0]=e,this.uint16[u+1]=r,this.uint16[u+2]=i,this.uint16[u+3]=n,this.uint16[u+4]=a,this.uint16[u+5]=s,this.uint16[u+6]=o,this.uint16[u+7]=l,t;}};co.prototype.bytesPerElement=16,I(\"StructArrayLayout8ui16\",co);var po=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer);}emplaceBack(t,e,r,i,n,a,s,o,l,u,h,c,p){let f=this.length;return this.resize(f+1),this.emplace(f,t,e,r,i,n,a,s,o,l,u,h,c,p);}emplace(t,e,r,i,n,a,s,o,l,u,h,c,p,f){let d=t*14,y=t*7;return this.int16[d+0]=e,this.int16[d+1]=r,this.int16[d+2]=i,this.int16[d+3]=n,this.uint16[d+4]=a,this.uint16[d+5]=s,this.uint16[d+6]=o,this.uint16[d+7]=l,this.int16[d+8]=u,this.int16[d+9]=h,this.int16[d+10]=c,this.int16[d+11]=p,this.float32[y+6]=f,t;}};po.prototype.bytesPerElement=28,I(\"StructArrayLayout4i4ui4i1f28\",po);var fo=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer);}emplaceBack(t,e,r){let i=this.length;return this.resize(i+1),this.emplace(i,t,e,r);}emplace(t,e,r,i){let n=t*3;return this.float32[n+0]=e,this.float32[n+1]=r,this.float32[n+2]=i,t;}};fo.prototype.bytesPerElement=12,I(\"StructArrayLayout3f12\",fo);var yo=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer);}emplaceBack(t){let e=this.length;return this.resize(e+1),this.emplace(e,t);}emplace(t,e){let r=t*1;return this.uint32[r+0]=e,t;}};yo.prototype.bytesPerElement=4,I(\"StructArrayLayout1ul4\",yo);var mo=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer);}emplaceBack(t,e,r,i,n,a,s,o,l){let u=this.length;return this.resize(u+1),this.emplace(u,t,e,r,i,n,a,s,o,l);}emplace(t,e,r,i,n,a,s,o,l,u){let h=t*10,c=t*5;return this.int16[h+0]=e,this.int16[h+1]=r,this.int16[h+2]=i,this.int16[h+3]=n,this.int16[h+4]=a,this.int16[h+5]=s,this.uint32[c+3]=o,this.uint16[h+8]=l,this.uint16[h+9]=u,t;}};mo.prototype.bytesPerElement=20,I(\"StructArrayLayout6i1ul2ui20\",mo);var go=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer);}emplaceBack(t,e,r,i,n,a){let s=this.length;return this.resize(s+1),this.emplace(s,t,e,r,i,n,a);}emplace(t,e,r,i,n,a,s){let o=t*6;return this.int16[o+0]=e,this.int16[o+1]=r,this.int16[o+2]=i,this.int16[o+3]=n,this.int16[o+4]=a,this.int16[o+5]=s,t;}};go.prototype.bytesPerElement=12,I(\"StructArrayLayout2i2i2i12\",go);var Oh=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer);}emplaceBack(t,e,r,i,n){let a=this.length;return this.resize(a+1),this.emplace(a,t,e,r,i,n);}emplace(t,e,r,i,n,a){let s=t*4,o=t*8;return this.float32[s+0]=e,this.float32[s+1]=r,this.float32[s+2]=i,this.int16[o+6]=n,this.int16[o+7]=a,t;}};Oh.prototype.bytesPerElement=16,I(\"StructArrayLayout2f1f2i16\",Oh);var xo=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer);}emplaceBack(t,e,r,i,n,a){let s=this.length;return this.resize(s+1),this.emplace(s,t,e,r,i,n,a);}emplace(t,e,r,i,n,a,s){let o=t*16,l=t*4,u=t*8;return this.uint8[o+0]=e,this.uint8[o+1]=r,this.float32[l+1]=i,this.float32[l+2]=n,this.int16[u+6]=a,this.int16[u+7]=s,t;}};xo.prototype.bytesPerElement=16,I(\"StructArrayLayout2ub2f2i16\",xo);var vo=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer);}emplaceBack(t,e,r){let i=this.length;return this.resize(i+1),this.emplace(i,t,e,r);}emplace(t,e,r,i){let n=t*3;return this.uint16[n+0]=e,this.uint16[n+1]=r,this.uint16[n+2]=i,t;}};vo.prototype.bytesPerElement=6,I(\"StructArrayLayout3ui6\",vo);var bo=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer);}emplaceBack(t,e,r,i,n,a,s,o,l,u,h,c,p,f,d,y,m,g){let x=this.length;return this.resize(x+1),this.emplace(x,t,e,r,i,n,a,s,o,l,u,h,c,p,f,d,y,m,g);}emplace(t,e,r,i,n,a,s,o,l,u,h,c,p,f,d,y,m,g,x){let b=t*26,v=t*13,w=t*52;return this.int16[b+0]=e,this.int16[b+1]=r,this.uint16[b+2]=i,this.uint16[b+3]=n,this.uint32[v+2]=a,this.uint32[v+3]=s,this.uint32[v+4]=o,this.uint16[b+10]=l,this.uint16[b+11]=u,this.uint16[b+12]=h,this.float32[v+7]=c,this.float32[v+8]=p,this.uint8[w+36]=f,this.uint8[w+37]=d,this.uint8[w+38]=y,this.uint32[v+10]=m,this.int16[b+22]=g,this.float32[v+12]=x,t;}};bo.prototype.bytesPerElement=52,I(\"StructArrayLayout2i2ui3ul3ui2f3ub1ul1i1f52\",bo);var wo=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer);}emplaceBack(t,e,r,i,n,a,s,o,l,u,h,c,p,f,d,y,m,g,x,b,v,w,_,A,S,F,z,$,B){let P=this.length;return this.resize(P+1),this.emplace(P,t,e,r,i,n,a,s,o,l,u,h,c,p,f,d,y,m,g,x,b,v,w,_,A,S,F,z,$,B);}emplace(t,e,r,i,n,a,s,o,l,u,h,c,p,f,d,y,m,g,x,b,v,w,_,A,S,F,z,$,B,P){let E=t*34,O=t*17;return this.int16[E+0]=e,this.int16[E+1]=r,this.int16[E+2]=i,this.int16[E+3]=n,this.int16[E+4]=a,this.int16[E+5]=s,this.int16[E+6]=o,this.int16[E+7]=l,this.uint16[E+8]=u,this.uint16[E+9]=h,this.uint16[E+10]=c,this.uint16[E+11]=p,this.uint16[E+12]=f,this.uint16[E+13]=d,this.uint16[E+14]=y,this.uint16[E+15]=m,this.uint16[E+16]=g,this.uint16[E+17]=x,this.uint16[E+18]=b,this.uint16[E+19]=v,this.uint16[E+20]=w,this.uint16[E+21]=_,this.uint16[E+22]=A,this.uint32[O+12]=S,this.float32[O+13]=F,this.float32[O+14]=z,this.uint16[E+30]=$,this.uint16[E+31]=B,this.float32[O+16]=P,t;}};wo.prototype.bytesPerElement=68,I(\"StructArrayLayout8i15ui1ul2f2ui1f68\",wo);var ma=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer);}emplaceBack(t){let e=this.length;return this.resize(e+1),this.emplace(e,t);}emplace(t,e){let r=t*1;return this.float32[r+0]=e,t;}};ma.prototype.bytesPerElement=4,I(\"StructArrayLayout1f4\",ma);var Do=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer);}emplaceBack(t,e,r){let i=this.length;return this.resize(i+1),this.emplace(i,t,e,r);}emplace(t,e,r,i){let n=t*6,a=t*3;return this.uint16[n+0]=e,this.float32[a+1]=r,this.float32[a+2]=i,t;}};Do.prototype.bytesPerElement=12,I(\"StructArrayLayout1ui2f12\",Do);var _o=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer);}emplaceBack(t,e,r){let i=this.length;return this.resize(i+1),this.emplace(i,t,e,r);}emplace(t,e,r,i){let n=t*2,a=t*4;return this.uint32[n+0]=e,this.uint16[a+2]=r,this.uint16[a+3]=i,t;}};_o.prototype.bytesPerElement=8,I(\"StructArrayLayout1ul2ui8\",_o);var Ao=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer);}emplaceBack(t,e){let r=this.length;return this.resize(r+1),this.emplace(r,t,e);}emplace(t,e,r){let i=t*2;return this.uint16[i+0]=e,this.uint16[i+1]=r,t;}};Ao.prototype.bytesPerElement=4,I(\"StructArrayLayout2ui4\",Ao);var Rh=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer);}emplaceBack(t){let e=this.length;return this.resize(e+1),this.emplace(e,t);}emplace(t,e){let r=t*1;return this.uint16[r+0]=e,t;}};Rh.prototype.bytesPerElement=2,I(\"StructArrayLayout1ui2\",Rh);var So=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer);}emplaceBack(t,e,r,i){let n=this.length;return this.resize(n+1),this.emplace(n,t,e,r,i);}emplace(t,e,r,i,n){let a=t*4;return this.float32[a+0]=e,this.float32[a+1]=r,this.float32[a+2]=i,this.float32[a+3]=n,t;}};So.prototype.bytesPerElement=16,I(\"StructArrayLayout4f16\",So);var Lf=class extends yn{get anchorPointX(){return this._structArray.int16[this._pos2+0];}get anchorPointY(){return this._structArray.int16[this._pos2+1];}get x1(){return this._structArray.int16[this._pos2+2];}get y1(){return this._structArray.int16[this._pos2+3];}get x2(){return this._structArray.int16[this._pos2+4];}get y2(){return this._structArray.int16[this._pos2+5];}get featureIndex(){return this._structArray.uint32[this._pos4+3];}get sourceLayerIndex(){return this._structArray.uint16[this._pos2+8];}get bucketIndex(){return this._structArray.uint16[this._pos2+9];}get anchorPoint(){return new M(this.anchorPointX,this.anchorPointY);}};Lf.prototype.size=20;var Ml=class extends mo{get(t){return new Lf(this,t);}};I(\"CollisionBoxArray\",Ml);var Vf=class extends yn{get anchorX(){return this._structArray.int16[this._pos2+0];}get anchorY(){return this._structArray.int16[this._pos2+1];}get glyphStartIndex(){return this._structArray.uint16[this._pos2+2];}get numGlyphs(){return this._structArray.uint16[this._pos2+3];}get vertexStartIndex(){return this._structArray.uint32[this._pos4+2];}get lineStartIndex(){return this._structArray.uint32[this._pos4+3];}get lineLength(){return this._structArray.uint32[this._pos4+4];}get segment(){return this._structArray.uint16[this._pos2+10];}get lowerSize(){return this._structArray.uint16[this._pos2+11];}get upperSize(){return this._structArray.uint16[this._pos2+12];}get lineOffsetX(){return this._structArray.float32[this._pos4+7];}get lineOffsetY(){return this._structArray.float32[this._pos4+8];}get writingMode(){return this._structArray.uint8[this._pos1+36];}get placedOrientation(){return this._structArray.uint8[this._pos1+37];}set placedOrientation(t){this._structArray.uint8[this._pos1+37]=t;}get hidden(){return this._structArray.uint8[this._pos1+38];}set hidden(t){this._structArray.uint8[this._pos1+38]=t;}get crossTileID(){return this._structArray.uint32[this._pos4+10];}set crossTileID(t){this._structArray.uint32[this._pos4+10]=t;}get associatedIconIndex(){return this._structArray.int16[this._pos2+22];}get heightOffset(){return this._structArray.float32[this._pos4+12];}};Vf.prototype.size=52;var Of=class extends bo{get(t){return new Vf(this,t);}};I(\"PlacedSymbolArray\",Of);var Rf=class extends yn{get anchorX(){return this._structArray.int16[this._pos2+0];}get anchorY(){return this._structArray.int16[this._pos2+1];}get rightJustifiedTextSymbolIndex(){return this._structArray.int16[this._pos2+2];}get centerJustifiedTextSymbolIndex(){return this._structArray.int16[this._pos2+3];}get leftJustifiedTextSymbolIndex(){return this._structArray.int16[this._pos2+4];}get verticalPlacedTextSymbolIndex(){return this._structArray.int16[this._pos2+5];}get placedIconSymbolIndex(){return this._structArray.int16[this._pos2+6];}get verticalPlacedIconSymbolIndex(){return this._structArray.int16[this._pos2+7];}get key(){return this._structArray.uint16[this._pos2+8];}get textBoxStartIndex(){return this._structArray.uint16[this._pos2+9];}get textBoxEndIndex(){return this._structArray.uint16[this._pos2+10];}get verticalTextBoxStartIndex(){return this._structArray.uint16[this._pos2+11];}get verticalTextBoxEndIndex(){return this._structArray.uint16[this._pos2+12];}get iconBoxStartIndex(){return this._structArray.uint16[this._pos2+13];}get iconBoxEndIndex(){return this._structArray.uint16[this._pos2+14];}get verticalIconBoxStartIndex(){return this._structArray.uint16[this._pos2+15];}get verticalIconBoxEndIndex(){return this._structArray.uint16[this._pos2+16];}get featureIndex(){return this._structArray.uint16[this._pos2+17];}get numHorizontalGlyphVertices(){return this._structArray.uint16[this._pos2+18];}get numVerticalGlyphVertices(){return this._structArray.uint16[this._pos2+19];}get numIconVertices(){return this._structArray.uint16[this._pos2+20];}get numVerticalIconVertices(){return this._structArray.uint16[this._pos2+21];}get useRuntimeCollisionCircles(){return this._structArray.uint16[this._pos2+22];}get crossTileID(){return this._structArray.uint32[this._pos4+12];}set crossTileID(t){this._structArray.uint32[this._pos4+12]=t;}get textBoxScale(){return this._structArray.float32[this._pos4+13];}get collisionCircleDiameter(){return this._structArray.float32[this._pos4+14];}get textAnchorOffsetStartIndex(){return this._structArray.uint16[this._pos2+30];}get textAnchorOffsetEndIndex(){return this._structArray.uint16[this._pos2+31];}get heightOffset(){return this._structArray.float32[this._pos4+16];}};Rf.prototype.size=68;var $f=class extends wo{get(t){return new Rf(this,t);}};I(\"SymbolInstanceArray\",$f);var Nf=class extends ma{getoffsetX(t){return this.float32[t*1+0];}};I(\"GlyphOffsetArray\",Nf);var Uf=class extends oo{getx(t){return this.int16[t*3+0];}gety(t){return this.int16[t*3+1];}gettileUnitDistanceFromAnchor(t){return this.int16[t*3+2];}};I(\"SymbolLineVertexArray\",Uf);var qf=class extends yn{get textAnchor(){return this._structArray.uint16[this._pos2+0];}get textOffset0(){return this._structArray.float32[this._pos4+1];}get textOffset1(){return this._structArray.float32[this._pos4+2];}};qf.prototype.size=12;var jf=class extends Do{get(t){return new qf(this,t);}};I(\"TextAnchorOffsetArray\",jf);var Gf=class extends yn{get featureIndex(){return this._structArray.uint32[this._pos4+0];}get sourceLayerIndex(){return this._structArray.uint16[this._pos2+2];}get bucketIndex(){return this._structArray.uint16[this._pos2+3];}};Gf.prototype.size=8;var Xf=class extends _o{get(t){return new Gf(this,t);}};I(\"FeatureIndexArray\",Xf);var jm=class extends rn{};var Gm=class extends rn{},Xm=class extends rn{},Ym=class extends lo{},Wm=class extends uo{},Zm=class extends nn{},Br=class extends ho{},$h=class extends co{},Hm=class extends po{},Km=class extends fo{},Jm=class extends yo{},Nh=class extends go{};var Qm=class extends xo{};var mn=class extends vo{},Eo=class extends Ao{};var Fo=At([{name:\"a_pos\",components:2,type:\"Int16\"}],4),tg=Fo.members;Fo.size,Fo.alignment;var Jt=class Or{constructor(e=[]){this._forceNewSegmentOnNextPrepare=!1,this.segments=e;}prepareSegment(e,r,i,n){let a=this.segments[this.segments.length-1];return e>Or.MAX_VERTEX_ARRAY_LENGTH&&Mt(`Max vertices per segment is ${Or.MAX_VERTEX_ARRAY_LENGTH}: bucket requested ${e}. Consider using the \\`fillLargeMeshArrays\\` function if you require meshes with more than ${Or.MAX_VERTEX_ARRAY_LENGTH} vertices.`),this._forceNewSegmentOnNextPrepare||!a||a.vertexLength+e>Or.MAX_VERTEX_ARRAY_LENGTH||a.sortKey!==n?this.createNewSegment(r,i,n):a;}createNewSegment(e,r,i){let n={vertexOffset:e.length,primitiveOffset:r.length,vertexLength:0,primitiveLength:0,vaos:{}};return i!==void 0&&(n.sortKey=i),this._forceNewSegmentOnNextPrepare=!1,this.segments.push(n),n;}getOrCreateLatestSegment(e,r,i){return this.prepareSegment(0,e,r,i);}forceNewSegmentOnNextPrepare(){this._forceNewSegmentOnNextPrepare=!0;}get(){return this.segments;}destroy(){for(let e of this.segments)for(let r in e.vaos)e.vaos[r].destroy();}static simpleSegment(e,r,i,n){return new Or([{vertexOffset:e,primitiveOffset:r,vertexLength:i,primitiveLength:n,vaos:{},sortKey:0}]);}};Jt.MAX_VERTEX_ARRAY_LENGTH=2**16-1,I(\"SegmentVector\",Jt);function Uh(t,e){return t=Yi(Math.floor(t),0,255),e=Yi(Math.floor(e),0,255),256*t+e;}var eg=At([{name:\"a_pattern_from\",components:4,type:\"Uint16\"},{name:\"a_pattern_to\",components:4,type:\"Uint16\"},{name:\"a_pixel_ratio_from\",components:1,type:\"Uint16\"},{name:\"a_pixel_ratio_to\",components:1,type:\"Uint16\"}]),rg=At([{name:\"a_dasharray_from\",components:4,type:\"Uint16\"},{name:\"a_dasharray_to\",components:4,type:\"Uint16\"}]),ig=ul((t,e)=>{function r(i,n){for(var a=i.length&3,s=i.length-a,o=n,l,u=3432918353,h=461845907,c,p=0;p<s;)c=i.charCodeAt(p)&255|(i.charCodeAt(++p)&255)<<8|(i.charCodeAt(++p)&255)<<16|(i.charCodeAt(++p)&255)<<24,++p,c=(c&65535)*u+(((c>>>16)*u&65535)<<16)&4294967295,c=c<<15|c>>>17,c=(c&65535)*h+(((c>>>16)*h&65535)<<16)&4294967295,o^=c,o=o<<13|o>>>19,l=(o&65535)*5+(((o>>>16)*5&65535)<<16)&4294967295,o=(l&65535)+27492+(((l>>>16)+58964&65535)<<16);switch(c=0,a){case 3:c^=(i.charCodeAt(p+2)&255)<<16;case 2:c^=(i.charCodeAt(p+1)&255)<<8;case 1:c^=i.charCodeAt(p)&255,c=(c&65535)*u+(((c>>>16)*u&65535)<<16)&4294967295,c=c<<15|c>>>17,c=(c&65535)*h+(((c>>>16)*h&65535)<<16)&4294967295,o^=c;}return o^=i.length,o^=o>>>16,o=(o&65535)*2246822507+(((o>>>16)*2246822507&65535)<<16)&4294967295,o^=o>>>13,o=(o&65535)*3266489909+(((o>>>16)*3266489909&65535)<<16)&4294967295,o^=o>>>16,o>>>0;}e!==void 0&&(e.exports=r);}),ng=ul((t,e)=>{function r(i,n){for(var a=i.length,s=n^a,o=0,l;a>=4;)l=i.charCodeAt(o)&255|(i.charCodeAt(++o)&255)<<8|(i.charCodeAt(++o)&255)<<16|(i.charCodeAt(++o)&255)<<24,l=(l&65535)*1540483477+(((l>>>16)*1540483477&65535)<<16),l^=l>>>24,l=(l&65535)*1540483477+(((l>>>16)*1540483477&65535)<<16),s=(s&65535)*1540483477+(((s>>>16)*1540483477&65535)<<16)^l,a-=4,++o;switch(a){case 3:s^=(i.charCodeAt(o+2)&255)<<16;case 2:s^=(i.charCodeAt(o+1)&255)<<8;case 1:s^=i.charCodeAt(o)&255,s=(s&65535)*1540483477+(((s>>>16)*1540483477&65535)<<16);}return s^=s>>>13,s=(s&65535)*1540483477+(((s>>>16)*1540483477&65535)<<16),s^=s>>>15,s>>>0;}e.exports=r;}),To=s1(ul((t,e)=>{var r=ig(),i=ng();e.exports=r,e.exports.murmur3=r,e.exports.murmur2=i;})(),1),Yf=class Wf{constructor(){this.ids=[],this.positions=[],this.indexed=!1;}add(e,r,i,n){this.ids.push(qh(e)),this.positions.push(r,i,n);}getPositions(e){if(!this.indexed)throw Error(\"Trying to get index, but feature positions are not indexed\");let r=qh(e),i=0,n=this.ids.length-1;for(;i<n;){let s=i+n>>1;this.ids[s]>=r?n=s:i=s+1;}let a=[];for(;this.ids[i]===r;){let s=this.positions[3*i],o=this.positions[3*i+1],l=this.positions[3*i+2];a.push({index:s,start:o,end:l}),i++;}return a;}static serialize(e,r){let i=new Float64Array(e.ids),n=new Uint32Array(e.positions);return ko(i,n,0,i.length-1),r&&r.push(i.buffer,n.buffer),{ids:i,positions:n};}static deserialize(e){let r=new Wf();return r.ids=e.ids,r.positions=e.positions,r.indexed=!0,r;}};function qh(t){let e=+t;return!isNaN(e)&&e<=2**53-1?e:(0,To.default)(String(t));}function ko(t,e,r,i){for(;r<i;){let n=t[r+i>>1],a=r-1,s=i+1;for(;;){do a++;while(t[a]<n);do s--;while(t[s]>n);if(a>=s)break;Nn(t,a,s),Nn(e,3*a,3*s),Nn(e,3*a+1,3*s+1),Nn(e,3*a+2,3*s+2);}s-r<i-s?(ko(t,e,r,s),r=s+1):(ko(t,e,s+1,i),i=s);}}function Nn(t,e,r){let i=t[e];t[e]=t[r],t[r]=i;}I(\"FeaturePositionMap\",Yf);var Bl=class{constructor(t,e){this.gl=t.gl,this.location=e;}};var Pl=class extends Bl{constructor(t,e){super(t,e),this.current=0;}set(t){this.current!==t&&(this.current=t,this.gl.uniform1f(this.location,t));}};var ag=class extends Bl{constructor(t,e){super(t,e),this.current=[0,0,0,0];}set(t){(t[0]!==this.current[0]||t[1]!==this.current[1]||t[2]!==this.current[2]||t[3]!==this.current[3])&&(this.current=t,this.gl.uniform4f(this.location,t[0],t[1],t[2],t[3]));}},sg=class extends Bl{constructor(t,e){super(t,e),this.current=gt.transparent;}set(t){(t.r!==this.current.r||t.g!==this.current.g||t.b!==this.current.b||t.a!==this.current.a)&&(this.current=t,this.gl.uniform4f(this.location,t.r,t.g,t.b,t.a));}};var p5=new Float32Array(16);function Io(t){return[Uh(255*t.r,255*t.g),Uh(255*t.b,255*t.a)];}var zi=class{constructor(t,e,r){this.value=t,this.uniformNames=e.map(i=>`u_${i}`),this.type=r;}setUniform(t,e,r){t.set(r.constantOr(this.value));}getBinding(t,e,r){return this.type===\"color\"?new sg(t,e):new Pl(t,e);}},ar=class{constructor(t,e){this.uniformNames=e.map(r=>`u_${r}`),this.patternFrom=null,this.patternTo=null,this.pixelRatioFrom=1,this.pixelRatioTo=1;}setConstantPatternPositions(t,e){this.pixelRatioFrom=e.pixelRatio,this.pixelRatioTo=t.pixelRatio,this.patternFrom=e.tlbr,this.patternTo=t.tlbr;}setConstantDashPositions(t,e){this.dashTo=[0,t.y,t.height,t.width],this.dashFrom=[0,e.y,e.height,e.width];}setUniform(t,e,r,i){let n=null;i===\"u_pattern_to\"?n=this.patternTo:i===\"u_pattern_from\"?n=this.patternFrom:i===\"u_dasharray_to\"?n=this.dashTo:i===\"u_dasharray_from\"?n=this.dashFrom:i===\"u_pixel_ratio_to\"?n=this.pixelRatioTo:i===\"u_pixel_ratio_from\"&&(n=this.pixelRatioFrom),n!==null&&t.set(n);}getBinding(t,e,r){return r.startsWith(\"u_pattern\")||r.startsWith(\"u_dasharray_\")?new ag(t,e):new Pl(t,e);}},Ee=class{constructor(t,e,r,i){this.expression=t,this.type=r,this.maxValue=0,this.paintVertexAttributes=e.map(n=>({name:`a_${n}`,type:\"Float32\",components:r===\"color\"?2:1,offset:0})),this.paintVertexArray=new i();}populatePaintArray(t,e,r){let i=this.paintVertexArray.length,n=this.expression.evaluate(new at(0,r),e,{},r.canonical,[],r.formattedSection);this.paintVertexArray.resize(t),this._setPaintValue(i,t,n);}updatePaintArray(t,e,r,i,n){let a=this.expression.evaluate(new at(0,n),r,i);this._setPaintValue(t,e,a);}_setPaintValue(t,e,r){if(this.type===\"color\"){let i=Io(r);for(let n=t;n<e;n++)this.paintVertexArray.emplace(n,i[0],i[1]);}else{for(let i=t;i<e;i++)this.paintVertexArray.emplace(i,r);this.maxValue=Math.max(this.maxValue,Math.abs(r));}}upload(t){this.paintVertexArray?.arrayBuffer.byteLength&&(this.paintVertexBuffer?.buffer?this.paintVertexBuffer.updateData(this.paintVertexArray):this.paintVertexBuffer=t.createVertexBuffer(this.paintVertexArray,this.paintVertexAttributes,this.expression.isStateDependent));}destroy(){this.paintVertexBuffer&&this.paintVertexBuffer.destroy();}},oe=class{constructor(t,e,r,i,n,a){this.expression=t,this.uniformNames=e.map(s=>`u_${s}_t`),this.type=r,this.useIntegerZoom=i,this.zoom=n,this.maxValue=0,this.paintVertexAttributes=e.map(s=>({name:`a_${s}`,type:\"Float32\",components:r===\"color\"?4:2,offset:0})),this.paintVertexArray=new a();}populatePaintArray(t,e,r){let i=this.expression.evaluate(new at(this.zoom,r),e,{},r.canonical,[],r.formattedSection),n=this.expression.evaluate(new at(this.zoom+1,r),e,{},r.canonical,[],r.formattedSection),a=this.paintVertexArray.length;this.paintVertexArray.resize(t),this._setPaintValue(a,t,i,n);}updatePaintArray(t,e,r,i,n){let a=this.expression.evaluate(new at(this.zoom,n),r,i),s=this.expression.evaluate(new at(this.zoom+1,n),r,i);this._setPaintValue(t,e,a,s);}_setPaintValue(t,e,r,i){if(this.type===\"color\"){let n=Io(r),a=Io(i);for(let s=t;s<e;s++)this.paintVertexArray.emplace(s,n[0],n[1],a[0],a[1]);}else{for(let n=t;n<e;n++)this.paintVertexArray.emplace(n,r,i);this.maxValue=Math.max(this.maxValue,Math.abs(r),Math.abs(i));}}upload(t){this.paintVertexArray?.arrayBuffer.byteLength&&(this.paintVertexBuffer?.buffer?this.paintVertexBuffer.updateData(this.paintVertexArray):this.paintVertexBuffer=t.createVertexBuffer(this.paintVertexArray,this.paintVertexAttributes,this.expression.isStateDependent));}destroy(){this.paintVertexBuffer&&this.paintVertexBuffer.destroy();}setUniform(t,e){let r=this.useIntegerZoom?Math.floor(e.zoom):e.zoom,i=Yi(this.expression.interpolationFactor(r,this.zoom,this.zoom+1),0,1);t.set(i);}getBinding(t,e,r){return new Pl(t,e);}},qe=class{constructor(t,e,r,i,n,a){this.expression=t,this.type=e,this.useIntegerZoom=r,this.zoom=i,this.layerId=a,this.zoomInPaintVertexArray=new n(),this.zoomOutPaintVertexArray=new n();}populatePaintArray(t,e,r){let i=this.zoomInPaintVertexArray.length;this.zoomInPaintVertexArray.resize(t),this.zoomOutPaintVertexArray.resize(t),this._setPaintValues(i,t,this.getPositionIds(e),r);}updatePaintArray(t,e,r,i,n){this._setPaintValues(t,e,this.getPositionIds(r),n);}_setPaintValues(t,e,r,i){let n=this.getPositions(i);if(!n||!r)return;let a=n[r.min],s=n[r.mid],o=n[r.max];if(a&&s&&o)for(let l=t;l<e;l++)this.emplace(this.zoomInPaintVertexArray,l,a,s),this.emplace(this.zoomOutPaintVertexArray,l,o,s);}upload(t){if(this.zoomInPaintVertexArray?.arrayBuffer.byteLength&&this.zoomOutPaintVertexArray?.arrayBuffer.byteLength){let e=this.getVertexAttributes();this.zoomInPaintVertexBuffer=t.createVertexBuffer(this.zoomInPaintVertexArray,e,this.expression.isStateDependent),this.zoomOutPaintVertexBuffer=t.createVertexBuffer(this.zoomOutPaintVertexArray,e,this.expression.isStateDependent);}}destroy(){this.zoomOutPaintVertexBuffer&&this.zoomOutPaintVertexBuffer.destroy(),this.zoomInPaintVertexBuffer&&this.zoomInPaintVertexBuffer.destroy();}},Zf=class extends qe{getPositions(t){return t.imagePositions;}getPositionIds(t){return t.patterns?.[this.layerId];}getVertexAttributes(){return eg.members;}emplace(t,e,r,i){t.emplace(e,r.tlbr[0],r.tlbr[1],r.tlbr[2],r.tlbr[3],i.tlbr[0],i.tlbr[1],i.tlbr[2],i.tlbr[3],r.pixelRatio,i.pixelRatio);}},Hf=class extends qe{getPositions(t){return t.dashPositions;}getPositionIds(t){return t.dashes?.[this.layerId];}getVertexAttributes(){return rg.members;}emplace(t,e,r,i){t.emplace(e,0,r.y,r.height,r.width,0,i.y,i.height,i.width);}},Kf=class{constructor(t,e,r){this.binders={},this._buffers=[];let i=[];for(let n in t.paint._values){if(!r(n))continue;let a=t.paint.get(n);if(!(a instanceof ie)||!Qr(a.property.specification))continue;let s=og(n,t.type),o=a.value,l=a.property.specification.type,u=a.property.useIntegerZoom,h=a.property.specification[\"property-type\"],c=h===\"cross-faded\"||h===\"cross-faded-data-driven\";if(o.kind===\"constant\")this.binders[n]=c?new ar(o.value,s):new zi(o.value,s,l),i.push(`/u_${n}`);else if(o.kind===\"source\"||c){let p=jh(n,l,\"source\");this.binders[n]=c?n===\"line-dasharray\"?new Hf(o,l,u,e,p,t.id):new Zf(o,l,u,e,p,t.id):new Ee(o,s,l,p),i.push(`/a_${n}`);}else{let p=jh(n,l,\"composite\");this.binders[n]=new oe(o,s,l,u,e,p),i.push(`/z_${n}`);}}this.cacheKey=i.sort().join(\"\");}getMaxValue(t){let e=this.binders[t];return e instanceof Ee||e instanceof oe?e.maxValue:0;}populatePaintArrays(t,e,r){for(let i in this.binders){let n=this.binders[i];(n instanceof Ee||n instanceof oe||n instanceof qe)&&n.populatePaintArray(t,e,r);}}setConstantPatternPositions(t,e){for(let r in this.binders){let i=this.binders[r];i instanceof ar&&i.setConstantPatternPositions(t,e);}}setConstantDashPositions(t,e){for(let r in this.binders){let i=this.binders[r];i instanceof ar&&i.setConstantDashPositions(t,e);}}updatePaintArrays(t,e,r,i,n){let a=!1;for(let s of t){let o=e.getPositions(s.id);for(let l of o){let u=r.feature(l.index);for(let h in this.binders){let c=this.binders[h];(c instanceof Ee||c instanceof oe||c instanceof qe)&&c.expression.isStateDependent===!0&&(c.expression=i.paint.get(h).value,c.updatePaintArray(l.start,l.end,u,s.state,n),a=!0);}}}return a;}defines(){let t=[];for(let e in this.binders){let r=this.binders[e];(r instanceof zi||r instanceof ar)&&t.push(...r.uniformNames.map(i=>`#define HAS_UNIFORM_${i}`));}return t;}getBinderAttributes(){let t=[];for(let e in this.binders){let r=this.binders[e];if(r instanceof Ee||r instanceof oe)for(let i of r.paintVertexAttributes)t.push(i.name);else if(r instanceof qe){let i=r.getVertexAttributes();for(let n of i)t.push(n.name);}}return t;}getBinderUniforms(){let t=[];for(let e in this.binders){let r=this.binders[e];if(r instanceof zi||r instanceof ar||r instanceof oe)for(let i of r.uniformNames)t.push(i);}return t;}getPaintVertexBuffers(){return this._buffers;}getUniforms(t,e){let r=[];for(let i in this.binders){let n=this.binders[i];if(n instanceof zi||n instanceof ar||n instanceof oe){for(let a of n.uniformNames)if(e[a]){let s=n.getBinding(t,e[a],a);r.push({name:a,property:i,binding:s});}}}return r;}setUniforms(t,e,r,i){for(let{name:n,property:a,binding:s}of e)this.binders[a].setUniform(s,i,r.get(a),n);}updatePaintBuffers(t){this._buffers=[];for(let e in this.binders){let r=this.binders[e];if(t&&r instanceof qe){let i=t.fromScale===2?r.zoomInPaintVertexBuffer:r.zoomOutPaintVertexBuffer;i&&this._buffers.push(i);}else(r instanceof Ee||r instanceof oe)&&r.paintVertexBuffer&&this._buffers.push(r.paintVertexBuffer);}}upload(t){for(let e in this.binders){let r=this.binders[e];(r instanceof Ee||r instanceof oe||r instanceof qe)&&r.upload(t);}this.updatePaintBuffers();}destroy(){for(let t in this.binders){let e=this.binders[t];(e instanceof Ee||e instanceof oe||e instanceof qe)&&e.destroy();}}},dr=class{constructor(t,e,r=()=>!0){this.programConfigurations={};for(let i of t)this.programConfigurations[i.id]=new Kf(i,e,r);this.needsUpload=!1,this._featureMap=new Yf(),this._bufferOffset=0;}populatePaintArrays(t,e,r,i){for(let n in this.programConfigurations)this.programConfigurations[n].populatePaintArrays(t,e,i);e.id!==void 0&&this._featureMap.add(e.id,r,this._bufferOffset,t),this._bufferOffset=t,this.needsUpload=!0;}updatePaintArrays(t,e,r,i){for(let n of r)this.needsUpload=this.programConfigurations[n.id].updatePaintArrays(t,this._featureMap,e,n,i)||this.needsUpload;}get(t){return this.programConfigurations[t];}upload(t){if(this.needsUpload){for(let e in this.programConfigurations)this.programConfigurations[e].upload(t);this.needsUpload=!1;}}destroy(){for(let t in this.programConfigurations)this.programConfigurations[t].destroy();}};function og(t,e){return{\"text-opacity\":[\"opacity\"],\"icon-opacity\":[\"opacity\"],\"text-color\":[\"fill_color\"],\"icon-color\":[\"fill_color\"],\"text-halo-color\":[\"halo_color\"],\"icon-halo-color\":[\"halo_color\"],\"text-halo-blur\":[\"halo_blur\"],\"icon-halo-blur\":[\"halo_blur\"],\"text-halo-width\":[\"halo_width\"],\"icon-halo-width\":[\"halo_width\"],\"line-gap-width\":[\"gapwidth\"],\"line-dasharray\":[\"dasharray_to\",\"dasharray_from\"],\"line-pattern\":[\"pattern_to\",\"pattern_from\",\"pixel_ratio_to\",\"pixel_ratio_from\"],\"fill-pattern\":[\"pattern_to\",\"pattern_from\",\"pixel_ratio_to\",\"pixel_ratio_from\"],\"fill-extrusion-pattern\":[\"pattern_to\",\"pattern_from\",\"pixel_ratio_to\",\"pixel_ratio_from\"]}[t]||[t.replace(`${e}-`,\"\").replace(/-/g,\"_\")];}function lg(t){return{\"line-pattern\":{source:Br,composite:Br},\"fill-pattern\":{source:Br,composite:Br},\"fill-extrusion-pattern\":{source:Br,composite:Br},\"line-dasharray\":{source:$h,composite:$h}}[t];}function jh(t,e,r){let i={color:{source:nn,composite:So},number:{source:ma,composite:nn}};return lg(t)?.[r]||i[e][r];}I(\"ConstantBinder\",zi),I(\"CrossFadedConstantBinder\",ar),I(\"SourceExpressionBinder\",Ee),I(\"CrossFadedPatternBinder\",Zf),I(\"CrossFadedDasharrayBinder\",Hf),I(\"CompositeExpressionBinder\",oe),I(\"ProgramConfiguration\",Kf,{omit:[\"_buffers\"]}),I(\"ProgramConfigurationSet\",dr);var Co=2**14-1,Gh=-Co-1;function vr(t){let e=mt/t.extent,r=t.loadGeometry();for(let i of r)for(let n of i){let a=Math.round(n.x*e),s=Math.round(n.y*e);n.x=Yi(a,Gh,Co),n.y=Yi(s,Gh,Co),(a<n.x||a>n.x+1||s<n.y||s>n.y+1)&&Mt(\"Geometry exceeds allowed extent, reduce your vector tile buffer size\");}return r;}function si(t,e){return{type:t.type,id:t.id,properties:t.properties,geometry:e?vr(t):[]};}var Xh=-32768;function ug(t,e,r,i,n){t.emplaceBack(Xh+e*8+i,Xh+r*8+n);}var zl=class{constructor(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map(e=>e.id),this.index=t.index,this.hasDependencies=!1,this.layoutVertexArray=new Gm(),this.indexArray=new mn(),this.segments=new Jt(),this.programConfigurations=new dr(t.layers,t.zoom),this.stateDependentLayerIds=this.layers.filter(e=>e.isStateDependent()).map(e=>e.id);}populate(t,e,r){let i=this.layers[0],n=[],a=null,s=!1,o=i.type===\"heatmap\";if(i.type===\"circle\"){let c=i;a=c.layout.get(\"circle-sort-key\"),s=!a.isConstant(),o||=c.paint.get(\"circle-pitch-alignment\")===\"map\";}let l=o?e.subdivisionGranularity.circle:1,u=new at(this.zoom),h=this.layers[0]._featureFilter.needGeometry;for(let{feature:c,id:p,index:f,sourceLayerIndex:d}of t){let y=si(c,h);if(!this.layers[0]._featureFilter.filter(u,y,r))continue;let m=s?a.evaluate(y,{},r):void 0,g={id:p,properties:c.properties,type:c.type,sourceLayerIndex:d,index:f,geometry:h?y.geometry:vr(c),patterns:{},sortKey:m};n.push(g);}s&&n.sort((c,p)=>c.sortKey-p.sortKey);for(let c of n){let{geometry:p,index:f,sourceLayerIndex:d}=c,y=t[f].feature;this.addFeature(c,p,f,r,l),e.featureIndex.insert(y,p,f,d,this.index);}}update(t,e,r){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,{imagePositions:r});}addFeatures(t){}isEmpty(){return this.layoutVertexArray.length===0;}uploadPending(){return!this.uploaded||this.programConfigurations.needsUpload;}upload(t){this.uploaded||(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,tg),this.indexBuffer=t.createIndexBuffer(this.indexArray)),this.programConfigurations.upload(t),this.uploaded=!0;}destroy(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy());}addFeature(t,e,r,i,n=1){let a;switch(n){case 1:a=[0,7];break;case 3:a=[0,2,5,7];break;case 5:a=[0,1,3,4,6,7];break;case 7:a=[0,1,2,3,4,5,6,7];break;default:throw Error(`Invalid circle bucket granularity: ${n}; valid values are 1, 3, 5, 7.`);}let s=a.length;for(let o of e)for(let l of o){let u=l.x,h=l.y;if(u<0||u>=8192||h<0||h>=8192)continue;let c=this.segments.prepareSegment(s*s,this.layoutVertexArray,this.indexArray,t.sortKey),p=c.vertexLength;for(let f=0;f<s;f++)for(let d=0;d<s;d++)ug(this.layoutVertexArray,u,h,a[d],a[f]);for(let f=0;f<s-1;f++)for(let d=0;d<s-1;d++){let y=p+f*s+d,m=p+(f+1)*s+d;this.indexArray.emplaceBack(y,m+1,y+1),this.indexArray.emplaceBack(y,m,m+1);}c.vertexLength+=s*s,c.primitiveLength+=(s-1)*(s-1)*2;}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,r,{imagePositions:{},canonical:i});}};I(\"CircleBucket\",zl,{omit:[\"layers\"]});function hg(t,e){for(let r of t)if(ii(e,r))return!0;for(let r of e)if(ii(t,r))return!0;return Ll(t,e);}function Ua(t,e,r){return ii(t,e)?!0:Mo(e,t,r);}function Jf(t,e){if(t.length===1)return Yh(e,t[0]);for(let r of e)for(let i of r)if(ii(t,i))return!0;for(let r of t)if(Yh(e,r))return!0;for(let r of e)if(Ll(t,r))return!0;return!1;}function cg(t,e,r){for(let i of e){if(t.length>=3){for(let n of i)if(ii(t,n))return!0;}if(pg(t,i,r))return!0;}return!1;}function pg(t,e,r){if(t.length>1){if(Ll(t,e))return!0;for(let i of e)if(Mo(i,t,r))return!0;}for(let i of t)if(Mo(i,e,r))return!0;return!1;}function Ll(t,e){if(t.length===0||e.length===0)return!1;for(let r=0;r<t.length-1;r++){let i=t[r],n=t[r+1];for(let a=0;a<e.length-1;a++){let s=e[a],o=e[a+1];if(fg(i,n,s,o))return!0;}}return!1;}function fg(t,e,r,i){return Ye(t,r,i)!==Ye(e,r,i)&&Ye(t,e,r)!==Ye(t,e,i);}function Mo(t,e,r){let i=r*r;if(e.length===1)return t.distSqr(e[0])<i;for(let n=1;n<e.length;n++){let a=e[n-1],s=e[n];if(Qf(t,a,s)<i)return!0;}return!1;}function Qf(t,e,r){let i=e.distSqr(r);if(i===0)return t.distSqr(e);let n=((t.x-e.x)*(r.x-e.x)+(t.y-e.y)*(r.y-e.y))/i;return n<0?t.distSqr(e):n>1?t.distSqr(r):t.distSqr(r.sub(e)._mult(n)._add(e));}function Yh(t,e){let r=!1,i,n,a;for(let s of t){i=s;for(let o=0,l=i.length-1;o<i.length;l=o++)n=i[o],a=i[l],n.y>e.y!=a.y>e.y&&e.x<(a.x-n.x)*(e.y-n.y)/(a.y-n.y)+n.x&&(r=!r);}return r;}function ii(t,e){let r=!1;for(let i=0,n=t.length-1;i<t.length;n=i++){let a=t[i],s=t[n];a.y>e.y!=s.y>e.y&&e.x<(s.x-a.x)*(e.y-a.y)/(s.y-a.y)+a.x&&(r=!r);}return r;}function dg(t,e,r,i,n){for(let s of t)if(e<=s.x&&r<=s.y&&i>=s.x&&n>=s.y)return!0;let a=[new M(e,r),new M(e,n),new M(i,n),new M(i,r)];if(t.length>2){for(let s of a)if(ii(t,s))return!0;}for(let s=0;s<t.length-1;s++){let o=t[s],l=t[s+1];if(yg(o,l,a))return!0;}return!1;}function yg(t,e,r){let i=r[0],n=r[2];if(t.x<i.x&&e.x<i.x||t.x>n.x&&e.x>n.x||t.y<i.y&&e.y<i.y||t.y>n.y&&e.y>n.y)return!1;let a=Ye(t,e,r[0]);return a!==Ye(t,e,r[1])||a!==Ye(t,e,r[2])||a!==Ye(t,e,r[3]);}function jr(t,e,r){let i=e.paint.get(t).value;return i.kind===\"constant\"?i.value:r.programConfigurations.get(e.id).getMaxValue(t);}function qa(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1]);}function ja(t,e,r,i,n){if(!e[0]&&!e[1])return t;let a=M.convert(e)._mult(n);r===\"viewport\"&&a._rotate(-i);let s=[];for(let o of t)s.push(o.sub(a));return s;}function mg(t){let e=[];for(let r=0;r<t.length;r++){let i=t[r],n=e.at(-1);(r===0||n&&!i.equals(n))&&e.push(i);}return e;}function gg(t,e){let r=[];for(let i of t){let n=mg(i),a=[];for(let s=0;s<n.length;s++){let o=n[s],l=n[s-1],u=n[s+1],h=s===0?new M(0,0):o.sub(l)._unit()._perp(),c=s===n.length-1?new M(0,0):u.sub(o)._unit()._perp(),p=h._add(c)._unit(),f=p.x*c.x+p.y*c.y;f!==0&&p._mult(1/f),a.push(p._mult(e)._add(o));}r.push(a);}return r;}function xg({queryGeometry:t,size:e},r){return Ua(t,r,e);}function vg({queryGeometry:t,size:e,transform:r,unwrappedTileID:i,getElevation:n},a){return Ua(t,a,e*(r.projectTileCoordinates(a.x,a.y,i,n?.(a.x,a.y)).signedDistanceFromCamera/r.cameraToCenterDistance));}function bg({queryGeometry:t,size:e,transform:r,unwrappedTileID:i,getElevation:n},a){let s=r.projectTileCoordinates(a.x,a.y,i,n?.(a.x,a.y)).signedDistanceFromCamera,o=e*(r.cameraToCenterDistance/s);return Ua(t,Vl(a,r,i,n),o);}function wg({queryGeometry:t,size:e,transform:r,unwrappedTileID:i,getElevation:n},a){return Ua(t,Vl(a,r,i,n),e);}function td({queryGeometry:t,size:e,transform:r,unwrappedTileID:i,getElevation:n,pitchAlignment:a=\"map\",pitchScale:s=\"map\"},o){let l=a===\"map\"?s===\"map\"?xg:vg:s===\"map\"?bg:wg,u={queryGeometry:t,size:e,transform:r,unwrappedTileID:i,getElevation:n};for(let h of o)for(let c of h)if(l(u,c))return!0;return!1;}function Vl(t,e,r,i){let n=e.projectTileCoordinates(t.x,t.y,r,i?.(t.x,t.y)).point;return new M((n.x*.5+.5)*e.width,(-n.y*.5+.5)*e.height);}function Dg(t,e,r,i){return t.map(n=>Vl(n,e,r,i));}var _g,Ag=()=>_g||=new qt({\"circle-sort-key\":new U(D.layout_circle[\"circle-sort-key\"],\"circle-sort-key\")}),Sg,Eg=()=>Sg||=new qt({\"circle-radius\":new U(D.paint_circle[\"circle-radius\"],\"circle-radius\"),\"circle-color\":new U(D.paint_circle[\"circle-color\"],\"circle-color\"),\"circle-blur\":new U(D.paint_circle[\"circle-blur\"],\"circle-blur\"),\"circle-opacity\":new U(D.paint_circle[\"circle-opacity\"],\"circle-opacity\"),\"circle-translate\":new V(D.paint_circle[\"circle-translate\"],\"circle-translate\"),\"circle-translate-anchor\":new V(D.paint_circle[\"circle-translate-anchor\"],\"circle-translate-anchor\"),\"circle-pitch-scale\":new V(D.paint_circle[\"circle-pitch-scale\"],\"circle-pitch-scale\"),\"circle-pitch-alignment\":new V(D.paint_circle[\"circle-pitch-alignment\"],\"circle-pitch-alignment\"),\"circle-stroke-width\":new U(D.paint_circle[\"circle-stroke-width\"],\"circle-stroke-width\"),\"circle-stroke-color\":new U(D.paint_circle[\"circle-stroke-color\"],\"circle-stroke-color\"),\"circle-stroke-opacity\":new U(D.paint_circle[\"circle-stroke-opacity\"],\"circle-stroke-opacity\")}),Fg={get paint(){return Eg();},get layout(){return Ag();}};var Tg=class extends ce{constructor(t,e){super(t,Fg,e);}createBucket(t){return new zl(t);}queryRadius(t){let e=t;return jr(\"circle-radius\",this,e)+jr(\"circle-stroke-width\",this,e)+qa(this.paint.get(\"circle-translate\"));}queryIntersectsFeature({queryGeometry:t,feature:e,featureState:r,geometry:i,transform:n,pixelsToTileUnits:a,unwrappedTileID:s,getElevation:o}){let l=ja(t,this.paint.get(\"circle-translate\"),this.paint.get(\"circle-translate-anchor\"),-n.bearingInRadians,a),u=this.paint.get(\"circle-radius\").evaluate(e,r)+this.paint.get(\"circle-stroke-width\").evaluate(e,r),h=this.paint.get(\"circle-pitch-scale\"),c=this.paint.get(\"circle-pitch-alignment\"),p,f;return c===\"map\"?(p=l,f=u*a):(p=Dg(l,n,s,o),f=u),td({queryGeometry:p,size:f,transform:n,unwrappedTileID:s,getElevation:o,pitchAlignment:c,pitchScale:h},i);}},ed=class extends zl{};I(\"HeatmapBucket\",ed,{omit:[\"layers\"]});var kg,Ig=()=>kg||=new qt({\"heatmap-radius\":new U(D.paint_heatmap[\"heatmap-radius\"],\"heatmap-radius\"),\"heatmap-weight\":new U(D.paint_heatmap[\"heatmap-weight\"],\"heatmap-weight\"),\"heatmap-intensity\":new V(D.paint_heatmap[\"heatmap-intensity\"],\"heatmap-intensity\"),\"heatmap-color\":new Na(D.paint_heatmap[\"heatmap-color\"],\"heatmap-color\"),\"heatmap-opacity\":new V(D.paint_heatmap[\"heatmap-opacity\"],\"heatmap-opacity\")}),Cg={get paint(){return Ig();}};function Ol(t,{width:e,height:r},i,n){if(!n)n=new Uint8Array(e*r*i);else if(n instanceof Uint8ClampedArray)n=new Uint8Array(n.buffer);else if(n.length!==e*r*i)throw RangeError(`mismatched image size. expected: ${n.length} but got: ${e*r*i}`);return t.width=e,t.height=r,t.data=n,t;}function rd(t,{width:e,height:r},i){if(e===t.width&&r===t.height)return;let n=Ol({},{width:e,height:r},i);Rl(t,n,{x:0,y:0},{x:0,y:0},{width:Math.min(t.width,e),height:Math.min(t.height,r)},i),t.width=e,t.height=r,t.data=n.data;}function Rl(t,e,r,i,n,a){if(n.width===0||n.height===0)return e;if(n.width>t.width||n.height>t.height||r.x>t.width-n.width||r.y>t.height-n.height)throw RangeError(\"out of range source coordinates for image copy\");if(n.width>e.width||n.height>e.height||i.x>e.width-n.width||i.y>e.height-n.height)throw RangeError(\"out of range destination coordinates for image copy\");let s=t.data,o=e.data;if(s===o)throw Error(\"srcData equals dstData, so image is already copied\");for(let l=0;l<n.height;l++){let u=((r.y+l)*t.width+r.x)*a,h=((i.y+l)*e.width+i.x)*a;for(let c=0;c<n.width*a;c++)o[h+c]=s[u+c];}return e;}var Ga=class id{constructor(e,r){Ol(this,e,1,r);}resize(e){rd(this,e,1);}clone(){return new id({width:this.width,height:this.height},new Uint8Array(this.data));}static copy(e,r,i,n,a){Rl(e,r,i,n,a,1);}},Yt=class nd{constructor(e,r){Ol(this,e,4,r);}resize(e){rd(this,e,4);}replace(e,r){r?this.data.set(e):this.data=e instanceof Uint8ClampedArray?new Uint8Array(e.buffer):e;}clone(){return new nd({width:this.width,height:this.height},new Uint8Array(this.data));}static copy(e,r,i,n,a){Rl(e,r,i,n,a,4);}setPixel(e,r,i){let n=(e*this.width+r)*4;this.data[n+0]=Math.round(i.r*255/i.a),this.data[n+1]=Math.round(i.g*255/i.a),this.data[n+2]=Math.round(i.b*255/i.a),this.data[n+3]=Math.round(i.a*255);}};function Ps(t){let e=new Uint8Array(t.length);for(let r=0;r<t.length;r+=4){let i=t[r+3];e[r+0]=Math.round(t[r+0]*i/255),e[r+1]=Math.round(t[r+1]*i/255),e[r+2]=Math.round(t[r+2]*i/255),e[r+3]=i;}return e;}I(\"AlphaImage\",Ga),I(\"RGBAImage\",Yt);function Mg(t){let e={},r=t.resolution||256,i=t.clips?t.clips.length:1,n=t.image||new Yt({width:r,height:i});if(!A1(r))throw Error(`width is not a power of 2 - ${r}`);let a=(s,o,l)=>{e[t.evaluationKey]=l;let u=t.expression.evaluate(e);n.setPixel(s/4/r,o/4,u);};if(t.clips)for(let s=0,o=0;s<i;++s,o+=r*4)for(let l=0,u=0;l<r;l++,u+=4){let h=l/(r-1),{start:c,end:p}=t.clips[s],f=c*(1-h)+p*h;a(o,u,f);}else for(let s=0,o=0;s<r;s++,o+=4){let l=s/(r-1);a(0,o,l);}return n;}var Bg=\"big-fb\";var Pg=class extends ce{createBucket(t){return new ed(t);}constructor(t,e){super(t,Cg,e),this.heatmapFbos=new Map(),this._updateColorRamp();}_handleSpecialPaintPropertyUpdate(t){t===\"heatmap-color\"&&this._updateColorRamp();}_updateColorRamp(){let t=this._transitionablePaint._values[\"heatmap-color\"].value.expression;this.colorRamp=Mg({expression:t,evaluationKey:\"heatmapDensity\",image:this.colorRamp}),this.colorRampTexture=null;}resize(){this.heatmapFbos.has(\"big-fb\")&&this.heatmapFbos.delete(Bg);}queryRadius(t){return jr(\"heatmap-radius\",this,t);}queryIntersectsFeature({queryGeometry:t,feature:e,featureState:r,geometry:i,transform:n,pixelsToTileUnits:a,unwrappedTileID:s,getElevation:o}){return td({queryGeometry:t,size:this.paint.get(\"heatmap-radius\").evaluate(e,r)*a,transform:n,unwrappedTileID:s,getElevation:o},i);}hasOffscreenPass(){return this.paint.get(\"heatmap-opacity\")!==0&&!this.isHidden();}},zg,Lg=()=>zg||=new qt({\"hillshade-illumination-direction\":new V(D.paint_hillshade[\"hillshade-illumination-direction\"],\"hillshade-illumination-direction\"),\"hillshade-illumination-altitude\":new V(D.paint_hillshade[\"hillshade-illumination-altitude\"],\"hillshade-illumination-altitude\"),\"hillshade-illumination-anchor\":new V(D.paint_hillshade[\"hillshade-illumination-anchor\"],\"hillshade-illumination-anchor\"),\"hillshade-exaggeration\":new V(D.paint_hillshade[\"hillshade-exaggeration\"],\"hillshade-exaggeration\"),\"hillshade-shadow-color\":new V(D.paint_hillshade[\"hillshade-shadow-color\"],\"hillshade-shadow-color\"),\"hillshade-highlight-color\":new V(D.paint_hillshade[\"hillshade-highlight-color\"],\"hillshade-highlight-color\"),\"hillshade-accent-color\":new V(D.paint_hillshade[\"hillshade-accent-color\"],\"hillshade-accent-color\"),\"hillshade-method\":new V(D.paint_hillshade[\"hillshade-method\"],\"hillshade-method\"),resampling:new V(D.paint_hillshade.resampling,\"resampling\")}),Vg={get paint(){return Lg();}};var Og=class extends ce{constructor(t,e){super(t,Vg,e),this.recalculate({zoom:0,zoomHistory:{}},void 0);}getIlluminationProperties(){let t=this.paint.get(\"hillshade-illumination-direction\").values,e=this.paint.get(\"hillshade-illumination-altitude\").values,r=this.paint.get(\"hillshade-highlight-color\").values,i=this.paint.get(\"hillshade-shadow-color\").values,n=Math.max(t.length,e.length,r.length,i.length);t=t.concat(Array(n-t.length).fill(t.at(-1))),e=e.concat(Array(n-e.length).fill(e.at(-1))),r=r.concat(Array(n-r.length).fill(r.at(-1))),i=i.concat(Array(n-i.length).fill(i.at(-1)));let a=e.map(oh);return{directionRadians:t.map(oh),altitudeRadians:a,shadowColor:i,highlightColor:r};}hasOffscreenPass(){return this.paint.get(\"hillshade-exaggeration\")!==0&&!this.isHidden();}},Rg,$g=()=>Rg||=new qt({\"color-relief-opacity\":new V(D[\"paint_color-relief\"][\"color-relief-opacity\"],\"color-relief-opacity\"),\"color-relief-color\":new Na(D[\"paint_color-relief\"][\"color-relief-color\"],\"color-relief-color\"),resampling:new V(D[\"paint_color-relief\"].resampling,\"resampling\")}),Ng={get paint(){return $g();}};function Un(t){return\"data\"in t;}var Wh=class{constructor(t,e,r,i){this.context=t,this.format=r,this.texture=t.gl.createTexture(),this._ownedHandle=this.texture,this.update(e,i);}update(t,e,r){let{width:i,height:n}=t,a=(this.size?.[0]!==i||this.size[1]!==n)&&!r,{context:s}=this,{gl:o}=s;this.useMipmap=!!e?.useMipmap,a&&this.size&&this.format===o.RGBA&&(o.deleteTexture(this.texture),this.texture=o.createTexture(),this._ownedHandle=this.texture,this.magFilter=void 0,this.minFilter=void 0,this.wrap=void 0),o.bindTexture(o.TEXTURE_2D,this.texture),s.pixelStoreUnpackFlipY.set(!1),s.pixelStoreUnpack.set(1);let l=this.format===o.RGBA&&e?.premultiply!==!1;if(a){if(this.size=[i,n],this.format===o.RGBA&&i>0&&n>0){let u=this.useMipmap?Math.floor(Math.log2(Math.max(i,n)))+1:1;if(o.texStorage2D(o.TEXTURE_2D,u,o.RGBA8,i,n),Un(t)){s.pixelStoreUnpackPremultiplyAlpha.set(!1);let{data:h}=t;l&&h&&(h=Ps(h)),h&&o.texSubImage2D(o.TEXTURE_2D,0,0,0,i,n,o.RGBA,o.UNSIGNED_BYTE,h);}else s.pixelStoreUnpackPremultiplyAlpha.set(l),o.texSubImage2D(o.TEXTURE_2D,0,0,0,o.RGBA,o.UNSIGNED_BYTE,t);}else Un(t)?(s.pixelStoreUnpackPremultiplyAlpha.set(!1),this._uploadRawData(t,l,i,n,o)):(s.pixelStoreUnpackPremultiplyAlpha.set(l),this._uploadDomImage(t,o));}else{let{x:u,y:h}=r||{x:0,y:0};Un(t)?(s.pixelStoreUnpackPremultiplyAlpha.set(!1),this._updateRawData(t,l,u,h,i,n,o)):(s.pixelStoreUnpackPremultiplyAlpha.set(l),this._updateDomImage(t,u,h,o));}this.useMipmap&&!(Un(t)&&t.data===null)&&o.generateMipmap(o.TEXTURE_2D),s.pixelStoreUnpackFlipY.setDefault(),s.pixelStoreUnpack.setDefault(),s.pixelStoreUnpackPremultiplyAlpha.setDefault();}_uploadDomImage(t,e){e.texImage2D(e.TEXTURE_2D,0,this.format,this.format,e.UNSIGNED_BYTE,t);}_uploadRawData(t,e,r,i,n){let{data:a}=t;e&&a&&(a=Ps(a)),n.texImage2D(n.TEXTURE_2D,0,this.format,r,i,0,this.format,n.UNSIGNED_BYTE,a);}_updateDomImage(t,e,r,i){i.texSubImage2D(i.TEXTURE_2D,0,e,r,i.RGBA,i.UNSIGNED_BYTE,t);}_updateRawData(t,e,r,i,n,a,s){let{data:o}=t;e&&o&&(o=Ps(o)),s.texSubImage2D(s.TEXTURE_2D,0,r,i,n,a,s.RGBA,s.UNSIGNED_BYTE,o);}bind(t,e,r){let{context:i}=this,{gl:n}=i;this.texture!==this._ownedHandle&&(this.texture=this._ownedHandle),n.bindTexture(n.TEXTURE_2D,this.texture),(r===n.LINEAR_MIPMAP_NEAREST||r===n.LINEAR_MIPMAP_LINEAR)&&!this.useMipmap&&(r=n.LINEAR);let a=r||t;t!==this.magFilter&&(n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MAG_FILTER,t),this.magFilter=t),a!==this.minFilter&&(n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,a),this.minFilter=a),e!==this.wrap&&(n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,e),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,e),this.wrap=e);}generateMipmap(){if(!this.useMipmap)return;let{gl:t}=this.context;t.bindTexture(t.TEXTURE_2D,this.texture),t.generateMipmap(t.TEXTURE_2D);}destroy(){let{gl:t}=this.context;t.deleteTexture(this.texture),this.texture=null,this._ownedHandle=null;}},$l=(class aa{constructor(e,r,i,n=1,a=1,s=1,o=0){if(this.uid=e,r.height!==r.width)throw RangeError(\"DEM tiles must be square\");if(i&&![\"mapbox\",\"terrarium\",\"custom\"].includes(i)){Mt(`\"${i}\" is not a valid encoding type. Valid types include \"mapbox\", \"terrarium\" and \"custom\".`);return;}this.stride=r.height;let l=this.dim=r.height-4;switch(this.data=new Uint32Array(r.data.buffer),aa.byteViewCache.set(this,new Uint8Array(this.data.buffer)),i){case\"terrarium\":this.redFactor=256,this.greenFactor=1,this.blueFactor=1/256,this.baseShift=32768;break;case\"custom\":this.redFactor=n,this.greenFactor=a,this.blueFactor=s,this.baseShift=o;break;default:this.redFactor=6553.6,this.greenFactor=25.6,this.blueFactor=.1,this.baseShift=1e4;}for(let h=-2;h<l+2;h++){let c=this._idx(0,Math.max(0,Math.min(l-1,h)));(h<0||h>=l)&&this.data.copyWithin(this._idx(0,h),c,c+l),this.data.fill(this.data[c],this._idx(-2,h),this._idx(0,h)),this.data.fill(this.data[c+l-1],this._idx(l,h),this._idx(l+1,h)+1);}let u=this._getByteView();this.min=2**53-1,this.max=-(2**53-1);for(let h=0;h<l;h++)for(let c=0;c<l;c++){let p=this._idx(h,c)*4,f=this._unpackAtIndex(u,p);f>this.max&&(this.max=f),f<this.min&&(this.min=f);}}get(e,r){let i=this._getByteView(),n=this._idx(e,r)*4;return this._unpackAtIndex(i,n);}sampleBilinear(e,r){let i=Math.floor(e),n=Math.floor(r);if(i<-1||i>=this.dim||n<-1||n>=this.dim)throw RangeError(`Out of range source coordinates for DEM data. x: ${e}, y: ${r}, dim: ${this.dim}`);let a=this._getByteView(),s=((n+2)*this.stride+i+2)*4,o=this.stride*4,l=e-i,u=r-n,h=this._unpackAtIndex(a,s),c=this._unpackAtIndex(a,s+4),p=this._unpackAtIndex(a,s+o),f=this._unpackAtIndex(a,s+o+4);return h*(1-l)*(1-u)+c*l*(1-u)+p*(1-l)*u+f*l*u;}getUnpackVector(){return[this.redFactor,this.greenFactor,this.blueFactor,this.baseShift];}_idx(e,r){if(e<-2||e>=this.dim+2||r<-2||r>=this.dim+2)throw RangeError(`Out of range source coordinates for DEM data. x: ${e}, y: ${r}, dim: ${this.dim}`);return(r+2)*this.stride+(e+2);}unpack(e,r,i){return e*this.redFactor+r*this.greenFactor+i*this.blueFactor-this.baseShift;}pack(e){return ad(e,this.getUnpackVector());}getPixels(){return new Yt({width:this.stride,height:this.stride},this._getByteView());}backfillBorder(e,r,i){if(this.dim!==e.dim)throw Error(\"dem dimension mismatch\");let n=r*this.dim,a=r*this.dim+this.dim,s=i*this.dim,o=i*this.dim+this.dim;switch(r){case-1:n=a-2;break;case 1:a=n+2;}switch(i){case-1:s=o-2;break;case 1:o=s+2;}let l=-r*this.dim,u=-i*this.dim;for(let h=s;h<o;h++)for(let c=n;c<a;c++)this.data[this._idx(c,h)]=e.data[this._idx(c+l,h+u)];}_getByteView(){let e=aa.byteViewCache.get(this);return e?.buffer!==this.data.buffer&&(e=new Uint8Array(this.data.buffer),aa.byteViewCache.set(this,e)),e;}_unpackAtIndex(e,r){return this.unpack(e[r],e[r+1],e[r+2]);}static#_=_staticBlock2=()=>(this.byteViewCache=new WeakMap(),this);},_staticBlock2());function ad(t,e){let r=e[0],i=e[1],n=e[2],a=e[3],s=Math.min(r,i,n),o=Math.round((t+a)/s);return{r:Math.floor(o*s/r)%256,g:Math.floor(o*s/i)%256,b:Math.floor(o*s/n)%256};}I(\"DEMData\",$l);var Ug=class extends ce{constructor(t,e){super(t,Ng,e);}_createColorRamp(t){let e={elevationStops:[],colorStops:[]},r=this._transitionablePaint._values[\"color-relief-color\"].value.expression;if(r instanceof Qi&&r._styleExpression.expression instanceof xe){this.colorRampExpression=r;let a=r._styleExpression.expression;e.elevationStops=a.labels,e.colorStops=[];for(let s of e.elevationStops)e.colorStops.push(a.evaluate({globals:{elevation:s}}));}if(e.elevationStops.length<1&&(e.elevationStops=[0],e.colorStops=[gt.transparent]),e.elevationStops.length<2&&(e.elevationStops.push(e.elevationStops[0]+1),e.colorStops.push(e.colorStops[0])),e.elevationStops.length<=t)return e;let i={elevationStops:[],colorStops:[]},n=(e.elevationStops.length-1)/(t-1);for(let a=0;a<e.elevationStops.length-.5;a+=n)i.elevationStops.push(e.elevationStops[Math.round(a)]),i.colorStops.push(e.colorStops[Math.round(a)]);return Mt(`Too many colors in specification of ${this.id} color-relief layer, may not render properly. Max possible colors: ${t}, provided: ${e.elevationStops.length}`),i;}_colorRampChanged(){return this.colorRampExpression!=this._transitionablePaint._values[\"color-relief-color\"].value.expression;}getColorRampTextures(t,e,r){if(this.colorRampTextures&&!this._colorRampChanged())return this.colorRampTextures;let i=this._createColorRamp(e),n=new Yt({width:i.colorStops.length,height:1}),a=new Yt({width:i.colorStops.length,height:1});for(let s=0;s<i.elevationStops.length;s++){let o=ad(i.elevationStops[s],r);a.setPixel(0,s,new gt(o.r/255,o.g/255,o.b/255,1)),n.setPixel(0,s,i.colorStops[s]);}return this.colorRampTextures={elevationTexture:new Wh(t,a,t.gl.RGBA),colorTexture:new Wh(t,n,t.gl.RGBA)},this.colorRampTextures;}hasOffscreenPass(){return!this.isHidden()&&!!this.colorRampTextures;}},Bo=At([{name:\"a_pos\",components:2,type:\"Int16\"}],4),qg=Bo.members;Bo.size,Bo.alignment;function ga(t,e,r){let i=r.patternDependencies,n=!1;for(let a of e){let s=a.paint.get(`${t}-pattern`);s.isConstant()||(n=!0);let o=s.constantOr(null);o&&(n=!0,i[o.to]=!0,i[o.from]=!0);}return n;}function Nl(t,e,r,i,n){let{zoom:a}=i,s=n.patternDependencies;for(let o of e){let l=o.paint.get(`${t}-pattern`).value;if(l.kind!==\"constant\"){let u=l.evaluate({zoom:a-1},r,{},n.availableImages),h=l.evaluate({zoom:a},r,{},n.availableImages),c=l.evaluate({zoom:a+1},r,{},n.availableImages);u=u?.name?u.name:u,h=h?.name?h.name:h,c=c?.name?c.name:c,s[u]=!0,s[h]=!0,s[c]=!0,r.patterns[o.id]={min:u,mid:h,max:c};}}return r;}var an=new Set(),Po=!1;function jg(t,e,r=2){let i=e&&e.length,n=i?e[0]*r:t.length;an.size&&an.clear();let a=sd(t,0,n,r,!0),s=[];if(!a||a.next===a.prev)return s;let o=0,l=0,u=0;if(i&&(a=Zg(t,e,a,r)),t.length>80*r){o=t[0],l=t[1];let h=o,c=l;for(let p=r;p<n;p+=r){let f=t[p],d=t[p+1];f<o&&(o=f),d<l&&(l=d),f>h&&(h=f),d>c&&(c=d);}u=Math.max(h-o,c-l),u=u===0?0:32767/u;}return zo(a,s,o,l,u),s;}function sd(t,e,r,i,n){let a=null;if(n===lx(t,e,r,i)>0)for(let s=e;s<r;s+=i)a=Kh(s/i|0,t[s],t[s+1],a);else for(let s=r-i;s>=e;s-=i)a=Kh(s/i|0,t[s],t[s+1],a);return a&&sn(a,a.next)&&(ln(a),a=a.next),a;}function yr(t,e=t){let r=e===t,i=t,n;do n=!1,i!==i.next&&(an.size===0||!an.has(i))&&(sn(i,i.next)||Et(i.prev,i,i.next)===0)?((r||i===e)&&(e=i.prev),Po=!0,ln(i),i=i.prev,n=!0):(r||i!==e)&&(i=i.next,n=!r);while(n||i!==e);return e;}function zo(t,e,r,i,n){n&&rx(t,r,i,n);let a=t,s=!1;for(;t.prev!==t.next;){let o=t.prev,l=t.next;if(Et(o,t,l)<0&&(n?Xg(t,r,i,n):Gg(t))){e.push(o.i,t.i,l.i),ln(t),t=l,a=l;continue;}if(t=l,t===a){if(Po=!1,t=yr(t),Po){a=t;continue;}if(!s){t=Yg(t,e),a=t,s=!0;continue;}Wg(t,e,r,i,n);break;}}}function Gg(t){let e=t.prev,r=t,i=t.next,n=e.x,a=r.x,s=i.x,o=e.y,l=r.y,u=i.y,h=Math.min(n,a,s),c=Math.min(o,l,u),p=Math.max(n,a,s),f=Math.max(o,l,u),d=i.next;for(;d!==e;){if(d.x>=h&&d.x<=p&&d.y>=c&&d.y<=f&&(n!==d.x||o!==d.y)&&va(n,o,a,l,s,u,d.x,d.y)&&Et(d.prev,d,d.next)>=0)return!1;d=d.next;}return!0;}function Xg(t,e,r,i){let n=t.prev,a=t,s=t.next,o=n.x,l=a.x,u=s.x,h=n.y,c=a.y,p=s.y,f=Math.min(o,l,u),d=Math.min(h,c,p),y=Math.max(o,l,u),m=Math.max(h,c,p),g=Ro(f,d,e,r,i),x=Ro(y,m,e,r,i),b=t.prevZ;for(;b&&b.z>=g;){if(b.x>=f&&b.x<=y&&b.y>=d&&b.y<=m&&b!==s&&(o!==b.x||h!==b.y)&&va(o,h,l,c,u,p,b.x,b.y)&&Et(b.prev,b,b.next)>=0)return!1;b=b.prevZ;}let v=t.nextZ;for(;v&&v.z<=x;){if(v.x>=f&&v.x<=y&&v.y>=d&&v.y<=m&&v!==s&&(o!==v.x||h!==v.y)&&va(o,h,l,c,u,p,v.x,v.y)&&Et(v.prev,v,v.next)>=0)return!1;v=v.nextZ;}return!0;}function Yg(t,e){let r=t,i=!1;do{let n=r.prev,a=r.next.next;ld(n,r,r.next,a,!1)&&on(n,a)&&on(a,n)&&(e.push(n.i,r.i,a.i),ln(r),ln(r.next),r=t=a,i=!0),r=r.next;}while(r!==t);return i?yr(r):r;}function Wg(t,e,r,i,n){let a=t;do{let s=a.next.next;for(;s!==a.prev;){if(a.i!==s.i&&ax(a,s)){let o=ud(a,s);a=yr(a,a.next),o=yr(o,o.next),zo(a,e,r,i,n),zo(o,e,r,i,n);return;}s=s.next;}a=a.next;}while(a!==t);}var Lo=!1;function Zg(t,e,r,i){let n=[];for(let a=0,s=e.length;a<s;a++){let o=sd(t,e[a]*i,a<s-1?e[a+1]*i:t.length,i,!1);o===o.next&&an.add(o),n.push(nx(o));}n.sort(Hg),Jg(t.length/i,e.length),od(r,r),Lo=!0;for(let a=0;a<n.length;a++)r=Kg(n[a],r);return Lo=!1,yr(r);}function Hg(t,e){return t.x-e.x||t.y-e.y||(t.next.y-t.y)/(t.next.x-t.x)-(e.next.y-e.y)/(e.next.x-e.x);}function Kg(t,e){let r=tx(t,e);if(!r)return e;let i=ud(r,t),n=i.next;return od(r,n.next),yr(i,i.next),yr(r,r.next);}var wt=new Float64Array(),xa=0,Vo=[],Oo=[];function Jg(t,e){let r=Math.ceil((t+2*e)/16)+e+2;wt.length<r*4&&(wt=new Float64Array(r*4)),xa=0;}function od(t,e){let r=t;do{let i=xa++;Vo[i]=r;let n=1/0,a=1/0,s=-1/0,o=-1/0,l=0;do{let h=r.next;r.z=i,r.x<n&&(n=r.x),r.x>s&&(s=r.x),r.y<a&&(a=r.y),r.y>o&&(o=r.y),h.x<n&&(n=h.x),h.x>s&&(s=h.x),h.y<a&&(a=h.y),h.y>o&&(o=h.y),r=h;}while(++l<16&&r!==e);Oo[i]=r;let u=i*4;wt[u]=n,wt[u+1]=a,wt[u+2]=s,wt[u+3]=o;}while(r!==e);}function Qg(t,e){let r=t.z*4;e.x<wt[r]&&(wt[r]=e.x),e.y<wt[r+1]&&(wt[r+1]=e.y),e.x>wt[r+2]&&(wt[r+2]=e.x),e.y>wt[r+3]&&(wt[r+3]=e.y);}function Zh(t){let e=Oo[t];for(;e.prev.next!==e;)e=e.next;return Oo[t]=e,e;}function Hh(t){let e=Vo[t];for(;e.prev.next!==e;)e=e.next;return Vo[t]=e,e;}function tx(t,e){let r=e,i=t.x,n=t.y,a=-1/0,s;if(sn(t,r))return r;for(let p=0,f=0;p<xa;p++,f+=4){if(n<wt[f+1]||n>wt[f+3]||wt[f]>i||wt[f+2]<=a)continue;let d=Zh(p);r=Hh(p);do{if(r.prev.next===r){if(sn(t,r.next))return r.next;if(n<=r.y&&n>=r.next.y&&r.next.y!==r.y){let y=r.x+(n-r.y)*(r.next.x-r.x)/(r.next.y-r.y);if(y<=i&&y>a&&(a=y,s=r.x<r.next.x?r:r.next,y===i))return s;}}r=r.next;}while(r!==d);}if(!s)return null;let o=s.x,l=s.y,u=Math.min(n,l),h=Math.max(n,l),c=1/0;for(let p=0,f=0;p<xa;p++,f+=4){if(wt[f+2]<o||wt[f]>i||wt[f+3]<u||wt[f+1]>h)continue;let d=Zh(p);r=Hh(p);do{if(r.prev.next===r&&i>=r.x&&r.x>=o&&i!==r.x&&va(n<l?i:a,n,o,l,n<l?a:i,n,r.x,r.y)){let y=Math.abs(n-r.y)/(i-r.x);(on(r,t)||r.y===n&&r.next.y===n&&r.next.x>i)&&(y<c||y===c&&(r.x>s.x||r.x===s.x&&ex(s,r)))&&(s=r,c=y);}r=r.next;}while(r!==d);}return s;}function ex(t,e){return Et(t.prev,t,e.prev)<0&&Et(e.next,t,t.next)<0;}var re=[],Ai=[],ir=new Uint32Array(),Si=new Uint32Array(),Ei=new Uint32Array(256);function rx(t,e,r,i){let n=t,a=0;do n.z=Ro(n.x,n.y,e,r,i),re[a++]=n,n=n.next;while(n!==t);ix(a);let s=null;for(let o=0;o<a;o++){let l=re[o];l.prevZ=s,s&&(s.nextZ=l),s=l;}s.nextZ=null;}function ix(t){if(t<=32){for(let e=1;e<t;e++){let r=re[e],i=r.z,n=e-1;for(;n>=0&&re[n].z>i;)re[n+1]=re[n],n--;re[n+1]=r;}return;}ir.length<t&&(ir=new Uint32Array(t),Si=new Uint32Array(t),Ai=Array(t));for(let e=0;e<t;e++)ir[e]=re[e].z;qn(t,re,ir,Ai,Si,0),qn(t,Ai,Si,re,ir,8),qn(t,re,ir,Ai,Si,16),qn(t,Ai,Si,re,ir,24);}function qn(t,e,r,i,n,a){Ei.fill(0);for(let o=0;o<t;o++)Ei[r[o]>>>a&255]++;let s=0;for(let o=0;o<256;o++){let l=Ei[o];Ei[o]=s,s+=l;}for(let o=0;o<t;o++){let l=r[o],u=Ei[l>>>a&255]++;i[u]=e[o],n[u]=l;}}function Ro(t,e,r,i,n){return t=(t-r)*n|0,e=(e-i)*n|0,t=(t|t<<8)&16711935,t=(t|t<<4)&252645135,t=(t|t<<2)&858993459,t=(t|t<<1)&1431655765,e=(e|e<<8)&16711935,e=(e|e<<4)&252645135,e=(e|e<<2)&858993459,e=(e|e<<1)&1431655765,t|e<<1;}function nx(t){let e=t,r=t;do(e.x<r.x||e.x===r.x&&e.y<r.y)&&(r=e),e=e.next;while(e!==t);return r;}function va(t,e,r,i,n,a,s,o){return(n-s)*(e-o)>=(t-s)*(a-o)&&(t-s)*(i-o)>=(r-s)*(e-o)&&(r-s)*(a-o)>=(n-s)*(i-o);}function ax(t,e){let r=sn(t,e)&&Et(t.prev,t,t.next)>0&&Et(e.prev,e,e.next)>0;return t.next.i!==e.i&&(r||on(t,e)&&on(e,t)&&(Et(t.prev,t,e.prev)!==0||Et(t,e.prev,e)!==0))&&!sx(t,e)&&(r||ox(t,e));}function Et(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y);}function sn(t,e){return t.x===e.x&&t.y===e.y;}function ld(t,e,r,i,n=!0){let a=Et(t,e,r),s=Et(t,e,i),o=Et(r,i,t),l=Et(r,i,e);return(a>0&&s<0||a<0&&s>0)&&(o>0&&l<0||o<0&&l>0)?!0:n?!!(a===0&&jn(t,r,e)||s===0&&jn(t,i,e)||o===0&&jn(r,t,i)||l===0&&jn(r,e,i)):!1;}function jn(t,e,r){return e.x<=Math.max(t.x,r.x)&&e.x>=Math.min(t.x,r.x)&&e.y<=Math.max(t.y,r.y)&&e.y>=Math.min(t.y,r.y);}function sx(t,e){let r=Math.min(t.x,e.x),i=Math.max(t.x,e.x),n=Math.min(t.y,e.y),a=Math.max(t.y,e.y),s=t;do{let o=s.next;if(s.x>i&&o.x>i||s.x<r&&o.x<r||s.y>a&&o.y>a||s.y<n&&o.y<n){s=o;continue;}if(s.i!==t.i&&o.i!==t.i&&s.i!==e.i&&o.i!==e.i&&ld(s,o,t,e))return!0;s=o;}while(s!==t);return!1;}function on(t,e){return Et(t.prev,t,t.next)<0?Et(t,e,t.next)>=0&&Et(t,t.prev,e)>=0:Et(t,e,t.prev)<0||Et(t,t.next,e)<0;}function ox(t,e){let r=t,i=!1,n=(t.x+e.x)/2,a=(t.y+e.y)/2;do{let s=r.next;r.y>a!=s.y>a&&n<(s.x-r.x)*(a-r.y)/(s.y-r.y)+r.x&&(i=!i),r=s;}while(r!==t);return i;}function ud(t,e){let r=$o(t.i,t.x,t.y),i=$o(e.i,e.x,e.y),n=t.next,a=e.prev;return t.next=e,e.prev=t,r.next=n,n.prev=r,i.next=r,r.prev=i,a.next=i,i.prev=a,i;}function Kh(t,e,r,i){let n=$o(t,e,r);return i?(n.next=i.next,n.prev=i,i.next.prev=n,i.next=n):(n.prev=n,n.next=n),n;}function ln(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ),Lo&&Qg(t.prev,t.next);}function $o(t,e,r){return{i:t,x:e,y:r,prev:null,next:null,z:0,prevZ:null,nextZ:null};}function lx(t,e,r,i){let n=0;for(let a=e,s=r-i;a<r;a+=i)n+=(t[s]-t[a])*(t[a+1]+t[s+1]),s=a;return n;}var Li=class{constructor(t,e){if(e>t)throw Error(\"Min granularity must not be greater than base granularity.\");this._baseZoomGranularity=t,this._minGranularity=e;}getGranularityForZoomLevel(t){let e=1<<t;return Math.max(Math.floor(this._baseZoomGranularity/e),this._minGranularity,1);}},ux=(class hd{constructor(e){this.fill=e.fill,this.line=e.line,this.tile=e.tile,this.stencil=e.stencil,this.circle=e.circle;}static#_=_staticBlock3=()=>(this.noSubdivision=new hd({fill:new Li(0,0),line:new Li(0,0),tile:new Li(0,0),stencil:new Li(0,0),circle:1}),this);},_staticBlock3());I(\"SubdivisionGranularityExpression\",Li),I(\"SubdivisionGranularitySetting\",ux);var zs=-32768,Ls=32767,hx=class{constructor(t,e){this._vertexBuffer=[],this._vertexDictionary=new Map(),this._used=!1,this._granularity=t,this._granularityCellSize=mt/t,this._canonical=e;}_getKey(t,e){return t+=32768,e+=32768,t<<16|e<<0;}_vertexToIndex(t,e){if(t<-32768||e<-32768||t>32767||e>32767)throw Error(\"Vertex coordinates are out of signed 16 bit integer range.\");let r=Math.round(t)|0,i=Math.round(e)|0,n=this._getKey(r,i),a=this._vertexDictionary.get(n);if(a!==void 0)return a;let s=this._vertexBuffer.length/2;return this._vertexDictionary.set(n,s),this._vertexBuffer.push(r,i),s;}_subdivideTrianglesScanline(t,e){if(this._granularity<2)return fx(this._vertexBuffer,px(t,e));let r=[],i=t.length;for(let n=0;n<i;n+=3){let a=[e[t[n+0]],e[t[n+1]],e[t[n+2]]],s=[this._vertexBuffer[a[0]*2+0],this._vertexBuffer[a[0]*2+1],this._vertexBuffer[a[1]*2+0],this._vertexBuffer[a[1]*2+1],this._vertexBuffer[a[2]*2+0],this._vertexBuffer[a[2]*2+1]],o=1/0,l=1/0,u=-1/0,h=-1/0;for(let y=0;y<3;y++){let m=s[y*2],g=s[y*2+1];o=Math.min(o,m),u=Math.max(u,m),l=Math.min(l,g),h=Math.max(h,g);}if(o===u||l===h)continue;let c=Math.floor(o/this._granularityCellSize),p=Math.ceil(u/this._granularityCellSize),f=Math.floor(l/this._granularityCellSize),d=Math.ceil(h/this._granularityCellSize);if(c===p&&f===d){r.push(...a);continue;}for(let y=f;y<d;y++){let m=this._scanlineGenerateVertexRingForCellRow(y,s,a);dx(this._vertexBuffer,m,r);}}return r;}_scanlineGenerateVertexRingForCellRow(t,e,r){let i=t*this._granularityCellSize,n=i+this._granularityCellSize,a=[];for(let s=0;s<3;s++){let o=e[s*2],l=e[s*2+1],u=e[(s+1)*2%6],h=e[((s+1)*2+1)%6],c=e[(s+2)*2%6],p=e[((s+2)*2+1)%6],f=u-o,d=h-l,y=f===0,m=d===0,g=(i-l)/d,x=(n-l)/d,b=Math.min(g,x),v=Math.max(g,x);if(!m&&(b>=1||v<=0)||m&&(l<i||l>n)){h>=i&&h<=n&&a.push(r[(s+1)%3]);continue;}if(!m&&b>0){let A=o+f*b,S=l+d*b;a.push(this._vertexToIndex(A,S));}let w=o+f*Math.max(b,0),_=o+f*Math.min(v,1);if(y||this._generateIntraEdgeVertices(a,o,l,u,h,w,_),!m&&v<1){let A=o+f*v,S=l+d*v;a.push(this._vertexToIndex(A,S));}(m||h>=i&&h<=n)&&a.push(r[(s+1)%3]),!m&&(h<=i||h>=n)&&this._generateInterEdgeVertices(a,o,l,u,h,c,p,_,i,n);}return a;}_generateIntraEdgeVertices(t,e,r,i,n,a,s){let o=i-e,l=n-r,u=l===0,h=u?Math.min(e,i):Math.min(a,s),c=u?Math.max(e,i):Math.max(a,s),p=Math.floor(h/this._granularityCellSize)+1,f=Math.ceil(c/this._granularityCellSize)-1;if(u?e<i:a<s)for(let d=p;d<=f;d++){let y=d*this._granularityCellSize,m=r+l*(y-e)/o;t.push(this._vertexToIndex(y,m));}else for(let d=f;d>=p;d--){let y=d*this._granularityCellSize,m=r+l*(y-e)/o;t.push(this._vertexToIndex(y,m));}}_generateInterEdgeVertices(t,e,r,i,n,a,s,o,l,u){let h=n-r,c=a-i,p=s-n,f=(l-n)/p,d=(u-n)/p,y=Math.min(f,d),m=Math.max(f,d),g=i+c*y,x=Math.floor(Math.min(g,o)/this._granularityCellSize)+1,b=Math.ceil(Math.max(g,o)/this._granularityCellSize)-1,v=o<g,w=p===0;if(w&&(s===l||s===u))return;if(w||y>=1||m<=0){let A=e-a,S=r-s,F=(l-s)/S,z=(u-s)/S,$=a+A*Math.min(F,z);x=Math.floor(Math.min($,o)/this._granularityCellSize)+1,b=Math.ceil(Math.max($,o)/this._granularityCellSize)-1,v=o<$;}let _=h>0?u:l;if(v)for(let A=x;A<=b;A++){let S=A*this._granularityCellSize;t.push(this._vertexToIndex(S,_));}else for(let A=b;A>=x;A--){let S=A*this._granularityCellSize;t.push(this._vertexToIndex(S,_));}}_generateOutline(t,e){let r=[],i=0;for(let n of t){let a=this._granularity<2?this._ringPathIndices(n,i,e):this._pointArrayToIndices(or(n,this._granularity,!0));i+=n.length;let s=[];for(let o=1;o<a.length;o++)s.push(a[o-1]),s.push(a[o]);r.push(s);}return r;}_ringPathIndices(t,e,r){let i=r.slice(e,e+t.length);return i.length>=2&&pd(t)&&i.push(i[0]),i;}_handlePoles(t){let e=!1,r=!1;this._canonical&&(this._canonical.y===0&&(e=!0),this._canonical.y===(1<<this._canonical.z)-1&&(r=!0)),(e||r)&&this._fillPoles(t,e,r);}_ensureNoPoleVertices(){let t=this._vertexBuffer;for(let e=0;e<t.length;e+=2){let r=t[e+1];r===-32768&&(t[e+1]=-32767),r===32767&&(t[e+1]=32766);}}_generatePoleQuad(t,e,r,i,n,a){i>n==(a===-32768)?(t.push(r),t.push(e),t.push(this._vertexToIndex(i,a)),t.push(this._vertexToIndex(n,a)),t.push(r),t.push(this._vertexToIndex(i,a))):(t.push(e),t.push(r),t.push(this._vertexToIndex(i,a)),t.push(r),t.push(this._vertexToIndex(n,a)),t.push(this._vertexToIndex(i,a)));}_fillPoles(t,e,r){let i=this._vertexBuffer,n=mt,a=t.length;for(let s=2;s<a;s+=3){let o=t[s-2],l=t[s-1],u=t[s],h=i[o*2],c=i[o*2+1],p=i[l*2],f=i[l*2+1],d=i[u*2],y=i[u*2+1];e&&(c===0&&f===0&&this._generatePoleQuad(t,o,l,h,p,zs),f===0&&y===0&&this._generatePoleQuad(t,l,u,p,d,zs),y===0&&c===0&&this._generatePoleQuad(t,u,o,d,h,zs)),r&&(c===n&&f===n&&this._generatePoleQuad(t,o,l,h,p,Ls),f===n&&y===n&&this._generatePoleQuad(t,l,u,p,d,Ls),y===n&&c===n&&this._generatePoleQuad(t,u,o,d,h,Ls));}}_initializeVertices(t){let e=[];for(let r=0;r<t.length;r+=2)e.push(this._vertexToIndex(t[r],t[r+1]));return e;}subdividePolygonInternal(t,e){if(this._used)throw Error(\"Subdivision: multiple use not allowed.\");this._used=!0;let{flattened:r,holeIndices:i}=cx(t),n=this._initializeVertices(r),a;try{let o=jg(r,i);a=this._subdivideTrianglesScanline(o,n);}catch(o){console.error(o);}let s=[];return e&&(s=this._generateOutline(t,n)),this._ensureNoPoleVertices(),this._handlePoles(a),this._granularity>=2&&this._canonical?.z===0&&(a=this._removeTrianglesOutsideTileX(a),s=s.map(o=>this._removeLinesOutsideTileX(o))),{verticesFlattened:this._vertexBuffer,indicesTriangles:a,indicesLineList:s};}_vertexOutsideTileX(t){let e=this._vertexBuffer[t*2];return e<0||e>8192;}_removeTrianglesOutsideTileX(t){let e=[];for(let r=0;r<t.length;r+=3)this._vertexOutsideTileX(t[r])||this._vertexOutsideTileX(t[r+1])||this._vertexOutsideTileX(t[r+2])||e.push(t[r],t[r+1],t[r+2]);return e;}_removeLinesOutsideTileX(t){let e=[];for(let r=0;r<t.length;r+=2)this._vertexOutsideTileX(t[r])||this._vertexOutsideTileX(t[r+1])||e.push(t[r],t[r+1]);return e;}_pointArrayToIndices(t){let e=[];for(let r of t)e.push(this._vertexToIndex(r.x,r.y));return e;}};function cd(t,e,r,i=!0){return new hx(r,e).subdividePolygonInternal(t,i);}function or(t,e,r=!1){if(!t||t.length<1||t.length<2)return[];let i=r&&pd(t);if(e<2)return i?[...t,t[0]]:[...t];let n=Math.floor(mt/e),a=[];a.push(new M(t[0].x,t[0].y));let s=t.length,o=i?s:s-1;for(let l=0;l<o;l++){let u=t[l],h=l<s-1?t[l+1]:t[0],c=u.x,p=u.y,f=h.x,d=h.y,y=c!==f,m=p!==d;if(!y&&!m)continue;let g=f-c,x=d-p,b=Math.abs(g),v=Math.abs(x),w=c,_=p;for(;;){let S=g>0?(Math.floor(w/n)+1)*n:(Math.ceil(w/n)-1)*n,F=x>0?(Math.floor(_/n)+1)*n:(Math.ceil(_/n)-1)*n,z=Math.abs(w-S),$=Math.abs(_-F),B=Math.abs(w-f),P=Math.abs(_-d),E=y?z/b:1/0,O=m?$/v:1/0;if((B<=z||!y)&&(P<=$||!m))break;if(E<O&&y||!m){w=S,_+=x*E;let R=new M(w,Math.round(_));(a[a.length-1].x!==R.x||a[a.length-1].y!==R.y)&&a.push(R);}else{w+=g*O,_=F;let R=new M(Math.round(w),_);(a[a.length-1].x!==R.x||a[a.length-1].y!==R.y)&&a.push(R);}}let A=new M(f,d);(a[a.length-1].x!==A.x||a[a.length-1].y!==A.y)&&a.push(A);}return a;}function pd(t){return!t[0].equals(t[t.length-1]);}function cx(t){let e=[],r=[];for(let i of t)if(i.length!==0){i!==t[0]&&e.push(r.length/2);for(let n of i)r.push(n.x),r.push(n.y);}return{flattened:r,holeIndices:e};}function px(t,e){let r=Array(t.length);for(let i=0;i<t.length;i++)r[i]=e[t[i]];return r;}function fx(t,e){let r=[];for(let i=0;i<e.length;i+=3){let n=e[i],a=e[i+1],s=e[i+2],o=t[n*2],l=t[n*2+1],u=t[a*2],h=t[a*2+1],c=t[s*2],p=t[s*2+1],f=u-o,d=h-l,y=c-o;f*(p-l)-d*y>0?(r.push(n),r.push(s),r.push(a)):(r.push(n),r.push(a),r.push(s));}return r;}function dx(t,e,r){if(e.length===0)throw Error(\"Subdivision vertex ring is empty.\");let i=0,n=t[e[0]*2];for(let l=1;l<e.length;l++){let u=t[e[l]*2];u<n&&(n=u,i=l);}let a=e.length,s=i,o=(s+1)%a;for(;;){let l=s-1>=0?s-1:a-1,u=(o+1)%a,h=t[e[l]*2],c=t[e[l]*2+1],p=t[e[u]*2],f=t[e[u]*2+1],d=t[e[s]*2],y=t[e[s]*2+1],m=t[e[o]*2],g=t[e[o]*2+1],x=!1;if(h<p)x=!0;else if(h>p)x=!1;else{let b=g-y,v=-(m-d),w=y<g?1:-1;((h-d)*b+(c-y)*v)*w>((p-d)*b+(f-y)*v)*w&&(x=!0);}if(x){let b=e[l],v=e[s],w=e[o];b!==v&&b!==w&&v!==w&&r.push(w,v,b),s--,s<0&&(s=a-1);}else{let b=e[u],v=e[s],w=e[o];b!==v&&b!==w&&v!==w&&r.push(w,v,b),o++,o>=a&&(o=0);}if(l===u)break;}}function fd(t,e,r,i,n,a,s,o,l){let u=n.length/2,h=s&&o&&l;if(u<Jt.MAX_VERTEX_ARRAY_LENGTH){let c=e.prepareSegment(u,r,i),p=c.vertexLength;for(let y=0;y<a.length;y+=3)i.emplaceBack(p+a[y],p+a[y+1],p+a[y+2]);c.vertexLength+=u,c.primitiveLength+=a.length/3;let f,d;h&&(d=s.prepareSegment(u,r,o),f=d.vertexLength,d.vertexLength+=u);for(let y=0;y<n.length;y+=2)t(n[y],n[y+1]);if(h)for(let y of l){for(let m=1;m<y.length;m+=2)o.emplaceBack(f+y[m-1],f+y[m]);d.primitiveLength+=y.length/2;}}else yx(e,r,i,n,a,t),h&&mx(s,r,o,n,l,t),e.forceNewSegmentOnNextPrepare(),s?.forceNewSegmentOnNextPrepare();}function ji(t,e,r,i,n,a,s){if(a){let o=i.count;return r(e[n*2],e[n*2+1]),t[n]=i.count,i.count++,s.vertexLength++,o;}return t[n];}function yx(t,e,r,i,n,a){let s=[];for(let c=0;c<i.length/2;c++)s.push(-1);let o={count:0},l=0,u=t.getOrCreateLatestSegment(e,r),h=u.vertexLength;for(let c=2;c<n.length;c+=3){let p=n[c-2],f=n[c-1],d=n[c],y=s[p]<l,m=s[f]<l,g=s[d]<l,x=+!!y+ +!!m+ +!!g;u.vertexLength+x>Jt.MAX_VERTEX_ARRAY_LENGTH&&(u=t.createNewSegment(e,r),l=o.count,y=!0,m=!0,g=!0,h=0);let b=ji(s,i,a,o,p,y,u),v=ji(s,i,a,o,f,m,u),w=ji(s,i,a,o,d,g,u);r.emplaceBack(h+b-l,h+v-l,h+w-l),u.primitiveLength++;}}function mx(t,e,r,i,n,a){let s=[];for(let c=0;c<i.length/2;c++)s.push(-1);let o={count:0},l=0,u=t.getOrCreateLatestSegment(e,r),h=u.vertexLength;for(let c of n)for(let p=1;p<c.length;p+=2){let f=c[p-1],d=c[p],y=s[f]<l,m=s[d]<l,g=+!!y+ +!!m;u.vertexLength+g>Jt.MAX_VERTEX_ARRAY_LENGTH&&(u=t.createNewSegment(e,r),l=o.count,y=!0,m=!0,h=0);let x=ji(s,i,a,o,f,y,u),b=ji(s,i,a,o,d,m,u);r.emplaceBack(h+x-l,h+b-l),u.primitiveLength++;}}var dd=class{constructor(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map(e=>e.id),this.index=t.index,this.hasDependencies=!1,this.sdfPatterns={},this.patternFeatures=[],this.layoutVertexArray=new Xm(),this.indexArray=new mn(),this.indexArray2=new Eo(),this.programConfigurations=new dr(t.layers,t.zoom),this.segments=new Jt(),this.segments2=new Jt(),this.stateDependentLayerIds=this.layers.filter(e=>e.isStateDependent()).map(e=>e.id);}populate(t,e,r){this.hasDependencies=ga(\"fill\",this.layers,e);let i=this.layers[0].layout.get(\"fill-sort-key\"),n=!i.isConstant(),a=[],s=new at(this.zoom),o=this.layers[0]._featureFilter.needGeometry;for(let{feature:l,id:u,index:h,sourceLayerIndex:c}of t){let p=si(l,o);if(!this.layers[0]._featureFilter.filter(s,p,r))continue;let f=n?i.evaluate(p,{},r,e.availableImages):void 0,d={id:u,properties:l.properties,type:l.type,sourceLayerIndex:c,index:h,geometry:o?p.geometry:vr(l),patterns:{},sortKey:f};a.push(d);}n&&a.sort((l,u)=>l.sortKey-u.sortKey);for(let l of a){let{geometry:u,index:h,sourceLayerIndex:c}=l;if(this.hasDependencies){let f=Nl(\"fill\",this.layers,l,{zoom:this.zoom},e);this.patternFeatures.push(f);}else this.addFeature(l,u,h,r,{},e.subdivisionGranularity);let p=t[h].feature;e.featureIndex.insert(p,u,h,c,this.index);}}update(t,e,r){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,{imagePositions:r});}addFeatures({options:t,canonical:e,patternPositions:r,patternMap:i}){this.detectSdfPatterns(i);for(let n of this.patternFeatures)this.addFeature(n,n.geometry,n.index,e,r,t.subdivisionGranularity);}detectSdfPatterns(t){for(let e of this.patternFeatures)for(let r in e.patterns){let i=e.patterns[r];this.recordSdfPattern(r,t[i.min]),this.recordSdfPattern(r,t[i.mid]),this.recordSdfPattern(r,t[i.max]);}for(let e of this.layers){let r=e.paint.get(\"fill-pattern\").constantOr(null);r&&(this.recordSdfPattern(e.id,t[r.from.toString()]),this.recordSdfPattern(e.id,t[r.to.toString()]));}}recordSdfPattern(t,e){if(!e)return;let r=e.sdf===!0,i=this.sdfPatterns[t];i===void 0?this.sdfPatterns[t]=r:i!==r&&Mt(`Style sheet warning: Cannot mix SDF and non-SDF fill patterns in layer \"${t}\"`);}isEmpty(){return this.layoutVertexArray.length===0;}uploadPending(){return!this.uploaded||this.programConfigurations.needsUpload;}upload(t){this.uploaded||(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,qg),this.indexBuffer=t.createIndexBuffer(this.indexArray),this.indexBuffer2=t.createIndexBuffer(this.indexArray2)),this.programConfigurations.upload(t),this.uploaded=!0;}destroy(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.indexBuffer2.destroy(),this.programConfigurations.destroy(),this.segments.destroy(),this.segments2.destroy());}addFeature(t,e,r,i,n,a){for(let s of Ma(e,500)){let o=cd(s,i,a.fill.getGranularityForZoomLevel(i.z)),l=this.layoutVertexArray;fd((u,h)=>{l.emplaceBack(u,h);},this.segments,this.layoutVertexArray,this.indexArray,o.verticesFlattened,o.indicesTriangles,this.segments2,this.indexArray2,o.indicesLineList);}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,r,{imagePositions:n,canonical:i});}};I(\"FillBucket\",dd,{omit:[\"layers\",\"patternFeatures\"]});var gx,xx=()=>gx||=new qt({\"fill-sort-key\":new U(D.layout_fill[\"fill-sort-key\"],\"fill-sort-key\")}),vx,bx=()=>vx||=new qt({\"fill-antialias\":new V(D.paint_fill[\"fill-antialias\"],\"fill-antialias\"),\"fill-opacity\":new U(D.paint_fill[\"fill-opacity\"],\"fill-opacity\"),\"fill-layer-opacity\":new V(D.paint_fill[\"fill-layer-opacity\"],\"fill-layer-opacity\"),\"fill-color\":new U(D.paint_fill[\"fill-color\"],\"fill-color\"),\"fill-outline-color\":new U(D.paint_fill[\"fill-outline-color\"],\"fill-outline-color\"),\"fill-translate\":new V(D.paint_fill[\"fill-translate\"],\"fill-translate\"),\"fill-translate-anchor\":new V(D.paint_fill[\"fill-translate-anchor\"],\"fill-translate-anchor\"),\"fill-pattern\":new en(D.paint_fill[\"fill-pattern\"],\"fill-pattern\")}),wx={get paint(){return bx();},get layout(){return xx();}};var Dx=class extends ce{constructor(t,e){super(t,wx,e);}recalculate(t,e){super.recalculate(t,e);let r=this.paint._values[\"fill-outline-color\"];r.value.kind===\"constant\"&&r.value.value===void 0&&(this.paint._values[\"fill-outline-color\"]=this.paint._values[\"fill-color\"]);}createBucket(t){return new dd(t);}queryRadius(){return qa(this.paint.get(\"fill-translate\"));}queryIntersectsFeature({queryGeometry:t,geometry:e,transform:r,pixelsToTileUnits:i}){return Jf(ja(t,this.paint.get(\"fill-translate\"),this.paint.get(\"fill-translate-anchor\"),-r.bearingInRadians,i),e);}isTileClipped(){return!0;}},No=At([{name:\"a_pos\",components:2,type:\"Int16\"},{name:\"a_normal_ed\",components:4,type:\"Int16\"}],4),_x=At([{name:\"a_centroid\",components:2,type:\"Int16\"}],4),Ax=No.members;No.size,No.alignment;var ba=class Uo{constructor(){this.minX=1/0,this.maxX=-1/0,this.minY=1/0,this.maxY=-1/0;}extend(e){return this.minX=Math.min(this.minX,e.x),this.minY=Math.min(this.minY,e.y),this.maxX=Math.max(this.maxX,e.x),this.maxY=Math.max(this.maxY,e.y),this;}expandBy(e){return this.minX-=e,this.minY-=e,this.maxX+=e,this.maxY+=e,(this.minX>this.maxX||this.minY>this.maxY)&&(this.minX=1/0,this.maxX=-1/0,this.minY=1/0,this.maxY=-1/0),this;}shrinkBy(e){return this.expandBy(-e);}map(e){let r=new Uo();return r.extend(e(new M(this.minX,this.minY))),r.extend(e(new M(this.maxX,this.minY))),r.extend(e(new M(this.minX,this.maxY))),r.extend(e(new M(this.maxX,this.maxY))),r;}static fromPoints(e){let r=new Uo();for(let i of e)r.extend(i);return r;}contains(e){return e.x>=this.minX&&e.x<=this.maxX&&e.y>=this.minY&&e.y<=this.maxY;}empty(){return this.minX>this.maxX;}width(){return this.maxX-this.minX;}height(){return this.maxY-this.minY;}covers(e){return!this.empty()&&!e.empty()&&e.minX>=this.minX&&e.maxX<=this.maxX&&e.minY>=this.minY&&e.maxY<=this.maxY;}intersects(e){return!this.empty()&&!e.empty()&&e.minX<=this.maxX&&e.maxX>=this.minX&&e.minY<=this.maxY&&e.maxY>=this.minY;}},f5=ba.fromPoints([new M(0,0),new M(mt,mt)]);function qo(t,e){return t.x===e.x&&(t.x<0||t.x>8192)||t.y===e.y&&(t.y<0||t.y>8192);}function Jh(t){return t.every(e=>e.x<0)||t.every(e=>e.x>8192)||t.every(e=>e.y<0)||t.every(e=>e.y>8192);}var gn=class{constructor(t,e,r,i,n){for(this.properties=Object.create(null),this.extent=r,this.type=0,this.id=void 0,this._pbf=t,this._geometry=-1,this._keys=i,this._values=n;t.pos<e;){let a=t.readVarint();if(a===8)this.id=t.readVarint();else if(a===18){let s=t.readVarint()+t.pos;for(;t.pos<s;){let o=i[t.readVarint()],l=n[t.readVarint()];this.properties[o]=l;}}else a===24?this.type=t.readVarint():(a===34&&(this._geometry=t.pos),t.skip(a));}}loadGeometry(){if(this._geometry<0)throw Error(\"feature has no geometry\");let t=this._pbf;t.pos=this._geometry;let e=t.readVarint()+t.pos,r=[],i,n=1,a=0,s=0,o=0;for(;t.pos<e;){if(a<=0){let l=t.readVarint();if(n=l&7,a=l>>3,a===0)continue;}if(a--,n===1)s+=t.readSVarint(),o+=t.readSVarint(),i&&r.push(i),i=[new M(s,o)];else if(n===2)s+=t.readSVarint(),o+=t.readSVarint(),i&&i.push(new M(s,o));else if(n===7)i&&i.push(i[0].clone());else throw Error(`unknown command ${n}`);}return i&&r.push(i),r;}bbox(){if(this._geometry<0)throw Error(\"feature has no geometry\");let t=this._pbf;t.pos=this._geometry;let e=t.readVarint()+t.pos,r=1,i=0,n=0,a=0,s=1/0,o=-1/0,l=1/0,u=-1/0;for(;t.pos<e;){if(i<=0){let h=t.readVarint();if(r=h&7,i=h>>3,i===0)continue;}if(i--,r===1||r===2)n+=t.readSVarint(),a+=t.readSVarint(),n<s&&(s=n),n>o&&(o=n),a<l&&(l=a),a>u&&(u=a);else if(r!==7)throw Error(`unknown command ${r}`);}return[s,l,o,u];}toGeoJSON(t,e,r){let i=this.extent*2**r,n=this.extent*t,a=this.extent*e,s=this.loadGeometry();function o(c){return[(c.x+n)*360/i-180,360/Math.PI*Math.atan(Math.exp((1-(c.y+a)*2/i)*Math.PI))-90];}function l(c){return c.map(o);}let u;if(this.type===1){let c=[];for(let f of s)c.push(f[0]);let p=l(c);u=c.length===1?{type:\"Point\",coordinates:p[0]}:{type:\"MultiPoint\",coordinates:p};}else if(this.type===2){let c=s.map(l);u=c.length===1?{type:\"LineString\",coordinates:c[0]}:{type:\"MultiLineString\",coordinates:c};}else if(this.type===3){let c=yd(s),p=[];for(let f of c)p.push(f.map(l));u=p.length===1?{type:\"Polygon\",coordinates:p[0]}:{type:\"MultiPolygon\",coordinates:p};}else throw Error(\"unknown feature type\");let h={type:\"Feature\",geometry:u,properties:this.properties};return this.id!=null&&(h.id=this.id),h;}};gn.types=[\"Unknown\",\"Point\",\"LineString\",\"Polygon\"];function yd(t){let e=t.length;if(e<=1)return[t];let r=[],i,n;for(let a=0;a<e;a++){let s=Sx(t[a]);s!==0&&(n===void 0&&(n=s<0),n===s<0?(i&&r.push(i),i=[t[a]]):i&&i.push(t[a]));}return i&&r.push(i),r;}function Sx(t){let e=0;for(let r=0,i=t.length,n=i-1,a,s;r<i;n=r++)a=t[r],s=t[n],e+=(s.x-a.x)*(a.y+s.y);return e;}var Ex=class{constructor(t,e){for(this.version=1,this.name=\"\",this.extent=4096,this.length=0,this._pbf=t,this._keys=[],this._values=[],this._features=[],e===void 0&&(e=t.length);t.pos<e;){let r=t.readVarint();r===10?this.name=t.readString():r===18?(this._features.push(t.pos),t.skip(r)):r===26?this._keys.push(t.readString()):r===34?this._values.push(Fx(t)):r===40?this.extent=t.readVarint():r===120?this.version=t.readVarint():t.skip(r);}this.length=this._features.length;}feature(t){if(t<0||t>=this._features.length)throw Error(\"feature index out of bounds\");this._pbf.pos=this._features[t];let e=this._pbf.readVarint()+this._pbf.pos;return new gn(this._pbf,e,this.extent,this._keys,this._values);}};function Fx(t){let e=null,r=t.readVarint()+t.pos;for(;t.pos<r;){let i=t.readVarint();e=i===10?t.readString():i===21?t.readFloat():i===25?t.readDouble():i===32?t.readVarint(!0):i===40?t.readVarint():i===48?t.readSVarint():i===56?t.readBoolean():(t.skip(i),null);}if(e==null)throw Error(\"unknown feature value\");return e;}var Ul=class{constructor(t,e=t.length){let r=Object.create(null);for(;t.pos<e;){let i=t.readVarint();if(i===26){let n=new Ex(t,t.readVarint()+t.pos);n.length&&(r[n.name]=n);}else t.skip(i);}this.layers=r;}},md=63710088e-1,Qh=class Vi{constructor(e,r){if(isNaN(e)||isNaN(r))throw Error(`Invalid LngLat object: (${e}, ${r})`);if(this.lng=+e,this.lat=+r,this.lat>90||this.lat<-90)throw Error(\"Invalid LngLat latitude value: must be between -90 and 90\");}wrap(){return new Vi(_1(this.lng,-180,180),this.lat);}toArray(){return[this.lng,this.lat];}toString(){return`LngLat(${this.lng}, ${this.lat})`;}distanceTo(e){let r=Math.PI/180,i=this.lat*r,n=e.lat*r,a=Math.sin(i)*Math.sin(n)+Math.cos(i)*Math.cos(n)*Math.cos((e.lng-this.lng)*r);return md*Math.acos(Math.min(a,1));}static convert(e){if(e instanceof Vi)return e;if(Array.isArray(e)&&(e.length===2||e.length===3))return new Vi(Number(e[0]),Number(e[1]));if(!Array.isArray(e)&&typeof e==\"object\"&&e)return new Vi(Number(\"lng\"in e?e.lng:e.lon),Number(e.lat));throw Error(\"`LngLatLike` argument must be specified as a LngLat instance, an object {lng: <lng>, lat: <lat>}, an object {lon: <lng>, lat: <lat>}, or an array of [<lng>, <lat>]\");}},gd=2*Math.PI*md;function xd(t){return gd*Math.cos(t*Math.PI/180);}function Tx(t){return(180+t)/360;}function kx(t){return(180-180/Math.PI*Math.log(Math.tan(Math.PI/4+t*Math.PI/360)))/360;}function Ix(t,e){return t/xd(e);}function Cx(t){return t*360-180;}function jo(t){let e=180-t*360;return 360/Math.PI*Math.atan(Math.exp(e*Math.PI/180))-90;}function Mx(t,e){return t*xd(jo(e));}function Bx(t){return 1/Math.cos(t*Math.PI/180);}var ql=class vd{constructor(e,r,i=0){this.x=+e,this.y=+r,this.z=+i;}static fromLngLat(e,r=0){let i=Qh.convert(e);return new vd(Tx(i.lng),kx(i.lat),Ix(r,i.lat));}toLngLat(){return new Qh(Cx(this.x),jo(this.y));}toAltitude(){return Mx(this.z,this.y);}meterInMercatorCoordinateUnits(){return 1/gd*Bx(jo(this.y));}};function Px(t,e,r){let i=1/(1<<r.z);return new ql(t/mt*i+r.x*i,e/mt*i+r.y*i);}function zx(t,e,r){return Px(t,e,r).toLngLat();}function Lx(t,e){return e<=0||!t||t.length===0?t:t.map(r=>Ox(r,e));}function Vx(t,e){let r=zx(mt/2,mt/2,e),i=ql.fromLngLat(r).meterInMercatorCoordinateUnits(),n=(1<<e.z)*mt;return t*i*n;}function Ox(t,e){if(!t||t.length<3)return t;let r=t[0].x===t[t.length-1].x&&t[0].y===t[t.length-1].y,i=r?t.length-1:t.length;if(i<3)return t;let n=[],a=qo(t[i-1],t[0]);for(let o=0;o<i;o++){let l=t[(o-1+i)%i],u=t[o],h=t[(o+1)%i],c=qo(u,h);a||c?n.push(u.clone()):$x(n,l,u,h,e),a=c;}let s=Rx(n);return s.length<3?t:(r&&s.push(s[0].clone()),s);}function Rx(t){let e=[];for(let r of t){let i=r.round(),n=e[e.length-1];(n?.x!==i.x||n?.y!==i.y)&&e.push(i);}for(;e.length>1&&e[0].x===e[e.length-1].x&&e[0].y===e[e.length-1].y;)e.pop();return e;}function $x(t,e,r,i,n){let a=e.sub(r),s=i.sub(r),o=a.mag(),l=s.mag();if(o<1e-6||l<1e-6){t.push(r.clone());return;}a._div(o),s._div(l);let u=a.x*s.x+a.y*s.y;if(Math.abs(u)>Math.cos(5*Math.PI/180)){t.push(r.clone());return;}let h=.2,c=Math.min(n,o*h,l*h),p=r.add(a.mult(c)),f=r.add(s.mult(c)),d=Math.sqrt((1+u)/2),y=r.add(a.add(s)._unit()._mult(c/d)),m=p.sub(y).angleWith(f.sub(y)),g=Math.max(2,Math.ceil(Math.abs(m)/(Math.PI/6)-1e-6));for(let x=0;x<=g;x++)t.push(p.rotateAround(x/g*m,y));}var Vs=8192;function Fi(t,e,r,i,n,a,s,o){t.emplaceBack(e,r,Math.floor(i*Vs)*2+s,n*Vs*2,a*Vs*2,Math.round(o));}var bd=class{constructor(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map(e=>e.id),this.index=t.index,this.hasDependencies=!1,this.layoutVertexArray=new Ym(),this.centroidVertexArray=new jm(),this.indexArray=new mn(),this.programConfigurations=new dr(t.layers,t.zoom),this.segments=new Jt(),this.stateDependentLayerIds=this.layers.filter(e=>e.isStateDependent()).map(e=>e.id);}populate(t,e,r){this.features=[],this.hasDependencies=ga(\"fill-extrusion\",this.layers,e);let i=new at(this.zoom),n=this.layers[0],a=n.layout.get(\"fill-extrusion-rounded-corner-distance\"),s=a>0?Vx(a,r):0,o=n._featureFilter.needGeometry;for(let{feature:l,id:u,index:h,sourceLayerIndex:c}of t){let p=si(l,o);if(!n._featureFilter.filter(i,p,r))continue;let f={id:u,sourceLayerIndex:c,index:h,geometry:Lx(o?p.geometry:vr(l),s),properties:l.properties,type:l.type,patterns:{}};this.hasDependencies?this.features.push(Nl(\"fill-extrusion\",this.layers,f,{zoom:this.zoom},e)):this.addFeature(f,f.geometry,h,r,{},e.subdivisionGranularity),e.featureIndex.insert(l,f.geometry,h,c,this.index,!0);}}addFeatures({options:t,canonical:e,patternPositions:r}){for(let i of this.features){let{geometry:n}=i;this.addFeature(i,n,i.index,e,r,t.subdivisionGranularity);}}update(t,e,r){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,{imagePositions:r});}isEmpty(){return this.layoutVertexArray.length===0&&this.centroidVertexArray.length===0;}uploadPending(){return!this.uploaded||this.programConfigurations.needsUpload;}upload(t){this.uploaded||(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,Ax),this.centroidVertexBuffer=t.createVertexBuffer(this.centroidVertexArray,_x.members,!0),this.indexBuffer=t.createIndexBuffer(this.indexArray)),this.programConfigurations.upload(t),this.uploaded=!0;}destroy(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy(),this.centroidVertexBuffer.destroy());}addFeature(t,e,r,i,n,a){for(let s of Ma(e,500)){let o={x:0,y:0,sampleCount:0},l=this.layoutVertexArray.length;this.processPolygon(o,i,t,s,a);let u=this.layoutVertexArray.length-l,h=Math.floor(o.x/o.sampleCount),c=Math.floor(o.y/o.sampleCount);for(let p=0;p<u;p++)this.centroidVertexArray.emplaceBack(h,c);}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,r,{imagePositions:n,canonical:i});}processPolygon(t,e,r,i,n){if(i.length<1||Jh(i[0]))return;for(let h of i)h.length!==0&&Nx(t,h);let a={segment:this.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray)},s=n.fill.getGranularityForZoomLevel(e.z),o=gn.types[r.type]===\"Polygon\";for(let h of i){if(h.length===0||Jh(h))continue;let c=or(h,s,o);this._generateSideFaces(c,a);}if(!o)return;let l=cd(i,e,s,!1),u=this.layoutVertexArray;fd((h,c)=>{Fi(u,h,c,0,0,1,1,0);},this.segments,this.layoutVertexArray,this.indexArray,l.verticesFlattened,l.indicesTriangles);}_generateSideFaces(t,e){let r=0;for(let i=1;i<t.length;i++){let n=t[i],a=t[i-1];if(qo(n,a))continue;e.segment.vertexLength+4>Jt.MAX_VERTEX_ARRAY_LENGTH&&(e.segment=this.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray));let s=n.sub(a)._perp()._unit(),o=a.dist(n);r+o>32768&&(r=0),Fi(this.layoutVertexArray,n.x,n.y,s.x,s.y,0,0,r),Fi(this.layoutVertexArray,n.x,n.y,s.x,s.y,0,1,r),r+=o,Fi(this.layoutVertexArray,a.x,a.y,s.x,s.y,0,0,r),Fi(this.layoutVertexArray,a.x,a.y,s.x,s.y,0,1,r);let l=e.segment.vertexLength;this.indexArray.emplaceBack(l,l+2,l+1),this.indexArray.emplaceBack(l+1,l+2,l+3),e.segment.vertexLength+=4,e.segment.primitiveLength+=2;}}};function Nx(t,e){for(let r=0;r<e.length;r++){let i=e[r];(r!==e.length-1||e[0].x!==i.x||e[0].y!==i.y)&&(t.x+=i.x,t.y+=i.y,t.sampleCount++);}}I(\"FillExtrusionBucket\",bd,{omit:[\"layers\",\"features\"]});var Ux,qx=()=>Ux||=new qt({\"fill-extrusion-rounded-corner-distance\":new V(D[\"layout_fill-extrusion\"][\"fill-extrusion-rounded-corner-distance\"],\"fill-extrusion-rounded-corner-distance\")}),jx,Gx=()=>jx||=new qt({\"fill-extrusion-opacity\":new V(D[\"paint_fill-extrusion\"][\"fill-extrusion-opacity\"],\"fill-extrusion-opacity\"),\"fill-extrusion-color\":new U(D[\"paint_fill-extrusion\"][\"fill-extrusion-color\"],\"fill-extrusion-color\"),\"fill-extrusion-translate\":new V(D[\"paint_fill-extrusion\"][\"fill-extrusion-translate\"],\"fill-extrusion-translate\"),\"fill-extrusion-translate-anchor\":new V(D[\"paint_fill-extrusion\"][\"fill-extrusion-translate-anchor\"],\"fill-extrusion-translate-anchor\"),\"fill-extrusion-pattern\":new en(D[\"paint_fill-extrusion\"][\"fill-extrusion-pattern\"],\"fill-extrusion-pattern\"),\"fill-extrusion-height\":new U(D[\"paint_fill-extrusion\"][\"fill-extrusion-height\"],\"fill-extrusion-height\"),\"fill-extrusion-base\":new U(D[\"paint_fill-extrusion\"][\"fill-extrusion-base\"],\"fill-extrusion-base\"),\"fill-extrusion-vertical-gradient\":new V(D[\"paint_fill-extrusion\"][\"fill-extrusion-vertical-gradient\"],\"fill-extrusion-vertical-gradient\")}),Xx={get paint(){return Gx();},get layout(){return qx();}};var Yx=class extends ce{constructor(t,e){super(t,Xx,e);}createBucket(t){return new bd(t);}queryRadius(){return qa(this.paint.get(\"fill-extrusion-translate\"));}is3D(){return!0;}queryIntersectsFeature({queryGeometry:t,feature:e,featureState:r,geometry:i,transform:n,pixelsToTileUnits:a,pixelPosMatrix:s}){let o=ja(t,this.paint.get(\"fill-extrusion-translate\"),this.paint.get(\"fill-extrusion-translate-anchor\"),-n.bearingInRadians,a),l=this.paint.get(\"fill-extrusion-height\").evaluate(e,r),u=this.paint.get(\"fill-extrusion-base\").evaluate(e,r),h=Hx(o,s,0),c=Zx(i,u,l,s),p=c[0],f=c[1];return Wx(p,f,h);}};function Ti(t,e){return t.x*e.x+t.y*e.y;}function tc(t,e){if(t.length===1){let r=0,i=e[r++],n;for(;!n||i.equals(n);)if(n=e[r++],!n)return 1/0;for(;r<e.length;r++){let a=e[r],s=t[0],o=n.sub(i),l=a.sub(i),u=s.sub(i),h=Ti(o,o),c=Ti(o,l),p=Ti(l,l),f=Ti(u,o),d=Ti(u,l),y=h*p-c*c,m=(p*f-c*d)/y,g=(h*d-c*f)/y,x=1-m-g,b=i.z*x+n.z*m+a.z*g;if(isFinite(b))return b;}return 1/0;}{let r=1/0;for(let i of e)r=Math.min(r,i.z);return r;}}function Wx(t,e,r){let i=1/0;Jf(r,e)&&(i=tc(r,e[0]));for(let n=0;n<e.length;n++){let a=e[n],s=t[n];for(let o=0;o<a.length-1;o++){let l=a[o],u=a[o+1],h=s[o],c=[l,u,s[o+1],h,l];hg(r,c)&&(i=Math.min(i,tc(r,c)));}}return i!==1/0&&i;}function Zx(t,e,r,i){let n=[],a=[],s=i[8]*e,o=i[9]*e,l=i[10]*e,u=i[11]*e,h=i[8]*r,c=i[9]*r,p=i[10]*r,f=i[11]*r;for(let d of t){let y=[],m=[];for(let g of d){let x=g.x,b=g.y,v=i[0]*x+i[4]*b+i[12],w=i[1]*x+i[5]*b+i[13],_=i[2]*x+i[6]*b+i[14],A=i[3]*x+i[7]*b+i[15],S=v+s,F=w+o,z=_+l,$=A+u,B=v+h,P=w+c,E=_+p,O=A+f,R=new M(S/$,F/$);R.z=z/$,y.push(R);let L=new M(B/O,P/O);L.z=E/O,m.push(L);}n.push(y),a.push(m);}return[n,a];}function Hx(t,e,r){let i=[];for(let n of t){let a=[n.x,n.y,r,1];g1(a,a,e),i.push(new M(a[0]/a[3],a[1]/a[3]));}return i;}function Go(t,e,r,i){let n=i,a=e+(r-e>>1),s=r-e,o,l=t[e],u=t[e+1],h=t[r],c=t[r+1];for(let p=e+3;p<r;p+=3){let f=Kx(t[p],t[p+1],l,u,h,c);if(f>n){o=p,n=f;continue;}if(f===n){let d=Math.abs(p-a);d<s&&(o=p,s=d);}}n>i&&(o-e>3&&Go(t,e,o,i),t[o+2]=n,r-o>3&&Go(t,o,r,i));}function Kx(t,e,r,i,n,a){let s=n-r,o=a-i;if(s!==0||o!==0){let l=((t-r)*s+(e-i)*o)/(s*s+o*o);l>1?(r=n,i=a):l>0&&(r+=s*l,i+=o*l);}return s=t-r,o=e-i,s*s+o*o;}function Ct(t,e,r,i){let n={type:e,geom:r},a={id:t??null,type:n.type,geometry:n.geom,tags:i,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0};switch(n.type){case\"Point\":case\"MultiPoint\":ki(a,n.geom);break;case\"LineString\":ki(a,n.geom.points);break;case\"Polygon\":ki(a,n.geom[0].points);break;case\"MultiLineString\":for(let s of n.geom)ki(a,s.points);break;case\"MultiPolygon\":for(let s of n.geom)ki(a,s[0].points);}return a;}function jl(t){let e=t;t.points.length>64&&(e.points=new Float64Array(t.points));}function ki(t,e){for(let r=0;r<e.length;r+=3)t.minX=Math.min(t.minX,e[r]),t.minY=Math.min(t.minY,e[r+1]),t.maxX=Math.max(t.maxX,e[r]),t.maxY=Math.max(t.maxY,e[r+1]);}function Gl(t,e){let r=[];switch(t.type){case\"FeatureCollection\":for(let i=0;i<t.features.length;i++)sa(r,t.features[i],e,i);break;case\"Feature\":sa(r,t,e);break;default:sa(r,{type:\"Feature\",geometry:t,properties:void 0},e);}return r;}function sa(t,e,r,i,n=0){if(!e.geometry)return;if(n>1024)throw Error(\"GeometryCollection nesting exceeds supported depth: 1024\");if(e.geometry.type===\"GeometryCollection\"){Qx(t,e,e.geometry,r,i,n+1);return;}if(!e.geometry.coordinates?.length)return;let a=Jx(e,r,i),s=(r.tolerance/((1<<r.maxZoom)*r.extent))**2;switch(e.geometry.type){case\"Point\":t2(t,a,e.geometry,e.properties);return;case\"MultiPoint\":e2(t,a,e.geometry,e.properties);return;case\"LineString\":r2(t,a,e.geometry,s,e.properties);return;case\"MultiLineString\":i2(t,a,e.geometry,s,r,e.properties);return;case\"Polygon\":n2(t,a,e.geometry,s,e.properties);return;case\"MultiPolygon\":a2(t,a,e.geometry,s,e.properties);return;default:throw Error(\"Input data is not a valid GeoJSON object.\");}}function Jx(t,e,r){return e.promoteId?t.properties?.[e.promoteId]:e.generateId?r||0:t.id;}function Qx(t,e,r,i,n,a=0){for(let s of r.geometries)sa(t,{id:e.id,type:\"Feature\",geometry:s,properties:e.properties},i,n,a);}function t2(t,e,r,i){let n=[];n.push(Gr(r.coordinates[0]),Xr(r.coordinates[1]),0),t.push(Ct(e,\"Point\",n,i));}function e2(t,e,r,i){let n=[];for(let a of r.coordinates)n.push(Gr(a[0]),Xr(a[1]),0);t.push(Ct(e,\"MultiPoint\",n,i));}function r2(t,e,r,i,n){let a={points:[]};Xl(r.coordinates,a,i,!1),t.push(Ct(e,\"LineString\",a,n));}function i2(t,e,r,i,n,a){if(n.lineMetrics)for(let s of r.coordinates){let o={points:[]};Xl(s,o,i,!1),t.push(Ct(e,\"LineString\",o,a));}else{let s=[];Yl(r.coordinates,s,i,!1),t.push(Ct(e,\"MultiLineString\",s,a));}}function n2(t,e,r,i,n){let a=[];Yl(r.coordinates,a,i,!0),t.push(Ct(e,\"Polygon\",a,n));}function a2(t,e,r,i,n){let a=[];for(let s of r.coordinates){let o=[];Yl(s,o,i,!0),a.push(o);}t.push(Ct(e,\"MultiPolygon\",a,n));}function Xl(t,e,r,i){let n,a,s=0;for(let l=0;l<t.length;l++){let u=Gr(t[l][0]),h=Xr(t[l][1]);e.points.push(u,h,0),l>0&&(s+=i?(n*h-u*a)/2:Math.sqrt((u-n)**2+(h-a)**2)),n=u,a=h;}let o=e.points.length-3;e.points[2]=1,r>0&&Go(e.points,0,o,r),e.points[o+2]=1,jl(e),e.size=Math.abs(s),e.start=0,e.end=e.size;}function Yl(t,e,r,i){for(let n=0;n<t.length;n++){let a={points:[]};Xl(t[n],a,r,i),e.push(a);}}function Gr(t){return t/360+.5;}function Xr(t){let e=Math.sin(t*Math.PI/180),r=.5-.25*Math.log((1+e)/(1-e))/Math.PI;return r<0?0:r>1?1:r;}function s2(t){return{type:\"FeatureCollection\",features:t.map(e=>wa(e))};}function wa(t){let e={type:\"Feature\",geometry:o2(t),properties:t.tags};return t.id!=null&&(e.id=t.id),e;}function o2(t){let{type:e,geometry:r}=t;switch(e){case\"Point\":return{type:e,coordinates:wd(r[0],r[1])};case\"MultiPoint\":return{type:e,coordinates:Gn(r)};case\"LineString\":return{type:e,coordinates:Gn(r.points)};case\"MultiLineString\":case\"Polygon\":return{type:e,coordinates:r.map(i=>Gn(i.points))};case\"MultiPolygon\":return{type:e,coordinates:r.map(i=>i.map(n=>Gn(n.points)))};}}function Gn(t){let e=[];for(let r=0;r<t.length;r+=3)e.push(wd(t[r],t[r+1]));return e;}function wd(t,e){return[Dd(t),_d(e)];}function Dd(t){return(t-.5)*360;}function _d(t){let e=(180-t*360)*Math.PI/180;return 360*Math.atan(Math.exp(e))/Math.PI-90;}function Fe(t,e,r,i,n,a,s,o){if(r/=e,i/=e,a>=r&&s<i)return t;if(s<r||a>=i)return null;let l=[];for(let u of t){let h=n===0?u.minX:u.minY,c=n===0?u.maxX:u.maxY;if(h>=r&&c<i){l.push(u);continue;}if(!(c<r||h>=i))switch(u.type){case\"Point\":case\"MultiPoint\":l2(u,l,r,i,n);continue;case\"LineString\":u2(u,l,r,i,n,o);continue;case\"MultiLineString\":h2(u,l,r,i,n);continue;case\"Polygon\":c2(u,l,r,i,n);continue;case\"MultiPolygon\":p2(u,l,r,i,n);continue;}}return l.length?l:null;}function l2(t,e,r,i,n){let a=[];if(f2(t.geometry,a,r,i,n),!a.length)return;let s=a.length===3?\"Point\":\"MultiPoint\";e.push(Ct(t.id,s,a,t.tags));}function u2(t,e,r,i,n,a){let s=[];if(Ad(t.geometry,s,r,i,n,!1,a.lineMetrics),s.length){if(a.lineMetrics){for(let o of s)e.push(Ct(t.id,\"LineString\",o,t.tags));return;}if(s.length>1){e.push(Ct(t.id,\"MultiLineString\",s,t.tags));return;}e.push(Ct(t.id,\"LineString\",s[0],t.tags));}}function h2(t,e,r,i,n){let a=[];if(Wl(t.geometry,a,r,i,n,!1),a.length){if(a.length===1){e.push(Ct(t.id,\"LineString\",a[0],t.tags));return;}e.push(Ct(t.id,\"MultiLineString\",a,t.tags));}}function c2(t,e,r,i,n){let a=[];Wl(t.geometry,a,r,i,n,!0),a.length&&e.push(Ct(t.id,\"Polygon\",a,t.tags));}function p2(t,e,r,i,n){let a=[];for(let s of t.geometry){let o=[];Wl(s,o,r,i,n,!0),o.length&&a.push(o);}a.length&&e.push(Ct(t.id,\"MultiPolygon\",a,t.tags));}function f2(t,e,r,i,n){for(let a=0;a<t.length;a+=3){let s=t[a+n];s>=r&&s<=i&&Yr(e,t[a],t[a+1],t[a+2]);}}function Ad(t,e,r,i,n,a,s){let o=ec(t),l=n===0?d2:y2,u=t.start,h,c;for(let g=0;g<t.points.length-3;g+=3){let x=t.points[g],b=t.points[g+1],v=t.points[g+2],w=t.points[g+3],_=t.points[g+4],A=n===0?x:b,S=n===0?w:_,F=!1;s&&(h=Math.sqrt((x-w)**2+(b-_)**2)),A<r?S>r&&(c=l(o,x,b,w,_,r),s&&(o.start=u+h*c)):A>i?S<i&&(c=l(o,x,b,w,_,i),s&&(o.start=u+h*c)):Yr(o.points,x,b,v),S<r&&A>=r&&(c=l(o,x,b,w,_,r),F=!0),S>i&&A<=i&&(c=l(o,x,b,w,_,i),F=!0),!a&&F&&(s&&(o.end=u+h*c),e.push(o),o=ec(t)),s&&(u+=h);}let p=t.points.length-3,f=t.points[p],d=t.points[p+1],y=t.points[p+2],m=n===0?f:d;m>=r&&m<=i&&Yr(o.points,f,d,y),p=o.points.length-3,a&&p>=3&&(o.points[p]!==o.points[0]||o.points[p+1]!==o.points[1])&&Yr(o.points,o.points[0],o.points[1],o.points[2]),o.points.length&&(jl(o),e.push(o));}function ec(t){return{points:[],size:t.size,start:t.start,end:t.end};}function Wl(t,e,r,i,n,a){for(let s of t)Ad(s,e,r,i,n,a,!1);}function Yr(t,e,r,i){t.push(e,r,i);}function d2(t,e,r,i,n,a){let s=(a-e)/(i-e);return Yr(t.points,a,r+(n-r)*s,1),s;}function y2(t,e,r,i,n,a){let s=(a-r)/(n-r);return Yr(t.points,e+(i-e)*s,a,1),s;}function Zl(t,e){let r=e.buffer/e.extent,i=t,n=Fe(t,1,-1-r,r,0,-1,2,e),a=Fe(t,1,1-r,2+r,0,-1,2,e);return!n&&!a||(i=Fe(t,1,-r,1+r,0,-1,2,e)||[],n&&(i=rc(n,1).concat(i)),a&&(i=i.concat(rc(a,-1)))),i;}function rc(t,e){let r=[];for(let i of t)switch(i.type){case\"Point\":case\"MultiPoint\":{let n=m2(i.geometry,e);r.push(Ct(i.id,i.type,n,i.tags));continue;}case\"LineString\":{let n=Os(i.geometry,e);r.push(Ct(i.id,i.type,n,i.tags));continue;}case\"MultiLineString\":case\"Polygon\":{let n=[];for(let a of i.geometry)n.push(Os(a,e));r.push(Ct(i.id,i.type,n,i.tags));continue;}case\"MultiPolygon\":{let n=[];for(let a of i.geometry){let s=[];for(let o of a)s.push(Os(o,e));n.push(s);}r.push(Ct(i.id,i.type,n,i.tags));continue;}}return r;}function m2(t,e){let r=[];for(let i=0;i<t.length;i+=3)r.push(t[i]+e,t[i+1],t[i+2]);return r;}function Os(t,e){let r={points:[],size:t.size};t.start!==void 0&&(r.start=t.start,r.end=t.end);for(let i=0;i<t.points.length;i+=3)r.points.push(t.points[i]+e,t.points[i+1],t.points[i+2]);return jl(r),r;}function g2(t,e,r){let i=v2(e,r),n=[];if(i.removeAll&&(n=t,t=[]),i.remove.size||i.add.size){let a=[];for(let s of t)(i.remove.has(s.id)||i.add.has(s.id))&&a.push(s);if(a.length){n=n.concat(a);let s=new Set(a.map(o=>o.id));t=t.filter(o=>!s.has(o.id));}if(i.add.size){let s=Gl({type:\"FeatureCollection\",features:Array.from(i.add.values())},r);s=Zl(s,r),n=n.concat(s),t=t.concat(s);}}if(i.update.size){let a=new Map(),s=[];for(let o of t)i.update.has(o.id)?a.set(o.id,[...(a.get(o.id)||[]),o]):s.push(o);for(let[o,l]of i.update){let u=a.get(o);if(!u||u.length===0)continue;let h=x2(u,l,r);n=n.concat(u,h),s=s.concat(h);}t=s;}return{affected:n,source:t};}function x2(t,e,r){let i=!!e.newGeometry,n=e.removeAllProperties||e.removeProperties?.length>0||e.addOrUpdateProperties?.length>0;if(i){let a=t[0],s=Gl({type:\"FeatureCollection\",features:[{type:\"Feature\",id:a.id,geometry:e.newGeometry,properties:n?ic(a.tags,e):a.tags}]},r);return s=Zl(s,r),s;}if(n){let a=[];for(let s of t){let o={...s};o.tags=ic(o.tags,e),a.push(o);}return a;}return t;}function ic(t,e){if(e.removeAllProperties)return{};let r={...(t||{})};if(e.removeProperties)for(let i of e.removeProperties)delete r[i];if(e.addOrUpdateProperties)for(let{key:i,value:n}of e.addOrUpdateProperties)r[i]=n;return r;}function v2(t,e){return t?{removeAll:t.removeAll,remove:new Set(t.remove||[]),add:new Map(t.add?.map(r=>[e.promoteId?r.properties[e.promoteId]:r.id,r])),update:new Map(t.update?.map(r=>[r.id,r]))}:{remove:new Set(),add:new Map(),update:new Map()};}var nc=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],dt=new Uint32Array(96),b2=class Sd{static from(e){if(!e||e.byteLength===void 0||e.buffer)throw Error(\"Data must be an instance of ArrayBuffer or SharedArrayBuffer.\");let[r,i]=new Uint8Array(e,0,2);if(r!==219)throw Error(\"Data does not appear to be in a KDBush format.\");let n=i>>4;if(n!==1)throw Error(`Got v${n} data when expected v1.`);let a=nc[i&15];if(!a)throw Error(\"Unrecognized array type.\");let[s]=new Uint16Array(e,2,1),[o]=new Uint32Array(e,4,1);return new Sd(o,s,a,void 0,e);}constructor(e,r=64,i=Float64Array,n=ArrayBuffer,a){if(isNaN(e)||e<0)throw Error(`Unexpected numItems value: ${e}.`);this.numItems=+e,this.nodeSize=Math.min(Math.max(+r,2),65535),this.ArrayType=i,this.IndexArrayType=e<65536?Uint16Array:Uint32Array;let s=nc.indexOf(this.ArrayType),o=e*2*this.ArrayType.BYTES_PER_ELEMENT,l=e*this.IndexArrayType.BYTES_PER_ELEMENT,u=(8-l%8)%8;if(s<0)throw Error(`Unexpected typed array class: ${i}.`);if(a)this.data=a,this.ids=new this.IndexArrayType(a,8,e),this.coords=new i(a,8+l+u,e*2),this._pos=e*2,this._finished=!0;else{let h=this.data=new n(8+o+l+u);this.ids=new this.IndexArrayType(h,8,e),this.coords=new i(h,8+l+u,e*2),this._pos=0,this._finished=!1,new Uint8Array(h,0,2).set([219,16+s]),new Uint16Array(h,2,1)[0]=r,new Uint32Array(h,4,1)[0]=e;}}add(e,r){let i=this._pos>>1;return this.ids[i]=i,this.coords[this._pos++]=e,this.coords[this._pos++]=r,i;}finish(){let e=this._pos>>1;if(e!==this.numItems)throw Error(`Added ${e} items when expected ${this.numItems}.`);return Xo(this.ids,this.coords,this.nodeSize,0,this.numItems-1,0),this._finished=!0,this;}range(e,r,i,n){if(!this._finished)throw Error(\"Data not yet indexed - call index.finish().\");let{ids:a,coords:s,nodeSize:o}=this;dt[0]=0,dt[1]=a.length-1,dt[2]=0;let l=3,u=[];for(;l>0;){let h=dt[--l],c=dt[--l],p=dt[--l];if(c-p<=o){for(let m=p;m<=c;m++){let g=s[2*m],x=s[2*m+1];g>=e&&g<=i&&x>=r&&x<=n&&u.push(a[m]);}continue;}let f=p+c>>1,d=s[2*f],y=s[2*f+1];d>=e&&d<=i&&y>=r&&y<=n&&u.push(a[f]),(h===0?e<=d:r<=y)&&(dt[l++]=p,dt[l++]=f-1,dt[l++]=1-h),(h===0?i>=d:n>=y)&&(dt[l++]=f+1,dt[l++]=c,dt[l++]=1-h);}return u;}within(e,r,i){let n=[];return this.withinInto(e,r,i,n),n;}withinInto(e,r,i,n){if(!this._finished)throw Error(\"Data not yet indexed - call index.finish().\");let{ids:a,coords:s,nodeSize:o}=this;dt[0]=0,dt[1]=a.length-1,dt[2]=0;let l=3,u=0,h=i*i;for(;l>0;){let c=dt[--l],p=dt[--l],f=dt[--l];if(p-f<=o){for(let g=f;g<=p;g++)ac(s[2*g],s[2*g+1],e,r)<=h&&(n[u++]=a[g]);continue;}let d=f+p>>1,y=s[2*d],m=s[2*d+1];ac(y,m,e,r)<=h&&(n[u++]=a[d]),(c===0?e-i<=y:r-i<=m)&&(dt[l++]=f,dt[l++]=d-1,dt[l++]=1-c),(c===0?e+i>=y:r+i>=m)&&(dt[l++]=d+1,dt[l++]=p,dt[l++]=1-c);}return u;}};function Xo(t,e,r,i,n,a){if(n-i<=r)return;let s=i+n>>1;Ed(t,e,s,i,n,a),Xo(t,e,r,i,s-1,1-a),Xo(t,e,r,s+1,n,1-a);}function Ed(t,e,r,i,n,a){for(;n>i;){if(n-i>600){let u=n-i+1,h=r-i+1,c=Math.log(u),p=.5*Math.exp(2*c/3),f=.5*Math.sqrt(c*p*(u-p)/u)*(h-u/2<0?-1:1);Ed(t,e,r,Math.max(i,Math.floor(r-h*p/u+f)),Math.min(n,Math.floor(r+(u-h)*p/u+f)),a);}let s=e[2*r+a],o=i,l=n;for(Ii(t,e,i,r),e[2*n+a]>s&&Ii(t,e,i,n);o<l;){for(Ii(t,e,o,l),o++,l--;e[2*o+a]<s;)o++;for(;e[2*l+a]>s;)l--;}e[2*i+a]===s?Ii(t,e,i,l):(l++,Ii(t,e,l,n)),l<=r&&(i=l+1),r<=l&&(n=l-1);}}function Ii(t,e,r,i){Rs(t,r,i),Rs(e,2*r,2*i),Rs(e,2*r+1,2*i+1);}function Rs(t,e,r){let i=t[e];t[e]=t[r],t[r]=i;}function ac(t,e,r,i){let n=t-r,a=e-i;return n*n+a*a;}var Yo={minZoom:0,maxZoom:16,minPoints:2,radius:40,extent:512,nodeSize:64,log:!1,generateId:!1,reduce:null,map:t=>t},w2=class{constructor(t){this.options=Object.assign(Object.create(Yo),t),this.trees=Array(this.options.maxZoom+1),this.stride=this.options.reduce?7:6,this.clusterProps=[],this.points=[];}load(t){let e=[];for(let r of t){if(!r.geometry)continue;let[i,n]=r.geometry.coordinates,[a,s]=[Gr(i),Xr(n)],o={id:r.id,type:\"Point\",geometry:[a,s],tags:r.properties};e.push(o);}this.createIndex(e);}initialize(t){let e=[];for(let r of t)r.type===\"Point\"&&e.push(r);this.createIndex(e);}updateIndex(t,e,r){this.options=Object.assign(Object.create(Yo),r.clusterOptions),this.initialize(t);}createIndex(t){let{log:e,minZoom:r,maxZoom:i}=this.options;e&&console.time(\"total time\");let n=`prepare ${t.length} points`;e&&console.time(n),this.points=t;let a=[];for(let o=0;o<t.length;o++){let l=t[o];if(!l?.geometry)continue;let[u,h]=l.geometry;u=Math.fround(u),h=Math.fround(h),a.push(u,h,1/0,o,-1,1),this.options.reduce&&a.push(0);}let s=this.trees[i+1]=this.createTree(a);e&&console.timeEnd(n);for(let o=i;o>=r;o--){let l=Date.now();s=this.trees[o]=this.createTree(this.cluster(s,o)),e&&console.log(\"z%d: %d clusters in %dms\",o,s.numItems,Date.now()-l);}e&&console.timeEnd(\"total time\");}getClusters(t,e){return this.getClustersInternal(t,e).map(r=>wa(r));}getClustersInternal(t,e){let r=((t[0]+180)%360+360)%360-180,i=Math.max(-90,Math.min(90,t[1])),n=t[2]===180?180:((t[2]+180)%360+360)%360-180,a=Math.max(-90,Math.min(90,t[3]));if(t[2]-t[0]>=360)r=-180,n=180;else if(r>n){let h=this.getClustersInternal([r,i,180,a],e),c=this.getClustersInternal([-180,i,n,a],e);return h.concat(c);}let s=this.trees[this.limitZoom(e)],o=s.range(Gr(r),Xr(a),Gr(n),Xr(i)),l=s.flatData,u=[];for(let h of o){let c=this.stride*h;u.push(l[c+5]>1?D2(l,c,this.clusterProps):this.points[l[c+3]]);}return u;}getChildren(t){let e=this.getOriginId(t),r=this.getOriginZoom(t),i=Error(\"No cluster with the specified id: \"+t),n=this.trees[r];if(!n)throw i;let a=n.flatData;if(e*this.stride>=a.length)throw i;let s=this.options.radius/(this.options.extent*2**(r-1)),o=a[e*this.stride],l=a[e*this.stride+1],u=n.within(o,l,s),h=[];for(let c of u){let p=c*this.stride;a[p+4]===t&&h.push(a[p+5]>1?_2(a,p,this.clusterProps):wa(this.points[a[p+3]]));}if(h.length===0)throw i;return h;}getLeaves(t,e,r){e||=10,r||=0;let i=[];return this.appendLeaves(i,t,e,r,0),i;}getTile(t,e,r){let i=this.trees[this.limitZoom(t)];if(!i)return null;let n=2**t,{extent:a,radius:s}=this.options,o=s/a,l=(r-o)/n,u=(r+1+o)/n,h={transformed:!0,features:[],source:null,x:e,y:r,z:t};return this.addTileFeatures(i.range((e-o)/n,l,(e+1+o)/n,u),i.flatData,e,r,n,h),e===0&&this.addTileFeatures(i.range(1-o/n,l,1,u),i.flatData,n,r,n,h),e===n-1&&this.addTileFeatures(i.range(0,l,o/n,u),i.flatData,-1,r,n,h),h;}getClusterExpansionZoom(t){return this.getOriginZoom(t);}appendLeaves(t,e,r,i,n){let a=this.getChildren(e);for(let s of a){let o=s.properties;if(o?.cluster?n+o.point_count<=i?n+=o.point_count:n=this.appendLeaves(t,o.cluster_id,r,i,n):n<i?n++:t.push(s),t.length===r)break;}return n;}createTree(t){let e=new b2(t.length/this.stride|0,this.options.nodeSize,Float32Array);for(let r=0;r<t.length;r+=this.stride)e.add(t[r],t[r+1]);return e.finish(),e.flatData=t,e.data=null,e;}addTileFeatures(t,e,r,i,n,a){for(let s of t){let o=s*this.stride,l=e[o+5]>1,u,h,c;if(l)u=Hl(e,o,this.clusterProps),h=e[o],c=e[o+1];else{let d=this.points[e[o+3]];u=d.tags,[h,c]=d.geometry;}let p={type:1,geometry:[[Math.round(this.options.extent*(h*n-r)),Math.round(this.options.extent*(c*n-i))]],tags:u},f;f=l||this.options.generateId?e[o+3]:this.points[e[o+3]].id,f!==void 0&&(p.id=f),a.features.push(p);}}limitZoom(t){return Math.max(this.options.minZoom,Math.min(Math.floor(+t),this.options.maxZoom+1));}cluster(t,e){let{radius:r,extent:i,reduce:n,minPoints:a}=this.options,s=r/(i*2**e),o=t.flatData,l=[],u=this.stride;for(let h=0;h<o.length;h+=u){if(o[h+2]<=e)continue;o[h+2]=e;let c=o[h],p=o[h+1],f=t.within(o[h],o[h+1],s),d=o[h+5],y=d;for(let m of f){let g=m*u;o[g+2]>e&&(y+=o[g+5]);}if(y>d&&y>=a){let m=c*d,g=p*d,x,b=-1,v=((h/u|0)<<5)+(e+1)+this.points.length;for(let w of f){let _=w*u;if(o[_+2]<=e)continue;o[_+2]=e;let A=o[_+5];m+=o[_]*A,g+=o[_+1]*A,o[_+4]=v,n&&(x||(x=this.map(o,h,!0),b=this.clusterProps.length,this.clusterProps.push(x)),n(x,this.map(o,_)));}o[h+4]=v,l.push(m/y,g/y,1/0,v,-1,y),n&&l.push(b);}else{for(let m=0;m<u;m++)l.push(o[h+m]);if(y>1)for(let m of f){let g=m*u;if(!(o[g+2]<=e)){o[g+2]=e;for(let x=0;x<u;x++)l.push(o[g+x]);}}}}return l;}getOriginId(t){return t-this.points.length>>5;}getOriginZoom(t){return(t-this.points.length)%32;}map(t,e,r){if(t[e+5]>1){let a=this.clusterProps[t[e+6]];return r?Object.assign({},a):a;}let i=this.points[t[e+3]].tags,n=this.options.map(i);return r&&n===i?Object.assign({},n):n;}};function D2(t,e,r){return{id:t[e+3],type:\"Point\",tags:Hl(t,e,r),geometry:[t[e],t[e+1]]};}function _2(t,e,r){return{type:\"Feature\",id:t[e+3],properties:Hl(t,e,r),geometry:{type:\"Point\",coordinates:[Dd(t[e]),_d(t[e+1])]}};}function Hl(t,e,r){let i=t[e+5],n=i>=1e4?`${Math.round(i/1e3)}k`:i>=1e3?`${Math.round(i/100)/10}k`:i,a=t[e+6],s=a===-1?{}:Object.assign({},r[a]);return Object.assign(s,{cluster:!0,cluster_id:t[e+3],point_count:i,point_count_abbreviated:n});}var Fd=\"geojsonvt_clip_start\",Td=\"geojsonvt_clip_end\";function sc(t,e,r,i,n){let a=e===n.maxZoom?0:n.tolerance/((1<<e)*n.extent),s={transformed:!1,features:[],source:null,x:r,y:i,z:e,minX:2,minY:1,maxX:-1,maxY:0,numPoints:0,numSimplified:0,numFeatures:t.length};for(let o of t)A2(s,o,a,n);return s;}function A2(t,e,r,i){switch(t.minX=Math.min(t.minX,e.minX),t.minY=Math.min(t.minY,e.minY),t.maxX=Math.max(t.maxX,e.maxX),t.maxY=Math.max(t.maxY,e.maxY),e.type){case\"Point\":case\"MultiPoint\":S2(t,e);return;case\"LineString\":E2(t,e,r,i);return;case\"MultiLineString\":case\"Polygon\":F2(t,e,r);return;case\"MultiPolygon\":T2(t,e,r);return;}}function S2(t,e){let r=[];for(let n=0;n<e.geometry.length;n+=3)r.push(e.geometry[n],e.geometry[n+1]),t.numPoints++,t.numSimplified++;if(!r.length)return;let i={type:1,tags:e.tags||null,geometry:r};e.id!==null&&(i.id=e.id),t.features.push(i);}function E2(t,e,r,i){let n=[];if(Kl(n,e.geometry,t,r,!1,!1),!n.length)return;let a=e.tags||null;if(i.lineMetrics){a={};for(let o in e.tags)a[o]=e.tags[o];a[Fd]=e.geometry.start/e.geometry.size,a[Td]=e.geometry.end/e.geometry.size;}let s={type:2,tags:a,geometry:n};e.id!==null&&(s.id=e.id),t.features.push(s);}function F2(t,e,r){let i=[];for(let a=0;a<e.geometry.length;a++)Kl(i,e.geometry[a],t,r,e.type===\"Polygon\",a===0);if(!i.length)return;let n={type:e.type===\"Polygon\"?3:2,tags:e.tags||null,geometry:i};e.id!==null&&(n.id=e.id),t.features.push(n);}function T2(t,e,r){let i=[];for(let a=0;a<e.geometry.length;a++){let s=e.geometry[a];for(let o=0;o<s.length;o++)Kl(i,s[o],t,r,!0,o===0);}if(!i.length)return;let n={type:3,tags:e.tags||null,geometry:i};e.id!==null&&(n.id=e.id),t.features.push(n);}function Kl(t,e,r,i,n,a){let s=i*i;if(i>0&&e.size<(n?s:i)){r.numPoints+=e.points.length/3;return;}let o=[];for(let l=0;l<e.points.length;l+=3)(i===0||e.points[l+2]>s)&&(r.numSimplified++,o.push(e.points[l],e.points[l+1])),r.numPoints++;n&&k2(o,a),t.push(o);}function k2(t,e){let r=0;for(let i=0,n=t.length,a=n-2;i<n;a=i,i+=2)r+=(t[i]-t[a])*(t[i+1]+t[a+1]);if(r>0===e)for(let i=0,n=t.length;i<n/2;i+=2){let a=t[i],s=t[i+1];t[i]=t[n-2-i],t[i+1]=t[n-1-i],t[n-2-i]=a,t[n-1-i]=s;}}function oc(t,e){if(t.transformed)return t;let r=1<<t.z,i=t.x,n=t.y;for(let a of t.features)a.type===1?I2(a,e,r,i,n):C2(a,e,r,i,n);return t.transformed=!0,t;}function I2(t,e,r,i,n){let a=t,s=t.geometry,o=[];for(let l=0;l<s.length;l+=2)o.push(kd(s[l],s[l+1],e,r,i,n));return a.geometry=o,a;}function C2(t,e,r,i,n){let a=t,s=t.geometry,o=[];for(let l of s){let u=[];for(let h=0;h<l.length;h+=2)u.push(kd(l[h],l[h+1],e,r,i,n));o.push(u);}return a.geometry=o,a;}function kd(t,e,r,i,n,a){return[Math.round(r*(t*i-n)),Math.round(r*(e*i-a))];}var M2=class{constructor(t){this.options=t,this.total=0,this.stats={},this.tiles={},this.tileCoords=[],this.stats={},this.total=0;}initialize(t){this.splitTile(t,0,0,0),this.options.debug&&(t.length&&console.log(\"features: %d, points: %d\",this.tiles[0].numFeatures,this.tiles[0].numPoints),console.timeEnd(\"generate tiles\"),console.log(\"tiles generated:\",this.total,JSON.stringify(this.stats)));}updateIndex(t,e,r){r.debug>1&&(console.log(\"invalidating tiles\"),console.time(\"invalidating\")),this.invalidateTiles(e),r.debug>1&&console.timeEnd(\"invalidating\");let[i,n,a]=[0,0,0],s=sc(t,i,n,a,r);s.source=t;let o=Xn(i,n,a);if(this.tiles[o]=s,this.tileCoords.push({z:i,x:n,y:a,id:o}),r.debug){let l=`z${i}`;this.stats[l]=(this.stats[l]||0)+1,this.total++;}}getClusterExpansionZoom(t){return null;}getChildren(t){return null;}getLeaves(t,e,r){return null;}getTile(t,e,r){let{extent:i,debug:n}=this.options,a=1<<t;e=e+a&a-1;let s=Xn(t,e,r);if(this.tiles[s])return oc(this.tiles[s],i);n>1&&console.log(\"drilling down to z%d-%d-%d\",t,e,r);let o=t,l=e,u=r,h;for(;!h&&o>0;)o--,l>>=1,u>>=1,h=this.tiles[Xn(o,l,u)];return!h?.source||(n>1&&(console.log(\"found parent tile z%d-%d-%d\",o,l,u),console.time(\"drilling down\")),this.splitTile(h.source,o,l,u,t,e,r),n>1&&console.timeEnd(\"drilling down\"),!this.tiles[s])?null:oc(this.tiles[s],i);}splitTile(t,e,r,i,n,a,s){let o=[t,e,r,i],l=this.options,u=l.debug;for(;o.length;){i=o.pop(),r=o.pop(),e=o.pop(),t=o.pop();let h=1<<e,c=Xn(e,r,i),p=this.tiles[c];if(!p&&(u>1&&console.time(\"creation\"),p=this.tiles[c]=sc(t,e,r,i,l),this.tileCoords.push({z:e,x:r,y:i,id:c}),u)){u>1&&(console.log(\"tile z%d-%d-%d (features: %d, points: %d, simplified: %d)\",e,r,i,p.numFeatures,p.numPoints,p.numSimplified),console.timeEnd(\"creation\"));let A=`z${e}`;this.stats[A]=(this.stats[A]||0)+1,this.total++;}if(p.source=t,n==null){if(e===l.indexMaxZoom||p.numPoints<=l.indexMaxPoints)continue;}else{if(e===l.maxZoom||e===n)continue;if(n!=null){let A=n-e;if(r!==a>>A||i!==s>>A)continue;}}if(p.source=null,!t.length)continue;u>1&&console.time(\"clipping\");let f=.5*l.buffer/l.extent,d=.5-f,y=.5+f,m=1+f,g=null,x=null,b=null,v=null,w=Fe(t,h,r-f,r+y,0,p.minX,p.maxX,l),_=Fe(t,h,r+d,r+m,0,p.minX,p.maxX,l);w&&(g=Fe(w,h,i-f,i+y,1,p.minY,p.maxY,l),x=Fe(w,h,i+d,i+m,1,p.minY,p.maxY,l)),_&&(b=Fe(_,h,i-f,i+y,1,p.minY,p.maxY,l),v=Fe(_,h,i+d,i+m,1,p.minY,p.maxY,l)),u>1&&console.timeEnd(\"clipping\"),o.push(g||[],e+1,r*2,i*2),o.push(x||[],e+1,r*2,i*2+1),o.push(b||[],e+1,r*2+1,i*2),o.push(v||[],e+1,r*2+1,i*2+1);}}invalidateTiles(t){if(!t.length)return;let e=this.options,{debug:r}=e,i=1/0,n=-1/0,a=1/0,s=-1/0;for(let u of t)i=Math.min(i,u.minX),n=Math.max(n,u.maxX),a=Math.min(a,u.minY),s=Math.max(s,u.maxY);let o=e.buffer/e.extent,l=new Set();for(let u in this.tiles){let h=this.tiles[u],c=1<<h.z,p=(h.x-o)/c,f=(h.x+1+o)/c,d=(h.y-o)/c,y=(h.y+1+o)/c;if(n<p||i>=f||s<d||a>=y)continue;let m=!1;for(let g of t)if(g.maxX>=p&&g.minX<f&&g.maxY>=d&&g.minY<y){m=!0;break;}if(m){if(r){r>1&&console.log(\"invalidate tile z%d-%d-%d (features: %d, points: %d, simplified: %d)\",h.z,h.x,h.y,h.numFeatures,h.numPoints,h.numSimplified);let g=`z${h.z}`;this.stats[g]=(this.stats[g]||0)-1,this.total--;}delete this.tiles[u],l.add(u);}}l.size&&(this.tileCoords=this.tileCoords.filter(u=>!l.has(u.id)));}};function Xn(t,e,r){return((1<<t)*r+e)*32+t;}var B2={maxZoom:14,indexMaxZoom:5,indexMaxPoints:1e5,tolerance:3,extent:4096,buffer:64,lineMetrics:!1,promoteId:null,generateId:!1,updateable:!1,cluster:!1,clusterOptions:Yo,debug:0},Id=class{constructor(t,e){e=this.options=Object.assign({},B2,e);let r=e.debug;if(r&&console.time(\"preprocess data\"),e.maxZoom<0||e.maxZoom>24)throw Error(\"maxZoom should be in the 0-24 range\");if(e.promoteId&&e.generateId)throw Error(\"promoteId and generateId cannot be used together.\");let i=Gl(t,e);r&&(console.timeEnd(\"preprocess data\"),console.log(\"index: maxZoom: %d, maxPoints: %d\",e.indexMaxZoom,e.indexMaxPoints),console.time(\"generate tiles\")),i=Zl(i,e),e.updateable&&(this.source=i),this.initializeIndex(i,e);}initializeIndex(t,e){this.tileIndex=e.cluster?new w2(e.clusterOptions):new M2(e),t.length&&this.tileIndex.initialize(t);}getTile(t,e,r){return t=+t,e=+e,r=+r,t<0||t>24?null:this.tileIndex.getTile(t,e,r);}updateData(t,e){let r=this.options;if(!r.updateable)throw Error(\"to update tile geojson `updateable` option must be set to true\");let{affected:i,source:n}=g2(this.source,t,r);e&&({affected:i,source:n}=this.filterUpdate(n,i,e)),i.length&&(this.source=n,this.tileIndex.updateIndex(n,i,r));}filterUpdate(t,e,r){let i=new Set();for(let n of t)n.id!=null&&(r(wa(n))||(e.push(n),i.add(n.id)));return t=t.filter(n=>!i.has(n.id)),{affected:e,source:t};}getData(){if(!this.options.updateable)throw Error(\"to retrieve data the `updateable` option must be set to true\");return s2(this.source);}updateClusterOptions(t,e){let r=this.options.cluster;if(this.options.cluster=t,this.options.clusterOptions=e,r==t){this.tileIndex.updateIndex(this.source,[],this.options);return;}this.initializeIndex(this.source,this.options);}getClusterExpansionZoom(t){return this.tileIndex.getClusterExpansionZoom(t);}getClusterChildren(t){return this.tileIndex.getChildren(t);}getClusterLeaves(t,e,r){return this.tileIndex.getLeaves(t,e,r);}},Wo=At([{name:\"a_pos_normal\",components:2,type:\"Int16\"},{name:\"a_data\",components:4,type:\"Uint8\"}],4),P2=Wo.members;Wo.size,Wo.alignment;var Zo=At([{name:\"a_uv_x\",components:1,type:\"Float32\"},{name:\"a_split_index\",components:1,type:\"Float32\"}]),z2=Zo.members;Zo.size,Zo.alignment;var L2=Math.cos(75/2*(Math.PI/180)),Cd=1/2,lc=2**14/Cd,Md=class{constructor(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map(e=>e.id),this.index=t.index,this.hasDependencies=!1,this.patternFeatures=[],this.lineClipsArray=[],this.gradients={};for(let e of this.layers)this.gradients[e.id]={};this.layoutVertexArray=new Wm(),this.layoutVertexArray2=new Zm(),this.indexArray=new mn(),this.programConfigurations=new dr(t.layers,t.zoom),this.segments=new Jt(),this.maxLineLength=0,this.stateDependentLayerIds=this.layers.filter(e=>e.isStateDependent()).map(e=>e.id);}populate(t,e,r){this.hasDependencies=ga(\"line\",this.layers,e)||this.hasLineDasharray(this.layers);let i=this.layers[0].layout.get(\"line-sort-key\"),n=!i.isConstant(),a=[],s=new at(this.zoom),o=this.layers[0]._featureFilter.needGeometry;for(let{feature:l,id:u,index:h,sourceLayerIndex:c}of t){let p=si(l,o);if(!this.layers[0]._featureFilter.filter(s,p,r))continue;let f=n?i.evaluate(p,{},r):void 0,d={id:u,properties:l.properties,type:l.type,sourceLayerIndex:c,index:h,geometry:o?p.geometry:vr(l),patterns:{},dashes:{},sortKey:f};a.push(d);}n&&a.sort((l,u)=>l.sortKey-u.sortKey);for(let l of a){let{geometry:u,index:h,sourceLayerIndex:c}=l;this.hasDependencies?(ga(\"line\",this.layers,e)?Nl(\"line\",this.layers,l,{zoom:this.zoom},e):this.hasLineDasharray(this.layers)&&this.addLineDashDependencies(this.layers,l,this.zoom,e),this.patternFeatures.push(l)):this.addFeature(l,u,h,r,{},{},e.subdivisionGranularity);let p=t[h].feature;e.featureIndex.insert(p,u,h,c,this.index);}}update(t,e,r,i){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,{imagePositions:r,dashPositions:i});}addFeatures({options:t,canonical:e,patternPositions:r,dashPositions:i}){for(let n of this.patternFeatures)this.addFeature(n,n.geometry,n.index,e,r,i,t.subdivisionGranularity);}isEmpty(){return this.layoutVertexArray.length===0;}uploadPending(){return!this.uploaded||this.programConfigurations.needsUpload;}upload(t){this.uploaded||(this.layoutVertexArray2.length!==0&&(this.layoutVertexBuffer2=t.createVertexBuffer(this.layoutVertexArray2,z2)),this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,P2),this.indexBuffer=t.createIndexBuffer(this.indexArray)),this.programConfigurations.upload(t),this.uploaded=!0;}destroy(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy());}lineFeatureClips(t){if(t.properties&&Object.hasOwn(t.properties,\"geojsonvt_clip_start\")&&Object.hasOwn(t.properties,\"geojsonvt_clip_end\"))return{start:+t.properties[Fd],end:+t.properties[Td]};}addFeature(t,e,r,i,n,a,s){let o=this.layers[0].layout,l=o.get(\"line-join\").evaluate(t,{}),u=o.get(\"line-cap\").evaluate(t,{}),h=o.get(\"line-miter-limit\").evaluate(t,{}),c=o.get(\"line-round-limit\").evaluate(t,{});this.lineClips=this.lineFeatureClips(t);for(let p of e)this.addLine(p,t,l,u,h,c,i,s);this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,r,{imagePositions:n,dashPositions:a,canonical:i});}addLine(t,e,r,i,n,a,s,o){this.distance=0,this.scaledDistance=0,this.totalDistance=0;let l=s?o.line.getGranularityForZoomLevel(s.z):1;if(t=or(t,l),this.lineClips){this.lineClipsArray.push(this.lineClips);for(let b=0;b<t.length-1;b++)this.totalDistance+=t[b].dist(t[b+1]);this.updateScaledDistance(),this.maxLineLength=Math.max(this.maxLineLength,this.totalDistance);}let u=gn.types[e.type]===\"Polygon\",h=t.length;for(;h>=2&&t[h-1].equals(t[h-2]);)h--;let c=0;for(;c<h-1&&t[c].equals(t[c+1]);)c++;if(h-c<(u?3:2))return;r===\"bevel\"&&(n=1.05);let p=this.overscaling<=16?15*mt/(512*this.overscaling):0,f=this.segments.prepareSegment(h*10,this.layoutVertexArray,this.indexArray),d,y,m,g,x;this.e1=this.e2=-1,u&&(d=t[h-2],x=t[c].sub(d)._unit()._perp());for(let b=c;b<h;b++){if(m=b===h-1?u?t[c+1]:void 0:t[b+1],m&&t[b].equals(m))continue;x&&(g=x),d&&(y=d),d=t[b],x=m?m.sub(d)._unit()._perp():g,g||=x;let v=g.add(x);(v.x!==0||v.y!==0)&&v._unit();let w=g.x*x.x+g.y*x.y,_=v.x*x.x+v.y*x.y,A=_===0?1/0:1/_,S=2*Math.sqrt(2-2*_),F=_<L2&&y&&m,z=g.x*x.y-g.y*x.x>0;if(F&&b>c){let P=d.dist(y);if(P>2*p){let E=d.sub(d.sub(y)._mult(p/P)._round());this.updateDistance(y,E),this.addCurrentVertex(E,g,0,0,f),y=E;}}let $=y&&m,B=$?r:u?\"butt\":i;if($&&B===\"round\"&&(A<a?B=\"miter\":A<=2&&(B=\"fakeround\")),B===\"miter\"&&A>n&&(B=\"bevel\"),B===\"bevel\"&&(A>2&&(B=\"flipbevel\"),A<n&&(B=\"miter\")),y&&this.updateDistance(y,d),B===\"miter\")v._mult(A),this.addCurrentVertex(d,v,0,0,f);else if(B===\"flipbevel\"){if(A>100)v=x.mult(-1);else{let P=A*g.add(x).mag()/g.sub(x).mag();v._perp()._mult(P*(z?-1:1));}this.addCurrentVertex(d,v,0,0,f),this.addCurrentVertex(d,v.mult(-1),0,0,f);}else if(B===\"bevel\"||B===\"fakeround\"){let P=-Math.sqrt(A*A-1),E=z?P:0,O=z?0:P;if(y&&this.addCurrentVertex(d,g,E,O,f),B===\"fakeround\"){let R=Math.round(S*180/Math.PI/20);for(let L=1;L<R;L++){let tt=L/R;if(tt!==.5){let pt=tt-.5,st=1.0904+w*(-3.2452+w*(3.55645-w*1.43519)),ft=.848013+w*(-1.06021+w*.215638);tt+=tt*pt*(tt-1)*(st*pt*pt+ft);}let it=x.sub(g)._mult(tt)._add(g)._unit()._mult(z?-1:1);this.addHalfVertex(d,it.x,it.y,!1,z,0,f);}}m&&this.addCurrentVertex(d,x,-E,-O,f);}else if(B===\"butt\")this.addCurrentVertex(d,v,0,0,f);else if(B===\"square\"){let P=y?1:-1;this.addCurrentVertex(d,v,P,P,f);}else B===\"round\"&&(y&&(this.addCurrentVertex(d,g,0,0,f),this.addCurrentVertex(d,g,1,1,f,!0)),m&&(this.addCurrentVertex(d,x,-1,-1,f,!0),this.addCurrentVertex(d,x,0,0,f)));if(F&&b<h-1){let P=d.dist(m);if(P>2*p){let E=d.add(m.sub(d)._mult(p/P)._round());this.updateDistance(d,E),this.addCurrentVertex(E,x,0,0,f),d=E;}}}}addCurrentVertex(t,e,r,i,n,a=!1){let s=e.x+e.y*r,o=e.y-e.x*r,l=-e.x+e.y*i,u=-e.y-e.x*i;this.addHalfVertex(t,s,o,a,!1,r,n),this.addHalfVertex(t,l,u,a,!0,-i,n),this.distance>lc/2&&this.totalDistance===0&&(this.distance=0,this.updateScaledDistance(),this.addCurrentVertex(t,e,r,i,n,a));}addHalfVertex({x:t,y:e},r,i,n,a,s,o){let l=(this.lineClips?this.scaledDistance*(lc-1):this.scaledDistance)*Cd;if(this.layoutVertexArray.emplaceBack((t<<1)+ +!!n,(e<<1)+ +!!a,Math.round(63*r)+128,Math.round(63*i)+128,(s===0?0:s<0?-1:1)+1|(l&63)<<2,l>>6),this.lineClips){let h=(this.scaledDistance-this.lineClips.start)/(this.lineClips.end-this.lineClips.start);this.layoutVertexArray2.emplaceBack(h,this.lineClipsArray.length);}let u=o.vertexLength++;this.e1>=0&&this.e2>=0&&(this.indexArray.emplaceBack(this.e1,u,this.e2),o.primitiveLength++),a?this.e2=u:this.e1=u;}updateScaledDistance(){this.scaledDistance=this.lineClips?this.lineClips.start+(this.lineClips.end-this.lineClips.start)*this.distance/this.totalDistance:this.distance;}updateDistance(t,e){this.distance+=t.dist(e),this.updateScaledDistance();}hasLineDasharray(t){for(let e of t){let r=e.paint.get(\"line-dasharray\");if(r&&!r.isConstant())return!0;}return!1;}addLineDashDependencies(t,e,r,i){for(let n of t){let a=n.paint.get(\"line-dasharray\");if(!a||a.value.kind===\"constant\")continue;let s=n.layout.get(\"line-cap\").evaluate(e,{})===\"round\",o={dasharray:a.value.evaluate({zoom:r-1},e,{}),round:s},l={dasharray:a.value.evaluate({zoom:r},e,{}),round:s},u={dasharray:a.value.evaluate({zoom:r+1},e,{}),round:s},h=`${o.dasharray.join(\",\")},${o.round}`,c=`${l.dasharray.join(\",\")},${l.round}`,p=`${u.dasharray.join(\",\")},${u.round}`;i.dashDependencies[h]=o,i.dashDependencies[c]=l,i.dashDependencies[p]=u,e.dashes[n.id]={min:h,mid:c,max:p};}}};I(\"LineBucket\",Md,{omit:[\"layers\",\"patternFeatures\"]});var V2,O2=()=>V2||=new qt({\"line-cap\":new U(D.layout_line[\"line-cap\"],\"line-cap\"),\"line-join\":new U(D.layout_line[\"line-join\"],\"line-join\"),\"line-miter-limit\":new U(D.layout_line[\"line-miter-limit\"],\"line-miter-limit\"),\"line-round-limit\":new U(D.layout_line[\"line-round-limit\"],\"line-round-limit\"),\"line-sort-key\":new U(D.layout_line[\"line-sort-key\"],\"line-sort-key\")}),R2,$2=()=>R2||=new qt({\"line-opacity\":new U(D.paint_line[\"line-opacity\"],\"line-opacity\"),\"line-layer-opacity\":new V(D.paint_line[\"line-layer-opacity\"],\"line-layer-opacity\"),\"line-color\":new U(D.paint_line[\"line-color\"],\"line-color\"),\"line-translate\":new V(D.paint_line[\"line-translate\"],\"line-translate\"),\"line-translate-anchor\":new V(D.paint_line[\"line-translate-anchor\"],\"line-translate-anchor\"),\"line-width\":new U(D.paint_line[\"line-width\"],\"line-width\"),\"line-gap-width\":new U(D.paint_line[\"line-gap-width\"],\"line-gap-width\"),\"line-offset\":new U(D.paint_line[\"line-offset\"],\"line-offset\"),\"line-blur\":new U(D.paint_line[\"line-blur\"],\"line-blur\"),\"line-dasharray\":new en(D.paint_line[\"line-dasharray\"],\"line-dasharray\"),\"line-pattern\":new en(D.paint_line[\"line-pattern\"],\"line-pattern\"),\"line-gradient\":new Na(D.paint_line[\"line-gradient\"],\"line-gradient\")}),uc={get paint(){return $2();},get layout(){return O2();}},N2=class extends U{possiblyEvaluate(t,e){return e=new at(Math.floor(e.zoom),{now:e.now,fadeDuration:e.fadeDuration,zoomHistory:e.zoomHistory,transition:e.transition}),super.possiblyEvaluate(t,e);}evaluate(t,e,r,i){return e=Ut({},e,{zoom:Math.floor(e.zoom)}),super.evaluate(t,e,r,i);}},Yn;var U2=class extends ce{constructor(t,e){super(t,uc,e),this.gradientVersion=0,Yn||(Yn=new N2(uc.paint.properties[\"line-width\"].specification,\"line-floorwidth\"),Yn.useIntegerZoom=!0);}_handleSpecialPaintPropertyUpdate(t){if(t===\"line-gradient\"){let e=this.gradientExpression();this.stepInterpolant=nm(e)?e._styleExpression.expression instanceof yl:!1,this.gradientVersion=(this.gradientVersion+1)%(2**53-1);}}gradientExpression(){return this._transitionablePaint._values[\"line-gradient\"].value.expression;}recalculate(t,e){super.recalculate(t,e),this.paint._values[\"line-floorwidth\"]=Yn.possiblyEvaluate(this._transitioningPaint._values[\"line-width\"].value,t);}createBucket(t){return new Md(t);}queryRadius(t){let e=t,r=hc(jr(\"line-width\",this,e),jr(\"line-gap-width\",this,e)),i=jr(\"line-offset\",this,e);return r/2+Math.abs(i)+qa(this.paint.get(\"line-translate\"));}queryIntersectsFeature({queryGeometry:t,feature:e,featureState:r,geometry:i,transform:n,pixelsToTileUnits:a}){let s=ja(t,this.paint.get(\"line-translate\"),this.paint.get(\"line-translate-anchor\"),-n.bearingInRadians,a),o=a/2*hc(this.paint.get(\"line-width\").evaluate(e,r),this.paint.get(\"line-gap-width\").evaluate(e,r)),l=this.paint.get(\"line-offset\").evaluate(e,r);return l&&(i=gg(i,l*a)),cg(s,i,o);}isTileClipped(){return!0;}};function hc(t,e){return e>0?e+2*t:t;}var q2=At([{name:\"a_pos_offset\",components:4,type:\"Int16\"},{name:\"a_data\",components:4,type:\"Uint16\"},{name:\"a_pixeloffset\",components:4,type:\"Int16\"},{name:\"a_height_offset\",components:1,type:\"Float32\"}],4),j2=At([{name:\"a_projected_pos\",components:3,type:\"Float32\"}],4);At([{name:\"a_fade_opacity\",components:1,type:\"Uint32\"}],4);var G2=At([{name:\"a_placed\",components:2,type:\"Uint8\"},{name:\"a_shift\",components:2,type:\"Float32\"},{name:\"a_box_real\",components:2,type:\"Int16\"}]);At([{type:\"Int16\",name:\"anchorPointX\"},{type:\"Int16\",name:\"anchorPointY\"},{type:\"Int16\",name:\"x1\"},{type:\"Int16\",name:\"y1\"},{type:\"Int16\",name:\"x2\"},{type:\"Int16\",name:\"y2\"},{type:\"Uint32\",name:\"featureIndex\"},{type:\"Uint16\",name:\"sourceLayerIndex\"},{type:\"Uint16\",name:\"bucketIndex\"}]);var cc=At([{name:\"a_pos\",components:2,type:\"Int16\"},{name:\"a_anchor_pos\",components:2,type:\"Int16\"},{name:\"a_extrude\",components:2,type:\"Int16\"}],4),d5=At([{name:\"a_pos\",components:2,type:\"Float32\"},{name:\"a_radius\",components:1,type:\"Float32\"},{name:\"a_flags\",components:2,type:\"Int16\"}],4);At([{name:\"triangle\",components:3,type:\"Uint16\"}]),At([{type:\"Int16\",name:\"anchorX\"},{type:\"Int16\",name:\"anchorY\"},{type:\"Uint16\",name:\"glyphStartIndex\"},{type:\"Uint16\",name:\"numGlyphs\"},{type:\"Uint32\",name:\"vertexStartIndex\"},{type:\"Uint32\",name:\"lineStartIndex\"},{type:\"Uint32\",name:\"lineLength\"},{type:\"Uint16\",name:\"segment\"},{type:\"Uint16\",name:\"lowerSize\"},{type:\"Uint16\",name:\"upperSize\"},{type:\"Float32\",name:\"lineOffsetX\"},{type:\"Float32\",name:\"lineOffsetY\"},{type:\"Uint8\",name:\"writingMode\"},{type:\"Uint8\",name:\"placedOrientation\"},{type:\"Uint8\",name:\"hidden\"},{type:\"Uint32\",name:\"crossTileID\"},{type:\"Int16\",name:\"associatedIconIndex\"},{type:\"Float32\",name:\"heightOffset\"}]),At([{type:\"Int16\",name:\"anchorX\"},{type:\"Int16\",name:\"anchorY\"},{type:\"Int16\",name:\"rightJustifiedTextSymbolIndex\"},{type:\"Int16\",name:\"centerJustifiedTextSymbolIndex\"},{type:\"Int16\",name:\"leftJustifiedTextSymbolIndex\"},{type:\"Int16\",name:\"verticalPlacedTextSymbolIndex\"},{type:\"Int16\",name:\"placedIconSymbolIndex\"},{type:\"Int16\",name:\"verticalPlacedIconSymbolIndex\"},{type:\"Uint16\",name:\"key\"},{type:\"Uint16\",name:\"textBoxStartIndex\"},{type:\"Uint16\",name:\"textBoxEndIndex\"},{type:\"Uint16\",name:\"verticalTextBoxStartIndex\"},{type:\"Uint16\",name:\"verticalTextBoxEndIndex\"},{type:\"Uint16\",name:\"iconBoxStartIndex\"},{type:\"Uint16\",name:\"iconBoxEndIndex\"},{type:\"Uint16\",name:\"verticalIconBoxStartIndex\"},{type:\"Uint16\",name:\"verticalIconBoxEndIndex\"},{type:\"Uint16\",name:\"featureIndex\"},{type:\"Uint16\",name:\"numHorizontalGlyphVertices\"},{type:\"Uint16\",name:\"numVerticalGlyphVertices\"},{type:\"Uint16\",name:\"numIconVertices\"},{type:\"Uint16\",name:\"numVerticalIconVertices\"},{type:\"Uint16\",name:\"useRuntimeCollisionCircles\"},{type:\"Uint32\",name:\"crossTileID\"},{type:\"Float32\",name:\"textBoxScale\"},{type:\"Float32\",name:\"collisionCircleDiameter\"},{type:\"Uint16\",name:\"textAnchorOffsetStartIndex\"},{type:\"Uint16\",name:\"textAnchorOffsetEndIndex\"},{type:\"Float32\",name:\"heightOffset\"}]),At([{type:\"Float32\",name:\"offsetX\"}]),At([{type:\"Int16\",name:\"x\"},{type:\"Int16\",name:\"y\"},{type:\"Int16\",name:\"tileUnitDistanceFromAnchor\"}]),At([{type:\"Uint16\",name:\"textAnchor\"},{type:\"Float32\",components:2,name:\"textOffset\"}]);var mr=new class{constructor(){this.TIMEOUT=5e3,this.applyArabicShaping=null,this.processBidirectionalText=null,this.processStyledBidirectionalText=null,this.pluginStatus=\"unavailable\",this.pluginURL=null,this.loadScriptResolve=()=>{};}setState(t){this.pluginStatus=t.pluginStatus,this.pluginURL=t.pluginURL;}getState(){return{pluginStatus:this.pluginStatus,pluginURL:this.pluginURL};}setMethods(t){if(mr.isParsed())throw Error(\"RTL text plugin already registered.\");this.applyArabicShaping=t.applyArabicShaping,this.processBidirectionalText=t.processBidirectionalText,this.processStyledBidirectionalText=t.processStyledBidirectionalText,this.loadScriptResolve();}isParsed(){return this.applyArabicShaping!=null&&this.processBidirectionalText!=null&&this.processStyledBidirectionalText!=null;}getRTLTextPluginStatus(){return this.pluginStatus;}async syncState(t,e){if(this.isParsed())return this.getState();if(t.pluginStatus!==\"loading\")return this.setState(t),t;let r=t.pluginURL,i=new Promise(a=>{this.loadScriptResolve=a;}),n=new Promise(a=>setTimeout(()=>a(),this.TIMEOUT));if(await e(r),await Promise.race([i,n]),this.isParsed()){let a={pluginStatus:\"loaded\",pluginURL:r};return this.setState(a),a;}throw this.setState({pluginStatus:\"error\",pluginURL:\"\"}),Error(`RTL Text Plugin failed to import scripts from ${r}`);}}();function X2(t){return /[\\u0600-\\u0604\\u0606-\\u060B\\u060D-\\u061A\\u061C-\\u061E\\u0620-\\u063F\\u0641-\\u064A\\u0656-\\u066F\\u0671-\\u06DC\\u06DE-\\u070D\\u070F-\\u074A\\u074D-\\u077F\\u07C0-\\u07FA\\u07FD-\\u07FF\\u0840-\\u085B\\u085E\\u0860-\\u086A\\u0870-\\u0891\\u0897-\\u08E1\\u08E3-\\u08FF\\u1800\\u1801\\u1804\\u1806-\\u1819\\u1820-\\u1878\\u1880-\\u18AA\\uA840-\\uA877\\uFB50-\\uFD3D\\uFD40-\\uFDCF\\uFDF0-\\uFDFF\\uFE70-\\uFE74\\uFE76-\\uFEFC]|\\uD802[\\uDEC0-\\uDEE6\\uDEEB-\\uDEF6\\uDF80-\\uDF91\\uDF99-\\uDF9C\\uDFA9-\\uDFAF]|\\uD803[\\uDD00-\\uDD27\\uDD30-\\uDD39\\uDE60-\\uDE7E\\uDEC2-\\uDEC7\\uDED0-\\uDED8\\uDEFA-\\uDEFF\\uDF30-\\uDF59\\uDF70-\\uDF89\\uDFB0-\\uDFCB]|\\uD805[\\uDE60-\\uDE6C]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99\\uDC9C-\\uDC9F]|\\uD83A[\\uDD00-\\uDD4B\\uDD50-\\uDD59\\uDD5E\\uDD5F]|\\uD83B[\\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\\uDEF0\\uDEF1]/gim.test(String.fromCodePoint(t));}function Y2(t){return /[\\u0591-\\u05C7\\u05D0-\\u05EA\\u05EF-\\u05F4\\u0600-\\u0604\\u0606-\\u060B\\u060D-\\u061A\\u061C-\\u061E\\u0620-\\u063F\\u0641-\\u064A\\u0656-\\u066F\\u0671-\\u06DC\\u06DE-\\u070D\\u070F-\\u074A\\u074D-\\u07B1\\u07C0-\\u07FA\\u07FD-\\u082D\\u0830-\\u083E\\u0840-\\u085B\\u085E\\u0860-\\u086A\\u0870-\\u0891\\u0897-\\u08E1\\u08E3-\\u08FF\\uFB1D-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFD3D\\uFD40-\\uFDCF\\uFDF0-\\uFDFF\\uFE70-\\uFE74\\uFE76-\\uFEFC]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC57-\\uDC9E\\uDCA7-\\uDCAF\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDCFB-\\uDD1B\\uDD1F-\\uDD39\\uDD3F-\\uDD59\\uDD80-\\uDDB7\\uDDBC-\\uDDCF\\uDDD2-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE38-\\uDE3A\\uDE3F-\\uDE48\\uDE50-\\uDE58\\uDE60-\\uDE9F\\uDEC0-\\uDEE6\\uDEEB-\\uDEF6\\uDF00-\\uDF35\\uDF39-\\uDF55\\uDF58-\\uDF72\\uDF78-\\uDF91\\uDF99-\\uDF9C\\uDFA9-\\uDFAF]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDCFA-\\uDD27\\uDD30-\\uDD39\\uDD40-\\uDD65\\uDD69-\\uDD85\\uDD8E\\uDD8F\\uDE60-\\uDE7E\\uDE80-\\uDEA9\\uDEAB-\\uDEAD\\uDEB0\\uDEB1\\uDEC2-\\uDEC7\\uDED0-\\uDED8\\uDEFA-\\uDF27\\uDF30-\\uDF59\\uDF70-\\uDF89\\uDFB0-\\uDFCB\\uDFE0-\\uDFF6]|\\uD83A[\\uDC00-\\uDCC4\\uDCC7-\\uDCD6\\uDD00-\\uDD4B\\uDD50-\\uDD59\\uDD5E\\uDD5F]|\\uD83B[\\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\\uDEF0\\uDEF1]/gim.test(String.fromCodePoint(t));}function W2(t){return /[\\u02EA\\u02EB\\u2E80-\\u2FDF\\u2FF0-\\u303F\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FD-\\u30FF\\u3105-\\u312F\\u31A0-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFE10-\\uFE1F\\uFE30-\\uFE4F\\uFF00-\\uFFEF]|\\uD81B[\\uDFE0-\\uDFFF]|[\\uD81C-\\uD822\\uD840-\\uD868\\uD86A-\\uD86D\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883\\uD885-\\uD88C][\\uDC00-\\uDFFF]|\\uD823[\\uDC00-\\uDCD5\\uDCFF-\\uDD1E\\uDD80-\\uDDF2]|\\uD82B[\\uDFF0-\\uDFFF]|\\uD82C[\\uDC00-\\uDEFB]|\\uD83C[\\uDE00-\\uDEFF]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEAD\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0\\uDFF0-\\uDFFF]|\\uD87B[\\uDC00-\\uDE5D]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A\\uDF50-\\uDFFF]|\\uD88D[\\uDC00-\\uDC79]/gim.test(String.fromCodePoint(t));}function Xa(t){return /[\\u02EA\\u02EB\\u1100-\\u11FF\\u1401-\\u167F\\u18B0-\\u18FF\\u2065\\u20DD-\\u20E0\\u20E2-\\u20E4\\u2B97\\u2BF0-\\u2BFF\\u2E50\\u2E51\\u2E80-\\u3007\\u3012\\u3013\\u3020-\\u302F\\u3031-\\u30FB\\u30FD-\\uA4CF\\uA960-\\uA97F\\uAC00-\\uD7FF\\uF900-\\uFAFF\\uFE10-\\uFE1F\\uFE30-\\uFE48\\uFE50-\\uFE57\\uFE5F-\\uFE62\\uFE67-\\uFE6F\\uFF00-\\uFF07\\uFF0A-\\uFF0C\\uFF0E-\\uFF19\\uFF1F-\\uFF3A\\uFF3C\\uFF3E\\uFF40-\\uFF5A\\uFFE0-\\uFFE2\\uFFE4-\\uFFE7\\uFFF0-\\uFFF8]|\\uD802[\\uDD80-\\uDD9F]|\\uD805[\\uDD80-\\uDDFF]|\\uD806[\\uDE00-\\uDEBF]|[\\uD80C-\\uD810\\uD81C-\\uD822\\uD83C\\uD83D\\uD840-\\uD87E\\uD880-\\uD8BE][\\uDC00-\\uDFFF]|\\uD811[\\uDC00-\\uDE7F]|\\uD81B[\\uDFE0-\\uDFFF]|\\uD823[\\uDC00-\\uDDFF]|\\uD82B[\\uDFF0-\\uDFFF]|\\uD82C[\\uDC00-\\uDEFF]|\\uD833[\\uDEC0-\\uDFCF]|\\uD834[\\uDC00-\\uDDFF\\uDEE0-\\uDF7F]|\\uD836[\\uDC00-\\uDEAF]|\\uD83E[\\uDD00-\\uDEFF]|[\\uD87F\\uD8BF][\\uDC00-\\uDFFD]/gim.test(String.fromCodePoint(t));}function Z2(t){return /[\\xA7\\xA9\\xAE\\xB1\\xBC-\\xBE\\xD7\\xF7\\u2016\\u2020\\u2021\\u2030\\u2031\\u203B\\u203C\\u2042\\u2047-\\u2049\\u2051\\u2100-\\u218F\\u221E\\u2234\\u2235\\u2300-\\u2307\\u230C-\\u231F\\u2324-\\u2328\\u232B\\u237D-\\u239A\\u23BE-\\u23CD\\u23CF\\u23D1-\\u23DB\\u23E2-\\u2422\\u2424-\\u24FF\\u25A0-\\u2619\\u2620-\\u2767\\u2776-\\u2793\\u2B12-\\u2B2F\\u2B50-\\u2B59\\u2BB8-\\u2BEB\\u3000-\\u303F\\u30A0-\\u30FF\\uE000-\\uF8FF\\uFE30-\\uFE6F\\uFF00-\\uFFEF\\uFFFC\\uFFFD]|[\\uDB80-\\uDBFF][\\uDC00-\\uDFFF]/gim.test(String.fromCodePoint(t));}function H2(t){return /[\\r\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0897-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E33-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB3-\\u0EBC\\u0EC8-\\u0ECE\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F3E\\u0F3F\\u0F71-\\u0F84\\u0F86\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102D-\\u1037\\u1039-\\u103E\\u1056-\\u1059\\u105E-\\u1060\\u1071-\\u1074\\u1082\\u1084-\\u1086\\u108D\\u109D\\u1100-\\u11FF\\u135D-\\u135F\\u1712-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180D\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60\\u1A62\\u1A65-\\u1A7C\\u1A7F\\u1AB0-\\u1ADD\\u1AE0-\\u1AEB\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200C\\u200D\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\uA926-\\uA92D\\uA947-\\uA953\\uA960-\\uA97C\\uA980-\\uA983\\uA9B3-\\uA9C0\\uA9E5\\uAA29-\\uAA36\\uAA43\\uAA4C\\uAA4D\\uAA7C\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAEB-\\uAAEF\\uAAF5\\uAAF6\\uABE3-\\uABEA\\uABEC\\uABED\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE2F\\uFF9E\\uFF9F]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDD69-\\uDD6D\\uDEAB\\uDEAC\\uDEFA-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC2\\uDDC3\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74\\uDFB8-\\uDFC0\\uDFC2\\uDFC5\\uDFC7-\\uDFCA\\uDFCC-\\uDFD2\\uDFE1\\uDFE2]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF1F\\uDF22-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE84-\\uDE99\\uDF60-\\uDF67]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00-\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42\\uDF5A]|\\uD80D[\\uDC40\\uDC47-\\uDC55]|\\uD818[\\uDD1E-\\uDD2F]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDD63\\uDD67-\\uDD6A\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF\\uDDEE\\uDDEF\\uDEE3\\uDEE6\\uDEEE\\uDEEF\\uDEF5]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uD83C[\\uDDE6-\\uDDFF\\uDFFB-\\uDFFF]|\\uDB40[\\uDC20-\\uDC7F\\uDD00-\\uDDEF]/.test(t);}function pc(t){return /[\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECE\\u0EDC-\\u0EDF\\u0F00-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F97\\u0F99-\\u0FBC\\u0FBE-\\u0FCC\\u0FCE-\\u0FD4\\u0FD9\\u0FDA\\u1000-\\u103F\\u1050-\\u108F\\u109A-\\u109F\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19DE\\u19DF\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1AA0-\\u1AAD\\u1B00-\\u1B4C\\u1B4E-\\u1B7F\\uA980-\\uA9CD\\uA9D0-\\uA9D9\\uA9DE-\\uA9EF\\uA9FA-\\uA9FE\\uAA60-\\uAAC2\\uAADB-\\uAADF]|\\uD805[\\uDF00-\\uDF1A\\uDF1D-\\uDF2B\\uDF3A\\uDF3B\\uDF3F-\\uDF46]/gim.test(String.fromCodePoint(t));}function K2(t,e){return /(?:[\\u1039\\u17D2\\u1A60\\u1BAB\\u200D\\uAAF6]|\\uD802\\uDE3F|\\uD804[\\uDD33\\uDFD0]|\\uD806[\\uDD3E\\uDE47\\uDE99]|\\uD807[\\uDD45\\uDD97\\uDF42])$/.test(t)||/^\\p{gc=Mc}/u.test(e);}var J2={C:\"18g,1;g2,3;4nb,1\",D:\"17k,1;5,1;1,1;1,5;4,d;1,7;1,2;z,2;8,g;i,12;1,2;9,1;1,1;1,2;14,3;2,1;28,9;3,f;2,4;1,1;2,3;2,6;7a,1;2,5;1,1;g,a;5,2;2,6;1,f\",R:\"17m,4;1,1;1,1;5,4;l,1;14,3;1,3;g,i;12,1;2,9;1,1;1,1;2,2;1,1;o,2;2x,3;f,2;4,1;1,2;3,2;6u,j;b,1;r,3;1,1;2,2;6,1\",T:\"174,b;1,1;1a,l;g,1;2t,7;2,6;2,2;1,4;bt,9;16,o;1,t;1clb,1\"},Q2={1569:[65152,0,0,0],1570:[65153,65154,0,0],1571:[65155,65156,0,0],1572:[65157,65158,0,0],1573:[65159,65160,0,0],1574:[65161,65162,65163,65164],1575:[65165,65166,0,0],1576:[65167,65168,65169,65170],1577:[65171,65172,0,0],1578:[65173,65174,65175,65176],1579:[65177,65178,65179,65180],1580:[65181,65182,65183,65184],1581:[65185,65186,65187,65188],1582:[65189,65190,65191,65192],1583:[65193,65194,0,0],1584:[65195,65196,0,0],1585:[65197,65198,0,0],1586:[65199,65200,0,0],1587:[65201,65202,65203,65204],1588:[65205,65206,65207,65208],1589:[65209,65210,65211,65212],1590:[65213,65214,65215,65216],1591:[65217,65218,65219,65220],1592:[65221,65222,65223,65224],1593:[65225,65226,65227,65228],1594:[65229,65230,65231,65232],1601:[65233,65234,65235,65236],1602:[65237,65238,65239,65240],1603:[65241,65242,65243,65244],1604:[65245,65246,65247,65248],1605:[65249,65250,65251,65252],1606:[65253,65254,65255,65256],1607:[65257,65258,65259,65260],1608:[65261,65262,0,0],1609:[65263,65264,64488,64489],1610:[65265,65266,65267,65268],1611:[65136,0,0,65137],1612:[65138,0,0,0],1613:[65140,0,0,0],1614:[65142,0,0,65143],1615:[65144,0,0,65145],1616:[65146,0,0,65147],1617:[65148,0,0,65149],1618:[65150,0,0,65151],1649:[64336,64337,0,0],1655:[64477,0,0,0],1657:[64358,64359,64360,64361],1658:[64350,64351,64352,64353],1659:[64338,64339,64340,64341],1662:[64342,64343,64344,64345],1663:[64354,64355,64356,64357],1664:[64346,64347,64348,64349],1667:[64374,64375,64376,64377],1668:[64370,64371,64372,64373],1670:[64378,64379,64380,64381],1671:[64382,64383,64384,64385],1672:[64392,64393,0,0],1676:[64388,64389,0,0],1677:[64386,64387,0,0],1678:[64390,64391,0,0],1681:[64396,64397,0,0],1688:[64394,64395,0,0],1700:[64362,64363,64364,64365],1702:[64366,64367,64368,64369],1705:[64398,64399,64400,64401],1709:[64467,64468,64469,64470],1711:[64402,64403,64404,64405],1713:[64410,64411,64412,64413],1715:[64406,64407,64408,64409],1722:[64414,64415,0,0],1723:[64416,64417,64418,64419],1726:[64426,64427,64428,64429],1728:[64420,64421,0,0],1729:[64422,64423,64424,64425],1733:[64480,64481,0,0],1734:[64473,64474,0,0],1735:[64471,64472,0,0],1736:[64475,64476,0,0],1737:[64482,64483,0,0],1739:[64478,64479,0,0],1740:[64508,64509,64510,64511],1744:[64484,64485,64486,64487],1746:[64430,64431,0,0],1747:[64432,64433,0,0]},tv={\u0644\u0622:[65269,65270],\u0644\u0623:[65271,65272],\u0644\u0625:[65273,65274],\u0644\u0627:[65275,65276]},fc=1604,ev=/[\\u0600-\\u06ff\\u0750-\\u077f\\u0870-\\u089f\\u08a0-\\u08ff\\ufb50-\\ufdff\\ufe70-\\ufeff]/;function rv(t,e,r){let i=0;for(let n of t.split(\";\")){let[a,s]=n.split(\",\").map(l=>parseInt(l,36)),o=i+a;for(let l=o;l<o+s;l++)r.set(l,e);i=o+s;}}var Bd=new Map();for(let[t,e]of Object.entries(J2))rv(e,t,Bd);function iv(t){return Bd.get(t)??\"U\";}function nv(t){return t===\"D\"||t===\"L\"||t===\"C\";}function av(t){return t===\"D\"||t===\"R\"||t===\"C\";}function sv(t,e,r){return t===\"D\"?e&&r?3:e?1:r?2:0:t===\"R\"?+!!e:t===\"L\"?r?2:0:null;}function ov(t){return[...t].map(e=>{let r=e.codePointAt(0);return{codePoint:r,type:iv(r),form:null};});}function lv(t){let e=t.filter(r=>r.type!==\"T\");for(let r=0;r<e.length;r++){let i=e[r],n=r>0&&nv(e[r-1].type),a=r+1<e.length&&av(e[r+1].type);i.form=sv(i.type,n,a);}}function uv(t){let e=!1;for(let r of t)r.type===\"T\"?r.form=e?3:0:e=r.form===2||r.form===3;}function hv(t){let e=[];for(let r=0;r<t.length;r++){let i=t[r];if(i.codePoint!==fc){e.push(i);continue;}let n=r+1;for(;n<t.length&&t[n].type===\"T\";)n++;let a=t[n],s=a&&tv[String.fromCodePoint(fc,a.codePoint)];if(!s){e.push(i);continue;}let o=i.form===3||i.form===1;e.push({codePoint:s[+!!o],type:\"R\",form:0}),e.push(...t.slice(r+1,n)),r=n;}return e;}function cv(t){if(t.form===null)return t.codePoint;let e=Q2[t.codePoint];return e&&(e[t.form]||e[0])||t.codePoint;}function pv(t){if(!ev.test(t))return t;let e=ov(t);return lv(e),uv(e),hv(e).map(r=>String.fromCodePoint(cv(r))).join(\"\");}function fv(t,e,r){let i=e.layout.get(\"text-transform\").evaluate(r,{});return i===\"uppercase\"?t=t.toLocaleUpperCase():i===\"lowercase\"&&(t=t.toLocaleLowerCase()),(mr.applyArabicShaping??pv)(t);}function dv(t,e,r){for(let i of t.sections)i.text=fv(i.text,e,r);return t;}function $s(t,e,r){let i=r?e.last.points:e.first.points,n=r?i[i.length-1]:i[0];return`${t}:${n.x}:${n.y}`;}function yv(t){let e=t.first.points,r=e.length;for(let a=t.first.next;a;a=a.next)r+=a.points.length-1;let i=Array(r);for(let a=0;a<e.length;a++)i[a]=e[a];let n=e.length;for(let a=t.first.next;a;a=a.next){let s=a.points;for(let o=1;o<s.length;o++)i[n++]=s[o];}return i;}function dc(t,e,r,i,n){let a=e[r];delete e[r],e[i]=a;let s=t[a];return s.last.next=n.first,s.last=n.last,a;}function yc(t,e,r,i,n){let a=e[i];delete e[i],e[r]=a;let s=t[a];return n.last.next=s.first,s.first=n.first,a;}function mv(t){let e={},r={},i=[];for(let a of t){let s=a.text?a.text.toString():null,o={points:a.geometry[0],next:null},l={feature:a,first:o,last:o};if(!s){i.push(l);continue;}let u=$s(s,l),h=$s(s,l,!0);if(u in r&&h in e&&r[u]!==e[h]){let c=yc(i,e,u,h,l),p=dc(i,r,u,h,i[c]);delete e[u],delete r[h],r[$s(s,i[p],!0)]=p,i[c].feature.geometry=null;}else if(u in r)dc(i,r,u,h,l);else if(h in e)yc(i,e,u,h,l);else{let c=i.push(l)-1;e[u]=c,r[h]=c;}}let n=[];for(let a of i){let s=a.feature;s.geometry&&(a.first.next&&(s.geometry[0]=yv(a)),n.push(s));}return n;}var Pd=typeof Intl<\"u\"&&\"Segmenter\"in Intl,mc,gc;function Ho(t){if(!Pd||!H2(t))return[...t];mc??=new Intl.Segmenter(void 0,{granularity:\"grapheme\"});let e=[];for(let{segment:r}of mc.segment(t)){let i=e.length-1;i>=0&&K2(e[i],r)?e[i]+=r:e.push(r);}return e;}function gv(t){let e=new Set();if(Pd){gc??=new Intl.Segmenter(void 0,{granularity:\"word\"});for(let{index:i}of gc.segment(t))e.add(i);return e;}let r=0;for(let i of t.split(/\\b|(?=\\p{Ideo})/u))e.add(r),r+=i.length;return e;}function zd(t){let e=t.codePointAt(0);return t.length>(e>65535?2:1);}function Jl(t){return /\\s/u.test(String.fromCodePoint(t));}function Ko(t){for(let e of t)if(Xa(e.codePointAt(0)))return!0;return!1;}function xv(t){for(let e of t)if(!vv(e.codePointAt(0)))return!1;return!0;}function vv(t){return!X2(t);}function xc(t){return!(Xa(t)||Z2(t));}function Ld(t){return /\\p{sc=Arab}/u.test(String.fromCodePoint(t));}function Vd(t){return Y2(t);}function Od(t){for(let e of t)if(Vd(e.codePointAt(0)))return!0;return!1;}var Nr={\"!\":\"\\uFE15\",\"#\":\"\\uFF03\",$:\"\\uFF04\",\"%\":\"\\uFF05\",\"&\":\"\\uFF06\",\"(\":\"\\uFE35\",\")\":\"\\uFE36\",\"*\":\"\\uFF0A\",\"+\":\"\\uFF0B\",\",\":\"\\uFE10\",\"-\":\"\\uFE32\",\".\":\"\\u30FB\",\"/\":\"\\uFF0F\",\":\":\"\\uFE13\",\";\":\"\\uFE14\",\"<\":\"\\uFE3F\",\"=\":\"\\uFF1D\",\">\":\"\\uFE40\",\"?\":\"\\uFE16\",\"@\":\"\\uFF20\",\"[\":\"\\uFE47\",\"\\\\\":\"\\uFF3C\",\"]\":\"\\uFE48\",\"^\":\"\\uFF3E\",_:\"\\uFE33\",\"`\":\"\\uFF40\",\"{\":\"\\uFE37\",\"|\":\"\\u2015\",\"}\":\"\\uFE38\",\"~\":\"\\uFF5E\",\"\\xA2\":\"\\uFFE0\",\"\\xA3\":\"\\uFFE1\",\"\\xA5\":\"\\uFFE5\",\"\\xA6\":\"\\uFFE4\",\"\\xAC\":\"\\uFFE2\",\"\\xAF\":\"\\uFFE3\",\"\\u2013\":\"\\uFE32\",\"\\u2014\":\"\\uFE31\",\"\\u2018\":\"\\uFE43\",\"\\u2019\":\"\\uFE44\",\"\\u201C\":\"\\uFE41\",\"\\u201D\":\"\\uFE42\",\"\\u2026\":\"\\uFE19\",\"\\u22EF\":\"\\uFE19\",\"\\u2027\":\"\\u30FB\",\"\\u20A9\":\"\\uFFE6\",\"\\u3001\":\"\\uFE11\",\"\\u3002\":\"\\uFE12\",\"\\u3008\":\"\\uFE3F\",\"\\u3009\":\"\\uFE40\",\"\\u300A\":\"\\uFE3D\",\"\\u300B\":\"\\uFE3E\",\"\\u300C\":\"\\uFE41\",\"\\u300D\":\"\\uFE42\",\"\\u300E\":\"\\uFE43\",\"\\u300F\":\"\\uFE44\",\"\\u3010\":\"\\uFE3B\",\"\\u3011\":\"\\uFE3C\",\"\\u3014\":\"\\uFE39\",\"\\u3015\":\"\\uFE3A\",\"\\u3016\":\"\\uFE17\",\"\\u3017\":\"\\uFE18\",\"\\uFF01\":\"\\uFE15\",\"\\uFF08\":\"\\uFE35\",\"\\uFF09\":\"\\uFE36\",\"\\uFF0C\":\"\\uFE10\",\"\\uFF0D\":\"\\uFE32\",\"\\uFF0E\":\"\\u30FB\",\"\\uFF1A\":\"\\uFE13\",\"\\uFF1B\":\"\\uFE14\",\"\\uFF1C\":\"\\uFE3F\",\"\\uFF1E\":\"\\uFE40\",\"\\uFF1F\":\"\\uFE16\",\"\\uFF3B\":\"\\uFE47\",\"\\uFF3D\":\"\\uFE48\",\"\\uFF3F\":\"\\uFE33\",\"\\uFF5B\":\"\\uFE37\",\"\\uFF5C\":\"\\u2015\",\"\\uFF5D\":\"\\uFE38\",\"\\uFF5F\":\"\\uFE35\",\"\\uFF60\":\"\\uFE36\",\"\\uFF61\":\"\\uFE12\",\"\\uFF62\":\"\\uFE41\",\"\\uFF63\":\"\\uFE42\"};function bv(t){let e=\"\",r={premature:!0,value:void 0},i=t[Symbol.iterator](),n=i.next(),a=t[Symbol.iterator]();a.next();let s=a.next();for(;!n.done;)(s.done||!xc(s.value.codePointAt(0))||Nr[s.value])&&(r.premature||!xc(r.value.codePointAt(0))||Nr[r.value])&&Nr[n.value]?e+=Nr[n.value]:e+=n.value,r={value:n.value,premature:!1},n=i.next(),s=a.next();return e;}var wv={10:!0,13:!0,32:!0,38:!0,41:!0,43:!0,45:!0,47:!0,173:!0,183:!0,8203:!0,8208:!0,8211:!0,8231:!0},Dv={40:!0};function vc(t,e,r,i,n,a){if(\"fontStack\"in e){let s=r[e.fontStack],o=s?.[t];if(o)return o.metrics.advance*e.scale+n;let l=0;for(let u of t){let h=s?.[u];h&&(l+=h.metrics.advance*e.scale+n);}return l;}{let s=i[e.imageName];return s?s.displaySize[0]*e.scale*24/a+n:0;}}function bc(t,e,r,i){let n=(t-e)**2;return i?t<e?n/2:n*2:n+Math.abs(r)*r;}function wc(t){return /^\\s+$/u.test(t);}function _v(t,e,r){let i=0;return(t===10||t===13)&&(i-=1e4),r&&(i+=150),(t===40||t===65288)&&(i+=50),(e===41||e===65289)&&(i+=50),i;}function Dc(t,e,r,i,n,a){let s=null,o=bc(e,r,n,a);for(let l of i){let u=bc(e-l.x,r,n,a)+l.badness;u<=o&&(s=l,o=u);}return{index:t,x:e,priorBreak:s,badness:o};}function Rd(t){return t?Rd(t.priorBreak).concat(t.index):[];}var Ql=class Jo{constructor(e=\"\",r=[],i=[]){this.text=e,this.sections=r,this.sectionIndex=i,this.imageSectionID=null,this._graphemes=null;}graphemes(){return this._graphemes??=Ho(this.text),this._graphemes;}static fromFeature(e,r){let i=new Jo();for(let n of e.sections)n.image?i.addImageSection(n):i.addTextSection(n,r);return i;}length(){return this.graphemes().length;}getSection(e){return this.sections[this.sectionIndex[e]];}getSectionIndex(e){return this.sectionIndex[e];}verticalizePunctuation(){this.text=bv(this.text),this._graphemes=null;}hasZeroWidthSpaces(){return this.text.includes(\"\\u200B\");}trim(){let e=this.graphemes(),r=0;for(;r<e.length&&wc(e[r]);)r++;let i=e.length;for(;i>r&&wc(e[i-1]);)i--;this.text=e.slice(r,i).join(\"\"),this.sectionIndex=this.sectionIndex.slice(r,i),this._graphemes=null;}substring(e,r){let i=this.graphemes().slice(e,r).join(\"\"),n=this.sectionIndex.slice(e,r);return new Jo(i,this.sections,n);}toCodeUnitIndex(e){return this.graphemes().slice(0,e).join(\"\").length;}toString(){return this.text;}getMaxScale(){return this.sectionIndex.reduce((e,r)=>Math.max(e,this.sections[r].scale),0);}getMaxImageSize(e){let r=0,i=0;for(let n=0;n<this.length();n++){let a=this.getSection(n);if(\"imageName\"in a){let s=e[a.imageName];if(!s)continue;let o=s.displaySize;r=Math.max(r,o[0]),i=Math.max(i,o[1]);}}return{maxImageWidth:r,maxImageHeight:i};}_appendSection(e,r){let i=this.graphemes(),n=i.length>0?i[i.length-1]:\"\",a=Ho(n+e);this.text+=e,this._graphemes=i.slice(0,n?-1:void 0).concat(a);let s=a.length-+!!n;for(let o=0;o<s;o++)this.sectionIndex.push(r);}addTextSection(e,r){this.sections.push({scale:e.scale||1,verticalAlign:e.verticalAlign||\"bottom\",fontStack:e.fontStack||r}),this._appendSection(e.text,this.sections.length-1);}addImageSection(e){let r=e.image?e.image.name:\"\";if(r.length===0){Mt(\"Can't add FormattedSection with an empty image.\");return;}let i=this.getNextImageSectionCharCode();if(!i){Mt(\"Reached maximum number of images 6401\");return;}this.sections.push({scale:1,verticalAlign:e.verticalAlign||\"bottom\",imageName:r}),this._appendSection(String.fromCharCode(i),this.sections.length-1);}getNextImageSectionCharCode(){return this.imageSectionID?this.imageSectionID>=63743?null:++this.imageSectionID:(this.imageSectionID=57344,this.imageSectionID);}determineLineBreaks(e,r,i,n,a){let s=[],o=this.determineAverageLineWidth(e,r,i,n,a),l=this.hasZeroWidthSpaces(),u=this.graphemes(),h=null,c=0,p=0;for(let f=0;f<u.length;f++){let d=u[f];if(f>0){let y=u[f-1].codePointAt(0),m=d.codePointAt(0),g=W2(y),x=pc(y)&&pc(m);(wv[y]||g||\"imageName\"in this.getSection(f-1)||u[f+1]!==void 0&&Dv[m]||x&&(h??=gv(this.text)).has(p))&&s.push(Dc(f,c,o,s,_v(y,m,g&&l),!1));}Jl(d.codePointAt(0))||(c+=vc(d,this.getSection(f),i,n,e,a)),p+=d.length;}return Rd(Dc(this.length(),c,o,s,0,!0));}determineAverageLineWidth(e,r,i,n,a){let s=0,o=0;for(let u of this.graphemes()){let h=this.getSection(o);s+=vc(u,h,i,n,e,a),o++;}let l=Math.max(1,Math.ceil(s/r));return s/l;}};function Av(){return function(t){var e={R:\"13k,1a,2,3,3,2+1j,ch+16,a+1,5+2,2+n,5,a,4,6+16,4+3,h+1b,4mo,179q,2+9,2+11,2i9+7y,2+68,4,3+4,5+13,4+3,2+4k,3+29,8+cf,1t+7z,w+17,3+3m,1t+3z,16o1+5r,8+30,8+mc,29+1r,29+4v,75+73\",EN:\"1c+9,3d+1,6,187+9,513,4+5,7+9,sf+j,175h+9,qw+q,161f+1d,4xt+a,25i+9\",ES:\"17,2,6dp+1,f+1,av,16vr,mx+1,4o,2\",ET:\"z+2,3h+3,b+1,ym,3e+1,2o,p4+1,8,6u,7c,g6,1wc,1n9+4,30+1b,2n,6d,qhx+1,h0m,a+1,49+2,63+1,4+1,6bb+3,12jj\",AN:\"16o+5,2j+9,2+1,35,ed,1ff2+9,87+u\",CS:\"18,2+1,b,2u,12k,55v,l,17v0,2,3,53,2+1,b\",B:\"a,3,f+2,2v,690\",S:\"9,2,k\",WS:\"c,k,4f4,1vk+a,u,1j,335\",ON:\"x+1,4+4,h+5,r+5,r+3,z,5+3,2+1,2+1,5,2+2,3+4,o,w,ci+1,8+d,3+d,6+8,2+g,39+1,9,6+1,2,33,b8,3+1,3c+1,7+1,5r,b,7h+3,sa+5,2,3i+6,jg+3,ur+9,2v,ij+1,9g+9,7+a,8m,4+1,49+x,14u,2+2,c+2,e+2,e+2,e+1,i+n,e+e,2+p,u+2,e+2,36+1,2+3,2+1,b,2+2,6+5,2,2,2,h+1,5+4,6+3,3+f,16+2,5+3l,3+81,1y+p,2+40,q+a,m+13,2r+ch,2+9e,75+hf,3+v,2+2w,6e+5,f+6,75+2a,1a+p,2+2g,d+5x,r+b,6+3,4+o,g,6+1,6+2,2k+1,4,2j,5h+z,1m+1,1e+f,t+2,1f+e,d+3,4o+3,2s+1,w,535+1r,h3l+1i,93+2,2s,b+1,3l+x,2v,4g+3,21+3,kz+1,g5v+1,5a,j+9,n+v,2,3,2+8,2+1,3+2,2,3,46+1,4+4,h+5,r+5,r+a,3h+2,4+6,b+4,78,1r+24,4+c,4,1hb,ey+6,103+j,16j+c,1ux+7,5+g,fsh,jdq+1t,4,57+2e,p1,1m,1m,1m,1m,4kt+1,7j+17,5+2r,d+e,3+e,2+e,2+10,m+4,w,1n+5,1q,4z+5,4b+rb,9+c,4+c,4+37,d+2g,8+b,l+b,5+1j,9+9,7+13,9+t,3+1,27+3c,2+29,2+3q,d+d,3+4,4+2,6+6,a+o,8+6,a+2,e+6,16+42,2+1i\",BN:\"0+8,6+d,2s+5,2+p,e,4m9,1kt+2,2b+5,5+5,17q9+v,7k,6p+8,6+1,119d+3,440+7,96s+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+75,6p+2rz,1ben+1,1ekf+1,1ekf+1\",NSM:\"lc+33,7o+6,7c+18,2,2+1,2+1,2,21+a,1d+k,h,2u+6,3+5,3+1,2+3,10,v+q,2k+a,1n+8,a,p+3,2+8,2+2,2+4,18+2,3c+e,2+v,1k,2,5+7,5,4+6,b+1,u,1n,5+3,9,l+1,r,3+1,1m,5+1,5+1,3+2,4,v+1,4,c+1,1m,5+4,2+1,5,l+1,n+5,2,1n,3,2+3,9,8+1,c+1,v,1q,d,1f,4,1m+2,6+2,2+3,8+1,c+1,u,1n,g+1,l+1,t+1,1m+1,5+3,9,l+1,u,21,8+2,2,2j,3+6,d+7,2r,3+8,c+5,23+1,s,2,2,1k+d,2+4,2+1,6+a,2+z,a,2v+3,2+5,2+1,3+1,q+1,5+2,h+3,e,3+1,7,g,jk+2,qb+2,u+2,u+1,v+1,1t+1,2+6,9,3+a,a,1a+2,3c+1,z,3b+2,5+1,a,7+2,64+1,3,1n,2+6,2,2,3+7,7+9,3,1d+g,1s+3,1d,2+4,2,6,15+8,d+1,x+3,3+1,2+2,1l,2+1,4,2+2,1n+7,3+1,49+2,2+c,2+6,5,7,4+1,5j+1l,2+4,k1+w,2db+2,3y,2p+v,ff+3,30+1,n9x+3,2+9,x+1,29+1,7l,4,5,q+1,6,48+1,r+h,e,13+7,q+a,1b+2,1d,3+3,3+1,14,1w+5,3+1,3+1,d,9,1c,1g,2+2,3+1,6+1,2,17+1,9,6n,3,5,fn5,ki+f,h+f,r2,6b,46+4,1af+2,2+1,6+3,15+2,5,4m+1,fy+3,as+1,4a+a,4x,1j+e,1l+2,1e+3,3+1,1y+2,11+4,2+7,1r,d+1,1h+8,b+3,3,2o+2,3,2+1,7,4h,4+7,m+1,1m+1,4,12+6,4+4,5g+7,3+2,2,o,2d+5,2,5+1,2+1,6n+3,7+1,2+1,s+1,2e+7,3,2+1,2z,2,3+5,2,2u+2,3+3,2+4,78+8,2+1,75+1,2,5,41+3,3+1,5,x+5,3+1,15+5,3+3,9,a+5,3+2,1b+c,2+1,bb+6,2+5,2d+l,3+6,2+1,2+1,3f+5,4,2+1,2+6,2,21+1,4,2,9o+1,f0c+4,1o+6,t5,1s+3,2a,f5l+1,43t+2,i+7,3+6,v+3,45+2,1j0+1i,5+1d,9,f,n+4,2+e,11t+6,2+g,3+6,2+1,2+4,7a+6,c6+3,15t+6,32+6,gzhy+6n\",AL:\"16w,3,2,e+1b,z+2,2+2s,g+1,8+1,b+m,2+t,s+2i,c+e,4h+f,1d+1e,1bwe+dp,3+3z,x+c,2+1,35+3y,2rm+z,5+7,b+5,dt+l,c+u,17nl+27,1t+27,4x+6n,3+d\",LRO:\"6ct\",RLO:\"6cu\",LRE:\"6cq\",RLE:\"6cr\",PDF:\"6cs\",LRI:\"6ee\",RLI:\"6ef\",FSI:\"6eg\",PDI:\"6eh\"},r={},i={};r.L=1,i[1]=\"L\",Object.keys(e).forEach(function(N,J){r[N]=1<<J+1,i[r[N]]=N;}),Object.freeze(r);var n=r.LRI|r.RLI|r.FSI,a=r.L|r.R|r.AL,s=r.B|r.S|r.WS|r.ON|r.FSI|r.LRI|r.RLI|r.PDI,o=r.BN|r.RLE|r.LRE|r.RLO|r.LRO|r.PDF,l=r.S|r.WS|r.B|n|r.PDI|o,u=null;function h(){if(!u){u=new Map();var N=0;for(var J in e)if(e.hasOwnProperty(J))for(var Y=e[J],C=\"\",lt=void 0,G=!1,j=0,H=0;H<=Y.length+1;H+=1){var Rt=Y[H];if(Rt!==\",\"&&H!==Y.length)Rt===\"+\"?(G=!0,j=N=j+parseInt(C,36),C=\"\"):C+=Rt;else{G?lt=N+parseInt(C,36):(j=N=j+parseInt(C,36),lt=N),G=!1,C=\"\",j=lt;for(var vt=N;vt<lt+1;vt+=1)u.set(vt,r[J]);}}}}function c(N){return h(),u.get(N.codePointAt(0))||r.L;}function p(N){return i[c(N)];}var f={pairs:\"14>1,1e>2,u>2,2wt>1,1>1,1ge>1,1wp>1,1j>1,f>1,hm>1,1>1,u>1,u6>1,1>1,+5,28>1,w>1,1>1,+3,b8>1,1>1,+3,1>3,-1>-1,3>1,1>1,+2,1s>1,1>1,x>1,th>1,1>1,+2,db>1,1>1,+3,3>1,1>1,+2,14qm>1,1>1,+1,4q>1,1e>2,u>2,2>1,+1\",canonical:\"6f1>-6dx,6dy>-6dx,6ec>-6ed,6ee>-6ed,6ww>2jj,-2ji>2jj,14r4>-1e7l,1e7m>-1e7l,1e7m>-1e5c,1e5d>-1e5b,1e5c>-14qx,14qy>-14qx,14vn>-1ecg,1ech>-1ecg,1edu>-1ecg,1eci>-1ecg,1eda>-1ecg,1eci>-1ecg,1eci>-168q,168r>-168q,168s>-14ye,14yf>-14ye\"};function d(N,J){var Y=0,C=new Map(),lt=J&&new Map(),G;return N.split(\",\").forEach(function j(H){if(H.indexOf(\"+\")!==-1)for(var Rt=+H;Rt--;)j(G);else{G=H;var vt=H.split(\">\"),nt=vt[0],Tt=vt[1];nt=String.fromCodePoint(Y+=parseInt(nt,36)),Tt=String.fromCodePoint(Y+=parseInt(Tt,36)),C.set(nt,Tt),J&<.set(Tt,nt);}}),{map:C,reverseMap:lt};}var y,m,g;function x(){if(!y){var N=d(f.pairs,!0),J=N.map,Y=N.reverseMap;y=J,m=Y,g=d(f.canonical,!1).map;}}function b(N){return x(),y.get(N)||null;}function v(N){return x(),m.get(N)||null;}function w(N){return x(),g.get(N)||null;}var _=r.L,A=r.R,S=r.EN,F=r.ES,z=r.ET,$=r.AN,B=r.CS,P=r.B,E=r.S,O=r.ON,R=r.BN,L=r.NSM,tt=r.AL,it=r.LRO,pt=r.RLO,st=r.LRE,ft=r.RLE,jt=r.PDF,Pe=r.LRI,pe=r.RLI,ze=r.FSI,Wt=r.PDI;function _r(N,J){for(var Y=125,C=new Uint32Array(N.length),lt=0;lt<N.length;lt++)C[lt]=c(N[lt]);var G=new Map();function j(Gt,se){var Xt=C[Gt];C[Gt]=se,G.set(Xt,G.get(Xt)-1),Xt&s&&G.set(s,G.get(s)-1),G.set(se,(G.get(se)||0)+1),se&s&&G.set(s,(G.get(s)||0)+1);}for(var H=new Uint8Array(N.length),Rt=new Map(),vt=[],nt=null,Tt=0;Tt<N.length;Tt++)nt||vt.push(nt={start:Tt,end:N.length-1,level:J===\"rtl\"?1:J===\"ltr\"?0:Qu(Tt,!1)}),C[Tt]&P&&(nt.end=Tt,nt=null);for(var hi=ft|st|pt|it|n|Wt|jt|P,tr=function(Gt){return Gt+(Gt&1?1:2);},Le=function(Gt){return Gt+(Gt&1?2:1);},Ve=0;Ve<vt.length;Ve++){nt=vt[Ve];var ot=[{_level:nt.level,_override:0,_isolate:0}],bt=void 0,Se=0,Oe=0,Za=0;G.clear();for(var Bt=nt.start;Bt<=nt.end;Bt++){var Pt=C[Bt];if(bt=ot[ot.length-1],G.set(Pt,(G.get(Pt)||0)+1),Pt&s&&G.set(s,(G.get(s)||0)+1),Pt&hi){if(Pt&(ft|st)){H[Bt]=bt._level;var Fu=(Pt===ft?Le:tr)(bt._level);Fu<=Y&&!Se&&!Oe?ot.push({_level:Fu,_override:0,_isolate:0}):Se||Oe++;}else if(Pt&(pt|it)){H[Bt]=bt._level;var Tu=(Pt===pt?Le:tr)(bt._level);Tu<=Y&&!Se&&!Oe?ot.push({_level:Tu,_override:Pt&pt?A:_,_isolate:0}):Se||Oe++;}else if(Pt&n){Pt&ze&&(Pt=Qu(Bt+1,!0)===1?pe:Pe),H[Bt]=bt._level,bt._override&&j(Bt,bt._override);var ku=(Pt===pe?Le:tr)(bt._level);ku<=Y&&Se===0&&Oe===0?(Za++,ot.push({_level:ku,_override:0,_isolate:1,_isolInitIndex:Bt})):Se++;}else if(Pt&Wt){if(Se>0)Se--;else if(Za>0){for(Oe=0;!ot[ot.length-1]._isolate;)ot.pop();var Ha=ot[ot.length-1]._isolInitIndex;Ha!=null&&(Rt.set(Ha,Bt),Rt.set(Bt,Ha)),ot.pop(),Za--;}bt=ot[ot.length-1],H[Bt]=bt._level,bt._override&&j(Bt,bt._override);}else Pt&jt?(Se===0&&(Oe>0?Oe--:!bt._isolate&&ot.length>1&&(ot.pop(),bt=ot[ot.length-1])),H[Bt]=bt._level):Pt&P&&(H[Bt]=nt.level);}else H[Bt]=bt._level,bt._override&&Pt!==R&&j(Bt,bt._override);}for(var Fr=[],fe=null,er=nt.start;er<=nt.end;er++){var Ka=C[er];if(!(Ka&o)){var Iu=H[er],Cu=Ka&n,Zy=Ka===Wt;fe&&Iu===fe._level?(fe._end=er,fe._endsWithIsolInit=Cu):Fr.push(fe={_start:er,_end:er,_level:Iu,_startsWithPDI:Zy,_endsWithIsolInit:Cu});}}for(var Ja=[],bn=0;bn<Fr.length;bn++){var wn=Fr[bn];if(!wn._startsWithPDI||wn._startsWithPDI&&!Rt.has(wn._start)){for(var Qa=[fe=wn],Mu=void 0;fe&&fe._endsWithIsolInit&&(Mu=Rt.get(fe._end))!=null;)for(var Dn=bn+1;Dn<Fr.length;Dn++)if(Fr[Dn]._start===Mu){Qa.push(fe=Fr[Dn]);break;}for(var Tr=[],ts=0;ts<Qa.length;ts++)for(var Bu=Qa[ts],es=Bu._start;es<=Bu._end;es++)Tr.push(es);for(var Hy=H[Tr[0]],Pu=nt.level,_n=Tr[0]-1;_n>=0;_n--)if(!(C[_n]&o)){Pu=H[_n];break;}var rs=Tr[Tr.length-1],Ky=H[rs],zu=nt.level;if(!(C[rs]&n)){for(var An=rs+1;An<=nt.end;An++)if(!(C[An]&o)){zu=H[An];break;}}Ja.push({_seqIndices:Tr,_sosType:Math.max(Pu,Hy)%2?A:_,_eosType:Math.max(zu,Ky)%2?A:_});}}for(var is=0;is<Ja.length;is++){var ns=Ja[is],q=ns._seqIndices,ci=ns._sosType,Jy=ns._eosType,kr=H[q[0]]&1?A:_;if(G.get(L))for(var Sn=0;Sn<q.length;Sn++){var Lu=q[Sn];if(C[Lu]&L){for(var as=ci,En=Sn-1;En>=0;En--)if(!(C[q[En]]&o)){as=C[q[En]];break;}j(Lu,as&(n|Wt)?O:as);}}if(G.get(S))for(var Fn=0;Fn<q.length;Fn++){var Vu=q[Fn];if(C[Vu]&S)for(var Tn=Fn-1;Tn>=-1;Tn--){var Ou=Tn===-1?ci:C[q[Tn]];if(Ou&a){Ou===tt&&j(Vu,$);break;}}}if(G.get(tt))for(var ss=0;ss<q.length;ss++){var Ru=q[ss];C[Ru]&tt&&j(Ru,A);}if(G.get(F)||G.get(B))for(var pi=1;pi<q.length-1;pi++){var os=q[pi];if(C[os]&(F|B)){for(var Ir=0,ls=0,us=pi-1;us>=0&&(Ir=C[q[us]],Ir&o);us--);for(var hs=pi+1;hs<q.length&&(ls=C[q[hs]],ls&o);hs++);Ir===ls&&(C[os]===F?Ir===S:Ir&(S|$))&&j(os,Ir);}}if(G.get(S)){for(var de=0;de<q.length;de++)if(C[q[de]]&S){for(var kn=de-1;kn>=0&&C[q[kn]]&(z|o);kn--)j(q[kn],S);for(de++;de<q.length&&C[q[de]]&(z|o|S);de++)C[q[de]]!==S&&j(q[de],S);}}if(G.get(z)||G.get(F)||G.get(B))for(var fi=0;fi<q.length;fi++){var $u=q[fi];if(C[$u]&(z|F|B)){j($u,O);for(var In=fi-1;In>=0&&C[q[In]]&o;In--)j(q[In],O);for(var Cn=fi+1;Cn<q.length&&C[q[Cn]]&o;Cn++)j(q[Cn],O);}}if(G.get(S))for(var cs=0,Nu=ci;cs<q.length;cs++){var Uu=q[cs],ps=C[Uu];ps&S?Nu===_&&j(Uu,_):ps&a&&(Nu=ps);}if(G.get(s)){for(var di=A|S|$,qu=di|_,Mn=[],Cr=[],Mr=0;Mr<q.length;Mr++)if(C[q[Mr]]&s){var yi=N[q[Mr]],ju=void 0;if(b(yi)!==null){if(Cr.length<63)Cr.push({char:yi,seqIndex:Mr});else break;}else if((ju=v(yi))!==null)for(var mi=Cr.length-1;mi>=0;mi--){var fs=Cr[mi].char;if(fs===ju||fs===v(w(yi))||b(w(fs))===yi){Mn.push([Cr[mi].seqIndex,Mr]),Cr.length=mi;break;}}}Mn.sort(function(Gt,se){return Gt[0]-se[0];});for(var ds=0;ds<Mn.length;ds++){for(var Gu=Mn[ds],Bn=Gu[0],ys=Gu[1],Xu=!1,ye=0,ms=Bn+1;ms<ys;ms++){var Yu=q[ms];if(C[Yu]&qu){Xu=!0;var Wu=C[Yu]&di?A:_;if(Wu===kr){ye=Wu;break;}}}if(Xu&&!ye){ye=ci;for(var gs=Bn-1;gs>=0;gs--){var Zu=q[gs];if(C[Zu]&qu){var Hu=C[Zu]&di?A:_;ye=Hu===kr?kr:Hu;break;}}}if(ye){if(C[q[Bn]]=C[q[ys]]=ye,ye!==kr){for(var gi=Bn+1;gi<q.length;gi++)if(!(C[q[gi]]&o)){c(N[q[gi]])&L&&(C[q[gi]]=ye);break;}}if(ye!==kr){for(var xi=ys+1;xi<q.length;xi++)if(!(C[q[xi]]&o)){c(N[q[xi]])&L&&(C[q[xi]]=ye);break;}}}}for(var Re=0;Re<q.length;Re++)if(C[q[Re]]&s){for(var Ku=Re,xs=Re,vs=ci,vi=Re-1;vi>=0;vi--)if(C[q[vi]]&o)Ku=vi;else{vs=C[q[vi]]&di?A:_;break;}for(var Ju=Jy,bi=Re+1;bi<q.length;bi++)if(C[q[bi]]&(s|o))xs=bi;else{Ju=C[q[bi]]&di?A:_;break;}for(var bs=Ku;bs<=xs;bs++)C[q[bs]]=vs===Ju?vs:kr;Re=xs;}}}for(var Zt=nt.start;Zt<=nt.end;Zt++){var Qy=H[Zt],Pn=C[Zt];if(Qy&1?Pn&(_|S|$)&&H[Zt]++:Pn&A?H[Zt]++:Pn&($|S)&&(H[Zt]+=2),Pn&o&&(H[Zt]=Zt===0?nt.level:H[Zt-1]),Zt===nt.end||c(N[Zt])&(E|P))for(var zn=Zt;zn>=0&&c(N[zn])&l;zn--)H[zn]=nt.level;}}return{levels:H,paragraphs:vt};function Qu(Gt,se){for(var Xt=Gt;Xt<N.length;Xt++){var $e=C[Xt];if($e&(A|tt))return 1;if($e&(P|_)||se&&$e===Wt)return 0;if($e&n){var th=t1(Xt);Xt=th===-1?N.length:th;}}return 0;}function t1(Gt){for(var se=1,Xt=Gt+1;Xt<N.length;Xt++){var $e=C[Xt];if($e&P)break;if($e&Wt){if(--se===0)return Xt;}else $e&n&&se++;}return-1;}}var Ar=\"14>1,j>2,t>2,u>2,1a>g,2v3>1,1>1,1ge>1,1wd>1,b>1,1j>1,f>1,ai>3,-2>3,+1,8>1k0,-1jq>1y7,-1y6>1hf,-1he>1h6,-1h5>1ha,-1h8>1qi,-1pu>1,6>3u,-3s>7,6>1,1>1,f>1,1>1,+2,3>1,1>1,+13,4>1,1>1,6>1eo,-1ee>1,3>1mg,-1me>1mk,-1mj>1mi,-1mg>1mi,-1md>1,1>1,+2,1>10k,-103>1,1>1,4>1,5>1,1>1,+10,3>1,1>8,-7>8,+1,-6>7,+1,a>1,1>1,u>1,u6>1,1>1,+5,26>1,1>1,2>1,2>2,8>1,7>1,4>1,1>1,+5,b8>1,1>1,+3,1>3,-2>1,2>1,1>1,+2,c>1,3>1,1>1,+2,h>1,3>1,a>1,1>1,2>1,3>1,1>1,d>1,f>1,3>1,1a>1,1>1,6>1,7>1,13>1,k>1,1>1,+19,4>1,1>1,+2,2>1,1>1,+18,m>1,a>1,1>1,lk>1,1>1,4>1,2>1,f>1,3>1,1>1,+3,db>1,1>1,+3,3>1,1>1,+2,14qm>1,1>1,+1,6>1,4j>1,j>2,t>2,u>2,2>1,+1\",Je;function ui(){if(!Je){var N=d(Ar,!0),J=N.map;N.reverseMap.forEach(function(Y,C){J.set(C,Y);}),Je=J;}}function Ft(N){return ui(),Je.get(N)||null;}function Ae(N,J,Y,C){var lt=N.length;Y=Math.max(0,Y==null?0:+Y),C=Math.min(lt-1,C==null?lt-1:+C);for(var G=new Map(),j=Y;j<=C;j++)if(J[j]&1){var H=Ft(N[j]);H!==null&&G.set(j,H);}return G;}function Qe(N,J,Y,C){var lt=N.length;Y=Math.max(0,Y==null?0:+Y),C=Math.min(lt-1,C==null?lt-1:+C);var G=[];return J.paragraphs.forEach(function(j){var H=Math.max(Y,j.start),Rt=Math.min(C,j.end);if(H<Rt){for(var vt=J.levels.slice(H,Rt+1),nt=Rt;nt>=H&&c(N[nt])&l;nt--)vt[nt]=j.level;for(var Tt=j.level,hi=1/0,tr=0;tr<vt.length;tr++){var Le=vt[tr];Le>Tt&&(Tt=Le),Le<hi&&(hi=Le|1);}for(var Ve=Tt;Ve>=hi;Ve--)for(var ot=0;ot<vt.length;ot++)if(vt[ot]>=Ve){for(var bt=ot;ot+1<vt.length&&vt[ot+1]>=Ve;)ot++;ot>bt&&G.push([bt+H,ot+H]);}}}),G;}function Sr(N,J,Y,C){var lt=Er(N,J,Y,C),G=[].concat(N);return lt.forEach(function(j,H){G[H]=(J.levels[j]&1?Ft(N[j]):null)||N[j];}),G.join(\"\");}function Er(N,J,Y,C){for(var lt=Qe(N,J,Y,C),G=[],j=0;j<N.length;j++)G[j]=j;return lt.forEach(function(H){for(var Rt=H[0],vt=H[1],nt=G.slice(Rt,vt+1),Tt=nt.length;Tt--;)G[vt-Tt]=nt[Tt];}),G;}return t.closingToOpeningBracket=v,t.getBidiCharType=c,t.getBidiCharTypeName=p,t.getCanonicalBracket=w,t.getEmbeddingLevels=_r,t.getMirroredCharacter=Ft,t.getMirroredCharactersMap=Ae,t.getReorderSegments=Qe,t.getReorderedIndices=Er,t.getReorderedString=Sr,t.openingToClosingBracket=b,Object.defineProperty(t,\"__esModule\",{value:!0}),t;}({});}var tu=Av(),Sv=/[\\u061c\\u200e\\u200f\\u202a-\\u202e\\u2066-\\u2069]/,Ev=new Set([\"WS\",\"FSI\",\"LRI\",\"RLI\",\"PDI\"]),Fv=new Set([\"S\",\"B\"]);function Tv(t,e,r,i){let n=[],a=r;for(let s of Ho(t.slice(r,i)))n.push({index:a,text:s,level:e[a]}),a+=s.length;return n;}function kv(t,e){let r=!0;for(let i=t.length-1;i>=0;i--){let n=tu.getBidiCharTypeName(t[i].text[0]);Fv.has(n)?(t[i].level=e,r=!0):r&&Ev.has(n)?t[i].level=e:r=!1;}}function Iv(t,e){let r=e,i=1/0;for(let{level:a}of t)a>r&&(r=a),(a|1)<i&&(i=a|1);let n=t.slice();for(let a=r;a>=i;a--)for(let s=0;s<n.length;s++){if(n[s].level<a)continue;let o=s;for(;o+1<n.length&&n[o+1].level>=a;)o++;for(let l=s,u=o;l<u;l++,u--)[n[l],n[u]]=[n[u],n[l]];s=o;}return n;}function Cv(t){return t.level%2==0?t.text:tu.getMirroredCharacter(t.text)??t.text;}function Mv(t,e){return t.find(r=>e>=r.start&&e<=r.end)?.level??0;}function Bv(t,e,r,i,n){let a=Tv(t,e,i,n);kv(a,r);let s=\"\",o=[];for(let l of Iv(a,r)){if(Sv.test(l.text))continue;let u=Cv(l);s+=u,o.push(...Array(u.length).fill(l.index));}return{text:s,sourceIndices:o};}function Pv(t,e){let r=e.filter(a=>a>0&&a<t.length),i=[...new Set([0,...r,t.length])].sort((a,s)=>a-s),n=[];for(let a=0;a+1<i.length;a++)n.push([i[a],i[a+1]]);return n;}function $d(t,e){let{levels:r,paragraphs:i}=tu.getEmbeddingLevels(t);return Pv(t,e.concat(i.map(n=>n.start))).map(([n,a])=>Bv(t,r,Mv(i,n),n,a));}function zv(t,e){return $d(t,e).map(r=>r.text);}function Lv(t,e,r){return $d(t,r).map(i=>[i.text,i.sourceIndices.map(n=>e[n]??0)]);}var Qo=4294967296,_c=1/Qo,Ac=typeof TextDecoder>\"u\"?null:new TextDecoder(\"utf-8\"),eu=class{constructor(t){this.buf=ArrayBuffer.isView(t)?t:new Uint8Array(t),this.dataView=new DataView(this.buf.buffer,this.buf.byteOffset,this.buf.byteLength),this.pos=0,this.type=0,this._valueStart=-1,this.length=this.buf.length;}readFields(t,e,r=this.length){let i;for(;i=this.nextField(r);)t(i,e,this);return e;}readMessage(t,e){return this.readFields(t,e,this.readVarint()+this.pos);}readFixed32(){let t=this.dataView.getUint32(this.pos,!0);return this.pos+=4,t;}readSFixed32(){let t=this.dataView.getInt32(this.pos,!0);return this.pos+=4,t;}readFixed64(){let t=this.dataView.getUint32(this.pos,!0)+this.dataView.getUint32(this.pos+4,!0)*Qo;return this.pos+=8,t;}readSFixed64(){let t=this.dataView.getUint32(this.pos,!0)+this.dataView.getInt32(this.pos+4,!0)*Qo;return this.pos+=8,t;}readFloat(){let t=this.dataView.getFloat32(this.pos,!0);return this.pos+=4,t;}readDouble(){let t=this.dataView.getFloat64(this.pos,!0);return this.pos+=8,t;}readVarint(t){let e=this.buf,r=e[this.pos++];if(r<128)return r;let i=r&127,n;return n=e[this.pos++],i|=(n&127)<<7,n<128||(n=e[this.pos++],i|=(n&127)<<14,n<128)||(n=e[this.pos++],i|=(n&127)<<21,n<128)?i:(n=e[this.pos],i|=(n&15)<<28,Ov(i,t,this));}readSVarint(){let t=this.readVarint();return t%2==1?(t+1)/-2:t/2;}readBoolean(){return!!this.readVarint();}readString(){let t=this.readVarint()+this.pos,e=this.pos;return this.pos=t,t-e>=12&&Ac?Ac.decode(this.buf.subarray(e,t)):Jv(this.buf,e,t);}readBytes(){let t=this.readVarint()+this.pos,e=this.buf.subarray(this.pos,t);return this.pos=t,e;}readPackedVarint(t=[],e){let r=this.readPackedEnd();for(;this.pos<r;)t.push(this.readVarint(e));return t;}readPackedSVarint(t=[]){let e=this.readPackedEnd();for(;this.pos<e;)t.push(this.readSVarint());return t;}readPackedBoolean(t=[]){let e=this.readPackedEnd();for(;this.pos<e;)t.push(this.readBoolean());return t;}readPackedFloat(t=[]){let e=this.readPackedEnd();for(;this.pos<e;)t.push(this.readFloat());return t;}readPackedDouble(t=[]){let e=this.readPackedEnd();for(;this.pos<e;)t.push(this.readDouble());return t;}readPackedFixed32(t=[]){let e=this.readPackedEnd();for(;this.pos<e;)t.push(this.readFixed32());return t;}readPackedSFixed32(t=[]){let e=this.readPackedEnd();for(;this.pos<e;)t.push(this.readSFixed32());return t;}readPackedFixed64(t=[]){let e=this.readPackedEnd();for(;this.pos<e;)t.push(this.readFixed64());return t;}readPackedSFixed64(t=[]){let e=this.readPackedEnd();for(;this.pos<e;)t.push(this.readSFixed64());return t;}readPackedEnd(){return this.type===2?this.readVarint()+this.pos:this.pos+1;}nextField(t=this.length){if(this.pos===this._valueStart&&this.skip(this.type),this.pos>=t)return 0;let e=this.readVarint();return this.type=e&7,this._valueStart=this.pos,e>>>3;}skip(t){let e=t&7;if(e===0)for(;this.buf[this.pos++]>127;);else if(e===2)this.pos=this.readVarint()+this.pos;else if(e===5)this.pos+=4;else if(e===1)this.pos+=8;else throw Error(`Unimplemented type: ${e}`);}},Vv=class{constructor(t=new Uint8Array(16)){this.buf=ArrayBuffer.isView(t)?t:new Uint8Array(t),this.dataView=new DataView(this.buf.buffer,this.buf.byteOffset,this.buf.byteLength),this.pos=0,this.length=this.buf.length;}writeTag(t,e){this.writeVarint(t<<3|e);}realloc(t){let e=this.length||16;for(;e<this.pos+t;)e*=2;if(e!==this.length){let r=new Uint8Array(e);r.set(this.buf),this.buf=r,this.dataView=new DataView(r.buffer),this.length=e;}}finish(){return this.length=this.pos,this.pos=0,this.buf.subarray(0,this.length);}writeFixed32(t){this.realloc(4),this.dataView.setInt32(this.pos,t,!0),this.pos+=4;}writeSFixed32(t){this.realloc(4),this.dataView.setInt32(this.pos,t,!0),this.pos+=4;}writeFixed64(t){this.realloc(8),this.dataView.setInt32(this.pos,t&-1,!0),this.dataView.setInt32(this.pos+4,Math.floor(t*_c),!0),this.pos+=8;}writeSFixed64(t){this.realloc(8),this.dataView.setInt32(this.pos,t&-1,!0),this.dataView.setInt32(this.pos+4,Math.floor(t*_c),!0),this.pos+=8;}writeVarint(t){if(t=+t||0,t>=0&&t<128){this.pos>=this.length&&this.realloc(1),this.buf[this.pos++]=t;return;}if(t>268435455||t<0){$v(t,this);return;}this.realloc(4),this.buf[this.pos++]=t&127|(t>127?128:0),!(t<=127)&&(this.buf[this.pos++]=(t>>>=7)&127|(t>127?128:0),!(t<=127)&&(this.buf[this.pos++]=(t>>>=7)&127|(t>127?128:0),!(t<=127)&&(this.buf[this.pos++]=t>>>7&127)));}writeSVarint(t){this.writeVarint(t<0?-t*2-1:t*2);}writeBoolean(t){this.writeVarint(+t);}writeString(t){t=String(t),this.realloc(t.length*4),this.pos++;let e=this.pos;this.pos=Qv(this.buf,t,this.pos);let r=this.pos-e;r>=128&&Sc(e,r,this),this.pos=e-1,this.writeVarint(r),this.pos+=r;}writeFloat(t){this.realloc(4),this.dataView.setFloat32(this.pos,t,!0),this.pos+=4;}writeDouble(t){this.realloc(8),this.dataView.setFloat64(this.pos,t,!0),this.pos+=8;}writeBytes(t){let e=t.length;this.writeVarint(e),this.realloc(e),this.buf.set(t,this.pos),this.pos+=e;}writeRawMessage(t,e){this.pos++;let r=this.pos;t(e,this);let i=this.pos-r;i>=128&&Sc(r,i,this),this.pos=r-1,this.writeVarint(i),this.pos+=i;}writeMessage(t,e,r){this.writeTag(t,2),this.writeRawMessage(e,r);}writePackedVarint(t,e){e.length&&this.writeMessage(t,qv,e);}writePackedSVarint(t,e){e.length&&this.writeMessage(t,jv,e);}writePackedBoolean(t,e){e.length&&this.writeMessage(t,Yv,e);}writePackedFloat(t,e){e.length&&this.writeMessage(t,Gv,e);}writePackedDouble(t,e){e.length&&this.writeMessage(t,Xv,e);}writePackedFixed32(t,e){e.length&&this.writeMessage(t,Wv,e);}writePackedSFixed32(t,e){e.length&&this.writeMessage(t,Zv,e);}writePackedFixed64(t,e){e.length&&this.writeMessage(t,Hv,e);}writePackedSFixed64(t,e){e.length&&this.writeMessage(t,Kv,e);}writeBytesField(t,e){this.writeTag(t,2),this.writeBytes(e);}writeFixed32Field(t,e){this.writeTag(t,5),this.writeFixed32(e);}writeSFixed32Field(t,e){this.writeTag(t,5),this.writeSFixed32(e);}writeFixed64Field(t,e){this.writeTag(t,1),this.writeFixed64(e);}writeSFixed64Field(t,e){this.writeTag(t,1),this.writeSFixed64(e);}writeVarintField(t,e){this.writeTag(t,0),this.writeVarint(e);}writeSVarintField(t,e){this.writeTag(t,0),this.writeSVarint(e);}writeStringField(t,e){this.writeTag(t,2),this.writeString(e);}writeFloatField(t,e){this.writeTag(t,5),this.writeFloat(e);}writeDoubleField(t,e){this.writeTag(t,1),this.writeDouble(e);}writeBooleanField(t,e){this.writeVarintField(t,+e);}};function Ov(t,e,r){let i=r.buf,n,a;if(a=i[r.pos++],n=(a&112)>>4,a<128||(a=i[r.pos++],n|=(a&127)<<3,a<128)||(a=i[r.pos++],n|=(a&127)<<10,a<128)||(a=i[r.pos++],n|=(a&127)<<17,a<128)||(a=i[r.pos++],n|=(a&127)<<24,a<128)||(a=i[r.pos++],n|=(a&1)<<31,a<128))return Rv(t,n,e);throw Error(\"Expected varint not more than 10 bytes\");}function Rv(t,e,r){return r?e*4294967296+(t>>>0):(e>>>0)*4294967296+(t>>>0);}function $v(t,e){let r,i;if(t>=0?(r=t%4294967296|0,i=t/4294967296|0):(r=~(-t%4294967296),i=~(-t/4294967296),r^4294967295?r=r+1|0:(r=0,i=i+1|0)),t>=18446744073709552e3||t<-18446744073709552e3)throw Error(\"Given varint doesn't fit into 10 bytes\");e.realloc(10),Nv(r,i,e),Uv(i,e);}function Nv(t,e,r){r.buf[r.pos++]=t&127|128,t>>>=7,r.buf[r.pos++]=t&127|128,t>>>=7,r.buf[r.pos++]=t&127|128,t>>>=7,r.buf[r.pos++]=t&127|128,t>>>=7,r.buf[r.pos]=t&127;}function Uv(t,e){let r=(t&7)<<4;e.buf[e.pos++]|=r|((t>>>=3)?128:0),t&&(e.buf[e.pos++]=t&127|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=t&127|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=t&127|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=t&127|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=t&127)))));}function Sc(t,e,r){let i=e<=16383?1:e<=2097151?2:e<=268435455?3:Math.floor(Math.log(e)/(Math.LN2*7));r.realloc(i),r.buf.copyWithin(t+i,t,r.pos);}function qv(t,e){let r=t.length,i=e.buf,n=e.pos,a=e.length;for(let s=0;s<r;s++){let o=t[s];if(o<0||n+10>a){e.pos=n,e.writeVarint(o),i=e.buf,n=e.pos,a=e.length;continue;}for(;o>127;)i[n++]=o%128|128,o=Math.floor(o/128);i[n++]=o;}e.pos=n;}function jv(t,e){for(let r=0;r<t.length;r++)e.writeSVarint(t[r]);}function Gv(t,e){for(let r=0;r<t.length;r++)e.writeFloat(t[r]);}function Xv(t,e){for(let r=0;r<t.length;r++)e.writeDouble(t[r]);}function Yv(t,e){for(let r=0;r<t.length;r++)e.writeBoolean(t[r]);}function Wv(t,e){for(let r=0;r<t.length;r++)e.writeFixed32(t[r]);}function Zv(t,e){for(let r=0;r<t.length;r++)e.writeSFixed32(t[r]);}function Hv(t,e){for(let r=0;r<t.length;r++)e.writeFixed64(t[r]);}function Kv(t,e){for(let r=0;r<t.length;r++)e.writeSFixed64(t[r]);}function Jv(t,e,r){let i=\"\",n=e;for(;n<r;){let a=t[n],s=null,o=a>239?4:a>223?3:a>191?2:1;if(n+o>r)break;let l,u,h;o===1?a<128&&(s=a):o===2?(l=t[n+1],(l&192)==128&&(s=(a&31)<<6|l&63,s<=127&&(s=null))):o===3?(l=t[n+1],u=t[n+2],(l&192)==128&&(u&192)==128&&(s=(a&15)<<12|(l&63)<<6|u&63,(s<=2047||s>=55296&&s<=57343)&&(s=null))):o===4&&(l=t[n+1],u=t[n+2],h=t[n+3],(l&192)==128&&(u&192)==128&&(h&192)==128&&(s=(a&15)<<18|(l&63)<<12|(u&63)<<6|h&63,(s<=65535||s>=1114112)&&(s=null))),s===null?(s=65533,o=1):s>65535&&(s-=65536,i+=String.fromCharCode(s>>>10&1023|55296),s=56320|s&1023),i+=String.fromCharCode(s),n+=o;}return i;}function Qv(t,e,r){for(let i=0,n,a;i<e.length;i++){if(n=e.charCodeAt(i),n>55295&&n<57344){if(a){if(n<56320){t[r++]=239,t[r++]=191,t[r++]=189,a=n;continue;}n=a-55296<<10|n-56320|65536,a=null;}else{n>56319||i+1===e.length?(t[r++]=239,t[r++]=191,t[r++]=189):a=n;continue;}}else a&&=(t[r++]=239,t[r++]=191,t[r++]=189,null);n<128?t[r++]=n:(n<2048?t[r++]=n>>6|192:(n<65536?t[r++]=n>>12|224:(t[r++]=n>>18|240,t[r++]=n>>12&63|128),t[r++]=n>>6&63|128),t[r++]=n&63|128);}return r;}function tb(t){return typeof t?.renderWithWebGL==\"function\";}function ru(t){let e=0,r=0;for(let s of t)e+=s.w*s.h,r=Math.max(r,s.w);t.sort((s,o)=>o.h-s.h);let i=[{x:0,y:0,w:Math.max(Math.ceil(Math.sqrt(e/.95)),r),h:1/0}],n=0,a=0;for(let s of t)for(let o=i.length-1;o>=0;o--){let l=i[o];if(!(s.w>l.w||s.h>l.h)){if(s.x=l.x,s.y=l.y,a=Math.max(a,s.y+s.h),n=Math.max(n,s.x+s.w),s.w===l.w&&s.h===l.h){let u=i.pop();u&&o<i.length&&(i[o]=u);}else s.h===l.h?(l.x+=s.w,l.w-=s.w):s.w===l.w?(l.y+=s.h,l.h-=s.h):(i.push({x:l.x+s.w,y:l.y,w:l.w-s.w,h:s.h}),l.y+=s.h,l.h-=s.h);break;}}return{w:n,h:a,fill:e/(n*a)||0};}var Nd=class{constructor(t,{pixelRatio:e,version:r,isWebGLImage:i=!1,stretchX:n,stretchY:a,content:s,textFitWidth:o,textFitHeight:l}){this.paddedRect=t,this.pixelRatio=e,this.stretchX=n,this.stretchY=a,this.content=s,this.version=r,this.needsFirstWebGLRender=i,this.textFitWidth=o,this.textFitHeight=l;}get tl(){return[this.paddedRect.x+1,this.paddedRect.y+1];}get br(){return[this.paddedRect.x+this.paddedRect.w-1,this.paddedRect.y+this.paddedRect.h-1];}get tlbr(){return this.tl.concat(this.br);}get displaySize(){return[(this.paddedRect.w-2)/this.pixelRatio,(this.paddedRect.h-2)/this.pixelRatio];}},iu=class{constructor(t,e){let r={},i={};this.haveRenderCallbacks=[],this.patchedUpdateVersion=-1;let n=[];this.addImages(t,r,n),this.addImages(e,i,n);let{w:a,h:s}=ru(n),o=new Yt({width:a||1,height:s||1});for(let l in t){let u=t[l];if(u.isWebGLImage)continue;let h=r[l].paddedRect;Yt.copy(u.data,o,{x:0,y:0},{x:h.x+1,y:h.y+1},u.data);}for(let l in e){let u=e[l],h=i[l].paddedRect,c=h.x+1,p=h.y+1,f=u.data.width,d=u.data.height;Yt.copy(u.data,o,{x:0,y:0},{x:c,y:p},u.data),Yt.copy(u.data,o,{x:0,y:d-1},{x:c,y:p-1},{width:f,height:1}),Yt.copy(u.data,o,{x:0,y:0},{x:c,y:p+d},{width:f,height:1}),Yt.copy(u.data,o,{x:f-1,y:0},{x:c-1,y:p},{width:1,height:d}),Yt.copy(u.data,o,{x:0,y:0},{x:c+f,y:p},{width:1,height:d});}this.image=o,this.iconPositions=r,this.patternPositions=i;}addImages(t,e,r){for(let i in t){let n=t[i],a={x:0,y:0,w:n.data.width+2,h:n.data.height+2};r.push(a),e[i]=new Nd(a,n),n.hasRenderCallback&&this.haveRenderCallbacks.push(i);}}patchUpdatedImages(t,e){if(t.dispatchRenderCallbacks(this.haveRenderCallbacks),this.patchedUpdateVersion!==t.updateVersion){this.patchedUpdateVersion=t.updateVersion;for(let r in this.iconPositions)this.patchUpdatedImage(this.iconPositions[r],t.getImage(r),e);for(let r in this.patternPositions)this.patchUpdatedImage(this.patternPositions[r],t.getImage(r),e);}}patchUpdatedImage(t,e,r){if(!t||!e||!t.needsFirstWebGLRender&&t.version===e.version)return;t.needsFirstWebGLRender=!1,t.version=e.version;let[i,n]=t.tl,a=e.userImage?.data;if(!tb(a)){r.update(e.data,void 0,{x:i,y:n});return;}let{width:s,height:o}=e.data;r.context.setCustomLayerDefaults(),a.renderWithWebGL({gl:r.context.gl,texture:r.texture,x:i,y:n,width:s,height:o}),r.context.setDirty();}};I(\"ImagePosition\",Nd),I(\"ImageAtlas\",iu);var Ud=function(t){return t[t.none=0]=\"none\",t[t.horizontal=1]=\"horizontal\",t[t.vertical=2]=\"vertical\",t[t.horizontalOnly=3]=\"horizontalOnly\",t;}(Ud||{});function eb(t){for(let e of t)if(e.positionedGlyphs.length!==0)return!1;return!0;}function rb(t,e){let r=[],i=0;for(let n of e)r.push(t.substring(i,n)),i=n;return i<t.length()&&r.push(t.substring(i,t.length())),r;}var Ec=/^\\p{gc=M}$/u;function ib(t){let e=[],r=0;for(;r<t.length;){if(!Ec.test(t[r])){e.push(r),r++;continue;}let i=r;for(;i<t.length&&Ec.test(t[i]);)i++;let n=t[i];if(n!==void 0&&Vd(n.codePointAt(0))){e.push(i);for(let a=i-1;a>=r;a--)e.push(a);r=i+1;}else{for(let a=r;a<i;a++)e.push(a);r=i;}}return e;}function nb(t){let e=[],r=0;for(let i of t.graphemes())e.push(...Array(i.length).fill(t.sectionIndex[r])),r++;return e;}function ab(t,e){let r=e.map(a=>t.toCodeUnitIndex(a)),i=mr.isParsed()?mr:null;if(t.sections.length===1)return i?i.processBidirectionalText(t.toString(),r).map(a=>Fc(a,t.sections,[...a].map(()=>0))):zv(t.toString(),r).map(a=>tl([...a],t.sections,[...a].map(()=>0)));let n=nb(t);return i?i.processStyledBidirectionalText(t.text,n,r).map(([a,s])=>Fc(a,t.sections,s)):Lv(t.text,n,r).map(([a,s])=>{let o=[...a];return tl(o,t.sections,qd(o).map(l=>s[l]??0));});}function tl(t,e,r){let i=new Ql(t.join(\"\"),e,[]),n=0;for(let a of i.graphemes())i.sectionIndex.push(r[n]??0),n+=[...a].length;return i;}function qd(t){let e=[],r=0;for(let i of t)e.push(r),r+=i.length;return e;}function Fc(t,e,r){let i=[...t],n=qd(i),a=ib(i);return tl(a.map(s=>i[s]),e,a.map(s=>r[n[s]]??0));}function Wn(t,e,r,i,n,a,s,o,l,u,h,c,p,f,d){let y=Ql.fromFeature(t,n);c===2&&y.verticalizePunctuation();let m=y.determineLineBreaks(u,a,e,i,f),g=Od(y.text)?ab(y,m):rb(y,m),x=[],b={positionedLines:x,text:y.toString(),top:h[1],bottom:h[1],left:h[0],right:h[0],writingMode:c,iconsInText:!1,verticalizable:!1};return db(b,e,r,i,g,s,o,l,c,u,p,d),!eb(x)&&b;}function jd(t){let e=.5,r=.5;switch(t){case\"right\":case\"top-right\":case\"bottom-right\":e=1;break;case\"left\":case\"top-left\":case\"bottom-left\":e=0;}switch(t){case\"bottom\":case\"bottom-right\":case\"bottom-left\":r=1;break;case\"top\":case\"top-right\":case\"top-left\":r=0;}return{horizontalAlign:e,verticalAlign:r};}function sb(t,e,r){let i=e.getMaxScale()*24,{maxImageWidth:n,maxImageHeight:a}=e.getMaxImageSize(t),s=Math.max(i,a*r);return{verticalLineContentWidth:Math.max(i,n*r),horizontalLineContentHeight:s};}function Gd(t){switch(t){case\"top\":return 0;case\"center\":return .5;default:return 1;}}function ob(t,e,r,i){if(t?.rect)return t;let n=e[r.fontStack]?.[i];return n?{rect:null,metrics:n.metrics}:null;}function lb(t,e,r){return!(t===1||!e&&!Xa(r)||e&&(Jl(r)||Ld(r)));}function oa(t){return /\\p{Nd}/u.test(String.fromCodePoint(t));}function Xd(t){return /\\p{Lu}/u.test(String.fromCodePoint(t));}function ub(t){return /[\\p{P}\\p{S}]/u.test(String.fromCodePoint(t));}function hb(t){let e=t.some(oa)&&t.every(i=>oa(i)||ub(i)),r=t.length<=3&&t.every(i=>Xd(i)||oa(i));return e||r;}function cb(t){return(oa(t)||Xd(t))&&!Ld(t);}function pb(t,e){let r=!1;for(let i=0;i<t.length;i++){if(e[i])continue;let n=Nr[t[i]];n&&(i===0||e[i-1])&&(i===t.length-1||e[i+1])&&(t[i]=n,e[i]=!0,r=!0);}return r;}function fb(t){let e=t.graphemes().slice(),r=e.map(a=>a.codePointAt(0)),i=r.map(Xa),n=a=>!i[a]&&!Jl(r[a])&&!(\"imageName\"in t.getSection(a));for(let a=0;a<r.length;a++){if(!n(a))continue;let s=a;for(;s+1<r.length&&n(s+1);)s++;if(hb(r.slice(a,s+1)))for(let o=a;o<=s;o++)i[o]=cb(r[o]);a=s;}return pb(e,i)&&(t.text=e.join(\"\"),t._graphemes=null),i;}function db(t,e,r,i,n,a,s,o,l,u,h,c){let p=0,f=0,d=0,y=0,m=o===\"right\"?1:o===\"left\"?0:.5,g=24/c,x=0;for(let w of n){w.trim();let _=w.getMaxScale(),A={positionedGlyphs:[],lineOffset:0};t.positionedLines[x]=A;let S=A.positionedGlyphs,F=0;if(!w.length()){f+=a,++x;continue;}let z=sb(i,w,g),$=l===2&&!h?fb(w):null,B=w.graphemes();for(let O=0;O<B.length;O++){let R=w.getSection(O),L=B[O],tt=L.codePointAt(0),it=$?$[O]:lb(l,h,tt),pt=\"fontStack\"in R&&zd(L)&&!e[R.fontStack]?.[L]?[...L]:[L];for(let st of pt){let ft={glyph:st.codePointAt(0),grapheme:st,imageName:null,x:p,y:f+-17,vertical:it,scale:1,fontStack:\"\",sectionIndex:w.getSectionIndex(O),metrics:null,rect:null},jt;if(\"fontStack\"in R){if(jt=yb(R,st,it,z,e,r),!jt)continue;ft.fontStack=R.fontStack;}else{if(t.iconsInText=!0,R.scale*=g,jt=mb(R,it,_,z,i),!jt)continue;F=Math.max(F,jt.imageOffset),ft.imageName=R.imageName;}let{rect:Pe,metrics:pe,baselineOffset:ze}=jt;if(ft.y+=ze,ft.scale=R.scale,ft.metrics=pe,ft.rect=Pe,S.push(ft),!it)p+=pe.advance*R.scale+u;else{t.verticalizable=!0;let Wt=\"imageName\"in R?pe.advance:24;p+=Wt*R.scale+u;}}}if(S.length!==0){let O=p-u;d=Math.max(O,d),gb(S,0,S.length-1,m);}p=0;let P=(_-1)*24;A.lineOffset=Math.max(F,P);let E=a*_+F;f+=E,y=Math.max(E,y),++x;}let{horizontalAlign:b,verticalAlign:v}=jd(s);xb(t.positionedLines,m,b,v,d,y,a,f,n.length),t.top+=-v*f,t.bottom=t.top+f,t.left+=-b*d,t.right=t.left+d;}function yb(t,e,r,i,n,a){let s=a[t.fontStack]?.[e],o=ob(s,n,t,e);if(o===null)return null;let l;if(r)l=i.verticalLineContentWidth-t.scale*24;else{let u=Gd(t.verticalAlign);l=(i.horizontalLineContentHeight-t.scale*24)*u;}return{rect:o.rect,metrics:o.metrics,baselineOffset:l};}function mb(t,e,r,i,n){let a=n[t.imageName];if(!a)return null;let s=a.paddedRect,o=a.displaySize,l={width:o[0],height:o[1],left:1,top:-3,advance:e?o[1]:o[0]},u;if(e)u=i.verticalLineContentWidth-o[1]*t.scale;else{let c=Gd(t.verticalAlign);u=(i.horizontalLineContentHeight-o[1]*t.scale)*c;}let h=(e?o[0]:o[1])*t.scale-24*r;return{rect:s,metrics:l,baselineOffset:u,imageOffset:h};}function gb(t,e,r,i){if(i===0)return;let n=t[r],a=n.metrics.advance*n.scale,s=(t[r].x+a)*i;for(let o=e;o<=r;o++)t[o].x-=s;}function xb(t,e,r,i,n,a,s,o,l){let u=(e-r)*n,h=0;h=a===s?-i*l*s+.5*s:-o*i- -17;for(let c of t)for(let p of c.positionedGlyphs)p.x+=u,p.y+=h;}function vb(t,e,r){let{horizontalAlign:i,verticalAlign:n}=jd(r),a=e[0],s=e[1],o=a-t.displaySize[0]*i,l=o+t.displaySize[0],u=s-t.displaySize[1]*n;return{image:t,top:u,bottom:u+t.displaySize[1],left:o,right:l};}function Yd(t){let e=t.left,r=t.top,i=t.right-e,n=t.bottom-r,a=t.image.content[2]-t.image.content[0],s=t.image.content[3]-t.image.content[1],o=t.image.textFitWidth??\"stretchOrShrink\",l=t.image.textFitHeight??\"stretchOrShrink\",u=a/s;if(l===\"proportional\"){if(o===\"stretchOnly\"&&i/n<u||o===\"proportional\"){let h=Math.ceil(n*u);e*=h/i,i=h;}}else if(o===\"proportional\"&&l===\"stretchOnly\"&&u!==0&&i/n>u){let h=Math.ceil(i/u);r*=h/n,n=h;}return{x1:e,y1:r,x2:e+i,y2:r+n};}function Tc(t,e,r,i,n,a){let s=t.image,o;if(s.content){let m=s.content,g=s.pixelRatio||1;o=[m[0]/g,m[1]/g,s.displaySize[0]-m[2]/g,s.displaySize[1]-m[3]/g];}let l=e.left*a,u=e.right*a,h,c,p,f;r===\"width\"||r===\"both\"?(f=n[0]+l-i[3],c=n[0]+u+i[1]):(f=n[0]+(l+u-s.displaySize[0])/2,c=f+s.displaySize[0]);let d=e.top*a,y=e.bottom*a;return r===\"height\"||r===\"both\"?(h=n[1]+d-i[0],p=n[1]+y+i[2]):(h=n[1]+(d+y-s.displaySize[1])/2,p=h+s.displaySize[1]),{image:s,top:h,right:c,bottom:p,left:f,collisionPadding:o};}var kc=32640;function Ic(t,e){let{expression:r}=e;if(r.kind===\"constant\")return{kind:\"constant\",layoutSize:r.evaluate(new at(t+1))};if(r.kind===\"source\")return{kind:\"source\"};if(r.kind===\"composite\"){let{minZoom:i,maxZoom:n}=bb(r.zoomStops,t);return{kind:\"composite\",minZoom:i,maxZoom:n,interpolationType:r.interpolationType};}{let i=wb(r),n=r.evaluate(new at(t+1));return{kind:\"camera\",zoomStops:r.zoomStops,sizes:i,layoutSize:n,interpolationType:r.interpolationType};}}function bb(t,e){let r=0;for(;r<t.length&&t[r]<=e;)r++;r=Math.max(0,r-1);let i=r;for(;i<t.length&&t[i]<e+1;)i++;return i=Math.min(t.length-1,i),{minZoom:t[r],maxZoom:t[i]};}function wb(t){return t.zoomStops.map(e=>t.evaluate(new at(e===-1/0?t.zoomStops[1]-1:e)));}var Wr=class Wd extends M{constructor(e,r,i,n){super(e,r),this.angle=i,n!==void 0&&(this.segment=n);}clone(){return new Wd(this.x,this.y,this.angle,this.segment);}};I(\"Anchor\",Wr);function Zd(t,e,r,i,n){if(e.segment===void 0||r===0)return!0;let a=e,s=e.segment+1,o=0;for(;o>-r/2;){if(s--,s<0)return!1;o-=t[s].dist(a),a=t[s];}o+=t[s].dist(t[s+1]),s++;let l=[],u=0;for(;o<r/2;){let h=t[s-1],c=t[s],p=t[s+1];if(!p)return!1;let f=h.angleTo(c)-c.angleTo(p);for(f=Math.abs((f+3*Math.PI)%(Math.PI*2)-Math.PI),l.push({distance:o,angleDelta:f}),u+=f;o-l[0].distance>i;)u-=l.shift().angleDelta;if(u>n)return!1;s++,o+=c.dist(p);}return!0;}function Hd(t){let e=0;for(let r=0;r<t.length-1;r++)e+=t[r].dist(t[r+1]);return e;}function Kd(t,e,r){return t?3/5*e*r:0;}function Jd(t,e){return Math.max(t?t.right-t.left:0,e?e.right-e.left:0);}function Db(t,e,r,i,n,a){let s=Kd(r,n,a),o=Jd(r,i)*a,l=0,u=Hd(t)/2;for(let h=0;h<t.length-1;h++){let c=t[h],p=t[h+1],f=c.dist(p);if(l+f>u){let d=(u-l)/f,y=new Wr(pr.number(c.x,p.x,d),pr.number(c.y,p.y,d),p.angleTo(c),h);return y._round(),!s||Zd(t,y,o,s,e)?y:void 0;}l+=f;}}function _b(t,e,r,i,n,a,s,o,l){let u=Kd(i,a,s),h=Jd(i,n),c=h*s,p=t[0].x===0||t[0].x===l||t[0].y===0||t[0].y===l;e-c<e/4&&(e=c+e/4);let f=a*2;return Qd(t,p?e/2*o%e:(h/2+f)*s*o%e,e,u,r,c,p,!1,l);}function Qd(t,e,r,i,n,a,s,o,l){let u=a/2,h=Hd(t),c=0,p=e-r,f=[];for(let d=0;d<t.length-1;d++){let y=t[d],m=t[d+1],g=y.dist(m),x=m.angleTo(y);for(;p+r<c+g;){p+=r;let b=(p-c)/g,v=pr.number(y.x,m.x,b),w=pr.number(y.y,m.y,b);if(v>=0&&v<l&&w>=0&&w<l&&p-u>=0&&p+u<=h){let _=new Wr(v,w,x,d);_._round(),(!i||Zd(t,_,a,i,n))&&f.push(_);}}c+=g;}return!o&&!f.length&&!s&&(f=Qd(t,c/2,r,i,n,a,s,!0,l)),f;}function Ab(t,e,r,i,n){let a=[];for(let s of t){let o;for(let l=0;l<s.length-1;l++){let u=s[l],h=s[l+1];u.x<e&&h.x<e||(u.x<e?u=new M(e,u.y+(h.y-u.y)*((e-u.x)/(h.x-u.x)))._round():h.x<e&&(h=new M(e,u.y+(h.y-u.y)*((e-u.x)/(h.x-u.x)))._round()),!(u.y<r&&h.y<r)&&(u.y<r?u=new M(u.x+(h.x-u.x)*((r-u.y)/(h.y-u.y)),r)._round():h.y<r&&(h=new M(u.x+(h.x-u.x)*((r-u.y)/(h.y-u.y)),r)._round()),!(u.x>=i&&h.x>=i)&&(u.x>=i?u=new M(i,u.y+(h.y-u.y)*((i-u.x)/(h.x-u.x)))._round():h.x>=i&&(h=new M(i,u.y+(h.y-u.y)*((i-u.x)/(h.x-u.x)))._round()),!(u.y>=n&&h.y>=n)&&(u.y>=n?u=new M(u.x+(h.x-u.x)*((n-u.y)/(h.y-u.y)),n)._round():h.y>=n&&(h=new M(u.x+(h.x-u.x)*((n-u.y)/(h.y-u.y)),n)._round()),(!o||!u.equals(o[o.length-1]))&&(o=[u],a.push(o)),o.push(h)))));}}return a;}function ty(t,e,r,i,n,a){let s=Cc(t,e,r,n,0);return s=Cc(s,e,i,a,1),s;}function Cc(t,e,r,i,n){switch(e){case 1:return Sb(t,r,i,n);case 2:return Mc(t,r,i,n,!1);case 3:return Mc(t,r,i,n,!0);}return[];}function Sb(t,e,r,i){let n=[];for(let a of t)for(let s of a){let o=i===0?s.x:s.y;o>=e&&o<=r&&n.push([s]);}return n;}function Eb(t,e,r,i,n){let a=i===0?Fb:Tb,s=[],o=[];for(let h=0;h<t.length-1;h++){let c=t[h],p=t[h+1],f=i===0?c.x:c.y,d=i===0?p.x:p.y,y=!1;f<e?d>e&&s.push(a(c,p,e)):f>r?d<r&&s.push(a(c,p,r)):s.push(c),d<e&&f>=e&&(s.push(a(c,p,e)),y=!0),d>r&&f<=r&&(s.push(a(c,p,r)),y=!0),!n&&y&&(o.push(s),s=[]);}let l=t.length-1,u=i===0?t[l].x:t[l].y;return u>=e&&u<=r&&s.push(t[l]),n&&s.length>0&&!s[0].equals(s[s.length-1])&&s.push(new M(s[0].x,s[0].y)),s.length>0&&o.push(s),o;}function Mc(t,e,r,i,n){let a=[];for(let s of t){let o=Eb(s,e,r,i,n);o.length>0&&a.push(...o);}return a;}function Fb(t,e,r){let i=(r-t.x)/(e.x-t.x);return new M(r,t.y+(e.y-t.y)*i);}function Tb(t,e,r){let i=(r-t.y)/(e.y-t.y);return new M(t.x+(e.x-t.x)*i,r);}function Bc(t,e,r,i){let n=[],a=t.image,s=a.pixelRatio,o=a.paddedRect.w-2,l=a.paddedRect.h-2,u={x1:t.left,y1:t.top,x2:t.right,y2:t.bottom},h=a.stretchX||[[0,o]],c=a.stretchY||[[0,l]],p=(E,O)=>E+O[1]-O[0],f=h.reduce(p,0),d=c.reduce(p,0),y=o-f,m=l-d,g=0,x=f,b=0,v=d,w=0,_=y,A=0,S=m;if(a.content&&i){let E=a.content,O=E[2]-E[0],R=E[3]-E[1];(a.textFitWidth||a.textFitHeight)&&(u=Yd(t)),g=Zn(h,0,E[0]),b=Zn(c,0,E[1]),x=Zn(h,E[0],E[2]),v=Zn(c,E[1],E[3]),w=E[0]-g,A=E[1]-b,_=O-x,S=R-v;}let F=u.x1,z=u.y1,$=u.x2-F,B=u.y2-z,P=(E,O,R,L)=>{let tt=Hn(E.stretch-g,x,$,F),it=Kn(E.fixed-w,_,E.stretch,f),pt=Hn(O.stretch-b,v,B,z),st=Kn(O.fixed-A,S,O.stretch,d),ft=Hn(R.stretch-g,x,$,F),jt=Kn(R.fixed-w,_,R.stretch,f),Pe=Hn(L.stretch-b,v,B,z),pe=Kn(L.fixed-A,S,L.stretch,d),ze=new M(tt,pt),Wt=new M(ft,pt),_r=new M(ft,Pe),Ar=new M(tt,Pe),Je=new M(it/s,st/s),ui=new M(jt/s,pe/s),Ft=e*Math.PI/180;if(Ft){let N=Math.sin(Ft),J=Math.cos(Ft),Y=[J,-N,N,J];ze._matMult(Y),Wt._matMult(Y),Ar._matMult(Y),_r._matMult(Y);}let Ae=E.stretch+E.fixed,Qe=R.stretch+R.fixed,Sr=O.stretch+O.fixed,Er=L.stretch+L.fixed;return{tl:ze,tr:Wt,bl:Ar,br:_r,tex:{x:a.paddedRect.x+1+Ae,y:a.paddedRect.y+1+Sr,w:Qe-Ae,h:Er-Sr},writingMode:void 0,glyphOffset:[0,0],sectionIndex:0,pixelOffsetTL:Je,pixelOffsetBR:ui,minFontScaleX:_/s/$,minFontScaleY:S/s/B,isSDF:r};};if(!i||!a.stretchX&&!a.stretchY)n.push(P({fixed:0,stretch:-1},{fixed:0,stretch:-1},{fixed:0,stretch:o+1},{fixed:0,stretch:l+1}));else{let E=Pc(h,y,f),O=Pc(c,m,d);for(let R=0;R<E.length-1;R++){let L=E[R],tt=E[R+1];for(let it=0;it<O.length-1;it++){let pt=O[it],st=O[it+1];n.push(P(L,pt,tt,st));}}}return n;}function Zn(t,e,r){let i=0;for(let n of t)i+=Math.max(e,Math.min(r,n[1]))-Math.max(e,Math.min(r,n[0]));return i;}function Pc(t,e,r){let i=[{fixed:-1,stretch:0}];for(let[n,a]of t){let s=i[i.length-1];i.push({fixed:n-s.stretch,stretch:s.stretch}),i.push({fixed:n-s.stretch,stretch:s.stretch+(a-n)});}return i.push({fixed:e+1,stretch:r}),i;}function Hn(t,e,r,i){return t/e*r+i;}function Kn(t,e,r,i){return t-e*r/i;}function kb(t,e,r,i,n,a,s,o){let l=i.layout.get(\"text-rotate\").evaluate(a,{})*Math.PI/180,u=[];for(let h of e.positionedLines)for(let c of h.positionedGlyphs){if(!c.rect)continue;let p=c.rect||{},f=4,d=!0,y=1,m=0,g=(n||o)&&c.vertical,x=c.metrics.advance*c.scale/2;if(o&&e.verticalizable){let L=(c.scale-1)*24,tt=(24-c.metrics.width*c.scale)/2;m=h.lineOffset/2-(c.imageName?-tt:L);}if(c.imageName){let L=s[c.imageName];d=L.sdf,y=L.pixelRatio,f=1/y;}let b=n?[c.x+x,c.y]:[0,0],v=n?[0,0]:[c.x+x+r[0],c.y+r[1]-m],w=[0,0];g&&(w=v,v=[0,0]);let _=c.metrics.isDoubleResolution?2:1,A=(c.metrics.left-f)*c.scale-x+v[0],S=(-c.metrics.top-f)*c.scale+v[1],F=A+p.w/_*c.scale/y,z=S+p.h/_*c.scale/y,$=new M(A,S),B=new M(F,S),P=new M(A,z),E=new M(F,z);if(g){let L=new M(-x,x- -17),tt=-Math.PI/2,it=12-x,pt=c.imageName?it:0,st=new M(22-it,-pt),ft=new M(...w);$._rotateAround(tt,L)._add(st)._add(ft),B._rotateAround(tt,L)._add(st)._add(ft),P._rotateAround(tt,L)._add(st)._add(ft),E._rotateAround(tt,L)._add(st)._add(ft);}if(l){let L=Math.sin(l),tt=Math.cos(l),it=[tt,-L,L,tt];$._matMult(it),B._matMult(it),P._matMult(it),E._matMult(it);}let O=new M(0,0),R=new M(0,0);u.push({tl:$,tr:B,bl:P,br:E,tex:p,writingMode:e.writingMode,glyphOffset:b,sectionIndex:c.sectionIndex,isSDF:d,pixelOffsetTL:O,pixelOffsetBR:R,minFontScaleX:0,minFontScaleY:0});}return u;}var Jn=class{constructor(t,e,r,i,n,a,s,o,l,u){if(this.boxStartIndex=t.length,l){let h=a.top,c=a.bottom,p=a.collisionPadding;p&&(h-=p[1],c+=p[3]);let f=c-h;f>0&&(f=Math.max(10,f),this.circleDiameter=f);}else{let h=a.image?.content&&(a.image.textFitWidth||a.image.textFitHeight)?Yd(a):{x1:a.left,y1:a.top,x2:a.right,y2:a.bottom};h.y1=h.y1*s-o[0],h.y2=h.y2*s+o[2],h.x1=h.x1*s-o[3],h.x2=h.x2*s+o[1];let c=a.collisionPadding;if(c&&(h.x1-=c[0]*s,h.y1-=c[1]*s,h.x2+=c[2]*s,h.y2+=c[3]*s),u){let p=new M(h.x1,h.y1),f=new M(h.x2,h.y1),d=new M(h.x1,h.y2),y=new M(h.x2,h.y2),m=u*Math.PI/180;p._rotate(m),f._rotate(m),d._rotate(m),y._rotate(m),h.x1=Math.min(p.x,f.x,d.x,y.x),h.x2=Math.max(p.x,f.x,d.x,y.x),h.y1=Math.min(p.y,f.y,d.y,y.y),h.y2=Math.max(p.y,f.y,d.y,y.y);}t.emplaceBack(e.x,e.y,h.x1,h.y1,h.x2,h.y2,r,i,n);}this.boxEndIndex=t.length;}},Ib=class{constructor(t=[],e=(r,i)=>r<i?-1:+(r>i)){if(this.data=t,this.length=this.data.length,this.compare=e,this.length>0)for(let r=(this.length>>1)-1;r>=0;r--)this._down(r);}push(t){this.data.push(t),this._up(this.length++);}pop(){if(this.length===0)return;let t=this.data[0],e=this.data.pop();return--this.length>0&&(this.data[0]=e,this._down(0)),t;}peek(){return this.data[0];}_up(t){let{data:e,compare:r}=this,i=e[t];for(;t>0;){let n=t-1>>1,a=e[n];if(r(i,a)>=0)break;e[t]=a,t=n;}e[t]=i;}_down(t){let{data:e,compare:r}=this,i=this.length>>1,n=e[t];for(;t<i;){let a=(t<<1)+1,s=a+1;if(s<this.length&&r(e[s],e[a])<0&&(a=s),r(e[a],n)>=0)break;e[t]=e[a],t=a;}e[t]=n;}};function Cb(t,e=1){let r=ba.fromPoints(t[0]),i=Math.min(r.width(),r.height()),n=i/2,a=new Ib([],Mb),{minX:s,minY:o,maxX:l,maxY:u}=r;if(i===0)return new M(s,o);for(let p=s;p<l;p+=i)for(let f=o;f<u;f+=i)a.push(new Rr(p+n,f+n,n,t));let h=Pb(t),c=h;for(;a.length;){let p=a.pop();(p.d>c.d||!c.d)&&(c=p),!(p.max-c.d<=e)&&(n=p.h/2,a.push(new Rr(p.p.x-n,p.p.y-n,n,t)),a.push(new Rr(p.p.x+n,p.p.y-n,n,t)),a.push(new Rr(p.p.x-n,p.p.y+n,n,t)),a.push(new Rr(p.p.x+n,p.p.y+n,n,t)));}return h.d>0&&c.d-h.d<=e?h.p:c.p;}function Mb(t,e){return e.max-t.max;}var Rr=class{constructor(t,e,r,i){this.p=new M(t,e),this.h=r,this.d=Bb(this.p,i),this.max=this.d+this.h*Math.SQRT2;}};function Bb(t,e){let r=!1,i=1/0;for(let n of e)for(let a=0,s=n.length,o=s-1;a<s;o=a++){let l=n[a],u=n[o];l.y>t.y!=u.y>t.y&&t.x<(u.x-l.x)*(t.y-l.y)/(u.y-l.y)+l.x&&(r=!r),i=Math.min(i,Qf(t,l,u));}return(r?1:-1)*Math.sqrt(i);}function Pb(t){let e=0,r=0,i=0,n=t[0];for(let a=0,s=n.length,o=s-1;a<s;o=a++){let l=n[a],u=n[o],h=l.x*u.y-u.x*l.y;r+=(l.x+u.x)*h,i+=(l.y+u.y)*h,e+=h*3;}return new Rr(r/e,i/e,0,t);}var zb=function(t){return t[t.center=1]=\"center\",t[t.left=2]=\"left\",t[t.right=3]=\"right\",t[t.top=4]=\"top\",t[t.bottom=5]=\"bottom\",t[t[\"top-left\"]=6]=\"top-left\",t[t[\"top-right\"]=7]=\"top-right\",t[t[\"bottom-left\"]=8]=\"bottom-left\",t[t[\"bottom-right\"]=9]=\"bottom-right\",t;}({}),nu=1/0;function ey(t,e){function r(n,a){let s=0,o=0;a<0&&(a=0);let l=a/Math.SQRT2;switch(n){case\"top-right\":case\"top-left\":o=l-7;break;case\"bottom-right\":case\"bottom-left\":o=-l+7;break;case\"bottom\":o=-a+7;break;case\"top\":o=a-7;}switch(n){case\"top-right\":case\"bottom-right\":s=-l;break;case\"top-left\":case\"bottom-left\":s=l;break;case\"left\":s=a;break;case\"right\":s=-a;}return[s,o];}function i(n,a,s){let o=0,l=0;switch(a=Math.abs(a),s=Math.abs(s),n){case\"top-right\":case\"top-left\":case\"top\":l=s-7;break;case\"bottom-right\":case\"bottom-left\":case\"bottom\":l=-s+7;}switch(n){case\"top-right\":case\"bottom-right\":case\"right\":o=-a;break;case\"top-left\":case\"bottom-left\":case\"left\":o=a;}return[o,l];}return e[1]===nu?r(t,e[0]):i(t,e[0],e[1]);}function ry(t,e,r){let i=t.layout,n=i.get(\"text-variable-anchor-offset\")?.evaluate(e,{},r);if(n){let s=n.values,o=[];for(let l=0;l<s.length;l+=2){let u=o[l]=s[l],h=s[l+1].map(c=>c*24);u.startsWith(\"top\")?h[1]-=7:u.startsWith(\"bottom\")&&(h[1]+=7),o[l+1]=h;}return new be(o);}let a=i.get(\"text-variable-anchor\");if(a){let s;s=t._unevaluatedLayout.getValue(\"text-radial-offset\")===void 0?i.get(\"text-offset\").evaluate(e,{},r).map(l=>l*24):[i.get(\"text-radial-offset\").evaluate(e,{},r)*24,nu];let o=[];for(let l of a)o.push(l,ey(l,s));return new be(o);}return null;}function Lb(t){t.bucket.createArrays();let e=512*t.bucket.overscaling;t.bucket.tilePixelRatio=mt/e,t.bucket.compareText={},t.bucket.iconsNeedLinear=!1;let r=t.bucket.layers[0],i=r.layout,n=r._unevaluatedLayout._values,a={layoutIconSize:n[\"icon-size\"].possiblyEvaluate(new at(t.bucket.zoom+1),t.canonical),layoutTextSize:n[\"text-size\"].possiblyEvaluate(new at(t.bucket.zoom+1),t.canonical),textMaxSize:n[\"text-size\"].possiblyEvaluate(new at(18))};if(t.bucket.textSizeData.kind===\"composite\"){let{minZoom:h,maxZoom:c}=t.bucket.textSizeData;a.compositeTextSizes=[n[\"text-size\"].possiblyEvaluate(new at(h),t.canonical),n[\"text-size\"].possiblyEvaluate(new at(c),t.canonical)];}if(t.bucket.iconSizeData.kind===\"composite\"){let{minZoom:h,maxZoom:c}=t.bucket.iconSizeData;a.compositeIconSizes=[n[\"icon-size\"].possiblyEvaluate(new at(h),t.canonical),n[\"icon-size\"].possiblyEvaluate(new at(c),t.canonical)];}let s=i.get(\"text-line-height\")*24,o=i.get(\"text-rotation-alignment\")!==\"viewport\"&&i.get(\"symbol-placement\")!==\"point\",l=i.get(\"text-keep-upright\"),u=i.get(\"text-size\");for(let h of t.bucket.features){let c=i.get(\"text-font\").evaluate(h,{},t.canonical).join(\",\"),p=u.evaluate(h,{},t.canonical),f=a.layoutTextSize.evaluate(h,{},t.canonical),d=a.layoutIconSize.evaluate(h,{},t.canonical),y={horizontal:{},vertical:void 0},m=h.text,g=[0,0];if(m){let w=m.toString(),_=i.get(\"text-letter-spacing\").evaluate(h,{},t.canonical)*24,A=xv(w)?_:0,S=i.get(\"text-anchor\").evaluate(h,{},t.canonical),F=ry(r,h,t.canonical);if(!F){let P=i.get(\"text-radial-offset\").evaluate(h,{},t.canonical);g=P?ey(S,[P*24,nu]):i.get(\"text-offset\").evaluate(h,{},t.canonical).map(E=>E*24);}let z=o?\"center\":i.get(\"text-justify\").evaluate(h,{},t.canonical),$=i.get(\"symbol-placement\")===\"point\"?i.get(\"text-max-width\").evaluate(h,{},t.canonical)*24:1/0,B=()=>{t.bucket.allowVerticalPlacement&&Ko(w)&&(y.vertical=Wn(m,t.glyphMap,t.glyphPositions,t.imagePositions,c,$,s,S,\"left\",A,g,2,!0,f,p));};if(!o&&F){let P=new Set();if(z===\"auto\")for(let O=0;O<F.values.length;O+=2)P.add(zc(F.values[O]));else P.add(z);let E=!1;for(let O of P)if(!y.horizontal[O])if(E)y.horizontal[O]=y.horizontal[0];else{let R=Wn(m,t.glyphMap,t.glyphPositions,t.imagePositions,c,$,s,\"center\",O,A,g,1,!1,f,p);R&&(y.horizontal[O]=R,E=R.positionedLines.length===1);}B();}else{z===\"auto\"&&(z=zc(S));let P=Wn(m,t.glyphMap,t.glyphPositions,t.imagePositions,c,$,s,S,z,A,g,1,!1,f,p);P&&(y.horizontal[z]=P),B(),Ko(w)&&o&&l&&(y.vertical=Wn(m,t.glyphMap,t.glyphPositions,t.imagePositions,c,$,s,S,z,A,g,2,!1,f,p));}}let x,b=!1;if(h.icon?.name){let w=t.imageMap[h.icon.name];w&&(x=vb(t.imagePositions[h.icon.name],i.get(\"icon-offset\").evaluate(h,{},t.canonical),i.get(\"icon-anchor\").evaluate(h,{},t.canonical)),b=!!w.sdf,t.bucket.sdfIcons===void 0?t.bucket.sdfIcons=b:t.bucket.sdfIcons!==b&&Mt(\"Style sheet warning: Cannot mix SDF and non-SDF icons in one buffer\"),w.pixelRatio===t.bucket.pixelRatio?i.get(\"icon-rotate\").constantOr(1)!==0&&(t.bucket.iconsNeedLinear=!0):t.bucket.iconsNeedLinear=!0);}let v=iy(y.horizontal)||y.vertical;t.bucket.iconsInText||=v?v.iconsInText:!1,(v||x)&&Vb(t.bucket,h,y,x,t.imageMap,a,f,d,g,b,t.canonical,t.subdivisionGranularity);}t.showCollisionBoxes&&t.bucket.generateCollisionDebugBuffers();}function zc(t){switch(t){case\"right\":case\"top-right\":case\"bottom-right\":return\"right\";case\"left\":case\"top-left\":case\"bottom-left\":return\"left\";}return\"center\";}function Vb(t,e,r,i,n,a,s,o,l,u,h,c){let p=a.textMaxSize.evaluate(e,{});p===void 0&&(p=s);let f=t.layers[0].layout,d=f.get(\"icon-offset\").evaluate(e,{},h),y=iy(r.horizontal),m=s/24,g=t.tilePixelRatio*m,x=t.tilePixelRatio*p/24,b=t.tilePixelRatio*o,v=t.tilePixelRatio*f.get(\"symbol-spacing\"),w=f.get(\"text-padding\")*t.tilePixelRatio,_=Hb(f,e,h,t.tilePixelRatio),A=f.get(\"text-max-angle\")/180*Math.PI,S=f.get(\"text-rotation-alignment\")!==\"viewport\"&&f.get(\"symbol-placement\")!==\"point\",F=f.get(\"icon-rotation-alignment\").constantOr(\"viewport\")===\"map\"&&f.get(\"symbol-placement\")!==\"point\",z=f.get(\"symbol-placement\"),$=v/2,B=f.get(\"icon-text-fit\"),P;i&&B!==\"none\"&&(t.allowVerticalPlacement&&r.vertical&&(P=Tc(i,r.vertical,B,f.get(\"icon-text-fit-padding\"),d,m)),y&&(i=Tc(i,y,B,f.get(\"icon-text-fit-padding\"),d,m)));let E=h?c.line.getGranularityForZoomLevel(h.z):1,O=(R,L)=>{L.x<0||L.x>=8192||L.y<0||L.y>=8192||Rb(t,L,R,r,i,n,P,t.layers[0],t.collisionBoxArray,e.index,e.sourceLayerIndex,t.index,g,[w,w,w,w],S,l,b,_,F,d,e,a,u,h,s);};if(z===\"line\")for(let R of Ab(e.geometry,0,0,mt,mt)){let L=or(R,E),tt=_b(L,v,A,r.vertical||y,i,24,x,t.overscaling,mt);for(let it of tt){let pt=y;(!pt||!$b(t,pt.text,$,it))&&O(L,it);}}else if(z===\"line-center\"){for(let R of e.geometry)if(R.length>1){let L=or(R,E),tt=Db(L,A,r.vertical||y,i,24,x);tt&&O(L,tt);}}else if(e.type===\"Polygon\")for(let R of Ma(e.geometry,0)){let L=Cb(R,16);O(or(R[0],E,!0),new Wr(L.x,L.y,0));}else if(e.type===\"LineString\")for(let R of e.geometry){let L=or(R,E);O(L,new Wr(L[0].x,L[0].y,0));}else if(e.type===\"Point\")for(let R of e.geometry)for(let L of R)O([L],new Wr(L.x,L.y,0));}function Ob(t,e){let r=t.length,i=e?.values;if(i?.length>0)for(let n=0;n<i.length;n+=2){let a=zb[i[n]],s=i[n+1];t.emplaceBack(a,s[0],s[1]);}return[r,t.length];}function Lc(t,e,r,i,n,a,s,o,l,u,h,c,p,f,d,y){let m=kb(e,r,o,n,a,s,i,t.allowVerticalPlacement),g=t.textSizeData,x=null;g.kind===\"source\"?(x=[128*n.layout.get(\"text-size\").evaluate(s,{})],x[0]>32640&&Mt(`${t.layerIds[0]}: Value for \"text-size\" is >= 255. Reduce your \"text-size\".`)):g.kind===\"composite\"&&(x=[128*d.compositeTextSizes[0].evaluate(s,{},y),128*d.compositeTextSizes[1].evaluate(s,{},y)],(x[0]>32640||x[1]>32640)&&Mt(`${t.layerIds[0]}: Value for \"text-size\" is >= 255. Reduce your \"text-size\".`)),t.addSymbols(t.text,m,x,o,a,s,h,e,u.lineStartIndex,u.lineLength,f,y,l);for(let b of c)p[b]=t.text.placedSymbolArray.length-1;return m.length*4;}function iy(t){for(let e in t)return t[e];return null;}function Rb(t,e,r,i,n,a,s,o,l,u,h,c,p,f,d,y,m,g,x,b,v,w,_,A,S){let F=t.addToLineVertexArray(e,r),z=o.layout.get(\"symbol-height-offset\").evaluate(v,{},A);z>t.maxHeightOffset&&(t.maxHeightOffset=z);let $,B,P,E,O=0,R=0,L=0,tt=0,it=-1,pt=-1,st={},ft=(0,To.default)(\"\");if(t.allowVerticalPlacement&&i.vertical){let J=o.layout.get(\"text-rotate\").evaluate(v,{},A)+90,Y=i.vertical;P=new Jn(l,e,u,h,c,Y,p,f,d,J),s&&(E=new Jn(l,e,u,h,c,s,m,g,d,J));}if(n){let J=o.layout.get(\"icon-rotate\").evaluate(v,{}),Y=o.layout.get(\"icon-text-fit\")!==\"none\",C=Bc(n,J,_,Y),lt=s?Bc(s,J,_,Y):void 0;B=new Jn(l,e,u,h,c,n,m,g,!1,J),O=C.length*4;let G=t.iconSizeData,j=null;G.kind===\"source\"?(j=[128*o.layout.get(\"icon-size\").evaluate(v,{})],j[0]>32640&&Mt(`${t.layerIds[0]}: Value for \"icon-size\" is >= 255. Reduce your \"icon-size\".`)):G.kind===\"composite\"&&(j=[128*w.compositeIconSizes[0].evaluate(v,{},A),128*w.compositeIconSizes[1].evaluate(v,{},A)],(j[0]>32640||j[1]>32640)&&Mt(`${t.layerIds[0]}: Value for \"icon-size\" is >= 255. Reduce your \"icon-size\".`)),t.addSymbols(t.icon,C,j,b,x,v,0,e,F.lineStartIndex,F.lineLength,-1,A,z),it=t.icon.placedSymbolArray.length-1,lt&&(R=lt.length*4,t.addSymbols(t.icon,lt,j,b,x,v,2,e,F.lineStartIndex,F.lineLength,-1,A,z),pt=t.icon.placedSymbolArray.length-1);}let jt=Object.keys(i.horizontal);for(let J of jt){let Y=i.horizontal[J];$||=(ft=(0,To.default)(Y.text),new Jn(l,e,u,h,c,Y,p,f,d,o.layout.get(\"text-rotate\").evaluate(v,{},A)));let C=Y.positionedLines.length===1;if(L+=Lc(t,e,Y,a,o,d,v,y,z,F,i.vertical?1:3,C?jt:[J],st,it,w,A),C)break;}i.vertical&&(tt+=Lc(t,e,i.vertical,a,o,d,v,y,z,F,2,[\"vertical\"],st,pt,w,A));let Pe=$?$.boxStartIndex:t.collisionBoxArray.length,pe=$?$.boxEndIndex:t.collisionBoxArray.length,ze=P?P.boxStartIndex:t.collisionBoxArray.length,Wt=P?P.boxEndIndex:t.collisionBoxArray.length,_r=B?B.boxStartIndex:t.collisionBoxArray.length,Ar=B?B.boxEndIndex:t.collisionBoxArray.length,Je=E?E.boxStartIndex:t.collisionBoxArray.length,ui=E?E.boxEndIndex:t.collisionBoxArray.length,Ft=-1,Ae=(J,Y)=>J?.circleDiameter?Math.max(J.circleDiameter,Y):Y;Ft=Ae($,Ft),Ft=Ae(P,Ft),Ft=Ae(B,Ft),Ft=Ae(E,Ft);let Qe=+(Ft>-1);Qe&&(Ft*=S/24),t.glyphOffsetArray.length>=t.maxGlyphs&&Mt(\"Too many glyphs being rendered in a tile. See https://github.com/mapbox/mapbox-gl-js/issues/2907\"),v.sortKey!==void 0&&t.addToSortKeyRanges(t.symbolInstances.length,v.sortKey);let Sr=ry(o,v,A),[Er,N]=Ob(t.textAnchorOffsets,Sr);t.symbolInstances.emplaceBack(e.x,e.y,st.right>=0?st.right:-1,st.center>=0?st.center:-1,st.left>=0?st.left:-1,st.vertical||-1,it,pt,ft,Pe,pe,ze,Wt,_r,Ar,Je,ui,u,L,tt,O,R,Qe,0,p,Ft,Er,N,z);}function $b(t,e,r,i){let n=t.compareText;if(!(e in n))n[e]=[];else{let a=n[e];for(let s=a.length-1;s>=0;s--)if(i.dist(a[s])<r)return!0;}return n[e].push(i),!1;}function Vc(t,e,r){let i=\"never\",n=t.get(e);return n?i=n:t.get(r)&&(i=\"always\"),i;}var Nb=[{name:\"a_fade_opacity\",components:1,type:\"Uint8\",offset:0}];function Qn(t,e,r,i,n,a,s,o,l,u,h,c,p,f){let d=o?Math.min(kc,Math.round(o[0])):0,y=o?Math.min(kc,Math.round(o[1])):0;t.emplaceBack(e,r,Math.round(i*32),Math.round(n*32),a,s,(d<<1)+ +!!l,y,u*16,h*16,c*256,p*256,f);}function Ub(t,e,r){t.emplaceBack(e.x,e.y,r),t.emplaceBack(e.x,e.y,r),t.emplaceBack(e.x,e.y,r),t.emplaceBack(e.x,e.y,r);}function qb(t){for(let e of t.sections)if(Od(e.text))return!0;return!1;}var el=class{constructor(t){this.layoutVertexArray=new Hm(),this.indexArray=new mn(),this.programConfigurations=t,this.segments=new Jt(),this.dynamicLayoutVertexArray=new Km(),this.opacityVertexArray=new Jm(),this.hasVisibleVertices=!1,this.placedSymbolArray=new Of();}isEmpty(){return this.layoutVertexArray.length===0&&this.indexArray.length===0&&this.dynamicLayoutVertexArray.length===0&&this.opacityVertexArray.length===0;}upload(t,e,r,i){this.isEmpty()||(r&&(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,q2.members),this.indexBuffer=t.createIndexBuffer(this.indexArray,e),this.dynamicLayoutVertexBuffer=t.createVertexBuffer(this.dynamicLayoutVertexArray,j2.members,!0),this.opacityVertexBuffer=t.createVertexBuffer(this.opacityVertexArray,Nb,!0),this.opacityVertexBuffer.itemSize=1),(r||i)&&this.programConfigurations.upload(t));}destroy(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy(),this.dynamicLayoutVertexBuffer.destroy(),this.opacityVertexBuffer.destroy());}};I(\"SymbolBuffers\",el);var rl=class{constructor(t,e,r){this.layoutVertexArray=new t(),this.layoutAttributes=e,this.indexArray=new r(),this.segments=new Jt(),this.collisionVertexArray=new Qm();}upload(t){this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,this.layoutAttributes),this.indexBuffer=t.createIndexBuffer(this.indexArray),this.collisionVertexBuffer=t.createVertexBuffer(this.collisionVertexArray,G2.members,!0);}destroy(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.segments.destroy(),this.collisionVertexBuffer.destroy());}};I(\"CollisionBuffers\",rl);var ny=class{constructor(t){this.collisionBoxArray=t.collisionBoxArray,this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map(s=>s.id),this.index=t.index,this.pixelRatio=t.pixelRatio,this.sourceLayerIndex=t.sourceLayerIndex,this.hasDependencies=!0,this.hasRTLText=!1,this.maxHeightOffset=0,this.sortKeyRanges=[],this.collisionCircleArray=[],this.maxGlyphs=65535;let e=this.layers[0]._unevaluatedLayout._values;this.textSizeData=Ic(this.zoom,e[\"text-size\"]),this.iconSizeData=Ic(this.zoom,e[\"icon-size\"]);let r=this.layers[0].layout,i=r.get(\"symbol-sort-key\"),n=r.get(\"symbol-z-order\");this.canOverlap=Vc(r,\"text-overlap\",\"text-allow-overlap\")!==\"never\"||Vc(r,\"icon-overlap\",\"icon-allow-overlap\")!==\"never\"||r.get(\"text-ignore-placement\")||r.get(\"icon-ignore-placement\"),this.sortFeaturesByKey=n!==\"viewport-y\"&&!i.isConstant();let a=n===\"viewport-y\"||n===\"auto\"&&!this.sortFeaturesByKey;this.sortFeaturesByY=a&&this.canOverlap,r.get(\"symbol-placement\")===\"point\"&&(this.writingModes=r.get(\"text-writing-mode\").map(s=>Ud[s])),this.stateDependentLayerIds=this.layers.filter(s=>s.isStateDependent()).map(s=>s.id),this.sourceID=t.sourceID;}createArrays(){this.text=new el(new dr(this.layers,this.zoom,t=>t.startsWith(\"text\"))),this.icon=new el(new dr(this.layers,this.zoom,t=>t.startsWith(\"icon\"))),this.glyphOffsetArray=new Nf(),this.lineVertexArray=new Uf(),this.symbolInstances=new $f(),this.textAnchorOffsets=new jf();}calculateGlyphDependencies(t,e,r,i,n){let a=(i||this.allowVerticalPlacement)&&n,s=Ql.fromFeature(t,r),o=s.graphemes();for(let l=0;l<o.length;l++){let u=s.getSection(l);if(\"imageName\"in u)continue;let h=e[u.fontStack]||={},c=o[l];zd(c)&&(h[c]=!0);for(let p of c){if(h[p]=!0,!a)continue;let f=Nr[p];f&&(h[f]=!0);}}}populate(t,e,r){let i=this.layers[0],n=i.layout,a=n.get(\"text-font\"),s=n.get(\"text-field\"),o=n.get(\"icon-image\"),l=(s.value.kind!==\"constant\"||s.value.value instanceof Me&&!s.value.value.isEmpty()||s.value.value.toString().length>0)&&(a.value.kind!==\"constant\"||a.value.value.length>0),u=o.value.kind!==\"constant\"||!!o.value.value||Object.keys(o.parameters).length>0,h=n.get(\"symbol-sort-key\");if(this.features=[],!l&&!u)return;let c=e.iconDependencies,p=e.glyphDependencies,f=e.availableImages,d=new at(this.zoom);for(let{feature:y,id:m,index:g,sourceLayerIndex:x}of t){let b=i._featureFilter.needGeometry,v=si(y,b);if(!i._featureFilter.filter(d,v,r))continue;b||(v.geometry=vr(y));let w;if(l){let F=i.getValueAndResolveTokens(\"text-field\",v,r,f),z=Me.factory(F);this.hasRTLText||=qb(z),w=dv(z,i,v);}let _;if(u){let F=i.getValueAndResolveTokens(\"icon-image\",v,r,f);_=F instanceof we?F:we.fromString(F);}if(!w&&!_)continue;let A=this.sortFeaturesByKey?h.evaluate(v,{},r):void 0,S={id:m,text:w,icon:_,index:g,sourceLayerIndex:x,geometry:v.geometry,properties:y.properties,type:gn.types[y.type],sortKey:A};if(this.features.push(S),_&&(c[_.name]=!0),w){let F=a.evaluate(v,{},r).join(\",\"),z=n.get(\"text-rotation-alignment\")!==\"viewport\"&&n.get(\"symbol-placement\")!==\"point\";this.allowVerticalPlacement=this.writingModes?.includes(2);let $=Ko(w.toString());this.calculateGlyphDependencies(w,p,F,z,$);for(let B of w.sections)B.image&&(c[B.image.name]=!0);}}n.get(\"symbol-placement\")===\"line\"&&(this.features=mv(this.features)),this.sortFeaturesByKey&&this.features.sort((y,m)=>y.sortKey-m.sortKey);}update(t,e,r){this.stateDependentLayers.length&&(this.text.programConfigurations.updatePaintArrays(t,e,this.layers,{imagePositions:r}),this.icon.programConfigurations.updatePaintArrays(t,e,this.layers,{imagePositions:r}));}addFeatures({options:t,canonical:e,glyphMap:r,glyphPositions:i,iconMap:n,iconPositions:a,showCollisionBoxes:s}){Lb({bucket:this,glyphMap:r,glyphPositions:i,imageMap:n,imagePositions:a,showCollisionBoxes:s,canonical:e,subdivisionGranularity:t.subdivisionGranularity});}isEmpty(){return this.symbolInstances.length===0;}uploadPending(){return!this.uploaded||this.text.programConfigurations.needsUpload||this.icon.programConfigurations.needsUpload;}upload(t){!this.uploaded&&this.hasDebugData()&&(this.textCollisionBox.upload(t),this.iconCollisionBox.upload(t)),this.text.upload(t,this.sortFeaturesByY,!this.uploaded,this.text.programConfigurations.needsUpload),this.icon.upload(t,this.sortFeaturesByY,!this.uploaded,this.icon.programConfigurations.needsUpload),this.uploaded=!0;}destroyDebugData(){this.textCollisionBox.destroy(),this.iconCollisionBox.destroy();}destroy(){this.text.destroy(),this.icon.destroy(),this.hasDebugData()&&this.destroyDebugData();}addToLineVertexArray(t,e){let r=this.lineVertexArray.length;if(t.segment!==void 0){let i=t.dist(e[t.segment+1]),n=t.dist(e[t.segment]),a={};for(let s=t.segment+1;s<e.length;s++)a[s]={x:e[s].x,y:e[s].y,tileUnitDistanceFromAnchor:i},s<e.length-1&&(i+=e[s+1].dist(e[s]));for(let s=t.segment||0;s>=0;s--)a[s]={x:e[s].x,y:e[s].y,tileUnitDistanceFromAnchor:n},s>0&&(n+=e[s-1].dist(e[s]));for(let s=0;s<e.length;s++){let o=a[s];this.lineVertexArray.emplaceBack(o.x,o.y,o.tileUnitDistanceFromAnchor);}}return{lineStartIndex:r,lineLength:this.lineVertexArray.length-r};}addSymbols(t,e,r,i,n,a,s,o,l,u,h,c,p){let f=t.indexArray,d=t.layoutVertexArray,y=t.segments.prepareSegment(4*e.length,d,f,this.canOverlap?a.sortKey:void 0),m=this.glyphOffsetArray.length,g=y.vertexLength,x=this.allowVerticalPlacement&&s===2?Math.PI/2:0,b=a.text&&a.text.sections;for(let v=0;v<e.length;v++){let{tl:w,tr:_,bl:A,br:S,tex:F,pixelOffsetTL:z,pixelOffsetBR:$,minFontScaleX:B,minFontScaleY:P,glyphOffset:E,isSDF:O,sectionIndex:R}=e[v],L=y.vertexLength,tt=E[1];Qn(d,o.x,o.y,w.x,tt+w.y,F.x,F.y,r,O,z.x,z.y,B,P,p),Qn(d,o.x,o.y,_.x,tt+_.y,F.x+F.w,F.y,r,O,$.x,z.y,B,P,p),Qn(d,o.x,o.y,A.x,tt+A.y,F.x,F.y+F.h,r,O,z.x,$.y,B,P,p),Qn(d,o.x,o.y,S.x,tt+S.y,F.x+F.w,F.y+F.h,r,O,$.x,$.y,B,P,p),Ub(t.dynamicLayoutVertexArray,o,x),f.emplaceBack(L,L+2,L+1),f.emplaceBack(L+1,L+2,L+3),y.vertexLength+=4,y.primitiveLength+=2,this.glyphOffsetArray.emplaceBack(E[0]),(v===e.length-1||R!==e[v+1].sectionIndex)&&t.programConfigurations.populatePaintArrays(d.length,a,a.index,{imagePositions:{},canonical:c,formattedSection:b?.[R]});}t.placedSymbolArray.emplaceBack(o.x,o.y,m,this.glyphOffsetArray.length-m,g,l,u,o.segment,r?r[0]:0,r?r[1]:0,i[0],i[1],s,0,!1,0,h,p);}_addCollisionDebugVertex(t,e,r,i,n,a){return e.emplaceBack(0,0),t.emplaceBack(r.x,r.y,i,n,Math.round(a.x),Math.round(a.y));}addCollisionDebugVertices(t,e,r,i,n,a,s){let o=n.segments.prepareSegment(4,n.layoutVertexArray,n.indexArray),l=o.vertexLength,u=n.layoutVertexArray,h=n.collisionVertexArray,c=s.anchorX,p=s.anchorY;this._addCollisionDebugVertex(u,h,a,c,p,new M(t,e)),this._addCollisionDebugVertex(u,h,a,c,p,new M(r,e)),this._addCollisionDebugVertex(u,h,a,c,p,new M(r,i)),this._addCollisionDebugVertex(u,h,a,c,p,new M(t,i)),o.vertexLength+=4;let f=n.indexArray;f.emplaceBack(l,l+1),f.emplaceBack(l+1,l+2),f.emplaceBack(l+2,l+3),f.emplaceBack(l+3,l),o.primitiveLength+=4;}addDebugCollisionBoxes(t,e,r,i){for(let n=t;n<e;n++){let a=this.collisionBoxArray.get(n),s=a.x1,o=a.y1,l=a.x2,u=a.y2;this.addCollisionDebugVertices(s,o,l,u,i?this.textCollisionBox:this.iconCollisionBox,a.anchorPoint,r);}}generateCollisionDebugBuffers(){this.hasDebugData()&&this.destroyDebugData(),this.textCollisionBox=new rl(Nh,cc.members,Eo),this.iconCollisionBox=new rl(Nh,cc.members,Eo);for(let t=0;t<this.symbolInstances.length;t++){let e=this.symbolInstances.get(t);this.addDebugCollisionBoxes(e.textBoxStartIndex,e.textBoxEndIndex,e,!0),this.addDebugCollisionBoxes(e.verticalTextBoxStartIndex,e.verticalTextBoxEndIndex,e,!0),this.addDebugCollisionBoxes(e.iconBoxStartIndex,e.iconBoxEndIndex,e,!1),this.addDebugCollisionBoxes(e.verticalIconBoxStartIndex,e.verticalIconBoxEndIndex,e,!1);}}_deserializeCollisionBoxesForSymbol(t,e,r,i,n,a,s,o,l){let u={};for(let h=e;h<r;h++){let c=t.get(h);u.textBox={x1:c.x1,y1:c.y1,x2:c.x2,y2:c.y2,anchorPointX:c.anchorPointX,anchorPointY:c.anchorPointY},u.textFeatureIndex=c.featureIndex;break;}for(let h=i;h<n;h++){let c=t.get(h);u.verticalTextBox={x1:c.x1,y1:c.y1,x2:c.x2,y2:c.y2,anchorPointX:c.anchorPointX,anchorPointY:c.anchorPointY},u.verticalTextFeatureIndex=c.featureIndex;break;}for(let h=a;h<s;h++){let c=t.get(h);u.iconBox={x1:c.x1,y1:c.y1,x2:c.x2,y2:c.y2,anchorPointX:c.anchorPointX,anchorPointY:c.anchorPointY},u.iconFeatureIndex=c.featureIndex;break;}for(let h=o;h<l;h++){let c=t.get(h);u.verticalIconBox={x1:c.x1,y1:c.y1,x2:c.x2,y2:c.y2,anchorPointX:c.anchorPointX,anchorPointY:c.anchorPointY},u.verticalIconFeatureIndex=c.featureIndex;break;}return u;}deserializeCollisionBoxes(t){this.collisionArrays=[];for(let e=0;e<this.symbolInstances.length;e++){let r=this.symbolInstances.get(e);this.collisionArrays.push(this._deserializeCollisionBoxesForSymbol(t,r.textBoxStartIndex,r.textBoxEndIndex,r.verticalTextBoxStartIndex,r.verticalTextBoxEndIndex,r.iconBoxStartIndex,r.iconBoxEndIndex,r.verticalIconBoxStartIndex,r.verticalIconBoxEndIndex));}}hasTextData(){return this.text.segments.get().length>0;}hasIconData(){return this.icon.segments.get().length>0;}hasDebugData(){return this.textCollisionBox&&this.iconCollisionBox;}hasTextCollisionBoxData(){return this.hasDebugData()&&this.textCollisionBox.segments.get().length>0;}hasIconCollisionBoxData(){return this.hasDebugData()&&this.iconCollisionBox.segments.get().length>0;}addIndicesForPlacedSymbol(t,e){let r=t.placedSymbolArray.get(e),i=r.vertexStartIndex+r.numGlyphs*4;for(let n=r.vertexStartIndex;n<i;n+=4)t.indexArray.emplaceBack(n,n+2,n+1),t.indexArray.emplaceBack(n+1,n+2,n+3);}getSortedSymbolIndexes(t){if(this.sortedAngle===t&&this.symbolInstanceIndexes!==void 0)return this.symbolInstanceIndexes;let e=Math.sin(t),r=Math.cos(t),i=[],n=[],a=[];for(let s=0;s<this.symbolInstances.length;++s){a.push(s);let o=this.symbolInstances.get(s);i.push(Math.round(e*o.anchorX+r*o.anchorY)|0),n.push(o.featureIndex);}return a.sort((s,o)=>i[s]-i[o]||n[o]-n[s]),a;}addToSortKeyRanges(t,e){let r=this.sortKeyRanges[this.sortKeyRanges.length-1];r?.sortKey===e?r.symbolInstanceEnd=t+1:this.sortKeyRanges.push({sortKey:e,symbolInstanceStart:t,symbolInstanceEnd:t+1});}sortFeatures(t){if(this.sortFeaturesByY&&this.sortedAngle!==t&&!(this.text.segments.get().length>1||this.icon.segments.get().length>1)){this.symbolInstanceIndexes=this.getSortedSymbolIndexes(t),this.sortedAngle=t,this.text.indexArray.clear(),this.icon.indexArray.clear(),this.featureSortOrder=[];for(let e of this.symbolInstanceIndexes){let r=this.symbolInstances.get(e);this.featureSortOrder.push(r.featureIndex);let i=[r.rightJustifiedTextSymbolIndex,r.centerJustifiedTextSymbolIndex,r.leftJustifiedTextSymbolIndex];for(let n=0;n<i.length;n++){let a=i[n];a>=0&&i.indexOf(a)===n&&this.addIndicesForPlacedSymbol(this.text,a);}r.verticalPlacedTextSymbolIndex>=0&&this.addIndicesForPlacedSymbol(this.text,r.verticalPlacedTextSymbolIndex),r.placedIconSymbolIndex>=0&&this.addIndicesForPlacedSymbol(this.icon,r.placedIconSymbolIndex),r.verticalPlacedIconSymbolIndex>=0&&this.addIndicesForPlacedSymbol(this.icon,r.verticalPlacedIconSymbolIndex);}this.text.indexBuffer&&this.text.indexBuffer.updateData(this.text.indexArray),this.icon.indexBuffer&&this.icon.indexBuffer.updateData(this.icon.indexArray);}}};I(\"SymbolBucket\",ny,{omit:[\"layers\",\"collisionBoxArray\",\"features\",\"compareText\"]});function jb(t,e){return e.replace(/{([^{}]+)}/g,(r,i)=>t&&i in t?String(t[i]):\"\");}var Gb,Xb=()=>Gb||=new qt({\"symbol-placement\":new V(D.layout_symbol[\"symbol-placement\"],\"symbol-placement\"),\"symbol-spacing\":new V(D.layout_symbol[\"symbol-spacing\"],\"symbol-spacing\"),\"symbol-avoid-edges\":new V(D.layout_symbol[\"symbol-avoid-edges\"],\"symbol-avoid-edges\"),\"symbol-sort-key\":new U(D.layout_symbol[\"symbol-sort-key\"],\"symbol-sort-key\"),\"symbol-z-order\":new V(D.layout_symbol[\"symbol-z-order\"],\"symbol-z-order\"),\"icon-allow-overlap\":new V(D.layout_symbol[\"icon-allow-overlap\"],\"icon-allow-overlap\"),\"icon-overlap\":new V(D.layout_symbol[\"icon-overlap\"],\"icon-overlap\"),\"icon-ignore-placement\":new V(D.layout_symbol[\"icon-ignore-placement\"],\"icon-ignore-placement\"),\"icon-optional\":new V(D.layout_symbol[\"icon-optional\"],\"icon-optional\"),\"icon-rotation-alignment\":new U(D.layout_symbol[\"icon-rotation-alignment\"],\"icon-rotation-alignment\"),\"icon-size\":new U(D.layout_symbol[\"icon-size\"],\"icon-size\"),\"icon-text-fit\":new V(D.layout_symbol[\"icon-text-fit\"],\"icon-text-fit\"),\"icon-text-fit-padding\":new V(D.layout_symbol[\"icon-text-fit-padding\"],\"icon-text-fit-padding\"),\"icon-image\":new U(D.layout_symbol[\"icon-image\"],\"icon-image\"),\"icon-rotate\":new U(D.layout_symbol[\"icon-rotate\"],\"icon-rotate\"),\"icon-padding\":new U(D.layout_symbol[\"icon-padding\"],\"icon-padding\"),\"icon-keep-upright\":new V(D.layout_symbol[\"icon-keep-upright\"],\"icon-keep-upright\"),\"icon-offset\":new U(D.layout_symbol[\"icon-offset\"],\"icon-offset\"),\"icon-anchor\":new U(D.layout_symbol[\"icon-anchor\"],\"icon-anchor\"),\"icon-pitch-alignment\":new V(D.layout_symbol[\"icon-pitch-alignment\"],\"icon-pitch-alignment\"),\"text-pitch-alignment\":new V(D.layout_symbol[\"text-pitch-alignment\"],\"text-pitch-alignment\"),\"text-rotation-alignment\":new V(D.layout_symbol[\"text-rotation-alignment\"],\"text-rotation-alignment\"),\"text-field\":new U(D.layout_symbol[\"text-field\"],\"text-field\"),\"text-font\":new U(D.layout_symbol[\"text-font\"],\"text-font\"),\"text-size\":new U(D.layout_symbol[\"text-size\"],\"text-size\"),\"text-max-width\":new U(D.layout_symbol[\"text-max-width\"],\"text-max-width\"),\"text-line-height\":new V(D.layout_symbol[\"text-line-height\"],\"text-line-height\"),\"text-letter-spacing\":new U(D.layout_symbol[\"text-letter-spacing\"],\"text-letter-spacing\"),\"text-justify\":new U(D.layout_symbol[\"text-justify\"],\"text-justify\"),\"text-radial-offset\":new U(D.layout_symbol[\"text-radial-offset\"],\"text-radial-offset\"),\"text-variable-anchor\":new V(D.layout_symbol[\"text-variable-anchor\"],\"text-variable-anchor\"),\"text-variable-anchor-offset\":new U(D.layout_symbol[\"text-variable-anchor-offset\"],\"text-variable-anchor-offset\"),\"text-anchor\":new U(D.layout_symbol[\"text-anchor\"],\"text-anchor\"),\"text-max-angle\":new V(D.layout_symbol[\"text-max-angle\"],\"text-max-angle\"),\"text-writing-mode\":new V(D.layout_symbol[\"text-writing-mode\"],\"text-writing-mode\"),\"text-rotate\":new U(D.layout_symbol[\"text-rotate\"],\"text-rotate\"),\"text-padding\":new V(D.layout_symbol[\"text-padding\"],\"text-padding\"),\"text-keep-upright\":new V(D.layout_symbol[\"text-keep-upright\"],\"text-keep-upright\"),\"text-transform\":new U(D.layout_symbol[\"text-transform\"],\"text-transform\"),\"text-offset\":new U(D.layout_symbol[\"text-offset\"],\"text-offset\"),\"text-allow-overlap\":new V(D.layout_symbol[\"text-allow-overlap\"],\"text-allow-overlap\"),\"text-overlap\":new V(D.layout_symbol[\"text-overlap\"],\"text-overlap\"),\"text-ignore-placement\":new V(D.layout_symbol[\"text-ignore-placement\"],\"text-ignore-placement\"),\"text-optional\":new V(D.layout_symbol[\"text-optional\"],\"text-optional\"),\"symbol-height-offset\":new U(D.layout_symbol[\"symbol-height-offset\"],\"symbol-height-offset\"),\"symbol-height-anchor\":new V(D.layout_symbol[\"symbol-height-anchor\"],\"symbol-height-anchor\")}),Yb,Wb=()=>Yb||=new qt({\"icon-opacity\":new U(D.paint_symbol[\"icon-opacity\"],\"icon-opacity\"),\"icon-color\":new U(D.paint_symbol[\"icon-color\"],\"icon-color\"),\"icon-halo-color\":new U(D.paint_symbol[\"icon-halo-color\"],\"icon-halo-color\"),\"icon-halo-width\":new U(D.paint_symbol[\"icon-halo-width\"],\"icon-halo-width\"),\"icon-halo-blur\":new U(D.paint_symbol[\"icon-halo-blur\"],\"icon-halo-blur\"),\"icon-translate\":new V(D.paint_symbol[\"icon-translate\"],\"icon-translate\"),\"icon-translate-anchor\":new V(D.paint_symbol[\"icon-translate-anchor\"],\"icon-translate-anchor\"),\"text-opacity\":new U(D.paint_symbol[\"text-opacity\"],\"text-opacity\"),\"text-color\":new U(D.paint_symbol[\"text-color\"],\"text-color\",{runtimeType:le,getOverride:t=>t.textColor,hasOverride:t=>!!t.textColor}),\"text-halo-color\":new U(D.paint_symbol[\"text-halo-color\"],\"text-halo-color\"),\"text-halo-width\":new U(D.paint_symbol[\"text-halo-width\"],\"text-halo-width\"),\"text-halo-blur\":new U(D.paint_symbol[\"text-halo-blur\"],\"text-halo-blur\"),\"text-translate\":new V(D.paint_symbol[\"text-translate\"],\"text-translate\"),\"text-translate-anchor\":new V(D.paint_symbol[\"text-translate-anchor\"],\"text-translate-anchor\")}),Ns={get paint(){return Wb();},get layout(){return Xb();}},ay=class{constructor(t){if(t.property.overrides===void 0)throw Error(\"overrides must be provided to instantiate FormatSectionOverride class\");this.type=t.property.overrides?t.property.overrides.runtimeType:un,this.defaultValue=t;}evaluate(t){if(t.formattedSection){let e=this.defaultValue.property.overrides;if(e?.hasOverride(t.formattedSection))return e.getOverride(t.formattedSection);}return t.feature&&t.featureState?this.defaultValue.evaluate(t.feature,t.featureState):this.defaultValue.property.specification.default;}eachChild(t){if(!this.defaultValue.isConstant()){let e=this.defaultValue.value;t(e._styleExpression.expression);}}outputDefined(){return!1;}serialize(){return null;}};I(\"FormatSectionOverride\",ay,{omit:[\"defaultValue\"]});var Zb=class il extends ce{constructor(e,r){super(e,Ns,r);}recalculate(e,r){super.recalculate(e,r);let i=this.layout.get(\"icon-rotation-alignment\");if((i.value.kind!==\"constant\"||i.value.value===\"auto\")&&(this.layout._values[\"icon-rotation-alignment\"]=new ie(i.property,{kind:\"constant\",value:this.layout.get(\"symbol-placement\")===\"point\"?\"viewport\":\"map\"},i.parameters)),this.layout.get(\"text-rotation-alignment\")===\"auto\"&&(this.layout.get(\"symbol-placement\")===\"point\"?this.layout._values[\"text-rotation-alignment\"]=\"viewport\":this.layout._values[\"text-rotation-alignment\"]=\"map\"),this.layout.get(\"text-pitch-alignment\")===\"auto\"&&(this.layout._values[\"text-pitch-alignment\"]=this.layout.get(\"text-rotation-alignment\")===\"map\"?\"map\":\"viewport\"),this.layout.get(\"icon-pitch-alignment\")===\"auto\"&&(this.layout._values[\"icon-pitch-alignment\"]=this.layout.get(\"icon-rotation-alignment\").constantOr(\"viewport\")),this.layout.get(\"symbol-placement\")===\"point\"){let n=this.layout.get(\"text-writing-mode\");if(n){let a=[];for(let s of n)a.includes(s)||a.push(s);this.layout._values[\"text-writing-mode\"]=a;}else this.layout._values[\"text-writing-mode\"]=[\"horizontal\"];}this._setPaintOverrides();}getValueAndResolveTokens(e,r,i,n){let a=this.layout.get(e).evaluate(r,{},i,n),s=this._unevaluatedLayout._values[e];return!s.isDataDriven()&&!Va(s.value)&&a?jb(r.properties,a):a;}createBucket(e){return new ny(e);}queryRadius(){return 0;}queryIntersectsFeature(){throw Error(\"Should take a different path in FeatureIndex\");}_setPaintOverrides(){for(let e of Ns.paint.overridableProperties){if(!il.hasPaintOverride(this.layout,e))continue;let r=this.paint.get(e),i=new El(new ay(r),`layers[${this.id}].paint.${r.property.name}`,r.property.specification),n=null;n=r.value.kind===\"constant\"||r.value.kind===\"source\"?new Qi(\"source\",i):new da(\"composite\",i,r.value.zoomStops),this.paint._values[e]=new ie(r.property,n,r.parameters);}}_handleOverridablePaintPropertyUpdate(e,r,i){return!this.layout||r.isDataDriven()||i.isDataDriven()?!1:il.hasPaintOverride(this.layout,e);}static hasPaintOverride(e,r){let i=e.get(\"text-field\"),n=Ns.paint.properties[r],a=!1,s=o=>{for(let l of o)if(n.overrides?.hasOverride(l)){a=!0;return;}};if(i.value.kind===\"constant\"&&i.value.value instanceof Me)s(i.value.value.sections);else if(i.value.kind===\"source\"||i.value.kind===\"composite\"){let o=u=>{if(!a)if(u instanceof Jr&&_t(u.value)===hn){let h=u.value;s(h.sections);}else u instanceof Sp?s(u.sections):u.eachChild(o);},l=i.value;l._styleExpression&&o(l._styleExpression.expression);}return a;}};function Hb(t,e,r,i=1){let n=t.get(\"icon-padding\").evaluate(e,{},r)?.values;return[n[0]*i,n[1]*i,n[2]*i,n[3]*i];}var Kb,Jb=()=>Kb||=new qt({\"background-color\":new V(D.paint_background[\"background-color\"],\"background-color\"),\"background-pattern\":new zf(D.paint_background[\"background-pattern\"],\"background-pattern\"),\"background-opacity\":new V(D.paint_background[\"background-opacity\"],\"background-opacity\")}),Qb={get paint(){return Jb();}};var tw=class extends ce{constructor(t,e){super(t,Qb,e);}};var ew=class extends ce{constructor(t,e){super(t,{},e),this.onAdd=r=>{this.implementation.onAdd&&this.implementation.onAdd(r,r.painter.context.gl);},this.onRemove=r=>{this.implementation.onRemove&&this.implementation.onRemove(r,r.painter.context.gl);},this.implementation=t;}is3D(){return this.implementation.renderingMode===\"3d\";}hasOffscreenPass(){return this.implementation.prerender!==void 0;}recalculate(){}updateTransitions(){}hasTransition(){return!1;}serialize(){throw Error(\"Custom layers cannot be serialized\");}};function sy(t,e){if(t.type===\"custom\")return new ew(t,e);switch(t.type){case\"background\":return new tw(t,e);case\"circle\":return new Tg(t,e);case\"color-relief\":return new Ug(t,e);case\"fill\":return new Dx(t,e);case\"fill-extrusion\":return new Yx(t,e);case\"heatmap\":return new Pg(t,e);case\"hillshade\":return new Og(t,e);case\"line\":return new U2(t,e);case\"raster\":return new Nm(t,e);case\"symbol\":return new Zb(t,e);}}var rw=class{constructor(t){this._methodToThrottle=t,this._triggered=!1,this._channel=new MessageChannel(),this._channel.port2.onmessage=()=>{this._triggered=!1,this._methodToThrottle();};}trigger(){this._triggered||(this._triggered=!0,this._channel?.port1.postMessage(!0));}remove(){delete this._channel,this._methodToThrottle=()=>{};}},iw={once:!0},oy=class{constructor(t,e){this.target=t,this.mapId=e,this.resolveRejects={},this.tasks={},this.taskQueue=[],this.abortControllers={},this.messageHandlers={},this.invoker=new rw(()=>this.process()),this.subscription=sh(this.target,\"message\",r=>this.receive(r),!1),this.globalScope=cr(self)?t:window;}registerMessageHandler(t,e){this.messageHandlers[t]=e;}unregisterMessageHandler(t){delete this.messageHandlers[t];}sendAsync(t,e){return new Promise((r,i)=>{let n=Math.round(Math.random()*1e18).toString(36).substring(0,10),a=e?sh(e.signal,\"abort\",()=>{a?.unsubscribe(),delete this.resolveRejects[n];let l={id:n,type:\"<cancel>\",origin:location.origin,targetMapId:t.targetMapId,sourceMapId:this.mapId};this.target.postMessage(l),i(new hl(e.signal.reason));},iw):null;this.resolveRejects[n]={resolve:l=>{a?.unsubscribe(),r(l);},reject:l=>{a?.unsubscribe(),i(l);}};let s=[],o={...t,id:n,sourceMapId:this.mapId,origin:location.origin,data:Ui(t.data,s)};this.target.postMessage(o,{transfer:s});});}receive(t){let e=t.data,r=e.id,i=[\"file://\",\"resource://android\",\"null\"],n=[e.origin,location.origin],a=e.origin===location.origin,s=n.some(o=>i.includes(o));if((a||s)&&!(e.targetMapId&&this.mapId!==e.targetMapId)){if(e.type===\"<cancel>\"){delete this.tasks[r];let o=this.abortControllers[r];delete this.abortControllers[r],o&&o.abort();return;}if(cr(self)||e.mustQueue){this.tasks[r]=e,this.taskQueue.push(r),this.invoker.trigger();return;}this.processTask(r,e);}}process(){if(this.taskQueue.length===0)return;let t=this.taskQueue.shift(),e=this.tasks[t];delete this.tasks[t],this.taskQueue.length>0&&this.invoker.trigger(),e&&this.processTask(t,e);}async processTask(t,e){if(e.type===\"<response>\"){let n=this.resolveRejects[t];if(delete this.resolveRejects[t],!n)return;e.error?n.reject(Xi(qi(e.error))):n.resolve(qi(e.data));return;}if(!this.messageHandlers[e.type]){this.completeTask(t,null,null);return;}let r=qi(e.data),i=new AbortController();this.abortControllers[t]=i;try{let n=await this.messageHandlers[e.type](e.sourceMapId,r,i);this.completeTask(t,null,n);}catch(n){this.completeTask(t,Xi(n));}}completeTask(t,e,r){let i=[];delete this.abortControllers[t];let n={id:t,type:\"<response>\",sourceMapId:this.mapId,origin:location.origin,error:e?Ui(e):null,data:Ui(r,i)};this.target.postMessage(n,{transfer:i});}remove(){this.invoker.remove(),this.subscription.unsubscribe();}};function nw(t,e,r){return!(t<0||t>25||r<0||r>=2**t||e<0||e>=2**t);}var ly=class{constructor(t,e,r){if(!nw(t,e,r))throw Error(`x=${e}, y=${r}, z=${t} outside of bounds. 0<=x<${2**t}, 0<=y<${2**t} 0<=z<=25 `);this.z=t,this.x=e,this.y=r,this.key=Gi(0,t,t,e,r);}equals(t){return this.z===t.z&&this.x===t.x&&this.y===t.y;}url(t,e,r){let i=sw(this.x,this.y,this.z),n=ow(this.z,this.x,this.y);return t[(this.x+this.y)%t.length].replace(/{prefix}/g,(this.x%16).toString(16)+(this.y%16).toString(16)).replace(/{z}/g,String(this.z)).replace(/{x}/g,String(this.x)).replace(/{y}/g,String(r===\"tms\"?2**this.z-this.y-1:this.y)).replace(/{ratio}/g,e>1?\"@2x\":\"\").replace(/{quadkey}/g,n).replace(/{bbox-epsg-3857}/g,i);}isChildOf(t){let e=this.z-t.z;return e>0&&t.x===this.x>>e&&t.y===this.y>>e;}getTilePoint(t){let e=2**this.z;return new M((t.x*e-this.x)*mt,(t.y*e-this.y)*mt);}toString(){return`${this.z}/${this.x}/${this.y}`;}},aw=class{constructor(t,e){this.wrap=t,this.canonical=e,this.key=Gi(t,e.z,e.z,e.x,e.y);}},au=class ee{constructor(e,r,i,n,a){if(this.terrainRttPosMatrix32f=null,e<i)throw Error(`overscaledZ should be >= z; overscaledZ = ${e}; z = ${i}`);this.overscaledZ=e,this.wrap=r,this.canonical=new ly(i,+n,+a),this.key=Gi(r,e,i,n,a);}clone(){return new ee(this.overscaledZ,this.wrap,this.canonical.z,this.canonical.x,this.canonical.y);}equals(e){return this.overscaledZ===e.overscaledZ&&this.wrap===e.wrap&&this.canonical.equals(e.canonical);}scaledTo(e){if(e>this.overscaledZ)throw Error(`targetZ > this.overscaledZ; targetZ = ${e}; overscaledZ = ${this.overscaledZ}`);let r=this.canonical.z-e;return e>this.canonical.z?new ee(e,this.wrap,this.canonical.z,this.canonical.x,this.canonical.y):new ee(e,this.wrap,e,this.canonical.x>>r,this.canonical.y>>r);}isOverscaled(){return this.overscaledZ>this.canonical.z;}calculateScaledKey(e,r){if(e>this.overscaledZ)throw Error(`targetZ > this.overscaledZ; targetZ = ${e}; overscaledZ = ${this.overscaledZ}`);let i=this.canonical.z-e;return e>this.canonical.z?Gi(this.wrap*+r,e,this.canonical.z,this.canonical.x,this.canonical.y):Gi(this.wrap*+r,e,e,this.canonical.x>>i,this.canonical.y>>i);}isChildOf(e){if(e.wrap!==this.wrap||this.overscaledZ-e.overscaledZ<=0)return!1;if(e.overscaledZ===0)return this.overscaledZ>0;let r=this.canonical.z-e.canonical.z;return r<0?!1:e.canonical.x===this.canonical.x>>r&&e.canonical.y===this.canonical.y>>r;}children(e){if(this.overscaledZ>=e)return[new ee(this.overscaledZ+1,this.wrap,this.canonical.z,this.canonical.x,this.canonical.y)];let r=this.canonical.z+1,i=this.canonical.x*2,n=this.canonical.y*2;return[new ee(r,this.wrap,r,i,n),new ee(r,this.wrap,r,i+1,n),new ee(r,this.wrap,r,i,n+1),new ee(r,this.wrap,r,i+1,n+1)];}isLessThan(e){return this.wrap<e.wrap?!0:this.wrap>e.wrap?!1:this.overscaledZ<e.overscaledZ?!0:this.overscaledZ>e.overscaledZ?!1:this.canonical.x<e.canonical.x?!0:this.canonical.x>e.canonical.x?!1:this.canonical.y<e.canonical.y;}wrapped(){return new ee(this.overscaledZ,0,this.canonical.z,this.canonical.x,this.canonical.y);}unwrapTo(e){return new ee(this.overscaledZ,e,this.canonical.z,this.canonical.x,this.canonical.y);}overscaleFactor(){return 2**(this.overscaledZ-this.canonical.z);}toUnwrapped(){return new aw(this.wrap,this.canonical);}toString(){return`${this.overscaledZ}/${this.canonical.x}/${this.canonical.y}`;}getTilePoint(e){return this.canonical.getTilePoint(new ql(e.x-this.wrap,e.y));}normalizeCoordinates(e,r,i=mt){if(e>=0&&e<i&&r>=0&&r<i)return{tileID:this,x:e,y:r};let n=Math.floor(e/i),a=Math.floor(r/i),s=e-n*i,o=r-a*i,l=this.canonical.z,u=1<<l,h=this.canonical.y+a;if(h<0||h>=u)return null;let c=this.canonical.x+n,p=this.wrap;return c<0?(p-=Math.ceil(-c/u),c=(c%u+u)%u):c>=u&&(p+=Math.floor(c/u),c%=u),{tileID:new ee(this.overscaledZ,p,l,c,h),x:s,y:o};}};function Gi(t,e,r,i,n){t*=2,t<0&&(t=t*-1-1);let a=1<<r;return(a*a*t+a*n+i).toString(36)+r.toString(36)+e.toString(36);}var Us=Math.PI*6378137;function sw(t,e,r){e=2**r-e-1;let i=Oc(t*256,e*256,r),n=Oc((t+1)*256,(e+1)*256,r);return`${i[0]},${i[1]},${n[0]},${n[1]}`;}function Oc(t,e,r){let i=2*Us/256/2**r;return[t*i-Us,e*i-Us];}function ow(t,e,r){let i=\"\";for(let n=t;n>0;n--){let a=1<<n-1;i+=(e&a?1:0)+(r&a?2:0);}return i;}I(\"CanonicalTileID\",ly),I(\"OverscaledTileID\",au,{omit:[\"terrainRttPosMatrix32f\"]});var lw=class{constructor(t,e){this.feature=t,this.type=t.type,this.properties=t.tags?t.tags:{},this.extent=e,\"id\"in t&&(typeof t.id==\"string\"?this.id=parseInt(t.id,10):typeof t.id==\"number\"&&!isNaN(t.id)&&(this.id=t.id));}loadGeometry(){let t=[],e=this.feature.type===1?[this.feature.geometry]:this.feature.geometry;for(let r of e){let i=[];for(let n of r)i.push(new M(n[0],n[1]));t.push(i);}return t;}},nl=\"_geojsonTileLayer\",uy=class{constructor(t,e){this.layers={[nl]:this},this.name=nl,this.version=e?e.version:1,this.extent=e?e.extent:4096,this.length=t.length,this.features=t;}feature(t){return new lw(this.features[t],this.extent);}};function su(t,e=\"\"){let r=new Vv();return uw(t,r,e),r.finish();}function uw(t,e,r=\"\"){for(let i in t.layers)e.writeMessage(3,(n,a)=>hw(n,a,r),t.layers[i]);}function hw(t,e,r=\"\"){e.writeVarintField(15,t.version||1),e.writeStringField(1,t.name||\"\"),e.writeVarintField(5,t.extent||4096);let i={jsonPrefix:r,keys:[],values:[],keycache:{},valuecache:{}};for(let s=0;s<t.length;s++)i.feature=t.feature(s),e.writeMessage(2,cw,i);let n=i.keys;for(let s of n)e.writeStringField(3,s);let a=i.values;for(let s of a)e.writeMessage(4,dw,s);}function cw(t,e){if(!t.feature)return;let r=t.feature;r.id!==void 0&&e.writeVarintField(1,r.id),e.writeMessage(2,pw,t),e.writeVarintField(3,r.type),e.writeMessage(4,fw,r);}function pw(t,e){for(let r in t.feature?.properties){let i=t.feature.properties[r],n=t.keycache[r];if(i==null)continue;n===void 0&&(t.keys.push(r),n=t.keys.length-1,t.keycache[r]=n),e.writeVarint(n),typeof i!=\"string\"&&typeof i!=\"boolean\"&&typeof i!=\"number\"&&(i=t.jsonPrefix+JSON.stringify(i));let a=typeof i+\":\"+i,s=t.valuecache[a];s===void 0&&(t.values.push(i),s=t.values.length-1,t.valuecache[a]=s),e.writeVarint(s);}}function qs(t,e){return(e<<3)+(t&7);}function Rc(t){return t<<1^t>>31;}function fw(t,e){let r=t.loadGeometry(),i=t.type,n=0,a=0;for(let s of r){let o=1;i===1&&(o=s.length),e.writeVarint(qs(1,o));let l=i===3?s.length-1:s.length;for(let u=0;u<l;u++){u===1&&i!==1&&e.writeVarint(qs(2,l-1));let h=s[u].x-n,c=s[u].y-a;e.writeVarint(Rc(h)),e.writeVarint(Rc(c)),n+=h,a+=c;}t.type===3&&e.writeVarint(qs(7,1));}}function dw(t,e){let r=typeof t;r===\"string\"?e.writeStringField(1,t):r===\"boolean\"?e.writeBooleanField(7,t):r===\"number\"&&(t%1==0?t<0?e.writeSVarintField(6,t):e.writeVarintField(5,t):e.writeDoubleField(3,t));}var ou=class{constructor(t){this._stringToNumber={},this._numberToString=[];for(let e=0;e<t.length;e++){let r=t[e];this._stringToNumber[r]=e,this._numberToString[e]=r;}}encode(t){return this._stringToNumber[t];}decode(t){if(t>=this._numberToString.length)throw Error(`Out of bounds. Index requested n=${t} can't be >= this._numberToString.length ${this._numberToString.length}`);return this._numberToString[t];}},yw=class{constructor(t,e,r,i,n){this.type=\"Feature\",this._vectorTileFeature=t,this._x=r,this._y=i,this._z=e;for(let a in t.properties)typeof t.properties[a]==\"string\"&&t.properties[a].startsWith(\"__$json__:\")&&(t.properties[a]=JSON.parse(t.properties[a].slice(10)));this.properties=t.properties,this.id=n;}projectPoint(t,e,r,i){return[(t.x+e)*360/i-180,360/Math.PI*Math.atan(Math.exp((1-(t.y+r)*2/i)*Math.PI))-90];}projectLine(t,e,r,i){return t.map(n=>this.projectPoint(n,e,r,i));}get geometry(){if(this._geometry)return this._geometry;let t=this._vectorTileFeature,e=t.extent*2**this._z,r=t.extent*this._x,i=t.extent*this._y,n=t.loadGeometry();switch(t.type){case 1:{let a=[];for(let o of n)a.push(o[0]);let s=this.projectLine(a,r,i,e);this._geometry=a.length===1?{type:\"Point\",coordinates:s[0]}:{type:\"MultiPoint\",coordinates:s};break;}case 2:{let a=n.map(s=>this.projectLine(s,r,i,e));this._geometry=a.length===1?{type:\"LineString\",coordinates:a[0]}:{type:\"MultiLineString\",coordinates:a};break;}case 3:{let a=yd(n),s=[];for(let o of a)s.push(o.map(l=>this.projectLine(l,r,i,e)));this._geometry=s.length===1?{type:\"Polygon\",coordinates:s[0]}:{type:\"MultiPolygon\",coordinates:s};break;}default:throw Error(`unknown feature type: ${t.type}`);}return this._geometry;}set geometry(t){this._geometry=t;}toJSON(){let t={geometry:this.geometry};for(let e in this)e!==\"_geometry\"&&e!==\"_vectorTileFeature\"&&e!==\"_x\"&&e!==\"_y\"&&e!==\"_z\"&&(t[e]=this[e]);return t;}},br=class{constructor(t,e,r){this._name=t,this.dataBuffer=e,typeof r==\"number\"?this._size=r:(this.nullabilityBuffer=r,this._size=r.size());}getValue(t){return this.nullabilityBuffer&&!this.nullabilityBuffer.get(t)?null:this.getValueFromBuffer(t);}has(t){return this.nullabilityBuffer?.get(t)||!this.nullabilityBuffer;}get name(){return this._name;}get size(){return this._size;}},Ya=class extends br{},lu=class extends Ya{getValueFromBuffer(t){return this.dataBuffer[t];}},uu=class extends Ya{getValueFromBuffer(t){return this.dataBuffer[t];}},hy=class extends br{constructor(t,e,r,i){super(t,e,i),this.delta=r;}},hu=class extends hy{constructor(t,e,r,i,n){super(t,n?Int32Array.of(e):Uint32Array.of(e),r,i);}getValueFromBuffer(t){return this.dataBuffer[0]+t*this.delta;}},cu=class extends br{constructor(t,e,r,i){super(t,i?Int32Array.of(e):Uint32Array.of(e),r);}getValueFromBuffer(t){return this.dataBuffer[0];}},mw=class{constructor(t,e,r,i,n=4096){if(this._name=t,this._geometryVector=e,this._idVector=r,this._propertyVectors=i,this._extent=n,t.length===0)throw Error(\"Missing layer name\");}get name(){return this._name;}get idVector(){return this._idVector;}get geometryVector(){return this._geometryVector;}get propertyVectors(){return this._propertyVectors??[];}getPropertyVector(t){return this.propertyVectorsMap||=new Map(this.propertyVectors.map(e=>[e.name,e])),this.propertyVectorsMap.get(t);}get numFeatures(){return this.geometryVector.numGeometries;}get extent(){return this._extent;}getFeatures(){let t=[],e=this.geometryVector.getGeometries();for(let r=0;r<this.numFeatures;r++){let i;if(this.idVector){let s=this.idVector.getValue(r);s!==null&&(i=this.containsMaxSafeIntegerValues(this.idVector)?Number(s):s);}let n={coordinates:e[r],type:this.geometryVector.geometryType(r)},a={};for(let s of this.propertyVectors){if(!s)continue;let o=s.name,l=s.getValue(r);l!==null&&(a[o]=l);}t.push({id:i,geometry:n,properties:a});}return t;}containsMaxSafeIntegerValues(t){return t instanceof lu||t instanceof cu||t instanceof hu||t instanceof uu;}},Oi={FEATURE:0,VERTEX:1},rt={BOOLEAN:0,INT_8:1,UINT_8:2,INT_32:3,UINT_32:4,INT_64:5,UINT_64:6,FLOAT:7,DOUBLE:8,STRING:9},Ze={GEOMETRY:0,STRUCT:1,MAP:2},cy={ID:0},py=class{constructor(t){this.value=t;}get(){return this.value;}set(t){this.value=t;}increment(){return this.value++;}add(t){this.value+=t;}},Z;(function(t){t.NONE=\"NONE\",t.DELTA=\"DELTA\",t.COMPONENTWISE_DELTA=\"COMPONENTWISE_DELTA\",t.RLE=\"RLE\",t.MORTON=\"MORTON\";})(Z||={});var ae;(function(t){t.NONE=\"NONE\",t.FAST_PFOR=\"FAST_PFOR\",t.VARINT=\"VARINT\";})(ae||={});var pu=new Uint32Array(33);pu[0]=0;for(let t=1;t<=32;t++)pu[t]=t===32?4294967295:4294967295>>>32-t;var al=pu,fu=65536;function du(t,e){return t-t%e;}function gw(t){return du(t+31,32);}function fy(t){if(!Number.isFinite(t)||t<=0)return fu;let e=du(Math.floor(t),256);return e===0?256:e;}function xw(t){let e=t>>>0;return((e&255)<<24|(e&65280)<<8|e>>>8&65280|e>>>24&255)>>>0;}function vw(t,e,r,i){let n=i,a=t[e]>>>0,s=t[e+1]>>>0;r[n++]=a>>>0&3,r[n++]=a>>>2&3,r[n++]=a>>>4&3,r[n++]=a>>>6&3,r[n++]=a>>>8&3,r[n++]=a>>>10&3,r[n++]=a>>>12&3,r[n++]=a>>>14&3,r[n++]=a>>>16&3,r[n++]=a>>>18&3,r[n++]=a>>>20&3,r[n++]=a>>>22&3,r[n++]=a>>>24&3,r[n++]=a>>>26&3,r[n++]=a>>>28&3,r[n++]=a>>>30&3,r[n++]=s>>>0&3,r[n++]=s>>>2&3,r[n++]=s>>>4&3,r[n++]=s>>>6&3,r[n++]=s>>>8&3,r[n++]=s>>>10&3,r[n++]=s>>>12&3,r[n++]=s>>>14&3,r[n++]=s>>>16&3,r[n++]=s>>>18&3,r[n++]=s>>>20&3,r[n++]=s>>>22&3,r[n++]=s>>>24&3,r[n++]=s>>>26&3,r[n++]=s>>>28&3,r[n]=s>>>30&3;}function bw(t,e,r,i){let n=i,a=t[e]>>>0,s=t[e+1]>>>0,o=t[e+2]>>>0;r[n++]=a>>>0&7,r[n++]=a>>>3&7,r[n++]=a>>>6&7,r[n++]=a>>>9&7,r[n++]=a>>>12&7,r[n++]=a>>>15&7,r[n++]=a>>>18&7,r[n++]=a>>>21&7,r[n++]=a>>>24&7,r[n++]=a>>>27&7,r[n++]=(a>>>30|(s&1)<<2)&7,r[n++]=s>>>1&7,r[n++]=s>>>4&7,r[n++]=s>>>7&7,r[n++]=s>>>10&7,r[n++]=s>>>13&7,r[n++]=s>>>16&7,r[n++]=s>>>19&7,r[n++]=s>>>22&7,r[n++]=s>>>25&7,r[n++]=s>>>28&7,r[n++]=(s>>>31|(o&3)<<1)&7,r[n++]=o>>>2&7,r[n++]=o>>>5&7,r[n++]=o>>>8&7,r[n++]=o>>>11&7,r[n++]=o>>>14&7,r[n++]=o>>>17&7,r[n++]=o>>>20&7,r[n++]=o>>>23&7,r[n++]=o>>>26&7,r[n]=o>>>29&7;}function ww(t,e,r,i){let n=i,a=t[e]>>>0,s=t[e+1]>>>0,o=t[e+2]>>>0,l=t[e+3]>>>0;r[n++]=a>>>0&15,r[n++]=a>>>4&15,r[n++]=a>>>8&15,r[n++]=a>>>12&15,r[n++]=a>>>16&15,r[n++]=a>>>20&15,r[n++]=a>>>24&15,r[n++]=a>>>28&15,r[n++]=s>>>0&15,r[n++]=s>>>4&15,r[n++]=s>>>8&15,r[n++]=s>>>12&15,r[n++]=s>>>16&15,r[n++]=s>>>20&15,r[n++]=s>>>24&15,r[n++]=s>>>28&15,r[n++]=o>>>0&15,r[n++]=o>>>4&15,r[n++]=o>>>8&15,r[n++]=o>>>12&15,r[n++]=o>>>16&15,r[n++]=o>>>20&15,r[n++]=o>>>24&15,r[n++]=o>>>28&15,r[n++]=l>>>0&15,r[n++]=l>>>4&15,r[n++]=l>>>8&15,r[n++]=l>>>12&15,r[n++]=l>>>16&15,r[n++]=l>>>20&15,r[n++]=l>>>24&15,r[n]=l>>>28&15;}function Dw(t,e,r,i){let n=i,a=t[e]>>>0,s=t[e+1]>>>0,o=t[e+2]>>>0,l=t[e+3]>>>0,u=t[e+4]>>>0;r[n++]=a>>>0&31,r[n++]=a>>>5&31,r[n++]=a>>>10&31,r[n++]=a>>>15&31,r[n++]=a>>>20&31,r[n++]=a>>>25&31,r[n++]=(a>>>30|(s&7)<<2)&31,r[n++]=s>>>3&31,r[n++]=s>>>8&31,r[n++]=s>>>13&31,r[n++]=s>>>18&31,r[n++]=s>>>23&31,r[n++]=(s>>>28|(o&1)<<4)&31,r[n++]=o>>>1&31,r[n++]=o>>>6&31,r[n++]=o>>>11&31,r[n++]=o>>>16&31,r[n++]=o>>>21&31,r[n++]=o>>>26&31,r[n++]=(o>>>31|(l&15)<<1)&31,r[n++]=l>>>4&31,r[n++]=l>>>9&31,r[n++]=l>>>14&31,r[n++]=l>>>19&31,r[n++]=l>>>24&31,r[n++]=(l>>>29|(u&3)<<3)&31,r[n++]=u>>>2&31,r[n++]=u>>>7&31,r[n++]=u>>>12&31,r[n++]=u>>>17&31,r[n++]=u>>>22&31,r[n]=u>>>27&31;}function _w(t,e,r,i){let n=i,a=t[e]>>>0,s=t[e+1]>>>0,o=t[e+2]>>>0,l=t[e+3]>>>0,u=t[e+4]>>>0,h=t[e+5]>>>0;r[n++]=a>>>0&63,r[n++]=a>>>6&63,r[n++]=a>>>12&63,r[n++]=a>>>18&63,r[n++]=a>>>24&63,r[n++]=(a>>>30|(s&15)<<2)&63,r[n++]=s>>>4&63,r[n++]=s>>>10&63,r[n++]=s>>>16&63,r[n++]=s>>>22&63,r[n++]=(s>>>28|(o&3)<<4)&63,r[n++]=o>>>2&63,r[n++]=o>>>8&63,r[n++]=o>>>14&63,r[n++]=o>>>20&63,r[n++]=o>>>26&63,r[n++]=l>>>0&63,r[n++]=l>>>6&63,r[n++]=l>>>12&63,r[n++]=l>>>18&63,r[n++]=l>>>24&63,r[n++]=(l>>>30|(u&15)<<2)&63,r[n++]=u>>>4&63,r[n++]=u>>>10&63,r[n++]=u>>>16&63,r[n++]=u>>>22&63,r[n++]=(u>>>28|(h&3)<<4)&63,r[n++]=h>>>2&63,r[n++]=h>>>8&63,r[n++]=h>>>14&63,r[n++]=h>>>20&63,r[n]=h>>>26&63;}function Aw(t,e,r,i){let n=i,a=t[e]>>>0,s=t[e+1]>>>0,o=t[e+2]>>>0,l=t[e+3]>>>0,u=t[e+4]>>>0,h=t[e+5]>>>0,c=t[e+6]>>>0;r[n++]=a>>>0&127,r[n++]=a>>>7&127,r[n++]=a>>>14&127,r[n++]=a>>>21&127,r[n++]=(a>>>28|(s&7)<<4)&127,r[n++]=s>>>3&127,r[n++]=s>>>10&127,r[n++]=s>>>17&127,r[n++]=s>>>24&127,r[n++]=(s>>>31|(o&63)<<1)&127,r[n++]=o>>>6&127,r[n++]=o>>>13&127,r[n++]=o>>>20&127,r[n++]=(o>>>27|(l&3)<<5)&127,r[n++]=l>>>2&127,r[n++]=l>>>9&127,r[n++]=l>>>16&127,r[n++]=l>>>23&127,r[n++]=(l>>>30|(u&31)<<2)&127,r[n++]=u>>>5&127,r[n++]=u>>>12&127,r[n++]=u>>>19&127,r[n++]=(u>>>26|(h&1)<<6)&127,r[n++]=h>>>1&127,r[n++]=h>>>8&127,r[n++]=h>>>15&127,r[n++]=h>>>22&127,r[n++]=(h>>>29|(c&15)<<3)&127,r[n++]=c>>>4&127,r[n++]=c>>>11&127,r[n++]=c>>>18&127,r[n]=c>>>25&127;}function Sw(t,e,r,i){let n=i,a=t[e]>>>0,s=t[e+1]>>>0,o=t[e+2]>>>0,l=t[e+3]>>>0,u=t[e+4]>>>0,h=t[e+5]>>>0,c=t[e+6]>>>0,p=t[e+7]>>>0;r[n++]=a>>>0&255,r[n++]=a>>>8&255,r[n++]=a>>>16&255,r[n++]=a>>>24&255,r[n++]=s>>>0&255,r[n++]=s>>>8&255,r[n++]=s>>>16&255,r[n++]=s>>>24&255,r[n++]=o>>>0&255,r[n++]=o>>>8&255,r[n++]=o>>>16&255,r[n++]=o>>>24&255,r[n++]=l>>>0&255,r[n++]=l>>>8&255,r[n++]=l>>>16&255,r[n++]=l>>>24&255,r[n++]=u>>>0&255,r[n++]=u>>>8&255,r[n++]=u>>>16&255,r[n++]=u>>>24&255,r[n++]=h>>>0&255,r[n++]=h>>>8&255,r[n++]=h>>>16&255,r[n++]=h>>>24&255,r[n++]=c>>>0&255,r[n++]=c>>>8&255,r[n++]=c>>>16&255,r[n++]=c>>>24&255,r[n++]=p>>>0&255,r[n++]=p>>>8&255,r[n++]=p>>>16&255,r[n]=p>>>24&255;}function Ew(t,e,r,i){let n=i,a=t[e]>>>0,s=t[e+1]>>>0,o=t[e+2]>>>0,l=t[e+3]>>>0,u=t[e+4]>>>0,h=t[e+5]>>>0,c=t[e+6]>>>0,p=t[e+7]>>>0,f=t[e+8]>>>0;r[n++]=a>>>0&511,r[n++]=a>>>9&511,r[n++]=a>>>18&511,r[n++]=(a>>>27|(s&15)<<5)&511,r[n++]=s>>>4&511,r[n++]=s>>>13&511,r[n++]=s>>>22&511,r[n++]=(s>>>31|(o&255)<<1)&511,r[n++]=o>>>8&511,r[n++]=o>>>17&511,r[n++]=(o>>>26|(l&7)<<6)&511,r[n++]=l>>>3&511,r[n++]=l>>>12&511,r[n++]=l>>>21&511,r[n++]=(l>>>30|(u&127)<<2)&511,r[n++]=u>>>7&511,r[n++]=u>>>16&511,r[n++]=(u>>>25|(h&3)<<7)&511,r[n++]=h>>>2&511,r[n++]=h>>>11&511,r[n++]=h>>>20&511,r[n++]=(h>>>29|(c&63)<<3)&511,r[n++]=c>>>6&511,r[n++]=c>>>15&511,r[n++]=(c>>>24|(p&1)<<8)&511,r[n++]=p>>>1&511,r[n++]=p>>>10&511,r[n++]=p>>>19&511,r[n++]=(p>>>28|(f&31)<<4)&511,r[n++]=f>>>5&511,r[n++]=f>>>14&511,r[n]=f>>>23&511;}function Fw(t,e,r,i){let n=i,a=t[e]>>>0,s=t[e+1]>>>0,o=t[e+2]>>>0,l=t[e+3]>>>0,u=t[e+4]>>>0,h=t[e+5]>>>0,c=t[e+6]>>>0,p=t[e+7]>>>0,f=t[e+8]>>>0,d=t[e+9]>>>0;r[n++]=a>>>0&1023,r[n++]=a>>>10&1023,r[n++]=a>>>20&1023,r[n++]=(a>>>30|(s&255)<<2)&1023,r[n++]=s>>>8&1023,r[n++]=s>>>18&1023,r[n++]=(s>>>28|(o&63)<<4)&1023,r[n++]=o>>>6&1023,r[n++]=o>>>16&1023,r[n++]=(o>>>26|(l&15)<<6)&1023,r[n++]=l>>>4&1023,r[n++]=l>>>14&1023,r[n++]=(l>>>24|(u&3)<<8)&1023,r[n++]=u>>>2&1023,r[n++]=u>>>12&1023,r[n++]=u>>>22&1023,r[n++]=h>>>0&1023,r[n++]=h>>>10&1023,r[n++]=h>>>20&1023,r[n++]=(h>>>30|(c&255)<<2)&1023,r[n++]=c>>>8&1023,r[n++]=c>>>18&1023,r[n++]=(c>>>28|(p&63)<<4)&1023,r[n++]=p>>>6&1023,r[n++]=p>>>16&1023,r[n++]=(p>>>26|(f&15)<<6)&1023,r[n++]=f>>>4&1023,r[n++]=f>>>14&1023,r[n++]=(f>>>24|(d&3)<<8)&1023,r[n++]=d>>>2&1023,r[n++]=d>>>12&1023,r[n]=d>>>22&1023;}function Tw(t,e,r,i){let n=i,a=t[e]>>>0,s=t[e+1]>>>0,o=t[e+2]>>>0,l=t[e+3]>>>0,u=t[e+4]>>>0,h=t[e+5]>>>0,c=t[e+6]>>>0,p=t[e+7]>>>0,f=t[e+8]>>>0,d=t[e+9]>>>0,y=t[e+10]>>>0;r[n++]=a>>>0&2047,r[n++]=a>>>11&2047,r[n++]=(a>>>22|(s&1)<<10)&2047,r[n++]=s>>>1&2047,r[n++]=s>>>12&2047,r[n++]=(s>>>23|(o&3)<<9)&2047,r[n++]=o>>>2&2047,r[n++]=o>>>13&2047,r[n++]=(o>>>24|(l&7)<<8)&2047,r[n++]=l>>>3&2047,r[n++]=l>>>14&2047,r[n++]=(l>>>25|(u&15)<<7)&2047,r[n++]=u>>>4&2047,r[n++]=u>>>15&2047,r[n++]=(u>>>26|(h&31)<<6)&2047,r[n++]=h>>>5&2047,r[n++]=h>>>16&2047,r[n++]=(h>>>27|(c&63)<<5)&2047,r[n++]=c>>>6&2047,r[n++]=c>>>17&2047,r[n++]=(c>>>28|(p&127)<<4)&2047,r[n++]=p>>>7&2047,r[n++]=p>>>18&2047,r[n++]=(p>>>29|(f&255)<<3)&2047,r[n++]=f>>>8&2047,r[n++]=f>>>19&2047,r[n++]=(f>>>30|(d&511)<<2)&2047,r[n++]=d>>>9&2047,r[n++]=d>>>20&2047,r[n++]=(d>>>31|(y&1023)<<1)&2047,r[n++]=y>>>10&2047,r[n]=y>>>21&2047;}function kw(t,e,r,i){let n=i,a=t[e]>>>0,s=t[e+1]>>>0,o=t[e+2]>>>0,l=t[e+3]>>>0,u=t[e+4]>>>0,h=t[e+5]>>>0,c=t[e+6]>>>0,p=t[e+7]>>>0,f=t[e+8]>>>0,d=t[e+9]>>>0,y=t[e+10]>>>0,m=t[e+11]>>>0;r[n++]=a>>>0&4095,r[n++]=a>>>12&4095,r[n++]=(a>>>24|(s&15)<<8)&4095,r[n++]=s>>>4&4095,r[n++]=s>>>16&4095,r[n++]=(s>>>28|(o&255)<<4)&4095,r[n++]=o>>>8&4095,r[n++]=o>>>20&4095,r[n++]=l>>>0&4095,r[n++]=l>>>12&4095,r[n++]=(l>>>24|(u&15)<<8)&4095,r[n++]=u>>>4&4095,r[n++]=u>>>16&4095,r[n++]=(u>>>28|(h&255)<<4)&4095,r[n++]=h>>>8&4095,r[n++]=h>>>20&4095,r[n++]=c>>>0&4095,r[n++]=c>>>12&4095,r[n++]=(c>>>24|(p&15)<<8)&4095,r[n++]=p>>>4&4095,r[n++]=p>>>16&4095,r[n++]=(p>>>28|(f&255)<<4)&4095,r[n++]=f>>>8&4095,r[n++]=f>>>20&4095,r[n++]=d>>>0&4095,r[n++]=d>>>12&4095,r[n++]=(d>>>24|(y&15)<<8)&4095,r[n++]=y>>>4&4095,r[n++]=y>>>16&4095,r[n++]=(y>>>28|(m&255)<<4)&4095,r[n++]=m>>>8&4095,r[n]=m>>>20&4095;}function Iw(t,e,r,i){let n=i,a=t[e]>>>0,s=t[e+1]>>>0,o=t[e+2]>>>0,l=t[e+3]>>>0,u=t[e+4]>>>0,h=t[e+5]>>>0,c=t[e+6]>>>0,p=t[e+7]>>>0,f=t[e+8]>>>0,d=t[e+9]>>>0,y=t[e+10]>>>0,m=t[e+11]>>>0,g=t[e+12]>>>0,x=t[e+13]>>>0,b=t[e+14]>>>0,v=t[e+15]>>>0;r[n++]=a>>>0&65535,r[n++]=a>>>16&65535,r[n++]=s>>>0&65535,r[n++]=s>>>16&65535,r[n++]=o>>>0&65535,r[n++]=o>>>16&65535,r[n++]=l>>>0&65535,r[n++]=l>>>16&65535,r[n++]=u>>>0&65535,r[n++]=u>>>16&65535,r[n++]=h>>>0&65535,r[n++]=h>>>16&65535,r[n++]=c>>>0&65535,r[n++]=c>>>16&65535,r[n++]=p>>>0&65535,r[n++]=p>>>16&65535,r[n++]=f>>>0&65535,r[n++]=f>>>16&65535,r[n++]=d>>>0&65535,r[n++]=d>>>16&65535,r[n++]=y>>>0&65535,r[n++]=y>>>16&65535,r[n++]=m>>>0&65535,r[n++]=m>>>16&65535,r[n++]=g>>>0&65535,r[n++]=g>>>16&65535,r[n++]=x>>>0&65535,r[n++]=x>>>16&65535,r[n++]=b>>>0&65535,r[n++]=b>>>16&65535,r[n++]=v>>>0&65535,r[n]=v>>>16&65535;}function Cw(t,e,r,i){let n=i,a=e;for(let s=0;s<8;s++){let o=t[a++]>>>0;r[n++]=o>>>0&1,r[n++]=o>>>1&1,r[n++]=o>>>2&1,r[n++]=o>>>3&1,r[n++]=o>>>4&1,r[n++]=o>>>5&1,r[n++]=o>>>6&1,r[n++]=o>>>7&1,r[n++]=o>>>8&1,r[n++]=o>>>9&1,r[n++]=o>>>10&1,r[n++]=o>>>11&1,r[n++]=o>>>12&1,r[n++]=o>>>13&1,r[n++]=o>>>14&1,r[n++]=o>>>15&1,r[n++]=o>>>16&1,r[n++]=o>>>17&1,r[n++]=o>>>18&1,r[n++]=o>>>19&1,r[n++]=o>>>20&1,r[n++]=o>>>21&1,r[n++]=o>>>22&1,r[n++]=o>>>23&1,r[n++]=o>>>24&1,r[n++]=o>>>25&1,r[n++]=o>>>26&1,r[n++]=o>>>27&1,r[n++]=o>>>28&1,r[n++]=o>>>29&1,r[n++]=o>>>30&1,r[n++]=o>>>31&1;}}function Mw(t,e,r,i){let n=i,a=e;for(let s=0;s<8;s++){let o=t[a++]>>>0,l=t[a++]>>>0;r[n++]=o>>>0&3,r[n++]=o>>>2&3,r[n++]=o>>>4&3,r[n++]=o>>>6&3,r[n++]=o>>>8&3,r[n++]=o>>>10&3,r[n++]=o>>>12&3,r[n++]=o>>>14&3,r[n++]=o>>>16&3,r[n++]=o>>>18&3,r[n++]=o>>>20&3,r[n++]=o>>>22&3,r[n++]=o>>>24&3,r[n++]=o>>>26&3,r[n++]=o>>>28&3,r[n++]=o>>>30&3,r[n++]=l>>>0&3,r[n++]=l>>>2&3,r[n++]=l>>>4&3,r[n++]=l>>>6&3,r[n++]=l>>>8&3,r[n++]=l>>>10&3,r[n++]=l>>>12&3,r[n++]=l>>>14&3,r[n++]=l>>>16&3,r[n++]=l>>>18&3,r[n++]=l>>>20&3,r[n++]=l>>>22&3,r[n++]=l>>>24&3,r[n++]=l>>>26&3,r[n++]=l>>>28&3,r[n++]=l>>>30&3;}}function Bw(t,e,r,i){let n=i,a=e;for(let s=0;s<8;s++){let o=t[a++]>>>0,l=t[a++]>>>0,u=t[a++]>>>0;r[n++]=o>>>0&7,r[n++]=o>>>3&7,r[n++]=o>>>6&7,r[n++]=o>>>9&7,r[n++]=o>>>12&7,r[n++]=o>>>15&7,r[n++]=o>>>18&7,r[n++]=o>>>21&7,r[n++]=o>>>24&7,r[n++]=o>>>27&7,r[n++]=(o>>>30|(l&1)<<2)&7,r[n++]=l>>>1&7,r[n++]=l>>>4&7,r[n++]=l>>>7&7,r[n++]=l>>>10&7,r[n++]=l>>>13&7,r[n++]=l>>>16&7,r[n++]=l>>>19&7,r[n++]=l>>>22&7,r[n++]=l>>>25&7,r[n++]=l>>>28&7,r[n++]=(l>>>31|(u&3)<<1)&7,r[n++]=u>>>2&7,r[n++]=u>>>5&7,r[n++]=u>>>8&7,r[n++]=u>>>11&7,r[n++]=u>>>14&7,r[n++]=u>>>17&7,r[n++]=u>>>20&7,r[n++]=u>>>23&7,r[n++]=u>>>26&7,r[n++]=u>>>29&7;}}function Pw(t,e,r,i){let n=i,a=e;for(let s=0;s<8;s++){let o=t[a++]>>>0,l=t[a++]>>>0,u=t[a++]>>>0,h=t[a++]>>>0;r[n++]=o>>>0&15,r[n++]=o>>>4&15,r[n++]=o>>>8&15,r[n++]=o>>>12&15,r[n++]=o>>>16&15,r[n++]=o>>>20&15,r[n++]=o>>>24&15,r[n++]=o>>>28&15,r[n++]=l>>>0&15,r[n++]=l>>>4&15,r[n++]=l>>>8&15,r[n++]=l>>>12&15,r[n++]=l>>>16&15,r[n++]=l>>>20&15,r[n++]=l>>>24&15,r[n++]=l>>>28&15,r[n++]=u>>>0&15,r[n++]=u>>>4&15,r[n++]=u>>>8&15,r[n++]=u>>>12&15,r[n++]=u>>>16&15,r[n++]=u>>>20&15,r[n++]=u>>>24&15,r[n++]=u>>>28&15,r[n++]=h>>>0&15,r[n++]=h>>>4&15,r[n++]=h>>>8&15,r[n++]=h>>>12&15,r[n++]=h>>>16&15,r[n++]=h>>>20&15,r[n++]=h>>>24&15,r[n++]=h>>>28&15;}}function zw(t,e,r,i){let n=i,a=e;for(let s=0;s<8;s++){let o=t[a++]>>>0,l=t[a++]>>>0,u=t[a++]>>>0,h=t[a++]>>>0,c=t[a++]>>>0;r[n++]=o>>>0&31,r[n++]=o>>>5&31,r[n++]=o>>>10&31,r[n++]=o>>>15&31,r[n++]=o>>>20&31,r[n++]=o>>>25&31,r[n++]=(o>>>30|(l&7)<<2)&31,r[n++]=l>>>3&31,r[n++]=l>>>8&31,r[n++]=l>>>13&31,r[n++]=l>>>18&31,r[n++]=l>>>23&31,r[n++]=(l>>>28|(u&1)<<4)&31,r[n++]=u>>>1&31,r[n++]=u>>>6&31,r[n++]=u>>>11&31,r[n++]=u>>>16&31,r[n++]=u>>>21&31,r[n++]=u>>>26&31,r[n++]=(u>>>31|(h&15)<<1)&31,r[n++]=h>>>4&31,r[n++]=h>>>9&31,r[n++]=h>>>14&31,r[n++]=h>>>19&31,r[n++]=h>>>24&31,r[n++]=(h>>>29|(c&3)<<3)&31,r[n++]=c>>>2&31,r[n++]=c>>>7&31,r[n++]=c>>>12&31,r[n++]=c>>>17&31,r[n++]=c>>>22&31,r[n++]=c>>>27&31;}}function Lw(t,e,r,i){let n=i,a=e;for(let s=0;s<8;s++){let o=t[a++]>>>0,l=t[a++]>>>0,u=t[a++]>>>0,h=t[a++]>>>0,c=t[a++]>>>0,p=t[a++]>>>0;r[n++]=o>>>0&63,r[n++]=o>>>6&63,r[n++]=o>>>12&63,r[n++]=o>>>18&63,r[n++]=o>>>24&63,r[n++]=(o>>>30|(l&15)<<2)&63,r[n++]=l>>>4&63,r[n++]=l>>>10&63,r[n++]=l>>>16&63,r[n++]=l>>>22&63,r[n++]=(l>>>28|(u&3)<<4)&63,r[n++]=u>>>2&63,r[n++]=u>>>8&63,r[n++]=u>>>14&63,r[n++]=u>>>20&63,r[n++]=u>>>26&63,r[n++]=h>>>0&63,r[n++]=h>>>6&63,r[n++]=h>>>12&63,r[n++]=h>>>18&63,r[n++]=h>>>24&63,r[n++]=(h>>>30|(c&15)<<2)&63,r[n++]=c>>>4&63,r[n++]=c>>>10&63,r[n++]=c>>>16&63,r[n++]=c>>>22&63,r[n++]=(c>>>28|(p&3)<<4)&63,r[n++]=p>>>2&63,r[n++]=p>>>8&63,r[n++]=p>>>14&63,r[n++]=p>>>20&63,r[n++]=p>>>26&63;}}function Vw(t,e,r,i){let n=i,a=e;for(let s=0;s<8;s++){let o=t[a++]>>>0,l=t[a++]>>>0,u=t[a++]>>>0,h=t[a++]>>>0,c=t[a++]>>>0,p=t[a++]>>>0,f=t[a++]>>>0;r[n++]=o>>>0&127,r[n++]=o>>>7&127,r[n++]=o>>>14&127,r[n++]=o>>>21&127,r[n++]=(o>>>28|(l&7)<<4)&127,r[n++]=l>>>3&127,r[n++]=l>>>10&127,r[n++]=l>>>17&127,r[n++]=l>>>24&127,r[n++]=(l>>>31|(u&63)<<1)&127,r[n++]=u>>>6&127,r[n++]=u>>>13&127,r[n++]=u>>>20&127,r[n++]=(u>>>27|(h&3)<<5)&127,r[n++]=h>>>2&127,r[n++]=h>>>9&127,r[n++]=h>>>16&127,r[n++]=h>>>23&127,r[n++]=(h>>>30|(c&31)<<2)&127,r[n++]=c>>>5&127,r[n++]=c>>>12&127,r[n++]=c>>>19&127,r[n++]=(c>>>26|(p&1)<<6)&127,r[n++]=p>>>1&127,r[n++]=p>>>8&127,r[n++]=p>>>15&127,r[n++]=p>>>22&127,r[n++]=(p>>>29|(f&15)<<3)&127,r[n++]=f>>>4&127,r[n++]=f>>>11&127,r[n++]=f>>>18&127,r[n++]=f>>>25&127;}}function Ow(t,e,r,i){let n=i,a=e;for(let s=0;s<8;s++){let o=t[a++]>>>0,l=t[a++]>>>0,u=t[a++]>>>0,h=t[a++]>>>0,c=t[a++]>>>0,p=t[a++]>>>0,f=t[a++]>>>0,d=t[a++]>>>0;r[n++]=o>>>0&255,r[n++]=o>>>8&255,r[n++]=o>>>16&255,r[n++]=o>>>24&255,r[n++]=l>>>0&255,r[n++]=l>>>8&255,r[n++]=l>>>16&255,r[n++]=l>>>24&255,r[n++]=u>>>0&255,r[n++]=u>>>8&255,r[n++]=u>>>16&255,r[n++]=u>>>24&255,r[n++]=h>>>0&255,r[n++]=h>>>8&255,r[n++]=h>>>16&255,r[n++]=h>>>24&255,r[n++]=c>>>0&255,r[n++]=c>>>8&255,r[n++]=c>>>16&255,r[n++]=c>>>24&255,r[n++]=p>>>0&255,r[n++]=p>>>8&255,r[n++]=p>>>16&255,r[n++]=p>>>24&255,r[n++]=f>>>0&255,r[n++]=f>>>8&255,r[n++]=f>>>16&255,r[n++]=f>>>24&255,r[n++]=d>>>0&255,r[n++]=d>>>8&255,r[n++]=d>>>16&255,r[n++]=d>>>24&255;}}function Rw(t,e,r,i){let n=i,a=e;for(let s=0;s<128;s++){let o=t[a++]>>>0;r[n++]=o&65535,r[n++]=o>>>16&65535;}}function $w(t,e,r,i,n){let a=al[n]>>>0,s=e,o=0,l=t[s]>>>0,u=i;for(let h=0;h<8;h++){for(let c=0;c<32;c++)if(o+n<=32){let p=l>>>o&a;r[u+c]=p|0,o+=n,o===32&&(o=0,s++,c!==31&&(l=t[s]>>>0));}else{let p=32-o,f=l>>>o;s++,l=t[s]>>>0;let d=n-p,y=-1>>>32-d>>>0,m=(f|(l&y)<<p)&a;r[u+c]=m|0,o=d;}u+=32,o=0,h<7&&(l=t[s]>>>0);}}var sl=fy(fu),Nw=3*sl/256+sl|0;function dy(){let t=new Uint8Array(Nw);return{dataToBePacked:Array(33),dataPointers:new Int32Array(33),byteContainer:t,byteContainerI32:new Int32Array(t.buffer,t.byteOffset,t.byteLength>>>2),exceptionSizes:new Int32Array(33)};}function Uw(t=16){if(t<0)throw RangeError(`initialEncodedWordCapacity must be >= 0, got ${t}`);let e=Math.max(16,t|0);return{encodedWords:new Uint32Array(e),decoderWorkspace:dy()};}function qw(t,e){if(e<=t.encodedWords.length)return t.encodedWords;let r=new Uint32Array(Math.max(16,e*2));return t.encodedWords=r,r;}function jw(t,e,r,i){i.byteContainer.length<r&&(i.byteContainer=new Uint8Array(r*2),i.byteContainerI32=void 0);let n=i.byteContainer,a=r>>>2;if(n.byteOffset&3)for(let o=0;o<a;o=o+1|0){let l=t[e+o|0]|0,u=o<<2;n[u]=l&255,n[u+1|0]=l>>>8&255,n[u+2|0]=l>>>16&255,n[u+3|0]=l>>>24&255;}else{let o=i.byteContainerI32;(!o||o.buffer!==n.buffer||o.byteOffset!==n.byteOffset||o.length<a)&&(o=i.byteContainerI32=new Int32Array(n.buffer,n.byteOffset,n.byteLength>>>2)),o.set(t.subarray(e,e+a));}let s=r&3;if(s>0){let o=t[e+a|0]|0,l=a<<2;for(let u=0;u<s;u=u+1|0)n[l+u|0]=o>>>(u<<3)&255;}return n;}function Gw(t,e,r){let i=t[e++]|0,n=r.dataToBePacked;for(let a=2;a<=32;a=a+1|0){if(!(i>>>a-1&1))continue;if(e>=t.length)throw Error(`FastPFOR decode: truncated exception stream header (bitWidth=${a}, streamWordIndex=${e}, needWords=1, availableWords=${t.length-e}, encodedWords=${t.length})`);let s=t[e++]>>>0,o=gw(s),l=s*a+31>>>5;if(e+l>t.length)throw Error(`FastPFOR decode: truncated exception stream (bitWidth=${a}, size=${s}, streamWordIndex=${e}, needWords=${l}, availableWords=${t.length-e}, encodedWords=${t.length})`);let u=n[a];(!u||u.length<o)&&(u=n[a]=new Uint32Array(o));let h=0;for(;h<s;h=h+32|0)e3(t,e,u,h,a),e=e+a|0;let c=h-s|0;e=e-(c*a>>>5)|0,r.exceptionSizes[a]=s;}return e;}function Xw(t,e,r,i,n){switch(n){case 1:Cw(t,e,r,i);break;case 2:Mw(t,e,r,i);break;case 3:Bw(t,e,r,i);break;case 4:Pw(t,e,r,i);break;case 5:zw(t,e,r,i);break;case 6:Lw(t,e,r,i);break;case 7:Vw(t,e,r,i);break;case 8:Ow(t,e,r,i);break;case 16:Rw(t,e,r,i);break;default:$w(t,e,r,i,n);}return e+(n<<3)|0;}function Yw(t,e,r,i){if(r+2>e)throw Error(`FastPFOR decode: byteContainer underflow at block=${i} (need 2 bytes for [bitWidth, exceptionCount], bytePos=${r}, byteSize=${e})`);let n=t[r++],a=t[r++];if(n>32)throw Error(`FastPFOR decode: invalid bitWidth=${n} at block=${i} (expected 0..32). This likely indicates corrupted or truncated input.`);return{bitWidth:n,exceptionCount:a,bytePosIn:r};}function Ww(t,e,r,i,n,a){if(r+1>e)throw Error(`FastPFOR decode: exception header underflow at block=${a} (need 1 byte for maxBits, bytePos=${r}, byteSize=${e})`);let s=t[r++];if(s<i||s>32)throw Error(`FastPFOR decode: invalid maxBits=${s} at block=${a} (bitWidth=${i}, expected ${i}..32)`);let o=s-i|0;if(o<1||o>32)throw Error(`FastPFOR decode: invalid exceptionBitWidth=${o} at block=${a} (bitWidth=${i}, maxBits=${s})`);if(r+n>e)throw Error(`FastPFOR decode: exception positions underflow at block=${a} (need=${n}, have=${e-r})`);return{maxBits:s,exceptionBitWidth:o,bytePosIn:r};}function Zw(t,e,r,i,n,a,s,o,l){let{maxBits:u,exceptionBitWidth:h,bytePosIn:c}=Ww(n,a,s,r,i,l);if(s=c,h===1){let m=1<<r;for(let g=0;g<i;g=g+1|0){let x=n[s++];t[x+e|0]|=m;}return s;}let p=o.dataToBePacked[h];if(!p)throw Error(`FastPFOR decode: missing exception stream for exceptionBitWidth=${h} (bitWidth=${r}, maxBits=${u}) at block ${l}`);let f=o.dataPointers,d=f[h]|0,y=o.exceptionSizes[h]|0;if(d+i>y)throw Error(`FastPFOR decode: exception stream overflow for exceptionBitWidth=${h} (ptr=${d}, need ${i}, size=${y}) at block ${l}`);for(let m=0;m<i;m=m+1|0){let g=n[s++],x=p[d++]|0;t[g+e|0]|=x<<r;}return f[h]=d,s;}function Hw(t,e,r,i,n,a,s,o,l,u){let h=r|0,c=0;for(let p=0;p<s;p=p+1|0){let f=Yw(o,l,c,p);c=f.bytePosIn;let d=f.bitWidth,y=f.exceptionCount,m=a+p*256|0;switch(d){case 0:n.fill(0,m,m+256);break;case 32:for(let g=0;g<256;g=g+1|0)n[m+g|0]=t[h+g|0]|0;h=h+256|0;break;default:h=Xw(t,h,n,m,d);}y>0&&(c=Zw(n,m,d,y,o,l,c,u,p));}if(h!==i)throw Error(`FastPFOR decode: packed region mismatch (pageStart=${e}, packedStart=${r}, consumedPackedEnd=${h}, expectedPackedEnd=${i}, packedWords=${i-r}, encoded.length=${t.length})`);}function Kw(t,e,r,i,n,a){let s=r|0,o=t[s]|0;if(o<=0||s+o>t.length-1)throw Error(`FastPFOR decode: invalid whereMeta=${o} at pageStart=${s} (expected > 0 and pageStart+whereMeta < encoded.length=${t.length})`);let l=s+1|0,u=s+o|0,h=t[u]>>>0,c=h+3>>>2,p=u+1,f=p+c;if(f>=t.length)throw Error(`FastPFOR decode: invalid byteSize=${h} (metaInts=${c}, pageStart=${s}, packedEnd=${u}, byteContainerStart=${p}) causes bitmapPos=${f} out of bounds (encoded.length=${t.length})`);let d=jw(t,p,h,a),y=h,m=Gw(t,f,a);return a.dataPointers.fill(0),Hw(t,s,l,u,e,i|0,n/256|0,d,y,a),m;}function Jw(t,e,r,i,n,a){let s=i+du(n,256),o=i,l=r;for(;o!==s;){let u=Math.min(sl,s-o);l=Kw(t,e,l,o,u,a),o=o+u|0;}return l;}function Qw(t,e,r,i,n,a){if(a===0)return e;let s=0,o=e,l=e+r,u=n,h=n,c=n+a,p=0,f=0;for(;o<l&&h<c;){let d=t[o]>>>s&255;if(s+=8,o+=s>>>5,s&=31,p|=(d&127)<<f,d&128)i[h++]=p|0,p=0,f=0;else if(f+=7,f>28)throw Error(`FastPFOR VByte: unterminated value (expected MSB=1 terminator within 5 bytes; shift=${f}, partial=${p}, decoded=${h-u}/${a}, inPos=${o}, inEnd=${l})`);}if(h!==c)throw Error(`FastPFOR VByte: truncated stream (decoded=${h-u}, expected=${a}, consumedWords=${o-e}/${r}, vbyteStart=${e}, vbyteEnd=${l})`);return o;}function t3(t,e,r){let i=0,n=0,a=new Uint32Array(e),s=r??dy();if(t.length>0){let u=t[i]|0;if(i=i+1|0,u&255)throw Error(`FastPFOR decode: invalid alignedLength=${u} (expected multiple of 256)`);if(n+u>a.length)throw Error(`FastPFOR decode: output buffer too small (outPos=${n}, alignedLength=${u}, out.length=${a.length})`);i=Jw(t,a,i,n,u,s),n=n+u|0;}let o=t.length-i|0,l=e-n|0;return Qw(t,i,o,a,n,l),a;}function e3(t,e,r,i,n){switch(n){case 2:vw(t,e,r,i);return;case 3:bw(t,e,r,i);return;case 4:ww(t,e,r,i);return;case 5:Dw(t,e,r,i);return;case 6:_w(t,e,r,i);return;case 7:Aw(t,e,r,i);return;case 8:Sw(t,e,r,i);return;case 9:Ew(t,e,r,i);return;case 10:Fw(t,e,r,i);return;case 11:Tw(t,e,r,i);return;case 12:kw(t,e,r,i);return;case 16:Iw(t,e,r,i);return;case 32:for(let u=0;u<32;u=u+1|0)r[i+u|0]=t[e+u|0]|0;return;}let a=al[n]>>>0,s=e,o=0,l=t[s]>>>0;for(let u=0;u<32;u++)if(o+n<=32){let h=l>>>o&a;r[i+u]=h|0,o+=n,o===32&&(o=0,s++,u!==31&&(l=t[s]>>>0));}else{let h=32-o,c=l>>>o;s++,l=t[s]>>>0;let p=al[n-h]>>>0,f=(c|(l&p)<<h)&a;r[i+u]=f|0,o=n-h;}}function r3(t,e,r,i){if(e<0||r<0||e+r>t.length)throw RangeError(`decodeBigEndianInt32sInto: out of bounds (offset=${e}, byteLength=${r}, bytes.length=${t.length})`);let n=Math.floor(r/4),a=r%4!=0,s=a?n+1:n;if(i.length<s)throw RangeError(`decodeBigEndianInt32sInto: out.length=${i.length} < ${s}`);if(n>0){let o=t.byteOffset+e;if(o&3)for(let l=0;l<n;l++){let u=e+l*4;i[l]=t[u]<<24|t[u+1]<<16|t[u+2]<<8|t[u+3]|0;}else{let l=new Uint32Array(t.buffer,o,n);for(let u=0;u<n;u++)i[u]=xw(l[u])|0;}}if(a){let o=e+n*4,l=r-n*4,u=0;for(let h=0;h<l;h++)u|=t[o+h]<<24-h*8;i[n]=u|0;}return s;}function Ot(t,e,r){let i=new Uint32Array(r),n=0,a=e.get();for(let s=0;s<i.length;s++){let o=t[a++],l=o&127;if(o<128){i[n++]=l;continue;}if(o=t[a++],l|=(o&127)<<7,o<128){i[n++]=l;continue;}if(o=t[a++],l|=(o&127)<<14,o<128){i[n++]=l;continue;}if(o=t[a++],l|=(o&127)<<21,o<128){i[n++]=l;continue;}o=t[a++],l|=(o&15)<<28,i[n++]=l;}return e.set(a),i;}function yu(t,e,r){let i=new BigUint64Array(r);for(let n=0;n<i.length;n++)i[n]=i3(t,e);return i;}function i3(t,e){let r=0n,i=0,n=e.get();for(;n<t.length;){let a=t[n++];if(r|=BigInt(a&127)<<BigInt(i),!(a&128))break;if(i+=7,i>=64)throw Error(\"Varint too long\");}return e.set(n),r;}function n3(t,e,r){let i=new Float64Array(r);for(let n=0;n<r;n++)i[n]=a3(t,e);return i;}function a3(t,e){let r,i;return i=t[e.get()],e.increment(),r=i&127,i<128||(i=t[e.get()],e.increment(),r|=(i&127)<<7,i<128)||(i=t[e.get()],e.increment(),r|=(i&127)<<14,i<128)||(i=t[e.get()],e.increment(),r|=(i&127)<<21,i<128)?r:(i=t[e.get()],r|=(i&15)<<28,s3(r,t,e));}function s3(t,e,r){let i,n;if(n=e[r.get()],r.increment(),i=(n&112)>>4,n<128||(n=e[r.get()],r.increment(),i|=(n&127)<<3,n<128)||(n=e[r.get()],r.increment(),i|=(n&127)<<10,n<128)||(n=e[r.get()],r.increment(),i|=(n&127)<<17,n<128)||(n=e[r.get()],r.increment(),i|=(n&127)<<24,n<128)||(n=e[r.get()],r.increment(),i|=(n&1)<<31,n<128))return i*4294967296+(t>>>0);throw Error(\"Expected varint not more than 10 bytes\");}function o3(t,e,r,i){return l3(t,e,r,i,Uw(r>>>2));}function l3(t,e,r,i,n){let a=i.get();if(r&3)throw Error(`FastPFOR: invalid encodedByteLength=${r} at offset=${a} (encodedBytes.length=${t.length}; expected a multiple of 4 bytes for an int32 big-endian word stream)`);let s=r>>>2,o=qw(n,s);r3(t,a,r,o);let l=t3(o.subarray(0,s),e,n.decoderWorkspace);return i.add(r),l;}function et(t){return t>>>1^-(t&1);}function Lt(t){return t>>1n^-(t&1n);}function je(t){return t%2==1?(t+1)/-2:t/2;}function u3(t){let e=new Int32Array(t.length);for(let r=0;r<t.length;r++)e[r]=et(t[r]);return e;}function h3(t){let e=new BigInt64Array(t.length);for(let r=0;r<t.length;r++)e[r]=Lt(t[r]);return e;}function c3(t){for(let e=0;e<t.length;e++)t[e]=je(t[e]);}function ol(t,e,r){if(r===void 0){r=0;for(let a=0;a<e;a++)r+=t[a];}let i=new Uint32Array(r),n=0;for(let a=0;a<e;a++){let s=t[a],o=t[a+e];i.fill(o,n,n+s),n+=s;}return i;}function ll(t,e,r){if(r===void 0){r=0;for(let a=0;a<e;a++)r+=Number(t[a]);}let i=new BigUint64Array(r),n=0;for(let a=0;a<e;a++){let s=Number(t[a]),o=t[a+e];i.fill(o,n,n+s),n+=s;}return i;}function yy(t,e,r){let i=new Float64Array(r),n=0;for(let a=0;a<e;a++){let s=t[a],o=t[a+e];i.fill(o,n,n+s),n+=s;}return i;}function $c(t){let e=new Int32Array(t.length);e[0]=et(t[0]);let r=t.length/4*4,i=1;if(r>=4)for(;i<r-4;i+=4){let n=t[i],a=t[i+1],s=t[i+2],o=t[i+3];e[i]=et(n)+e[i-1],e[i+1]=et(a)+e[i],e[i+2]=et(s)+e[i+1],e[i+3]=et(o)+e[i+2];}for(;i!==t.length;++i)e[i]=et(t[i])+e[i-1];return e;}function Nc(t){let e=new BigInt64Array(t.length);e[0]=Lt(t[0]);let r=t.length/4*4,i=1;if(r>=4)for(;i<r-4;i+=4){let n=t[i],a=t[i+1],s=t[i+2],o=t[i+3];e[i]=Lt(n)+e[i-1],e[i+1]=Lt(a)+e[i],e[i+2]=Lt(s)+e[i+1],e[i+3]=Lt(o)+e[i+2];}for(;i!==e.length;++i)e[i]=Lt(t[i])+e[i-1];return e;}function p3(t){t[0]=je(t[0]);let e=t.length/4*4,r=1;if(e>=4)for(;r<e-4;r+=4){let i=t[r],n=t[r+1],a=t[r+2],s=t[r+3];t[r]=je(i)+t[r-1],t[r+1]=je(n)+t[r],t[r+2]=je(a)+t[r+1],t[r+3]=je(s)+t[r+2];}for(;r!==t.length;++r)t[r]=je(t[r])+t[r-1];}function f3(t,e,r){if(r===void 0){r=0;for(let a=0;a<e;a++)r+=t[a];}let i=new Int32Array(r),n=0;for(let a=0;a<e;a++){let s=t[a],o=t[a+e];o=et(o),i.fill(o,n,n+s),n+=s;}return i;}function d3(t,e,r){if(r===void 0){r=0;for(let a=0;a<e;a++)r+=Number(t[a]);}let i=new BigInt64Array(r),n=0;for(let a=0;a<e;a++){let s=Number(t[a]),o=t[a+e];o=Lt(o),i.fill(o,n,n+s),n+=s;}return i;}function y3(t,e,r){let i=new Float64Array(r),n=0;for(let a=0;a<e;a++){let s=t[a],o=t[a+e];o=je(o),i.fill(o,n,n+s),n+=s;}return i;}function mu(t){let e=t.length/4*4,r=1;if(e>=4)for(let i=t[0];r<e-4;r+=4)i=t[r]+=i,i=t[r+1]+=i,i=t[r+2]+=i,i=t[r+3]+=i;for(;r!==t.length;)t[r]+=t[r-1],++r;}function m3(t){let e=0;for(let r=0;r<t.length;r++)t[r]+=e,e=t[r];}function g3(t){if(t.length<2)return new Int32Array(t);let e=new Int32Array(t.length);e[0]=et(t[0]),e[1]=et(t[1]);let r=t.length/4*4,i=2;if(r>=4)for(;i<r-4;i+=4){let n=t[i],a=t[i+1],s=t[i+2],o=t[i+3];e[i]=et(n)+e[i-2],e[i+1]=et(a)+e[i-1],e[i+2]=et(s)+e[i],e[i+3]=et(o)+e[i+1];}for(;i!==t.length;i+=2)e[i]=et(t[i])+e[i-2],e[i+1]=et(t[i+1])+e[i-1];return e;}function my(t,e,r,i){if(t.length<2)return new Int32Array(t);let n=new Int32Array(t.length),a=et(t[0]),s=et(t[1]);n[0]=Ue(Math.round(a*e),r,i),n[1]=Ue(Math.round(s*e),r,i);let o=t.length/16,l=2;if(o>=4)for(;l<o-4;l+=4){let u=t[l],h=t[l+1],c=et(u)+a,p=et(h)+s;n[l]=Ue(Math.round(c*e),r,i),n[l+1]=Ue(Math.round(p*e),r,i);let f=t[l+2],d=t[l+3];a=et(f)+c,s=et(d)+p,n[l+2]=Ue(Math.round(a*e),r,i),n[l+3]=Ue(Math.round(s*e),r,i);}for(;l!==t.length;l+=2)a+=et(t[l]),s+=et(t[l+1]),n[l]=Ue(Math.round(a*e),r,i),n[l+1]=Ue(Math.round(s*e),r,i);return n;}function Ue(t,e,r){return Math.min(r,Math.max(e,t));}function x3(t){let e=new Int32Array(t.length+1);e[0]=0,e[1]=et(t[0]);let r=e[1];for(let i=2;i!==e.length;++i){let n=t[i-1],a=et(n);r+=a,e[i]=e[i-1]+r;}return new Uint32Array(e);}function v3(t,e,r){let i=new Int32Array(r+1);i[0]=0;let n=1,a=i[0];for(let s=0;s<e;s++){let o=t[s],l=t[s+e];l=et(l);for(let u=n;u<n+o;u++)i[u]=l+a,a=i[u];n+=o;}return i;}function b3(t,e,r){let i=new Uint32Array(r+1);i[0]=0;let n=1,a=i[0];for(let s=0;s<e;s++){let o=t[s],l=t[s+e];for(let u=n;u<n+o;u++)i[u]=l+a,a=i[u];n+=o;}return i;}function w3(t,e,r){let i=new Int32Array(r),n=0,a=0;for(let s=0;s<e;s++){let o=t[s],l=t[s+e],u=et(l);for(let h=0;h<o;h++)a+=u,i[n++]=a;}return i;}function D3(t,e,r){let i=new BigInt64Array(r),n=0,a=0n;for(let s=0;s<e;s++){let o=Number(t[s]),l=t[s+e],u=Lt(l);for(let h=0;h<o;h++)a+=u,i[n++]=a;}return i;}function Uc(t){let e=new Uint32Array(t.length);e[0]=et(t[0])>>>0;for(let r=1;r<t.length;r++)e[r]=e[r-1]+et(t[r])>>>0;return e;}function qc(t){let e=new BigUint64Array(t.length);e[0]=BigInt.asUintN(64,Lt(t[0]));for(let r=1;r<t.length;r++)e[r]=BigInt.asUintN(64,e[r-1]+Lt(t[r]));return e;}function _3(t){if(t.length<2)return new Uint32Array(t);let e=new Uint32Array(t.length);e[0]=et(t[0])>>>0,e[1]=et(t[1])>>>0;for(let r=2;r<t.length;r+=2)e[r]=e[r-2]+et(t[r])>>>0,e[r+1]=e[r-1]+et(t[r+1])>>>0;return e;}function A3(t,e,r,i){let n=my(t,e,r,i);return new Uint32Array(n);}function S3(t){return t[1];}function E3(t){return et(t[1]);}function F3(t){if(t.length===2){let e=et(t[1]);return[e,e];}return[et(t[2]),et(t[3])];}function T3(t){return t[1];}function k3(t){return Lt(t[1]);}function I3(t){if(t.length===2){let e=Lt(t[1]);return[e,e];}return[Lt(t[2]),Lt(t[3])];}var St;(function(t){t.PRESENT=\"PRESENT\",t.DATA=\"DATA\",t.OFFSET=\"OFFSET\",t.LENGTH=\"LENGTH\";})(St||={});var Nt;(function(t){t.NONE=\"NONE\",t.SINGLE=\"SINGLE\",t.SHARED=\"SHARED\",t.VERTEX=\"VERTEX\",t.MORTON=\"MORTON\",t.FSST=\"FSST\";})(Nt||={});var Ie;(function(t){t.VERTEX=\"VERTEX\",t.INDEX=\"INDEX\",t.STRING=\"STRING\",t.KEY=\"KEY\";})(Ie||={});var It;(function(t){t.VAR_BINARY=\"VAR_BINARY\",t.GEOMETRIES=\"GEOMETRIES\",t.PARTS=\"PARTS\",t.RINGS=\"RINGS\",t.TRIANGLES=\"TRIANGLES\",t.SYMBOL=\"SYMBOL\",t.DICTIONARY=\"DICTIONARY\";})(It||={});var C3=[St.PRESENT,St.DATA,St.OFFSET,St.LENGTH],jc=[Z.NONE,Z.DELTA,Z.COMPONENTWISE_DELTA,Z.RLE,Z.MORTON],M3=[ae.NONE,ae.FAST_PFOR,ae.VARINT],B3=[Nt.NONE,Nt.SINGLE,Nt.SHARED,Nt.VERTEX,Nt.MORTON,Nt.FSST],P3=[Ie.VERTEX,Ie.INDEX,Ie.STRING,Ie.KEY],z3=[It.VAR_BINARY,It.GEOMETRIES,It.PARTS,It.RINGS,It.TRIANGLES,It.SYMBOL,It.DICTIONARY];function ht(t,e){let r=O3(t,e);return r.logicalLevelTechnique1===Z.MORTON?L3(r,t,e):(Z.RLE===r.logicalLevelTechnique1||Z.RLE===r.logicalLevelTechnique2)&&ae.NONE!==r.physicalLevelTechnique?V3(r,t,e):r;}function L3(t,e,r){let i=Ot(e,r,2);return{physicalStreamType:t.physicalStreamType,logicalStreamType:t.logicalStreamType,logicalLevelTechnique1:t.logicalLevelTechnique1,logicalLevelTechnique2:t.logicalLevelTechnique2,physicalLevelTechnique:t.physicalLevelTechnique,numValues:t.numValues,byteLength:t.byteLength,decompressedCount:t.decompressedCount,numBits:i[0],coordinateShift:i[1]};}function V3(t,e,r){let i=Ot(e,r,2);return{physicalStreamType:t.physicalStreamType,logicalStreamType:t.logicalStreamType,logicalLevelTechnique1:t.logicalLevelTechnique1,logicalLevelTechnique2:t.logicalLevelTechnique2,physicalLevelTechnique:t.physicalLevelTechnique,numValues:t.numValues,byteLength:t.byteLength,decompressedCount:i[1],runs:i[0],numRleValues:i[1]};}function O3(t,e){let r=t[e.get()],i=C3[r>>4],n={};switch(i){case St.DATA:n={dictionaryType:B3[r&15]};break;case St.OFFSET:n={offsetType:P3[r&15]};break;case St.LENGTH:n={lengthType:z3[r&15]};}e.increment();let a=t[e.get()],s=jc[a>>5],o=jc[a>>2&7],l=M3[a&3];e.increment();let u=Ot(t,e,2),h=u[0],c=u[1];return{physicalStreamType:i,logicalStreamType:n,logicalLevelTechnique1:s,logicalLevelTechnique2:o,physicalLevelTechnique:l,numValues:h,byteLength:c,decompressedCount:h};}var ut;(function(t){t[t.FLAT=0]=\"FLAT\",t[t.CONST=1]=\"CONST\",t[t.SEQUENCE=2]=\"SEQUENCE\",t[t.DICTIONARY=3]=\"DICTIONARY\",t[t.FSST_DICTIONARY=4]=\"FSST_DICTIONARY\";})(ut||={});var he=class{constructor(t,e){this.values=t,this._size=e;}get(t){let e=Math.floor(t/8),r=t%8;return(this.values[e]>>r&1)==1;}set(t,e){let r=Math.floor(t/8),i=t%8;this.values[r]=this.values[r]|+!!e<<i;}getInt(t){let e=Math.floor(t/8),r=t%8;return this.values[e]>>r&1;}size(){return this._size;}getBuffer(){return this.values;}};function wr(t,e,r){if(!e)return t;let i=e.size(),n=t.constructor,a=new n(i),s=0;for(let o=0;o<i;o++)a[o]=e.get(o)?t[s++]:r;return a;}function R3(t,e,r){if(!r)return t;let i=r.size(),n=new he(t,e),a=new he(new Uint8Array(Math.ceil(i/8)),i),s=0;for(let o=0;o<i;o++){let l=r.get(o)?n.get(s++):!1;a.set(o,l);}return a.getBuffer();}function gy(t,e,r){for(let i=0;i<t;i++){let n=ht(e,r);r.add(n.byteLength);}}function oi(t,e,r,i,n){let a=$3(t,Math.ceil(e/8),r,i);return n?R3(a,e,n):a;}function $3(t,e,r,i){let n=new Uint8Array(e),a=0,s=i.get()+r;for(;a<e&&!(i.get()>=s);){let o=t[i.increment()];if(o<=127){let l=o+3,u=t[i.increment()],h=Math.min(a+l,e);n.fill(u,a,h),a=h;}else{let l=256-o;for(let u=0;u<l&&a<e;u++)n[a++]=t[i.increment()];}}return i.set(s),n;}function xy(t,e,r,i){let n=e.get(),a=n+r*Float32Array.BYTES_PER_ELEMENT,s=new Uint8Array(t.subarray(n,a)).buffer,o=new Float32Array(s);return e.set(a),i?wr(o,i,0):o;}function vy(t,e,r,i){let n=e.get(),a=n+r*Float64Array.BYTES_PER_ELEMENT,s=new Uint8Array(t.subarray(n,a)).buffer,o=new Float64Array(s);return e.set(a),i?wr(o,i,0):o;}function N3(t,e,r){let i=e.get(),n=r*Uint32Array.BYTES_PER_ELEMENT,a=new DataView(t.buffer,t.byteOffset,t.byteLength),s=new Uint32Array(r);for(let o=0;o<r;o++)s[o]=a.getUint32(i+o*Uint32Array.BYTES_PER_ELEMENT,!0);return e.add(n),s;}function U3(t,e,r){let i=e.get(),n=r*BigUint64Array.BYTES_PER_ELEMENT,a=new DataView(t.buffer,t.byteOffset,t.byteLength),s=new BigUint64Array(r);for(let o=0;o<r;o++)s[o]=a.getBigUint64(i+o*BigUint64Array.BYTES_PER_ELEMENT,!0);return e.add(n),s;}var q3=new TextDecoder();function gu(t,e,r){return r-e>=12?q3.decode(t.subarray(e,r)):j3(t,e,r);}function j3(t,e,r){let i=\"\",n=e;for(;n<r;){let a=t[n],s=null,o=a>239?4:a>223?3:a>191?2:1;if(n+o>r)break;let l,u,h;o===1?a<128&&(s=a):o===2?(l=t[n+1],(l&192)==128&&(s=(a&31)<<6|l&63,s<=127&&(s=null))):o===3?(l=t[n+1],u=t[n+2],(l&192)==128&&(u&192)==128&&(s=(a&15)<<12|(l&63)<<6|u&63,(s<=2047||s>=55296&&s<=57343)&&(s=null))):o===4&&(l=t[n+1],u=t[n+2],h=t[n+3],(l&192)==128&&(u&192)==128&&(h&192)==128&&(s=(a&15)<<18|(l&63)<<12|(u&63)<<6|h&63,(s<=65535||s>=1114112)&&(s=null))),s===null?(s=65533,o=1):s>65535&&(s-=65536,i+=String.fromCharCode(s>>>10&1023|55296),s=56320|s&1023),i+=String.fromCharCode(s),n+=o;}return i;}function Da(t,e,r,i,n){return Z3(li(t,e,r),r,i,n);}function zt(t,e,r,i,n){return H3(li(t,e,r),r,i,n);}function Ge(t,e,r){return J3(li(t,e,r),r);}function li(t,e,r){let i=r.physicalLevelTechnique;switch(i){case ae.FAST_PFOR:return o3(t,r.numValues,r.byteLength,e);case ae.VARINT:return Ot(t,e,r.numValues);case ae.NONE:return N3(t,e,r.numValues);default:throw Error(`Specified physicalLevelTechnique ${i} is not supported (yet).`);}}function xn(t,e,r){let i=r.physicalLevelTechnique;switch(i){case ae.VARINT:return yu(t,e,r.numValues);case ae.NONE:return U3(t,e,r.numValues);default:throw Error(`Specified physicalLevelTechnique ${i} is not supported (yet).`);}}function G3(t,e,r){let i=li(t,e,r);return i.length===1?et(i[0]):E3(i);}function xu(t,e,r){let i=li(t,e,r);return i.length===1?r.logicalLevelTechnique1===Z.DELTA?et(i[0]):i[0]:S3(i);}function by(t,e,r){return F3(li(t,e,r));}function wy(t,e,r){return I3(yu(t,e,r.numValues));}function Dy(t,e,r,i){return Ay(xn(t,e,r),r,i);}function vu(t,e,r,i){return Sy(xn(t,e,r),r,i);}function X3(t,e,r,i){let n=Y3(t,e,r,!1);return i?wr(n,i,0):n;}function Y3(t,e,r,i){if(r.physicalLevelTechnique===ae.VARINT)return K3(n3(t,e,r.numValues),r,i);let n=xn(t,e,r),a=i?Ay(n,r):Sy(n,r);return Float64Array.from(a,Number);}function W3(t,e,r){let i=xn(t,e,r);return i.length===1?Lt(i[0]):k3(i);}function _y(t,e,r){let i=xn(t,e,r);return i.length===1?r.logicalLevelTechnique1===Z.DELTA?Lt(i[0]):i[0]:T3(i);}function Z3(t,e,r,i){let n;switch(e.logicalLevelTechnique1){case Z.DELTA:if(e.logicalLevelTechnique2===Z.RLE){let a=e;if(!i)return w3(t,a.runs,a.numRleValues);t=ol(t,a.runs,a.numRleValues),n=$c(t);}else n=$c(t);break;case Z.RLE:n=f3(t,e.runs,e.numRleValues);break;case Z.MORTON:mu(t),n=new Int32Array(t);break;case Z.COMPONENTWISE_DELTA:if(r&&!i)return my(t,r.scale,r.min,r.max);n=g3(t);break;case Z.NONE:n=u3(t);break;default:throw Error(`The specified Logical level technique is not supported: ${e.logicalLevelTechnique1}`);}return i?wr(n,i,0):n;}function H3(t,e,r,i){let n;switch(e.logicalLevelTechnique1){case Z.DELTA:if(e.logicalLevelTechnique2===Z.RLE){let a=e;n=Uc(ol(t,a.runs,a.numRleValues));}else n=Uc(t);break;case Z.RLE:n=ol(t,e.runs,e.numRleValues);break;case Z.MORTON:mu(t),n=t;break;case Z.COMPONENTWISE_DELTA:n=r&&!i?A3(t,r.scale,r.min,r.max):_3(t);break;case Z.NONE:n=t;break;default:throw Error(`The specified Logical level technique is not supported: ${e.logicalLevelTechnique1}`);}return i?wr(n,i,0):n;}function Ay(t,e,r){let i;switch(e.logicalLevelTechnique1){case Z.DELTA:if(e.logicalLevelTechnique2===Z.RLE){let n=e;if(!r)return D3(t,n.runs,n.numRleValues);t=ll(t,n.runs,n.numRleValues),i=Nc(t);}else i=Nc(t);break;case Z.RLE:i=d3(t,e.runs,e.numRleValues);break;case Z.NONE:i=h3(t);break;default:throw Error(`The specified Logical level technique is not supported: ${e.logicalLevelTechnique1}`);}return r?wr(i,r,0n):i;}function Sy(t,e,r){let i;switch(e.logicalLevelTechnique1){case Z.DELTA:if(e.logicalLevelTechnique2===Z.RLE){let n=e;i=qc(ll(t,n.runs,n.numRleValues));}else i=qc(t);break;case Z.RLE:i=ll(t,e.runs,e.numRleValues);break;case Z.NONE:i=t;break;default:throw Error(`The specified Logical level technique is not supported: ${e.logicalLevelTechnique1}`);}return r?wr(i,r,0n):i;}function K3(t,e,r){switch(e.logicalLevelTechnique1){case Z.DELTA:if(e.logicalLevelTechnique2===Z.RLE){let i=e;t=yy(t,i.runs,i.numRleValues);}return p3(t),t;case Z.RLE:return t6(t,e,r);case Z.NONE:return r&&c3(t),t;default:throw Error(`The specified Logical level technique is not supported: ${e.logicalLevelTechnique1}`);}}function J3(t,e){if(e.logicalLevelTechnique1===Z.DELTA&&e.logicalLevelTechnique2===Z.NONE)return x3(t);if(e.logicalLevelTechnique1===Z.RLE&&e.logicalLevelTechnique2===Z.NONE){let r=e;return b3(t,r.runs,r.numRleValues);}if(e.logicalLevelTechnique1===Z.NONE&&e.logicalLevelTechnique2===Z.NONE){m3(t);let r=new Uint32Array(e.numValues+1);return r[0]=0,r.set(t,1),r;}if(e.logicalLevelTechnique1===Z.DELTA&&e.logicalLevelTechnique2===Z.RLE){let r=e,i=v3(t,r.runs,r.numRleValues);return mu(i),new Uint32Array(i);}throw Error(\"Only delta encoding is supported for transforming length to offset streams yet.\");}function Wa(t,e,r,i,n=\"int32\"){let a=t.logicalLevelTechnique1;if(a===Z.RLE)return t.runs===1?ut.CONST:ut.FLAT;if(a!==Z.DELTA||t.logicalLevelTechnique2!==Z.RLE)return t.numValues===1?ut.CONST:ut.FLAT;let s=e instanceof he?e.size():e,o=t;if(o.numRleValues!==s)return ut.FLAT;if(o.runs===1)return ut.SEQUENCE;if(o.runs!==2)return t.numValues===1?ut.CONST:ut.FLAT;let l=i.get();if(t.physicalLevelTechnique===ae.VARINT)return Q3(r,i,n)?ut.SEQUENCE:t.numValues===1?ut.CONST:ut.FLAT;let u=i.get(),h=new Int32Array(r.buffer,r.byteOffset+u,4);return i.set(l),h[2]===2&&h[3]===2?ut.SEQUENCE:t.numValues===1?ut.CONST:ut.FLAT;}function Q3(t,e,r){let i=new py(e.get());if(r===\"int64\"){let a=yu(t,i,4);return a[2]===2n&&a[3]===2n;}let n=Ot(t,i,4);return n[2]===2&&n[3]===2;}function t6(t,e,r){return r?y3(t,e.runs,e.numRleValues):yy(t,e.runs,e.numRleValues);}var Ey=class extends Ya{getValueFromBuffer(t){return this.dataBuffer[t];}},Fy=class extends hy{constructor(t,e,r,i,n){super(t,n?BigInt64Array.of(e):BigUint64Array.of(e),r,i);}getValueFromBuffer(t){return this.dataBuffer[0]+BigInt(t)*this.delta;}};function bu(t,e,r){return{x:Gc(t,e)-r,y:Gc(t>>1,e)-r};}function Gc(t,e){let r=0;for(let i=0;i<e;i++)r|=(t&1<<2*i)>>i;return r;}var Vt;(function(t){t[t.POINT=0]=\"POINT\",t[t.LINESTRING=1]=\"LINESTRING\",t[t.POLYGON=2]=\"POLYGON\",t[t.MULTIPOINT=3]=\"MULTIPOINT\",t[t.MULTILINESTRING=4]=\"MULTILINESTRING\",t[t.MULTIPOLYGON=5]=\"MULTIPOLYGON\";})(Vt||={});var e6;(function(t){t[t.POINT=0]=\"POINT\",t[t.LINESTRING=1]=\"LINESTRING\",t[t.POLYGON=2]=\"POLYGON\";})(e6||={});var Dr;(function(t){t[t.MORTON=0]=\"MORTON\",t[t.VEC_2=1]=\"VEC_2\",t[t.VEC_3=2]=\"VEC_3\";})(Dr||={});function r6(t){let e=Array(t.numGeometries),r=1,i=1,n=1,a=0,s=0,o=0,l=t.mortonSettings,u=t.topologyVector,h=u.geometryOffsets,c=u.partOffsets,p=u.ringOffsets,f=t.vertexOffsets,d=!f||f.length===0,y=t.containsPolygonGeometry(),m=t.vertexBuffer;for(let g=0;g<t.numGeometries;g++){let x=t.geometryType(g);switch(x){case Vt.POINT:{let b,v;if(d)b=m[s++],v=m[s++];else if(t.vertexBufferType===Dr.MORTON){let w=m[f[o++]],_=bu(w,l.numBits,l.coordinateShift);b=_.x,v=_.y;}else{let w=f[o++]*2;b=m[w],v=m[w+1];}e[a++]=[[new M(b,v)]],h&&n++,c&&r++,p&&i++;}break;case Vt.MULTIPOINT:{let b=h[n]-h[n-1];n++;let v;if(d){v=Array(b);for(let w=0;w<b;w++){let _=m[s++],A=m[s++];v[w]=new M(_,A);}}else v=nr(t.vertexBufferType,m,f,o,b,!1,l),o+=b;e[a++]=v.map(w=>[w]),r+=b,i+=b;}break;case Vt.LINESTRING:{let b;y?(b=p[i]-p[i-1],i++):b=c[r]-c[r-1],r++;let v;d?(v=Pr(m,s,b,!1),s+=b*2):(v=nr(t.vertexBufferType,m,f,o,b,!1,l),o+=b),e[a++]=[v],h&&n++;}break;case Vt.POLYGON:{let b=c[r]-c[r-1];r++;let v=Array(b-1),w,_=p[i]-p[i-1];if(i++,d){w=Pr(m,s,_,!0),s+=_*2;for(let A=0;A<v.length;A++)_=p[i]-p[i-1],i++,v[A]=Pr(m,s,_,!0),s+=_*2;}else{w=nr(t.vertexBufferType,m,f,o,_,!0,l),o+=_;for(let A=0;A<v.length;A++)_=p[i]-p[i-1],i++,v[A]=nr(t.vertexBufferType,m,f,o,_,!0,l),o+=_;}e[a++]=[w].concat(v),h&&n++;}break;case Vt.MULTILINESTRING:{let b=h[n]-h[n-1];n++;let v=Array(b);for(let w=0;w<b;w++){let _;if(y?(_=p[i]-p[i-1],i++):_=c[r]-c[r-1],r++,d)v[w]=Pr(m,s,_,!1),s+=_*2;else{let A=nr(t.vertexBufferType,m,f,o,_,!1,l);v[w]=A,o+=_;}}e[a++]=v;}break;case Vt.MULTIPOLYGON:{let b=h[n]-h[n-1];n++;let v=Array(b);for(let w=0;w<b;w++){let _=c[r]-c[r-1];r++;let A,S=Array(_-1),F=p[i]-p[i-1];i++,d?(A=Pr(m,s,F,!0),s+=F*2):(A=nr(t.vertexBufferType,m,f,o,F,!0,l),o+=F);for(let z=0;z<S.length;z++){let $=p[i]-p[i-1];i++,d?(S[z]=Pr(m,s,$,!0),s+=$*2):(S[z]=nr(t.vertexBufferType,m,f,o,$,!0,l),o+=$);}v[w]=[A].concat(S);}e[a++]=v.flat();}break;default:throw Error(`The specified geometry type (${x}) is currently not supported.`);}}return e;}function nr(t,e,r,i,n,a,s){return t===Dr.MORTON?n6(e,r,i,n,a,s):i6(e,r,i,n,a);}function Pr(t,e,r,i){let n=Array(i?r+1:r);for(let a=0;a<r*2;a+=2){let s=t[e+a],o=t[e+a+1];n[a/2]=new M(s,o);}return i&&(n[n.length-1]=n[0]),n;}function i6(t,e,r,i,n){let a=Array(n?i+1:i);for(let s=0;s<i*2;s+=2){let o=e[r+s/2]*2,l=t[o],u=t[o+1];a[s/2]=new M(l,u);}return n&&(a[a.length-1]=a[0]),a;}function n6(t,e,r,i,n,a){let s=Array(n?i+1:i);for(let o=0;o<i;o++){let l=t[e[r+o]],u=bu(l,a.numBits,a.coordinateShift);s[o]=new M(u.x,u.y);}return n&&(s[s.length-1]=s[0]),s;}var Ty=class{constructor(t,e,r,i,n){this._vertexBufferType=t,this._topologyVector=e,this._vertexOffsets=r,this._vertexBuffer=i,this._mortonSettings=n;}get vertexBufferType(){return this._vertexBufferType;}get topologyVector(){return this._topologyVector;}get vertexOffsets(){return this._vertexOffsets;}get vertexBuffer(){return this._vertexBuffer;}getSimpleEncodedVertex(t){let e=this.vertexOffsets?this.vertexOffsets[t]*2:t*2;return[this.vertexBuffer[e],this.vertexBuffer[e+1]];}getVertex(t){if(this.vertexOffsets&&this.mortonSettings){let r=this.vertexOffsets[t],i=this.vertexBuffer[r],n=bu(i,this.mortonSettings.numBits,this.mortonSettings.coordinateShift);return[n.x,n.y];}let e=this.vertexOffsets?this.vertexOffsets[t]*2:t*2;return[this.vertexBuffer[e],this.vertexBuffer[e+1]];}getGeometries(){return r6(this);}get mortonSettings(){return this._mortonSettings;}};function a6(t,e,r,i,n){return new ky(t,e,Dr.VEC_2,r,i,n);}function s6(t,e,r,i,n,a){return new ky(t,e,Dr.MORTON,r,i,n,a);}var ky=class extends Ty{constructor(t,e,r,i,n,a,s){super(r,i,n,a,s),this._numGeometries=t,this._geometryType=e;}geometryType(t){return this._geometryType;}get numGeometries(){return this._numGeometries;}containsPolygonGeometry(){return this._geometryType===Vt.POLYGON||this._geometryType===Vt.MULTIPOLYGON;}containsSingleGeometryType(){return!0;}};function Iy(t,e,r,i){return new Cy(Dr.VEC_2,t,e,r,i);}function o6(t,e,r,i,n){return new Cy(Dr.MORTON,t,e,r,i,n);}var Cy=class extends Ty{constructor(t,e,r,i,n,a){super(t,r,i,n,a),this._geometryTypes=e;}geometryType(t){return this._geometryTypes[t];}get numGeometries(){return this._geometryTypes.length;}containsPolygonGeometry(){for(let t=0;t<this.numGeometries;t++)if(this.geometryType(t)===Vt.POLYGON||this.geometryType(t)===Vt.MULTIPOLYGON)return!0;return!1;}containsSingleGeometryType(){return!1;}},My=class{constructor(t,e,r,i){this._triangleOffsets=t,this._indexBuffer=e,this._vertexBuffer=r,this._topologyVector=i;}get triangleOffsets(){return this._triangleOffsets;}get indexBuffer(){return this._indexBuffer;}get vertexBuffer(){return this._vertexBuffer;}get topologyVector(){return this._topologyVector;}getGeometries(){if(!this._topologyVector)throw Error(\"Cannot convert GpuVector to coordinates without topology information\");let t=new Uint32Array(this.numGeometries);for(let e=0;e<this.numGeometries;e++)t[e]=this.geometryType(e);return Iy(t,this._topologyVector,void 0,this._vertexBuffer).getGeometries();}[Symbol.iterator](){return null;}};function Xc(t,e,r,i,n,a){return new l6(t,e,r,i,n,a);}var l6=class extends My{constructor(t,e,r,i,n,a){super(r,i,n,a),this._numGeometries=t,this._geometryType=e;}geometryType(t){return this._geometryType;}get numGeometries(){return this._numGeometries;}containsSingleGeometryType(){return!0;}};function Yc(t,e,r,i,n){return new u6(t,e,r,i,n);}var u6=class extends My{constructor(t,e,r,i,n){super(e,r,i,n),this._geometryTypes=t;}geometryType(t){return this._geometryTypes[t];}get numGeometries(){return this._geometryTypes.length;}containsSingleGeometryType(){return!1;}};function h6(t,e,r,i,n){let a=ht(t,r),s=Wa(a,i,t,r),o,l,u,h;if(s===ut.CONST){let b=xu(t,r,a),v,w,_,A;for(let S=0;S<e-1;S++){let F=ht(t,r);switch(F.physicalStreamType){case St.LENGTH:switch(F.logicalStreamType.lengthType){case It.GEOMETRIES:v=Ge(t,r,F);break;case It.PARTS:w=Ge(t,r,F);break;case It.RINGS:_=Ge(t,r,F);break;case It.TRIANGLES:A=Ge(t,r,F);}break;case St.OFFSET:switch(F.logicalStreamType.offsetType){case Ie.VERTEX:o=zt(t,r,F);break;case Ie.INDEX:h=zt(t,r,F);}break;case St.DATA:if(Nt.VERTEX===F.logicalStreamType.dictionaryType)l=Da(t,r,F,n);else{let z=F;u={numBits:z.numBits,coordinateShift:z.coordinateShift},l=zt(t,r,F,n);}}}return h?v!==void 0||w!==void 0?Xc(i,b,A,h,l,{geometryOffsets:v,partOffsets:w,ringOffsets:_}):Xc(i,b,A,h,l):u===void 0?a6(i,b,{geometryOffsets:v,partOffsets:w,ringOffsets:_},o,l):s6(i,b,{geometryOffsets:v,partOffsets:w,ringOffsets:_},o,l,u);}let c=zt(t,r,a),p,f,d,y;for(let b=0;b<e-1;b++){let v=ht(t,r);switch(v.physicalStreamType){case St.LENGTH:switch(v.logicalStreamType.lengthType){case It.GEOMETRIES:p=zt(t,r,v);break;case It.PARTS:f=zt(t,r,v);break;case It.RINGS:d=zt(t,r,v);break;case It.TRIANGLES:y=Ge(t,r,v);}break;case St.OFFSET:switch(v.logicalStreamType.offsetType){case Ie.VERTEX:o=zt(t,r,v);break;case Ie.INDEX:h=zt(t,r,v);}break;case St.DATA:if(Nt.VERTEX===v.logicalStreamType.dictionaryType)l=Da(t,r,v,n);else{let w=v;u={numBits:w.numBits,coordinateShift:w.coordinateShift},l=zt(t,r,v,n);}}}let m,g,x;return p?(m=js(c,p,2),f&&d?(g=Wc(c,m,f,!1),x=p6(c,m,g,d)):f&&(g=c6(c,m,f))):f&&d?(g=js(c,f,1),x=Wc(c,g,d,!0)):f&&(g=js(c,f,0)),h&&!g?Yc(c,y,h,l):h?Yc(c,y,h,l,{geometryOffsets:m,partOffsets:g,ringOffsets:x}):u===void 0?Iy(c,{geometryOffsets:m,partOffsets:g,ringOffsets:x},o,l):o6(c,{geometryOffsets:m,partOffsets:g,ringOffsets:x},o,l,u);}function js(t,e,r){let i=new Uint32Array(t.length+1),n=0;i[0]=n;let a=0;for(let s=0;s<t.length;s++)n=i[s+1]=n+(t[s]>r?e[a++]:1);return i;}function Wc(t,e,r,i){let n=new Uint32Array(e[e.length-1]+1),a=0;n[0]=a;let s=1,o=0;for(let l=0;l<t.length;l++){let u=t[l],h=e[l+1]-e[l];if(u===5||u===2||i&&(u===4||u===1))for(let c=0;c<h;c++)a=n[s++]=a+r[o++];else for(let c=0;c<h;c++)n[s++]=++a;}return n;}function c6(t,e,r){let i=new Uint32Array(e[e.length-1]+1),n=0;i[0]=n;let a=1,s=0;for(let o=0;o<t.length;o++){let l=t[o],u=e[o+1]-e[o];if(l===4||l===1)for(let h=0;h<u;h++)n=i[a++]=n+r[s++];else for(let h=0;h<u;h++)i[a++]=++n;}return i;}function p6(t,e,r,i){let n=new Uint32Array(r[r.length-1]+1),a=0;n[0]=a;let s=1,o=1,l=0;for(let u=0;u<t.length;u++){let h=t[u],c=e[u+1]-e[u];if(h!==0&&h!==3)for(let p=0;p<c;p++){let f=r[s]-r[s-1];s++;for(let d=0;d<f;d++)a=n[o++]=a+i[l++];}else for(let p=0;p<c;p++)n[o++]=++a,s++;}return n;}var f6=class extends br{constructor(t,e,r){super(t,e.getBuffer(),r),this.dataVector=e;}getValueFromBuffer(t){return this.dataVector.get(t);}},d6=class extends Ya{getValueFromBuffer(t){return this.dataBuffer[t];}},By=class extends br{constructor(t,e,r,i){super(t,i?BigInt64Array.of(e):BigUint64Array.of(e),r);}getValueFromBuffer(t){return this.dataBuffer[0];}},wu=class extends br{constructor(t,e,r,i){super(t,r,i),this.offsetBuffer=e;}},Zc=class extends wu{constructor(t,e,r,i){super(t,e,r,i??e.length-1);}getValueFromBuffer(t){let e=this.offsetBuffer[t],r=this.offsetBuffer[t+1];return gu(this.dataBuffer,e,r);}},Zr=class extends wu{constructor(t,e,r,i,n){super(t,r,i,n??e.length),this.indexBuffer=e,this.indexBuffer=e;}getValueFromBuffer(t){let e=this.indexBuffer[t],r=this.offsetBuffer[e],i=this.offsetBuffer[e+1];return gu(this.dataBuffer,r,i);}};function y6(t,e){let r=0;for(let i=0;i<e.length;i++){let n=e[i];n===255?(r++,i++):r+=t[n];}return r;}function m6(t,e,r){let i=new Uint32Array(e.length);for(let s=1;s<e.length;s++)i[s]=i[s-1]+e[s-1];let n=new Uint8Array(y6(e,r)),a=0;for(let s=0;s<r.length;s++){let o=r[s];if(o===255)s++,n[a++]=r[s];else{let l=e[o],u=i[o];for(;l-->0;)n[a++]=t[u++];}}return n;}var Py=class extends wu{constructor(t,e,r,i,n,a,s,o){super(t,r,i,s??e.length),this.indexBuffer=e,this.symbolOffsetBuffer=n,this.symbolTableBuffer=a,this.sharedDictionaryCache=o;}getValueFromBuffer(t){this.decodedDictionary??(this.decodedDictionary=this.sharedDictionaryCache?.decodedDictionary,this.decodedDictionary??(this.decodedDictionary=this.decodeDictionary(),this.sharedDictionaryCache&&(this.sharedDictionaryCache.decodedDictionary=this.decodedDictionary)));let e=this.indexBuffer[t],r=this.offsetBuffer[e],i=this.offsetBuffer[e+1];return gu(this.decodedDictionary,r,i);}decodeDictionary(){return this.symbolLengthBuffer??=this.offsetToLengthBuffer(this.symbolOffsetBuffer),m6(this.symbolTableBuffer,this.symbolLengthBuffer,this.dataBuffer);}offsetToLengthBuffer(t){let e=new Uint32Array(t.length-1),r=t[0];for(let i=1;i<t.length;i++){let n=t[i];e[i-1]=n-r,r=n;}return e;}};function zy(t,e,r,i,n){let a,s,o,l,u,h=n,c,p;for(let f=0;f<i;f++){let d=ht(e,r);switch(d.physicalStreamType){case St.PRESENT:{let y=new he(oi(e,d.numValues,d.byteLength,r),d.numValues);h=n??y;break;}case St.OFFSET:s=zt(e,r,d,void 0,h);break;case St.LENGTH:{let y=Ge(e,r,d);It.DICTIONARY===d.logicalStreamType.lengthType?a=y:It.SYMBOL===d.logicalStreamType.lengthType?l=y:c=y;break;}case St.DATA:{let y=e.subarray(r.get(),r.get()+d.byteLength);r.add(d.byteLength);let m=d.logicalStreamType.dictionaryType;Nt.FSST===m?u=y:Nt.SINGLE===m||Nt.SHARED===m?o=y:Nt.NONE===m&&(p=y);break;}}}return g6(t,u,s,a,o,l,h)??x6(t,o,s,a,h)??v6(t,c,p,s,h);}function g6(t,e,r,i,n,a,s){if(e){if(!r||!i||!n||!a)throw Error(`Incomplete FSST dictionary string column \"${t}\"`);return new Py(t,r,i,n,a,e,s);}}function x6(t,e,r,i,n){if(e){if(!r||!i)throw Error(`Incomplete dictionary string column \"${t}\"`);return n?new Zr(t,r,i,e,n):new Zr(t,r,i,e);}}function v6(t,e,r,i,n){if(e&&r){if(i)return n?new Zr(t,i,e,r,n):new Zr(t,i,e,r);if(n&&n.size()!==e.length-1){let a=new Uint32Array(n.size()),s=0;for(let o=0;o<n.size();o++)n.get(o)?a[o]=s++:a[o]=0;return new Zr(t,a,e,r,n);}return n?new Zc(t,e,r,n):new Zc(t,e,r);}}function b6(t,e,r,i){let n,a,s,o,l=!1;for(;!l;){let f=ht(t,e);switch(f.physicalStreamType){case St.LENGTH:It.DICTIONARY===f.logicalStreamType.lengthType?n=Ge(t,e,f):s=Ge(t,e,f);break;case St.DATA:Nt.SINGLE===f.logicalStreamType.dictionaryType||Nt.SHARED===f.logicalStreamType.dictionaryType?(a=t.subarray(e.get(),e.get()+f.byteLength),l=!0):o=t.subarray(e.get(),e.get()+f.byteLength),e.add(f.byteLength);}}if(r.type!==\"complexType\")throw Error(`Shared dictionary column ${r.name} must be a complex (struct) column.`);if(!n||!a)throw Error(`Incomplete shared dictionary for column \"${r.name}\"`);let u=r.complexType.children,h=[],c=o?{}:void 0,p=0;for(let f of u){let d=Ot(t,e,1)[0];if(d===0)continue;let y=f.name?`${r.name}${f.name}`:r.name;if(i&&!i.has(y)){gy(d,t,e);continue;}if(f.type!==\"scalarField\"||f.scalarField.physicalType!==rt.STRING)throw Error(\"Currently only scalar string fields are implemented for a struct.\");if(d>1&&!f.nullable||d===1&&f.nullable)throw Error(`The number of streams for the child field ${f.name} does not match its nullability. nullibilty: ${f.nullable}, numStreams: ${d}`);let m;if(f.nullable){let x=ht(t,e);m=new he(oi(t,x.numValues,x.byteLength,e),x.numValues);}let g=zt(t,e,ht(t,e),void 0,m);if(o){if(!s)throw Error(`Incomplete shared FSST dictionary for column \"${y}\"`);h[p++]=new Py(y,g,n,a,s,o,m,c);}else h[p++]=new Zr(y,g,n,a,m);}return h;}var Hc=class extends br{constructor(t,e,r){super(t,new Uint8Array(),r??e.length),this.values=e;}getValueFromBuffer(t){return this.values[t];}},Ce;(function(t){t[t.STRING=1]=\"STRING\",t[t.INT32=2]=\"INT32\",t[t.UINT32=4]=\"UINT32\",t[t.INT64=8]=\"INT64\",t[t.UINT64=16]=\"UINT64\",t[t.FLOAT=32]=\"FLOAT\",t[t.DOUBLE=64]=\"DOUBLE\",t[t.PRESENCE=128]=\"PRESENCE\";})(Ce||={});var lr;(function(t){t[t.FALSE=0]=\"FALSE\",t[t.TRUE=1]=\"TRUE\",t[t.START_MAP=2]=\"START_MAP\",t[t.START_LIST=3]=\"START_LIST\",t[t.COUNT=4]=\"COUNT\";})(lr||={});function w6(t,e,r,i){let n=D6(r);if(i===0)return n.map(h=>new Hc(h,[]));let a=_6(t,e,i),s=(a.presentStream?a.presentCount:a.lengthStream.length)/n.length,o=[],l=0,u=0;for(let h=0;h<n.length;h++){let c=T6(a,h,s,l,u);o.push(new Hc(n[h],c.value,c.nullabilityBuffer)),l=c.countsEnd,u=c.valuesEnd;}return o;}function D6(t){let e=t.type===\"complexType\"?t.complexType.children:void 0;return!e||e.length===0?[t.name]:e.map(r=>t.name+(r.name??\"\"));}function _6(t,e,r){let i=t[e.get()];e.add(1);let n=zt(t,e,ht(t,e)),a=r-1,s=[];i&Ce.STRING&&(a-=A6(t,e,s)),a-=S6(t,e,i,s),a-=E6(t,e,i,s);let o,l=0;if(i&Ce.PRESENCE){let h=F6(t,e);o=h.value,l=h.count,a--;}let u=new Uint32Array();if(a>0&&(u=zt(t,e,ht(t,e)),a--),a!==0)throw Error(`Unexpected number of remaining streams while decoding map column: ${a}`);return{lengthStream:n,dictionary:s,presentStream:o,presentCount:l,flattenedValues:u};}function A6(t,e,r){let i=t[e.get()];e.add(1);let n=zy(\"\",t,e,i);if(n)for(let a=0;a<n.size;a++)r.push(n.getValue(a));return i;}function S6(t,e,r,i){let n=0;return r&Ce.INT32?(Ur(i,Da(t,e,ht(t,e))),n++):r&Ce.INT64&&(Ur(i,Dy(t,e,ht(t,e))),n++),r&Ce.UINT32?(Ur(i,zt(t,e,ht(t,e))),n++):r&Ce.UINT64&&(Ur(i,vu(t,e,ht(t,e))),n++),n;}function E6(t,e,r,i){let n=0;return r&Ce.FLOAT&&(Ur(i,xy(t,e,ht(t,e).numValues)),n++),r&Ce.DOUBLE&&(Ur(i,vy(t,e,ht(t,e).numValues)),n++),n;}function F6(t,e){let r=ht(t,e);if(r.physicalStreamType!==St.PRESENT)throw Error(`Expected PRESENT stream for map column but found: ${r.physicalStreamType}`);let i=r.numValues,n=e.get(),a=new he(oi(t,i,r.byteLength,e),i);return e.set(n+r.byteLength),{value:a,count:i};}function T6(t,e,r,i,n){let{lengthStream:a,flattenedValues:s,presentStream:o,dictionary:l}=t,u=e*r,h=r,c;if(o){c=new he(new Uint8Array(Math.ceil(r/8)),r),h=0;for(let x=0;x<r;x++)o.get(u+x)&&(c.set(x,!0),h++);}let p=i+h;if(p>a.length)throw Error(\"Merged map counts underflow while decoding child streams\");let f=Array(r),d=i,y=n;for(let x=0;x<r;x++){if(o&&!o.get(u+x)){f[x]=null;continue;}let b=y+a[d++];if(b>s.length)throw Error(\"Map value stream underflow while decoding feature payload\");let v=k6(s,y,b,l);f[x]=v.value,y=v.nextIndex;}let m=0;for(let x=i;x<p;x++)m+=a[x];let g=n+m;if(y!==g)throw Error(\"Unused flattened map values remain after decode\");return{value:f,nullabilityBuffer:c,countsEnd:p,valuesEnd:g};}function k6(t,e,r,i){return r-e===1||t[e]===lr.START_LIST?Du(t,e,r,i):Ly(t,e,r,i);}function Ly(t,e,r,i){let n=Object.create(null),a=e;for(;a<r;){let s=Vy(t[a++],i);if(typeof s!=\"string\")throw Error(`Map key dictionary index does not resolve to a string: ${s}`);let o=Du(t,a,r,i);n[s]=o.value,a=o.nextIndex;}return{value:n,nextIndex:a};}function Du(t,e,r,i){if(e>=r)throw Error(\"Unexpected end of map value stream\");let n=t[e];if(n===lr.FALSE)return{value:!1,nextIndex:e+1};if(n===lr.TRUE)return{value:!0,nextIndex:e+1};if(n===lr.START_MAP){let a=Kc(t,e,r);return{value:Ly(t,e+2,a,i).value,nextIndex:a};}if(n===lr.START_LIST){let a=Kc(t,e,r),s=[],o=e+2;for(;o<a;){let l=Du(t,o,a,i);s.push(l.value),o=l.nextIndex;}return{value:s,nextIndex:a};}return{value:Vy(n,i),nextIndex:e+1};}function Kc(t,e,r){if(e+1>=r)throw Error(\"Missing length for nested map/list payload\");let i=t[e+1];if(i<2)throw Error(`Invalid nested payload length: ${i}`);let n=e+i;if(n>r)throw Error(\"Nested payload exceeds containing payload bounds\");return n;}function Vy(t,e){let r=t-lr.COUNT;if(r<0||r>=e.length)throw Error(`Scalar dictionary index out of range: ${t}`);return e[r];}function Ur(t,e){for(let r of e)t.push(r);}function I6(t,e,r,i,n,a){return r.type===\"scalarType\"?a&&!a.has(r.name)?(gy(i,t,e),null):C6(i,t,e,n,r.scalarType,r):r.complexType?.physicalType===Ze.MAP?w6(t,e,r,i):i===0?null:b6(t,e,r,a);}function C6(t,e,r,i,n,a){let s;if(t===0)return null;if(a.nullable){let l=ht(e,r),u=l.numValues,h=r.get(),c=oi(e,u,l.byteLength,r);r.set(h+l.byteLength),s=new he(c,l.numValues);}let o=s??i;switch(n.physicalType){case rt.UINT_32:case rt.INT_32:return L6(e,r,a,n,o);case rt.STRING:{let l=a.nullable?t-1:t;return zy(a.name,e,r,l,s)??null;}case rt.BOOLEAN:return M6(e,r,a,i,o);case rt.UINT_64:case rt.INT_64:return z6(e,r,a,o,n);case rt.FLOAT:return B6(e,r,a,o);case rt.DOUBLE:return P6(e,r,a,o);default:throw Error(`The specified data type for the field is currently not supported: ${n}`);}}function M6(t,e,r,i,n){let a=ht(t,e),s=a.numValues,o=e.get(),l=vn(n)?n:void 0,u=oi(t,s,a.byteLength,e,l);e.set(o+a.byteLength);let h=new he(u,s);return new f6(r.name,h,n);}function B6(t,e,r,i){let n=ht(t,e),a=vn(i)?i:void 0,s=xy(t,e,n.numValues,a);return new d6(r.name,s,i);}function P6(t,e,r,i){let n=ht(t,e),a=vn(i)?i:void 0,s=vy(t,e,n.numValues,a);return new uu(r.name,s,i);}function z6(t,e,r,i,n){let a=ht(t,e),s=Wa(a,i,t,e,\"int64\"),o=n.physicalType===rt.INT_64;if(s===ut.FLAT){let u=vn(i)?i:void 0,h=o?Dy(t,e,a,u):vu(t,e,a,u);return new Ey(r.name,h,i);}if(s===ut.SEQUENCE){let u=wy(t,e,a);return new Fy(r.name,u[0],u[1],a.numRleValues,o);}let l=o?W3(t,e,a):_y(t,e,a);return new By(r.name,l,i,o);}function L6(t,e,r,i,n){let a=ht(t,e),s=Wa(a,n,t,e),o=i.physicalType===rt.INT_32;if(s===ut.FLAT){let u=vn(n)?n:void 0,h=o?Da(t,e,a,void 0,u):zt(t,e,a,void 0,u);return new lu(r.name,h,n);}if(s===ut.SEQUENCE){let u=by(t,e,a);return new hu(r.name,u[0],u[1],a.numRleValues,o);}let l=o?G3(t,e,a):xu(t,e,a);return new cu(r.name,l,n,o);}function vn(t){return t instanceof he;}var kt={ID:0,ID_NULLABLE:1,ID_LONG:2,GEOMETRY:4,SCALAR_BASE:10,STRUCT:30,MAP:31};function Oy(t){switch(t){case kt.ID:case kt.ID|kt.ID_NULLABLE:case kt.ID|kt.ID_LONG:case kt.ID|kt.ID_LONG|kt.ID_NULLABLE:return{nullable:(t&kt.ID_NULLABLE)!==0,columnScope:Oi.FEATURE,type:\"scalarType\",scalarType:{longID:(t&kt.ID_LONG)!==0,type:\"logicalType\",logicalType:cy.ID}};case kt.GEOMETRY:return{nullable:!1,columnScope:Oi.FEATURE,type:\"complexType\",complexType:{type:\"physicalType\",physicalType:Ze.GEOMETRY,children:[]}};case kt.STRUCT:return{nullable:!1,columnScope:Oi.FEATURE,type:\"complexType\",complexType:{type:\"physicalType\",physicalType:Ze.STRUCT,children:[]}};case kt.MAP:return{nullable:!0,columnScope:Oi.FEATURE,type:\"complexType\",complexType:{type:\"physicalType\",physicalType:Ze.MAP,children:[]}};default:return N6(t);}}function V6(t){return t>=kt.SCALAR_BASE;}function Ry(t){return t===kt.STRUCT||t===kt.MAP;}function O6(t){if(t.type===\"scalarType\"){let e=t.scalarType;if(e.type===\"physicalType\")switch(e.physicalType){case rt.BOOLEAN:case rt.INT_8:case rt.UINT_8:case rt.INT_32:case rt.UINT_32:case rt.INT_64:case rt.UINT_64:case rt.FLOAT:case rt.DOUBLE:return!1;case rt.STRING:return!0;default:return!1;}if(e.type===\"logicalType\")return!1;}else if(t.type===\"complexType\"){let e=t.complexType;if(e.type===\"physicalType\")switch(e.physicalType){case Ze.GEOMETRY:case Ze.STRUCT:case Ze.MAP:return!0;default:return!1;}}return console.warn(\"Unexpected column type in hasStreamCount\",t),!1;}function R6(t){return t.type===\"scalarType\"&&t.scalarType?.type===\"logicalType\"&&t.scalarType.logicalType===cy.ID;}function $6(t){return t.type===\"complexType\"&&t.complexType?.type===\"physicalType\"&&t.complexType.physicalType===Ze.GEOMETRY;}function N6(t){let e;switch(t){case 10:case 11:e=rt.BOOLEAN;break;case 12:case 13:e=rt.INT_8;break;case 14:case 15:e=rt.UINT_8;break;case 16:case 17:e=rt.INT_32;break;case 18:case 19:e=rt.UINT_32;break;case 20:case 21:e=rt.INT_64;break;case 22:case 23:e=rt.UINT_64;break;case 24:case 25:e=rt.FLOAT;break;case 26:case 27:e=rt.DOUBLE;break;case 28:case 29:e=rt.STRING;break;default:return null;}return{nullable:!!(t&1),columnScope:Oi.FEATURE,type:\"scalarType\",scalarType:{longID:!1,type:\"physicalType\",physicalType:e}};}var U6=new TextDecoder(),Jc=\"0-3(ID), 4(GEOMETRY), 10-29(scalars), 30(STRUCT), 31(MAP)\";function _u(t,e){let r=Ot(t,e,1)[0];if(r===0)return\"\";let i=e.get(),n=i+r,a=t.subarray(i,n);return e.add(r),U6.decode(a);}function q6(t){let e=t.name,r=t.nullable;return t.type===\"scalarType\"?{type:\"scalarField\",scalarField:t.scalarType,name:e,nullable:r}:{type:\"complexField\",complexField:t.complexType,name:e,nullable:r};}function $y(t,e){let r=Ot(t,e,1)[0]>>>0,i=r>=kt.SCALAR_BASE?Oy(r):null;if(!i)throw Error(`Unsupported field type code ${r}. Supported: 10-29(scalars), 30(STRUCT), 31(MAP)`);let n={...i,name:_u(t,e)};if(n.type===\"complexType\"&&Ry(r)){let a=n.complexType,s=Ot(t,e,1)[0]>>>0;a.children=Array(s);for(let o=0;o<s;o++)a.children[o]=$y(t,e);}return q6(n);}function j6(t,e){let r=Ot(t,e,1)[0]>>>0,i=Oy(r);if(!i)throw Error(`Unsupported column type code ${r}. Supported: ${Jc}`);let n;if(V6(r))n=_u(t,e);else if(r<kt.GEOMETRY)n=\"id\";else if(r===kt.GEOMETRY)n=\"geometry\";else throw Error(`Unsupported column type code ${r}. Supported: ${Jc}`);let a={...i,name:n};if(a.type===\"complexType\"&&Ry(r)){let s=Ot(t,e,1)[0]>>>0,o=a.complexType;o.children=Array(s);for(let l=0;l<s;l++)o.children[l]=$y(t,e);}return a;}function G6(t,e){let r={};r.featureTables=[];let i={};if(i.name=_u(t,e),i.name.length===0)throw Error(\"Missing layer name\");let n=Ot(t,e,1)[0]>>>0,a=Ot(t,e,1)[0]>>>0;i.columns=Array(a);for(let s=0;s<a;s++)i.columns[s]=j6(t,e);return r.featureTables.push(i),[r,n];}function X6(t,e,r=!0){let i=new py(0),n=[];for(;i.get()<t.length;){let a=Ot(t,i,1)[0]>>>0,s=i.get()+a;if(s>t.length)throw Error(`Block overruns tile: ${s} > ${t.length}`);let o=Ot(t,i,1)[0]>>>0;if(o!==1&&o!==2){i.set(s);continue;}let[l,u]=G6(t,i),h=l.featureTables[0],c=null,p=null,f=[],d=0;for(let m of h.columns){let g=m.name;if(R6(m)){let x=null;if(m.nullable){let v=ht(t,i),w=i.get(),_=oi(t,v.numValues,v.byteLength,i);i.set(w+v.byteLength),x=new he(_,v.numValues);}let b=ht(t,i);d=x?x.size():b.decompressedCount,c=Y6(t,m,i,g,b,x??d,r);}else if($6(m)){let x=Ot(t,i,1)[0];if(d===0){let b=i.get();d=ht(t,i).decompressedCount,i.set(b);}e&&(e.scale=e.extent/u),p=h6(t,x,i,d,e);}else{let x=O6(m)?Ot(t,i,1)[0]:1;if(x===0)continue;let b=I6(t,i,m,x,d,void 0);if(b)if(Array.isArray(b))for(let v of b)f.push(v);else f.push(b);}}let y=new mw(h.name,p,c,f,u);n.push(y),i.set(s);}return n;}function Y6(t,e,r,i,n,a,s=!1){let o=e.scalarType?.longID?rt.UINT_64:rt.UINT_32,l=typeof a==\"number\"?void 0:a,u=Wa(n,a,t,r,o===rt.UINT_64?\"int64\":\"int32\");if(o===rt.UINT_32)switch(u){case ut.FLAT:return new lu(i,zt(t,r,n,void 0,l),a);case ut.SEQUENCE:{let h=by(t,r,n);return new hu(i,h[0],h[1],n.numRleValues,!1);}case ut.CONST:return new cu(i,xu(t,r,n),a,!1);}switch(u){case ut.FLAT:return s?new uu(i,X3(t,r,n,l),a):new Ey(i,vu(t,r,n,l),a);case ut.SEQUENCE:{let h=wy(t,r,n);return new Fy(i,h[0],h[1],n.numRleValues,!1);}case ut.CONST:return new By(i,_y(t,r,n),a,!1);}throw Error(\"Vector type not supported for id column.\");}var Gs=fy(fu);Gs/32*4,3*Gs/256+Gs|0;var W6=class{constructor(t,e){switch(this._featureData=t,this.properties=this._featureData.properties||{},this._featureData.geometry?.type){case Vt.POINT:case Vt.MULTIPOINT:this.type=1;break;case Vt.LINESTRING:case Vt.MULTILINESTRING:this.type=2;break;case Vt.POLYGON:case Vt.MULTIPOLYGON:this.type=3;break;default:this.type=0;}this.extent=e,this.id=Number(this._featureData.id);}loadGeometry(){let t=[];for(let e of this._featureData.geometry.coordinates){let r=[];for(let i of e)r.push(new M(i.x,i.y));t.push(r);}return t;}},Z6=class{constructor(t){this.features=[],this.featureTable=t,this.name=t.name,this.extent=t.extent,this.version=2,this.features=t.getFeatures(),this.length=this.features.length;}feature(t){return new W6(this.features[t],this.extent);}},Au=class{constructor(t){this.layers={};let e=X6(new Uint8Array(t));this.layers=e.reduce((r,i)=>({...r,[i.name]:new Z6(i)}),{});}},Su=class{constructor(t,e){this.tileID=t,this.x=t.canonical.x,this.y=t.canonical.y,this.z=t.canonical.z,this.grid=new ao(mt,16,0),this.grid3D=new ao(mt,16,0),this.featureIndexArray=new Xf(),this.promoteId=e;}insert(t,e,r,i,n,a){let s=this.featureIndexArray.length;this.featureIndexArray.emplaceBack(r,i,n);let o=a?this.grid3D:this.grid;for(let l of e){let u=[1/0,1/0,-1/0,-1/0];for(let h of l)u[0]=Math.min(u[0],h.x),u[1]=Math.min(u[1],h.y),u[2]=Math.max(u[2],h.x),u[3]=Math.max(u[3],h.y);u[0]<8192&&u[1]<8192&&u[2]>=0&&u[3]>=0&&o.insert(s,u[0],u[1],u[2],u[3]);}}loadVTLayers(){return this.vtLayers||(this.encoding===\"mlt\"?this.vtLayers=new Au(this.rawTileData).layers:this.vtLayers=new Ul(new eu(this.rawTileData)).layers,this.sourceLayerCoder=new ou(this.vtLayers?Object.keys(this.vtLayers).sort():[nl])),this.vtLayers;}query(t,e,r,i){this.loadVTLayers();let n=t.params,a=mt/t.tileSize/t.scale,s=ei(n.filter,\"queryRenderedFeatures filter\",n.globalState),o=t.queryGeometry,l=t.queryPadding*a,u=ba.fromPoints(o),h=this.grid.query(u.minX-l,u.minY-l,u.maxX+l,u.maxY+l),c=ba.fromPoints(t.cameraQueryGeometry).expandBy(l),p=this.grid3D.query(c.minX,c.minY,c.maxX,c.maxY,(y,m,g,x)=>dg(t.cameraQueryGeometry,y-l,m-l,g+l,x+l));for(let y of p)h.push(y);h.sort(K6);let f={},d;for(let y of h){if(y===d)continue;d=y;let m=this.featureIndexArray.get(y),g=null;this.loadMatchingFeature(f,m.bucketIndex,m.sourceLayerIndex,m.featureIndex,s,n.layers,n.availableImages,e,r,i,(x,b,v)=>(g||=vr(x),b.queryIntersectsFeature({queryGeometry:o,feature:x,featureState:v,geometry:g,zoom:this.z,transform:t.transform,pixelsToTileUnits:a,pixelPosMatrix:t.pixelPosMatrix,unwrappedTileID:this.tileID.toUnwrapped(),getElevation:t.getElevation})));}return f;}loadMatchingFeature(t,e,r,i,n,a,s,o,l,u,h){let c=this.bucketLayerIDs[e];if(a&&!c.some(y=>a.has(y)))return;let p=this.sourceLayerCoder.decode(r),f=this.vtLayers[p].feature(i);if(n.needGeometry){let y=si(f,!0);if(!n.filter(new at(this.tileID.overscaledZ),y,this.tileID.canonical))return;}else if(!n.filter(new at(this.tileID.overscaledZ),f))return;let d=this.getId(f,p);for(let y of c){if(a&&!a.has(y))continue;let m=o[y];if(!m)continue;let g={};d&&u&&(g=u.getState(m.sourceLayer||\"_geojsonTileLayer\",d));let x=Ut({},l[y]);x.paint=Qc(x.paint,m.paint,f,g,s),x.layout=Qc(x.layout,m.layout,f,g,s);let b=!h||h(f,m,g);if(!b)continue;let v=new yw(f,this.z,this.x,this.y,d);v.layer=x;let w=t[y];w===void 0&&(w=t[y]=[]),w.push({featureIndex:i,feature:v,intersectionZ:b});}}lookupSymbolFeatures(t,e,r,i,n,a,s,o){let l={};this.loadVTLayers();let u=ei(n.filterSpec,\"queryRenderedFeatures symbol filter\",n.globalState);for(let h of t)this.loadMatchingFeature(l,r,i,h,u,a,s,o,e);return l;}hasLayer(t){for(let e of this.bucketLayerIDs)for(let r of e)if(t===r)return!0;return!1;}getId(t,e){let r=t.id;if(this.promoteId){let i=typeof this.promoteId==\"string\"?this.promoteId:this.promoteId[e];r=t.properties[i],typeof r==\"boolean\"&&(r=Number(r)),r===void 0&&t.properties?.cluster&&this.promoteId&&(r=Number(t.properties.cluster_id));}return r;}};I(\"FeatureIndex\",Su,{omit:[\"rawTileData\",\"sourceLayerCoder\"]});function H6(t){return typeof t==\"object\"&&!!t&&\"evaluate\"in t;}function Qc(t,e,r,i,n){return _a(t,(a,s)=>{let o=e instanceof $a?e.get(s):null;return H6(o)?o.evaluate(r,i,void 0,n):o;});}function K6(t,e){return e-t;}var Ny=class{constructor(t){this.maxEntries=t,this.map=new Map();}get(t){let e=this.map.get(t);return e!==void 0&&(this.map.delete(t),this.map.set(t,e)),e;}set(t,e){if(this.map.has(t))this.map.delete(t);else if(this.map.size>=this.maxEntries){let r=this.map.keys().next().value;this.map.delete(r);}this.map.set(t,e);}clear(){this.map.clear();}};function Eu(t){let e=typeof t;if(e===\"number\"||e===\"boolean\"||e===\"string\"||t==null)return JSON.stringify(t);if(Array.isArray(t)){let n=\"[\";for(let a of t)n+=`${Eu(a)},`;return`${n}]`;}let r=Object.keys(t).sort(),i=\"{\";for(let n=0;n<r.length;n++)i+=`${JSON.stringify(r[n])}:${Eu(t[r[n]])},`;return`${i}}`;}function J6(t){let e=\"\";for(let r of pp)e+=`/${Eu(t[r])}`;return e;}function Q6(t,e){let r={};for(let n=0;n<t.length;n++){let a=e&&e[t[n].id]||J6(t[n]);e&&(e[t[n].id]=a);let s=r[a];s||=r[a]=[],s.push(t[n]);}let i=[];for(let n in r)i.push(r[n]);return i;}var t5=class{constructor(t,e){this.keyCache={},t&&this.replace(t,e);}replace(t,e){this._layerConfigs={},this._layers={},this.update(t,[],e);}update(t,e,r){for(let n of t){this._layerConfigs[n.id]=n;let a=this._layers[n.id]=sy(n,r);a._featureFilter=ei(a.filter,`layers[${n.id}].filter`,r),this.keyCache[n.id]&&delete this.keyCache[n.id];}for(let n of e)delete this.keyCache[n],delete this._layerConfigs[n],delete this._layers[n];this.familiesBySource={};let i=Q6(Object.values(this._layerConfigs),this.keyCache);for(let n of i){let a=n.map(c=>this._layers[c.id]),s=a[0];if(s.isHidden())continue;let o=s.source||\"\",l=this.familiesBySource[o];l||=this.familiesBySource[o]={};let u=s.sourceLayer||\"_geojsonTileLayer\",h=l[u];h||=l[u]=[],h.push(a);}}},jy=class{constructor(t){let e={},r=[];for(let s in t){let o=t[s],l=e[s]={};for(let u in o){let h=o[u];if(!h||h.bitmap.width===0||h.bitmap.height===0)continue;let c={x:0,y:0,w:h.bitmap.width+2,h:h.bitmap.height+2};r.push(c),l[u]={rect:c,metrics:h.metrics};}}let{w:i,h:n}=ru(r),a=new Ga({width:i||1,height:n||1});for(let s in t){let o=t[s];for(let l in o){let u=o[l];if(!u||u.bitmap.width===0||u.bitmap.height===0)continue;let h=e[s][l].rect;Ga.copy(u.bitmap,a,{x:0,y:0},{x:h.x+1,y:h.y+1},u.bitmap);}}this.image=a,this.positions=e;}};I(\"GlyphAtlas\",jy);var Gy=class{constructor(t){this.tileID=new au(t.tileID.overscaledZ,t.tileID.wrap,t.tileID.canonical.z,t.tileID.canonical.x,t.tileID.canonical.y),this.uid=t.uid,this.zoom=t.zoom,this.pixelRatio=t.pixelRatio,this.tileSize=t.tileSize,this.source=t.source,this.overscaling=this.tileID.overscaleFactor(),this.showCollisionBoxes=t.showCollisionBoxes,this.collectResourceTiming=!!t.collectResourceTiming,this.returnDependencies=!!t.returnDependencies,this.promoteId=t.promoteId,this.inFlightDependencies=[];}async parse(t,e,r,i,n){this.data=t,this.collisionBoxArray=new Ml();let a=new ou(Object.keys(t.layers).sort()),s=new Su(this.tileID,this.promoteId);s.bucketLayerIDs=[];let o={},l={featureIndex:s,iconDependencies:{},patternDependencies:{},glyphDependencies:{},dashDependencies:{},availableImages:r,subdivisionGranularity:n},u=e.familiesBySource[this.source];for(let S in u){let F=t.layers[S];if(!F)continue;F.version===1&&Mt(`Vector tile source \"${this.source}\" layer \"${S}\" does not use vector tile spec v2 and therefore may have some rendering errors.`);let z=a.encode(S),$=[];for(let B=0;B<F.length;B++){let P=F.feature(B),E=s.getId(P,S);$.push({feature:P,id:E,index:B,sourceLayerIndex:z});}for(let B of u[S]){let P=B[0];P.source!==this.source&&Mt(`layer.source = ${P.source} does not equal this.source = ${this.source}`),!P.isHidden(this.zoom,!0)&&(Uy(B,this.zoom,r),(o[P.id]=P.createBucket({index:s.bucketLayerIDs.length,layers:B,zoom:this.zoom,pixelRatio:this.pixelRatio,overscaling:this.overscaling,collisionBoxArray:this.collisionBoxArray,sourceLayerIndex:z,sourceID:this.source})).populate($,l,this.tileID.canonical),s.bucketLayerIDs.push(B.map(E=>E.id)));}}let h=_a(l.glyphDependencies,S=>Object.keys(S));for(let S of this.inFlightDependencies)S?.abort();this.inFlightDependencies=[];let c=Promise.resolve({});if(Object.keys(h).length){let S=new AbortController();this.inFlightDependencies.push(S),c=i.sendAsync({type:\"GG\",data:{stacks:h,source:this.source,tileID:this.tileID,type:\"glyphs\"}},S);}let p=Object.keys(l.iconDependencies),f=Promise.resolve({});if(p.length){let S=new AbortController();this.inFlightDependencies.push(S),f=i.sendAsync({type:\"GI\",data:{icons:p,source:this.source,tileID:this.tileID,type:\"icons\"}},S);}let d=Object.keys(l.patternDependencies),y=Promise.resolve({});if(d.length){let S=new AbortController();this.inFlightDependencies.push(S),y=i.sendAsync({type:\"GI\",data:{icons:d,source:this.source,tileID:this.tileID,type:\"patterns\"}},S);}let m=l.dashDependencies,g=Promise.resolve({});if(Object.keys(m).length){let S=new AbortController();this.inFlightDependencies.push(S),g=i.sendAsync({type:\"GDA\",data:{dashes:m}},S);}let[x,b,v,w]=await Promise.all([c,f,y,g]),_=new jy(x),A=new iu(b,v);for(let S in o){let F=o[S];F.hasDependencies&&(Uy(F.layers,this.zoom,r),F.addFeatures({options:l,canonical:this.tileID.canonical,glyphMap:x,glyphPositions:_.positions,iconMap:b,iconPositions:A.iconPositions,patternMap:v,patternPositions:A.patternPositions,dashPositions:w,showCollisionBoxes:this.showCollisionBoxes}));}return{buckets:Object.values(o).filter(S=>!S.isEmpty()),featureIndex:s,collisionBoxArray:this.collisionBoxArray,glyphAtlasImage:_.image,imageAtlas:A,dashPositions:w,glyphMap:this.returnDependencies?x:null,iconMap:this.returnDependencies?b:null,glyphPositions:this.returnDependencies?_.positions:null};}};function Uy(t,e,r){let i=new at(e);for(let n of t)n.recalculate(i,r);}var Xy=class{constructor(){this.loading={},this.loaded={},this.parsing={};}startLoading(t,e){this.loading[t]=e;}finishLoading(t){delete this.loading[t];}abort(t){let e=this.loading[t];e?.abort&&(e.abort.abort(),delete this.loading[t]);}getParsing(t){return this.parsing[t];}setParsing(t,e){this.parsing[t]=e;}removeParsing(t){delete this.parsing[t];}markLoaded(t,e){this.loaded[t]=e;}getLoaded(t){let e=this.loaded[t];if(e)return e;}removeLoaded(t){delete this.loaded[t];}clearLoaded(){this.loaded={};}},Yy=class{constructor(t){this.start=`${t}#start`,this.end=`${t}#end`,this.measure=t,performance.mark(this.start);}finish(){performance.mark(this.end);let t=performance.getEntriesByName(this.measure);return t.length===0&&(performance.measure(this.measure,this.start,this.end),t=performance.getEntriesByName(this.measure),performance.clearMarks(this.start),performance.clearMarks(this.end),performance.clearMeasures(this.measure)),t;}},e5=class{constructor(t,e,r,i,n){this.type=t,this.properties=r||{},this.extent=n,this.pointsArray=e,this.id=i;}loadGeometry(){return this.pointsArray.map(t=>t.map(e=>new M(e.x,e.y)));}},r5=class{constructor(t,e,r){this.version=2,this._myFeatures=t,this.name=e,this.length=t.length,this.extent=r;}feature(t){return this._myFeatures[t];}},i5=class{constructor(){this.layers={};}addLayer(t){this.layers[t.name]=t;}};function n5(t,e,r){let{extent:i}=t,n=2**(r.z-e.z),a=(r.x-e.x*n)*i,s=(r.y-e.y*n)*i,o=[];for(let l=0;l<t.length;l++){let u=t.feature(l),h=u.loadGeometry();for(let c of h)for(let p of c)p.x=p.x*n-a,p.y=p.y*n-s;h=ty(h,u.type,-128,-128,i+128,i+128),h.length!==0&&o.push(new e5(u.type,h,u.properties,u.id,i));}return new r5(o,t.name,i);}var a5=class{constructor(t,e,r){this.actor=t,this.layerIndex=e,this.availableImages=r,this.tileState=new Xy(),this.overzoomedTileResultCache=new Ny(1e3);}loadVectorTile(t,e){try{return{vectorTile:t.encoding===\"mlt\"?new Au(e):new Ul(new eu(e)),rawData:e};}catch(r){let i=new Uint8Array(e),n=i[0]===31&&i[1]===139,a=`Unable to parse the tile at ${t.request.url}, `;throw a+=n?\"please make sure the data is not gzipped and that you have configured the relevant header in the server\":`got error: ${Xi(r).message}`,Error(a);}}async loadTile(t){let{uid:e,overzoomParameters:r}=t;r&&(t.request=r.overzoomRequest);let i=this._startRequestTiming(t),n=new Gy(t);this.tileState.startLoading(e,n);let a=new AbortController();n.abort=a;try{let s=await up(t.request,a);if(t.etag&&t.etag===s.etag)return this.tileState.finishLoading(e),this._getEtagUnmodifiedResult(s,i);let o=this.loadVectorTile(t,s.data);if(this.tileState.finishLoading(e),!o)return null;let{vectorTile:l,rawData:u}=o;r&&({vectorTile:l,rawData:u}=this._getOverzoomTile(t,l));let h=this._getExpiryData(s),c=this._finishRequestTiming(i);n.vectorTile=l,n.etag=s.etag,this.tileState.markLoaded(e,n);let p={rawData:u,cacheControl:h,resourceTiming:c};return this.tileState.setParsing(e,p),await this._parseWorkerTile(n,t);}catch(s){throw this.tileState.finishLoading(e),this.tileState.markLoaded(e,n),s;}}_getEtagUnmodifiedResult(t,e){let r=this._getExpiryData(t),i=this._finishRequestTiming(e);return Ut({etagUnmodified:!0},r,i);}async _parseWorkerTile(t,e){let r=this.tileState.getParsing(t.uid),i=await t.parse(t.vectorTile,this.layerIndex,this.availableImages,this.actor,e.subdivisionGranularity);if(r){let{rawData:n,cacheControl:a,resourceTiming:s}=r,o=e.overzoomParameters?\"mvt\":e.encoding;i=Ut({rawTileData:n.slice(0),encoding:o},i,a,s),this.tileState.removeParsing(t.uid);}else t.etag&&(i=Ut(i,{etag:t.etag}));return i;}_getExpiryData({expires:t,cacheControl:e,etag:r}){let i={};return t&&(i.expires=t),e&&(i.cacheControl=e),r&&(i.etag=r),i;}_startRequestTiming(t){if(t.request?.collectResourceTiming)return new Yy(t.request.url);}_finishRequestTiming(t){let e=t?.finish();return e?{resourceTiming:JSON.parse(JSON.stringify(e))}:{};}_getOverzoomTile(t,e){let{tileID:r,source:i,overzoomParameters:n}=t,{maxZoomTileID:a}=n,s=`${a.key}_${r.key}_${t.request?.url}`,o=this.overzoomedTileResultCache.get(s);if(o)return o;let l=new i5(),u=this.layerIndex.familiesBySource[i];for(let c in u){let p=e.layers[c];if(!p)continue;let f=n5(p,a,r.canonical);f.length>0&&l.addLayer(f);}let h={vectorTile:l,rawData:su(l).buffer};return this.overzoomedTileResultCache.set(s,h),h;}async reloadTile(t){let e=t.uid,r=this.tileState.getLoaded(e);if(!r)throw Error(\"Should not be trying to reload a tile that was never loaded or has been removed\");if(r.vectorTile)return r.showCollisionBoxes=t.showCollisionBoxes,await this._parseWorkerTile(r,t);}async abortTile(t){this.tileState.abort(t.uid);}async removeTile(t){this.tileState.removeLoaded(t.uid);}},s5=class{constructor(){this.loaded={};}async loadTile(t){let{uid:e,encoding:r,rawImageData:i,redFactor:n,greenFactor:a,blueFactor:s,baseShift:o}=t,l=i.width+4,u=i.height+4,h=Aa(i)?new Yt({width:l,height:u},await np(i,-2,-2,l,u)):i,c=new $l(e,h,r,n,a,s,o);return this.loaded||={},this.loaded[e]=c,c;}removeTile(t){let e=this.loaded,r=t.uid;e?.[r]&&delete e[r];}},o5=class{constructor(t,e,r,i=l5){this.actor=t,this.layerIndex=e,this.availableImages=r,this.tileState=new Xy(),this._createGeoJSONIndex=i;}loadVectorTile(t){if(!this._geoJSONIndex)throw Error(\"Unable to parse the data into a cluster or geojson\");let{z:e,x:r,y:i}=t.tileID.canonical,n=this._geoJSONIndex.getTile(e,r,i);if(!n)return null;let a=new uy(n.features,{version:2,extent:mt});return{vectorTile:a,rawData:su(a,ip).buffer};}async loadTile(t){let{uid:e}=t,r=new Gy(t);r.abort=new AbortController();try{let i=this.loadVectorTile(t);if(!i)return null;let{vectorTile:n,rawData:a}=i;r.vectorTile=n,this.tileState.markLoaded(e,r);let s={rawData:a};return this.tileState.setParsing(e,s),await this._parseWorkerTile(r,t);}catch(i){throw this.tileState.markLoaded(e,r),i;}}async _parseWorkerTile(t,e){let r=this.tileState.getParsing(t.uid),i=await t.parse(t.vectorTile,this.layerIndex,this.availableImages,this.actor,e.subdivisionGranularity);if(r){let{rawData:n}=r;i=Ut({rawTileData:n.slice(0),encoding:\"mvt\"},i),this.tileState.removeParsing(t.uid);}return i;}async abortTile(t){this.tileState.abort(t.uid);}async removeTile(t){this.tileState.removeLoaded(t.uid);}async loadData(t){this._pendingRequest?.abort();let e=this._startRequestTiming(t);this._pendingRequest=new AbortController();try{await this.loadAndProcessGeoJSON(t,this._pendingRequest),delete this._pendingRequest,this.tileState.clearLoaded();let r={};return t.request&&(r.data=t.data),this._finishRequestTiming(e,t,r),r;}catch(r){if(delete this._pendingRequest,!cl(r))throw r;return{abandoned:!0};}}_startRequestTiming(t){if(t.request?.collectResourceTiming)return new Yy(t.request.url);}_finishRequestTiming(t,e,r){let i=t?.finish();i&&(r.resourceTiming={[e.source]:JSON.parse(JSON.stringify(i))});}async reloadTile(t){let e=t.uid,r=this.tileState.getLoaded(e);if(!r)return await this.loadTile(t);if(r.vectorTile)return r.showCollisionBoxes=t.showCollisionBoxes,await this._parseWorkerTile(r,t);}async loadAndProcessGeoJSON(t,e){if(t.request&&(t.data=(await lp(t.request,e)).data),t.data){t.data=this._filterGeoJSON(t.data,t.filter,t.source),this._geoJSONIndex=this._createGeoJSONIndex(t.data,t);return;}if(t.dataDiff){this._geoJSONIndex??=this._createGeoJSONIndex({type:\"FeatureCollection\",features:[]},t),this._geoJSONIndex.updateData(t.dataDiff,this._getFilterPredicate(t.filter,t.source));return;}if(t.updateCluster&&this._geoJSONIndex.updateClusterOptions(t.geojsonVtOptions.cluster,Wy(t)),this._geoJSONIndex==null)throw Error(`Input data given to '${t.source}' is not a valid GeoJSON object.`);}_filterGeoJSON(t,e,r){if(t.type!==\"FeatureCollection\")return t;let i=this._getFilterPredicate(e,r);return i?{type:\"FeatureCollection\",features:t.features.filter(n=>i(n))}:t;}_getFilterPredicate(t,e){if(typeof t!=\"boolean\"&&!t?.length)return;let r=Ke(t,`sources.${e}.filter`,{type:\"boolean\",\"property-type\":\"data-driven\",overridable:!1,transition:!1});if(r.result===\"error\")throw Error(r.value.map(i=>`${i.key}: ${i.message}`).join(\", \"));return i=>r.value.evaluate({zoom:0},i);}async removeSource(t){this._pendingRequest?.abort();}getClusterExpansionZoom(t){return this._geoJSONIndex.getClusterExpansionZoom(t.clusterId);}getClusterChildren(t){return this._geoJSONIndex.getClusterChildren(t.clusterId);}getClusterLeaves(t){return this._geoJSONIndex.getClusterLeaves(t.clusterId,t.limit,t.offset);}};function l5(t,e){let r=Ut(e.geojsonVtOptions||{},{updateable:!0,clusterOptions:Wy(e)});return new Id(t,r);}function Wy({geojsonVtOptions:t,clusterProperties:e,source:r}){if(!e||!t.clusterOptions)return t.clusterOptions;let i={},n={},a={accumulated:null,zoom:0},s={properties:null},o=Object.keys(e);for(let l of o){let[u,h]=e[l],c=Ke(h,`sources.${r}.clusterProperties.${l}[1]`),p=Ke(typeof u==\"string\"?[u,[\"accumulated\"],[\"get\",l]]:u,`sources.${r}.clusterProperties.${l}[0]`);i[l]=c.value,n[l]=p.value;}return t.clusterOptions.map=l=>{s.properties=l;let u={};for(let h of o)u[h]=i[h].evaluate(a,s);return u;},t.clusterOptions.reduce=(l,u)=>{s.properties=u;for(let h of o)a.accumulated=l[h],l[h]=n[h].evaluate(a,s);},t.clusterOptions;}async function qy(t){if(t.endsWith(\".mjs\")){await import(t);return;}let e=await fetch(t,{credentials:\"same-origin\"});if(!e.ok)throw Error(`Failed to load ${t}: ${e.status}`);let r=await e.text();if(/^[ \\t]*(import|export)\\s/m.test(r)){let i=URL.createObjectURL(new Blob([r],{type:\"text/javascript\"}));try{await import(i);}finally{URL.revokeObjectURL(i);}return;}globalThis.eval(r);}var u5=class{constructor(t){this.self=t,this.actor=new oy(t),this.layerIndexes={},this.availableImages={},this.workerSources={},this.demWorkerSources={},this.externalWorkerSourceTypes={},this.globalStates=new Map(),this.self.registerWorkerSource=(e,r)=>{if(this.externalWorkerSourceTypes[e])throw Error(`Worker source with name \"${e}\" already registered.`);this.externalWorkerSourceTypes[e]=r;},this.self.addProtocol=ap,this.self.removeProtocol=sp,this.self.registerRTLTextPlugin=e=>{mr.setMethods(e);},this.self.makeRequest=Sa,this.actor.registerMessageHandler(\"LDT\",(e,r)=>this._getDEMWorkerSource(e,r.source).loadTile(r)),this.actor.registerMessageHandler(\"RDT\",async(e,r)=>{this._getDEMWorkerSource(e,r.source).removeTile(r);}),this.actor.registerMessageHandler(\"GCEZ\",async(e,r)=>this._getWorkerSource(e,r.type,r.source).getClusterExpansionZoom(r)),this.actor.registerMessageHandler(\"GCC\",async(e,r)=>this._getWorkerSource(e,r.type,r.source).getClusterChildren(r)),this.actor.registerMessageHandler(\"GCL\",async(e,r)=>this._getWorkerSource(e,r.type,r.source).getClusterLeaves(r)),this.actor.registerMessageHandler(\"LD\",(e,r)=>this._getWorkerSource(e,r.type,r.source).loadData(r)),this.actor.registerMessageHandler(\"LT\",(e,r)=>this._getWorkerSource(e,r.type,r.source).loadTile(r)),this.actor.registerMessageHandler(\"RT\",(e,r)=>this._getWorkerSource(e,r.type,r.source).reloadTile(r)),this.actor.registerMessageHandler(\"AT\",(e,r)=>this._getWorkerSource(e,r.type,r.source).abortTile(r)),this.actor.registerMessageHandler(\"RMT\",(e,r)=>this._getWorkerSource(e,r.type,r.source).removeTile(r)),this.actor.registerMessageHandler(\"RS\",async(e,r)=>{if(!this.workerSources[e]?.[r.type]?.[r.source])return;let i=this.workerSources[e][r.type][r.source];delete this.workerSources[e][r.type][r.source],i.removeSource!==void 0&&i.removeSource(r);}),this.actor.registerMessageHandler(\"RM\",async e=>{delete this.layerIndexes[e],delete this.availableImages[e],delete this.workerSources[e],delete this.demWorkerSources[e],this.globalStates.delete(e);}),this.actor.registerMessageHandler(\"SR\",async(e,r)=>{this.referrer=r;}),this.actor.registerMessageHandler(\"SRPS\",(e,r)=>this._syncRTLPluginState(e,r)),this.actor.registerMessageHandler(\"IS\",async(e,r)=>{await qy(r);}),this.actor.registerMessageHandler(\"SI\",(e,r)=>this._setImages(e,r)),this.actor.registerMessageHandler(\"UL\",async(e,r)=>{this._getLayerIndex(e).update(r.layers,r.removedIds,this._getGlobalState(e));}),this.actor.registerMessageHandler(\"UGS\",async(e,r)=>{let i=this._getGlobalState(e);for(let n in r)i[n]=r[n];}),this.actor.registerMessageHandler(\"SL\",async(e,r)=>{this._getLayerIndex(e).replace(r,this._getGlobalState(e));});}_getGlobalState(t){let e=this.globalStates.get(t);return e||(e={},this.globalStates.set(t,e)),e;}async _setImages(t,e){this.availableImages[t]=e;for(let r in this.workerSources[t]){let i=this.workerSources[t][r];for(let n in i)i[n].availableImages=e;}}async _syncRTLPluginState(t,e){return await mr.syncState(e,qy);}_getAvailableImages(t){let e=this.availableImages[t];return e||=[],e;}_getLayerIndex(t){let e=this.layerIndexes[t];return e||=this.layerIndexes[t]=new t5(),e;}_getWorkerSource(t,e,r){if(this.workerSources[t]||={},this.workerSources[t][e]||={},!this.workerSources[t][e][r]){let i={sendAsync:(n,a)=>(n.targetMapId=t,this.actor.sendAsync(n,a))};switch(e){case\"vector\":this.workerSources[t][e][r]=new a5(i,this._getLayerIndex(t),this._getAvailableImages(t));break;case\"geojson\":this.workerSources[t][e][r]=new o5(i,this._getLayerIndex(t),this._getAvailableImages(t));break;default:this.workerSources[t][e][r]=new this.externalWorkerSourceTypes[e](i,this._getLayerIndex(t),this._getAvailableImages(t));}}return this.workerSources[t][e][r];}_getDEMWorkerSource(t,e){return this.demWorkerSources[t]||={},this.demWorkerSources[t][e]||=new s5(),this.demWorkerSources[t][e];}};cr(self)&&(self.worker=new u5(self));})();/*! Bundled license information:\n\nmaplibre-gl/dist/maplibre-gl-shared.mjs:\nmaplibre-gl/dist/maplibre-gl-worker.mjs:\n (**\n * MapLibre GL JS\n * @license 3-Clause BSD. Full text of license: https://github.com/maplibre/maplibre-gl-js/blob/v6.10.0/LICENSE.txt\n *)\n*/", "import { setWorkerUrl } from 'maplibre-gl';\nimport maplibreWorkerSource from './generated/maplibreWorkerBundle.txt';\n\n// maplibre-gl v6 auto-detects its worker URL via import.meta.url, which doesn't reliably resolve\n// inside a bundler's module graph - every bundler consumer would otherwise need to serve the\n// worker file itself and call setWorkerUrl() manually. Instead, the worker (bundled into a single\n// self-contained script by tools/generate_maplibre_worker_bundle.mjs) is embedded directly in this\n// package and turned into a same-origin blob: URL here, matching how maplibre-gl v5 used to embed\n// its worker. Consumers don't need to do anything.\nlet workerUrl: string | undefined;\n\nexport const ensureMapWorkerConfigured = (): void => {\n if (workerUrl) {\n return;\n }\n const blob = new Blob([maplibreWorkerSource], { type: 'text/javascript' });\n // MapLibre v6 treats every worker URL except one ending in .cjs as an ES module. The fragment\n // keeps the blob URL valid while making MapLibre create a classic worker, which also works in\n // PDFGen's file:// renderer.\n workerUrl = `${URL.createObjectURL(blob)}#maplibre-worker.cjs`;\n setWorkerUrl(workerUrl);\n};\n", "import styled, { css } from 'styled-components';\nimport { Map } from 'maplibre-gl';\nimport * as React from 'react';\nimport { isColor } from '@splunk/visualizations-shared/colorUtils';\nimport { noop } from 'lodash';\nimport { variables } from '@splunk/themes';\nimport { _ } from '@splunk/ui-utils/i18n';\nimport { sprintf } from '@splunk/ui-utils/format';\nimport { KEYBOARD_KEYS } from './keyboardConstants';\nimport { convertDegToDMS } from './Tooltip';\nimport { DEFAULT_CLUSTER_COLOR, DEFAULT_RESULT_LIMIT, DEFAULT_SERIES_COLORS } from './MapUtils';\nimport type { MarkerLayerType } from './MapUtils';\nimport MarkerWrapper from './MarkerWrapper';\nimport type { TooltipProps } from './Tooltip';\nimport { useRovingTabindex } from './useRovingTabindex';\n\nconst svgFocusStyle = css`\n &:focus {\n outline: none;\n filter: drop-shadow(2px 0px 1px ${variables.focusColor})\n drop-shadow(-2px 0px 1px ${variables.focusColor}) drop-shadow(0px 2px 1px ${variables.focusColor})\n drop-shadow(0px -2px 1px ${variables.focusColor});\n }\n`;\n\nconst FocusableSvg = styled.svg<{ $hasEventHandlers: boolean }>`\n ${({ $hasEventHandlers }) => $hasEventHandlers && 'cursor: pointer;'}\n ${svgFocusStyle}\n`;\n\ninterface MarkerIconProps\n extends Omit<React.HTMLAttributes<HTMLOrSVGElement>, 'onKeyDown' | 'onFocus' | 'onBlur'> {\n theme: string;\n color: string;\n ariaLabel?: string;\n 'aria-describedby'?: string;\n onInteraction?: (e: React.MouseEvent | React.KeyboardEvent) => void;\n tabIndex?: number;\n onKeyDown?: (e: React.KeyboardEvent) => void;\n onFocus?: (e: React.FocusEvent) => void;\n onBlur?: (e: React.FocusEvent) => void;\n elementRef?: (element: HTMLElement | SVGElement | null) => void;\n hasEventHandlers?: boolean;\n}\n\nexport const MarkerIcon = ({\n theme,\n color,\n ariaLabel,\n 'aria-describedby': ariaDescribedby,\n onInteraction,\n onKeyDown: onKeyDownProp,\n onFocus,\n onBlur,\n elementRef,\n hasEventHandlers,\n ...otherProps\n}: MarkerIconProps): JSX.Element => {\n const strokeOpacity = theme === 'light' ? 0.7 : 0.15;\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent) => {\n if (hasEventHandlers && (e.key === KEYBOARD_KEYS.ENTER || e.key === KEYBOARD_KEYS.SPACE)) {\n e.preventDefault();\n onInteraction?.(e);\n }\n onKeyDownProp?.(e);\n },\n [hasEventHandlers, onInteraction, onKeyDownProp]\n );\n return (\n <FocusableSvg\n $hasEventHandlers={hasEventHandlers}\n ref={elementRef as React.Ref<SVGSVGElement>}\n width={22}\n height={28}\n fill=\"none\"\n role={hasEventHandlers ? 'button' : 'graphics-symbol'}\n aria-label={ariaLabel}\n aria-describedby={ariaDescribedby}\n onClick={hasEventHandlers ? onInteraction : undefined}\n onKeyDown={handleKeyDown}\n onFocus={onFocus}\n onBlur={onBlur}\n {...otherProps}\n >\n <path\n d=\"M11 .5C5.201.5.5 5.201.5 11c0 3.136 1.376 5.952 3.555 7.875 2.839 2.506 4.144 4.58 4.893 6.02.183.35.334.665.469.946l.014.03c.136.285.263.548.387.766.235.412.571.863 1.182.863.61 0 .947-.45 1.182-.863.124-.218.25-.48.387-.765l.014-.03c.135-.282.286-.597.469-.947.75-1.44 2.054-3.514 4.893-6.02A10.476 10.476 0 0 0 21.5 11C21.5 5.201 16.799.5 11 .5Z\"\n fill={color}\n />\n <path\n d=\"M11 .5C5.201.5.5 5.201.5 11c0 3.136 1.376 5.952 3.555 7.875 2.839 2.506 4.144 4.58 4.893 6.02.183.35.334.665.469.946l.014.03c.136.285.263.548.387.766.235.412.571.863 1.182.863.61 0 .947-.45 1.182-.863.124-.218.25-.48.387-.765l.014-.03c.135-.282.286-.597.469-.947.75-1.44 2.054-3.514 4.893-6.02A10.476 10.476 0 0 0 21.5 11C21.5 5.201 16.799.5 11 .5Z\"\n stroke=\"#08090A\"\n />\n <path\n d=\"M11 .5C5.201.5.5 5.201.5 11c0 3.136 1.376 5.952 3.555 7.875 2.839 2.506 4.144 4.58 4.893 6.02.183.35.334.665.469.946l.014.03c.136.285.263.548.387.766.235.412.571.863 1.182.863.61 0 .947-.45 1.182-.863.124-.218.25-.48.387-.765l.014-.03c.135-.282.286-.597.469-.947.75-1.44 2.054-3.514 4.893-6.02A10.476 10.476 0 0 0 21.5 11C21.5 5.201 16.799.5 11 .5Z\"\n stroke={color}\n strokeOpacity={strokeOpacity}\n />\n </FocusableSvg>\n );\n};\n\ninterface MarkerProps {\n latitude: number;\n longitude: number;\n color: string;\n themeColorScheme: string;\n additionalFields?: TooltipProps['additionalFields'];\n tooltipHeader?: TooltipProps['tooltipHeader'];\n map: React.MutableRefObject<Map>;\n handleLayerClick?: (e) => void;\n showCoordinates: boolean;\n stylesManagedExternally?: boolean;\n onKeyDown?: (e: React.KeyboardEvent) => void;\n onFocus?: () => void;\n onBlur?: () => void;\n elementRef?: (element: HTMLElement | SVGElement | null) => void;\n hasEventHandlers?: boolean;\n}\n\nconst Marker = React.memo(\n ({\n latitude,\n longitude,\n color,\n themeColorScheme,\n map,\n additionalFields,\n handleLayerClick,\n showCoordinates,\n tooltipHeader,\n stylesManagedExternally,\n onKeyDown,\n onFocus,\n onBlur,\n elementRef,\n hasEventHandlers,\n }: MarkerProps): JSX.Element => {\n const ariaLabel = React.useMemo(() => {\n let markerLabel = _('Map marker');\n if (tooltipHeader) {\n markerLabel = tooltipHeader;\n } else if (latitude !== undefined && longitude !== undefined) {\n markerLabel = sprintf(_('Location: %(lat)s, %(lng)s'), {\n lat: convertDegToDMS(latitude, 'latitude'),\n lng: convertDegToDMS(longitude, 'longitude'),\n });\n }\n\n if (hasEventHandlers) {\n markerLabel = sprintf(_('%(label)s, Click for drilldown'), { label: markerLabel });\n }\n return markerLabel;\n }, [tooltipHeader, latitude, longitude, hasEventHandlers]);\n\n const icon = React.useMemo(\n () => (\n <MarkerIcon\n color={color}\n theme={themeColorScheme}\n ariaLabel={ariaLabel}\n onInteraction={handleLayerClick}\n onKeyDown={onKeyDown}\n onFocus={onFocus}\n onBlur={onBlur}\n elementRef={elementRef}\n hasEventHandlers={hasEventHandlers}\n />\n ),\n [\n color,\n handleLayerClick,\n themeColorScheme,\n ariaLabel,\n onKeyDown,\n onFocus,\n onBlur,\n elementRef,\n hasEventHandlers,\n ]\n );\n return (\n <StyledMarkerWrapper\n latitude={latitude}\n longitude={longitude}\n map={map}\n additionalFields={additionalFields}\n data-test-type=\"marker\"\n showCoordinates={showCoordinates}\n tooltipHeader={tooltipHeader}\n stylesManagedExternally={stylesManagedExternally}\n >\n {icon}\n </StyledMarkerWrapper>\n );\n }\n);\n\nMarker.displayName = 'MapMarker';\n\nconst StyledMarkerWrapper = styled(MarkerWrapper)`\n width: 22px;\n height: 28px;\n cursor: pointer;\n`;\n\nexport const generateMarkerWrapperProps = (\n markerLayer: MarkerLayerType,\n showCoordinates?: boolean,\n onMapClick: ({ e, payload }) => void = noop\n): Omit<MarkerProps, 'themeColorScheme' | 'map'>[] => {\n const latArray = markerLayer.latitude;\n const lonArray = markerLayer.longitude;\n const isStaticColor = !markerLayer.dataColors;\n const limit = Math.min(\n latArray.length,\n lonArray.length,\n markerLayer.resultLimit ? markerLayer.resultLimit : DEFAULT_RESULT_LIMIT\n );\n const markerProps: ReturnType<typeof generateMarkerWrapperProps> = [];\n for (let i = 0; i < limit; i += 1) {\n const staticColor =\n markerLayer.seriesColors && isColor(markerLayer.seriesColors[0])\n ? markerLayer.seriesColors[0]\n : DEFAULT_CLUSTER_COLOR;\n const dynamicColor =\n markerLayer.dataColors && isColor(markerLayer.dataColors[i])\n ? markerLayer.dataColors[i]\n : DEFAULT_CLUSTER_COLOR;\n const color = isStaticColor ? staticColor : dynamicColor;\n const tooltipHeader = markerLayer.tooltipHeaderField?.[i];\n const additionalFields = markerLayer.metadata?.[i]\n ? markerLayer.additionalTooltipFields.map(field => ({\n name: field,\n value: markerLayer.metadata[i][field],\n }))\n : [];\n const handleLayerClick = e => {\n const metadata = markerLayer?.metadata[i] ?? {};\n const payload = Object.keys(metadata).reduce((acc, curr) => {\n const key = `row.${curr}.value`;\n const value = String(metadata[curr]);\n return { ...acc, [key]: value };\n }, {});\n\n onMapClick({ e, payload });\n };\n markerProps.push({\n latitude: latArray[i],\n longitude: lonArray[i],\n color,\n additionalFields,\n tooltipHeader,\n handleLayerClick,\n showCoordinates,\n });\n }\n return markerProps;\n};\n\nexport interface MarkerLayerProps {\n markerLayer: MarkerLayerType;\n themeColorScheme: string;\n map: React.MutableRefObject<Map>;\n onMapClick?: ({ e, payload }) => void;\n showCoordinates?: boolean;\n stylesManagedExternally?: boolean;\n hasEventHandlers?: boolean;\n}\n\nconst MarkerLayer = (props: MarkerLayerProps): JSX.Element => {\n const {\n map,\n themeColorScheme,\n markerLayer,\n onMapClick,\n showCoordinates = true,\n stylesManagedExternally = false,\n hasEventHandlers,\n } = props;\n markerLayer.seriesColors = markerLayer.seriesColors || DEFAULT_SERIES_COLORS;\n const markerPropsList = React.useMemo(\n () => generateMarkerWrapperProps(markerLayer, showCoordinates, onMapClick),\n [markerLayer, onMapClick, showCoordinates]\n );\n\n const { handleKeyDown, handleFocus, handleBlur, setElementRef } = useRovingTabindex(map);\n\n return (\n <>\n {markerPropsList.map((markerProps, i) => (\n <Marker\n // eslint-disable-next-line react/no-array-index-key\n key={String(i)}\n themeColorScheme={themeColorScheme}\n map={map}\n {...markerProps}\n showCoordinates={showCoordinates}\n stylesManagedExternally={stylesManagedExternally}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n onBlur={handleBlur}\n elementRef={element => setElementRef(i, element)}\n hasEventHandlers={hasEventHandlers}\n />\n ))}\n </>\n );\n};\n\nexport default MarkerLayer;\n", "import * as React from 'react';\nimport type { Map } from 'maplibre-gl';\nimport { LAYER_TYPE } from '@splunk/visualization-schemas';\nimport BubbleLayer from './BubbleLayer';\nimport MarkerLayer from './MarkerLayer';\nimport type { ClusterLayerType, BubbleLayerType } from './MapUtils';\nimport { MapProvider } from './MapContext';\n\ninterface ClusterLayerProps {\n clusterLayer: ClusterLayerType;\n themeColorScheme: string;\n map: React.MutableRefObject<Map>;\n zoom?: number;\n onMapClick?: ({ e, payload }) => void;\n showCoordinates?: boolean;\n stylesManagedExternally?: boolean;\n hasEventHandlers?: boolean;\n}\n\nconst ClusterLayer = ({\n clusterLayer,\n themeColorScheme,\n zoom,\n map,\n onMapClick,\n showCoordinates,\n stylesManagedExternally = false,\n hasEventHandlers,\n}: ClusterLayerProps): JSX.Element => {\n if (map?.current?.isStyleLoaded && [clusterLayer.longitude, clusterLayer.latitude].every(Array.isArray)) {\n if (clusterLayer?.type === LAYER_TYPE.Marker && !('geobin' in clusterLayer)) {\n return (\n <MapProvider>\n <MarkerLayer\n markerLayer={clusterLayer}\n themeColorScheme={themeColorScheme}\n map={map}\n onMapClick={onMapClick}\n showCoordinates={showCoordinates}\n stylesManagedExternally={stylesManagedExternally}\n hasEventHandlers={hasEventHandlers}\n />\n </MapProvider>\n );\n }\n if (\n clusterLayer?.type === LAYER_TYPE.Bubble &&\n Array.isArray((clusterLayer as BubbleLayerType).bubbleSize)\n ) {\n return (\n <MapProvider>\n <BubbleLayer\n bubbleLayer={clusterLayer as BubbleLayerType}\n themeColorScheme={themeColorScheme}\n map={map}\n zoom={zoom}\n onMapClick={onMapClick}\n showCoordinates={showCoordinates}\n stylesManagedExternally={stylesManagedExternally}\n hasEventHandlers={hasEventHandlers}\n />\n </MapProvider>\n );\n }\n }\n return null;\n};\n\nexport default ClusterLayer;\n", "import * as React from 'react';\nimport type { Map, MapLayerMouseEvent } from 'maplibre-gl';\nimport type { GeoJsonDataType } from '@splunk/visualizations-shared/mapUtils';\nimport { isEqual, uniq } from 'lodash';\nimport styled from 'styled-components';\nimport { mixins } from '@splunk/themes';\nimport { sprintf } from '@splunk/ui-utils/format';\nimport { _ } from '@splunk/ui-utils/i18n';\nimport { KEYBOARD_KEYS } from './keyboardConstants';\nimport {\n ChoroplethLayerType,\n getScaledOpacities,\n formatMetadata,\n DEFAULT_RESULT_LIMIT,\n formatTooltipFieldValue,\n} from './MapUtils';\nimport MarkerWrapper from './MarkerWrapper';\nimport type { TooltipProps } from './Tooltip';\nimport { useMapContext } from './MapContext';\nimport { useRovingTabindex } from './useRovingTabindex';\n\nconst getShapeId = id => `shape-${id}`;\nconst getSourceId = id => `source-${id}`;\nconst getStrokeId = id => `stroke-${id}`;\n\n// Calculate centroid of a GeoJSON geometry (simple average of coordinates)\nconst getCentroid = (geom: GeoJsonDataType): [number, number] | null => {\n if (!geom?.coordinates) {\n return null;\n }\n\n const flattenCoordinates = (coords: any[]): number[][] => {\n if (typeof coords[0] === 'number') return [coords as number[]];\n return coords.flatMap(flattenCoordinates);\n };\n\n const allCoords = flattenCoordinates(geom.coordinates);\n if (allCoords.length === 0) {\n return null;\n }\n\n const lngs = allCoords.map(c => c[0]);\n const lats = allCoords.map(c => c[1]);\n\n return [lngs.reduce((a, b) => a + b, 0) / lngs.length, lats.reduce((a, b) => a + b, 0) / lats.length];\n};\n\nconst FocusableShapeButton = styled.button`\n ${mixins.screenReaderContent()};\n`;\n\nexport const compareGeom = (prev: GeoJsonDataType, next: GeoJsonDataType) => {\n if (prev !== null && next !== null) {\n return prev.type === next.type && isEqual(prev.coordinates, next.coordinates);\n }\n return prev === null && next === null;\n};\n\nexport const compareChoropleth = (prevProps: ChoroplethProps, nextProps: ChoroplethProps): boolean => {\n return (\n compareGeom(prevProps.geomData, nextProps.geomData) &&\n prevProps.id === nextProps.id &&\n prevProps.map === nextProps.map &&\n prevProps.areaId === nextProps.areaId &&\n prevProps.areaValue === nextProps.areaValue &&\n prevProps.color === nextProps.color &&\n prevProps.opacity === nextProps.opacity &&\n prevProps.strokeColor === nextProps.strokeColor &&\n prevProps.isThemeChanged === nextProps.isThemeChanged &&\n isEqual(prevProps.additionalFields, nextProps.additionalFields) &&\n prevProps.tooltipHeader === nextProps.tooltipHeader &&\n prevProps.handleMapClick === nextProps.handleMapClick &&\n prevProps.hasEventHandlers === nextProps.hasEventHandlers\n );\n};\n\nexport const cleanupChoropleth = (\n shapeId: string,\n sourceId: string,\n strokeId: string,\n map: React.MutableRefObject<Map>\n) => {\n // catch errors where map is undefined\n let currLayer;\n let currSource;\n let currStrokeLayer;\n try {\n currLayer = map?.current?.getLayer(shapeId);\n currStrokeLayer = map?.current?.getLayer(strokeId);\n currSource = map?.current?.getSource(sourceId);\n } catch {\n return;\n }\n if (currLayer) {\n map.current.removeLayer(shapeId);\n }\n if (currStrokeLayer) {\n map.current.removeLayer(strokeId);\n }\n if (currSource) {\n map.current.removeSource(sourceId);\n }\n};\n\ninterface ChoroplethProps {\n id: string;\n map: React.MutableRefObject<Map>;\n areaId: string;\n areaValue: number;\n geomData: GeoJsonDataType;\n color: string;\n opacity?: number;\n strokeColor?: string;\n isThemeChanged: boolean;\n additionalFields?: TooltipProps['additionalFields'];\n tooltipHeader?: TooltipProps['tooltipHeader'];\n handleMapClick?: (e) => void;\n stylesManagedExternally?: boolean;\n onKeyDown?: (e: React.KeyboardEvent) => void;\n onFocus?: () => void;\n onBlur?: () => void;\n elementRef?: (element: HTMLElement | SVGElement | null) => void;\n hasEventHandlers?: boolean;\n}\n\nexport const Choropleth = React.memo(\n ({\n id,\n areaId,\n areaValue,\n geomData,\n map,\n color,\n opacity,\n strokeColor,\n isThemeChanged,\n additionalFields,\n tooltipHeader,\n handleMapClick,\n stylesManagedExternally = false,\n onKeyDown,\n onFocus,\n onBlur,\n elementRef,\n hasEventHandlers,\n }: ChoroplethProps): JSX.Element => {\n const sourceId = getSourceId(id);\n const shapeId = getShapeId(id);\n const strokeId = getStrokeId(id);\n const formattedGeomData: GeoJSON.Feature<GeoJSON.Geometry, { [name: string]: any }> = React.useMemo(\n () => ({\n type: 'Feature',\n geometry: geomData,\n properties: {},\n }),\n [geomData]\n );\n const [isFocused, setIsFocused] = React.useState(false);\n const [isHovered, setIsHovered] = React.useState(false);\n const [centroidLat, centroidLng] = React.useMemo(() => {\n const centroid = getCentroid(geomData);\n if (!centroid) {\n return [null, null];\n }\n const [lng, lat] = centroid;\n return [lat, lng];\n }, [geomData]);\n const [mouseLat, setmouseLat] = React.useState(centroidLat ?? 0);\n const [mouseLng, setmouseLng] = React.useState(centroidLng ?? 0);\n const markerId = React.useMemo(() => `choropleth-${shapeId}`, [shapeId]);\n const { activeChoroplethId, setActiveChoroplethId, setActiveTooltipId } = useMapContext();\n\n // Tracks a pending \"retry once the style settles\" listener (see the catch block below) so\n // it can be cancelled if the component unmounts or re-renders with new data before the\n // style finishes loading - otherwise the stale retry can fire later and re-add old\n // layers/data after cleanup has already run.\n const pendingRetryRef = React.useRef<(() => void) | null>(null);\n const cancelPendingRetry = React.useCallback(() => {\n if (pendingRetryRef.current) {\n map.current?.off('styledata', pendingRetryRef.current);\n pendingRetryRef.current = null;\n }\n }, [map]);\n\n const updateLayers = React.useCallback(() => {\n cancelPendingRetry();\n\n // Apply changes by removing the existing choropleth and creating a new one\n // instead of mutating the current\n cleanupChoropleth(shapeId, sourceId, strokeId, map);\n\n try {\n // In order to set a different color and opacity to each choropleth region\n // we are creating a different layer for each region, and each layer requires a source\n map.current.addSource(sourceId, {\n type: 'geojson',\n data: formattedGeomData,\n });\n map.current.addLayer({\n id: shapeId,\n type: 'fill',\n source: sourceId,\n layout: {},\n paint: {\n 'fill-opacity': opacity,\n 'fill-color': color,\n },\n });\n\n // needs to add a second layer to adjust the thickness of the line\n // see https://github.com/mapbox/mapbox-gl-js/issues/3018\n //\n // strokeColor is optional - maplibre-gl v6 validates paint properties on addLayer\n // and throws if 'line-color' is undefined (v5 didn't), so guard against that too,\n // not just the explicit 'transparent' opt-out.\n if (strokeColor && strokeColor !== 'transparent') {\n map.current.addLayer({\n id: strokeId,\n type: 'line',\n source: sourceId,\n layout: {},\n paint: {\n 'line-color': strokeColor,\n 'line-width': 1,\n },\n });\n }\n } catch (err) {\n // setStyle() (eg. toggling showBaseLayer) reloads the style asynchronously in\n // maplibre-gl v6, so a re-render triggered right after it can run this before the\n // new style is done loading - addSource/addLayer throw in that case. Retry once\n // the style settles instead of losing the layer permanently.\n //\n // Note: map.isStyleLoaded() is NOT the right check here - it reflects whether every\n // source on the map (including sibling layers and base tiles still fetching) has\n // fully finished loading, so it can stay false long after the style itself is ready\n // to accept new layers, causing this to defer forever.\n if (err instanceof Error && err.message === 'Style is not done loading.') {\n const retry = () => {\n pendingRetryRef.current = null;\n updateLayers();\n };\n pendingRetryRef.current = retry;\n map.current.once('styledata', retry);\n return;\n }\n throw err;\n }\n }, [\n shapeId,\n sourceId,\n strokeId,\n map,\n formattedGeomData,\n color,\n opacity,\n strokeColor,\n cancelPendingRetry,\n ]);\n\n const registerEventHandlers = React.useCallback(() => {\n const layer = map.current?.getLayer(shapeId);\n if (!layer) return () => {};\n\n const handleMouseMove = (e: MapLayerMouseEvent) => {\n setmouseLat(e.lngLat.lat);\n setmouseLng(e.lngLat.lng);\n setIsHovered(true);\n setActiveTooltipId(markerId);\n map.current.getCanvas().style.cursor = 'pointer'; // eslint-disable-line no-param-reassign\n };\n\n const handleMouseLeave = () => {\n setIsHovered(false);\n setActiveTooltipId(null);\n map.current.getCanvas().style.cursor = ''; // eslint-disable-line no-param-reassign\n };\n\n const handleClick = (e: MapLayerMouseEvent) => {\n if (hasEventHandlers) {\n handleMapClick?.(e);\n }\n };\n\n map.current.on('mousemove', shapeId, handleMouseMove);\n map.current.on('mouseleave', shapeId, handleMouseLeave);\n map.current.on('click', shapeId, handleClick);\n\n return () => {\n if (map.current) {\n map.current.off('mousemove', shapeId, handleMouseMove);\n map.current.off('mouseleave', shapeId, handleMouseLeave);\n map.current.off('click', shapeId, handleClick);\n }\n };\n }, [shapeId, markerId, map, setActiveTooltipId, hasEventHandlers, handleMapClick]);\n\n React.useEffect(() => {\n updateLayers();\n }, [updateLayers]);\n\n React.useEffect(() => {\n return registerEventHandlers();\n }, [registerEventHandlers]);\n\n // Dim non-focused shapes when a choropleth is focused\n React.useEffect(() => {\n if (!map.current) return;\n\n const layer = map.current.getLayer(shapeId);\n if (!layer) return;\n\n if (activeChoroplethId === null || activeChoroplethId === shapeId) {\n map.current.setPaintProperty(shapeId, 'fill-opacity', opacity);\n } else {\n map.current.setPaintProperty(shapeId, 'fill-opacity', opacity * 0.3);\n }\n }, [activeChoroplethId, shapeId, opacity, map]);\n\n // Clean up on unmount\n React.useEffect(\n () => () => {\n cancelPendingRetry();\n cleanupChoropleth(shapeId, sourceId, strokeId, map);\n },\n []\n );\n\n if (isThemeChanged) {\n // Theme changes will reset the style layers of the entire map\n // so we need to rerender the choropleths\n updateLayers();\n }\n\n const handleFocus = React.useCallback(() => {\n if (onFocus) {\n onFocus();\n }\n setIsFocused(true);\n setmouseLat(centroidLat);\n setmouseLng(centroidLng);\n setActiveChoroplethId(shapeId);\n setActiveTooltipId(markerId);\n }, [centroidLat, centroidLng, shapeId, markerId, setActiveChoroplethId, setActiveTooltipId, onFocus]);\n\n const handleBlur = React.useCallback(() => {\n setIsFocused(false);\n setActiveChoroplethId(null);\n setActiveTooltipId(null);\n onBlur?.();\n }, [setActiveChoroplethId, setActiveTooltipId, onBlur]);\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent) => {\n onKeyDown?.(e);\n if (hasEventHandlers && (e.key === KEYBOARD_KEYS.ENTER || e.key === KEYBOARD_KEYS.SPACE)) {\n e.preventDefault();\n // Create mock MapLibre event with proper coordinates for keyboard activation\n const mockEvent: {\n lngLat: { lng: number; lat: number };\n originalEvent: React.KeyboardEvent;\n } = {\n lngLat: {\n lng: mouseLng ?? centroidLng ?? 0,\n lat: mouseLat ?? centroidLat ?? 0,\n },\n originalEvent: e,\n };\n handleMapClick(mockEvent);\n }\n },\n [hasEventHandlers, handleMapClick, onKeyDown, centroidLat, centroidLng, mouseLat, mouseLng]\n );\n\n // Show tooltip at mouse position on hover, centroid on focus\n // For hover, offset the position upward to create a gap between cursor and tooltip\n const tooltipPosition = React.useMemo(() => {\n if (isFocused) return { lat: centroidLat, lng: centroidLng };\n if (!isHovered || !map.current) return { lat: mouseLat, lng: mouseLng };\n\n // Convert mouse position to screen pixels, add offset, convert back to coordinates\n const mousePoint = map.current.project([mouseLng, mouseLat]);\n mousePoint.y -= 24;\n const offsetCoords = map.current.unproject(mousePoint);\n return { lat: offsetCoords.lat, lng: offsetCoords.lng };\n }, [isFocused, isHovered, mouseLat, mouseLng, centroidLat, centroidLng, map]);\n\n // Don't render if centroid is invalid (prevents panning to 0,0)\n const hasCentroid = centroidLat !== null && centroidLng !== null;\n\n const ariaLabel = React.useMemo(() => {\n const formattedAreaValue =\n typeof areaValue === 'number' && !Number.isNaN(areaValue) ? areaValue.toString() : 'N/A';\n\n let choroplethLabel = sprintf(_('%(areaId)s: %(areaValue)s'), {\n areaId: areaId.toString(),\n areaValue: formattedAreaValue,\n });\n\n if (hasEventHandlers) {\n choroplethLabel = sprintf(_('%(label)s, Click for drilldown'), { label: choroplethLabel });\n }\n\n return choroplethLabel;\n }, [areaId, areaValue, hasEventHandlers]);\n\n return (\n <MarkerWrapper\n additionalFields={additionalFields}\n tooltipHeader={tooltipHeader}\n latitude={tooltipPosition.lat}\n longitude={tooltipPosition.lng}\n map={map}\n areaId={areaId}\n areaValue={areaValue}\n stylesManagedExternally={stylesManagedExternally}\n customMarkerId={markerId}\n showCoordinates={false}\n >\n <FocusableShapeButton\n data-test=\"choropleth-anchor\"\n ref={elementRef as React.Ref<HTMLButtonElement>}\n role={hasEventHandlers && hasCentroid ? 'button' : 'graphics-symbol'}\n aria-label={ariaLabel}\n aria-hidden={!hasCentroid}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n onClick={hasEventHandlers ? handleMapClick : undefined}\n />\n </MarkerWrapper>\n );\n },\n compareChoropleth\n);\n\nChoropleth.displayName = 'MapChoropleth';\n\ninterface ChoroplethLayerProps {\n choroplethLayer: ChoroplethLayerType;\n map: React.MutableRefObject<Map>;\n isThemeChanged: boolean;\n setIsThemeChanged: (isThemeChanged: boolean) => void;\n onMapClick?: ({ e, payload }) => void;\n stylesManagedExternally?: boolean;\n hasEventHandlers?: boolean;\n}\n\nconst ChoroplethLayer = (props: ChoroplethLayerProps): JSX.Element => {\n const {\n map,\n choroplethLayer,\n isThemeChanged,\n setIsThemeChanged,\n onMapClick,\n stylesManagedExternally = false,\n hasEventHandlers,\n } = props;\n const cfgOpacity = Math.min(Math.max(choroplethLayer?.choroplethOpacity, 0), 1);\n const scaledOpacities = getScaledOpacities(choroplethLayer?.dataColors, cfgOpacity) ?? [];\n const colors = choroplethLayer?.dataColors?.map(color => (color?.length > 7 ? color.slice(0, 7) : color));\n\n const limit = Math.min(\n choroplethLayer?.areaIds?.length,\n choroplethLayer?.areaValues?.length,\n choroplethLayer?.geom?.length ?? 0,\n choroplethLayer?.resultLimit ? choroplethLayer.resultLimit : DEFAULT_RESULT_LIMIT\n );\n\n const { handleKeyDown, handleFocus, handleBlur, setElementRef } = useRovingTabindex(map);\n const areaIdSliced = choroplethLayer?.areaIds?.slice(0, limit) ?? [];\n // generate a unique id if areaIds are not unique\n const uniqueAreaIdSliced =\n uniq(areaIdSliced).length === areaIdSliced.length\n ? areaIdSliced\n : areaIdSliced.map((id, i) => `${id}${i}`);\n const additionalFields = choroplethLayer?.metadata\n ? choroplethLayer.metadata.map(choroplethMetadata => {\n if (choroplethLayer.additionalTooltipFields) {\n return choroplethLayer.additionalTooltipFields.map(field => ({\n name: field,\n value: formatTooltipFieldValue(choroplethMetadata[field]),\n }));\n }\n return [];\n })\n : [];\n\n const tooltipHeaderField = choroplethLayer?.tooltipHeaderField || null;\n\n const handleMapClick = (e, i) => {\n const payload = formatMetadata(choroplethLayer, i);\n onMapClick({ e, payload });\n };\n\n if (!map || !choroplethLayer?.geom) {\n return null;\n }\n\n if (isThemeChanged) {\n setIsThemeChanged(false);\n }\n\n return (\n <div>\n {uniqueAreaIdSliced.map((id, i) => {\n const areaId = areaIdSliced[i];\n const areaValue = choroplethLayer.areaValues[i];\n\n return (\n <Choropleth\n key={id}\n id={id}\n geomData={choroplethLayer.geom[i]}\n map={map}\n color={colors[i]}\n opacity={scaledOpacities[i]}\n strokeColor={choroplethLayer.choroplethStrokeColor}\n isThemeChanged={isThemeChanged}\n areaId={areaId}\n areaValue={areaValue}\n additionalFields={additionalFields[i]}\n tooltipHeader={tooltipHeaderField?.[i]}\n handleMapClick={e => handleMapClick(e, i)}\n stylesManagedExternally={stylesManagedExternally}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n onBlur={handleBlur}\n elementRef={element => setElementRef(i, element)}\n hasEventHandlers={hasEventHandlers}\n />\n );\n })}\n </div>\n );\n};\n\nexport default ChoroplethLayer;\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/Message\";\nexport * from \"@splunk/visualizations-shared/Message\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualization-context/GeoRegistry\";\nexport * from \"@splunk/visualization-context/GeoRegistry\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualization-context/GeoJsonProvider\";\nexport * from \"@splunk/visualization-context/GeoJsonProvider\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as React from 'react';\nimport type { Map } from 'maplibre-gl';\nimport Message from '@splunk/visualizations-shared/Message';\nimport GeoRegistry from '@splunk/visualization-context/GeoRegistry';\nimport GeoJsonProvider from '@splunk/visualization-context/GeoJsonProvider';\nimport type { Feature, FeatureCollection } from 'geojson';\nimport type { GeoJsonDataType } from '@splunk/visualizations-shared/mapUtils';\nimport { ChoroplethLayerType, getScaledOpacities, formatMetadata, formatTooltipFieldValue } from './MapUtils';\nimport { Choropleth } from './ChoroplethLayer';\nimport { useRovingTabindex } from './useRovingTabindex';\n\ninterface ChoroplethLayerProps {\n width: number | string;\n height: number | string;\n choroplethLayer: ChoroplethLayerType;\n map: React.MutableRefObject<Map>;\n isThemeChanged: boolean;\n setIsThemeChanged: (isThemeChanged: boolean) => void;\n onMapClick?: ({ e, payload }) => void;\n hasEventHandlers?: boolean;\n}\n\nconst LocalChoroplethLayer = (props: ChoroplethLayerProps): JSX.Element => {\n const {\n width,\n height,\n map,\n choroplethLayer,\n isThemeChanged,\n setIsThemeChanged,\n onMapClick,\n hasEventHandlers,\n } = props;\n const cfgOpacity = Math.min(Math.max(choroplethLayer?.choroplethOpacity, 0), 1);\n const emptyFeature: Feature<GeoJsonDataType, Record<string, unknown>> = {\n type: 'Feature',\n properties: { name: '' },\n geometry: null,\n };\n const [geoJson, setGeoJson] = React.useState<FeatureCollection<GeoJsonDataType, Record<string, unknown>>>(\n {\n type: 'FeatureCollection',\n features: [emptyFeature],\n }\n );\n const [validGeoJson, setValidGeoJson] = React.useState(true);\n const [geoJsonError, setGeoJsonError] = React.useState({\n message: '',\n });\n\n const { handleKeyDown, handleFocus, handleBlur, setElementRef } = useRovingTabindex(map);\n\n // load local geoJson registry data\n React.useEffect(() => {\n let isMounted = true;\n const geoRegistry = GeoRegistry.create();\n geoRegistry.addDefaultProvider(new GeoJsonProvider());\n\n const loadGeoJson = async () => {\n try {\n const geoJsonData = (await geoRegistry.getByURL(choroplethLayer.source)) as FeatureCollection<\n GeoJsonDataType,\n Record<string, unknown>\n >;\n if (!isMounted) {\n return;\n }\n setGeoJson(geoJsonData);\n setValidGeoJson(true);\n } catch (e) {\n if (!isMounted) {\n return;\n }\n setGeoJsonError({ message: e instanceof Error ? e.message : '' });\n setValidGeoJson(false);\n }\n };\n\n loadGeoJson();\n\n return () => {\n isMounted = false;\n };\n }, [choroplethLayer.source]);\n\n const updatedPropertyFormat = React.useMemo(() => {\n let propertyFormat = 'name';\n if (choroplethLayer.areaIds && validGeoJson) {\n const propertyFormats = Object.keys(geoJson.features[0].properties);\n\n // check the state or country format used in dataSource\n /* Accepted format for countries:\n \"properties\":\n {\n \"iso2\": \"AM\",\n \"iso3\": \"ARM\",\n \"name\": \"Armenia\"\n }\n\n Accepted format for US States:\n \"properties\":\n {\n \"iso_3166_2\": \"US-MI\",\n \"postal\": \"MI\",\n \"name\": \"Michigan\",\n \"label_en\": \"Michigan\"\n },\n */\n const formatCheck = geoJson.features.flatMap(element =>\n propertyFormats.filter(key => element.properties[key] === choroplethLayer.areaIds[0])\n )[0];\n\n if (formatCheck !== undefined) {\n propertyFormat = formatCheck;\n }\n }\n return propertyFormat;\n }, [choroplethLayer.areaIds, geoJson]);\n\n const colors = choroplethLayer?.dataColors?.map(color => (color?.length > 7 ? color.slice(0, 7) : color));\n const scaledOpacities = getScaledOpacities(choroplethLayer?.dataColors, cfgOpacity) ?? [];\n\n const buildChoroplethData = (el: Feature<GeoJsonDataType, Record<string, unknown>>) => {\n const choroplethData: {\n color: string;\n areaValue: string | number;\n opacity: number;\n name: string;\n idx: number;\n } = {\n color: choroplethLayer.choroplethEmptyAreaColor,\n areaValue: 'No Data',\n opacity: cfgOpacity,\n name: '',\n idx: 0,\n };\n\n const rawName = el.properties[updatedPropertyFormat];\n choroplethData.name =\n typeof rawName === 'string' || typeof rawName === 'number' ? String(rawName) : '';\n\n if (choroplethLayer.areaIds) {\n const lookupValue = choroplethData.name;\n const dataIdx = choroplethLayer.areaIds.indexOf(lookupValue);\n if (dataIdx === -1) {\n choroplethData.idx = choroplethLayer.areaIds.length;\n } else {\n choroplethData.color = colors[dataIdx];\n choroplethData.areaValue = choroplethLayer.areaValues[dataIdx];\n choroplethData.opacity = scaledOpacities[dataIdx];\n choroplethData.idx = dataIdx;\n }\n }\n return choroplethData;\n };\n\n const updatedAllChoroplethData = React.useMemo(() => {\n if (!validGeoJson) return [];\n return geoJson.features.map(el => buildChoroplethData(el));\n }, [\n choroplethLayer.areaIds,\n choroplethLayer.areaValues,\n choroplethLayer.choroplethEmptyAreaColor,\n colors,\n scaledOpacities,\n cfgOpacity,\n validGeoJson,\n geoJson.features,\n updatedPropertyFormat,\n ]);\n\n const handleMapClick = (e, i) => {\n const payload = formatMetadata(choroplethLayer, i);\n onMapClick({ e, payload });\n };\n\n if (isThemeChanged) {\n setIsThemeChanged(false);\n }\n\n const additionalFields = choroplethLayer?.metadata\n ? choroplethLayer.metadata.map(choroplethMetadata => {\n const tooltipFields = choroplethLayer.additionalTooltipFields ?? [];\n return tooltipFields.map(field => ({\n name: field,\n value: formatTooltipFieldValue(choroplethMetadata[field]),\n }));\n })\n : [];\n\n return (\n <div>\n {!validGeoJson && (\n <Message\n data-test=\"choropleth-message\"\n width={width}\n height={height}\n level=\"error\"\n message={geoJsonError.message}\n />\n )}\n {validGeoJson &&\n (() => {\n let renderIndex = 0;\n return updatedAllChoroplethData.map((el, i) => {\n const geometry = geoJson.features[i]?.geometry;\n const geomData: GeoJsonDataType =\n geometry && (geometry.type === 'MultiPolygon' || geometry.type === 'Polygon')\n ? geometry\n : null;\n\n // Skip rendering if geometry is invalid to avoid [0,0] centroid\n if (!geomData) {\n return null;\n }\n\n const currentRenderIndex = renderIndex;\n renderIndex += 1;\n\n return (\n <Choropleth\n key={el.name}\n id={el.name}\n map={map}\n color={el.color}\n opacity={el.opacity}\n strokeColor={choroplethLayer.choroplethStrokeColor}\n areaId={el.name}\n areaValue={\n typeof el.areaValue === 'number' ? el.areaValue : Number(el.areaValue)\n }\n handleMapClick={e => handleMapClick(e, el.idx)}\n isThemeChanged={isThemeChanged}\n geomData={geomData}\n additionalFields={additionalFields[el.idx]}\n tooltipHeader={choroplethLayer.tooltipHeaderField?.[el.idx]}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n onBlur={handleBlur}\n elementRef={element => setElementRef(currentRenderIndex, element)}\n hasEventHandlers={hasEventHandlers}\n />\n );\n });\n })()}\n </div>\n );\n};\n\nexport default LocalChoroplethLayer;\n", "import * as React from 'react';\nimport styled, { StyleSheetManager } from 'styled-components';\nimport { omit, noop } from 'lodash';\nimport { useRef, useEffect, useCallback, useContext, useMemo } from 'react';\nimport chroma from 'chroma-js';\nimport { Map, ScaleControl } from 'maplibre-gl';\nimport type { StyleSpecification } from 'maplibre-gl';\nimport { _ } from '@splunk/ui-utils/i18n';\nimport Button from '@splunk/react-ui/Button';\nimport Tooltip from '@splunk/react-ui/Tooltip';\nimport MapContext from '@splunk/visualization-context/MapContext';\nimport type { MapContextInterface } from '@splunk/visualization-context/MapContext';\nimport { LAYER_TYPE } from '@splunk/visualization-schemas';\nimport { VizProps } from '../../common/interfaces/VizProps';\nimport { getFloatingLayerStyleTarget } from '../../common/utils/shadowDomUtils';\nimport PureMapContainer from './PureMapContainer';\nimport { ensureMapWorkerConfigured } from './mapWorker';\nimport {\n getTilePreset,\n getMapStyle,\n getZoomConstraintsFromTileConfig,\n MAP_STYLE_VERSION_NUMBER,\n ClusterLayerType,\n LayerType,\n MAX_BUBBLE_RADIUS,\n isValidLatLon,\n getGlobalLayerBoundaries,\n compareBaseStyles,\n ChoroplethLayerType,\n isBaseTileConfig,\n} from './MapUtils';\nimport ClusterLayer from './ClusterLayer';\nimport ChoroplethLayer from './ChoroplethLayer';\nimport LocalChoroplethLayer from './LocalChoroplethLayer';\nimport { MapProvider } from './MapContext';\n\nexport const DEFAULT_CENTER: [number, number] = [0, 0];\nexport const DEFAULT_CONTROL_BACKGROUND_COLOR = '#2b3033';\nexport const DEFAULT_CONTROL_FOREGROUND_COLOR = '#B5B5B5';\nexport const DEFAULT_SCALE_UNIT = 'imperial';\nexport const DEFAULT_SHOW_SCALE = true;\nexport const DEFAULT_SHOW_ZOOM_CONTROLS = true;\nexport const DEFAULT_SHOW_BASELAYER = true;\nexport const DEFAULT_ZOOM = 0;\nexport type ScaleUnitType = 'imperial' | 'metric';\nexport type BaseLayerTileServerType = 'vector' | 'raster';\n\nexport interface PureMapProps extends Partial<VizProps> {\n backgroundColor?: string;\n baseLayerTileServer?: string;\n baseLayerTileServerType?: BaseLayerTileServerType;\n center?: [number, number];\n controlBackgroundColor?: string;\n controlForegroundColor?: string;\n layers?: LayerType[];\n scaleUnit?: ScaleUnitType;\n showScale?: boolean;\n showZoomControls?: boolean;\n showBaseLayer?: boolean;\n themeColorScheme?: string;\n title?: string;\n zoom?: number;\n onMapLoad?: { exec: () => void };\n onMapClick?: (event: { e: unknown; payload: Record<string, unknown> }) => void;\n onOptionsChange?: (options: Record<string, unknown>) => void;\n showCoordinates?: boolean;\n hasEventHandlers?: boolean;\n}\n\nexport interface HexColorObj {\n color: string;\n opacity: number;\n}\n\n// convert rgb/rgba/hex color to encoded color & opacity for SVG strings\nexport const formatColor = (color: string): HexColorObj => {\n const chromaColor = chroma(color);\n return {\n color: chroma(chromaColor.rgb()).hex().replace('#', '%23'),\n opacity: chromaColor.alpha(),\n };\n};\n\nconst ControlButtonContainer = styled.div<{\n controlBackgroundColor: string;\n}>`\n position: absolute;\n left: 16px;\n z-index: 3;\n width: 40px;\n border-radius: 4px;\n background-color: ${props => props.controlBackgroundColor};\n box-shadow:\n 0px 26px 103px rgba(0, 0, 0, 0.64),\n 0px 11px 18px rgba(0, 0, 0, 0.32),\n 0px 3px 6px rgba(0, 0, 0, 0.3);\n`;\n\nconst ZoomControlsContainer = styled(ControlButtonContainer)`\n top: 12px;\n display: flex;\n flex-direction: column;\n`;\n\nconst FitToDataButtonContainer = styled(ControlButtonContainer)<{\n controlBackgroundColor: string;\n showZoomControls?: boolean;\n}>`\n top: ${props => (props.showZoomControls ? '115px' : '12px')};\n`;\n\nconst ControlButton = styled(Button)<{\n controlBackgroundColor: string;\n controlForegroundColor: string;\n controlIconColorEncoded: { color: string; opacity: number };\n}>`\n width: 40px;\n height: 43px;\n border: none;\n background-color: ${props => props.controlBackgroundColor};\n background-repeat: no-repeat;\n background-position: center;\n`;\n\nconst ZoomInButton = styled(ControlButton).attrs({\n 'data-test': 'zoom-in-button',\n 'data-is-first': true,\n})`\n background-image: url('data:image/svg+xml;charset=UTF-8,<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M9 1C9 0.447715 8.55229 0 8 0C7.44772 0 7 0.447715 7 1V7H1C0.447715 7 0 7.44772 0 8C0 8.55229 0.447715 9 1 9H7V15C7 15.5523 7.44772 16 8 16C8.55229 16 9 15.5523 9 15V9H15C15.5523 9 16 8.55229 16 8C16 7.44772 15.5523 7 15 7H9V1Z\" fill=\"${props =>\n props.controlIconColorEncoded.color}\" fill-opacity=\"${props =>\n props.controlIconColorEncoded.opacity}\" /></svg>');\n`;\n\nconst ZoomOutButton = styled(ControlButton).attrs({\n 'data-test': 'zoom-out-button',\n})`\n background-image: url('data:image/svg+xml;charset=UTF-8,<svg width=\"14\" height=\"3\" viewBox=\"0 0 14 3\" xmlns=\"http://www.w3.org/2000/svg\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M0 1.99707C0 1.44479 0.447715 0.99707 1 0.99707H13C13.5523 0.99707 14 1.44479 14 1.99707C14 2.54936 13.5523 2.99707 13 2.99707H1C0.447715 2.99707 0 2.54936 0 1.99707Z\" fill=\"${props =>\n props.controlIconColorEncoded.color}\" fill-opacity=\"${props =>\n props.controlIconColorEncoded.opacity}\" /></svg>');\n`;\n\nconst StyledFitToDataButton = styled(ControlButton).attrs({\n 'data-test': 'fit-to-data-button',\n})`\n height: 40px;\n background-image: url('data:image/svg+xml;charset=UTF-8,<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"${props =>\n props.controlIconColorEncoded\n .color}\" stroke-width=\"2\" stroke-linecap=\"round\"/><path d=\"M12 3.5V6.5M12 20.5V17.5M3.5 12H6.5M20.5 12H17.5\" stroke=\"${props =>\n props.controlIconColorEncoded.color}\" stroke-width=\"2\" stroke-linecap=\"round\"/></svg>');\n`;\n\nPureMapContainer.displayName = 'PureMapContainer';\n\nconst DEFAULT_LAYERS: LayerType[] = [];\nconst DEFAULT_ON_MAP_LOAD = { exec: noop };\n\nconst PureMap = ({\n width = 800,\n height = 500,\n backgroundColor = '#0b0c0e',\n baseLayerTileServer,\n baseLayerTileServerType,\n center,\n controlBackgroundColor = DEFAULT_CONTROL_BACKGROUND_COLOR,\n controlForegroundColor = DEFAULT_CONTROL_FOREGROUND_COLOR,\n layers = DEFAULT_LAYERS,\n scaleUnit = DEFAULT_SCALE_UNIT,\n showScale = DEFAULT_SHOW_SCALE,\n showZoomControls = DEFAULT_SHOW_ZOOM_CONTROLS,\n showBaseLayer = DEFAULT_SHOW_BASELAYER,\n themeColorScheme = 'dark',\n zoom,\n onMapLoad = DEFAULT_ON_MAP_LOAD,\n onMapClick = noop,\n onOptionsChange = noop,\n title,\n showCoordinates,\n hasEventHandlers = false,\n}: PureMapProps): JSX.Element => {\n const { defaultTileConfig, customTileConfig } = useContext<MapContextInterface>(MapContext);\n const basemapContainer = useRef<HTMLDivElement>(null);\n const map = useRef<Map>(null);\n const scaleControl = useRef<ScaleControl>(null);\n const fitToDataButtonClickedRef = useRef<boolean>(false);\n const isUserInteractingRef = useRef<boolean>(false);\n const [hasUserPanned, setHasUserPanned] = React.useState<boolean>(false);\n\n const { tilePreset, defaultTileLight, defaultTileDark } = useMemo(\n () => getTilePreset({ defaultTileConfig, customTileConfig }),\n [defaultTileConfig, customTileConfig]\n );\n\n const [currentZoomLevel, _setCurrentZoomLevel] = React.useState<number>(zoom ?? DEFAULT_ZOOM);\n const currentZoomLevelRef = useRef(currentZoomLevel);\n const setCurrentZoomLevel = newZoom => {\n currentZoomLevelRef.current = newZoom;\n _setCurrentZoomLevel(newZoom);\n };\n const [isMapLoaded, setMapIsLoaded] = React.useState<boolean>(false);\n const [isThemeChanged, setIsThemeChanged] = React.useState<boolean>(false);\n // We are tracking mapMinZoom, which is the smallest zoom the map is capable of doing\n // This is because DEFAULT_ZOOM of 0 is sometimes not possible for maps with height > 500.\n // The map will do a little shake when it tries, and then auto change zoom value to mapMinZoom.\n // Interestingly, the larger the map height, the larger the mapMinZoom is.\n // For some reason, map.getMinZoom() is always 0, might be a MapLibre bug.\n const [mapMinZoom, _setMapMinZoom] = React.useState<number>(-1);\n const mapMinZoomRef = useRef(mapMinZoom);\n const setMapMinZoom = newMinZoom => {\n mapMinZoomRef.current = newMinZoom;\n _setMapMinZoom(newMinZoom);\n };\n // Assign default center when no center is defined\n const lngLatCenter = useMemo<[number, number]>(() => {\n if (!isValidLatLon(center)) {\n return DEFAULT_CENTER;\n }\n return [center[1], center[0]];\n }, [center]);\n\n // Assign default zoom when no zoom is defined\n const zoomLevel = useMemo(() => {\n if (zoom === undefined) {\n return DEFAULT_ZOOM;\n }\n return zoom;\n }, [zoom]);\n\n const setIsThemeChangedCallback = (isMyThemeChanged: boolean) => {\n setIsThemeChanged(isMyThemeChanged);\n };\n\n const onOptionsChangeProxy = useCallback(\n e => {\n onOptionsChange(e);\n },\n [onOptionsChange]\n );\n\n const fitMapToContent = useCallback(() => {\n if (!layers[0] || !map.current) {\n return;\n }\n const lngLatBounds = getGlobalLayerBoundaries([layers[0]]);\n map.current.fitBounds(\n lngLatBounds,\n {\n padding: MAX_BUBBLE_RADIUS + 5,\n animate: false,\n },\n { triggeredFromFitBounds: true }\n );\n }, [layers]);\n\n const addZoomEndEventListener = useCallback(() => {\n // register event listener - zoom\n map.current.on('zoomend', event => {\n const mapZoomLevel = map.current.getZoom();\n if (mapZoomLevel < mapMinZoomRef.current) {\n setMapMinZoom(mapZoomLevel);\n }\n // @ts-ignore\n if (event?.triggeredFromFitBounds) {\n return;\n }\n setCurrentZoomLevel(mapZoomLevel);\n });\n }, []);\n\n const initializeMap = useCallback(\n mapStyle => {\n ensureMapWorkerConfigured();\n map.current = new Map({\n container: basemapContainer.current,\n canvasContextAttributes: {\n preserveDrawingBuffer: true,\n },\n style: mapStyle,\n center: lngLatCenter,\n zoom: zoomLevel,\n cooperativeGestures: true,\n locale: {\n 'CooperativeGesturesHandler.WindowsHelpText': _('Use Ctrl + scroll to zoom map'),\n 'CooperativeGesturesHandler.MacHelpText': _('Use \u2318 + scroll to zoom map'),\n 'CooperativeGesturesHandler.MobileHelpText': _('Use two fingers to move the map'),\n },\n attributionControl: false,\n ...getZoomConstraintsFromTileConfig(mapStyle, baseLayerTileServer),\n });\n // Fired immediately after all necessary resources have been downloaded\n // and the first visually complete rendering of the map has occurred.\n map.current.on('load', () => {\n if (layers?.length > 0 && center === undefined && zoom === undefined) {\n setMapMinZoom(map.current.getZoom());\n map.current.once('zoomend', () => {\n addZoomEndEventListener();\n });\n fitMapToContent();\n } else {\n addZoomEndEventListener();\n }\n setMapIsLoaded(true);\n // https://maplibre.org/maplibre-gl-js-docs/api/map/#map#fitbounds. Need alternate approach to handle the same.\n setTimeout(() => {\n if (map?.current?.redraw) {\n map.current.redraw();\n }\n if (onMapLoad && typeof onMapLoad.exec === 'function') {\n onMapLoad.exec();\n }\n }, 500);\n });\n\n map.current.on('dragstart', () => {\n setHasUserPanned(true);\n });\n map.current.on('zoomstart', e => {\n if (e.originalEvent) {\n setHasUserPanned(true);\n }\n });\n\n // register event listener - drag\n map.current.on('dragend', () => {\n const newCenter = map.current.getCenter();\n onOptionsChangeProxy({\n center: [newCenter.lat, newCenter.lng],\n zoom: map.current.getZoom(),\n });\n });\n\n map.current.on('dragstart', () => {\n isUserInteractingRef.current = true;\n });\n\n map.current.on('dragend', () => {\n setTimeout(() => {\n if (isUserInteractingRef) {\n isUserInteractingRef.current = false;\n }\n }, 100);\n });\n\n map.current.on('zoomstart', () => {\n isUserInteractingRef.current = true;\n });\n\n map.current.on('zoomend', () => {\n setTimeout(() => {\n if (isUserInteractingRef) {\n isUserInteractingRef.current = false;\n }\n }, 100);\n });\n\n map.current.on('resize', () => {\n const mapZoomLevel = map.current.getZoom();\n // If the map's zoom value is at the min zoom, and the map did a resize\n // sometimes the map will have a changed min zoom value.\n // Then we want to update the map's min zoom value.\n if (\n currentZoomLevelRef.current <= mapMinZoomRef.current &&\n mapZoomLevel !== mapMinZoomRef.current\n ) {\n setMapMinZoom(mapZoomLevel);\n }\n });\n },\n [lngLatCenter, zoomLevel, layers?.length]\n );\n\n const initializeScale = useCallback(() => {\n scaleControl.current = new ScaleControl({\n maxWidth: 70,\n unit: scaleUnit,\n });\n map.current.addControl(scaleControl.current);\n }, [scaleUnit]);\n\n const updateScale = useCallback(() => {\n if (showScale) {\n scaleControl?.current?.setUnit(scaleUnit);\n }\n }, [scaleUnit, showScale]);\n\n useEffect(() => {\n if (map.current) {\n map.current.resize();\n }\n }, [width, height]);\n\n useEffect(() => {\n if (map.current) {\n // We want to skip onOptionsChangeProxy if we have transitioned into the default map state, with undefined zoom and center.\n // This is because the DEFAULT_ZOOM value, 0, is sometimes not possible for maps with height > 500.\n // So in those cases the map will auto change its zoom from 0 => mapMinZoom\n // Since this is not a user event we don't want to broadcast it.\n if (\n currentZoomLevel === mapMinZoomRef.current &&\n (zoom === undefined || zoom < mapMinZoomRef.current)\n ) {\n return;\n }\n const newCenter = map.current.getCenter();\n onOptionsChangeProxy({\n // when zooming with mouse/track pad,\n // zooming centers at the cursor position, need to update center as well\n center: [newCenter.lat, newCenter.lng],\n zoom: currentZoomLevel,\n });\n }\n }, [currentZoomLevel, onOptionsChangeProxy]);\n\n useEffect(() => {\n // do not render when defaultTileConfig, customTileConfig and tileset are not configured\n if (Object.keys(tilePreset).length === 0 && (!baseLayerTileServer || !baseLayerTileServerType)) {\n // eslint-disable-next-line no-console\n console.warn(\n 'Map Tile Server configuration is missing or invalid. Please provide a valid configuration'\n );\n return;\n }\n\n const mapStyle = getMapStyle({\n showBaseLayer,\n baseLayerTileServer,\n baseLayerTileServerType,\n tilePreset,\n colorScheme: themeColorScheme,\n defaultTileLight,\n defaultTileDark,\n });\n\n if (!isBaseTileConfig(mapStyle)) {\n return;\n }\n\n mapStyle.version = MAP_STYLE_VERSION_NUMBER;\n\n // If the map has already been initialized, we update the styles\n if (map.current) {\n const curr = map.current.getStyle();\n const next = omit(mapStyle, ['theme', 'name', 'key']);\n\n // In dashboard studio this setStyle function is triggered by zoom changes as well\n // Since setStyle will reset all style layers on the map including choropleth,\n // we ONLY want to this to be called when there are style changes\n if (!compareBaseStyles(curr, next)) {\n // Refer to https://maplibre.org/maplibre-gl-js-docs/api/map/#setstyle-example for options.diff (default is true)\n map.current.setStyle(omit(mapStyle, ['theme', 'name', 'key']) as StyleSpecification);\n setIsThemeChanged(true);\n }\n const { minZoom, maxZoom } = getZoomConstraintsFromTileConfig(mapStyle, baseLayerTileServer);\n map.current.setMinZoom(minZoom);\n map.current.setMaxZoom(maxZoom);\n updateScale();\n } else {\n // initialize the map only once with a constructed style from user configured options\n // or default configs from the map context\n initializeMap(omit(mapStyle, ['theme', 'name', 'key']) as StyleSpecification);\n initializeScale();\n }\n }, [\n showBaseLayer,\n tilePreset,\n initializeMap,\n initializeScale,\n updateScale,\n defaultTileLight,\n defaultTileDark,\n baseLayerTileServer,\n baseLayerTileServerType,\n themeColorScheme,\n ]);\n\n useEffect(() => {\n if (map.current) {\n if (fitToDataButtonClickedRef.current) {\n return;\n }\n if (isUserInteractingRef.current) {\n return;\n }\n map.current.flyTo({\n center: lngLatCenter,\n // Make sure we are not flying to a zoom value smaller than the mapMinZoom\n // If we do, the map will do a little shake.\n zoom: Math.max(zoomLevel, mapMinZoomRef.current),\n });\n }\n }, [lngLatCenter, zoomLevel]);\n\n useEffect(\n () => () => {\n if (map.current) {\n map.current.remove();\n }\n },\n []\n );\n\n const [layer] = layers;\n\n // when datasource changes or fit to data button clicked, we want to auto zoom if zoom is undefined\n useEffect(() => {\n if (isMapLoaded && layer && zoom === undefined && center === undefined) {\n fitMapToContent();\n fitToDataButtonClickedRef.current = false;\n }\n }, [\n layer?.resultLimit,\n (layer as ClusterLayerType)?.latitude,\n (layer as ClusterLayerType)?.longitude,\n (layer as ChoroplethLayerType)?.areaIds,\n zoom,\n center,\n ]);\n\n const showResetButton = useCallback(() => {\n return center !== undefined || zoom !== undefined || hasUserPanned;\n }, [center, zoom, hasUserPanned]);\n\n const handleResetClick = useCallback(() => {\n fitToDataButtonClickedRef.current = true;\n setHasUserPanned(false);\n\n if (map.current) {\n if (center !== undefined && zoom !== undefined) {\n map.current.jumpTo({\n center: lngLatCenter,\n zoom: Math.max(zoomLevel, mapMinZoomRef.current),\n });\n } else {\n fitMapToContent();\n }\n }\n\n onOptionsChangeProxy({ center: undefined, zoom: undefined });\n }, [onOptionsChangeProxy, fitMapToContent, center, zoom, lngLatCenter, zoomLevel]);\n\n const floatingLayerStyleTarget = getFloatingLayerStyleTarget(basemapContainer.current);\n const stylesManagedExternally = Boolean(floatingLayerStyleTarget);\n const wrapFloatingLayers = (children: React.ReactNode) =>\n floatingLayerStyleTarget ? (\n <StyleSheetManager target={floatingLayerStyleTarget}>{children}</StyleSheetManager>\n ) : (\n children\n );\n\n const handleZoomIn = useCallback(() => {\n if (map.current) {\n map.current.zoomIn();\n }\n }, []);\n\n const handleZoomOut = useCallback(() => {\n if (map.current) {\n map.current.zoomOut();\n }\n }, []);\n\n return (\n <PureMapContainer\n aria-label={title || _('Map')}\n className=\"puremap\"\n width={width}\n height={height}\n backgroundColor={backgroundColor}\n controlBackgroundColor={controlBackgroundColor}\n controlForegroundColor={controlForegroundColor}\n controlIconColorEncoded={formatColor(controlForegroundColor)}\n ref={basemapContainer}\n showScale={showScale}\n showZoomControls={showZoomControls}\n >\n {showZoomControls && (\n <ZoomControlsContainer controlBackgroundColor={controlBackgroundColor}>\n <Tooltip content={_('Zoom in')} contentRelationship=\"label\" defaultPlacement=\"right\">\n <ZoomInButton\n onClick={handleZoomIn}\n controlBackgroundColor={controlBackgroundColor}\n controlForegroundColor={controlForegroundColor}\n controlIconColorEncoded={formatColor(controlForegroundColor)}\n />\n </Tooltip>\n <Tooltip content={_('Zoom out')} contentRelationship=\"label\" defaultPlacement=\"right\">\n <ZoomOutButton\n onClick={handleZoomOut}\n controlBackgroundColor={controlBackgroundColor}\n controlForegroundColor={controlForegroundColor}\n controlIconColorEncoded={formatColor(controlForegroundColor)}\n />\n </Tooltip>\n </ZoomControlsContainer>\n )}\n {showResetButton() && (\n <FitToDataButtonContainer\n controlBackgroundColor={controlBackgroundColor}\n showZoomControls={showZoomControls}\n >\n <Tooltip content={_('Fit to data')} contentRelationship=\"label\" defaultPlacement=\"right\">\n <StyledFitToDataButton\n onClick={handleResetClick}\n controlBackgroundColor={controlBackgroundColor}\n controlForegroundColor={controlForegroundColor}\n controlIconColorEncoded={formatColor(controlForegroundColor)}\n />\n </Tooltip>\n </FitToDataButtonContainer>\n )}\n {wrapFloatingLayers(\n <>\n {isMapLoaded &&\n layer &&\n (layer.type === LAYER_TYPE.Bubble || layer.type === LAYER_TYPE.Marker) && (\n <ClusterLayer\n clusterLayer={layer as ClusterLayerType}\n themeColorScheme={themeColorScheme}\n map={map}\n zoom={currentZoomLevel}\n onMapClick={onMapClick}\n showCoordinates={showCoordinates}\n stylesManagedExternally={stylesManagedExternally}\n hasEventHandlers={hasEventHandlers}\n />\n )}\n {isMapLoaded &&\n layer &&\n layer.type === LAYER_TYPE.Choropleth &&\n (layer as ChoroplethLayerType).source && (\n <MapProvider>\n <LocalChoroplethLayer\n width={width}\n height={height}\n map={map}\n choroplethLayer={layer as ChoroplethLayerType}\n isThemeChanged={isThemeChanged}\n setIsThemeChanged={setIsThemeChangedCallback}\n onMapClick={onMapClick}\n hasEventHandlers={hasEventHandlers}\n />\n </MapProvider>\n )}\n {isMapLoaded &&\n layer &&\n layer.type === LAYER_TYPE.Choropleth &&\n !(layer as ChoroplethLayerType).source && (\n <MapProvider>\n <ChoroplethLayer\n map={map}\n choroplethLayer={layer as ChoroplethLayerType}\n isThemeChanged={isThemeChanged}\n setIsThemeChanged={setIsThemeChangedCallback}\n onMapClick={onMapClick}\n stylesManagedExternally={stylesManagedExternally}\n hasEventHandlers={hasEventHandlers}\n />\n </MapProvider>\n )}\n </>\n )}\n </PureMapContainer>\n );\n};\n\nexport default PureMap;\n", "\nimport * as defaultImport from \"@splunk/visualization-color-palettes/editors/PresetPalettes\";\nexport * from \"@splunk/visualization-color-palettes/editors/PresetPalettes\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualization-icons\";\nexport * from \"@splunk/visualization-icons\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualization-icons/placeholders\";\nexport * from \"@splunk/visualization-icons/placeholders\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/configUtils\";\nexport * from \"@splunk/visualizations-shared/configUtils\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import { get, range } from 'lodash';\nimport { isDynamicOption } from '@splunk/visualizations-shared/configUtils';\nimport { VizConfig } from '../interfaces/VizConfig';\nimport { EditorLayoutConfig, EditorConfig } from '../interfaces/Editor';\n\n// included for backwards compatibility\nexport { enhanceOptionsSchemaWithDynamicOptions } from '@splunk/visualization-schemas';\n\nexport interface PresetEntry {\n name: string;\n value: any;\n label: string;\n}\n\n/**\n * Helper function to enhance a Visualization Config as needed based on behaviors specified in supports block\n * this function also collapse all editor panels\n * @param vizConfig a Visualization Config\n * @returns an enhanced Visualization Config containing updated config entries based on behaviors it supports\n * and containing `open: false` for all editor panels in editorConfig\n */\nfunction enhanceConfig(vizConfig: VizConfig): VizConfig {\n const enhancedConfig: VizConfig = { ...vizConfig };\n\n enhancedConfig.editorConfig = vizConfig.editorConfig.map((config: EditorConfig): EditorConfig => {\n return { ...config, open: config.open || false };\n });\n return enhancedConfig;\n}\n\n/**\n * Helper function to uncollapse all editor panels by adding `open: true` to the editorConfig\n * Created for editor unit tests\n * @param vizConfig a Visualization Config\n * @returns a Visualization Config containing `open: true` for all editor panels in editorConfig\n */\nfunction uncollapseEditorConfig(vizConfig: VizConfig): VizConfig {\n const editorPanelUncollapsedConfig: VizConfig = { ...vizConfig };\n editorPanelUncollapsedConfig.editorConfig = vizConfig.editorConfig.map(\n (config: EditorConfig): EditorConfig => {\n return { ...config, open: true };\n }\n );\n return editorPanelUncollapsedConfig;\n}\n\n// private helpers to improve readability of getInitialPreset\n// this shouldn't be tested since this util isn't something that we expect to use outside of getInitialPreset\n\n/**\n * this checks to make sure that all values within vizContext are compatible with the given preset's context to determine the initialPreset\n * if a preset has explicitly specified a key as being undefined, the vizContext must also has that key as undefined, or else this CANNOT be the initialPreset\n * the inverse is true; if a preset has key is NOT undefined, it must also be NOT undefined in the corresponding vizContext\n * the internal config contents are irrelevant (as the user could customize them in source), just as long as the presence of `undefined`s match up\n *\n * Since the presetConfigs have explicit undefined keys to override the existing config, we need to explicitly check the undefined values\n */\nfunction hasCompatibleContexts(\n vizContext: { [configKey: string]: any },\n presetContext: { [configKey: string]: any }\n): boolean {\n const presetContextKeys = Object.keys(presetContext);\n return presetContextKeys.every(\n (contextKey): boolean =>\n (presetContext[contextKey] === undefined && vizContext[contextKey] === undefined) ||\n (presetContext[contextKey] !== undefined && vizContext[contextKey] !== undefined)\n );\n}\n\n/**\n * Checks to make sure that dynamic (non-dynamic) options in a given preset are also dynamic (non-dynamic) in the vizOptions\n */\nfunction hasCompatibleOptions(\n vizOptions: { [configKey: string]: any },\n presetOptions: { [configKey: string]: any }\n): boolean {\n const presetOptionKeys = Object.keys(presetOptions);\n return presetOptionKeys.every(\n (optionKey): boolean =>\n isDynamicOption(presetOptions[optionKey]) === isDynamicOption(vizOptions[optionKey])\n );\n}\n\n/**\n * Evaluates whether there is an initialPreset that fits the current state of vizContext + vizOptions\n * This function ignores extraneous vizOptions or vizContext keys, as they could be outside the scope of what the preset is intended to configure\n *\n * @param {Object} vizContext - the current vizContext definition\n * @param {Object} vizOptions - the current vizOptions definition\n * @param {PresetEntry[]} presets - the list of presets, one of which can be considered an initialPreset\n */\nfunction getInitialPreset(\n vizContext: { [configKey: string]: any },\n vizOptions: { [configKey: string]: any },\n presets: PresetEntry[]\n): PresetEntry | null {\n return presets.find((preset): boolean => {\n const presetContext = get(preset, ['value', 'context'], {});\n const presetOptions = get(preset, ['value', 'options'], {});\n const presetContextKeys = Object.keys(presetContext);\n const presetOptionKeys = Object.keys(presetOptions);\n\n // all presets have to explicitly specify which options to reset (i.e. need explicitly undefined keys)\n // if not, then the preset is invalid in config.ts\n if (presetContextKeys.length === 0 || presetOptionKeys.length === 0) return false;\n\n return (\n hasCompatibleContexts(vizContext, presetContext) &&\n hasCompatibleOptions(vizOptions, presetOptions)\n );\n });\n}\n\ninterface PrecisionOption {\n label: string;\n value: number;\n}\n\n/**\n * generates number precision values for a Select editor\n *\n * @param {Number} numPrecisionValues - number of integer precision values to generate\n * @returns {{ label: string; value; string }[]} array of { label, value } tuples\n */\nfunction generatePrecisionValues(numPrecisionValues: number): PrecisionOption[] {\n return range(0, numPrecisionValues + 1).map(\n (i): PrecisionOption => ({\n label: `${i} (0${i > 0 ? '.' : ''}${'0'.repeat(i)})`, // e.g. 0.000 for numPrecisionValues = 3\n value: i,\n })\n );\n}\n\nexport { enhanceConfig, getInitialPreset, generatePrecisionValues, uncollapseEditorConfig, isDynamicOption };\n\n/**\n * insert layout in layout array, return a new layout array instead of updating the original\n *\n * @param {EditorLayoutConfig[][]} layout - editor layout\n * @param {Number} index - the index to insert layout item(s)\n * @param {EditorLayoutConfig[][]} layoutItems - the item(s) to insert\n * @returns {EditorLayoutConfig[][]} new editor layout with insertion\n */\nexport const insertLayout = (\n layout: EditorLayoutConfig[][],\n index: number,\n ...layoutItems: EditorLayoutConfig[][]\n): EditorLayoutConfig[][] => [\n // copy part of the array before the specified index\n ...layout.slice(0, index),\n // inserted layout item\n ...layoutItems,\n // copy part of the array after the specified index\n ...layout.slice(index),\n];\n", "import { _ } from '@splunk/ui-utils/i18n';\nimport { EditorLayoutConfig } from '../interfaces/Editor';\nimport { ThemedDefaults } from '../interfaces/ThemedDefaults';\n\ninterface BackgroundEditorProps {\n label?: string;\n themes: ThemedDefaults;\n labelPosition?: string;\n}\n\nconst background: ({ label, themes, labelPosition }: BackgroundEditorProps) => EditorLayoutConfig[] = ({\n label,\n themes,\n labelPosition,\n}) => [\n {\n label: _(label || 'Background color'),\n option: 'backgroundColor',\n editor: 'editor.color',\n editorProps: {\n labelPosition: labelPosition || 'top',\n themes,\n },\n },\n];\n\nexport default background;\n", "\nimport * as defaultImport from \"@splunk/themes/pick\";\nexport * from \"@splunk/themes/pick\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/themes/variables\";\nexport * from \"@splunk/themes/variables\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import pick from '@splunk/themes/pick';\nimport variables from '@splunk/themes/variables';\n\nexport const defaultBackgroundColor = props =>\n pick({\n enterprise: {\n dark: variables.black(props),\n light: variables.white(props),\n },\n prisma: variables.backgroundColorSection(props),\n })(props);\n", "import { _ } from '@splunk/ui-utils/i18n';\nimport { pick, variables } from '@splunk/themes';\nimport { defaultPalettesConfig } from '@splunk/visualization-color-palettes/editors/PresetPalettes';\nimport { mapOptionsSchema as optionsSchema, LAYER_TYPE } from '@splunk/visualization-schemas';\nimport { Map as MapIcon } from '@splunk/visualization-icons';\nimport { Map as MapPlaceholderIcon } from '@splunk/visualization-icons/placeholders';\n\nimport { DataContract } from '../common/interfaces/DataContract';\nimport { DefaultContext } from '../common/interfaces/DefaultContext';\nimport { EditorConfig } from '../common/interfaces/Editor';\nimport { ThemedDefaults } from '../common/interfaces/ThemedDefaults';\nimport { VizBehavior } from '../common/interfaces/VizBehavior';\nimport { VizCategory } from '../common/interfaces/VizCategory';\nimport { VizConfig } from '../common/interfaces/VizConfig';\nimport { VizSize } from '../common/interfaces/VizSize';\nimport { enhanceConfig } from '../common/utils/configUtils';\nimport getBackgroundColorEditor from '../common/editorConfig/BackgroundColor';\nimport { defaultBackgroundColor } from '../common/ThemedDefaults';\n\nconst defaultContext: DefaultContext = {\n colorRangeConfig: [\n { to: 20, value: '#D41F1F' },\n { from: 20, to: 40, value: '#D94E17' },\n { from: 40, to: 60, value: '#CBA700' },\n { from: 60, to: 80, value: '#669922' },\n { from: 80, value: '#118832' },\n ],\n colorMatchConfig: [{ match: '', value: '#5C33FF' }],\n colorGradientConfig: { colors: ['#252214', '#B846BB'] },\n};\n\nconst dataContract: DataContract = {\n requiredDataSources: [],\n optionalDataSources: [\n {\n name: 'primary',\n description: 'DataSource that powers the visualization.',\n },\n ],\n initialRequestParams: {\n primary: { offset: 0, count: 10000 },\n },\n};\n\nconst size: VizSize = {\n initialWidth: 800,\n initialHeight: 600,\n};\n\nconst themes: ThemedDefaults = {\n defaultBackgroundColor,\n controlBackgroundColor: props =>\n pick({\n enterprise: {\n dark: variables.gray22(props),\n light: variables.white(props),\n },\n prisma: variables.backgroundColorPopup(props),\n })(props),\n controlForegroundColor: props =>\n pick({\n enterprise: variables.textColor(props),\n prisma: variables.contentColorDefault(props),\n })(props),\n defaultChoroplethEmptyAreaColor: props =>\n pick({\n enterprise: {\n dark: variables.gray22(props),\n light: variables.gray92(props),\n },\n prisma: {\n dark: variables.interactiveColorBackground(props),\n light: variables.neutral300(props),\n },\n })(props),\n defaultGradientMigrationConfig: props =>\n pick({\n enterprise: {\n dark: ['#4D4A5D', variables.syntaxPurple(props)],\n light: ['#D2CFDC', variables.syntaxPurple(props)],\n },\n prisma: {\n dark: ['#484558', variables.syntaxPurple(props)],\n light: ['#D8D4E1', variables.syntaxPurple(props)],\n },\n })(props),\n};\n\nconst isChoroplethLayer = options => options.layers?.[0]?.type === LAYER_TYPE.Choropleth;\n\nconst isLocalChoroplethLayer = options =>\n isChoroplethLayer(options) &&\n (options.layers[0].source === 'geo://default/us' || options.layers[0].source === 'geo://default/world');\n\nconst EDITOR_LABEL_WIDTH = 140;\nconst editorConfig: EditorConfig[] = [\n {\n label: _('Data configurations'),\n layout: [\n [\n {\n label: _('Layer type'),\n option: 'layers[0].type',\n editor: 'editor.select',\n editorProps: {\n values: [\n { label: _('Bubble'), value: LAYER_TYPE.Bubble },\n { label: _('Marker'), value: LAYER_TYPE.Marker },\n {\n label: _('Choropleth'),\n value: LAYER_TYPE.Choropleth,\n },\n ],\n },\n },\n ],\n [\n {\n label: _('Area IDs'),\n option: 'layers[0].areaIds',\n editor: 'editor.columnSelector',\n showEditor: ({ options }) => isChoroplethLayer(options),\n editorProps: {\n dataSourceKey: 'primary',\n shouldShowInternalFields: false,\n filterByTypes: ['string'],\n },\n },\n ],\n [\n {\n label: _('Area values'),\n option: 'layers[0].areaValues',\n editor: 'editor.columnSelector',\n showEditor: ({ options }) => isChoroplethLayer(options),\n editorProps: {\n dataSourceKey: 'primary',\n shouldShowInternalFields: false,\n filterByTypes: ['number'],\n },\n },\n ],\n [\n {\n label: _('Latitude'),\n option: 'layers[0].latitude',\n editor: 'editor.columnSelector',\n showEditor: ({ options }) => !isChoroplethLayer(options),\n editorProps: {\n dataSourceKey: 'primary',\n shouldShowInternalFields: false,\n },\n },\n ],\n [\n {\n label: _('Longitude'),\n option: 'layers[0].longitude',\n editor: 'editor.columnSelector',\n showEditor: ({ options }) => !isChoroplethLayer(options),\n editorProps: {\n dataSourceKey: 'primary',\n shouldShowInternalFields: false,\n },\n },\n ],\n [\n {\n label: _('Bubble size'),\n option: 'layers[0].bubbleSize',\n editor: 'editor.columnMultiSelector',\n showEditor: ({ options }) =>\n !(\n options.layers?.length &&\n (options.layers[0].type === 'marker' || options.layers[0].type === 'choropleth')\n ),\n editorProps: {\n dataSourceKey: 'primary',\n shouldShowInternalFields: false,\n excludeByNames: ['latitude', 'longitude', 'geobin'],\n },\n },\n ],\n [\n {\n label: _('Additional tooltip fields'),\n option: 'layers[0].additionalTooltipFields',\n editor: 'editor.columnMultiSelectionByFieldNameEditor',\n },\n ],\n [\n {\n label: _('Tooltip header field'),\n option: 'layers[0].tooltipHeaderField',\n editor: 'editor.columnSelector',\n editorProps: {\n dataSourceKey: 'primary',\n shouldShowInternalFields: false,\n },\n },\n ],\n [\n {\n label: _('Result limit'),\n option: 'layers[0].resultLimit',\n editor: 'editor.number',\n showEditor: ({ options }) => !isLocalChoroplethLayer(options),\n editorProps: {\n themes,\n labelPosition: 'top',\n min: 0,\n },\n },\n ],\n ],\n },\n {\n label: _('Data display'),\n layout: [\n [\n {\n label: _('Latitude (initial map location)'),\n option: 'center[0]',\n editor: 'editor.number',\n editorProps: {\n themes,\n labelPosition: 'top',\n min: -90,\n max: 90,\n },\n },\n ],\n [\n {\n label: _('Longitude (initial map location)'),\n option: 'center[1]',\n editor: 'editor.number',\n editorProps: {\n themes,\n labelPosition: 'top',\n min: -180,\n max: 180,\n },\n },\n ],\n [\n {\n label: _('Zoom (initial map location)'),\n option: 'zoom',\n editor: 'editor.number',\n editorProps: {\n themes,\n labelPosition: 'top',\n min: 0,\n },\n },\n ],\n [\n {\n label: _('Show Latitude and Longitude'),\n option: 'showCoordinates',\n editor: 'editor.checkbox',\n editorProps: {\n labelPosition: 'right',\n labelWidth: EDITOR_LABEL_WIDTH,\n },\n },\n ],\n [\n {\n label: _('Show zoom controls'),\n option: 'showZoomControls',\n editor: 'editor.checkbox',\n editorProps: {\n labelPosition: 'right',\n labelWidth: EDITOR_LABEL_WIDTH,\n },\n },\n ],\n [\n {\n label: _('Show scale'),\n option: 'showScale',\n editor: 'editor.toggle',\n editorProps: {\n labelPosition: 'right',\n labelWidth: EDITOR_LABEL_WIDTH,\n },\n },\n ],\n [\n {\n label: _('Scale unit'),\n option: 'scaleUnit',\n editor: 'editor.radioBar',\n showEditor: ({ options }) => options.showScale !== false,\n editorProps: {\n values: [\n { label: _('Metric'), value: 'metric' },\n { label: _('Imperial'), value: 'imperial' },\n ],\n },\n },\n ],\n ],\n },\n {\n label: _('Color and style'),\n layout: [\n [\n {\n label: _('Data colors'),\n option: 'layers[0].dataColors',\n filterKeywords: ['range', 'match', 'dynamic coloring'],\n showEditor: ({ options }) => !isChoroplethLayer(options),\n context: 'colorRangeConfig',\n editor: 'editor.dynamicColorWithPrecedence',\n editorProps: {\n labelPosition: 'top',\n flyoutTitle: _('Dynamic coloring: value'),\n formatters: [\n {\n label: _('Ranges'),\n value: 'rangeValue',\n isDefault: true,\n defaults: {\n dataValues: defaultContext.colorRangeConfig,\n },\n },\n {\n label: _('Matches'),\n value: 'matchValue',\n defaults: {\n dataValues: defaultContext.colorMatchConfig,\n },\n },\n ],\n dataSelectors: [\n {\n label: _('Data values'),\n value: 'dataValues',\n },\n ],\n defaultPalettesConfig,\n },\n },\n {\n label: _('Data colors'),\n filterKeywords: ['range', 'match', 'gradient', 'dynamic coloring'],\n option: 'layers[0].dataColors',\n context: 'colorGradientConfig',\n editor: 'editor.dynamicColorWithPrecedence',\n showEditor: ({ options }) => isChoroplethLayer(options),\n editorProps: {\n labelPosition: 'top',\n flyoutTitle: _('Dynamic coloring: value'),\n formatters: [\n {\n label: _('Gradient'),\n value: 'gradient',\n isDefault: true,\n defaults: {\n areaValues: defaultContext.colorGradientConfig,\n },\n },\n {\n label: _('Ranges'),\n value: 'rangeValue',\n defaults: {\n areaValues: defaultContext.colorRangeConfig,\n },\n },\n {\n label: _('Matches'),\n value: 'matchValue',\n defaults: {\n areaValues: defaultContext.colorMatchConfig,\n },\n },\n ],\n // Use areaValues for Choropleth\n dataSelectors: [\n {\n label: _('Area values'),\n value: 'areaValues',\n },\n ],\n defaultPalettesConfig,\n },\n },\n ],\n [\n {\n label: _('Data values'),\n editor: 'editor.columnSelector',\n option: 'layers[0].dataValues',\n showEditor: ({ options }) =>\n !isChoroplethLayer(options) && options.layers?.[0]?.dataColors,\n editorProps: {\n dataSourceKey: 'primary',\n filterByTypes: ['number'],\n },\n },\n ],\n [\n {\n label: _('Series colors'),\n option: 'layers[0].seriesColors',\n editor: 'editor.seriesColors',\n showEditor: ({ options }) =>\n !isChoroplethLayer(options) && !options.layers?.[0]?.dataColors,\n },\n ],\n [\n {\n label: _('Choropleth empty area'),\n option: 'layers[0].choroplethEmptyAreaColor',\n editor: 'editor.color',\n showEditor: ({ options }) => isLocalChoroplethLayer(options),\n editorProps: {\n themes,\n },\n },\n ],\n [\n {\n label: _('Choropleth stroke'),\n option: 'layers[0].choroplethStrokeColor',\n editor: 'editor.color',\n showEditor: ({ options }) => isChoroplethLayer(options),\n editorProps: {\n themes,\n },\n },\n ],\n [\n {\n label: _('Choropleth opacity (%)'),\n option: 'layers[0].choroplethOpacity',\n editor: 'editor.percent',\n showEditor: ({ options }) => isChoroplethLayer(options),\n editorProps: {\n themes,\n min: 0,\n },\n },\n ],\n // [\n // {\n // label: _('Series colors by field name'),\n // option: 'seriesColorsByField',\n // editor: 'editor.seriesColorsByField',\n // },\n // ],\n getBackgroundColorEditor({ themes }),\n [\n {\n label: _('Show base layer'),\n option: 'showBaseLayer',\n editor: 'editor.toggle',\n },\n ],\n [\n {\n label: _('Base layer tile server'),\n option: 'baseLayerTileServer',\n editor: 'editor.text',\n showEditor: ({ options }) => options.showBaseLayer !== false,\n },\n ],\n [\n {\n label: _('Base layer tile server type'),\n option: 'baseLayerTileServerType',\n editor: 'editor.radioBar',\n showEditor: ({ options }) =>\n options.showBaseLayer === false\n ? false\n : !(\n options.baseLayerTileServer === undefined ||\n options.baseLayerTileServer === ''\n ),\n editorProps: {\n values: [\n { label: _('Vector'), value: 'vector' },\n { label: _('Raster'), value: 'raster' },\n ],\n },\n },\n ],\n ],\n },\n];\n\n/**\n * visualization configuration\n */\nconst config: VizConfig = {\n /**\n * unique viz key\n */\n key: 'splunk.map',\n /**\n * viz name\n */\n name: _('Map'),\n category: VizCategory.SPATIAL,\n status: 'preview',\n /**\n * viz icon\n */\n icon: MapIcon,\n placeholderIcon: MapPlaceholderIcon,\n dataContract,\n size,\n defaultContext,\n optionsSchema,\n editorConfig,\n events: {\n 'map.load': {\n description: 'triggered when map is fully loaded',\n parentKeys: ['exec'],\n },\n 'map.click': {\n description: 'trigger when user clicks map layer',\n },\n },\n supports: [VizBehavior.DYNAMIC_OPTIONS, VizBehavior.EVENTS, VizBehavior.PLACEHOLDER],\n themes,\n requiredProps: [],\n};\n\nexport default enhanceConfig(config);\n", "\nimport * as defaultImport from \"@splunk/themes/getSettingsFromThemedProps\";\nexport * from \"@splunk/themes/getSettingsFromThemedProps\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualization-encoding/Options\";\nexport * from \"@splunk/visualization-encoding/Options\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/SanitizeProps\";\nexport * from \"@splunk/visualizations-shared/SanitizeProps\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualization-context/TimezoneContext\";\nexport * from \"@splunk/visualization-context/TimezoneContext\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/moment\";\nexport * from \"@splunk/moment\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/async-dynamic-options-evaluator\";\nexport * from \"@splunk/async-dynamic-options-evaluator\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"prop-types\";\nexport * from \"prop-types\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "/* eslint-disable class-methods-use-this */\nexport interface VizActionHandler {\n /**\n * put focus on the visualization\n */\n focus(): void;\n\n /**\n * compute snapshot of this visualization\n */\n snapshot(): Record<string, unknown>; // (This is for pdf export)\n}\n\nexport class DefaultVizActionHandler {\n focus(): void {\n // noop\n }\n\n snapshot(): Record<string, unknown> {\n return null; // noop\n }\n}\n", "/* eslint-disable react/no-unused-prop-types,react/prefer-stateless-function */\nimport * as T from 'prop-types';\nimport { noop } from 'lodash';\nimport { DashboardVizProps } from './interfaces/DashboardVizProps';\nimport { DefaultVizActionHandler } from './interfaces/VizActionHandler';\n\n// this is identical to the initial height and width we use in BaseVisualization in dashboard-visualizations\nexport const INITIAL_WIDTH = 250;\nexport const INITIAL_HEIGHT = 250;\n\n/**\n * A Splunk visualization\n */\nclass SplunkVisualization {\n static readonly propTypes: Record<keyof DashboardVizProps, T.Validator<any>> = {\n /**\n * display mode\n */\n mode: T.oneOf(['view', 'edit', 'export']).isRequired,\n /**\n * width in pixel or string, defaults to 100%\n */\n width: T.oneOfType([T.string, T.number]).isRequired,\n /**\n * height in pixel or string\n */\n height: T.oneOfType([T.string, T.number]).isRequired,\n /**\n * visualization context used for dynamic option evaluation\n */\n context: T.object,\n /**\n * visualization formatting options\n */\n options: T.object,\n /**\n * A callback to update formatting options\n */\n onOptionsChange: T.func,\n /**\n * datasource state which include data and request params, object key indicate the datasource type.\n */\n dataSources: T.objectOf(\n T.shape({\n /**\n * current request params\n */\n requestParams: T.object,\n /**\n * current dataset\n */\n data: T.shape({\n fields: T.array,\n columns: T.array,\n }),\n /**\n * error\n */\n error: T.shape({\n level: T.string,\n message: T.string,\n }),\n /**\n * meta data that came with the dataset\n */\n meta: T.object,\n })\n ),\n /**\n * A callback to trigger event\n */\n onEventTrigger: T.func,\n /**\n * Inform viz if there are handlers listening to events\n */\n hasEventHandlers: T.bool,\n /**\n * A callback to communicate computed props to a consumer\n */\n onComputedProps: T.func,\n /**\n * A callback to obtain visualization api\n */\n vizActionHandlerRef: T.func,\n\n loading: T.bool,\n theme: T.object,\n /**\n * A callback to request new data with updated request params\n */\n onRequestParamsChange: T.func,\n };\n\n /**\n *\n */\n public static readonly defaults: DashboardVizProps = {\n // BaseVisualization in dashboard-visualizations uses 100% for width but 250 for height\n width: '100%',\n height: INITIAL_HEIGHT,\n dataSources: {},\n onEventTrigger: (): Record<string, unknown> => ({}),\n mode: 'view',\n hasEventHandlers: false,\n options: {},\n context: {},\n onOptionsChange: (): Record<string, unknown> => ({}),\n vizActionHandlerRef: (): DefaultVizActionHandler => new DefaultVizActionHandler(),\n onComputedProps: (): Record<string, unknown> => ({}),\n loading: false,\n onRequestParamsChange: noop,\n };\n}\n\nexport default SplunkVisualization;\n", "import { FieldEntry } from '@splunk/visualizations-shared/dataSourceUtils';\nimport { validSegmentationModes } from '@splunk/visualization-schemas';\n\nexport interface JsonColumnData {\n fields: FieldEntry[] | string[];\n columns: (string | number | null)[][];\n}\n\nexport type HighlightedSourceMap = Record<string, Record<string, boolean>>;\nexport type TagsMap = Record<string, Record<string, string[]>>;\n\nexport interface Meta {\n totalCount: number;\n sid: string;\n app: string;\n highlighted?: HighlightedSourceMap;\n tags?: TagsMap;\n}\n\nexport const validSortDirs = ['asc', 'desc', 'none'] as const;\nexport type SortDirType = (typeof validSortDirs)[number];\nexport type SegmentationType = (typeof validSegmentationModes)[number];\nexport const validOutputModes = ['json_cols', 'json'] as const;\nexport type OutputModeType = (typeof validOutputModes)[number];\n\nexport interface RequestParams {\n count?: number;\n offset?: number;\n sort?: {\n [sortKey: string]: SortDirType;\n };\n segmentation?: SegmentationType;\n // eslint-disable-next-line camelcase\n output_mode?: OutputModeType;\n}\n\nexport interface DataSource {\n requestParams: Partial<RequestParams>;\n onRequestParamsChange?: (p: Record<string, unknown>) => void;\n data: JsonColumnData;\n error?: { level: string; message: string };\n meta: Partial<Meta>;\n}\n\nexport interface DataSourceMeta {\n requestParams: Partial<RequestParams>;\n meta: Partial<Meta>;\n onRequestParamsChange: (payload: RequestParams) => void;\n}\n", "import * as T from 'prop-types';\nimport { has } from 'lodash';\nimport { DataSourceMeta, SortDirType, validSortDirs } from '../interfaces/DataSource';\n\nexport interface SortParams {\n currentSortKey?: string;\n currentSortDir?: SortDirType;\n onSort?: (e: MouseEvent, { sortKey, sortDir }: { sortKey: string; sortDir: SortDirType }) => void;\n}\n\nexport const SortParamsPropTypes = T.shape({\n currentSortKey: T.string,\n currentSortDir: T.oneOf(validSortDirs),\n onSort: T.func,\n});\n\nexport const useSortingParams = ({ requestParams, onRequestParamsChange }: DataSourceMeta): SortParams => {\n let currentSortKey: string | undefined;\n let currentSortDir: SortDirType | undefined;\n\n const nextSortDirMap: Record<SortDirType, SortDirType> = {\n asc: 'desc',\n desc: 'asc',\n none: 'asc',\n };\n\n let onSort: SortParams['onSort'];\n if (typeof onRequestParamsChange === 'function') {\n if (requestParams && has(requestParams, 'sort')) {\n currentSortKey = Object.keys(requestParams.sort).shift();\n currentSortDir = requestParams.sort[currentSortKey];\n }\n\n // undid memoization since there is a dependency on requestParams, which is a deeply nested object\n onSort = (e, { sortKey, sortDir }): void => {\n if (typeof sortKey === 'string') {\n const nextSortDir = has(nextSortDirMap, sortDir) ? nextSortDirMap[sortDir] : 'none';\n onRequestParamsChange({\n ...requestParams,\n offset: 0,\n sort: { [sortKey]: nextSortDir },\n });\n } else {\n onRequestParamsChange(requestParams);\n }\n };\n }\n\n return {\n currentSortKey,\n currentSortDir,\n onSort,\n };\n};\n", "import * as T from 'prop-types';\nimport { cloneDeep, noop } from 'lodash';\nimport * as React from 'react';\nimport { DataSourceMeta, RequestParams } from '../interfaces/DataSource';\n\nexport interface OnChangeParams {\n page?: number;\n count?: number;\n}\nexport interface PaginatorParams {\n isPaging?: boolean;\n current?: number;\n totalPages?: number;\n onChange?: (event: React.MouseEvent<HTMLButtonElement>, data: OnChangeParams) => void;\n}\n\nexport const PaginatorParamsPropTypes = T.shape({\n isPaging: T.bool,\n current: T.number,\n totalPages: T.number,\n onChange: T.func,\n});\n\nexport const usePaginationParams = ({\n requestParams,\n meta,\n onRequestParamsChange,\n}: DataSourceMeta): PaginatorParams => {\n const totalCount = meta?.totalCount || 0;\n const offset = requestParams?.offset || 0;\n const count = requestParams?.count;\n const totalPages = typeof count === 'number' && count > 0 ? Math.ceil(totalCount / count) : 0;\n const current = typeof count === 'number' && count > 0 ? Math.floor(offset / count) + 1 : 0;\n const isPaging = totalPages > 1 && typeof onRequestParamsChange === 'function';\n\n const onChangeHandler = (e, { page, count: countArg }: OnChangeParams): void => {\n const newParams: RequestParams = cloneDeep(requestParams);\n\n if (typeof countArg === 'number') {\n newParams.count = countArg;\n newParams.offset = 0;\n }\n\n const pageCount = typeof newParams.count === 'number' ? newParams.count : 10;\n if (typeof page === 'number' && page > 0) {\n newParams.count = pageCount;\n newParams.offset = (page - 1) * pageCount;\n }\n\n onRequestParamsChange(newParams);\n };\n\n return {\n isPaging,\n current,\n totalPages,\n onChange: typeof onRequestParamsChange === 'function' ? onChangeHandler : noop,\n };\n};\n", "import { useRef } from 'react';\nimport { isEqual } from 'lodash';\n\n/**\n * This hook evaluates and stores the result of a passed function and only\n * re-evaluates the function when passed dependencies change.\n *\n * It is different from the internal React useMemo in the following aspects:\n * - it only stores the last evaluated result\n * - it uses a deep equality check to determine if dependencies have changed\n *\n * Inspired by apollo-client's useDeepMemo\n *\n * @param fn the function to be executed and\n * @param dependencies an array of dependencies\n */\nexport const useDeepMemo = <FnReturnType, DepType>(\n fn: () => FnReturnType,\n dependencies: DepType\n): FnReturnType => {\n const ref = useRef<{ dependencies: DepType; value: FnReturnType }>();\n if (!ref.current || !isEqual(dependencies, ref.current.dependencies)) {\n ref.current = {\n dependencies,\n value: fn(),\n };\n }\n return ref.current.value;\n};\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/SizeAwareWrapper\";\nexport * from \"@splunk/visualizations-shared/SizeAwareWrapper\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as React from 'react';\nimport { _ } from '@splunk/ui-utils/i18n';\nimport Message from '@splunk/visualizations-shared/Message';\nimport SizeAwareWrapper from '@splunk/visualizations-shared/SizeAwareWrapper';\nimport SplunkVisualization from '../SplunkVisualization';\n\n/**\n * @method isMissing\n * @param {any} v\n * @returns {boolean} true if the input value === null or undefined\n */\nexport const isMissing = (v): boolean => {\n return v === null || v === undefined;\n};\n\n/**\n * @method misskingKeys\n * @param {string[]} keys\n * @param {object} target\n * @returns {string[]} the keys of missing required props\n */\nexport const missingKeys = (keys: string[], target: Record<string, unknown>): string[] =>\n keys.filter(k => isMissing(target[k]));\n\nexport interface MissingPropsProps {\n width?: string | number;\n height?: string | number;\n missingProps: string[];\n backgroundColor?: string;\n}\n\n/**\n * @method MissingPropsMessage\n * @param {MissingPropsProps} props\n * @returns {React.ReactElement}\n */\nexport const MissingPropsMessage = (props: MissingPropsProps): React.ReactElement => {\n const {\n width = SplunkVisualization.defaults.width,\n height = SplunkVisualization.defaults.height,\n missingProps,\n backgroundColor,\n } = props;\n const cachedHandleResize = React.useCallback((w, h) => {\n setContainerWidth(w);\n setContainerHeight(h);\n }, []);\n const [containerWidth, setContainerWidth] = React.useState<number>(Number(width));\n const [containerHeight, setContainerHeight] = React.useState<number>(Number(height));\n return (\n <div style={{ width: containerWidth, height: containerHeight, background: backgroundColor }}>\n <SizeAwareWrapper width={width} height={height} onResize={cachedHandleResize} />\n <Message\n data-test=\"message\"\n width={width}\n height={height}\n message={_(`Missing property: ${missingProps.join(', ')}`)}\n level=\"error\"\n />\n </div>\n );\n};\n\nexport default MissingPropsMessage;\n", "import { DashboardVizProps } from '../interfaces/DashboardVizProps';\n\nexport type DashboardVizType = React.ComponentType<DashboardVizProps>;\n\n/**\n * @method extendStaticWrapperProps\n * @param {Object} props\n * @param {DashboardVizType} props.Wrapper\n * @param {DashboardVizType} props.Visualization\n */\nexport const extendStaticWrapperProps = ({\n Wrapper,\n Visualization,\n}: {\n [key: string]: DashboardVizType;\n}): void => {\n const extendProperties = ['propTypes', 'config'];\n extendProperties.forEach((prop: string): void => {\n if (Visualization[prop]) {\n // eslint-disable-next-line no-param-reassign\n Wrapper[prop] = Visualization[prop];\n }\n });\n};\n", "import * as React from 'react';\nimport styled from 'styled-components';\nimport { DashboardVizProps } from '../interfaces/DashboardVizProps';\nimport { ExtendedDashViz } from '../interfaces/ExtendedDashViz';\nimport { extendStaticWrapperProps } from '../utils/hocUtils';\n\n// Global provided via webpack\n// eslint-disable-next-line no-underscore-dangle\ndeclare const __VISION_VERSION__: string;\n\nconst Cover = styled.div`\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n`;\n\nconst Blocker = styled.div.attrs({\n 'data-splunk-visualization-version': __VISION_VERSION__,\n})`\n position: relative;\n width: 100%;\n height: 100%;\n`;\n\n/**\n * HOC that renders a cover layer in edit mode\n * @method withEditModeCover\n * @param {ExtendedDashViz} Visualization\n * @returns {ExtendedDashViz} Wrapper\n */\nconst withEditModeCover = (\n Visualization: ExtendedDashViz,\n disableEditModeCover?: boolean\n): ExtendedDashViz => {\n const Wrapper = (props: DashboardVizProps): React.ReactElement<DashboardVizProps> => {\n const { mode } = props;\n const showEditCover = mode === 'edit' && !disableEditModeCover;\n\n return (\n <Blocker>\n <Visualization {...props} />\n {showEditCover && <Cover data-test=\"edit-mode-cover\" />}\n </Blocker>\n );\n };\n extendStaticWrapperProps({ Wrapper, Visualization });\n return Wrapper as ExtendedDashViz;\n};\n\nexport default withEditModeCover;\n", "import * as React from 'react';\nimport styled from 'styled-components';\nimport { toPx } from '@splunk/visualizations-shared/style';\nimport { isColor } from '@splunk/visualizations-shared/colorUtils';\nimport SizeAwareWrapper from '@splunk/visualizations-shared/SizeAwareWrapper';\n\n// Global provided via webpack\n// eslint-disable-next-line no-underscore-dangle\ndeclare const __VISION_VERSION__: string;\n\ninterface ItemProps {\n backgroundColor?: string;\n width?: string | number;\n}\n\nconst Item = styled.div.attrs<ItemProps>(({ width }) => ({\n style: {\n width: toPx(width),\n },\n}))<ItemProps>`\n position: relative;\n background-color: ${(props): string =>\n (isColor(props.backgroundColor) && props.backgroundColor) || props.theme.defaultBackgroundColor}};\n`;\n\ninterface FixSizeItemProps {\n backgroundColor?: string;\n height?: string | number;\n width?: string | number;\n}\n\n// Use `.attrs()` for highly dynamic styles. Ref: https://github.com/styled-components/styled-components/issues/134#issuecomment-312415291\nconst FixSizeItem = styled.div.attrs<FixSizeItemProps>(\n ({\n width,\n height,\n }): {\n style: { width?: string; height?: string };\n } => {\n // Ensure height is never negative (browsers ignore negative height)\n const validHeight = typeof height === 'number' ? Math.max(height, 1) : height;\n return {\n style: {\n ...(width && { width: toPx(width) }),\n ...(validHeight && { height: toPx(validHeight) }),\n },\n };\n }\n)<FixSizeItemProps>`\n position: relative;\n flex-direction: column;\n flex: 1;\n display: flex;\n overflow: hidden !important;\n background-color: ${(props): string =>\n (isColor(props.backgroundColor) && props.backgroundColor) || props.theme.defaultBackgroundColor}};\n`;\n\nconst ItemContent = styled.div`\n position: relative;\n min-height: 100px;\n width: 100%;\n`;\n\nconst FixSizeItemContent = styled.div`\n min-height: 0px;\n flex: 1;\n position: relative;\n box-sizing: border-box;\n overflow: hidden !important;\n`;\n\ninterface HeightAndWidthProps {\n width?: string | number;\n height?: string | number;\n backgroundColor?: string;\n}\n\nconst withFixedSizeContainer = <P extends HeightAndWidthProps>(\n Viz: React.ComponentType<P>\n): React.ComponentType<P> => {\n const FixedSizeContainer = (props: P): React.ReactElement => {\n const { width, height, backgroundColor } = props;\n\n const cachedHandleResize = React.useCallback((w, h) => {\n setContainerWidth(w);\n setContainerHeight(h);\n }, []);\n const [containerWidth, setContainerWidth] = React.useState<number>(Number(props.width));\n const [containerHeight, setContainerHeight] = React.useState<number>(Number(props.height));\n if (!height) {\n return (\n <Item data-test=\"item\" width={width} backgroundColor={backgroundColor}>\n <ItemContent>\n <Viz {...props} />\n </ItemContent>\n </Item>\n );\n }\n return (\n <FixSizeItem\n data-test=\"fix-size-item\"\n data-splunk-visualization-version={__VISION_VERSION__}\n width={width}\n height={height}\n backgroundColor={backgroundColor}\n >\n <FixSizeItemContent>\n <SizeAwareWrapper width={width} height={height} onResize={cachedHandleResize} />\n <Viz {...props} width={containerWidth} height={containerHeight} />\n </FixSizeItemContent>\n </FixSizeItem>\n );\n };\n FixedSizeContainer.displayName = 'withFixedSizeContainer';\n return FixedSizeContainer;\n};\n\nexport default withFixedSizeContainer;\n", "import * as React from 'react';\nimport styled from 'styled-components';\nimport { get } from 'lodash';\nimport { _ } from '@splunk/ui-utils/i18n';\nimport { pick } from '@splunk/themes';\nimport Message from '@splunk/visualizations-shared/Message';\nimport { DataSource } from '../interfaces/DataSource';\nimport withFixedSizeContainer from '../hocs/FixedSizeContainer';\nimport SplunkVisualization from '../SplunkVisualization';\n\n/**\n * @method shouldShowIconPlaceholder\n * @param {object} dataSources\n * @param {boolean} loading\n * @returns {boolean}\n */\nexport const shouldShowIconPlaceholder = (\n dataSources: { [name: string]: DataSource },\n loading = false\n): boolean => {\n const data = get(dataSources, 'primary.data.columns[0]', undefined);\n const noData = data === undefined;\n const fields = get(dataSources, 'primary.data.fields[0]', undefined);\n const noFields = fields === undefined;\n return loading || noData || noFields;\n};\n\nexport interface IconPlaceholderProps {\n icon?: React.ComponentType<any>;\n width?: string | number;\n height?: string | number;\n iconColor?: string;\n backgroundColor: string;\n}\n\nconst PlaceholderContainer = styled.div`\n /* The inline token color wins when supported. Older browsers discard an\n unsupported oklch value and retain this inherited fallback instead. */\n color: ${pick({\n dark: '#fafafa',\n light: '#2c2c2c',\n })};\n`;\n\n/**\n * @method IconPlaceholder\n * @param {IconPlaceholderProps} props\n * @returns {React.ReactElement}\n */\nconst IconPlaceholder = (props: IconPlaceholderProps): React.ReactElement => {\n const {\n width = SplunkVisualization.defaults.width,\n height = SplunkVisualization.defaults.height,\n icon,\n iconColor,\n backgroundColor,\n } = props;\n\n let content = (\n <Message width={width} height={height} level=\"warning\" message={_('No DataSource Connected')} />\n );\n if (icon) {\n content = React.createElement(icon, {\n style: {\n left: '50%',\n top: '50%',\n opacity: 0.15,\n position: 'absolute',\n transform: 'translate(-50%, -50%)',\n },\n width: '50%',\n height: '50%',\n 'data-test': 'icon-placeholder',\n });\n }\n\n return (\n <PlaceholderContainer\n data-test=\"icon-placeholder-container\"\n style={{ width, height, background: backgroundColor, color: iconColor }}\n >\n {content}\n </PlaceholderContainer>\n );\n};\n\nexport default withFixedSizeContainer(IconPlaceholder);\n", "import * as React from 'react';\nimport { isColor } from '@splunk/visualizations-shared/colorUtils';\nimport variables from '@splunk/themes/variables';\nimport IconPlaceholder, { shouldShowIconPlaceholder } from '../components/IconPlaceholder';\nimport { VizBehavior } from '../interfaces/VizBehavior';\nimport { DashboardVizProps } from '../interfaces/DashboardVizProps';\nimport { DataSource } from '../interfaces/DataSource';\nimport { ExtendedDashViz } from '../interfaces/ExtendedDashViz';\nimport { extendStaticWrapperProps } from '../utils/hocUtils';\nimport SplunkVisualization from '../SplunkVisualization';\n\ntype useIconPlaceholderType = (\n dataSources: { [name: string]: DataSource },\n loading: boolean,\n options: Record<string, unknown>\n) => boolean;\n\nconst withPlaceholder = (\n Visualization: ExtendedDashViz,\n useIconPlaceholder: useIconPlaceholderType = shouldShowIconPlaceholder\n): ExtendedDashViz => {\n const { config } = Visualization;\n const { themes } = config;\n\n const Wrapper = (props: DashboardVizProps): React.ReactElement<DashboardVizProps> => {\n const {\n dataSources,\n loading,\n options,\n height = SplunkVisualization.defaults.height,\n width = SplunkVisualization.defaults.width,\n } = props;\n\n const showPlaceholder = useIconPlaceholder(dataSources, loading, options);\n const icon = config.placeholderIcon ?? config.icon;\n const iconColor = variables.contentColorActive(props);\n const bgColorFromTheme = isColor(options?.backgroundColor)\n ? options?.backgroundColor\n : themes?.defaultBackgroundColor?.(props);\n\n if (config.supports.includes(VizBehavior.PLACEHOLDER) && showPlaceholder) {\n return (\n <IconPlaceholder\n data-test=\"icon-placeholder\"\n icon={icon}\n width={width}\n height={height}\n backgroundColor={bgColorFromTheme}\n iconColor={iconColor}\n />\n );\n }\n\n return <Visualization {...props} />;\n };\n extendStaticWrapperProps({ Wrapper, Visualization });\n return Wrapper as ExtendedDashViz;\n};\n\nexport default withPlaceholder;\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/numberUtils\";\nexport * from \"@splunk/visualizations-shared/numberUtils\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import type { FieldEntry } from '@splunk/visualizations-shared/dataSourceUtils';\nimport { startsWithNumber } from '@splunk/visualizations-shared/numberUtils';\nimport type { DashboardVizProps, DataSource, VizConfig } from '../interfaces';\nimport { VizBehavior } from '../interfaces';\nimport { ChartEvent } from '../interfaces/ChartEvent';\n\nexport const convertToArrOfObjects = (columns: (string | any[])[], fields: any[]): any[] => {\n if (!columns?.[0]?.length) return [];\n\n const data = [];\n\n for (let i = 0; i < columns[0].length; i += 1) {\n const newObj = {};\n fields.forEach((field, index) => {\n const fieldName = getFieldName(field);\n if (columns[index][i] === '') {\n newObj[fieldName] = null;\n } else {\n newObj[fieldName] = columns[index][i];\n }\n });\n data.push(newObj);\n }\n\n return data;\n};\n\nconst getFieldName = (field: FieldEntry | string): string => (typeof field === 'string' ? field : field.name);\n\n// LTTB algorithm which can be used to downsample time series data while striving to maintain\n// the spikes and overall shape of the chart\n// Copied from https://github.com/sveinn-steinarsson/flot-downsample/blob/0815010016fc94b1bbc6a010afb8aad13ada6d0d/jquery.flot.downsample.js\n// Modifications include:\n// 1) Convert to modern JavaScript(use const, let, and use array.push to push to last element of array)\n// 2) Convert to camel case\n// 3) Convert to TS and also return the indices of the points that are in the downsampled result.\n// 4) Add a new parameter preferredDownsampleIndices that correspond to the indices of points\n// that should be used in case of a tie of the max area in a bucket\nconst largestTriangleThreeBuckets = (\n data: [Date | number, number][],\n threshold: number,\n preferredDownsampleIndices: Set<number>\n): {\n downsampledData: [Date | number, number][];\n downsampledIndices: number[];\n} => {\n const dataLength = data.length;\n const downsampledIndices = [];\n if (threshold >= dataLength || threshold === 0) {\n const allIndices = data.map((values, index) => index);\n return { downsampledData: data, downsampledIndices: allIndices }; // Nothing to do\n }\n\n const sampled: [Date | number, number][] = [];\n let sampledIndex = 0;\n\n // Bucket size. Leave room for start and end data points\n const every = (dataLength - 2) / (threshold - 2);\n\n let a = 0; // Initially a is the first point in the triangle\n let maxAreaPoint: [Date | number, number];\n let maxArea: number | undefined;\n let area: number | undefined;\n let nextA: number | undefined;\n\n sampled.push(data[a]); // Always add the first point\n downsampledIndices.push(0);\n\n // eslint-disable-next-line no-plusplus\n for (let i = 0; i < threshold - 2; i++) {\n // Calculate point average for next bucket (containing c)\n let avgX = 0;\n let avgY = 0;\n let avgRangeStart = Math.floor((i + 1) * every) + 1;\n let avgRangeEnd = Math.floor((i + 2) * every) + 1;\n avgRangeEnd = Math.min(avgRangeEnd, dataLength);\n\n const avgRangeLength = avgRangeEnd - avgRangeStart;\n\n // eslint-disable-next-line no-plusplus\n for (; avgRangeStart < avgRangeEnd; avgRangeStart++) {\n avgX += Number(data[avgRangeStart][0]); // * 1 enforces Number (value may be Date)\n avgY += data[avgRangeStart][1] * 1;\n }\n avgX /= avgRangeLength;\n avgY /= avgRangeLength;\n\n // Get the range for this bucket\n let rangeOffs = Math.floor((i + 0) * every) + 1;\n const rangeTo = Math.floor((i + 1) * every) + 1;\n\n // Point a\n const pointAX = Number(data[a][0]); // Enforce Number (value may be Date)\n const pointAY = data[a][1] * 1;\n\n // eslint-disable-next-line no-multi-assign\n maxArea = area = -1;\n let maxAreaIndex = rangeOffs;\n\n // eslint-disable-next-line no-plusplus\n for (; rangeOffs < rangeTo; rangeOffs++) {\n // Calculate triangle area over three buckets\n area =\n Math.abs(\n (pointAX - avgX) * (data[rangeOffs][1] - pointAY) -\n (pointAX - Number(data[rangeOffs][0])) * (avgY - pointAY)\n ) * 0.5;\n // Modification: try to downsample the least amount of points possible when there are multiple series\n // If all points in a bucket have the same area, prioritize the one with an x index\n // that also existed from another series so we don't add another point unnecessarily.\n // By default LTTB picks the leftmost point in the bucket\n if (area > maxArea || (area === maxArea && preferredDownsampleIndices.has(rangeOffs))) {\n maxArea = area;\n maxAreaPoint = data[rangeOffs];\n nextA = rangeOffs; // Next a is this b\n // Modification: save the index of the point with the most area\n maxAreaIndex = rangeOffs;\n }\n }\n\n // eslint-disable-next-line no-plusplus\n sampled[sampledIndex++] = maxAreaPoint; // Pick this point from the bucket\n downsampledIndices.push(maxAreaIndex);\n a = nextA; // This a is the next a (chosen b)\n }\n\n // eslint-disable-next-line no-plusplus\n sampled[sampledIndex++] = data[dataLength - 1]; // Always add last\n downsampledIndices.push(dataLength - 1);\n\n return { downsampledData: sampled, downsampledIndices };\n};\n\nexport type DownsampleOptions = { threshold: number } & Pick<DashboardVizProps, 'dataSources' | 'options'>;\n\ntype CoerceYColumnResult = {\n canDownsampleColumn: boolean;\n canLooselyCoerceSomeValues: boolean;\n coercedColumn: number[];\n};\n\n/**\n * Strictly coerces the entire column to numbers if it only consists of numeric strings or numbers. Also determines\n * if at least one of the values in the column can be loosely coerced to a number.\n * If the column cannot be strictly downsampled (if it contains nulls or non-numeric strings), returns an empty array and\n * returns that it cannot downsample the column.\n */\nconst strictlyCoerceYColumn = (\n column: (string | number)[] | number[],\n options: DownsampleOptions['options']\n): CoerceYColumnResult => {\n const isNullCoercionEnabled = options.nullValueDisplay === 'zero';\n // Splunk charting allows for numbers in formats such as negative hex that\n // Number() does not support and also allows loose coercion of hex numbers (but not other formats)\n // We want to identify columns which contain at least one value that can be loosely coerced\n const canLooselyCoerceSomeValues = column.some(\n value => startsWithNumber(`${value}`) || (isNullCoercionEnabled && value === null)\n );\n\n // If not all values in column can be strictly coerced to a number, we do not downsample\n const coercedColumn: number[] = [];\n const canDownsampleColumn = !column.some(value => {\n const coercedValue = Number(value);\n const coerceValueToZero = isNullCoercionEnabled && value === null;\n\n // if it can't be parsed or isn't safe, fail\n if (\n Number.isNaN(coercedValue) ||\n coercedValue <= Number.MIN_SAFE_INTEGER ||\n coercedValue >= Number.MAX_SAFE_INTEGER ||\n (typeof value !== 'string' && typeof value !== 'number' && !coerceValueToZero)\n ) {\n return true;\n }\n // save value and continue to next\n coercedColumn.push(coercedValue);\n return false;\n });\n\n return {\n canDownsampleColumn,\n canLooselyCoerceSomeValues,\n coercedColumn: canDownsampleColumn ? coercedColumn : [],\n };\n};\n\n/**\n * Tries to coerce the x-column to numbers or dates, if it is eligible for downsampling.\n * Only strictly increasing x-columns are eligible for downsampling.\n * If the column is not eligible for downsampling, returns an empty array.\n */\nconst strictlyCoerceXColumn = (column: (string | number)[], fieldType: string): Date[] | number[] => {\n if (fieldType === 'number') {\n const coercedXColumn = column.map(Number);\n if (isColumnStrictlyIncreasing(coercedXColumn, fieldType)) {\n return coercedXColumn;\n }\n } else if (fieldType === 'time') {\n const coercedXColumn = column.map(xValue => new Date(xValue));\n if (isColumnStrictlyIncreasing(coercedXColumn, fieldType)) {\n return coercedXColumn;\n }\n }\n return [];\n};\n\nexport const isDownsamplingEnabledForViz = ({ vizConfig }: { vizConfig: VizConfig }) => {\n return vizConfig.supports?.includes(VizBehavior.DOWNSAMPLING);\n};\n\nexport const calculateThresholdOnRangeSelect = ({\n firstIndex,\n lastIndex,\n dataSources,\n width,\n}: Pick<DashboardVizProps, 'dataSources'> & {\n firstIndex: number;\n lastIndex: number;\n width: number | string;\n}): number => {\n const window = lastIndex - firstIndex + 1;\n // eslint-disable-next-line no-unsafe-optional-chaining\n const ratio = Math.round(Number(dataSources?.primary?.data?.columns[0]?.length / window) * 10) / 10;\n return Math.round(ratio * Number(width));\n};\n\n/**\n * Calculates the downsampling threshold based on the range selection. If search zoom is enabled or there is no selection,\n * then returns the width of the visualization.\n *\n * Otherwise calculates the threshold based on the ratio of the window selected compared to the size of the non-downsampled\n * data sources. Returns null if the chart event's dataset does not match the passed in primary data source or if the chart is zoomed\n * in for a categorical chart.\n */\nexport const calculateDownsamplingThreshold = ({\n enableSearchZoom,\n dataSources,\n selectChartEvent,\n width,\n xField,\n}: {\n enableSearchZoom: boolean;\n dataSources: Record<string, DataSource> | null;\n selectChartEvent: ChartEvent<'chartRangeSelect'> | null;\n width: number;\n xField: string;\n}): number | null => {\n if (enableSearchZoom || !selectChartEvent) {\n return Number(width);\n }\n\n const primaryDataSource = dataSources?.primary;\n if (!primaryDataSource) {\n return null;\n }\n\n const { startXIndex, endXIndex, currentTarget } = selectChartEvent;\n\n try {\n const xFieldIndex = primaryDataSource?.data?.fields.findIndex(field => {\n const name = typeof field === 'string' ? field : field.name;\n return name === xField;\n });\n // .indexOf is not usable here: dataSet.fields is a union type (FieldEntry[] & string[]), so indexOf(xField) fails to type-check\n const downsampledXFieldIndex = currentTarget.dataSet?.fields.findIndex(field => field === xField); // NOSONAR typescript:S7753 - see note above\n\n if (xFieldIndex === -1 || downsampledXFieldIndex === -1) {\n return null;\n }\n\n const fullSeries = primaryDataSource?.data?.columns[xFieldIndex];\n const downsampledSeries = currentTarget.dataSet.seriesList[downsampledXFieldIndex];\n\n const firstIndex = fullSeries.indexOf(downsampledSeries[startXIndex]);\n const lastIndex = fullSeries.indexOf(downsampledSeries[endXIndex]);\n\n if (firstIndex >= 0 && lastIndex >= 0 && firstIndex <= lastIndex) {\n return calculateThresholdOnRangeSelect({\n firstIndex,\n lastIndex,\n dataSources,\n width,\n });\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error occurred while setting downsample threshold on range select event', e);\n }\n\n return null;\n};\n\nconst isColumnStrictlyIncreasing = (column: (number | Date)[], fieldType: 'number' | 'time') => {\n return column.every((value, index) => {\n if (fieldType === 'number') {\n if (Number.isNaN(value)) {\n return false;\n }\n }\n\n if (fieldType === 'time') {\n if (Number.isNaN((value as Date).getTime())) {\n return false;\n }\n }\n if (index === 0) {\n return true;\n }\n return value > column[index - 1];\n });\n};\n\n/**\n * Verifies that all of the columns that are displayed in a chart can be downsampled. Valid columns that can be\n * displayed are those that contain at least one number. We can only downsample columns that only consist of numbers.\n *\n * If all columns can be downsampled, returns the x column coerced to time/number and y columns coerced to numbers.\n * If not all columns can be downsampled, then returns empty arrays for both x and y\n */\nconst tryToCoerceAllDisplayedFields = (\n ds: DataSource,\n xField: string,\n yFields: Set<string>,\n fieldTypes: string[],\n options: DownsampleOptions['options']\n): { xColumn: Date[] | number[]; yColumns: number[][] } => {\n let xColumn: Date[] | number[] = [];\n const yColumns: number[][] = [];\n\n const canDownsample = !ds.data.fields.some((field, index) => {\n const fieldName = getFieldName(field);\n const fieldType = fieldTypes[index] ?? 'unknown';\n const column = ds.data.columns[index];\n let hasDisplayedColumnThatCantBeDownsampled = false;\n\n if (fieldName === xField) {\n xColumn = strictlyCoerceXColumn(column, fieldType);\n } else if (yFields.has(fieldName)) {\n const { coercedColumn, canLooselyCoerceSomeValues, canDownsampleColumn } = strictlyCoerceYColumn(\n ds.data.columns[index],\n options\n );\n // do not perform downsampling if a column can possibly be displayed but cannot\n // be downsampled using LTTB\n hasDisplayedColumnThatCantBeDownsampled = canLooselyCoerceSomeValues && !canDownsampleColumn;\n if (hasDisplayedColumnThatCantBeDownsampled) {\n return true;\n }\n if (canDownsampleColumn) {\n yColumns.push(coercedColumn);\n }\n }\n return false;\n });\n\n if (canDownsample) {\n return { xColumn, yColumns };\n }\n return { xColumn: [], yColumns: [] };\n};\n\nconst pickIndicesFromDataSource = (ds: DataSource, indices: Set<number>): DataSource => {\n const sortedIndices = Array.from(indices).sort((a: number, b: number) => a - b);\n const slicedColumns = [];\n ds.data.columns.forEach(column => {\n const slicedColumn = [];\n sortedIndices.forEach(index => {\n slicedColumn.push(column[index]);\n });\n slicedColumns.push(slicedColumn);\n });\n\n // update data columns with downsampled columns\n return {\n ...ds,\n data: {\n ...ds.data,\n columns: slicedColumns,\n },\n };\n};\n\nexport const downsampleDataSources = ({ dataSources, threshold, options }: DownsampleOptions) => {\n const primaryDS = dataSources?.primary;\n // only downsample time series when number of data points are over threshold\n const numPoints = primaryDS?.data?.columns[0]?.length ?? 0;\n if (Number.isNaN(threshold) || numPoints <= threshold || threshold < 2) {\n return dataSources;\n }\n\n const { xField, yFields, fieldTypes } = options;\n if (!xField || !yFields?.length || !fieldTypes?.length) {\n return dataSources;\n }\n\n const nonInternalYFields = new Set<string>(yFields.filter(yField => !yField.startsWith('_')));\n const maxPointsInDownsample = Math.min(nonInternalYFields.size * threshold, numPoints);\n\n // Do not try to downsample if there are too many downsampled pts\n // At the worst case, each series has non-overlapping downsampled pts\n // which will mean that all points will be included in the downsampled result\n // This will just lead to additional overhead due to coercing each\n // x and y field to number\n if (maxPointsInDownsample >= numPoints) {\n return dataSources;\n }\n\n const { xColumn, yColumns } = tryToCoerceAllDisplayedFields(\n primaryDS,\n xField,\n nonInternalYFields,\n fieldTypes,\n options\n );\n\n if (!yColumns.length || !xColumn.length) {\n return dataSources;\n }\n\n const downsampledDataSources = { ...dataSources };\n const downsampledIndices = new Set<number>();\n\n yColumns.forEach((yColumn, columnIndex) => {\n // perform LTTB downsampling for current series, LTTB takes an [x, y] pair\n const xyPair: [Date | number, number][] = yColumn.map((yValue, index) => {\n return [xColumn[index], yValue];\n });\n\n try {\n const { downsampledIndices: downsampledIndicesForSeries } = largestTriangleThreeBuckets(\n xyPair,\n threshold,\n downsampledIndices\n );\n downsampledIndicesForSeries.forEach(downsampleIndex => downsampledIndices.add(downsampleIndex));\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(`Error occurred while downsampling column ${columnIndex}`, e);\n }\n });\n // update data columns with downsampled columns\n downsampledDataSources.primary = pickIndicesFromDataSource(primaryDS, downsampledIndices);\n\n return downsampledDataSources;\n};\n", "import { useEffect, useRef } from 'react';\n\nexport default function usePrevious<T>(value: T): T | undefined {\n const ref = useRef<T>();\n useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n}\n", "import { useMemo } from 'react';\nimport { Options as Opts } from '@splunk/visualization-encoding/Options';\nimport type { DashboardVizProps } from '../interfaces';\n\n/**\n * Hook that evaluates the DSL for subset of a viz's options needed to determine\n * its x and y fields as well as the types of all its fields.\n */\nconst useGetXAndYFields = ({\n shouldEvaluateDSL,\n options,\n context,\n dataSources,\n}: Pick<DashboardVizProps, 'dataSources' | 'options' | 'context'> & {\n shouldEvaluateDSL: boolean;\n}) => {\n const { dataSourcesWithOnlyOnePoint, dataFrameWithOnlyOnePoint } = useMemo(() => {\n if (!shouldEvaluateDSL) {\n return {\n dataSourcesWithOnlyOnePoint: null,\n dataFrameWithOnlyOnePoint: null,\n };\n }\n\n if (!dataSources?.primary?.data?.columns?.length) {\n return {\n dataSourcesWithOnlyOnePoint: null,\n dataFrameWithOnlyOnePoint: null,\n };\n }\n const { primary: primaryDS } = dataSources;\n\n const columnsWithOnlyOnePoint = primaryDS.data.columns.map(column => {\n return [column[0]];\n });\n\n const filteredDataSources = {\n primary: {\n ...primaryDS,\n data: {\n ...primaryDS.data,\n columns: columnsWithOnlyOnePoint,\n },\n },\n };\n\n return {\n dataSourcesWithOnlyOnePoint: filteredDataSources,\n dataFrameWithOnlyOnePoint: Opts.dataFrameFromDataSource(filteredDataSources),\n };\n }, [dataSources, shouldEvaluateDSL]);\n\n const xAndYFieldsWithTypes = useMemo(() => {\n try {\n if (!dataSourcesWithOnlyOnePoint || !dataFrameWithOnlyOnePoint) {\n return options;\n }\n\n if (!options?.x || (!options?.y && !options?.y2)) {\n return options;\n }\n\n const optionsToEvaluate = {\n x: options.x,\n xField: '> x | getField()',\n y: options.y,\n yFields: options.y ? '> y | getField()' : undefined,\n y2: options.y2,\n y2Fields: options.y2 ? '> y2 | getField()' : undefined,\n fieldTypes: '> primary | getType()',\n };\n\n const {\n xField = '',\n yFields = [],\n y2Fields = [],\n fieldTypes,\n } = Opts.evaluate(\n { options: optionsToEvaluate, context },\n dataSourcesWithOnlyOnePoint,\n () => {},\n dataFrameWithOnlyOnePoint\n );\n return {\n xField,\n yFields: [...yFields, ...y2Fields],\n fieldTypes,\n };\n } catch (e) /* NOSONAR typescript:S2486 - Evaluation failure falls back to empty field data */ {\n return {\n xField: undefined,\n yFields: [],\n fieldTypes: [],\n };\n }\n }, [options, context, dataSourcesWithOnlyOnePoint, dataFrameWithOnlyOnePoint]);\n\n return xAndYFieldsWithTypes;\n};\n\nexport default useGetXAndYFields;\n", "import { useRef, useMemo, useEffect, useState } from 'react';\nimport { debounce, isEqual, pick } from 'lodash';\nimport type { DashboardVizProps } from '../interfaces';\nimport type { DownsampleOptions } from '../utils/dataUtils';\nimport { downsampleDataSources } from '../utils/dataUtils';\nimport usePrevious from './usePrevious';\nimport useGetXAndYFields from './useGetXAndYFields';\n\n// Options properties which impact/require re-downsample on change.\nconst downsampleVizOptionProperties = ['nullValueDisplay'];\n\nconst useDownsampleDataSources = ({\n dataSources,\n options,\n context,\n threshold,\n isDownsamplingEnabled,\n}: Pick<DashboardVizProps, 'dataSources' | 'options' | 'context'> & {\n threshold: number;\n isDownsamplingEnabled?: boolean;\n}) => {\n const isFirstUseEffectCall = useRef(true);\n\n const xAndYFieldsWithTypes = useGetXAndYFields({\n shouldEvaluateDSL: isDownsamplingEnabled,\n options,\n context,\n dataSources,\n });\n\n // Extract viz options that impact downsampling.\n const downsampleVizOptions = useMemo(() => pick(options, downsampleVizOptionProperties), [options]);\n const downsampleDSOptions = useMemo(\n () => ({\n ...downsampleVizOptions,\n ...xAndYFieldsWithTypes,\n }),\n [xAndYFieldsWithTypes, downsampleVizOptions]\n );\n\n const previousDownsampleDSOptions = usePrevious(downsampleDSOptions);\n const previousDataSources = usePrevious(dataSources);\n const previousThreshold = usePrevious(threshold);\n\n const [downsampledDataSources, setDownsampledDataSources] = useState(() => {\n return isDownsamplingEnabled\n ? downsampleDataSources({\n dataSources,\n threshold,\n options: downsampleDSOptions,\n })\n : dataSources;\n });\n\n const debouncedDownsampleDataSources = useMemo(() => {\n return debounce(\n (downsampleOptions: DownsampleOptions) => {\n const downsampledResult = downsampleDataSources(downsampleOptions);\n setDownsampledDataSources(downsampledResult);\n },\n 100,\n { trailing: true }\n );\n }, []);\n\n useEffect(() => {\n // don't downsample again on the use effect call that happened due to the initial render\n // this is since we already downsampled as part of the useState call\n if (isFirstUseEffectCall.current) {\n isFirstUseEffectCall.current = false;\n return;\n }\n\n if (!isDownsamplingEnabled) {\n setDownsampledDataSources(dataSources);\n return;\n }\n\n if (\n isEqual(previousDownsampleDSOptions, downsampleDSOptions) &&\n previousDataSources === dataSources &&\n previousThreshold === threshold\n ) {\n return;\n }\n\n // Debounce the downsampling so we don't have to downsample and execute DSL multiple times\n // while the viz is being resized\n debouncedDownsampleDataSources({\n dataSources,\n options: downsampleDSOptions, // Dont want to re-downsample everytime the options change\n threshold,\n });\n\n // need to detect if this runs as part of the initial render\n }, [\n dataSources,\n downsampleDSOptions,\n debouncedDownsampleDataSources,\n xAndYFieldsWithTypes,\n threshold,\n isDownsamplingEnabled,\n previousDataSources,\n previousThreshold,\n previousDownsampleDSOptions,\n ]);\n\n return downsampledDataSources;\n};\n\nexport default useDownsampleDataSources;\n", "\nimport * as defaultImport from \"@splunk/visualization-context/FeatureFlags\";\nexport * from \"@splunk/visualization-context/FeatureFlags\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as React from 'react';\nimport FeatureFlags from '@splunk/visualization-context/FeatureFlags';\n\nexport const getFeatureFlag = (\n context: React.Context<any> | null | undefined | Record<keyof typeof FeatureFlags, boolean>,\n flagName: string\n): boolean => {\n // look for feature flag in context first\n if (context && Object.keys(context).includes(flagName)) {\n return context[flagName];\n }\n\n // fall back to defaults\n if (Object.keys(FeatureFlags).includes(flagName)) {\n return FeatureFlags[flagName];\n }\n\n // fall back to false\n return false;\n};\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/trellisUtils\";\nexport * from \"@splunk/visualizations-shared/trellisUtils\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import { cloneDeep, omit } from 'lodash';\nimport { FieldEntry } from '@splunk/visualizations-shared/dataSourceUtils';\nimport {\n DataSplitMode,\n CHART,\n TIMECHART,\n STATS,\n UNKNOWN,\n extractDataSourceAggregationKeysChart,\n extractDataSourceAggregationKeysStats,\n extractSplitByFieldsChartFields,\n extractSplitByFieldsForStats,\n extractSplitByFieldsForUnknown,\n} from '@splunk/visualizations-shared/trellisUtils';\nimport { DataSource } from '../interfaces/DataSource';\n\nexport type SplitDataSource = { [key: string]: { [name: string]: DataSource } };\nexport interface DataSplitResult {\n splitDataSources: SplitDataSource;\n errorCode: 'UNKNOWN_DATA_SPLIT_MODE' | 'INVALID_SPLIT_BY_FIELD' | 'UNKNOWN';\n}\nexport const AGGREGATIONS = 'aggregations';\n\n/**\n * There can be certain SPL cmds that can produce dataSource without a specific field meta info (like group_by_rank, split_by_field etc),\n * to categorize it,\n * Example1:- `index = \"_internal\" | chart count`\n * Example2:- `index=_internal | chart avg(count), max(count)`\n * Example3:- `index = \"_internal\" | stats count`\n * Example4:- `index=_internal | stats avg(count), max(count)`\n */\nexport const dataSourcesSplitByAggregationsUnknown = (dataSource: {\n [name: string]: DataSource;\n}): DataSplitResult => {\n const fields = toFieldEntries(dataSource?.primary?.data?.fields);\n const columns = dataSource?.primary?.data?.columns;\n let splitDataSources = null;\n let errorCode = null;\n\n if (fields?.length) {\n splitDataSources = {};\n for (let i = 0; i < fields.length; i += 1) {\n const fieldName = fields[i].name;\n if (!fieldName?.startsWith('_')) {\n splitDataSources[fieldName] = cloneDeep(\n omit(dataSource, ['primary.data.fields', 'primary.data.columns'])\n );\n splitDataSources[fieldName].primary.data.fields = [fields[i]];\n splitDataSources[fieldName].primary.data.columns = [columns[i]];\n }\n }\n } else {\n errorCode = 'INVALID_SPLIT_BY_FIELD';\n }\n return { splitDataSources, errorCode };\n};\n\nconst toFieldEntries = (fields: FieldEntry[] | string[] = []): FieldEntry[] => {\n return fields.map(field => {\n if (typeof field === 'string') {\n return { name: field };\n }\n return field;\n });\n};\n\nexport const dataSourcesSplitByAggregationsTimechartAndChart = (dataSource: {\n [name: string]: DataSource;\n}): DataSplitResult => {\n const fields = toFieldEntries(dataSource?.primary?.data?.fields);\n const columns = dataSource?.primary?.data?.columns;\n let splitDataSources = null;\n let splitByFields = [];\n let errorCode = null;\n\n if (fields.length > 0) {\n splitByFields = extractDataSourceAggregationKeysChart(fields);\n }\n\n if (splitByFields && splitByFields.length > 0) {\n splitDataSources = {};\n splitByFields.forEach(splitByField => {\n splitDataSources[splitByField] = cloneDeep(\n omit(dataSource, ['primary.data.fields', 'primary.data.columns'])\n );\n splitDataSources[splitByField].primary.data.fields = [fields[0]];\n splitDataSources[splitByField].primary.data.columns = [columns[0]];\n fields.forEach((field: FieldEntry, idx) => {\n const fieldName = field?.name;\n if (\n fieldName !== '_time' &&\n !fieldName?.startsWith('_') &&\n field.data_source === splitByField\n ) {\n splitDataSources[splitByField].primary.data.fields.push(field);\n splitDataSources[splitByField].primary.data.columns.push(columns[idx]);\n }\n });\n });\n } else if (!splitByFields?.length && fields.length > 1) {\n // handle where data_source doesnot exist in fields\n // example1 :- index=_internal | timechart count\n // example2 :- index=_internal | timechart max(count) avg(count)\n splitDataSources = {};\n for (let i = 1; i < fields.length; i += 1) {\n const fieldName = fields[i].name;\n if (!fieldName?.startsWith('_')) {\n splitDataSources[fieldName] = cloneDeep(\n omit(dataSource, ['primary.data.fields', 'primary.data.columns'])\n );\n splitDataSources[fieldName].primary.data.fields = [fields[0], fields[i]];\n splitDataSources[fieldName].primary.data.columns = [columns[0], columns[i]];\n }\n }\n } else {\n errorCode = 'INVALID_SPLIT_BY_FIELD';\n }\n return { splitDataSources, errorCode };\n};\n\nexport const dataSourcesSplitByAggregationsStats = (dataSource: {\n [name: string]: DataSource;\n}): DataSplitResult => {\n const fields = toFieldEntries(dataSource?.primary?.data?.fields);\n const columns = dataSource?.primary?.data?.columns;\n let splitDataSources = null;\n let splitByFields = [];\n let errorCode = null;\n if (fields.length > 0) {\n splitByFields = extractDataSourceAggregationKeysStats(fields);\n }\n\n if (splitByFields && splitByFields.length > 0) {\n splitDataSources = {};\n splitByFields.forEach(splitByField => {\n splitDataSources[splitByField] = cloneDeep(\n omit(dataSource, ['primary.data.fields', 'primary.data.columns'])\n );\n splitDataSources[splitByField].primary.data.fields = [fields[0]];\n splitDataSources[splitByField].primary.data.columns = [columns[0]];\n const idx = fields.findIndex(field => field.name === splitByField);\n if (idx > 0) {\n splitDataSources[splitByField].primary.data.fields.push(fields[idx]);\n splitDataSources[splitByField].primary.data.columns.push(columns[idx]);\n }\n });\n } else {\n errorCode = 'INVALID_SPLIT_BY_FIELD';\n }\n return { splitDataSources, errorCode };\n};\n\nexport const dataSourcesSplitByModeTimechart = (\n dataSource: { [name: string]: DataSource },\n splitBy: string\n): DataSplitResult => {\n const fields = toFieldEntries(dataSource?.primary?.data?.fields);\n const columns = dataSource?.primary?.data?.columns;\n let splitDataSources = null;\n let splitByFields = [];\n let errorCode = null;\n if (fields.length > 0) {\n splitByFields = extractSplitByFieldsChartFields(fields);\n }\n if (splitByFields?.includes(splitBy)) {\n splitDataSources = {};\n const dataSourceKeys = extractDataSourceAggregationKeysChart(fields);\n const valueKeys = [];\n for (let i = 1; i < fields.length; i += 1) {\n // not including internal fields\n if (!fields[i].name?.startsWith('_')) {\n valueKeys.push(fields[i].splitby_value ? fields[i].splitby_value : fields[i].name);\n }\n }\n valueKeys.forEach(val => {\n splitDataSources[val] = cloneDeep(\n omit(dataSource, ['primary.data.fields', 'primary.data.columns'])\n );\n splitDataSources[val].primary.data.fields = [{ name: fields[0].name }];\n splitDataSources[val].primary.data.columns = [[...columns[0]]];\n dataSourceKeys.forEach(dsKey => {\n fields.forEach((field, idx) => {\n if (field.data_source === dsKey && (field.splitby_value === val || field.name === val)) {\n // only push valid fields for the current split by valueKey, instead of all fields.\n splitDataSources[val].primary.data.fields.push({\n name: dsKey,\n });\n splitDataSources[val].primary.data.columns.push([...columns[idx]]);\n }\n });\n });\n });\n } else {\n errorCode = 'INVALID_SPLIT_BY_FIELD';\n }\n return { splitDataSources, errorCode };\n};\n\nconst splitRowWise = (\n dataSource: { [name: string]: DataSource },\n columns,\n fields,\n otherSplitBy: string[],\n dataSourceKeys: string[],\n nonDataSourceAggregations: string[]\n) => {\n const splitDataSources = {};\n const valueKeys = cloneDeep(columns[0]);\n valueKeys.forEach((val, idx) => {\n splitDataSources[val] = cloneDeep(omit(dataSource, ['primary.data.fields', 'primary.data.columns']));\n splitDataSources[val].primary.data.fields = [];\n if (otherSplitBy.length) {\n splitDataSources[val].primary.data.fields = [{ name: otherSplitBy[0] }];\n }\n if (dataSourceKeys.length) {\n const columnValues = [[]];\n splitDataSources[val].primary.data.fields = [\n ...splitDataSources[val].primary.data.fields,\n ...dataSourceKeys.map(k => ({ name: k })),\n ];\n dataSourceKeys.forEach(() => {\n columnValues.push([]);\n });\n for (let i = 1; i <= Math.ceil((fields.length - 1) / dataSourceKeys.length); i += 1) {\n columnValues[0].push(fields[i].splitby_value ? fields[i].splitby_value : fields[i].name);\n dataSourceKeys.forEach((dskey, dsIndx) => {\n const mul = (fields.length - 1) / dataSourceKeys.length;\n columnValues[dsIndx + 1].push(columns[i + dsIndx * mul][idx]);\n });\n }\n splitDataSources[val].primary.data.columns = columnValues;\n } else if (nonDataSourceAggregations.length) {\n const columnValues = [];\n fields.forEach((aggregationField, fieldIdx) => {\n if (fieldIdx > 0) {\n splitDataSources[val].primary.data.fields.push(aggregationField);\n columnValues.push([columns[fieldIdx][idx]]);\n }\n });\n splitDataSources[val].primary.data.columns = columnValues;\n }\n });\n return splitDataSources;\n};\n\nconst splitColumnWise = (\n dataSource: { [name: string]: DataSource },\n columns,\n fields,\n otherSplitBy: string[],\n dataSourceKeys: string[]\n) => {\n const splitDataSources = {};\n const valueKeys = [];\n for (let i = 1; i < fields.length; i += 1) {\n valueKeys.push(fields[i].splitby_value ? fields[i].splitby_value : fields[i].name);\n }\n valueKeys.forEach(val => {\n splitDataSources[val] = cloneDeep(omit(dataSource, ['primary.data.fields', 'primary.data.columns']));\n splitDataSources[val].primary.data.fields = [\n { name: otherSplitBy[0] },\n ...dataSourceKeys.map(k => ({ name: k })),\n ];\n splitDataSources[val].primary.data.columns = [[...columns[0]]];\n dataSourceKeys.forEach(dsKey => {\n fields.forEach((field, idx) => {\n if (field.data_source === dsKey && (field.splitby_value === val || field.name === val)) {\n splitDataSources[val].primary.data.columns.push([...columns[idx]]);\n }\n });\n });\n });\n return splitDataSources;\n};\n\nexport const dataSourcesSplitByModeChart = (\n dataSource: { [name: string]: DataSource },\n splitBy: string\n): DataSplitResult => {\n const fields = toFieldEntries(dataSource?.primary?.data?.fields);\n const columns = dataSource?.primary?.data?.columns;\n let splitDataSources = null;\n let splitByFields = [];\n let errorCode = null;\n if (fields.length > 0) {\n splitByFields = extractSplitByFieldsChartFields(fields);\n }\n if (splitByFields?.includes(splitBy)) {\n const splitByFieldIdx = splitByFields.indexOf(splitBy);\n const otherSplitBy = splitByFields.filter(f => f !== splitBy);\n const dataSourceKeys = extractDataSourceAggregationKeysChart(fields);\n const nonDataSourceAggregations = [];\n if (\n !dataSourceKeys.length &&\n fields[0].groupby_rank === '0' &&\n fields.length &&\n !fields[1].groupby_rank\n ) {\n for (let i = 1; i < fields.length; i += 1) {\n nonDataSourceAggregations.push(fields[i].name);\n }\n }\n if (splitByFieldIdx === 0) {\n splitDataSources = splitRowWise(\n dataSource,\n columns,\n fields,\n otherSplitBy,\n dataSourceKeys,\n nonDataSourceAggregations\n );\n } else {\n splitDataSources = splitColumnWise(dataSource, columns, fields, otherSplitBy, dataSourceKeys);\n }\n } else {\n errorCode = 'INVALID_SPLIT_BY_FIELD';\n }\n return { splitDataSources, errorCode };\n};\n\n/**\n * This method does datasplitting for 'stats' and generic cmds('makeresults','table' etc - categoried as 'unknown' splitMode).\n * The main difference is for 'stats' cmd possible splitBy fields have 'group_by_rank' in field meta info, whereas for 'unknown' cmd it can be any fieldnames\n */\nexport const dataSourcesSplitByModeStatsorUnknown = (\n dataSource: { [name: string]: DataSource },\n splitBy: string,\n splitMode?: DataSplitMode\n): DataSplitResult => {\n const fields = toFieldEntries(dataSource?.primary?.data?.fields);\n const columns = dataSource?.primary?.data?.columns;\n let splitDataSources = null;\n let splitByFields = [];\n let errorCode = null;\n if (fields.length > 0) {\n splitByFields =\n splitMode === UNKNOWN\n ? extractSplitByFieldsForUnknown(fields)\n : extractSplitByFieldsForStats(fields);\n }\n const splitByIndex = fields.findIndex(field => field.name === splitBy);\n if (splitByFields?.includes(splitBy)) {\n const splitByColumn = dataSource?.primary?.data?.columns[splitByIndex];\n splitDataSources = {};\n splitByColumn.forEach((val, idx) => {\n if (splitDataSources[val]) {\n splitDataSources[val].push(idx);\n } else {\n splitDataSources[val] = [idx];\n }\n });\n const cloneFields = cloneDeep(fields);\n cloneFields.splice(splitByIndex, 1);\n const valueKeys = Object.keys(splitDataSources);\n valueKeys.forEach(val => {\n const valIndices = cloneDeep(splitDataSources[val]);\n splitDataSources[val] = cloneDeep(\n omit(dataSource, ['primary.data.fields', 'primary.data.columns'])\n );\n splitDataSources[val].primary.data.fields = cloneFields;\n splitDataSources[val].primary.data.columns = [];\n columns.forEach((col, idx) => {\n if (idx !== splitByIndex) {\n const newCol = valIndices.map(valIdx => col[valIdx]);\n splitDataSources[val].primary.data.columns.push(newCol);\n }\n });\n });\n } else {\n errorCode = 'INVALID_SPLIT_BY_FIELD';\n }\n return { splitDataSources, errorCode };\n};\n\nexport const getTrellisDataSourcesBySplitMode = (\n splitMode: DataSplitMode,\n dataSources: { [name: string]: DataSource },\n trellisSplitBy: string\n): DataSplitResult => {\n let result: DataSplitResult = null;\n try {\n if (splitMode === TIMECHART) {\n result =\n trellisSplitBy === AGGREGATIONS\n ? dataSourcesSplitByAggregationsTimechartAndChart(dataSources)\n : dataSourcesSplitByModeTimechart(dataSources, trellisSplitBy);\n } else if (splitMode === STATS) {\n result =\n trellisSplitBy === AGGREGATIONS\n ? dataSourcesSplitByAggregationsStats(dataSources)\n : dataSourcesSplitByModeStatsorUnknown(dataSources, trellisSplitBy, STATS);\n } else if (splitMode === CHART) {\n result =\n trellisSplitBy === AGGREGATIONS\n ? dataSourcesSplitByAggregationsTimechartAndChart(dataSources)\n : dataSourcesSplitByModeChart(dataSources, trellisSplitBy);\n } else if (splitMode === UNKNOWN) {\n result =\n trellisSplitBy === AGGREGATIONS\n ? dataSourcesSplitByAggregationsUnknown(dataSources)\n : dataSourcesSplitByModeStatsorUnknown(dataSources, trellisSplitBy, UNKNOWN);\n }\n } catch (ex) {\n // eslint-disable-next-line no-console\n console.error('getTrellisDataSourcesBySplitMode ', ex);\n result = { splitDataSources: null, errorCode: 'UNKNOWN' };\n }\n return result;\n};\n\n/**\n * sets legendDisplay to off when a visualization is in trellis mode and not set by the user\n * @param {Boolean} isTrellisOn\n * @param {DashboardVizOpts} options\n * @param {DashboardVizOpts} defaultOptions\n * @returns { {'legendDisplay', 'off'} or {} }\n */\nexport const turnOffLegendDisplayWhenTrellisIsOn = (\n isTrellisOn: boolean,\n options: Record<string, any>\n): Record<string, string> => {\n if (isTrellisOn && !options.legendDisplay) {\n return {\n legendDisplay: 'off',\n };\n }\n return {};\n};\n\ninterface MinMax {\n min: number;\n max: number;\n}\n\n// Returns the range extended to include every numeric point in the column.\n// Non-numeric strings become NaN and are ignored by the comparisons.\nconst extendMinMaxWithColumn = (column: Array<any>, range: MinMax): MinMax =>\n column.reduce((acc, point) => {\n const pointNumber = Number(point);\n if (Number.isNaN(pointNumber)) {\n return acc;\n }\n return {\n min: Math.min(pointNumber, acc.min),\n max: Math.max(pointNumber, acc.max),\n };\n }, range);\n\nconst calculateSharedMinMax = (splitData: SplitDataSource): Array<number> => {\n let range: MinMax = { min: Infinity, max: -Infinity };\n\n Object.keys(splitData).forEach(splitByKey => {\n const datasources = splitData[splitByKey];\n Object.keys(datasources).forEach(datasourceName => {\n const dataColumns = datasources[datasourceName].data.columns;\n dataColumns.forEach(column => {\n range = extendMinMaxWithColumn(column, range);\n });\n });\n });\n\n return [range.min, range.max];\n};\n\n/**\n * determines min and max to use in trellis mode\n * @param {splitData} SplitDataSource\n * @returns {Array<number | string>} [min, max]\n */\nexport const determineMinMax = (\n splitData: SplitDataSource,\n trellisSharedScale: boolean,\n yAxisMin: number | string,\n yAxisMax: number | string,\n stackMode?: string\n) => {\n if (!trellisSharedScale || stackMode === 'stacked100' || (yAxisMin !== 'auto' && yAxisMax !== 'auto'))\n return [yAxisMin, yAxisMax];\n\n const [sharedMin, sharedMax] = calculateSharedMinMax(splitData);\n\n const shouldUseSharedMax = sharedMax !== -Infinity && yAxisMax === 'auto';\n const shouldUseSharedMin = sharedMin !== Infinity && yAxisMin === 'auto';\n\n return [shouldUseSharedMin ? sharedMin : yAxisMin, shouldUseSharedMax ? sharedMax : yAxisMax];\n};\n", "\nimport * as defaultImport from \"@splunk/visualization-canvas\";\nexport * from \"@splunk/visualization-canvas\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import styled from 'styled-components';\n\nconst VizStyleWrapper = styled.div.attrs(({ dataTestKey }) => ({\n 'data-test': dataTestKey,\n 'data-testid': dataTestKey,\n}))`\n display: flex;\n justify-content: center;\n flex-direction: column;\n width: 100%;\n height: 100%;\n background-color: ${props => props.backgroundColor};\n`;\n\nVizStyleWrapper.displayName = 'VizStyleWrapper';\n\nexport default VizStyleWrapper;\n", "\nimport * as defaultImport from \"@splunk/react-icons/Triangle\";\nexport * from \"@splunk/react-icons/Triangle\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/propUtils\";\nexport * from \"@splunk/visualizations-shared/propUtils\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/simpleXMLOptions\";\nexport * from \"@splunk/visualizations-shared/simpleXMLOptions\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import { has, isArray, isUndefined } from 'lodash';\nimport React from 'react';\nimport styled from 'styled-components';\nimport variables from '@splunk/themes/variables';\nimport Triangle from '@splunk/react-icons/Triangle';\nimport { adjustOptionsToSchema } from '@splunk/visualizations-shared/propUtils';\nimport { getSimpleXMLOptionsForProps } from '@splunk/visualizations-shared/simpleXMLOptions';\nimport {\n BottomLegendFactory,\n Legend,\n SideLegendFactory,\n LeftLegendFactory,\n TopLegendFactory,\n ScaleConfig,\n shortenNumber,\n SeriesConfig,\n EventAnnotation,\n EventAnnotationRendererProps,\n} from '@splunk/visualization-canvas';\nimport type { LegendTruncation } from '@splunk/visualization-canvas';\nimport type { JsonColumnData } from './interfaces/DataSource';\n\ninterface ChartOptions {\n [key: string]: any;\n}\n\ninterface TransformAxisChartOptionsParams {\n originalOptions: Record<string, any>;\n optionsSchema: Record<string, any>;\n chart: string;\n convertToSCProps: (options: Record<string, any>) => Record<string, any>;\n preservedProps: string[];\n}\n\nexport const SHARED_AXIS_CHART_CANVAS_SPECIFIC_PROPS = [\n 'yAxisMin',\n 'yAxisMax',\n 'y2AxisMin',\n 'y2AxisMax',\n 'showXMajorGridLines',\n 'showYMajorGridLines',\n 'showY2MajorGridLines',\n 'showYMinorGridLines',\n 'showY2MinorGridLines',\n 'xAxisMajorTickVisibility',\n 'xAxisMajorTickSize',\n 'yAxisMajorTickVisibility',\n 'y2AxisMajorTickVisibility',\n 'yAxisMajorTickSize',\n 'y2AxisMajorTickSize',\n 'yAxisMinorTickVisibility',\n 'y2AxisMinorTickVisibility',\n 'yAxisMinorTickSize',\n 'y2AxisMinorTickSize',\n 'legendMode',\n 'legendTruncation',\n];\n\nexport const transformAxisChartOptions = ({\n originalOptions,\n optionsSchema,\n chart,\n convertToSCProps,\n preservedProps,\n}: TransformAxisChartOptionsParams): Record<string, any> => {\n const returnOptions = adjustOptionsToSchema(originalOptions, optionsSchema);\n const convertedOptions = convertToSCProps(returnOptions);\n const transformed = {\n ...getSimpleXMLOptionsForProps(convertedOptions),\n chart,\n };\n\n const preserved = preservedProps.reduce(\n (acc, prop) => {\n if (returnOptions[prop] !== undefined) {\n acc[prop] = returnOptions[prop];\n }\n return acc;\n },\n {} as Record<string, any>\n );\n\n // Preserve legendLabels as stringified JSON (converted in convertTo*SCProperties)\n if (convertedOptions.legendLabels !== undefined) {\n preserved.legendLabels = convertedOptions.legendLabels;\n }\n\n return { ...transformed, ...preserved };\n};\n\nexport const DEFAULT_LINE_WIDTH = 2;\n/**\n * Get formatted annotations - highcharts expects annotations in a specific format\n * @method getAnnotations\n * @param {Object} options\n * @param {Array} options.annotationX\n * @param {Array} options.annotationColor\n * @param {Array} options.annotationLabel\n * @returns {Array}\n */\nexport const getAnnotations = ({ annotationX, annotationColor, annotationLabel }) =>\n annotationX?.length\n ? annotationX.map((timestamp, i) => ({\n color: annotationColor?.[i],\n label: annotationLabel?.[i],\n time: timestamp,\n }))\n : [];\n\n/**\n * Get formatted annotations for canvas - viz-canvas timeseries expects annotations in a specific format\n * @method getAnnotationsForCanvas\n * @param {Object} options\n * @param {Array} options.annotationX\n * @param {Array} options.annotationColor\n * @param {Array} options.annotationLabel\n * @returns {Array}\n */\nexport const getAnnotationsForCanvas = ({\n annotationX,\n annotationColor,\n annotationLabel,\n}): EventAnnotation[] =>\n annotationX?.length\n ? annotationX.map((timestamp, i) => ({\n key: annotationLabel?.[i],\n time: timestamp,\n color: annotationColor?.[i],\n }))\n : [];\n\n/**\n * Styled Triangle component for event annotations with default severityColorNotice\n */\nconst StyledTriangle = styled(Triangle)<{ eventColor?: string }>`\n color: ${props => props.eventColor || variables.severityColorNotice(props)};\n`;\n\n/**\n * Custom event annotation renderer using Triangle icon from @splunk/react-icons\n * @method triangleEventAnnotationRenderer\n * @param {EventAnnotationRendererProps} props\n * @returns {ReactElement}\n */\nexport const triangleEventAnnotationRenderer: React.FC<EventAnnotationRendererProps> = ({\n event,\n dimensions,\n}) => {\n const eventWithColor = event as EventAnnotation & { color?: string };\n return React.createElement(StyledTriangle, {\n width: `${dimensions.width}px`,\n height: `${dimensions.height}px`,\n viewBox: '0 0 24 24',\n variant: 'filled',\n eventColor: eventWithColor.color,\n });\n};\n\n/**\n * Truncate the result set to given limit\n * @method truncateData\n * @param {Object} dataSet - dataSources.primary.data\n * @param {Number|String} truncationLimit - options['chart.resultTruncationLimit']\n * @returns {Object}\n */\nexport const truncateData = (dataSet, truncationLimit): Record<string, any[]> => {\n if (!dataSet) {\n return null;\n }\n\n const limit = Number.parseInt(truncationLimit, 10);\n if (!limit || limit <= 0) {\n return dataSet;\n }\n\n const truncatedData: Record<string, Array<string[] | number[]>> = {\n ...dataSet,\n };\n truncatedData.columns = truncatedData.columns.map(columnData =>\n columnData && Array.isArray(columnData) ? columnData.slice(0, limit) : columnData\n );\n return truncatedData;\n};\n\n/**\n * Helper method to update the option values into the values that SC accepts\n * @method mapToValues\n * @param {Object} options\n * @returns {Object}\n */\nexport const mapToValues = (optionValuesSCMapping: Record<string, any>) => options => {\n const convertedOptions: Record<string, any> = { ...options };\n Object.keys(optionValuesSCMapping).forEach(key => {\n if (has(options, key)) {\n const updatedValue = optionValuesSCMapping[key][options[key]];\n if (!isUndefined(updatedValue)) {\n convertedOptions[key] = updatedValue;\n }\n }\n });\n return convertedOptions;\n};\n\ninterface Y2AxisOptions extends ChartOptions {\n y2Fields?: string | string[];\n}\n\n/**\n * Helper method to process options related to y2Fields\n * @method convertY2AxisOptions\n * @param {Object} originalOptions\n * @returns {Object}\n */\nexport const convertY2AxisOptions = ({\n y2Fields,\n ...originalOptions\n}: Y2AxisOptions): Record<string, any> => {\n const convertedOptions: Record<string, any> = {\n ...originalOptions,\n };\n if (y2Fields) {\n convertedOptions['axisY2.enabled'] = true;\n convertedOptions['axisY2.fields'] = isArray(y2Fields) ? y2Fields.filter(Boolean).join(',') : y2Fields;\n }\n return convertedOptions;\n};\n\n/**\n * Helper method to format value for overlayFields\n * @method convertOverlayFields\n * @param {Object} originalOptions\n * @returns {Object}\n */\nexport const convertOverlayFields = (originalOptions: ChartOptions): ChartOptions => {\n const convertedOptions: ChartOptions = {\n ...originalOptions,\n };\n const { overlayFields } = originalOptions;\n if (overlayFields) {\n convertedOptions.overlayFields = Array.isArray(overlayFields)\n ? overlayFields\n .filter(Boolean)\n .map(field => field.trim())\n .join(',')\n : overlayFields;\n }\n return convertedOptions;\n};\n\n/**\n * checks whether data is multi series data\n * @param {array} data array\n * @return {Boolean}\n */\nexport const isMultiSeriesData = (data: string[] | string[][]): boolean =>\n Array.isArray(data) && Array.isArray(data[0]);\n/**\n * checks whether data is multi series data and returns value as array\n * @param {array} data array\n * @param {*} value to return as array\n * @return {array}\n */\nexport const toArrayForSeries = (data, value): any[] => {\n if (isMultiSeriesData(data)) {\n return Array.isArray(value) ? value : [value];\n }\n return [value];\n};\ninterface ConstructFieldsAndColumnsParams {\n x: string[];\n y: string[] | string[][];\n xField: string;\n yFields: string | string[];\n y2?: string[] | string[][];\n y2Fields?: string | string[];\n}\nexport const constructFieldsAndColumns = ({\n x = [],\n y = [],\n xField,\n yFields,\n y2,\n y2Fields,\n}: ConstructFieldsAndColumnsParams): JsonColumnData => {\n const columns = [x.map(String), ...toArrayForSeries(y, y).map(series => series.map(String))];\n const yFieldsArray = toArrayForSeries(y, yFields);\n const fields = [{ name: xField }, ...yFieldsArray.map(field => ({ name: field }))];\n // splunk-charting requires y2 to be part of columns\n // when y & y2 options are configured with different (mutually exclusive) series\n // y2 columns need to be added to columns\n if (y2Fields) {\n const y2FieldsArray = toArrayForSeries(y2, y2Fields);\n const y2AsArray = toArrayForSeries(y2, y2).map(series => series?.map(String));\n y2FieldsArray.forEach((y2Field, index) => {\n if (!yFieldsArray.includes(y2Field) && y2AsArray[index]) {\n fields.push({\n name: y2Field,\n });\n columns.push(y2AsArray[index]);\n }\n });\n }\n return {\n columns,\n fields,\n };\n};\n\nexport function constructAdditionalTooltipFieldsMap({ fields, columns, additionalTooltipFields }) {\n const map = {};\n\n additionalTooltipFields?.forEach(fieldName => {\n const index = fields.findIndex(f => f.name === fieldName);\n if (index !== -1) {\n map[fieldName] = columns[index];\n }\n });\n\n return map;\n}\n\n/**\n * Extracts additional tooltip values from columns and fields into an array of objects.\n * Each object in the array represents the values at a specific data point index.\n * This follows the same pattern used by Timeline visualization.\n *\n * @param columns - Array of column data\n * @param fields - Array of field definitions with name property\n * @param additionalTooltipFields - Array of field names to extract\n * @returns Array of objects, where each object maps field names to values at that index\n */\n// Type alias for a single tooltip field value record\ntype TooltipFieldRecord = Record<string, string | number | null>;\n\nexport function extractAdditionalTooltipValues(\n columns: (string | number | null)[][],\n fields: { name: string }[],\n additionalTooltipFields: string[]\n): TooltipFieldRecord[] {\n if (!additionalTooltipFields?.length || !columns?.length || !fields?.length) {\n return [];\n }\n\n // Create a mapping of field names to their column indices\n const fieldIndexMap = fields.reduce<Record<string, number>>((acc, field, index) => {\n acc[field.name] = index;\n return acc;\n }, {});\n\n const numRows = columns[0]?.length || 0;\n const additionalTooltipValuesArray: TooltipFieldRecord[] = [];\n\n for (let i = 0; i < numRows; i += 1) {\n const tooltipObject: TooltipFieldRecord = {};\n\n additionalTooltipFields.forEach(fieldName => {\n if (fieldName in fieldIndexMap) {\n const columnIndex = fieldIndexMap[fieldName];\n tooltipObject[fieldName] = columns[columnIndex]?.[i] ?? null;\n } else {\n tooltipObject[fieldName] = null;\n }\n });\n\n additionalTooltipValuesArray.push(tooltipObject);\n }\n\n return additionalTooltipValuesArray;\n}\n\nexport type AdditionalTooltipResult = TooltipFieldRecord[];\n\ntype AdditionalTooltipValuesCache = {\n columns: unknown;\n fields: unknown;\n additionalTooltipFields: string[] | undefined;\n result: AdditionalTooltipResult | undefined;\n};\n\nexport const areStringArraysEqual = (a: string[] | undefined, b: string[] | undefined): boolean => {\n if (a === b) return true;\n if (!a || !b) return false;\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i += 1) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n};\n\nexport const createAdditionalTooltipValuesMemoizer = () => {\n let cache: AdditionalTooltipValuesCache = {\n columns: null,\n fields: null,\n additionalTooltipFields: undefined,\n result: undefined,\n };\n\n return (\n columns: (string | number | null)[][],\n fields: { name: string }[],\n additionalTooltipFields: string[] | undefined\n ): AdditionalTooltipResult | undefined => {\n if (\n cache.columns === columns &&\n cache.fields === fields &&\n areStringArraysEqual(cache.additionalTooltipFields, additionalTooltipFields)\n ) {\n return cache.result;\n }\n\n let result: AdditionalTooltipResult | undefined;\n if (additionalTooltipFields?.length && columns && fields) {\n result = extractAdditionalTooltipValues(columns, fields, additionalTooltipFields);\n }\n\n cache = {\n columns,\n fields,\n additionalTooltipFields,\n result,\n };\n\n return result;\n };\n};\n\n// Note: we are making the assumption that attaching a range.select listener means the user wants to enable search zoom\n// This is because we don't know if the time range tokens being updated by the drilldown is used by the current viz.\n// In the future we are considering using a shared context to pass this information from UDF to Viz.\ninterface OptionsProps {\n events?: string[];\n selectedItemId?: string;\n [key: string]: unknown;\n}\ninterface EventHandler {\n type: string;\n options: OptionsProps;\n}\n\nexport const shouldEnableSearchZoom = (eventHandlers: EventHandler[] = [], xField = '') => {\n const rangeSelectEventHandler = eventHandlers.find(eventHandler =>\n eventHandler.options.events?.includes('range.select')\n );\n // Check if xField is _time. This is how splunk-charting distinguishes a time chart from categorical.\n // Note: search zoom will be buggy if the x axis uses timestamp values but is not _time\n const xAxisIsTime = xField === '_time';\n\n return !!rangeSelectEventHandler && xAxisIsTime;\n};\n\nconst canvasSupportedTimeSeriesCharts = new Set(['splunk.line', 'splunk.area']);\nexport const isTimeSeriesCanvasRenderSupported = (vizConfigKey: string): boolean => {\n return canvasSupportedTimeSeriesCharts.has(vizConfigKey);\n};\n\ntype ChartData = {\n fields: (string | { name: string })[];\n columns: (string | number)[][];\n};\n\n// Filter all internal fields and columns except for _time fild\nexport const filterChartDataFromInternalFields = (chartData: ChartData): ChartData => {\n const { fields, columns } = chartData;\n\n // Determine the indexes to keep\n const keepIndexes = fields.reduce<number[]>((acc, field, index) => {\n const fieldName = typeof field === 'object' ? field?.name : field;\n if (!fieldName?.startsWith('_') || fieldName === '_time') {\n acc.push(index);\n }\n return acc;\n }, []);\n\n // Filter fields and columns\n const filteredFields = keepIndexes.map(index => fields[index]);\n const filteredColumns = keepIndexes.map(index => columns[index]);\n\n return { fields: filteredFields, columns: filteredColumns };\n};\n\nexport const isTimeField = (field): boolean => {\n return (\n (typeof field === 'object' && field?.name === '_time') ||\n (typeof field === 'string' && field === '_time')\n );\n};\n\nexport const convert2DArrayToNumbers = arr => {\n return arr.map(subArray => subArray.map(element => Number.parseFloat(element)));\n};\n\nexport const convertTimeStringToUnix = arr => {\n return arr.map(timeStr => Number.parseInt((new Date(timeStr).getTime() / 1000).toFixed(0), 10));\n};\n\n/**\n * Parses an axis value that may be 'auto', null, undefined, empty string, or a numeric value.\n * Returns undefined for non-numeric values, allowing the renderer to auto-calculate the range.\n * @param {any} val - The value to parse (string, number, null, undefined)\n * @returns {number | undefined} - Parsed number or undefined\n */\nexport const parseAxisValue = (val: any): number | undefined => {\n if (val === undefined || val === null || val === 'auto' || val === '') {\n return undefined;\n }\n const num = typeof val === 'number' ? val : Number.parseFloat(val);\n return Number.isNaN(num) ? undefined : num;\n};\n\n/**\n * Parses X-axis line visibility option from string to boolean or undefined.\n * @param {string | undefined} visibility - The visibility option ('hide', 'show', or other)\n * @returns {boolean | undefined} - false for 'hide', true for 'show', undefined otherwise\n */\nexport const parseXAxisLineVisibility = (visibility?: string): boolean | undefined => {\n if (visibility === 'hide') return false;\n if (visibility === 'show') return true;\n return undefined;\n};\n\n// Legend placement logic for canvas render, used in TimeseriesChartWrapper\nexport const getLegend = (props: {\n legendDisplay: string;\n isSeriesCompare: boolean;\n legendTruncation?: LegendTruncation;\n}): Legend | false => {\n const legendPlacement = props?.legendDisplay;\n const { isSeriesCompare, legendTruncation } = props;\n const commonLegendProps = {\n center: true,\n fontSize: 12,\n largerTiles: true,\n hideSeriesValue: !isSeriesCompare, // Show values if in seriesCompare mode\n legendTruncation,\n };\n\n // \"right\" | \"left\" | \"top\" | \"bottom\" | \"off\"\n switch (legendPlacement) {\n case 'off':\n return false;\n case 'left':\n return LeftLegendFactory({\n ...commonLegendProps,\n });\n case 'bottom':\n return BottomLegendFactory({\n wrap: true,\n ...commonLegendProps,\n });\n case 'top':\n return TopLegendFactory({\n wrap: true,\n ...commonLegendProps,\n });\n // Note: By default, use right legend\n default:\n return SideLegendFactory({\n ...commonLegendProps,\n });\n }\n};\n\nexport const getComputedAxisTitles = (\n inputAxisTitle: string,\n fields: string[],\n axisTitleVisibility: 'show' | 'collapsed'\n): string => {\n if (axisTitleVisibility === 'collapsed') {\n return '';\n }\n let fieldTitle = fields.length > 1 ? '' : fields[0]; // If more than one series (multi-series) default empty title\n if (!fieldTitle) {\n fieldTitle = '';\n }\n return inputAxisTitle?.length ? inputAxisTitle.trim() : fieldTitle;\n};\n\n/**\n * Truncates Y-axis title based on available container height and font metrics\n * @param axisTitle - The title text to potentially truncate\n * @param containerSpacing - Available height/ width in pixels depending on axis orientation\n * @param fontSize - Font size in pixels (default: 12)\n * @returns Truncated title with ellipsis if needed\n */\nexport const ellipsisAxisTitle = (axisTitle: string, containerSpacing: number, fontSize = 12): string => {\n if (!axisTitle) {\n return '';\n }\n if (Number.isNaN(containerSpacing) || containerSpacing <= 0) {\n return axisTitle;\n }\n // Calculate available height for text (leave 40% margin)\n const availableHeight = containerSpacing * 0.6;\n\n // Use a generic character width ratio that works across most fonts\n // 0.55 is a reasonable average for most fonts\n const avgCharWidth = fontSize * 0.55;\n\n // Calculate maximum characters that fit in available height\n const maxChars = Math.floor(availableHeight / avgCharWidth);\n\n // If title fits, return as-is\n if (axisTitle.length <= maxChars) {\n return axisTitle;\n }\n\n // Need to truncate - use middle ellipsis for better context\n if (maxChars <= 3) {\n return '...'; // Not enough space for meaningful text\n }\n\n // Reserve 3 characters for ellipsis\n const availableChars = maxChars - 3;\n const halfChars = Math.floor(availableChars / 2);\n\n // Create truncated title with middle ellipsis\n const start = axisTitle.slice(0, halfChars);\n const end = axisTitle.slice(-halfChars);\n\n return `${start}...${end}`;\n};\n\nexport type FieldObject = {\n name: string;\n};\n\nexport const getFieldName = (field: string | FieldObject): string => {\n const fieldName = typeof field === 'object' ? field?.name : field;\n return fieldName;\n};\n\nexport const getFieldNames = (fields: (string | FieldObject)[]): string[] => {\n return fields.map(field => getFieldName(field));\n};\n\n/**\n * Type alias for axis label visibility options\n */\nexport type AxisLabelVisibility = 'hide' | 'show' | 'auto';\n\n/**\n * Returns X scale config for viz-canvas charts\n * @param label\n * @param xAxisLabelVisibility\n * @returns\n */\nexport const getXScaleConfig = (\n label: string,\n xAxisLabelVisibility?: AxisLabelVisibility,\n xAxisLabelRotation?: -90 | -45 | 0 | 45 | 90\n): ScaleConfig => {\n const xConfig: ScaleConfig = { x: {} };\n xConfig.x.label = label;\n // Set hideLabels to true when xAxisLabelVisibility is \"hide\"\n if (xAxisLabelVisibility === 'hide') {\n xConfig.x.hideLabels = true;\n }\n // Set labelRotation if provided\n if (xAxisLabelRotation !== undefined) {\n xConfig.x.labelRotation = xAxisLabelRotation;\n }\n return xConfig;\n};\n\n/**\n * Returns Y scale config for viz-canvas charts\n * @param label\n * @param yAxisAbbreviation\n * @param yAxisScale\n * @param yAxisLabelVisibility\n * @param yAxisMin\n * @param yAxisMax\n * @returns\n */\nexport const getYScaleConfig = (\n label: string,\n yAxisAbbreviation: string,\n yAxisScale?: 'linear' | 'log',\n yAxisLabelVisibility?: AxisLabelVisibility,\n yAxisMin?: number,\n yAxisMax?: number\n): ScaleConfig => {\n const scaleType = yAxisScale ?? 'linear';\n const yConfig: ScaleConfig = { y: {} };\n yConfig.y.label = label;\n yConfig.y.type = scaleType;\n if (yAxisAbbreviation !== 'none') {\n yConfig.y.tickFmt = (v): string => shortenNumber(v, 1);\n }\n // Only set fixed width when abbreviation is ON\n // When abbreviation is OFF, width remains undefined to allow dynamic sizing in uplot-utils\n // based on actual data label lengths\n if (yAxisAbbreviation !== 'none') {\n yConfig.y.width = label && label.length > 0 ? 30 : 10;\n }\n if (yAxisLabelVisibility === 'hide') {\n yConfig.y.hideLabels = true;\n }\n if (yAxisMin !== undefined || yAxisMax !== undefined) {\n yConfig.y.range = (u, dataMin, dataMax) => {\n const min = yAxisMin ?? dataMin;\n const max = yAxisMax ?? dataMax;\n return [min, max];\n };\n }\n return yConfig;\n};\n/**\n * Returns Y2 scale config for viz-canvas charts\n * @param label\n * @param axisAbbreviation\n * @param axisScale\n * @param roundAxisLabelsToInteger\n * @param y2AxisLabelVisibility\n * @param y2AxisMin\n * @param y2AxisMax\n * @returns\n */\nexport const getY2ScaleConfig = (\n label: string,\n axisAbbreviation: string,\n axisScale?: 'linear' | 'log',\n roundAxisLabelsToInteger?: boolean,\n y2AxisLabelVisibility?: AxisLabelVisibility,\n y2AxisMin?: number,\n y2AxisMax?: number\n): ScaleConfig => {\n const y2Config: ScaleConfig = { y2: {} };\n const scaleType = axisScale ?? 'linear';\n y2Config.y2.label = label;\n y2Config.y2.side = 'right';\n // Note: showGrid is intentionally not set here so that the top-level\n // showY2MajorGridLines prop can control it (defaults to false)\n y2Config.y2.type = scaleType;\n if (axisAbbreviation !== 'none') {\n y2Config.y2.tickFmt = (v): string => shortenNumber(v, 1, roundAxisLabelsToInteger);\n // Set width for abbreviated Y2 axis\n // Y2 needs more width (50px) than Y-axis (30px) because of rotated title positioning\n // Width will be used to detect abbreviation setting in padding calculations\n y2Config.y2.width = label && label.length > 0 ? 50 : 10;\n } else if (roundAxisLabelsToInteger) {\n y2Config.y2.tickFmt = (v): string =>\n roundAxisLabelsToInteger ? Math.round(v).toString() : v.toString();\n }\n if (y2AxisLabelVisibility === 'hide') {\n y2Config.y2.hideLabels = true;\n }\n if (y2AxisMin !== undefined || y2AxisMax !== undefined) {\n y2Config.y2.range = (u, dataMin, dataMax) => {\n const min = y2AxisMin ?? dataMin;\n const max = y2AxisMax ?? dataMax;\n return [min, max];\n };\n }\n return y2Config;\n};\n\n/**\n * Add series overrides for viz-canvas charts (for eg:- line width)\n */\nconst getSeriesType = (\n isOverlay: boolean,\n isAreaChart: boolean,\n isStacked: boolean\n): SeriesConfig[string]['type'] | undefined => {\n if (isOverlay) return 'line';\n if (!isAreaChart) return undefined;\n return isStacked ? 'stacked-area' : 'area';\n};\n\nconst getY2Scale = (\n field: string,\n y2fields: string[] | undefined,\n overlayFields: string[] | undefined\n): 'y' | 'y2' => {\n const assignToY2 =\n (y2fields?.length > 0 && y2fields.includes(field)) ||\n (!y2fields?.length && overlayFields?.includes(field));\n return assignToY2 ? 'y2' : 'y';\n};\n\nexport const getSeriesOverrides = (opts: {\n yfields: string[];\n y2fields?: string[];\n lineWidth?: number;\n overlayFields?: string[];\n y2Enabled?: boolean;\n nullValueMode?: 'gaps' | 'connect' | 'zero';\n markerDisplay?: 'off' | 'filled' | 'outlined';\n lineDashStyle?: string;\n lineDashStylesByField?: Record<string, string>;\n stepPosition?: 'off' | 'before' | 'after';\n stepPositionsByField?: Record<string, 'off' | 'before' | 'after'>;\n type?: 'line' | 'area';\n stackMode?: 'auto' | 'stacked' | 'stacked100';\n showLines?: boolean;\n}): SeriesConfig => {\n const {\n yfields,\n y2fields,\n lineWidth,\n overlayFields,\n y2Enabled,\n nullValueMode,\n markerDisplay,\n lineDashStyle,\n lineDashStylesByField,\n stepPosition,\n stepPositionsByField,\n type,\n stackMode,\n showLines,\n } = opts;\n const seriesConfig: SeriesConfig = {};\n\n let spanGaps: boolean | undefined;\n if (nullValueMode === 'gaps') {\n spanGaps = false;\n } else if (nullValueMode == null) {\n spanGaps = undefined;\n } else {\n spanGaps = true;\n }\n const replaceNullsWithZero = nullValueMode === 'zero' ? true : undefined;\n\n const isAreaChart = type === 'area';\n const isStacked = isAreaChart && (stackMode === 'stacked' || stackMode === 'stacked100');\n\n // Non-overlay area fields first, then overlay fields - so overlays render on top\n const areaFields = isAreaChart ? yfields.filter(f => !overlayFields?.includes(f)) : yfields;\n const overlayFieldsInOrder = overlayFields?.filter(f => yfields.includes(f)) ?? [];\n const orderedFields = isAreaChart ? [...areaFields, ...overlayFieldsInOrder] : yfields;\n\n orderedFields.forEach(field => {\n const isOverlay = overlayFields?.includes(field) ?? false;\n const isPercent = isAreaChart && stackMode === 'stacked100' && !isOverlay;\n const shouldHideAreaOutline = isAreaChart && showLines === false && !isOverlay;\n\n seriesConfig[field] = {\n overrides: {\n width: shouldHideAreaOutline ? 0 : (lineWidth ?? DEFAULT_LINE_WIDTH),\n ...(isPercent ? ({ stacking: { mode: 'percent', group: 'A' } } as object) : {}),\n } as SeriesConfig[string]['overrides'],\n };\n\n const seriesType = getSeriesType(isOverlay, isAreaChart, isStacked);\n if (seriesType !== undefined) seriesConfig[field].type = seriesType;\n\n if (spanGaps !== undefined) seriesConfig[field].overrides.spanGaps = spanGaps;\n\n if (y2Enabled) seriesConfig[field].overrides.scale = getY2Scale(field, y2fields, overlayFields);\n\n if (markerDisplay !== undefined) seriesConfig[field].markerDisplay = markerDisplay;\n\n if (!isAreaChart || isOverlay) {\n const fieldDashStyle = lineDashStylesByField?.[field] || lineDashStyle;\n if (fieldDashStyle) seriesConfig[field].lineDashStyle = fieldDashStyle as any;\n }\n\n const hasFieldStepPosition = Object.hasOwn(stepPositionsByField || {}, field);\n const fieldStepPosition = hasFieldStepPosition ? stepPositionsByField?.[field] : stepPosition;\n if (fieldStepPosition && fieldStepPosition !== 'off') {\n (seriesConfig[field] as SeriesConfig[string] & { stepPosition?: string }).stepPosition =\n fieldStepPosition;\n }\n\n if (replaceNullsWithZero !== undefined) {\n (\n seriesConfig[field] as SeriesConfig[string] & { replaceNullsWithZero?: boolean }\n ).replaceNullsWithZero = replaceNullsWithZero;\n }\n });\n\n return seriesConfig;\n};\n\n/**\n * Finds the start and end indices in time series data for a given range.\n * @param xData - Array of time values (can be ISO strings or epoch timestamps)\n * @param startValue - Start value of the range (epoch timestamp)\n * @param endValue - End value of the range (epoch timestamp)\n * @returns Object with startXIndex (first index where time >= startValue) and endXIndex (last index where time <= endValue)\n */\nexport const findRangeIndices = (\n xData: (string | number)[],\n startValue: number,\n endValue: number\n): { startXIndex: number; endXIndex: number } => {\n let startXIndex = -1;\n let endXIndex = -1;\n\n // Convert xData to epoch timestamps if they are ISO strings\n const xDataEpoch = xData.map(val => {\n if (typeof val === 'string') {\n return new Date(val).getTime() / 1000; // Convert to epoch seconds\n }\n return val;\n });\n\n // Find the closest time value >= startValue\n for (let i = 0; i < xDataEpoch.length; i += 1) {\n if (xDataEpoch[i] >= startValue) {\n startXIndex = i;\n break;\n }\n }\n\n // If no value >= startValue found, use the last index (all values are less)\n if (startXIndex === -1 && xDataEpoch.length > 0) {\n startXIndex = xDataEpoch.length - 1;\n }\n\n // Find the closest time value <= endValue\n for (let i = xDataEpoch.length - 1; i >= 0; i -= 1) {\n if (xDataEpoch[i] <= endValue) {\n endXIndex = i;\n break;\n }\n }\n\n // If no value <= endValue found, use the first index (all values are greater)\n if (endXIndex === -1 && xDataEpoch.length > 0) {\n endXIndex = 0;\n }\n\n return { startXIndex, endXIndex };\n};\n", "import { useContext } from 'react';\nimport FeatureFlagContext from '@splunk/visualization-context/FeatureFlagContext';\nimport { LAYOUT_TYPE } from '@splunk/visualization-schemas';\n\nexport const useTrellisFeatureFlagOn = (): boolean => {\n const context = useContext(FeatureFlagContext) as Record<string, unknown>;\n return Boolean(context?.visualizations_enableTrellis);\n};\n\nexport const useTrellisEnabled = (layoutType = LAYOUT_TYPE.Off): boolean => {\n const trellisFeatureEnabled = useTrellisFeatureFlagOn();\n return trellisFeatureEnabled && layoutType === LAYOUT_TYPE.Trellis;\n};\n", "import * as React from 'react';\nimport styled from 'styled-components';\n\nexport const TRELLIS_TITLE_HEIGHT = 28;\n\nconst TrellisTitleText = styled.div`\n margin-left: 10px;\n margin-right: 10px;\n padding-top: 8px;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n`;\n\nconst TrellisTitleDiv = styled.div<{\n fontColor: string;\n backgroundColor: string;\n}>`\n height: ${TRELLIS_TITLE_HEIGHT}px;\n font-size: 14px;\n font-weight: 700;\n color: ${props => props.fontColor};\n background-color: ${props => props.backgroundColor};\n box-shadow: 0 1px ${props => props.backgroundColor}; // this is added to avoid a 1px gap between title and viz divs that showed up intermittently because of pixel rounding error in chrome.\n`;\n\ninterface TrellisTitleProps {\n fontColor: string;\n backgroundColor: string;\n trellisKey: unknown;\n}\n\nconst formatTrellisKey = (value: TrellisTitleProps['trellisKey']): string => {\n if (value === null || value === undefined) {\n return '';\n }\n if (typeof value === 'string') {\n return value;\n }\n if (typeof value === 'number' || typeof value === 'boolean') {\n return value.toString();\n }\n if (typeof value === 'symbol') {\n return value.toString();\n }\n try {\n return JSON.stringify(value);\n } catch {\n // JSON.stringify throws for BigInt and circular references\n return typeof value === 'bigint' ? value.toString() : '';\n }\n};\n\nexport const TrellisTitle = (props: TrellisTitleProps) => {\n const titleText = formatTrellisKey(props.trellisKey);\n return (\n <TrellisTitleDiv\n fontColor={props.fontColor}\n backgroundColor={props.backgroundColor}\n data-test=\"trellis-title\"\n title={titleText}\n >\n <TrellisTitleText>{titleText}</TrellisTitleText>\n </TrellisTitleDiv>\n );\n};\n", "import * as React from 'react';\nimport { useMemo, useRef } from 'react';\nimport { pick } from 'lodash';\nimport styled from 'styled-components';\nimport SizeAwareWrapper from '@splunk/visualizations-shared/SizeAwareWrapper';\nimport { TimeSeriesChart, RangeSelectionProvider } from '@splunk/visualization-canvas';\nimport { toDimension } from '@splunk/visualizations-shared/style';\nimport type { GenericDataSet } from '@splunk/visualization-canvas/types/types';\nimport VizStyleWrapper from './components/VizStyleWrapper';\nimport { ChartingProps } from './Charting';\nimport {\n convert2DArrayToNumbers,\n filterChartDataFromInternalFields,\n getComputedAxisTitles,\n getFieldName,\n getFieldNames,\n getLegend,\n getSeriesOverrides,\n getXScaleConfig,\n getYScaleConfig,\n getY2ScaleConfig,\n ellipsisAxisTitle,\n getAnnotationsForCanvas,\n triangleEventAnnotationRenderer,\n parseAxisValue,\n parseXAxisLineVisibility,\n findRangeIndices,\n shouldEnableSearchZoom,\n} from './chartingUtils';\nimport { useTrellisEnabled } from './hooks/useTrellisEnabled';\nimport { TrellisTitle, TRELLIS_TITLE_HEIGHT } from './components/TrellisTitle';\n\nconst TimeSeriesChartContainer = styled.div<{\n width: number | string;\n height: number | string;\n}>`\n overflow: hidden;\n ${props => toDimension(pick(props, ['width', 'height']))};\n\n canvas {\n position: absolute !important; // This is needed for canvas element export pdf/png to work correctly\n }\n`;\n\n/**\n * Adds trellis information to event payload\n * @param payload - The event payload object to modify\n * @param trellisKey - The current trellis key value (e.g., \"200\", \"404\")\n * @param trellisSplitBy - The field name being split by (e.g., \"status\")\n */\nexport const appendTrellisToPayload = (\n payload: Record<string, unknown>,\n trellisKey?: string,\n trellisSplitBy?: string\n): Record<string, unknown> => {\n const result = { ...payload };\n if (trellisSplitBy) {\n result['trellis.name'] = trellisSplitBy;\n }\n if (trellisKey) {\n result['trellis.value'] = trellisKey;\n }\n return result;\n};\n\n/**\n * Checks if the mouseover payload has changed compared to the previous payload\n * @param currentPayload - The current event payload\n * @param previousPayload - The previous event payload\n * @returns true if the payload has changed, false otherwise\n */\nexport const hasMouseoverPayloadChanged = (\n currentPayload: Record<string, unknown>,\n previousPayload: Record<string, unknown> | null\n): boolean => {\n if (!previousPayload) {\n return true;\n }\n\n // Check if data point index changed - this is the primary indicator of hovering a different point\n if (currentPayload.index !== previousPayload.index) {\n return true;\n }\n\n // Check if seriesIndex changed\n if (currentPayload.seriesIndex !== previousPayload.seriesIndex) {\n return true;\n }\n\n // Check if trellis fields changed (for trellis mode)\n if (currentPayload['trellis.name'] !== previousPayload['trellis.name']) {\n return true;\n }\n if (currentPayload['trellis.value'] !== previousPayload['trellis.value']) {\n return true;\n }\n\n return false;\n};\n\nexport const handleClick = (chartEvent, onClick, trellisKey?: string, trellisSplitBy?: string) => {\n const payload = {\n ...pick(chartEvent, 'value', 'seriesKey'),\n name: chartEvent.seriesKey,\n };\n delete payload.seriesKey;\n\n // Add row context fields in the format: row.${fieldName}.value\n if (chartEvent.rowContext) {\n Object.assign(\n payload,\n Object.keys(chartEvent.rowContext).reduce((acc, fieldName) => {\n acc[`row.${fieldName}.value`] = chartEvent.rowContext[fieldName];\n return acc;\n }, {})\n );\n }\n\n const updatedPayload = appendTrellisToPayload(payload, trellisKey, trellisSplitBy);\n\n if (onClick) {\n onClick({\n type: 'point.click',\n originalEvent: chartEvent,\n payload: updatedPayload,\n });\n }\n};\n\nexport const handleLegendClick = (chartEvent, onClick, trellisKey?: string, trellisSplitBy?: string) => {\n const payload = {\n name: chartEvent,\n };\n\n const updatedPayload = appendTrellisToPayload(payload, trellisKey, trellisSplitBy);\n\n if (onClick) {\n onClick({\n type: 'legend.click',\n originalEvent: chartEvent,\n payload: updatedPayload,\n });\n }\n};\n\nexport const handleRangeSelection = (\n rangeEvent,\n onSelect,\n chartData,\n trellisKey?: string,\n trellisSplitBy?: string\n) => {\n // Handle undefined range (clearing selection)\n if (!rangeEvent) {\n return;\n }\n\n // Find the indices in the data array that correspond to the start and end timestamps\n const xData = chartData?.columns?.[0] || [];\n const { startXIndex, endXIndex } = findRangeIndices(xData, rangeEvent.start, rangeEvent.end);\n\n const payload = {\n startXIndex,\n startXValue: rangeEvent.start,\n endXIndex,\n endXValue: rangeEvent.end,\n };\n\n const updatedPayload = appendTrellisToPayload(payload, trellisKey, trellisSplitBy);\n\n if (onSelect) {\n onSelect({\n type: 'range.selectBeforeZoom',\n originalEvent: rangeEvent,\n payload: updatedPayload,\n });\n }\n};\n\nexport const handleRangeZoom = (\n rangeEvent,\n onSelect,\n chartData,\n trellisKey?: string,\n trellisSplitBy?: string\n) => {\n // Find the indices in the data array that correspond to the start and end timestamps\n const xData = chartData?.columns?.[0] || [];\n const { startXIndex, endXIndex } = findRangeIndices(xData, rangeEvent.start, rangeEvent.end);\n\n const payload = {\n startXIndex,\n startXValue: rangeEvent.start,\n endXIndex,\n endXValue: rangeEvent.end,\n };\n\n const updatedPayload = appendTrellisToPayload(payload, trellisKey, trellisSplitBy);\n\n if (onSelect) {\n onSelect({\n type: 'range.select',\n originalEvent: rangeEvent,\n payload: updatedPayload,\n });\n }\n};\n\nexport const handleCrosshairChange = (\n chartEvent,\n onPointMouseOver,\n onPointMouseOut,\n trellisKey?: string,\n trellisSplitBy?: string,\n lastPayload = null,\n lastOriginalEvent = null\n) => {\n // Handle mouseout when chartEvent is undefined\n if (!chartEvent) {\n if (onPointMouseOut && lastPayload) {\n onPointMouseOut({\n type: 'point.mouseout',\n originalEvent: lastOriginalEvent,\n payload: lastPayload,\n });\n }\n return { payload: null, originalEvent: null };\n }\n\n // Handle mouseover\n const payload = {\n ...pick(chartEvent, 'value', 'seriesKey', 'time', 'index', 'seriesIndex'),\n name: chartEvent.seriesKey,\n };\n delete payload.seriesKey;\n\n // Add row context fields in the format: row.${fieldName}.value\n if (chartEvent.rowContext) {\n Object.assign(\n payload,\n Object.keys(chartEvent.rowContext).reduce((acc, fieldName) => {\n acc[`row.${fieldName}.value`] = chartEvent.rowContext[fieldName];\n return acc;\n }, {})\n );\n }\n\n const updatedPayload = appendTrellisToPayload(payload, trellisKey, trellisSplitBy);\n\n if (onPointMouseOver) {\n onPointMouseOver({\n type: 'point.mouseover',\n originalEvent: chartEvent,\n payload: updatedPayload,\n });\n }\n\n // Return payload and originalEvent for caller to store\n return { payload: updatedPayload, originalEvent: chartEvent };\n};\n\n/**\n * Helper function to parse array options that may be stringified JSON or already arrays\n */\nexport const parseArrayOption = (\n value: string[] | string | undefined | null\n): string[] | undefined | null => {\n if (Array.isArray(value)) {\n return value;\n }\n if (value) {\n return JSON.parse(value);\n }\n return undefined;\n};\n\nconst getAreaOpacityForCanvas = (areaOpacity: number | undefined | null): number | undefined | null =>\n // Preserve legacy visualizations behavior where area opacity is squared to match charting output.\n areaOpacity !== undefined && areaOpacity !== null ? areaOpacity ** 2 : areaOpacity;\n\nconst parseTickIntervalOption = (\n simpleXMLValue?: string | number,\n canvasValue?: number\n): number | undefined => {\n if (simpleXMLValue) return Number(simpleXMLValue);\n if (canvasValue) return Number(canvasValue);\n return undefined;\n};\n\nconst getYAxisTitles = ({\n y2Enabled,\n yFields,\n y2Fields,\n overlayFields,\n yAxisTitleText,\n yAxisTitleVisibility,\n y2AxisTitleText,\n y2AxisTitleVisibility,\n containerHeight,\n}: {\n y2Enabled: boolean;\n yFields: string[];\n y2Fields: string[];\n overlayFields: string[];\n yAxisTitleText?: string;\n yAxisTitleVisibility?: 'show' | 'collapsed';\n y2AxisTitleText?: string;\n y2AxisTitleVisibility?: 'show' | 'collapsed';\n containerHeight: number;\n}) => {\n const yFieldsForTitle = y2Enabled ? yFields.filter(field => !y2Fields.includes(field)) : yFields;\n const fieldsForY2Axis = y2Fields.length > 0 ? y2Fields : overlayFields;\n\n const yAxisTitle = ellipsisAxisTitle(\n getComputedAxisTitles(yAxisTitleText, yFieldsForTitle, yAxisTitleVisibility),\n containerHeight\n );\n const y2AxisTitle = ellipsisAxisTitle(\n getComputedAxisTitles(y2AxisTitleText, fieldsForY2Axis, y2AxisTitleVisibility),\n containerHeight\n );\n\n return { yAxisTitle, y2AxisTitle };\n};\n\nconst TimeSeriesChartWrapper = (props: ChartingProps) => {\n const {\n width,\n height,\n chartData,\n options,\n userLocale,\n annotationX,\n annotationLabel,\n annotationColor,\n legendDisplay,\n markerDisplay,\n onClick,\n onPointMouseOver,\n onPointMouseOut,\n onSelect,\n splitByLayout,\n trellisKey,\n trellisSplitBy,\n backgroundColor,\n defaultFontColor,\n additionalTooltipValues,\n // Extract axis line visibility options from props\n xAxisLineVisibility,\n yAxisLineVisibility,\n y2AxisLineVisibility,\n // Extract showYAxisWithZero directly from props for accelerated render mode\n showYAxisWithZero: showYAxisWithZeroFromProps,\n showY2AxisWithZero: showY2AxisWithZeroFromProps,\n ...otherOptions\n } = props as ChartingProps & {\n showYAxisWithZero?: boolean;\n showY2AxisWithZero?: boolean;\n xAxisLineVisibility?: string;\n yAxisLineVisibility?: string;\n y2AxisLineVisibility?: string;\n };\n const { eventHandlers, xField: xFieldFromProps } = otherOptions;\n const trellisEnabled = useTrellisEnabled(splitByLayout);\n const {\n backgroundColor: bgColorFromOptions,\n seriesColors: seriesColorsStr,\n fieldColors,\n legendLabels: legendLabelsStr,\n legendMode,\n legendTruncation,\n 'axisTitleX.text': xAxisTitleText,\n 'axisTitleY.text': yAxisTitleText,\n 'axisTitleY2.text': y2AxisTitleText,\n 'axisTitleX.visibility': xAxisTitleVisibility,\n 'axisTitleY.visibility': yAxisTitleVisibility,\n 'axisTitleY2.visibility': y2AxisTitleVisibility,\n 'axisLabelsX.majorLabelVisibility': xAxisLabelVisibility,\n 'axisLabelsX.majorLabelStyle.rotation': xAxisLabelRotation,\n 'axisLabelsX.maxLabelParts': xAxisMaxLabelParts,\n 'axisLabelsY.majorLabelVisibility': yAxisLabelVisibility,\n 'axisLabelsY.majorUnit': yAxisMajorUnitFromSimpleXML,\n 'axisLabelsY2.majorLabelVisibility': y2AxisLabelVisibility,\n 'axisLabelsY2.majorUnit': y2AxisMajorUnitFromSimpleXML,\n 'axisY.abbreviation': yAxisAbbreviation,\n 'axisY.scale': yAxisScale,\n 'axisY2.abbreviation': y2AxisAbbreviation,\n 'axisY2.fields': y2FieldsStr,\n 'axisY2.scale': y2AxisScale,\n 'axisY2.enabled': y2Enabled,\n 'axisLabelsY2.integerUnits': y2IntegerUnits,\n 'chart.overlayFields': overlayFieldsStr,\n 'chart.nullValueMode': nullValueMode,\n 'chart.showDataLabels': showDataLabels,\n 'chart.showLines': showLines,\n 'chart.stackMode': stackMode,\n lineWidth,\n lineDashStyle,\n fieldDashStyles: lineDashStylesByFieldStr,\n stepPosition,\n fieldStepPositions: stepPositionsByFieldStr,\n yAxisMin: yAxisMinRaw,\n yAxisMax: yAxisMaxRaw,\n y2AxisMin: y2AxisMinRaw,\n y2AxisMax: y2AxisMaxRaw,\n showXMajorGridLines,\n showYMajorGridLines,\n showY2MajorGridLines,\n showYMinorGridLines,\n showY2MinorGridLines,\n showLineSmoothing,\n xAxisMajorTickVisibility,\n xAxisMajorTickSize,\n yAxisMajorTickVisibility,\n y2AxisMajorTickVisibility,\n yAxisMajorTickSize,\n y2AxisMajorTickSize,\n yAxisMajorTickInterval,\n y2AxisMajorTickInterval,\n yAxisMinorTickVisibility,\n y2AxisMinorTickVisibility,\n yAxisMinorTickSize,\n y2AxisMinorTickSize,\n showYAxisWithZero: showYAxisWithZeroFromOptions,\n showY2AxisWithZero: showY2AxisWithZeroFromOptions,\n // area only props\n areaFillOpacity: areaOpacity,\n chart: chartType,\n } = options;\n\n // Map showDataLabels back to dataValuesDisplay format for canvas mode\n const dataValuesDisplay = showDataLabels === 'none' ? 'off' : showDataLabels;\n\n // Get showYAxisWithZero from top-level props first (accelerated render mode),\n // then fall back to options object (non-accelerated render mode)\n const showYAxisWithZero = showYAxisWithZeroFromProps ?? showYAxisWithZeroFromOptions;\n const showY2AxisWithZero = showY2AxisWithZeroFromProps ?? showY2AxisWithZeroFromOptions;\n\n // Convert visibility to boolean for canvas renderer\n // X-axis ticks default to true (shown) when 'auto' or 'show', false when 'hide'\n const showXMajorTicks = xAxisMajorTickVisibility !== 'hide';\n const showYMajorTicks = yAxisMajorTickVisibility === 'show';\n const showY2MajorTicks = y2AxisMajorTickVisibility === 'show';\n const showYMinorTicks = yAxisMinorTickVisibility === 'show';\n const showY2MinorTicks = y2AxisMinorTickVisibility === 'show';\n // X-axis line defaults to true (shown) for backwards compatibility\n const showXAxisLine = parseXAxisLineVisibility(xAxisLineVisibility);\n const showYAxisLine = yAxisLineVisibility === 'show';\n const showY2AxisLine = y2AxisLineVisibility === 'show';\n\n // Parse axis values - convert strings to numbers\n const yAxisMin = parseAxisValue(yAxisMinRaw);\n const yAxisMax = parseAxisValue(yAxisMaxRaw);\n const y2AxisMin = parseAxisValue(y2AxisMinRaw);\n const y2AxisMax = parseAxisValue(y2AxisMaxRaw);\n\n // Parse tick interval and size values - convert strings to numbers\n // Priority: SimpleXML props (from transformed options) > canvas-specific props\n const yAxisMajorTickIntervalNum = parseTickIntervalOption(\n yAxisMajorUnitFromSimpleXML,\n yAxisMajorTickInterval\n );\n const y2AxisMajorTickIntervalNum = parseTickIntervalOption(\n y2AxisMajorUnitFromSimpleXML,\n y2AxisMajorTickInterval\n );\n const xAxisMajorTickSizeNum = xAxisMajorTickSize == null ? undefined : Number(xAxisMajorTickSize);\n const yAxisMajorTickSizeNum = yAxisMajorTickSize == null ? undefined : Number(yAxisMajorTickSize);\n const y2AxisMajorTickSizeNum = y2AxisMajorTickSize == null ? undefined : Number(y2AxisMajorTickSize);\n const yAxisMinorTickSizeNum = yAxisMinorTickSize == null ? undefined : Number(yAxisMinorTickSize);\n const y2AxisMinorTickSizeNum = y2AxisMinorTickSize == null ? undefined : Number(y2AxisMinorTickSize);\n // Preserve legacy visualizations behavior where area opacity is squared to match charting output.\n const areaOpacityForCanvas = getAreaOpacityForCanvas(areaOpacity);\n const seriesColors = seriesColorsStr ? JSON.parse(seriesColorsStr) : undefined;\n const seriesColorsByField = fieldColors ? JSON.parse(fieldColors) : undefined;\n const lineDashStylesByField = lineDashStylesByFieldStr ? JSON.parse(lineDashStylesByFieldStr) : undefined;\n const stepPositionsByField = stepPositionsByFieldStr ? JSON.parse(stepPositionsByFieldStr) : undefined;\n const legendLabels = parseArrayOption(legendLabelsStr);\n const bgColor = backgroundColor || bgColorFromOptions;\n const [containerWidth, setContainerWidth] = React.useState(Number(props.width));\n const [containerHeight, setContainerHeight] = React.useState(Number(props.height));\n const cachedHandleResize = React.useCallback((w, h) => {\n setContainerWidth(w);\n setContainerHeight(h);\n }, []);\n const filteredChartData = filterChartDataFromInternalFields({\n fields: chartData.fields,\n columns: chartData.seriesList,\n });\n\n const xField = getFieldName(filteredChartData.fields[0]);\n const yFields = getFieldNames(\n filteredChartData.fields.length > 1 ? filteredChartData.fields.slice(1) : []\n );\n const y2Fields = useMemo(\n () => (y2FieldsStr ? y2FieldsStr.split(',').map(f => f.trim()) : []),\n [y2FieldsStr]\n );\n const overlayFields = useMemo(\n () => (overlayFieldsStr ? overlayFieldsStr.split(',').map(f => f.trim()) : []),\n [overlayFieldsStr]\n );\n\n let xAxisTitle = getComputedAxisTitles(xAxisTitleText, [xField], xAxisTitleVisibility);\n xAxisTitle = ellipsisAxisTitle(xAxisTitle, containerWidth);\n const { yAxisTitle, y2AxisTitle } = getYAxisTitles({\n y2Enabled,\n yFields,\n y2Fields,\n overlayFields,\n yAxisTitleText,\n yAxisTitleVisibility,\n y2AxisTitleText,\n y2AxisTitleVisibility,\n containerHeight,\n });\n\n const xScaleConfig = useMemo(\n () => getXScaleConfig(xAxisTitle, xAxisLabelVisibility, xAxisLabelRotation),\n [xAxisTitle, xAxisLabelVisibility, xAxisLabelRotation]\n );\n const isStacked100 = stackMode === 'stacked100';\n const yScaleConfig = useMemo(\n () => {\n const config = getYScaleConfig(\n yAxisTitle,\n yAxisAbbreviation,\n yAxisScale,\n yAxisLabelVisibility,\n yAxisMin,\n yAxisMax\n );\n // For stacked100, override tick formatter to show percentage labels (0-100%)\n // uPlot stores stacked100 values as 0-1 fractions after processPercentStacking\n if (isStacked100) {\n config.y.tickFmt = (v): string => `${Math.round(v * 100)}%`;\n config.y.range = () => [0, 1];\n }\n return config;\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [yAxisTitle, yAxisAbbreviation, yAxisScale, yAxisLabelVisibility, yAxisMin, yAxisMax, isStacked100]\n );\n const y2ScaleConfig = useMemo(() => {\n if (y2Enabled) {\n return getY2ScaleConfig(\n y2AxisTitle,\n y2AxisAbbreviation,\n y2AxisScale,\n y2IntegerUnits,\n y2AxisLabelVisibility,\n y2AxisMin,\n y2AxisMax\n );\n }\n return {};\n }, [\n y2Enabled,\n y2AxisTitle,\n y2AxisAbbreviation,\n y2AxisScale,\n y2IntegerUnits,\n y2AxisLabelVisibility,\n y2AxisMin,\n y2AxisMax,\n ]);\n const uplotContainerElement = useRef(null);\n\n const seriesDataFormatted = [\n filteredChartData.columns[0],\n ...convert2DArrayToNumbers(filteredChartData.columns.slice(1)),\n ];\n chartData.fields = filteredChartData.fields;\n chartData.columns = seriesDataFormatted;\n\n // Map SimpleXML stackMode value ('default' | 'stacked' | 'stacked100') to getSeriesOverrides param\n const normalizedStackMode = stackMode === 'stacked' || stackMode === 'stacked100' ? stackMode : 'auto';\n\n // Memoize seriesOverrides to prevent unnecessary recreations\n const seriesOverrides = useMemo(\n () =>\n getSeriesOverrides({\n yfields: yFields,\n y2fields: y2Fields,\n lineWidth,\n overlayFields,\n y2Enabled,\n nullValueMode,\n markerDisplay,\n lineDashStyle,\n lineDashStylesByField,\n stepPosition,\n stepPositionsByField,\n type: chartType,\n stackMode: normalizedStackMode,\n showLines,\n }),\n [\n yFields,\n y2Fields,\n lineWidth,\n overlayFields,\n y2Enabled,\n nullValueMode,\n markerDisplay,\n lineDashStyle,\n lineDashStylesByField,\n stepPosition,\n stepPositionsByField,\n chartType,\n normalizedStackMode,\n showLines,\n ]\n );\n\n // Memoize annotations to prevent unnecessary recreations\n const chartingEventAnnotations = useMemo(\n () =>\n getAnnotationsForCanvas({\n annotationX,\n annotationColor,\n annotationLabel,\n }),\n [annotationX, annotationColor, annotationLabel]\n );\n\n // Memoize scaleConfig to prevent unnecessary recreations\n const scaleConfig = useMemo(\n () => ({ ...xScaleConfig, ...yScaleConfig, ...y2ScaleConfig }),\n [xScaleConfig, yScaleConfig, y2ScaleConfig]\n );\n\n // Memoize legend configuration\n // In seriesCompare mode, force the legend to the right side so that the legend's\n // fixed width (needed to prevent jitter when hover values appear/disappear) doesn't\n // affect layouts that would otherwise place it on the left.\n const isSeriesCompare = legendMode === 'seriesCompare';\n const legend = useMemo(\n () =>\n getLegend({\n legendDisplay: isSeriesCompare && legendDisplay !== 'off' ? 'right' : legendDisplay,\n isSeriesCompare,\n legendTruncation,\n }),\n [legendDisplay, isSeriesCompare, legendTruncation]\n );\n\n // Memoize click handlers to avoid recreating them on every render\n const handleChartClick = React.useCallback(\n event => {\n // Only invoke if onClick is defined to avoid unnecessary work\n if (onClick) {\n handleClick(event, onClick, trellisKey, trellisSplitBy);\n }\n },\n [onClick, trellisKey, trellisSplitBy]\n );\n\n const handleChartLegendClick = React.useCallback(\n event => {\n // Only invoke if onClick is defined to avoid unnecessary work\n if (onClick) {\n handleLegendClick(event, onClick, trellisKey, trellisSplitBy);\n }\n },\n [onClick, trellisKey, trellisSplitBy]\n );\n\n const handleChartRangeSelection = React.useCallback(\n range => {\n // Only invoke if onSelect is defined to avoid unnecessary work\n if (onSelect) {\n handleRangeSelection(range, onSelect, chartData, trellisKey, trellisSplitBy);\n }\n // Always allow range selection UI to appear, even if onSelect is undefined\n },\n [onSelect, chartData, trellisKey, trellisSplitBy]\n );\n\n const handleChartRangeZoom = React.useCallback(\n range => {\n // Only invoke if onSelect is defined to avoid unnecessary work\n if (onSelect) {\n handleRangeZoom(range, onSelect, chartData, trellisKey, trellisSplitBy);\n }\n },\n [onSelect, chartData, trellisKey, trellisSplitBy]\n );\n\n // Determine if search zoom should be enabled based on eventHandlers and xField\n // Use xFieldFromProps if available, otherwise fall back to computed xField from chartData\n const xFieldToUse = xFieldFromProps || xField;\n const enableSearchZoom = React.useMemo(\n () => shouldEnableSearchZoom(eventHandlers, xFieldToUse),\n [eventHandlers, xFieldToUse]\n );\n\n // Store the last payload and originalEvent to return on mouseout\n const lastPayloadRef = React.useRef<Record<string, any> | null>(null);\n const lastOriginalEventRef = React.useRef<any>(null);\n // Store the previous mouseover payload to check for changes\n const previousMouseoverPayloadRef = React.useRef<Record<string, unknown> | null>(null);\n // Store additionalTooltipValues in a ref to avoid chart remounts when it changes\n // The chart reads from this ref, so changes update the tooltip without remounting\n const additionalTooltipValuesRef = React.useRef(additionalTooltipValues);\n React.useEffect(() => {\n additionalTooltipValuesRef.current = additionalTooltipValues;\n }, [additionalTooltipValues]);\n\n const handleCrosshairMouseout = React.useCallback(() => {\n if (onPointMouseOut && lastPayloadRef.current) {\n onPointMouseOut({\n type: 'point.mouseout',\n originalEvent: lastOriginalEventRef.current,\n payload: lastPayloadRef.current,\n });\n }\n previousMouseoverPayloadRef.current = null;\n }, [onPointMouseOut]);\n\n const handleChartCrosshairChange = React.useCallback(\n event => {\n // Only invoke if onPointMouseOver or onPointMouseOut is defined to avoid unnecessary work\n if (!onPointMouseOver && !onPointMouseOut) {\n return;\n }\n\n // Handle mouseout when event is undefined\n if (!event) {\n handleCrosshairMouseout();\n return;\n }\n\n // Handle mouseover\n const payload = {\n ...pick(event, 'value', 'seriesKey', 'time', 'index', 'seriesIndex'),\n name: event.seriesKey,\n };\n delete payload.seriesKey;\n\n // Add row context fields in the format: row.${fieldName}.value\n if (event.rowContext) {\n Object.assign(\n payload,\n Object.keys(event.rowContext).reduce((acc, fieldName) => {\n acc[`row.${fieldName}.value`] = event.rowContext[fieldName];\n return acc;\n }, {})\n );\n }\n\n const updatedPayload = appendTrellisToPayload(payload, trellisKey, trellisSplitBy);\n\n // Check if the payload has actually changed to avoid emitting duplicate events\n if (!hasMouseoverPayloadChanged(updatedPayload, previousMouseoverPayloadRef.current)) {\n return;\n }\n\n // Store payload and originalEvent for mouseout\n lastPayloadRef.current = updatedPayload;\n lastOriginalEventRef.current = event;\n // Store current payload for next comparison\n previousMouseoverPayloadRef.current = { ...updatedPayload };\n\n if (onPointMouseOver) {\n onPointMouseOver({\n type: 'point.mouseover',\n originalEvent: event,\n payload: updatedPayload,\n });\n }\n },\n [onPointMouseOver, onPointMouseOut, trellisKey, trellisSplitBy, handleCrosshairMouseout]\n );\n\n // Create a key to reset RangeSelectionProvider when data changes\n const dataKey = `${chartData.columns[0]?.[0]}-${chartData.columns[0]?.[chartData.columns[0].length - 1]}-${chartData.columns[0]?.length}`;\n\n const memoizedChart = useMemo(() => {\n // Always pass zoom handler when onSelect exists, serverSideZoom controls behavior\n const computedOnRangeZoom = onSelect ? handleChartRangeZoom : undefined;\n\n return (\n <RangeSelectionProvider key={dataKey}>\n <TimeSeriesChart\n data={chartData as GenericDataSet}\n width={containerWidth}\n height={containerHeight}\n seriesColors={seriesColors}\n seriesColorsByField={seriesColorsByField}\n seriesConfig={seriesOverrides}\n legend={legend}\n legendLabels={legendLabels}\n legendTruncation={legendTruncation}\n isSeriesCompare={legendMode === 'seriesCompare'}\n maxSeriesFocus={legendMode === 'seriesCompare' ? 0 : undefined}\n scaleConfig={scaleConfig}\n timestampFormat=\"expanded\"\n onCrosshairClick={onClick ? handleChartClick : undefined}\n onCrosshairChange={\n onPointMouseOver || onPointMouseOut ? handleChartCrosshairChange : undefined\n }\n onSeriesClick={onClick ? handleChartLegendClick : undefined}\n onRangeSelection={handleChartRangeSelection}\n onRangeZoom={computedOnRangeZoom}\n serverSideZoom={enableSearchZoom}\n userLocale={userLocale}\n events={chartingEventAnnotations}\n eventsConfig={{ renderer: triangleEventAnnotationRenderer }}\n additionalTooltipValuesRef={additionalTooltipValuesRef}\n showXMajorGridLines={showXMajorGridLines}\n showYMajorGridLines={showYMajorGridLines}\n showY2MajorGridLines={showY2MajorGridLines}\n showYMinorGridLines={showYMinorGridLines}\n showY2MinorGridLines={showY2MinorGridLines}\n showLineSmoothing={showLineSmoothing}\n dataValuesDisplay={dataValuesDisplay}\n showXMajorTicks={showXMajorTicks}\n xAxisMajorTickSize={xAxisMajorTickSizeNum}\n showYMajorTicks={showYMajorTicks}\n showY2MajorTicks={showY2MajorTicks}\n yAxisMajorTickSize={yAxisMajorTickSizeNum}\n y2AxisMajorTickSize={y2AxisMajorTickSizeNum}\n yAxisMajorTickInterval={yAxisMajorTickIntervalNum}\n y2AxisMajorTickInterval={y2AxisMajorTickIntervalNum}\n showYMinorTicks={showYMinorTicks}\n showY2MinorTicks={showY2MinorTicks}\n yAxisMinorTickSize={yAxisMinorTickSizeNum}\n y2AxisMinorTickSize={y2AxisMinorTickSizeNum}\n showYAxisWithZero={showYAxisWithZero}\n showY2AxisWithZero={showY2AxisWithZero}\n showXAxisLine={showXAxisLine}\n showYAxisLine={showYAxisLine}\n showY2AxisLine={showY2AxisLine}\n xAxisMaxLabelParts={xAxisMaxLabelParts}\n areaOpacity={areaOpacityForCanvas}\n />\n </RangeSelectionProvider>\n );\n // Note: additionalTooltipValues passed via ref to avoid chart remount when switching stories.\n // The ref is updated via useEffect, so tooltip gets latest values without remounting chart.\n }, [\n onSelect,\n handleChartRangeZoom,\n dataKey,\n chartData,\n containerWidth,\n containerHeight,\n seriesColors,\n seriesColorsByField,\n seriesOverrides,\n legend,\n legendLabels,\n legendTruncation,\n scaleConfig,\n onClick,\n handleChartClick,\n onPointMouseOver,\n onPointMouseOut,\n handleChartCrosshairChange,\n handleChartLegendClick,\n handleChartRangeSelection,\n enableSearchZoom,\n userLocale,\n chartingEventAnnotations,\n showXMajorGridLines,\n showYMajorGridLines,\n showY2MajorGridLines,\n showYMinorGridLines,\n showY2MinorGridLines,\n showLineSmoothing,\n dataValuesDisplay,\n showXMajorTicks,\n xAxisMajorTickSizeNum,\n showYMajorTicks,\n showY2MajorTicks,\n yAxisMajorTickSizeNum,\n y2AxisMajorTickSizeNum,\n yAxisMajorTickIntervalNum,\n y2AxisMajorTickIntervalNum,\n showYMinorTicks,\n showY2MinorTicks,\n yAxisMinorTickSizeNum,\n y2AxisMinorTickSizeNum,\n showYAxisWithZero,\n showY2AxisWithZero,\n showXAxisLine,\n showYAxisLine,\n showY2AxisLine,\n legendMode,\n xAxisMaxLabelParts,\n areaOpacityForCanvas,\n ]);\n\n const memoizedVisualization = useMemo(() => {\n return <VizStyleWrapper backgroundColor={bgColor}>{memoizedChart}</VizStyleWrapper>;\n }, [bgColor, memoizedChart]);\n\n return (\n <>\n {trellisEnabled && (\n <TrellisTitle\n trellisKey={trellisKey}\n backgroundColor={bgColor}\n fontColor={defaultFontColor}\n />\n )}\n <TimeSeriesChartContainer\n height={trellisEnabled ? Number(height) - TRELLIS_TITLE_HEIGHT : height}\n width={width}\n ref={uplotContainerElement}\n data-test=\"timeseries-chart-wrapper\"\n >\n <SizeAwareWrapper width={width} height={height} onResize={cachedHandleResize} />\n {memoizedVisualization}\n </TimeSeriesChartContainer>\n </>\n );\n};\n\nexport default TimeSeriesChartWrapper;\n", "import * as React from 'react';\nimport { camelCase, has, get, defaultsDeep, noop } from 'lodash';\nimport getSettingsFromThemedProps from '@splunk/themes/getSettingsFromThemedProps';\nimport { Options as Opts } from '@splunk/visualization-encoding/Options';\nimport { withSanitizedProps } from '@splunk/visualizations-shared/SanitizeProps';\nimport type { TimezoneContextInterface } from '@splunk/visualization-context/TimezoneContext';\nimport TimezoneContext from '@splunk/visualization-context/TimezoneContext';\nimport moment from '@splunk/moment';\nimport FeatureFlagContext from '@splunk/visualization-context/FeatureFlagContext';\nimport { withTheme } from 'styled-components';\nimport { deepMergeWithArrayPrimitiveOverrides } from '@splunk/visualizations-shared/hocUtils';\nimport { pickFieldFromJSONSchema } from '@splunk/visualizations-shared/JSONSchemaUtils';\nimport AsyncDynamicOptionsEvaluator, {\n AsyncDynamicOptionsEvaluatorParams,\n} from '@splunk/async-dynamic-options-evaluator';\nimport { createGUID } from '@splunk/ui-utils/id';\nimport type { Frames } from '@splunk/visualization-encoding/EncodingExecutor';\nimport type { OptionsStanza } from '@splunk/visualization-encoding/AST';\nimport SplunkVisualization from './SplunkVisualization';\nimport type { DashboardVizProps, DataSource, VizConfig, VizProps } from './interfaces';\nimport { VizBehavior } from './interfaces/VizBehavior';\nimport { useSortingParams } from './hooks/useSorting';\nimport { usePaginationParams } from './hooks/usePagination';\nimport { useDeepMemo } from './hooks/useDeepMemo';\nimport MissingPropsMessage, { missingKeys } from './components/MissingPropsMessage';\nimport withEditModeCover from './hocs/withEditModeCover';\nimport withPlaceholder from './hocs/withPlaceholder';\nimport { ChartingProps } from './Charting';\nimport useDownsampleDataSources from './hooks/useDownsampleDataSources';\nimport { isDownsamplingEnabledForViz } from './utils/dataUtils';\nimport { getFeatureFlag } from '../common/utils/featureFlagUtils';\nimport { turnOffLegendDisplayWhenTrellisIsOn } from '../common/utils/trellisUtils';\nimport TimeSeriesChartWrapper from './TimeSeriesChartWrapper';\nimport { isTimeSeriesCanvasRenderSupported } from './chartingUtils';\n\n// Create the sanitized version once, outside the component to prevent remounting\nconst SanitizedTimeSeriesChartWrapper = withSanitizedProps(TimeSeriesChartWrapper);\n\ntype FeatureFlagContextValue = Record<string, boolean | undefined> | null;\n\ntype HOC = React.ComponentType<DashboardVizProps> & {\n config: VizConfig;\n};\nexport interface DashboardVizOpts {\n ReactViz: React.ComponentType<ChartingProps | VizProps>; // we will wrap this in DashboardViz (see const DashboardViz = ...)\n vizConfig: VizConfig;\n computeVizProps?: (props) => any;\n computeVizPropsBeforeEval?: (props) => any;\n computeDataFrames?: (args: {\n dataSources: { [key: string]: DataSource };\n options: Record<string, unknown>;\n }) => Partial<Frames>;\n disableEditModeCover?: boolean;\n useIconPlaceholder?: (\n dataSources: { [name: string]: DataSource },\n loading: boolean,\n options: Record<string, unknown>\n ) => boolean;\n}\n\nconst buildEventCallbackProps = (\n supportedEvents,\n evaluatedOptionsToUse,\n onEventTrigger\n): Record<string, unknown> => {\n const result = {};\n Object.keys(supportedEvents).forEach((eventName): void => {\n const { parentKeys, payloadKeys } = supportedEvents[eventName];\n const eventCallbackPropName = camelCase(`on.${eventName}`);\n\n let payload = {};\n if (Array.isArray(payloadKeys) && payloadKeys.length) {\n payloadKeys.forEach(p => {\n payload[p] = evaluatedOptionsToUse[p];\n });\n }\n\n result[eventCallbackPropName] = (ev): Record<string, unknown> => {\n if (ev?.payload) {\n payload = { ...ev.payload };\n }\n return onEventTrigger({\n originalEvent: ev,\n payload,\n type: eventName,\n });\n };\n\n if (parentKeys) {\n for (let i = parentKeys.length - 1; i >= 0; i -= 1) {\n const newObject = {};\n newObject[parentKeys[i]] = result[eventCallbackPropName];\n result[eventCallbackPropName] = newObject;\n }\n }\n });\n return result;\n};\n\n// Build the event callback props for a viz, splitting declared events by source.\n// 'default' events (e.g. RichText link.open) act as default handlers: injected\n// whenever the viz supports events, ungated by hasEventHandlers and in edit mode.\n// 'user' events (the default) only fire in view mode once handlers are bound.\nconst buildAllEventCallbackProps = (\n events: Record<string, { source?: 'default' | 'user' }>,\n evaluatedOptionsToUse,\n onEventTrigger,\n { supportsEvents, hasEventHandlers, mode }\n): Record<string, unknown> => {\n if (!supportsEvents) return {};\n const defaultEvents = {};\n const userEvents = {};\n Object.entries(events || {}).forEach(([eventKey, eventConfig]) => {\n (eventConfig.source === 'default' ? defaultEvents : userEvents)[eventKey] = eventConfig;\n });\n const userProps =\n hasEventHandlers && mode === 'view'\n ? buildEventCallbackProps(userEvents, evaluatedOptionsToUse, onEventTrigger)\n : {};\n return {\n ...userProps,\n ...buildEventCallbackProps(defaultEvents, evaluatedOptionsToUse, onEventTrigger),\n };\n};\n\n/**\n * @splunk/moment currently does not allow us to customize the timezone on a per\n * visualization basis. This ensures that if a timezone was provided via\n * TimezoneContext, @splunk/moment time formatting will use it.\n */\nconst applyContextTimezone = (localeContext: TimezoneContextInterface): void => {\n if (localeContext.serializedTimezone && !moment.getDefaultSplunkTimezone()) {\n moment.setDefaultSplunkTimezone(localeContext.serializedTimezone);\n }\n};\n\ninterface AsyncOptionsEvalArgs {\n visualizationID: string;\n props: DashboardVizProps;\n optionsToEvaluate: OptionsStanza;\n downsampledDataSources: Record<string, DataSource>;\n vizConfig: VizConfig;\n bypassCloneDeepOptionScope: boolean;\n lazyLoadingDataFrame: boolean;\n}\n\n/**\n * Builds the inputs for async (web worker) DSL evaluation without starting work during render.\n */\nconst getAsyncOptionsEvaluationParams = ({\n visualizationID,\n props,\n optionsToEvaluate,\n downsampledDataSources,\n vizConfig,\n bypassCloneDeepOptionScope,\n lazyLoadingDataFrame,\n}: AsyncOptionsEvalArgs): AsyncDynamicOptionsEvaluatorParams => {\n return {\n visualizationID,\n props,\n options: { ...optionsToEvaluate },\n dataSources: downsampledDataSources,\n theme: vizConfig.themes,\n bypassCloneDeepOptionScope,\n lazyLoadingDataFrame,\n };\n};\n\ninterface SyncOptionsEvalArgs {\n optionsToEvaluate: OptionsStanza;\n downsampledDataSources: Record<string, DataSource>;\n dataSourcesInState: Record<string, DataSource>;\n dataFramesInState: Frames | undefined;\n setDataSourcesInState: (dataSources: Record<string, DataSource>) => void;\n setDataFramesInState: (frames: Frames | undefined) => void;\n computeDataFrames?: DashboardVizOpts['computeDataFrames'];\n featureFlagContext: FeatureFlagContextValue;\n themeFunc: (themeVar: string) => unknown;\n}\n\n/**\n * Synchronously builds data frames (memoizing them in component state) and evaluates DSL\n * options against them. Extracted out of the DashboardViz render body to keep its cognitive\n * complexity down.\n */\nconst evaluateOptionsSync = ({\n optionsToEvaluate,\n downsampledDataSources,\n dataSourcesInState,\n dataFramesInState,\n setDataSourcesInState,\n setDataFramesInState,\n computeDataFrames,\n featureFlagContext,\n themeFunc,\n}: SyncOptionsEvalArgs): Record<string, unknown> => {\n let dataFrames: Frames | undefined = dataFramesInState;\n if (downsampledDataSources !== dataSourcesInState) {\n setDataSourcesInState(downsampledDataSources);\n dataFrames = Opts.dataFrameFromDataSource(\n downsampledDataSources,\n getFeatureFlag(featureFlagContext, 'visualizations_lazyLoadingDataFrame')\n );\n setDataFramesInState(dataFrames);\n }\n // Merge derived frames when provided\n let mergedFrames = dataFrames;\n if (computeDataFrames && dataFrames) {\n const derivedFrames = computeDataFrames({\n dataSources: downsampledDataSources,\n options: optionsToEvaluate.options as Record<string, unknown>,\n });\n mergedFrames = { ...dataFrames, ...derivedFrames };\n }\n return Opts.evaluate(\n optionsToEvaluate,\n downsampledDataSources,\n themeFunc,\n mergedFrames,\n getFeatureFlag(featureFlagContext, 'visualizations_bypassCloneDeepOptionScope')\n );\n};\n\n/**\n * hoc that wraps a pure react visualization in a Dashboard visualization\n * @param {DashboardVizOpts} opts\n * @returns {HOC}\n */\nconst withDashboardViz = (opts: DashboardVizOpts): HOC => {\n const {\n ReactViz,\n vizConfig,\n computeVizProps = () => {},\n computeVizPropsBeforeEval = () => {},\n computeDataFrames,\n disableEditModeCover,\n useIconPlaceholder,\n } = opts;\n\n // sanitizing props before sending them to reactviz.\n const SanitizedReactViz = withSanitizedProps(ReactViz); // Default assigned to ReactViz\n const defaultOptions = pickFieldFromJSONSchema(vizConfig.optionsSchema, 'default');\n\n const DashboardViz = (props: DashboardVizProps): React.ReactElement<DashboardVizProps> => {\n const {\n mode = 'view',\n hasEventHandlers,\n dataSources, // type of { [key: string]: DataSource }\n options = {},\n context = {},\n width,\n height,\n onComputedProps = noop,\n onEventTrigger = SplunkVisualization.defaults.onEventTrigger,\n theme,\n onRequestParamsChange = noop,\n } = props;\n const localeContext = React.useContext<TimezoneContextInterface>(TimezoneContext);\n applyContextTimezone(localeContext);\n\n const themeFunc = themeVar => vizConfig.themes[themeVar]?.(props);\n const {\n family: currentThemeFamily,\n colorScheme: currentThemeColorScheme,\n density: currentThemeDensity,\n } = getSettingsFromThemedProps({ theme });\n let evaluatedOptions: Record<string, unknown> = {}; // evaluatedOptions need to be initialized as an empty object\n const [evaluatedOptionsAsync, setEvaluatedOptionsAsync] = React.useState({}); // evaluatedOptions need to be initialized as an empty object\n const featureFlagContext = React.useContext<FeatureFlagContextValue>(FeatureFlagContext);\n\n const [visualizationID] = React.useState(`${vizConfig.name} - ${createGUID()}`);\n\n const [dataSourcesInState, setDataSourcesInState] = React.useState({});\n const [dataFramesInState, setDataFramesInState] = React.useState<Frames | undefined>();\n\n const [useAsyncEvaluatedOptions, setUseAsyncEvaluatedOptions] = React.useState(\n Boolean(getFeatureFlag(featureFlagContext, 'visualizations_useWebWorkersForDSL'))\n );\n const isDownsamplingEnabledByFeatureFlag = Boolean(\n featureFlagContext?.visualizations_enableDownsampling\n );\n const isTrellisFeatureFlagOn = Boolean(featureFlagContext?.visualizations_enableTrellis);\n const isTrellisOn =\n isTrellisFeatureFlagOn &&\n vizConfig?.supports?.includes(VizBehavior.TRELLIS) &&\n options?.splitByLayout === VizBehavior.TRELLIS;\n\n const isAcceleratedRenderFeatureFlagOn = Boolean(\n featureFlagContext?.visualizations_enableAcceleratedRender\n );\n const isAcceleratedRenderOn =\n isAcceleratedRenderFeatureFlagOn &&\n isTimeSeriesCanvasRenderSupported(vizConfig.key) &&\n options?.acceleratedRender === true;\n const bypassCloneDeepOptionScope = Boolean(\n getFeatureFlag(featureFlagContext, 'visualizations_bypassCloneDeepOptionScope')\n );\n const lazyLoadingDataFrame = Boolean(\n getFeatureFlag(featureFlagContext, 'visualizations_lazyLoadingDataFrame')\n );\n const optionsToEvaluate = React.useMemo(() => {\n const legendDisplay = turnOffLegendDisplayWhenTrellisIsOn(isTrellisOn, options);\n // computeVizPropsBeforeEval will run before DSL gets evaluated\n const computedOptions = computeVizPropsBeforeEval(options) ?? {};\n return {\n context: defaultsDeep({}, context, vizConfig.defaultContext),\n options: deepMergeWithArrayPrimitiveOverrides(\n {},\n legendDisplay,\n computedOptions,\n options,\n defaultOptions\n ),\n };\n }, [isTrellisOn, options, context]);\n\n const [threshold, setThreshold] = React.useState(Number(width));\n const onDownsamplingThresholdChange = React.useCallback((newThreshold: number) => {\n setThreshold(newThreshold);\n }, []);\n const isDownsamplingEnabled = React.useMemo(() => {\n return isDownsamplingEnabledByFeatureFlag && isDownsamplingEnabledForViz({ vizConfig });\n }, [isDownsamplingEnabledByFeatureFlag]);\n\n const downsamplingProps = React.useMemo(() => {\n if (!isDownsamplingEnabled) {\n return {};\n }\n return {\n onDownsamplingThresholdChange,\n originalDataSources: dataSources,\n };\n }, [dataSources, isDownsamplingEnabled, onDownsamplingThresholdChange]);\n const downsampledDataSources = useDownsampleDataSources({\n options: optionsToEvaluate.options,\n context: optionsToEvaluate.context,\n dataSources,\n threshold,\n isDownsamplingEnabled,\n });\n\n const asyncOptionsEvaluationParams = useDeepMemo(\n () =>\n getAsyncOptionsEvaluationParams({\n visualizationID,\n props,\n optionsToEvaluate,\n downsampledDataSources,\n vizConfig,\n bypassCloneDeepOptionScope,\n lazyLoadingDataFrame,\n }),\n [\n visualizationID,\n optionsToEvaluate,\n downsampledDataSources,\n vizConfig,\n bypassCloneDeepOptionScope,\n lazyLoadingDataFrame,\n currentThemeFamily,\n currentThemeColorScheme,\n currentThemeDensity,\n localeContext.serializedTimezone,\n ]\n );\n\n React.useEffect(() => {\n if (!useAsyncEvaluatedOptions) {\n return undefined;\n }\n\n let ownsEvaluation = true;\n try {\n AsyncDynamicOptionsEvaluator.evaluate(asyncOptionsEvaluationParams)\n .then(results => {\n if (ownsEvaluation) {\n setEvaluatedOptionsAsync(results.results as Record<string, unknown>);\n }\n })\n .catch(() => {\n if (ownsEvaluation) {\n setUseAsyncEvaluatedOptions(false);\n }\n });\n } catch {\n setUseAsyncEvaluatedOptions(false);\n }\n\n return () => {\n ownsEvaluation = false;\n AsyncDynamicOptionsEvaluator.reset(visualizationID);\n };\n }, [asyncOptionsEvaluationParams, useAsyncEvaluatedOptions, visualizationID]);\n\n evaluatedOptions = useDeepMemo(() => {\n try {\n if (useAsyncEvaluatedOptions) {\n return {};\n }\n return evaluateOptionsSync({\n optionsToEvaluate,\n downsampledDataSources,\n dataSourcesInState,\n dataFramesInState,\n setDataSourcesInState,\n setDataFramesInState,\n computeDataFrames,\n featureFlagContext,\n themeFunc,\n });\n } catch (e) {\n if (e instanceof Error) {\n // eslint-disable-next-line no-console\n console.error(`unexpected error evaluating options: ${e.message}`);\n }\n return {};\n }\n }, [\n currentThemeFamily,\n currentThemeColorScheme,\n currentThemeDensity,\n optionsToEvaluate,\n downsampledDataSources,\n localeContext.serializedTimezone,\n useAsyncEvaluatedOptions,\n ]);\n\n const evaluatedOptionsToUse = useAsyncEvaluatedOptions ? evaluatedOptionsAsync : evaluatedOptions;\n\n /**\n * PAGE_AND_SORT behavior\n *\n * Some visualizations, like table, requires metadata about the datasource,\n * like total number of results, current count, offset, and sort, for rendering\n * paginator and sorting direction. In this approach, the visualization\n * allow users to set 'paginateDataSourceKey' to select which datasource\n * should the visualization extract the metadata from. It defaults to 'primary' datasource.\n * The visualization config should set the PAGE_AND_SORT behavior to receive\n * 'requestParams', 'meta' and onRequestParams callback as props.\n *\n * In future, we could automatically detect which all datasources are being used\n * and bind those magically to pagination/sorting behavior.\n */\n let dataSourceMetadata = {};\n const OptionKey = 'paginateDataSourceKey';\n const optsKey = has(evaluatedOptionsToUse, OptionKey) && evaluatedOptionsToUse[OptionKey];\n const paginateDataSourceKey = typeof optsKey === 'string' ? optsKey : 'primary';\n\n const requestParams = get(dataSources, [paginateDataSourceKey, 'requestParams'], {});\n const meta = get(dataSources, [paginateDataSourceKey, 'meta'], {});\n const handleRequestParamsChange = (payload: Record<string, unknown>): void =>\n onRequestParamsChange(paginateDataSourceKey, payload);\n\n const sortParams = useSortingParams({\n requestParams,\n meta,\n onRequestParamsChange: handleRequestParamsChange,\n });\n\n const paginatorParams = usePaginationParams({\n requestParams,\n meta,\n onRequestParamsChange: handleRequestParamsChange,\n });\n\n dataSourceMetadata = {\n sortParams,\n paginatorParams,\n };\n\n if (\n !vizConfig.supports.includes(VizBehavior.PAGE_AND_SORT) &&\n !has(dataSources, paginateDataSourceKey)\n ) {\n dataSourceMetadata = {};\n }\n\n // trellis specific backgroundColor update for onComputedProps\n // if trellis is enabled following these three criteria - 1) trellis feature flag is enabled 2) vizConfig supports array has 'trellis' 3) option 'splitByLayout' is set to 'trellis\n // onComputedProps api should return back trellisBackgroundColor value for backgroundColor option to support coloring of sibling panels (for eg:- title/ description on UDF side)\n const clonedEvaluatedOptions: Record<string, unknown> = { ...evaluatedOptionsToUse };\n if (isTrellisOn) {\n clonedEvaluatedOptions.backgroundColor = clonedEvaluatedOptions?.trellisBackgroundColor;\n }\n // useEffect hook needs to be initialized before any early returns\n // this is in accordance with the order of hook calls being the same on each render https://reactjs.org/docs/hooks-rules.html#explanation\n React.useEffect((): void => {\n onComputedProps(clonedEvaluatedOptions);\n });\n\n // present warning message if any required props are missing\n const { requiredProps = [], supports } = vizConfig;\n const missing = missingKeys(requiredProps, evaluatedOptionsToUse);\n if (\n missing.length > 0 &&\n supports.includes(VizBehavior.PLACEHOLDER) &&\n vizConfig.key !== 'splunk.singlevalue' // For SV missing props msg is not displayed if required props majorValue is missing, instead this will be handled from the component, instead handled within component\n ) {\n return (\n <MissingPropsMessage\n data-test=\"missing-props-message\"\n width={width}\n height={height}\n missingProps={missing}\n backgroundColor={themeFunc('defaultBackgroundColor')}\n />\n );\n }\n\n // events\n const eventCallbackProps = buildAllEventCallbackProps(\n vizConfig.events,\n evaluatedOptionsToUse,\n onEventTrigger,\n {\n supportsEvents: vizConfig.supports.includes(VizBehavior.EVENTS),\n hasEventHandlers,\n mode,\n }\n );\n\n // compute pure viz props which are not from options\n const computedVizProps = computeVizProps({\n ...props,\n ...evaluatedOptionsToUse,\n // Align option transformation with the actual renderer selected below.\n // This prevents canvas-only option preservation from leaking into Highcharts mode.\n isAcceleratedRenderOn,\n ...eventCallbackProps,\n themeFunc,\n });\n\n // if were using webworkers and this is the first render we dont want to show a viz with missing data so we return null\n if (useAsyncEvaluatedOptions && Object.keys(evaluatedOptionsToUse).length === 0) {\n return null;\n }\n\n // if acceleratedRender mode is on, then use canvas viz\n const SanitizedViz = isAcceleratedRenderOn ? SanitizedTimeSeriesChartWrapper : SanitizedReactViz;\n\n return (\n <SanitizedViz\n {...SplunkVisualization.defaults}\n mode={mode}\n width={width || SplunkVisualization.defaults.width}\n height={height || SplunkVisualization.defaults.height}\n userLocale={localeContext}\n {...downsamplingProps}\n {...evaluatedOptionsToUse}\n {...computedVizProps}\n {...eventCallbackProps}\n {...dataSourceMetadata}\n />\n );\n };\n\n DashboardViz.propTypes = {\n ...SplunkVisualization.propTypes,\n ...ReactViz.propTypes,\n };\n\n DashboardViz.defaultProps = {\n ...ReactViz.defaultProps, // we still need ReactViz.defaultProps for the visualizations that still have them\n onEventTrigger: SplunkVisualization.defaults.onEventTrigger,\n };\n\n // attach viz config\n DashboardViz.config = vizConfig;\n\n return Object.assign(\n withTheme(withPlaceholder(withEditModeCover(DashboardViz, disableEditModeCover), useIconPlaceholder)),\n { config: vizConfig }\n );\n};\n\nexport default withDashboardViz;\n", "\nimport * as defaultImport from \"@splunk/visualization-encoding/utils/dsl\";\nexport * from \"@splunk/visualization-encoding/utils/dsl\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import { isNumber } from '@splunk/visualization-encoding/utils/types';\nimport { getFieldsFromDSL } from '@splunk/visualization-encoding/utils/dsl';\nimport { deepMergeWithArrayPrimitiveOverrides } from '@splunk/visualizations-shared/hocUtils';\nimport { pickFieldFromJSONSchema } from '@splunk/visualizations-shared/JSONSchemaUtils';\nimport { GEO_LAT_AND_LONG_FIELD } from '../../Map/PureMap/BubbleLayer';\n\nexport const columnsNullToZeros = (config, dataSources, options) => {\n const { primary } = dataSources;\n const { columns, fields } = primary.data;\n let newColumns = columns;\n const mergedOptions = deepMergeWithArrayPrimitiveOverrides(\n {},\n options,\n pickFieldFromJSONSchema(config.optionsSchema, 'default')\n );\n if (mergedOptions.layers?.[0]?.type === 'bubble') {\n const latitudeField = getFieldsFromDSL(mergedOptions.layers[0].latitude, dataSources)[0] || '';\n const longitudeField = getFieldsFromDSL(mergedOptions.layers[0].longitude, dataSources)[0] || '';\n const stringsFields = getFieldsFromDSL(\"> primary | frameBySeriesTypes('string')\", dataSources);\n const excludedFields = new Set([\n latitudeField,\n longitudeField,\n 'geobin',\n 'name',\n ...stringsFields,\n ...GEO_LAT_AND_LONG_FIELD,\n ]);\n const indicesToEvaluate = new Set(\n fields.reduce((arr, e, i) => {\n const field = typeof e === 'string' ? e : e.name.toString();\n if (!excludedFields.has(field)) {\n arr.push(i);\n }\n return arr;\n }, [])\n );\n\n newColumns = columns.map((column, i) => {\n if (indicesToEvaluate.has(i)) {\n // sanitize value and convert string to numeric numbers\n return column.map(value => (!value || !isNumber(value) ? 0 : +value));\n }\n return column;\n });\n }\n\n const modifiedDatasources = {\n ...dataSources,\n primary: {\n ...primary,\n data: {\n ...primary.data,\n columns: newColumns,\n },\n },\n };\n\n return modifiedDatasources;\n};\n", "/* eslint-disable no-sequences */\nimport * as React from 'react';\nimport { sanitizeArrayOfColors } from '@splunk/visualizations-shared/colorUtils';\nimport { deepMergeWithArrayPrimitiveOverrides } from '@splunk/visualizations-shared/hocUtils';\nimport { pickFieldFromJSONSchema } from '@splunk/visualizations-shared/JSONSchemaUtils';\nimport { DataSource } from '../common/interfaces/DataSource';\nimport type { DashboardVizProps } from '../common/interfaces';\nimport PureMap from './PureMap/PureMap';\nimport config from './config';\nimport withDashboardViz from '../common/withDashboardViz';\nimport { columnsNullToZeros } from '../common/utils/mapUtils';\nimport { GEO_BOUND_PREFIX, GEO_LAT_AND_LONG_FIELD } from './PureMap/BubbleLayer';\nimport { convertToArrOfObjects } from '../common/utils/dataUtils';\n\nconst formatLayer = (l, dataFields, dataSourceData, transformedData) => {\n // add key `geobin` to the layer object if the data is returned from geostats commands\n // to distinguish geostats commands from table commands\n const geobinIdx = dataFields.indexOf('geobin');\n const layer = l;\n\n if (geobinIdx > -1) {\n layer.geobin = dataSourceData.columns[geobinIdx];\n }\n // similarly add key `geom` to layer object for choropleths\n const geomIdx = dataFields.indexOf('geom');\n if (geomIdx > -1) {\n layer.geom = dataSourceData.columns[geomIdx].map(geomItem => {\n return typeof geomItem === 'string' ? JSON.parse(geomItem) : geomItem;\n });\n }\n // Sanitize colors within layers\n if (Object.hasOwn(layer, 'seriesColors')) {\n layer.seriesColors = Array.isArray(layer.seriesColors)\n ? sanitizeArrayOfColors(layer.seriesColors)\n : undefined;\n }\n if (Object.hasOwn(layer, 'dataColors')) {\n layer.dataColors = Array.isArray(layer.dataColors)\n ? sanitizeArrayOfColors(layer.dataColors)\n : undefined;\n }\n layer.metadata = transformedData;\n};\n\ntype MapWrapperProps = Omit<DashboardVizProps, 'dataSources' | 'width' | 'height'> & {\n dataSources?: DashboardVizProps['dataSources'];\n width?: DashboardVizProps['width'];\n height?: DashboardVizProps['height'];\n};\n\ntype MapVisualizationComponent = React.ComponentType<MapWrapperProps> & {\n config: typeof config;\n};\n\nexport const computeVizProps = (props: {\n themeFunc: any;\n theme: any;\n dataSources: any;\n layers: any;\n onOptionsChange?: any;\n title?: string;\n hasEventHandlers?: boolean;\n}): any => {\n const { themeFunc, theme, layers, dataSources, onOptionsChange, title, hasEventHandlers } = props;\n const themeColorVariables = ['controlBackgroundColor', 'controlForegroundColor'];\n const themeColors: Record<string, unknown> = {};\n themeColorVariables.forEach(variable => {\n themeColors[variable] = themeFunc(variable);\n });\n // Markers use different icons, Bubbles has different styles for light and dark theme\n // this prop is passed for that\n const themeColorScheme = theme?.splunkThemeV1 ? theme?.splunkThemeV1.colorScheme : 'dark';\n\n const dataSourceData = dataSources?.primary?.data ?? {};\n // transforms data structure into array of objects to allow for indexing metadata at layer level\n const transformedData = convertToArrOfObjects(dataSourceData.columns, dataSourceData.fields);\n\n const dataFields = (dataSourceData.fields ?? []).map(field =>\n typeof field === 'string' ? field : field.name\n );\n\n layers?.forEach(l => formatLayer(l, dataFields, dataSourceData, transformedData));\n\n return {\n ...themeColors,\n themeColorScheme,\n ...layers,\n onOptionsChange,\n title,\n hasEventHandlers,\n };\n};\n\nconst withTooltipFields = (Viz: MapVisualizationComponent): MapVisualizationComponent => {\n const VizWithTooltipFields = ({ dataSources, options, ...otherProps }: MapWrapperProps): JSX.Element => {\n if (!dataSources?.primary?.data) {\n return <Viz {...otherProps} options={options} />;\n }\n const mergedOptions = deepMergeWithArrayPrimitiveOverrides(\n {},\n options,\n pickFieldFromJSONSchema(config.optionsSchema, 'default')\n );\n if (mergedOptions.layers?.[0]) {\n if (mergedOptions.layers?.[0]?.type === 'bubble') {\n // make sure bubbleSize and bubbleSizeFields dsl evaluation happen at the last HOC \"withDashboardViz\".\n // so value/type augmentation in the HOCs stay consistent\n mergedOptions.layers[0].bubbleSizeFields = '> bubbleSize | getField()';\n mergedOptions.layers[0].dataValuesField = '> dataValues | getField()';\n mergedOptions.layers[0].tooltipHeaderFieldName = '> tooltipHeaderField | getField()';\n }\n const { fields } = dataSources.primary.data;\n if (\n Array.isArray(mergedOptions.layers[0].additionalTooltipFields) &&\n Array.isArray(fields) &&\n fields.length\n ) {\n const { bubbleSizeFields = [] } = mergedOptions.layers[0];\n const fieldNames = new Set(\n (fields as Array<string | { name: string }>).map(field =>\n typeof field === 'string' ? field : field.name\n )\n );\n mergedOptions.layers[0].additionalTooltipFields =\n mergedOptions.layers[0].additionalTooltipFields.filter(\n (field: string) => fieldNames.has(field) && !bubbleSizeFields.includes(field)\n );\n }\n }\n\n return <Viz dataSources={dataSources} options={mergedOptions} {...otherProps} />;\n };\n return Object.assign(VizWithTooltipFields, { config: Viz.config });\n};\n\n// HOC for stripping the internal fields for Maps\nconst withoutInternalFields = (Viz: MapVisualizationComponent): MapVisualizationComponent => {\n // eslint-disable-next-line react/display-name\n const VizWithoutInternalFields = ({\n dataSources,\n mode = 'view',\n width = 800,\n height = 500,\n ...otherProps\n }: MapWrapperProps): JSX.Element => {\n if (!dataSources?.primary?.data) {\n return <Viz mode={mode} width={width} height={height} {...otherProps} />;\n }\n const { primary } = dataSources;\n const { columns, fields } = primary.data;\n let newColumns = [];\n let newFields = [];\n if (fields && columns && fields.length === columns.length) {\n // computed sorted index for removal\n const indicesToRemove = new Set(\n fields.reduce((arr, e, i) => {\n const field = typeof e === 'string' ? e : e.name.toString();\n if (\n field.startsWith('_') &&\n !field.startsWith(GEO_BOUND_PREFIX) &&\n !GEO_LAT_AND_LONG_FIELD.includes(field)\n ) {\n arr.push(i);\n }\n return arr;\n }, [])\n );\n newFields = fields.filter((d, i) => !indicesToRemove.has(i));\n newColumns = columns.filter((d, i) => !indicesToRemove.has(i));\n }\n const modifiedDatasources = {\n ...dataSources,\n primary: {\n ...primary,\n data: {\n ...primary.data,\n columns: newColumns,\n fields: newFields,\n },\n },\n };\n return (\n <Viz\n dataSources={modifiedDatasources}\n mode={mode}\n width={width}\n height={height}\n {...otherProps}\n />\n );\n };\n return Object.assign(VizWithoutInternalFields, { config: Viz.config });\n};\n\n// HOC for updating all null values in data columns to zeros\n// excluding 'latitude', 'longitude' and 'geobin' and string fields\nconst withNullToZeros = (Viz: MapVisualizationComponent): MapVisualizationComponent => {\n // eslint-disable-next-line react/display-name\n const VizWithColumnsNullToZeros = ({\n dataSources,\n options,\n ...otherProps\n }: MapWrapperProps): JSX.Element => {\n if (!dataSources?.primary?.data) {\n return <Viz options={options} {...otherProps} />;\n }\n const modifiedDatasources = columnsNullToZeros(config, dataSources, options);\n return <Viz dataSources={modifiedDatasources} options={options} {...otherProps} />;\n };\n return Object.assign(VizWithColumnsNullToZeros, { config: Viz.config });\n};\n\nexport function useIconPlaceholder(dataSources: { [name: string]: DataSource }, loading: boolean): boolean {\n return loading;\n}\n\nconst MapVisualization = withoutInternalFields(\n withTooltipFields(\n withNullToZeros(\n withDashboardViz({\n ReactViz: PureMap,\n vizConfig: config,\n computeVizProps,\n disableEditModeCover: true,\n useIconPlaceholder,\n })\n )\n )\n);\nconst { themes } = config;\nexport default MapVisualization;\nexport { themes, config, PureMap };\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["themes", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "maplibre_gl_exports", "maplibre_gl_default", "defaultImport", "maplibre_gl_exports", "maplibre_gl_default", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "Tooltip_default", "defaultImport", "defaultImport", "defaultImport", "config", "size", "array", "_", "isNumberUtil", "lodashMin", "lodashMax", "Tooltip_default", "maplibre_gl_default", "Marker", "_a", "handleClick", "defaultImport", "defaultImport", "defaultImport", "_a", "_b", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "config", "themes", "defaultImport", "defaultImport", "MapIcon", "MapPlaceholderIcon", "optionsSchema", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "useIconPlaceholder", "config", "themes", "defaultImport", "Opts", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "getFieldName", "_a", "getFieldName", "config", "range", "Opts", "computeVizProps", "useIconPlaceholder", "_a", "defaultImport", "config", "_a", "_b", "themes"]
|
|
7
7
|
}
|